应用笔画宽度变换(SWT)来检测自然场景中的文本
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)来检测自然场景中的文本的更多相关文章
- 【OCR技术系列之五】自然场景文本检测技术综述(CTPN, SegLink, EAST)
文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是识别的前提条件,若文字都找不到,那何谈文字识别.今天我们首先来谈一下当今流行的文字检测技术有哪些. 文本检测不是一件简 ...
- EAST 自然场景文本检测
自然场景文本检测是图像处理的核心模块,也是一直想要接触的一个方面. 刚好看到国内的旷视今年在CVPR2017的一篇文章:EAST: An Efficient and Accurate S ...
- OpenCV_contrib里的Text(自然场景图像中的文本检测与识别)
平台:win10 x64 +VS 2015专业版 +opencv-3.x.+CMake 待解决!!!Issue说明:最近做一些字符识别的事情,想试一下opencv_contrib里的Text(自然场景 ...
- 使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别
GitHub:https://github.com/pengcao/chinese_ocr https://github.com/xiaofengShi/CHINESE-OCR |-angle 基于V ...
- Android——检测TXT文件中是否含有双字节字符
在读取双字节字符时,主要涉及到编码的选取: public static boolean isRightfulTXT(File f) { // TODO Auto-generated method st ...
- [Swift通天遁地]七、数据与安全-(11)如何检测应用程序中的内存泄露
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- bash命令检测Shell脚本中的语法错误和查看详细执行过程
(1).bash命令检测Shell脚本中的语法错误 bash -v [脚本] [root@youxi1 ~]# vim a.sh #/bin/bash sum=$[$1+$2] echoo $sum ...
- hough变换是如何检测出直线和圆的?
(I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...
- 利用Laplacian变换进行图像模糊检测
检测图片是否模糊有很多方法(这篇文章review了36种),比如FFT和variation of Laplacian等,前者在操作到时候需要定义高频的量有多低和多高来区分图片是模糊的,操作起来比较麻烦 ...
随机推荐
- 查看linux系统类型、版本、位数
如何查看LINUX操作系统是多少位的 方法1: 查看linux是不是64位的命令! file /sbin/init 结果会出来 xx bit 方法二: # getconf LONG_BIT32getc ...
- vmp3.0.9全保护拆分解析
https://mp.weixin.qq.com/s/WO6w_L-cYwH5KB2rilZdag 以下为了避免插件干扰,故采用x64dbg原版进行分析. 首先我通过检测到调试器的弹窗进行栈回溯,定位 ...
- 【Web前端开发最佳实践系列】标准的HTML代码
一.验证代码是否符合标准 优点: 标准的页面会保证浏览器正确的渲染 网页能更容易被搜索引擎搜索,提高网站的搜索排名 提高网站的易用性 网页更好维护和扩展 常用工具: W3 Validator HTML ...
- es6 - class的学习
http://es6.ruanyifeng.com/#docs/class:class Person { constructor{ //构造函数,里边放不被继承的私有属性和方法 this.proper ...
- jQuery缓存机制(四)
Data封装的方法的后面四个方法 和 dataAttr方法阅读. Data.prototype = { key: function( owner ) {}, set: function( owner, ...
- axure rp ----专业的快速原型设计工具
Axure RPAxure的发音是』Ack-sure』,RP则是』Rapid Prototyping』快速原型的缩写.Axure RP Pro是美国Axure Software Solution公司的 ...
- DRM in Android详解--转
DRM,英文全称为Digital Rights Management,译为数字版权管理.它是目前业界使用非常广泛的一种数字内容版权保护技术.随着知识产权保护受重视的程度日益提高,快速攻城略地得Andr ...
- C# CLR20R3 程序终止的几种解决方案
这是因为.NET Framework 1.0 和 1.1 这两个版本对许多未处理异常(例如,线程池线程中的未处理异常)提供支撑,而 Framework 2.0 版中,公共语言运行库允许线程中的多数未处 ...
- 笨鸟就要勤奋&专注
最近两天在找工作的过程中颇受打击,两家高大上的公司看起来就是要收集世界上最聪明的人~,在参加G家的online test之前还天真的认为一不小心通过了怎么办呢?考完试之后才发现真的是想多了,关于题目看 ...
- Linux性能监控命令——sar
介绍 sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况.系统调用的 ...