APP下载

基于连通性检测的图像椒盐噪声滤波算法

2020-04-07马逸东周顺勇

液晶与显示 2020年2期
关键词:椒盐邻域像素点

马逸东,周顺勇

(四川轻化工大学 自动化与信息工程学院,四川 宜宾 644005)

1 引 言

椒盐噪声作为一种常见的图像噪声,表现为图像上随机出现的或黑或白的噪声点。常称其中的白点为盐噪声,黑点为胡椒噪声。由于胡椒噪声与盐噪声往往在一张图像上同时出现,通常称其为椒盐噪声[1]。

由于椒盐噪声点的灰度值往往接近像素灰度值可取值的最小值0或最大值255,与周围未被污染的图像像素点灰度值有较大差异,人们往往选用中值滤波算法[2]来处理椒盐噪声。该算法能有效地处理椒盐噪声,但它不加区分地对所有像素点进行处理也导致了图像细节变得更模糊的问题。针对这一问题,在此算法的基础上,学者们相继提出极值中值算法[3]、加权中值滤波算法[4-5]、自适应中值滤波算法[6-7]等算法。其中的自适应中值滤波算法[8]为Hwang和 Haddad提出,原理为通过大小可变的窗口消除噪声。Lin和Yu则在自适应中值滤波算法基础上提出了一种基于支持向量机的自适应双通中值滤波器[9]。这些算法在一些情况下能在处理噪声的同时有效地保护图像的边缘细节,但在另一些情况下效果并不特别理想。

近年来开关中值滤波[10-11]的思想被提出。该类思想的核心便是:在对图像进行处理之前,首先判断哪些像素点是正常信号点,哪些信号点是噪声点,然后仅对噪声点进行处理。该思路因为避免了对正常信号点的处理,可以最大程度地防止边缘模糊。Jayaraj 和 Ebenezer 提出了一种新的开关中值滤波算法[12],它基于一维拉普拉斯算子得到的四个卷积的平均绝对值实现对噪声严重影响的图像进行恢复。钟灵等提出了一种超快速矢量中值滤波方法[13]。该方法在滤波窗口中,用距离均值点最近的向量代替矢量中值滤波方法的输出,降低传统矢量中值滤波方法的计算量。这些开关中值滤波算法主要利用噪声点与周围像素点的灰度值差异信息进行噪声检测,但这种方法仍然会混淆噪声点与一部分图像边缘,导致最终的图像处理效果不够理想。针对该问题,本文提出一种新的滤波算法。该算法首先对信号点进行连通性判断,然后对用中值滤波算法处理识别为噪声的点。

2 基于连通性判据的滤波算法原理

2.1 邻域灰度值中值判断准则

受椒盐噪声污染的像素点有灰度值在像素灰度最大取值255或最小取值0附近的特性。但简单地将图像中所有灰度值在255或0附近的像素点都作为噪声点处理则会破坏图像的正常边缘,影响处理最终得到的效果。为了减少计算量,本文先将不符合椒盐噪声特性的像素点从疑似噪声点中排除,判断公式如下:

(1)

其中:g1ij为经过一级检测的 0,1 矩阵,fij为表示原始图像的像素灰度值, 为预先设定的阈值(此处取值为10)。

考虑到正常像素点与其周围的像素点灰度值相近,而椒盐噪声点与其邻接的正常像素点之间存在较大差异,将像素点灰度值与其邻域灰度值中位数相减并取其绝对值,当该像素点为噪声点时,可以得到一个较大的值。所以本文将用该方法所求得的差值的绝对值作为第二级检测的判断依据,当该数值大于50时,将像素点视为疑似噪声点。判断公式如下:

(2)

其中:g2ij为经过二级检测的 0,1 矩阵,fij为表示原始图像的像素灰度值,mij为像素点邻域灰度值中位数。

2.2 连通性判断准则

传统的中值滤波算法原理是用像素点邻域灰度值的中值替代当前像素点,而本文则利用邻域灰度值中值辅助判断一个点是否是噪声点。该方法的缺点是只能区分出部分种类的边缘像素点与噪声点,在面对一些较尖锐或细长的边缘区域中的像素点的情况,因为这些像素点多面邻接其他区域的像素点,邻域灰度值中位数会与其灰度值有较大差值,该判断准则会失效。

