粘粘字符“花式分割”___Color Filling

   Color Filling 的基本原理是以给定点为起点,将与该点连通的区域均变为指定的颜色。与“扫雷游戏”中翻开空白区域的原理一致,EMGU的cvFloodFill可以实现该功能,但因还不习惯使用cvInvoke函数,故用函数迭代来实现该功能。

   无论用哪一种方式实现,都需要选择4领域或8领域。如下图所示,可以清楚的知道Color Filling在4领域和8领域下的差异,本系列算法均选用4领域来进行Color Filling。



   Color Filling给验证码图片制造了“阴影”,现在需要求“阴影部分的面积”(字符Loop的坐标范围)。事实上,我们知道loop的左下角与右上角的边界点即可,求“阴影部分面积”的方法:
   1.对Color Filling后的验证码图片进行竖直投影,投影目标是LOOP部分颜色的像素。
   2.求出竖直投影中连续包含LOOP像素的范围,这样可以得到每个验证码图片中每一个LOOP在Y轴上的范围。
   3.在已知的LOOP所在的Y轴范围内对LOOP颜色进行水平投影,得到每一个LOOP在X轴上的范围。
   4.遍历每一个LOOP的坐标范围,要求该坐标范围内至少包含一个完整的8领域均为LOOP像素,否则认为其为无效的LOOP。


   在求得“阴影部分的面积”(字符Loop的坐标范围)后,我们还需要借助字符笔画宽度才可以确定字符更确切的分割位置。

   纵观我们的研究对象,不同的验证码图片之间字符宽度有差异,但同一张验证码图像的字符宽度基本一致,只是有少数验证码图片有两个字符共用笔画的现象。我计算字符笔画宽度的方法为:分别从纵向与横向统计黑色像素的宽度,取宽度值最多的作为字符宽度,或者也可以取前几位平均一下作为字符宽度。

粘粘字符“花式分割”___fix broken characters

粘粘字符“花式分割”___Color Filling

粘粘字符“花式分割”___loop principle

粘粘字符“花式分割”___draw guide lines

粘粘字符“花式分割”___loop and guideline

粘粘字符“花式分割”___guideline principle

验证码粘连字符分割经验谈

Comments

  1. By ^珍爱^

    回复

  2. By live

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Fork me on GitHub