一、定义
文字图像识别近年来应用广泛
包括传统OCR和自然场景下的文字识别
图1 印刷文档中的文本图像 |
图2 自然场景中的文本图像 |
常见的文字图像识别应用基本上是遵循下面的流程:
字符定位 → 字符分割 → 字符识别
例如车牌识别
车牌识别一般分为车牌检测、字符分割和字符识别三个主要步骤。
其中,字符分割是指将原始图像切分成单个字符并提取保存为图像的过程。虽然大多数时候是作为一个预处理的过程,但字符分割却是个极其重要的环节,对整个文本识别的效果影响很大,一旦在分割环节出现了错误,后续字符识别的正确性就会大打折扣。因此,对字符分割的方法进行研究和改进就显得十分必要。
二、分类
这个分类是我自己总结的,仅仅是用来方便整理,看看就好
A.按分割场景
传统文档印刷体
传统文档印刷体的分割包括识别技术已经非常纯熟了,现在我们经常用的提取图中文字功能就是传统OCR应用的结果
图3 提取文字功能 |
图4 提取文字并识别 |
自然场景(车牌)
虽然自然场景下有无数字符识别分割可以应用的地方,但在我学习整理中见到最多的当属车牌分割识别了
图5 车牌分割识别相关应用举例 |
验证码
其实验证码可能应该也属于传统OCR的范畴,毕竟它只存在于网页等虚拟世界中,并不是自然场景,但是由于它和传统排列整齐的印刷字体不太一样,因此为了方便研究我把它单独归为一类
图6 验证码(a) |
图7 验证码(b) |
B.按分割对象
这个也是为了方便我之后的学习研究,自己粗略分了一下分割对象,打算先从最简单的数字、字母开始分割,再进一步拓展到更复杂的汉字的分割,以及将来可能还有其他的分割对象
数字、字母
数字和字母基本上是单体存在,所以对它们进行分割相对来说较为简单
汉字
对于汉字的分割主要是会面临偏旁的问题,在涉及到语义分割时,适用于数字和字母的单体分割策略在分割汉字的时候可能会错把偏旁当做独立个体而分割,这是汉字分割相对数字和字母分割更为复杂的主要原因之一
其他分割
目前还没有学习和思考这一方面的问题,主要是考虑到未来可能有一些标点符号?或者其他语言?其他元素之类的分割,目前暂且不谈吧
三、分割难点
这里主要罗列一下影响分割效果的一些因素,如何消除这些因素带来的对结果精度的影响,也就是分割的难点所在
光照
图3 光照下的车牌 |
图4 阳光直射的交通指示牌 |
角度
图5 不同角度的字符图片(a) |
图6 不同角度的字符图片(b) |
扭曲
图7 被扭曲的字符图片(a) |
图8 被扭曲的字符图片(b) |
颜色
图9 不同颜色的字符图片(a) |
图10 不同颜色的字符图片(b) |
模糊
图11 模糊的字符图片 |
污损
图12 污损的车牌字符 |
图13 被污损的古籍字符 |
遮挡
图13 被遮挡的广告牌(a) |
图14 被遮挡的广告牌(b) |
粘连
图15 部分粘连的字符图片(a) |
图16 部分粘连的字符图片(b) |
四、常用算法
一直以来,各类参考文献提出了多种多样的字符分割方法,经过整理后基本可以归为以下几种:基于连通域(轮廓)特征分析的字符分割、基于(水平、垂直)投影特征分析的字符分割、基于识别的字符分割。但是上述方法都有一定的局限性,目前还没有一种能够广泛通用的切割方法。特别地,对于一些低质量字符图像来说,图像中通常会存在污损区域或其他干扰,字符分辨率较低、相邻字符间的界限较模糊,此时若单独使用上述方法中的一种,则对字符的分割能力极其有限,效果也欠佳。
基于连通域特征分析的字符分割
基于连通域特征分析的字符分割,又称基于轮廓特征分析的字符分割
从连通区域的定义可以知道,一个连通域是由具有相同像素值的相邻像素组成像素集合,因此,我们就可以通过这两个条件在图像中寻找连通区域,对于找到的每个连通域,我们赋予其一个唯一的标识( Label ),以区别其他连通域。
连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域(Region,Blob)。连通区域分析(Connected Component Analysis,Connected Component Labeling)是指将图像中的各个连通区域找出并标记。
连通域分析的基本算法有两种:1) Two-Pass 两遍扫描 2) Seed-Filling 种子填充法。
图17 Two-Pass 两遍扫描法 |
图18 Seed-Filling 种子填充法 |
基于投影特征分析的字符分割
滴水算法
滴水算法,如其名,算法参考了雨滴的智慧,黑色区域如同空旷的天空,连在一起的字符就像连在一起的两个房屋。水滴从天空中掉落,顺着缝隙向下流淌,如果他们遇到了困难不能继续下落,就冲破禁锢,水滴石穿,打开缺口向下渗透,直至滑落出画面。整个过程形成的轨迹,就是两个字符之间的分割线。不同于我们之前介绍的柱状图分割法,滴水算法的分割线可以非常灵活。
滴水算法是一种用于分割手写粘连字符的算法,与以往的直线式地分割不同 ,它模拟水滴的滚动,通过水滴的滚动路径来分割字符,可以解决直线切割造成的过分分割问题。
滴水算法根据水滴滴落的方向的不同可分为向上滴落和向下滴落。以向下滴落为例,该算法模拟水滴从高处向低处滴落的过程来对粘连字符进行切分。水滴从字符 串顶部在重力的作用下 ,沿着字符轮廓向下滴落或水平滚动,当水滴陷在轮廓的凹处时,将渗漏到字符笔划中,经穿透笔划后继续滴落,最终水滴所经过的轨迹就构成了字符的分割路径。
滴水算法的滴落规则如图 1所示。图 1(a)中n表示水滴当前的位置,水滴的下一步的滴落位置由它下方的三个像素点和它左右两个像素点共五个像素点的情况决定 ,它们的编号如图1所示 。图 1(b)显示了水滴的下一滴落位置的选择规则,其中w表示白点,b表示黑点,表示既有可能是白点也有可能是黑点 。以1为例,当水滴当前的位置上邻近的五个像素点全是 白点或黑点时,水滴将向下滴落。值得注意的是,当水滴落入字符轮廓的凹陷处时,情况5和情况6将会交替出现,即水滴将左右滚动,此时采取的策略是水滴在凹陷处右侧向下竖直渗漏。
图17 滴水算法滴落规则 |
对于粘连字符的分割,滴水算法可以获得 比直接竖直进行分割更好的效果,特别是在字符存在着倾斜 、扭曲等的情况下 。如图 3所示,图 (a)是某验证 码粘连字符片段 ,图 (b)是找到一个 合适 的位置直接竖直分割的效果,图©是用滴水算法分割的效果 。可以看出,滴水算法沿着字符的轮廓进行分割,可以有效地避 免直接竖直分割造成的过分分割的问题。
图18 竖直分割与滴水算法分割对比示意图 |
五、相关论文研读
一、粘连字符识别技术在手写票据中的应用研究
【部分摘要】
针对现有方法在识别票据中较长的手写数字串图像存在的局限性,提出了一种基于预分割的端到端手写数字串识别方法。分割阶段使用 Mask 差值匀光法去除图像背景后,根据连通区分割、组合得到的坐标在原始 RGB 图像上分割出多个子图像。识别阶段采用以 ResNet、Bi-LSTM、CTC 为核心搭建的模型,具有很强的特征表示和学习能力。另外,为了训练端到端识别模型,通过提取实际票据的背景和字体颜色,再结合多种数据增强技术合成了大量不同长度的模拟票据数字串图像。实验结果表明,所提出的方法能够将识别结果与真实标签的平均编辑距离降低至 0.088,其效果优于分割-识别方法和一般的端到端识别方法。
【研究现状】
文章指出,在对手写中文文本识别(HCTR)的研究中,目前有两大主流方法:
①基于过分割-识别方法
②基于深度学习的不分割方法
方法①先将文本进行过分割,然后利用字符分类器进行组合与识别,最后在贝叶斯框架下对上下文语义建模来搜索、评估路径。
基于深度学习的方法②不需要对整行文本进行显式分割,而是直接利用神经网络端到端识别。
通俗来说就是先分割再识别和不用分割直接识别的区别,对于前者来说识别精度到达稳定值后很难再突破,而后者将各种基于神经网络的识别方法应用到视觉领域,成为近年来的研究热点。
在对手数字串识别(HDSR)的研究中,目前有三大主流方法:
①基于数字骨架特征的分割-识别方法
②基于多个分类器的不分割方法
③以CNN和RNN为核心的端到端识别方法
分割-识别方法
生成了一系列分割假设,基于所有假设的识别置信度做出最可靠的分割决策。
相邻数字分割时一般会有三种类型:
①孤立数字
②重叠数字
③粘连数字:(1)单笔粘连
(2)多笔粘连
其中粘连数字的分割最为困难
目前提出的方法大致有:
1.基于连通域分割
2.基于垂直投影直方图分割
3.提取数字骨架分割
4. 同时结合连通域、轮廓和骨架。
基于多个分类器的不分割的识别方法
垂直投影+连通域分析简单切割后不需要分割粘连项
由模型直接识别单数字或者粘连项
端到端的识别方法
在手写体中,主要是采用基于 encoder-decoder 的序列识别方法,由 CNN 和 RNN 组合分别提取图像、文本特征,对齐方式分为:注意力机制(Attention)和 CTC。
六、参考所用到的文献和博客等
注:部分图片来源于网络,如有侵权,请联系作者删除;部分内容引用自他人博客或文章,标题和相应网址如下:
①
【OpenCV字符分割3】传统滴水算法进行字符分割
②
李宇霞. 粘连字符识别技术在手写票据中的应用研究[D].北京交通大学,2020
③
【CVPR 2018 | 使用 CNN 生成图像先验,实现更广泛场景的盲图像去模糊
④
Wang X , Zheng K , Guo J . Inertial and Big Drop Fall Algorithm
⑤
基于MATLAB的多方法车牌识别识别系统【GUI,多方法,论文,对比,语音播报,出入库,剩余车位】
⑤
连通域的原理与Python实现
⑥
OpenCV_连通区域分析(Connected Component Analysis-Labeling)
⑦
基于滴水算法的验证码中粘连字符分割方法