针对这一问题,本文在第二级检测的基础上考察像素点与周围区域的连通性。图像中尖锐边缘与椒盐噪声的一个最主要区别便是尖锐边缘中的像素点与图像中的一个大块区域相连通,而椒盐噪声则表现为图像上的一个孤立的像素点或小黑(白)斑(当噪声密度较高时,噪声点恰好聚集在一起形成)。

然后本文将利用种子填充法考察疑似噪声点是否是图像连通区域的一部分。核心思路是将疑似噪声点作为种子,然后将与其相邻且像素值相近的像素点合并到一个像素点集合中,当集合中元素数量大于设定阈值时,判断该像素点为非噪声点。如果没有像素满足条件加入种子点所在区域或只有有限的几个点加入的情况,本文视所考察的像素点为噪声点。

最终用像素点邻域灰度值的中值替代识别为噪声的像素点。

3 算法的具体步骤及其改进

3.1 算法的具体步骤

按如下步骤遍历图像中所有像素:

Step 1:历遍图像所有像素点,判断像素点灰度值是否在 [0,δ]或[255-δ,255]范围中(δ=10)。如果在,将该像素点添加到列表list 1中。

Step 2:历遍列表list 1中所有像素点,计算每个像素点的灰度值与其八邻域灰度值中位数的差值的绝对值。当绝对值大于50时,将该像素点添加到列表list 2中。

Step 3:用种子填充法考察疑似噪声点,即按以下处理方法依次处理list 2(疑似噪声点)中的像素点。

在每次运行算法前,设一变量i初始值为1,算法运行时种子点所在区域每增加一个像素点,i的值加1,同时将增加的像素点传入list 3(相似点),当i值大于j(j=5)时停止种子填充算法,记录所有像素点算法终止时的i值,同时将list 3中的点从list 2中删除(避免重复判断,节省程序运算时间)。当i值小于等于j时,将list 3中所有像素点传入列表list 4(噪声点)。

Step 4:历遍列表list 4中所有像素点,用其邻域灰度值中位数替代当前像素点灰度值。当噪声密度低于0.5时,使用8邻域;高于0.5时,扩大为24邻域。

按该方法可以有效地去除孤立噪声点和像素数量小于5的黑(白)斑。Step 3中的变量i作用是控制生长区域的大小。毕竟所考察的像素点是正常像素点的情况下,本文不必找出其连通的整个区域。

3.2 算法的改进

为了验证本文算法的有效性,本文选择图像处理邻域的经典图像lena(大小为512×512),给图像分别加入0.1,0.2,0.3的椒盐噪声运行程序,然后观察结果。

处理结果如图1所示,其中的(a)、(b)分别是对加入0.2、0.3的椒盐噪声(图中r表示加入图像的椒盐噪声密度)的图像处理结果。可以观察到图 1 (a)中有少量噪声并未得到有效处理。

经过实验,可以判断这些噪声点未得到有效处理的原因有两种:(1)在检测环节受其他噪声的影响未能被有效识别;(2)去噪过程用于替代当前像素点的灰度中值也是一个噪声点,导致无法实现去噪效果。针对这两种情况,本文只要在处理得到的图像的基础上再运行几遍算法即可去除这些噪声。

图1 算法处理加噪图像效果图

观察图 1(b)可以发现,除了图1(a)中出现的那种孤立噪声点的情况,还出现了一些更明显的黑(白)斑。这是因为本文限制了Step 3中的i值小于5,使得数目大于5的噪声点聚集起来的情况得不到有效处理。但考虑这种像素数量大于5的黑(白)斑相对周围区域孤立的特点并未发生改变。本文可以通过修改j值(i可取到的最大值)的方式来消除这些噪声性。

为了避免一直要手动调整j值(i可取到的最大值),本文可以通过循环使j值自增,依次消除从小到大的噪声区域。在Step 4之后,增加Step 5:j=j+5。

对图像循环执行Step 1~Step 5,直到满足条件:执行Step 4时发现list 3为空列表(即执行Step 3时发现图像中没有噪声点),此时停止循环,输出处理好的图像。

按上述方法改写算法。用改过的算法重新处理加过噪声的图像。观察被处理图像,可以发现经过改进的算法有效地解决了本文之前遇到的问题。这里只展现之前效果最差的图1(b)用改写算法重新处理的效果,处理结果见图1(c)。

4 仿真结果及分析

