2015年7月5日
《一种改进的并行细化算法》的CSharp代码详解
《一种改进的并行细化算法》在上一篇文章中给出了其C#实现代码以及相关的实验结果,本文将详细讲述该算法的程序实现方法。虽然最终我所实现的《一种改进的并行细化算法》的实验结果的识别度不如zhang-suen算法,但这篇文献中提及的将消除规则制表然后查表的方法让我有如醍醐灌顶,这种查表法大大提高了并行细化算法的速度,而且它非常适合用在含模板处理的图像处理算法中。看过这篇文献后,再回头看我之前的写的滴水算法,分割算法等等代码里用的方法是多么的低端,小气,无档次。这,就是学习的过程吧。
《一种改进的并行细化算法》一文中讲过,我们细化的对象是二值化图像,黑像素即目标像素用1表示,白像素即背景像素用0表示。符合下图中8邻域中黑色像素个数为2~7的情况是需要删除的点,这里的删除指的是将目标像素点变更为背景像素。
在程序中,按照下图的原则将原文中需要删除的每一个模板对应为一个十进制数值,将这些数值建成消除规则表。在处理图像时,遍历像素点,将像素点的8邻域按相同的规则求出其对应的十进制数值,然后再去查消除规则表。若消除规则表包含该数值,那么当前像素点将被列为待消除点,再进一步处理两像素宽的状况。两像素宽的模板以及模板对应数值在程序中均有注释,这里就不在赘述。
呆萌博主好!首先感谢你发布的关于验证码粘连字符分割的文章,让我受益良多,我也是个验证码识别的初学者兼C#初学者,刚看到你新发布的两篇关于《并行细化算法》的文章,发现利用细化方法转换后的位图有好多都是很混乱的线
,这个貌似还没有你前面8篇文章中提到的滴水分割法切出来的图片好比对吧,请问这个算法在粘连字符分割方面的优势是什么?(新手小白,提出问题可能很低能,求大神指点迷津!)
谢谢你的留言!首先,你可以把你转换后是很混乱的线的图的原位图发给我看一下吗?其次,这个细化算法的辨识度确实没有zhang-suen算法好,这个我在文章中有提到;最后,目前看来,这个算法在粘粘字符分割方面没有什么明显的优势,但是它有个比较明显的特征,例如JPhQ/CTDZ/BRUD等验证码图片在粘连处有非常明显的连接线,不过其他的图片倒是没有那么明显。
Hi ,这个是用并行细化算法后的结果图http://pan.baidu.com/s/1o61g9UM还有我的验证码样本http://pan.baidu.com/s/1kTmZCX5;开始学习验证码识别的时候以为可以用庞大的字模库,对去噪后的二值验证码图片整体比对,在次时代验证码解析软件看到有类似方法,貌似可行,但是识别库太大导致识别时间单位是分钟,而不是毫秒,没有效率可言
,所以我开始学习网上关于粘连字符串分割的方法,看到类似呆萌文章中提到的算法,比如分水岭算法,BP神经网络(昨天问我开始学习这个
)等,可是也并不能将我样本中的验证码很好的分开,我觉得制作大规模的字模库,放到数据库中,然后与去噪后的验证码图片整体比对应该也是个方向吧,就是4个字符的验证码都要读取字模库N遍,这低级的想法想想自己都觉得蛋疼
。
我觉得对于初学者而言,有想法就好,没有所谓低级和高级,我觉得你的这样方法若能实现,识别率应该会比较高。我曾经看到过一篇论文,名为《扭曲粘粘字符验证码识别研究》(链接: http://pan.baidu.com/s/1o6BqcbC 密码: k9ga),和你的想法比较相似,供参考。
我刚刚初步试了几张图片,这个并行细化算法的细化效果远不如zhang-suen算法,如果你有兴趣,你可以用我之前发布的zhang-suen细化算法再试试。另外,你的样本中包含对比度较差的图片,OTSU二值化可能不一定能得到比较好的效果,Sauvola算法针对对比度差的图片二值化效果比较好。
http://blog.csdn.net/problc/article/details/22796609 这个是我现在看的文章,但我本身只是个才开始自学.net的爱好者,基本连程序猿都算不上,c++这种代码中的妈妈,实在是看着吃力,基本看点学点,这可真是学习路漫漫~
非常感谢你共享你的学习资料,同为初学者,共勉!