文字切割算法-投影切割优化

前言

        在上文(文字切割算法-基于投影的切割)中发现切割结果并不是很理想,所以在本文提出优化算法对结果进行进一步处理。本算法的解决思路很简单,即针对已暴露出的问题进行解决,对于未暴露的问题就无能为力了。所以算法的鲁棒性并不是很好,但是简单易实现。

发现问题

         对基于投影的切割结果进行观察,可以将问题总结为三类。

整体连接

整体连接图

         多个文字连接在一起

左右结构分开

左右结构分开图

         左右结构的文字被切割成两个字

左右结构分开后连接

左右结构分开连接图

         左右结构的文字分开后,又与前后相邻文字相连

 

解决问题

整体连接

         由于汉字是方块字,可以认为每个字的长宽比例都是差不多的,基本都是1:1(金龙鱼调和…呸)。对于整体连接在一起的文字,可以先计算整体的长宽比。如果比例是接近于整数的(±0.2),则认为这是整体连接在一起的多个字。再计算每个字的平均长度进行切割,就可以得到一个比较不错的结果。

整体连接说明图

       如上图,这是四个字连在一起的。长宽比:104/27≈3.85,3.85>4-0.2所以我们认为它是4个字。则平均宽度:104/4=26,按照26*27的宽长进行切割,就可以得出结果。(这里的长宽比是:宽度/长度)

整体连接解决结果图

 

左右结构分开

         由于左右结构分开后,两张图片的长宽比与数字符号的长宽比相似。所以我们无法判断到底是偏旁还是符号,这样就无法进行连接。这个问题将在以后提出识别算法对图片进行识别后解决。

左右结构分开实例图

如上图,由于无法识别图片内容,所以无法判断到底是“7”与“阝”连接,还是“阝”与“艮”连接。

左右结构分开后连接

         采用整体连接的解决思路,先计算长宽比,如果发现长宽比不是在整数附近的(>±0.2),则认为这是左右结构分开后连接的。因为这种情况都是两张图,所以在发现第一张是分开后连接的,则将这张图先以1:1进行切割,再将剩下的部分记录。如果这张图相邻的下一张也被判断为是分开后连接的,则将上一张图剩下的部分与这张图的开头相连接,再进行1:1切割。这样就可以得到一个不错的结果。

左右结构分开连接图

         如上图,先对第一张进行1:1切割,即按照27*27的大小从开头逐步向后切割,记录最后剩下的部分“丬”。再判断下一张图,发现也是分开后连接的,则按照27*27的大小从末尾逐步向前切割,得到剩下的部分。最后将这两个剩下的部分进行连接,得到一个完整的“北”。

(当然这里要求在投影切割时记录图片两两之间的距离,这样才能还原被切割后的图片)

切割结果如下:

分开连接结果图

 

结果

        在采用上述优化算法后,发现切割结果有了显著的成效。但是还是会存在一些不足,这些问题会在以后提出识别算法后进行优化。文字切割出来后,我们可以通过图片相似度比对算法对图片特征进行提取,以进行识别。

整体结果图

项目源码:我的github(https://github.com/printlin/tmOcr