赵夫群
(西安财经大学信息学院 西安 710100)
图像是一种重要的信息来源,通过图像分析和处理可以获取更多的图像信息内容。由于图像在传输和形成过程中会不可避免地受到各种噪声的干扰,大大降低了图像的质量并影响人们的正常阅读[1~2]。图像去噪可以消除噪声引起的不确定性,使人们可以更好地观查图像细节。去噪后图像在进行计算机视觉识别、分割等任务时,效果要远远优于使用含噪图像得到的结果,因此研究有效的图像去噪算法具有重要的理论和现实意义[3~4]。
目前,有很多国内外学者对图像去噪做出了研究工作,如Pitts W等[5]提出的MP模型,模仿了神经元的工作原理,通过构造神经网络数学模型实现图像去噪;白瑞君等[6]提出了一种改进的Dncnn 图像去噪模型,解决了原Dncnn梯度方向二次重新确定的问题,同时降低了算法的时间复杂度和空间复杂度;王同罕[7]首次提出将小波变换快速算法应用于信号和图像的处理与重构,并将其应用于图像去噪,取得了良好的效果;王世礼等[8]提出一种新的小波阈值去噪算法,并使用模糊控制算法对新阈值中的函数进行实时动态调节,在一定程度上提高了算法的去噪能力;Friedman J H[9]提出了一维和二维图形的中值去噪算法,有效提高了准确性。
虽然中值滤波在之后得到了广泛的推广和应用,但也存在一定的弊端。如,中值滤波算法受滤波窗口尺寸的影响比较大,存在去除图像噪声和保持图像细节之间的矛盾[10~12]。如果中值滤波器的窗口比较小,可以对图像中的一些细节部分处理的较好,但是对噪点的去除结果不是很好,还是会存在一些噪点。鉴于此,提出一种改进的中值滤波算法,该算法可以根据噪声点自动调节滤波窗口大小,克服中值滤波不能调整窗口大小的缺点,避免图像边缘模糊,实现图像的有效去噪。
中值滤波是图像平滑的一种方法,其算法原理是对含噪图像上的某一个像素点,并以这个像素点为中心划分好一个矩形邻域内,对这个矩形邻域内的像素灰度值进行排序,将排序之后的中位值赋值给这个像素点[13~14]。该算法能够将一个像素点与周围像素块相比将像素更改成接近周围的像素这样是可以消除孤立的噪声点,能达到一定的去噪效果。中值滤波算法原理简单,相对线性滤波而言,它在一定程度上可以保护细节信息,所以在数字信号领域得到广泛的应用[15~16]。
例如,一个一维序列为{0,6,5,12,0,9,7} ,那么在进行滤波排序之后这个序列将变为{0,0,5,6,7,9,12} ,其中位值为6,则就将原来的“12”更改为“6”。
中值滤波原理用数学式可以表达为
式中,i∈Z,,m表示序列中的个数,fi表示窗口中心点的值,Yi表示经过排序之后的中位值。
由于可以把数字图像描述成一个二维的形式,那么对图像的处理就是对一些二维数据进行操作。这个二维的数字序列相当于二维矩阵,矩阵里面的元素值是每个像素点像素的灰度值。中值滤波算法是用一个含有奇数个点的滤波窗口,对窗口里的数据进行排序,将排序之后的中位值赋值给当前像素点的灰度值,目的就是为了让与周围像素差别比较大的像素另取一个与周围像素比较接近的值,以此来消除图像中的噪声点,达到去噪的效果[17]。
中值滤波的具体实现步骤如下[18]:
1)选择一个(2n+1)×(2n+1)为奇数个点的窗口通常为3×3,利用这个窗口沿着二维图像进行行方向或者列方向上的移动;
2)在移动时,每次都要对窗口里像素的灰度值进行由小到大的排序;
3)经过排序之后将排序得到的中位数代替当前中心像素的灰度值,以去除图像中的噪声。
在图像去噪领域中,采用普通的中值滤波算法是远远不够的,需要设计一种改进算法来最大程度地解决去噪和保护图像细节之间的矛盾[19~20]。由于中值滤波算法容易受到滤波窗口大小的影响,因此提出一种可以自动改变滤波窗口大小的改进中值滤波算法。该改进中值滤波算法的窗口尺寸大小会根据算法设定好的范围进行动态的调整,能够判断当前像素点是否是噪声。
改进中值滤波算法的基本思想为在处理当前像素点时,首先确定该像素点是不是现在窗口下邻域像素值的最小值或者最大值,因为图像的噪声点一般来说都是邻域像素内的极大值或者极小值。如果是,则使用常规的中值滤波办法处理这个像素;如果不是,则不进行处理。与中值滤波算法相比,该改进算法增加了判断像素值是否为最值的步骤,因此对含噪图像的处理结果可以更加有效地保留图像的细节特征。
改进型中值滤波算法的具体实现步骤如下:
步骤1:令A1=Smed>Smin,A2=Smed<Smax。若A1、A2都成立,则跳转到B;否则,增大窗口的尺寸。如果增大后窗口的尺寸≤Smax,则重复步骤A。否则,输出Smed。
步骤2:令B1=Sxy≤Smin,B2=Sxy≥Smax。如果B1成立或者B2成立,则令Sxy=Smed,否则输出Sxy。
其中,Smin表示窗口最小灰度值;Smax表示窗口最大灰度值;Smed表示窗口像素的中值;Sxy表示坐标(x,y)处的像素值;Smax滤波窗口的最大尺寸。
步骤1的目的是为了判定窗口下的中位值Smed是不是噪声点。如果A1、A2都成立,那么Smed就不是噪声。之后会跳转至步骤B 判断现在滤波窗口下的中间像素值Sxy是不是一个噪声。如果B1成立或者B2成立,则该点Sxy就可以判定为噪声,这时滤波器会让Sxy=Smed将窗口里的中值赋值给Sxy;如果不满足,可以确定Sxy不是一个噪声点,这时会将原来的值不做改变输出出来,保证原始的图像不被破坏。
如果在步骤1 中,得到的Smed不符合条件,就可以判断得到的中值Smed是一个噪声。在出现这种情况时就需要增加滤波窗口的大小,让它在一个更大的区间里找到一个不是噪声点的中位值,那么跳转至步骤2;或者当窗口的大小已经到了最大值,那么返回找到的中值。
实验采用Matlab 作为去噪算法的实验环境。原始图像、椒盐噪声图像和高斯噪声图像如图1 所示,对其分别采用维纳滤波算法[21]、中值滤波算法[10]以及提出的改进中值滤波算法进行去噪,去噪结果分别如图2 和图3 所示,去噪算法的PSNR 值如表1所示。PSNR是目前使用最为广泛的一种图像客观评价指标,其数值越大就表示失真越小,与原图像更为接近[22]。
表1 各算法分别对椒盐噪声和高斯噪声的PSNR值
图1 待去噪图像
图2 椒盐噪声图像的去噪结果
图3 高斯噪声图像的去噪结果
从图2、图3 和表1 的去噪结果可见,提出的改进中值滤波算法对椒盐噪声图像和高斯噪声图像的去噪效果均明显优于普通中值滤波和维纳滤波算法的去噪结果。维纳滤波算法的去噪结果效果很差,图像非常模糊,边缘特征不清晰;普通中值滤波算法的去噪结果中存在较多未被消除的噪声点,特别是对图像边缘部分的去噪效果不佳;而改进中值滤波算法采用了一定的判断条件来对图像中的噪声点进行分析,其滤波窗口根据设定条件改变窗口尺寸,同时还可以判断滤波窗口中心的像素是不是噪声,可以在去噪同时保持图像的边缘细节特征,是一种较好的图像去噪方法。因此说,该改进中值滤波算法是一种去噪有效的图像去噪算法。
改进中值滤波算法能够自动调节滤波窗口,并判断当前窗口内的像素点是不是噪声点。该算法可以在对图像去噪的同时,有效保持图像的细节特征,对椒盐噪声和高斯噪声均有良好的去噪能力。这是由于改进中值滤波算法在判断像素点是否为噪声点时,只有当前像素点是噪声点才会把附近邻域像素点的中位值复制给它,如果不是噪声点就不会对这个像素点进行处理。而普通中值滤波会对图像中的所有像素点进行滤波处理,使得图像的像素点可能会受到破坏。此外,改进中值滤波算法够动态地改变滤波窗口尺寸,从而同时兼顾保护细节的同时还能去除图像噪声,使图像的处理更加细腻清晰,给人以良好的视觉体验。但是,该改进中值滤波算法对高斯噪声的去除效果还有待进一步提高,这些是后续需要改进的地方。