python实现验证码图像数据去噪处理的心路历程

      最近在鼓捣一个小项目就是做验证码的识别,之前的文章里面也有提到了部分验证码数据的采集工作,今天主要是想对获取到的验证码数据做初步的处理工作。

      验证码识别项目现在早已不再是新东西了,所以晚上随便一搜索会有一大堆的教程,但是很多并不是真实项目实践的,大都是自己做的一个demo,当然我这里也不是去将怎么做工程实践上的验证码识别,不过我使用的是真实网络中采集到的数据而不是借助于第三方的验证码数据生成模块获取的虚拟数据,本质上来说,更加偏于真实一点。

       关于图像数据处理的相关教程,网络上也有很多,因为自己不是图像专业的,所以做这个小项目的时候最开始肯定也是要查阅资料,了解一下大概的流程的,第一步要做的就是图像数据的预处理工作,针对这里来说,就是验证码数据的去噪。网上找到了一个博客,写的不错,但是用他的方法处理出来的结果不是很如意,倒不是说人家的方法不好,可能最大的原因就是:我们使用的数据集不一样的把。

      我今天实验所用的图片数据如下:
 

python实现验证码图像数据去噪处理的心路历程_第1张图片

    首先需要进行灰度化和二值化处理,结果如下:
 

python实现验证码图像数据去噪处理的心路历程_第2张图片

     完成上述工作后,就可以进行去噪处理了,验证码图像数据不同于其他的图像数据,它很大的一个特点就是体量很小,我们甚至可以人工数出来像素点的个数,但是都不会这么做的是吧。正是因为这个特点的存在,很多去噪的思路都是基于像素点来进行的。

     下面,先以网上博客的方法处理一下,结果如下:
 

python实现验证码图像数据去噪处理的心路历程_第3张图片

      可以看到,很多杂乱的线噪声和点噪声都取出来,但是还是有一部分噪声没有去除,而且,原始的数据有损失,也就是有效像素点变少了,比如这里的“7”和“I”,而且原来本身很清晰地字符也变得模糊了,比如这里的“G”。考虑噪声数据未去除干净的可能原始是数据的遍历策略的问题,考虑有效像素点损失的问题可能是特征情况在上述的去噪过程中没有考虑到,比如字符的拐点或者是直角点等等,下面我进行的一些列设计和优化工作也都是基于目前算法的问题进行的。

     为了更有效处理,基于像素的处理思路我自己做了一版处理,主要是加入了对直角拐角和边线凸起点的处理方法,以下图为例进行说:

     上图中,绿色的四个像素点就是我们说的直角拐点,这里需要加入额外的判断处理,如果是直角拐点就不再进行处理。

      

      上图中,红色部分的像素点就是我们说的凸起点,这些点时需要我们尽量去去除的,同样,这里是需要加入额外的判定过滤策略的,如果是凸起点就去除。

       经过算法的优化设计后,上述验证码图像数据处理结果如下:

python实现验证码图像数据去噪处理的心路历程_第4张图片

      这里面有一点不好的问题就是边框处的游离黑块没有去除,而且想要或者说是应该要去除的黑点也没有去除,效果上有提升,比如“I”相比于上面的有效点就更多一点,但是还是没有实现最想要的目标。

        接下来针对边框进行处理,处理结果如下:
 

python实现验证码图像数据去噪处理的心路历程_第5张图片

       可以看到这里处理结果相较于上一版又有了进一步的提升,不过这里同时也报漏出来了一个问题,就是:边框黑点像素区域去除了,但是遗留部分成为了新的噪声点。那么接下来的处理目标就是解决新出现的或者是可能会出现的噪声点或者是完全游离的像素点。

      有了针对性的思路以后,就开始处理,结果如下:
 

python实现验证码图像数据去噪处理的心路历程_第6张图片

      看到这里,有一种可以先松口气的感觉,虽然这里的结果不是说最完美的,但是,却是自己期望实现的,像素的锯齿状是没有办法完全去除的,每一个图像数据都是由一个一个小像素点组成的。

      今天的实践处理就到这里,记录一下,接下来进行子图切割。

 

你可能感兴趣的:(编程技术)