图像验证码识别(五)

您所在的位置:网站首页 如何消除照片中的噪点和噪音的方法 图像验证码识别(五)

图像验证码识别(五)

2024-07-17 17:25| 来源: 网络整理| 查看: 265

降噪在计算机和信号学中用到的非常多,在多媒体技术中,降噪主要是去除图片上的干扰噪点,玩过单反的都知道,当ISO调太高的时候,图片会产生颗粒感,这些颗粒就是噪点。当然,验证码图片上的噪点有大有小,只要是用来干扰机器识别的,会对后面的图片处理以及识别造成干扰。

常见的降噪算法一般都是一些滤波算法——均值滤波、中值滤波、自适应维纳滤波器和小波滤波等,不过在这里由于大多数验证码字符本身不是标准的打印体,而且字符相对较小,直线感很强,所以滤波算法降噪的效果不是很好。比如有些字符本身就比较模糊,在笔画弯折的地方很浅,使用滤波算法之后很容易将连贯的字符分成两个部分,另外如果验证码图片很小,有可能滤波之后整个验证码字符都被视为噪点了。

所以这里我自己实现了两种算法,都比较简单,但是经过试验,去除验证码噪点的效果很好,基本上能够应付所有的验证码噪点。

一、8邻域降噪

先介绍第一种方法,这种方法类似均值滤波,不过对于每个pixel,不是取其周围像素的灰度平均值,而是统计其周围像素点的灰度值为0或255的个数。从前面经过二值化处理可知,如果一个pixel是验证码或者干扰因素的一部分,那么这个pixel在二值化结果中其灰度值一定是0,即黑色;如果一个pixel是背景,则其灰度值应该是255是白色。因此对于孤立的噪点,其周围应该都是白色,或者大多数点都是白色pixel,比如下面的图片:

所以对一个噪点来讲,其周围的pixel应该全是白色的背景才对,准确来讲就是一个噪点pixel是黑色的并且外包的8个相邻pixel全是白色。当然,如果图片分辨率够高,一个噪点实际上可能是有很多个pixel组成,所以此时的判断条件应该放宽,即一个pixel是黑色的并且相邻的8个pixel白色的大于一个固定值,那么这个pixel就是噪点。对于不同的验证码,这个阀值是不固定的,所以在这可以设置大小,多试几次,找到最佳的阀值。

经过测试,8领域降噪法对于小的噪点的去除是很有效的,而且计算量不大,下面是一些结果图

左边的时原图,右边的是降噪以后的图,当然降噪没有降干净,这是因为这个方法对小噪点比较好,如果阀值设的比较大,很多验证码字符也会受到很大影响,因为验证码可能就是一些断断续续的点连出来的,阀值设太大,尽管噪点没了,验证码也会没了。

代码如下,所有关于像素的处理,都是基于opencv库:

[cpp]  view plain  copy void Image::NaiveRemoveNoise(int pNum)   {       //naive remove noise       int i,j,m,n,nValue,nCount;       int nWidth = getWidth();       int nHeight = getHeight();       //set boundry to be white       for (i = 0; i 


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3