空心字符填充算法

空心验证码字符填充

问题描述:

为了增加验证码的识别难度,设计者把字体改为空心.空心字符在很多环节表现都很好,
(1) 预处理阶段:若含有干扰线,对于实心字符采用形态学腐蚀等方案很容易去除干扰线.可如果是空心字符就不能采用形态学的方法了.这样很好的增加了预处理阶段的难度.
(2) 字符分割阶段:验证码识别普遍采用字符切分,然后识别的方案.若采用空心字符,切割阶段也会增加不少的难度.

所以很容易想到便是把空心字符转为实心的字符.若字符没有粘连,没有干扰则比较容易填充.若字符都粘连在一起还存在干扰线,这样就很难处理

以下三个为新浪网使用的空心字符验证码,其粘连且含有干扰线.本文以此为案例进行算法设计.
新浪1 新浪2 新浪3

解决方案:

本文的解决方案的设计参考西电高海昌教授团队论文中对空心字符的填充方案.

主要步骤如下:

  1. 对图片进行二值化.
  2. 使用种子填充算法,填充白色区块.
  3. 这里的白色区块中包含(背景色块,字符内部,噪块色块)三种噪块.
    关于这三种色块请看下面这张图:其中灰色部分则认为是背景,如果没有背景干扰线,背景则是一片,若和上面新浪的验证码一样,这里有的的背景会被干扰线分为两块.字符内部的是正确填充的,字符笔画之间,或者字符中圆环部分则被认为是噪块.
    色块分布
  4. 接下来的任务便是正确的来区分这几种白色区块,最后去除无关噪块,对字符内部的白色色块进行填充.

理论部分:

  1. 字符内部的白色色块和噪块的区别.
    • 字符色块于背景色块接触的区域比较多,字符内部噪块和背景色块的接触比较少或者没有.
    • 噪块多为凸边形,而字符色块作为凹变形.凹边形和凸边形是可通过色块周长和色块面积的比例大致对比出来的.
------本文结束感谢阅读------