Introduction:

应用背景:是盲人辅助系统,城市环境中的机器导航等计算机视觉系统应用的重要一步。获取文本能够为许多视觉任务提供上下文的线索,并且,图像检索算法的性能很大部分都依赖于对应的文本检测模块。

意义:传统的OCR应用于扫描文本,所以其依赖于把文本从背景像素中正确分离。这对于扫描文本来说是很简单的,但是自然图像由于存在色彩噪声,模糊,遮挡,很难将文本从背景中分离。

文章提出的方法:文本有着固定的笔画宽度,利用这一特性就够从背景中将其恢复。首先求图像的笔画宽度变换即每个像素都分配了一个笔画宽度,然后利用灵活的几何推理,把有着相似比划宽度的位置都被聚合成词。这相似并不是很严格,在一定范围内变化都是可以的。

优点:1.没有提取分离每个像素特征如:颜色,梯度等,而是提出像素组的特征。2.没有使用在多尺度金字塔上滑动的窗口,而是基于自底向上的方式,把有着相似笔画宽度的像素归并成连通域。3.没有利用特定的语言信息滤除机制,所有能够用于多语言的文本检测。

previous work :

1.基于纹理的

在多个尺度上扫描图像,然后利用一些文本的特性如:高密度的边缘,文本上下的低梯度,灰度变化明显,波形的分布,离散余弦变换系数等来分类像素。其缺点是大计算量,缺乏精度。

2.基于区域的

利用像素存在着相似的特性如一样的颜色来组织像素成连通域。然后利用几何或者纹理信息来排除那些不可能是文本的连通域。优点是:同时在各个尺度检测文本,并且不限制于水平方向的文本。

The flowchart of the algorithms:

流程首先计算图像的canny 边缘,然后根据边缘的方向信息计算图像的SWT ,根据笔画宽度信息将像素聚集成连通域,利用几何推理如连通域的高宽比,连通域笔画的方差,均值,中值等来过滤连通域,将连通域聚集成文本行,最后将文本行分割成一个个词。流程的核心为SWT和滤除连通域。下面给出这些步骤的详细阐述,并给出matlab和C++代码。

1.笔画宽度变换

输入的是原始彩色图像,输出的是对每个像素都分配了笔画宽度的图像。

First pass:

这个流程图有两个问题1.如果一个点被多个路径扫描到,那么就赋值为最小路径距离即笔画宽度。2.在笔画的转弯处会出现问题,如上图右边,从上到下和从左到右的两条路径经过这点,假设从上到下的笔画宽度为50,从左到右为40,那么这点的笔画宽度为40.这显然不符合实际情况。这就需要第二次扫描。

Second pass:

第二次扫描流程是,对于所有第一次扫描到的路径,求出路径上的中值,将所有这条路径上大于中值的点全部赋值为中值。

2.像素聚成连通域

从第一步我们得到的是笔画宽度图像,这时也还是一个个像素,所以我们要根据一些规则把像素合并成区域(即自底向上的一个过程)这个主要通过改变传统连通域分析的连接条件得到,传统连通是像素周围4连接或者8连接的像素都是同一值则是同一连通域,而这里改变了这一条件,中心像素和周围像素SW(笔画宽度)比不能超过3.0.

3.连通域滤除

第二步得到的连通域中存在着许多明显不是字符的区域,我们需要根据一些先验的知识滤除这些区域。主要是根据以上几个规则

varianceSW:连通域笔画的方差。meanSW:连通域笔画的均值。aspectRatio:连通域高宽比。diameter:连通域直径。width:连通域宽。height:连通域高

1). 10<height<300;

2).varianceSW/meanSW > .5

3).diameter/medianSW >= 10

4).aspectRatio < 0.1 && aspectRatio > 10

5).连通域的boudingbox不能包含超过两个的连通部件

4.字符成文本行

同第三步一样,从上面得到的是一个个候选的字符(连通域),我们需要把字符合并成文本行。依据以下的规则

1).两个候选字符的中值笔画宽度比不超过2.0.

2).字符的宽度不超过3倍于最宽的字符宽度。

3).字符的颜色一致

5.文本行分割成词

通过文本行的水平距离直方图来分割(??)

论文地址:http://www.math.tau.ac.il/~turkel/imagepapers/text_detection.pdf

