基于城区距离的自适应加权均值滤波算法
摘要: 针对传统滤波窗口不能自适应扩展以及标准均值滤波易造成图像边缘模糊的缺陷,提出一种基于城区距离的自适应加权均值滤波算法。首先,利用开关滤波思想检测出噪声点;其次,对于每一噪声点,依据城区距离扩展窗口,窗口的大小根据窗口内信号点的个数自适应地调节;最后,将窗口内足够数量信号点的灰度的加权平均值作为噪声点的灰度值,实现对噪声点的有效恢复。实验结果表明,该算法能够有效地滤除椒盐噪声,尤其对噪声密度较大的图像,去噪效果更加显著。 关键词: 城区距离;自适应;均值滤波;高密度噪声;图像去噪 0引言 图像信号在形成和传输过程中,由于采集系统、传输媒介及成像系统的不完善,会引入不同程度的噪声,从而使图像质量下降。由于图像的许多后续处理工作(如边缘检测、模式识别、图像分割等)的成败在很大程度上依赖于噪声去除的效果和质量,因此有效的噪声滤除工作是图像处理过程中非常关键的一个环节。椒盐噪声[1]是由图像传感器、传输信道、解码处理等产生的黑白相间的亮暗点。去除椒盐噪声常用的方法有均值滤波、中值滤波等[2]。均值滤波是用n×n(n为大于或等于3的奇数)的滑动窗口作为模板,将这个模板对应的各像素点灰度的平均值作为当前像素点(一般是窗口的中心点)的灰度值。这种方法虽然能够达到不错的滤波效果,但是由于均值滤波是对图像中的每一个像素都做均值代替处理,随着模板的增大,图像会变得越来越模糊,造成图像质量下降。基于这种情况,人们对均值滤波提出了各种改进算法,如K近邻均值滤波器[3]、加权均值滤波器[4]、模糊加权均值滤波器[5]、非对称有向窗加权均值滤波器[6]等。这些算法在改进均值滤波的性能方面做了很好地探索,并取得了一定的效果,但在实际应用中又都有各自的局限性。 利用图像相邻像素之间的相关性原理,文献[7]提出了一种改进的自适应中值滤波算法,该算法的滤波器窗口主要有正方形和十字形两种,在滤波过程中采用了不同形状、不同尺寸的窗口,并在噪声去除和细节保护方面取得了比标准均值滤波更好的效果。但是由于滤波窗口的大小有局限性,不能无限扩大,噪声密度大时,去噪效果不太理想。 本文将相邻像素之间的相关性原理与城区距离相结合,提出一种基于城区距离[8]的自适应加权均值滤波算法。该算法是用滤波窗口中所有信号点灰度的加权平均值替代噪声点的灰度值,当滤波窗口中无信号点或信号点个数达不到要求时,可依据需要基于城区距离自适应地扩大滤波窗口(理论上滤波窗口可无限扩大)。实验结果表明,本文算法能够有效地滤除椒盐噪声,提高图像的峰值信噪比,降低图像的均方差,尤其对噪声密度大的图像,算法的优势更加明显,去噪效果更加显著。 1基于城区距离的自适应加权均值滤波算法 滤波窗口的选取对滤波效果有很大影响,选取合适的滤波窗口,可使被噪声污染的图像得到最大限度的还原。常用的滤波窗口有如下几类:正方形窗口、十字形窗口、×形窗口、米字形窗口等[7]。但是以上滤波窗口的大小都有局限性,不能无限扩大,特别是当噪声密度大时,窗口内就会没有足够数量的信号点来还原被污染的像素点。基于以上原因,本文提出了基于城区距离自适应扩展窗口的滤波算法。 1.1城区距离 在数字图像中,像素之间的距离有多种定义方式,其中主要有欧氏距离、城区距离、棋盘距离等。点p和q之间的城区距离D4(也是模为1的距离)[8]定义为: D4(p,q)=|x-s|+|y-t|(1) 其中(x,y)、(s,t)分别为像素p、q的坐标。根据该定义,距坐标为(x,y)的像素点的D4距离小于或等于d的全体像素,组成以(x,y)为中心的菱形区域。图1是以数字0所在位置的像素为中心,城区距离分别为1,2,3的等距离像素集合的示意图。图中数字0所在位置代表当前像素点的位置,其他数字则代表该数字所在位置的像素点距离当前像素点的城区距离。 1.2加权均值滤波 均值滤波是用滤波窗口内像素点灰度的平均值来替代当前像素点的灰度值。虽然这种算法在一定程度上抑制了噪声,但是并未充分利用各像素点的空间位置信息。为此,本文采用对像素点进行加权的基于城区距离的均值滤波算法,对图像进行如下加权处理: 设当前像素点p的坐标为(i, j),其灰度值为f(i, j),经滤波算法处理后的灰度值为g(i, j),当前滤波窗口为S。滤波函数如下: 1.3噪声检测 椒盐噪声的检测方法,主要是将待判别像素点的邻域作为窗口,通过判别窗口中心点的灰度值是否为邻域极值来判断该点是否为噪声点。但是,这类检测方法对每个像素点都要进行邻域的计算与比较,效率较低。由于灰度图像中大部分椒盐噪声的灰度值均集中在灰度极值0或255附近,因此可通过事先设定的阈值来确定图像的噪声点,其判断公式[9]如下: 1.4算法的基本思想 本文所提出的基于城区距离的自适应加权均值滤波算法的基本思想如下: 首先判断当前像素点是否为信号点,如果是信号点,则保持该点的灰度值不变;如果是噪声点,则 1)建立窗口S1,即选择与当前像素点城区距离为1的像素点集合,作为第一层窗口S1,检测该窗口内是否存在足够数量的信号点:若存在足够数量的信号点,则计算这些信号点灰度的加权平均值,以替代当前点的像素值;若没有足够数量的信号点,再选择与当前像素点城区距离为2的像素点集合,记为第二层窗口S2。 2)建立窗口S1∪S2,即将S1和S2的并集作为当前窗口,检测该窗口中是否存在足够数量的信号点:若存在足够数量的信号点,则计算这些信号点灰度的加权平均值,以替代当前点的像素值;若没有足够数量的信号点,再选择与当前像素点城区距离为3的像素点集合,记为第三层窗口S3。 3)建立窗口S1∪S2∪S3,即将S1、S2和S3的并集作为当前窗口,检测该窗口中是否存在足够数量的信号点。 按照上述步骤依次扩大窗口,直到当前窗口中有足够数量的信号点为止(只要整幅图像有足够数量的信号点,则该循环一定能够结束),最后计算当前窗口中所有信号点灰度的加权平均值,以替代当前点的像素值。 基于城区距离扩展的滤波窗口示意图S1,S2,S3,…,Sn如图2所示。 1.5算法实现 对于图像中坐标为(x,y)的像素点p,设其灰度值为f(x,y),将该像素点作为当前像素点,按如下步骤进行处理: 第1步判断当前像素点的灰度值f(x,y)是否符合式(4)。若符合式(4),则判定为噪声点,初始化城区距离L=1,信号点个数K=0,执行第2步;否则判定为信号点,灰度值保持原值不变,结束当前像素点的处理。 第2步在城区距离等于L的所有像素点中,按照式(4)的判断准则来查找信号点,设信号点个数为D,并将各信号点的灰度值存入数组a中;K=K+D。转向第3步。 第3步如果城区距离小于或等于L的信号点个数K 上述算法的关键是找出所有距坐标为(x,y)的像素点(以下简称为点(x,y))的城区距离小于或等于L(L≥1)的像素点,以便在这些像素点中查找信号点。该功能的具体实现步骤如下: 第1步定义变量i和k,并给k赋初值1。 第2步使变量i从0循环到k-1,每次循环取坐标为