自然场景文本识别:基于笔画宽度变换的文本检测

最近在学习自然场景(Natural Scenes)的文本识别(Text Recognition)问题,这一问题也是时下一个非常热门的亟待解决的问题。在阅读学习了一定量的文献资料之后,有了一定收获,本文提到的基于“笔画宽度变换”(Stroke Width Transform)的方法,是目前个人看到比较认同的方法。

对于自然场景的文本识别,一个很重要的问题就在于如何从自然场景的图片中检测与定位出文本信息,考虑到文本的结构、像素、几何变形、背景复杂度、图像分辨率等多种问题带来的干扰,对于文本的检测着实存在着不小的难度。就本人所学习到的文献中所提到的文本检测定位的方法主要可以分为三类:基于连通域的分析、基于边缘特征的分析、基于纹理特征的分析。然而遗憾的是,由于以上的特征并不单单只属于文本独有的特征,比如植物以及某些景物都有类似的特征,这就意味着以上的方法还具有很多后续的处理需要进行,何况存在的很大的一个问题是,对于文本的检测,以上方法是否对所有的语言具有普适性,有待研究。

本文所讨论的基于笔画宽度变换的方法,是个人在学习中看到的比较推崇的方法。这一方法的一个很大的优势在于,笔画特征基本上是属于文字独有的特征(当然也不排除某些视觉景物的干扰,需要后续操作加以剔除),而基于笔画特征,对于不同语言的文本是普适的,这是一个极大的优势。这一方法的一个基础的依据在于:统一的文本基本具有统一的笔画宽度。本文主要对Microsoft Corporation的文献Detecting
Text in Natural Scenes with Stroke Width Transform
 进行一定的学习,并加以总结,作为分享。

下面就这一方法的几个主要的部分进行描述说明,首先再次强调的是本文方法所基于的基础现实是文本具有基本一致的笔画宽度。在论文中主要提出三部分过程来解决自然场景的文本识别问题,本文将依次总结介绍:

一、The Stroke Width Transform :

1、利用Canny edge detector对图像进行边缘检测,得到的每个边缘像素点p都具有一个方向梯度值dp;

2、若p位于笔画边缘,dp一定大致垂直于笔画方向,沿着射线 r=p+n*dp (n>=0)梯度查找与之对应的另一个边缘像素点q,那么dp与dq的方向是大致相反的(dp = dq ± π/6 ) ,此时会出现两种情况:

(1)p找不到对应的匹配的q或者dp 与dq不满足大致反向的要求,那么该射线r 废弃掉;

(2)如果找到满足要求的q那么在[p,q]这条路线上的每个像素点都会被指定笔画宽度属性值||p-q||(欧式距离),除非该店已经被指定了一个更小的笔画宽度属性值。

3、重复步骤2,计算出所有未被废弃的路线上的像素的笔画宽度值,算法结束。

注意:

(1)这一方法实质上就在对于每个可能属于文字部分的像素点与它最有可能所属的笔画建立联系,这一联系就是该笔画的宽度,可以想见的在未来的处理中,将会对该值相近的连通候选区域进行聚类,即认为他们属于同一笔画,进一步的可以构造出每个笔画,形成文字区域。

(2)在上述的过程中,实际上是默认了针对于亮底暗字的正向文本,如果是对于暗底亮字的反向文本,那在步骤2中就需要沿着dp的返方向来查找q,这样,在实际算法的推行过程中,是需要重复以上过程两次的:一次沿着dp方向,另一次则沿着-dp方向。

二、Finding letter candidates:

这一步要做的是,对于过程一中找到的候选文字狱加以剔除的处理,鉴于上一步骤中得到的结果可能存在干扰(如电线杆可能被识别为文字候选域),需要进一步的处理,主要有以下部分:

(1)计算每个连通候选区域各个像素点笔画宽度属性值的最大差值,对于差值太大的情况加以排除,这可以排除掉如树叶这样的区域,此处的 阙值设定为连通区域笔画宽度属性之平均值的一半;

(2)对于候选区域长宽比要求在0.1到10之间,不符合要求的剔除掉,对于电线杆等长宽比较大的区域可以排除;

(3)一块区域的边界框包含不超过两块区域,以消除文本外围包围线之类(符号框架);

(4)对于太大或太小的连通域也排除掉;

(5)单独的字符通常不出现在图像中,当作噪声剔除;

三、Grouping letters into text lines:

这里认为文本是以线性的形式出现的,一行文本时有相似之处的,如:笔画宽度、字幕宽度、高度、字符间距等。

如果两候选字符满足:

(1)具有相似笔画宽(中值之比小于2.0);

(2)高度比不超过2.0;

(3)距离不超过宽字符的三倍;

(4)颜色相近

等特征,那么就对满足条件的字符聚类,形成text lines,实际上,这并不需要在文本的检测中加以处理,在OCR的过程中是可以进行的。

OK,以上是个人学习的一点总结概括,如果个人理解有不当之处,或读者有进一步见解,欢迎留言探讨,共同学习。

自然场景文本识别:基于笔画宽度变换的文本检测,布布扣,bubuko.com

时间: 2024-10-08 09:04:24

自然场景文本识别:基于笔画宽度变换的文本检测的相关文章

【转】 自然场景文本识别:基于笔画宽度变换的文本检测

