学习验证码快一个星期了,终于把样本集切出来了,现在问题是如何切粘连字符,现在将自己的学习过程记录下来;
第一部分:
我们知道,对于不黏连的字符,直接用扫描线分割法就可以,就是看哪一个竖条上没有文字像素,则这个竖条就是两个字符间的空白部分;
当然,对于不黏连的字符,CFS算法效果也很好,它主要是利用连通域进行划分;
还有CFS4D的方法,他只扫描上下左右4个像素来判断是否为种子的连通域;
而CFS则是将他周围的8个像素来判断的。
对于每次字符大小和数量都一样的验证码还可以用平均分割法,也就是直接先把中间的文字部分整体切出来,然后按宽度平均分成几份,这种方式对字符粘连比较多用其他方式不好分割的验证码很有用
对于有少许粘连但是只是在字符边角的地方重叠几个像素的验证码,可以用垂直像素直方图的统计方法分割。就是对每一个竖条,统计该竖条上出现的像素数(当然,前提要是二值化的图)
还有滴水算法;
上半部分是垂直像素直方图的一种直观展示,假如图片宽度为100像素,则把图片切割为100个1像素的竖线,下面的红色部分为当前x坐标上所有黑色像素的总和。这么一来可以很容易的通过直方图的波峰波谷把4个字母分割开。图片的下半部分是扫描线分隔法,因为干扰线和字符旋转的存在,只有M和5直接才出现了连续的空白部分。
除了垂直像素直方图,还可以从不同的角度进行斜线方向的像素数投影,这种方式对于每次全体字符都随机向一个角度旋转的验证码效果很好。
另外对于彩色的验证码,还可以用颜色分割
作为验证码识