2015年6月27日
C#实现验证码中粘连字符分割(八)
在《C#实现验证码中粘连字符分割(七)》中提及,粘连字符分割的代码进行了更新。
不论如何,粘连字符分割的关键是有正确的谷点。本次代码更新时,更新了谷点的标准,同时获取上谷点与下谷点,然后再进行过滤。个人认为比较严谨的谷点过滤方案应该是上下谷点协同过滤,例如(1)上下谷点在宽度方向上的像素差在3个或5个以内优先作为谷点,(2)满足条件(1)后,在上谷点与下谷点中取较深的谷点作为最终的谷点。“较深”指的是谷点与领域在高度方向上的差距较大的点。
首先针对对目前的现状,我曾做过如下一些尝试:
(1)按照前面我所说的方案对谷点进行人工过滤,过滤后,小部分图片可以得到较完美的分割效果,但大部分图片分割后仍然有缺陷。
(2)前面第1点的结论显示目前谷点查找的并不准确。我也尝试过直接在二值化的原图像上用同样的方案去寻找上下谷点,然后用同样的方法过滤,发现分割结果会更加恶劣。
基于以上原因,本次更新的谷点过滤方案并未按照上述方案执行。
目前使用的谷点过滤方案仍然比较简单粗暴。以4个字符的图片为例,我需要从众多谷点中确定3个有效谷点。基本原则是优先确定左侧谷点与右侧谷点。以1/8的图片宽度为基准,将谷点按其宽度值从小到大的顺序排列,从最小的谷点开始判断其与左侧边界的距离,第一个满足距离值大于基准值的点作为左侧谷点。然后按谷点从大到小的顺序进行判断,从最大的谷点开始判断其与右侧边界的距离,第一个满足距离值大于基准值的点作为右侧谷点。若两侧谷点确定后,只剩一个谷点,那么该谷点直接晋升为中间谷点,若有多个谷点,则直接取平均后作为中间谷点。
粘连字符分割不易,倾斜的粘连字符分割更不易。