最近在学习自然场景(Natural Scenes)的文本识别(Text Recognition)问题,这一问题也是时下一个非常热门的亟待解决的问题.在阅读学习了一定量的文献资料之后,有了一定收获,本文提到的基于“笔画宽度变换”(Stroke Width Transform)的方法,是目前个人看到比较认同的方法. 对于自然场景的文本识别,一个很重要的问题就在于如何从自然场景的图片中检测与定位出文本信息,考虑到文本的结构.像素.几何变形.背景复杂度.图像分辨率等多种问题带来的干扰,对于文本的检测着实

基于笔画宽度变换的自然场景文本检测方法

依据:自然场景中的文字笔画倾向于固定的宽度. 检测流程如下图: 笔画宽度的算法如下: 首先将图像中每个像素的笔画宽度值设置为无穷大. (1)利用边缘检测算子(Canny)对图像I(x,y)进行边缘检测,可以得到每个边缘像素点都具有一个方向梯度值: (2)假设p为一个边缘像素点,Dp为其梯度方向,按照梯度方向沿着路线r=p+Dp*n(n>=0)寻找另一个边缘象素点q,Dq为这个像素点的梯度方向,Dp和Dq方向相反: 在这个步骤中,如果没有找到q或者二者的梯度方向不是相反的,则重新寻找:找到之后计算

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

Introduction: 应用背景:是盲人辅助系统,城市环境中的机器导航等计算机视觉系统应用的重要一步.获取文本能够为许多视觉任务提供上下文的线索,并且,图像检索算法的性能很大部分都依赖于对应的文本检测模块. 意义:传统的OCR应用于扫描文本,所以其依赖于把文本从背景像素中正确分离.这对于扫描文本来说是很简单的,但是自然图像由于存在色彩噪声,模糊,遮挡,很难将文本从背景中分离. 文章提出的方法:文本有着固定的笔画宽度,利用这一特性就够从背景中将其恢复.首先求图像的笔画宽度变换即每个像素都分配了

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

平台:win10 x64 +VS 2015专业版 +opencv-3.x.+CMake Issue说明:最近做一些字符识别的事情,想试一下opencv_contrib里的Text(自然场景图像中的文本检测与识别)模块. 原因: 解决办法: 目录: 一.下载地址汇总(OpenCV+OpenCV_contrib+CMake)二.中间遇到的Issue汇总三.主要参考链接 1)Win10+VS2017编译opencv3.2.0和opencv_contrib3.2.0来调用text模块——https://

基于word分词提供的文本相似度算法来实现通用的网页相似度检测

实现代码:基于word分词提供的文本相似度算法来实现通用的网页相似度检测 运行结果: 检查的博文数:128 1.检查博文:192本软件著作用词分析(五)用词最复杂99级,相似度分值:Simple=0.968589 Cosine=0.955598 EditDistance=0.916884 EuclideanDistance=0.00825 ManhattanDistance=0.001209 Jaccard=0.859838 JaroDistance=0.824469 JaroWinklerDi

基于朴素贝叶斯分类器的文本分类算法

源代码下载:NaviveBayesClassify.rar Preface 文本的分类和聚类是一个比较有意思的话题,我以前也写过一篇blog<基于K-Means的文本聚类算法>,加上最近读了几本数据挖掘和机器学习的书籍,因此很想写点东西来记录下学习的所得. 在本文的上半部分<基于朴素贝叶斯分类器的文本分类算法(上)>一文中简单介绍了贝叶斯学习的基本理论,这一篇将展示如何将该理论运用到中文文本分类中来,具体的文本分类原理就不再介绍了,在上半部分有,也可以参见代码的注释. 文本特征向量

浅析点对点(End-to-End)的场景文字识别(图片文字)

一.背景 随着智能手机的广泛普及和移动互联网的迅速发展,通过手机等移动终端的摄像头获取.检索和分享资讯已经逐步成为一种生活方式.基于摄像头的 (Camera-based)的应用更加强调对拍摄场景的理解.通常,在文字和其他物体并存的场景,用户往往首先更关注场景中的文字信息,因而如何能够正 确识别场景中的文字,对用户拍摄意图会有更深入的理解.一般意义上,基于图像的文字识别包括基于扫描文字的光学字符识别(Optical Character Recognition, OCR) 和广泛用于网站注册验证的C

Android应用开发进阶篇-场景文字识别

由于研究生毕业项目需要完成一个基于移动终端的场景文字识别系统,虽然离毕业尚早,但出于兴趣的缘故,近一段抽时间完成了这样一套系统.基本的架构如下: 客户端:Android应用实现拍摄场景图片,大致划出感兴趣文字区域,通过socket通信上传服务器端识别; 服务器端:Python server进行socket通信监听,连通后调用文字识别引擎(exe可执行程序),将识别结果返回; 下面是系统运行示例图: 1. 客户端 包含两个Activity,: MainActivity主界面如上图左1,选择拍摄后调

pytesser图片文本识别

python图片文本识别使用的工具是PIL和pytesser.因为他们使用到很多的python库文件,为了避免一个个工具的安装,建议使用pythonxy,这个工具的介绍可参考baidu. pytesser是谷歌OCR开源项目的一个模块,在Python中导入这个模块即可将图片中的文字转换成文本.pytesser调用了 tesseract.当在Python中调用pytesser模块时,pytesser又用tesseract识别图片中的文字.pytesser的使用 步骤如下: 首先,安装Python2