图2 不同算法处理加噪图像效果图

本文算法为在OpenCV图像处理函数库基础上,使用python 3.7编写而成。现为了验证算法效果,选择512×512大小的lena作为测试图像,在操作系统为Windows10,CPU为Intel(R) Core(TM) I7-8750H CPU@2.20 GHz,内存为8 GB的计算机上进行仿真实验。

为了直观评价算法效果,现分别用标准中值滤波(Standard median filter, SFM)算法、极值中值滤波(Extreme median filter, EM)算法[14]、自适应中值滤波(Improved adaptive median filter, IAM)算法[15]、基于直方图的加权均值滤波算法(Histogram weighted filter, HWF)[16]和本文的连通检测中值滤波算法(Connectivity detection median filter,CDM)分别处理加入0.1,0.3,0.5,0.7,0.9椒盐噪声的图像,可以发现本文算法处理结果的视觉效果优于其他算法。

图2中分别展示了对比算法中表现最好的改进自适应中值滤波算法、基于直方图的加权均值滤波(HWF)算法与本文算法处理加入了0.1,0.5,0.9密度的椒盐噪声图像的效果。

图2中(a)、(b)、(c) 为改进自适应中值滤波(IAM)算法,(d)、(e)、(f)为基于直方图的加权均值滤波(HWF)算法,(h)、(i)、(j)为本文提出的算法分别处理加入了0.1,0.5,0.9密度的椒盐噪声(r表示加入图像的椒盐噪声密度)的图片的效果图。

可以发现本文算法在不同噪声密度条件下表现均好于其他算法。特别是在0.9的噪声密度的情况下,其他算法不是未能有效地去除噪声就是得到的图像严重模糊。相比而言,本文算法在去除噪声的同时很好地保存了图像的细节。

峰值信噪比(Peak signal-to-noise ratio,PSNR)是一种衡量图像质量的客观评价标准[17-20]。一般求得的PSNR 越大,表示滤波效果越好。其计算公式如下:

(3)

本文分别计算经不同算法处理后图像的PSNR值,并与经本文算法处理后得到的图像的PSNR值进行比较。

图3 不同噪声密度下各算法的PSNR值

观察图3,可以发现整个噪声率范围内本文的连通检测滤波算法效果都要优于其他算法。在0.1~0.7噪声密度情况下,本文算法的PSNR值分别为42,36,33,32 dB,始终比用于其他4个算法中表现最好的HWF算法高3 dB;而在0.9的噪声密度下,PSNR值为30 dB,较HWF算法高5.5 dB。

表1 各算法运行时间

从表1可知,在0.1~0.9的噪声密度下,本文算法处理噪声所需时间都要长于其他的4种算法,且所需时间随着噪声密度的增加而增加。这是因为在高密度噪声的情况下,本文算法需要增加循环次数以消除噪声点聚集在一起形成的更大的黑(白)斑块。但即使是在0.9的噪声密度下,算法的运行时间也只是85.54 ms,仍在可接受的范围内。

5 结 论

本文分析了椒盐噪声的特性,针对椒盐噪声相对孤立的特点,提出了一种基于像素连通性判断的椒盐噪声检测算法。针对在低密度噪声情况下遇到的椒盐噪声点无法除尽问题和高噪声密度下椒盐噪声点聚集为椒盐噪声块问题,分别通过循环处理和修改种子填充算法的截止条件对算法进行优化、改进,最终获得了良好的滤波效果。该算法避免了不加区分地处理所有像素点,在去除噪声的同时有效地保护了图像的边缘细节。实验结果表明,本文提出的算法可以有效处理密度在0~0.9范围的椒盐噪声,且在0.9的噪声密度下算法可保证30 dB的峰值信噪比。满足有效去除不同密度范围内的椒盐噪声的同时保护图像细节的要求。

猜你喜欢

椒盐邻域像素点
稀疏图平方图的染色数上界
基于邻域竞赛的多目标优化算法
基于canvas的前端数据加密
基于逐像素点深度卷积网络分割模型的上皮和间质组织分割
关于-型邻域空间
基于Node-Cell结构的HEVC帧内编码
椒盐芝麻烧饼
基于噪声检测的高密椒盐噪声自适应滤波算法
基于时序扩展的邻域保持嵌入算法及其在故障检测中的应用
素菜之美:椒盐素食