核心部分的c++和matlab见下篇。

应用笔画宽度变换(SWT)来检测自然场景中的文本的更多相关文章

  1. 【OCR技术系列之五】自然场景文本检测技术综述(CTPN, SegLink, EAST)

    文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是识别的前提条件,若文字都找不到,那何谈文字识别.今天我们首先来谈一下当今流行的文字检测技术有哪些. 文本检测不是一件简 ...

  2. EAST 自然场景文本检测

           自然场景文本检测是图像处理的核心模块,也是一直想要接触的一个方面. 刚好看到国内的旷视今年在CVPR2017的一篇文章:EAST: An Efficient and Accurate S ...

  3. OpenCV_contrib里的Text(自然场景图像中的文本检测与识别)

    平台:win10 x64 +VS 2015专业版 +opencv-3.x.+CMake 待解决!!!Issue说明:最近做一些字符识别的事情,想试一下opencv_contrib里的Text(自然场景 ...

  4. 使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别

    GitHub:https://github.com/pengcao/chinese_ocr https://github.com/xiaofengShi/CHINESE-OCR |-angle 基于V ...

  5. Android——检测TXT文件中是否含有双字节字符

    在读取双字节字符时,主要涉及到编码的选取: public static boolean isRightfulTXT(File f) { // TODO Auto-generated method st ...

  6. [Swift通天遁地]七、数据与安全-(11)如何检测应用程序中的内存泄露

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  7. bash命令检测Shell脚本中的语法错误和查看详细执行过程

    (1).bash命令检测Shell脚本中的语法错误 bash -v [脚本] [root@youxi1 ~]# vim a.sh #/bin/bash sum=$[$1+$2] echoo $sum ...

  8. hough变换是如何检测出直线和圆的?

    (I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...

  9. 利用Laplacian变换进行图像模糊检测

    检测图片是否模糊有很多方法(这篇文章review了36种),比如FFT和variation of Laplacian等,前者在操作到时候需要定义高频的量有多低和多高来区分图片是模糊的,操作起来比较麻烦 ...

随机推荐

  1. Lua中的table构造式(table constructor)

    最简单的构造式就是一个空构造式{},用于创建一个空table. 构造式还可以用于初始化数组.例如,以下语句:days = {"Sunday", "Monday" ...

  2. 三.jquery.datatables.js表格编辑与删除

    1.为了使用如图效果(即将按钮放入行内http://www.datatables.net/examples/ajax/null_data_source.html) 采用了另一个数据格式 2.后台php ...

  3. python框架---->BeautifulSoup的使用

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.一个人至少拥有一个梦想,有一个理由去坚强.心 ...

  4. Servlet 简单介绍

    来源于菜鸟教程http://www.runoob.com/servlet/servlet-intro.html Servlet 简介 Servlet 是什么? Servlet(Server Apple ...

  5. 查看iOS沙盒(SanBox)文件

    转载:http://www.2cto.com/kf/201211/169212.html 每一个iOS程序都一个自己的文件系统,这个文件系统叫应用程序沙盒(SanBox),它存放这代码以外的文件,其他 ...

  6. OGG 3节点级联时 关键参数

    目标架构为: node1-> node2->node3 node1-> node2 已经同步中,只是需要在此基础上做个node2 ->node3 的同步. 部署后发现 node ...

  7. 总结一下最近用到的技术(1)--ultraESB

    最近项目中方法用到了一些新的东西,由于之前没有用到过,现在总结一下,方便以后查阅,本篇文章介绍ultraESB,接下来的文章会介绍JsonSchema,JsonSchamaValidator,Json ...

  8. python添加Windows环境变量

    1.cmd中添加方式 SET PATH=%PATH%;c:\Program Files (x86)\Wireshark 注:如上代码添加c:\Program Files (x86)\Wireshark ...

  9. 构建Maven项目时常见错误

    一.Maven项目,右键-update project后JRE system Library变为JavaSE1.6 Dynamic Web Module 3.0 requires Java 1.6 o ...

  10. quartz 任务时间调度入门使用

    这一小节主要是针对cronschedule用法进行讨论,首先讲一下cronschedule基础知识点: 一个cronschedule至少有6个字符(或者7个字符),空格作为间隔,比如 0 * * * ...