基于中值滤波的图像边缘去噪算法研究

2019-08-20 07:26郝波卢小平
现代计算机 2019年20期
关键词:椒盐灰度均值

郝波,卢小平

(河南理工大学矿山空间信息技术国家测绘地理信息局重点实验室,焦作454003)

0 引言

椒盐噪声又称为脉冲噪声,它是由图像传感器、传输信道、解码处理等产生的黑白相间的亮暗点噪声,可以随机改变图像的灰度值[1]。噪声种类主要有椒盐噪声(Salt & Pepper)、高斯噪声(Gaussian)、泊松噪声(Poisson)和斑点噪声(Speckle)。含有噪声的图像对于后期数字图像处理如边缘提取、图像分割和模式识别带来了一定影响,因此有必要对图像进行去噪处理。

去除噪声的过程称为图像滤波或图像平滑,目的是为了消除图像中存在的各种噪声[2]。常见的滤波算法有均值滤波、中值滤波和高斯滤波,其中中值滤波是去除椒盐噪声的主要方法。

由于去噪时模板的选择大多集中在3×3、5×5 和7×7,实际处理时进行赋值的仅仅是中间部分的像素,因此在进行去噪时导致边缘部分无法进行去噪,如3×3模板会存在整幅图像最外一行(列)像素得不到处理的情况,5×5 模板最外两行边像素得不到处理的情况,7×7 最外三行像素得不到处理的情况,以此类推。很多去噪算法都是针对如何快速、高效和准确地去除椒盐噪声[3-6],忽略了图像边缘存在的噪声。本文针对上述问题,在实现中值滤波的同时,提出了三种利用均值进行边缘去噪的算法,并以含椒盐噪声的Lena 图像为例进行去噪处理,最后将处理结果和使用MATLAB 软件生成的去噪图像进行了对比。

1 中值滤波原理

中值滤波是一种常用的去除椒盐噪声的非线性平滑技术,通过将像素点的灰度值设置为该点某邻域窗口(模板)内的所有像素点灰度值的中值来进行平滑处理,是一种基于排序统计理论的能有效抑制噪声的非线性信号处理技术[7-8]。

中值滤波的基本原理是使用某种模板(3×3、5×5或7×7)从边缘开始逐行或逐列进行移动,每次移动将其窗口内的图像像素进行排列取其统计中的中值替换窗口中间像素的值,以3×3 模板(黄色部分)逐行处理为例,箭头方向为窗口移动方向[9-11]。

图1 中值滤波过程

如图1 所示,在获得3×3 窗口中的九个像素之后进行排序(从大到小或从小到大),取其中值作为中间绿色位置的像素,然后不断的向右移动,一直到达最右侧边缘位置时进行换行继续进行下一行像素的处理,直到窗口移动到右下角的位置时处理结束。

从演示图可以看出当使用模板进行中值滤波的时候最外面的像素得不到处理,即第一行、最后一行、第一列和最后一列。这对于图像的滤波来说达不到全部处理的效果(边缘可能还存在噪声),因此有必要针对边缘去噪进行研究。本文在实现中值滤波的前提下,针对边缘还存在噪声的情况提出了三种边缘去噪的算法,通过该算法可以很好地去除边缘存在的噪声。

2 边缘去噪算法实现

在中值滤波算法基础之上,本文提出三种边缘去噪算法,一是在边缘处按照1×2、1×3 或者1×4 模板取均值,二是在边缘处选择2×2 模板取均值,三是在边缘处相隔一行(列)按照1×2、1×3 或者1×4 模板取均值。

在实现三种滤波算法之前首先利用MATLAB 自带函数imnoise()生成噪声污染系数N 为0.1 的椒盐噪声图像,然后利用MATLAB 自带函数medfilt2()进行3×3、5×5 和7×7 模板去噪处理并进行局部(左上角)放大,其效果如图2 所示。

由图2 可以看出当利用MATLAB 进行的中值滤波去噪时,不管使用哪个模板进行中值滤波都存在边缘噪声,即利用一般的去噪方法并不能进行边缘噪声的去除。

2.1 最外一行(列)取均值

方法一的原理是针对没有去噪的最外一行/列(绿色部分)灰度值使用模板1×2、1×3(红色部分)或1×4取均值进行去噪,以第一行(3×3 模板)为例,其原理如图3 所示。

图3 方法一1×3模板原理

首先是第一行没有进行去噪的像素,利用模板从左向右移动并取其三个像素的均值替换中间像素的灰度值,其次是获取图像最后一行的位置进行均值去噪,然后是第一列进行均值去噪,最后是最后一列进行均值去噪。

利用C++编程实现了对噪声污染系数N 为0.1 的椒盐噪声图像进行1×2、1×3 和1×4 模板的去噪处理并进行局部(左上角)放大,最后和没有进行边缘去噪的图像进行了对比,其效果如图4 所示。

图4 方法一去噪效果

从图4 可以看出,未进行边缘去噪的图像边缘部分有明显的噪声存在,利用1×2 模板进行去噪的图像边缘有明显的黑色阴影,利用1×3 模板进行去噪的图像边缘有了明显的改善(噪声颜色变浅),利用1×4 模板进行去噪的图像边缘处理效果最差,噪声不仅没有减少,反而增加。

总体来说用1×3 模板进行去噪的图像边缘处理效果最好,达到了一定程度的平滑处理,和原始未进行边缘去噪的图像相比其去噪程度最好,其他两种方式都达不到理想的平滑效果。但是总的去噪效果还是不理想,这是因为进行去噪的灰度值是最外面没有进行过任何处理的灰度值,大量椒盐噪声的存在使得即使取均值也得不到很好的去噪效果。

2.2 2×2模板取均值

方法二的原理是针对图像最外两行(绿色部分)的灰度值使用2×2 模板(红色部分)取均值进行去噪。以第一行灰度值进行去噪为例,其原理如图5 所示。

首先进行中值滤波得到只有最外面一行没有进行去噪的图像,利用这个图像在第一行和第二行做一个2×2 的模板,区模板均值赋值给第一行的像素,然后沿着箭头方向依次进行处理,这样第一行像素就得到了去噪处理。利用同样的方法对倒数最后一行、第一列和最后一列进行去噪。

图5 方法二2×2模板原理

利用C++编程对噪声污染系数N 为0.1 的椒盐噪声图像进行2×2 模板去噪处理并进行局部(左上角)放大,其效果如图6 所示。

图6 方法二去噪效果

从图6 可以看出,和未进行边缘去噪的图像相比,利用2×2 模板进行去噪的图像边缘已经不含有椒盐噪声,达到了理想的平滑效果。

2.3 相隔一行(列)取均值

方法三的原理是针对没有去噪的最外一行/列(绿色部分)灰度值使用相邻一行(列)的灰度值(绿色部分)取均值进行去噪。其原理和方法一差不多,只是选取的像素位置不一样,所以得到的效果也不一样。以第二行(1×3 模板)为例,其原理如图7 所示。

首先是第二行没有得到去噪的像素,利用模板从左向右进行移动并取其三个像素的均值替换中间像素的灰度值,其次是获取图像倒数第二行的位置进行均值去噪,然后是第二列进行均值去噪,最后是倒数第二列进行均值去噪。

图7 方法三1×3模板原理

利用C++编程对噪声污染系数N 为0.1 的椒盐噪声图像进行1×2、1×3 和1×4 模板去噪处理并进行局部(左上角)放大,其效果如图8 所示。

图8 方法三去噪效果

从图8 可以看出,和未进行边缘去噪的图像相比,不管是利用1×2、1×3 模板,还是利用1×4 模板对图像边缘进行去噪都能够达到理想的效果。

和方法一相比,边缘去噪的效果更好也更明显,这是因为进行滤波的灰度值中已经是经过中值滤波的灰度值,是不含有椒盐噪声的灰度值,因此在进行边缘去噪时不管使用1×2 或1×3 模板,还是1×4 模板能够达到去噪平滑。

3 实验分析

为了比较几种方法的在运行效率上的不同,本文从各种算法在去噪时的运行时间上进行对比。电脑配置 为 Intel Core i3- 2348M,CPU @ 2.3GHz,RAM 4.00GB,64 位操作系统。表1-2 列出了不同分辨率的图像进行中值滤波去噪的运行时间。

表1 396×396 像素处理时间(单位:ms)

表2 978×550 像素处理时间(单位:ms)

从表1 可以看出,对于较小的图像不管采用哪种算法进行中值滤波去噪时的时间使用几乎一样,但是当图像分辨率提高,处理的像素个数变多时的运行时间开始有差异(表2),同时随着窗口的增大不管采用哪种算法其运行时间都会随之增大。对于方法一和方法三,由于采用的是相邻几个像素取均值的处理方式,随着相邻像素个数的增加,其处理时间也随之增加。对于方法二,其采用的是2×2 的矩形窗口为模板,从这次运行时间来看要比另外两种方法短,可见在三种方法中方法二更适合作为边缘去噪的主方法。

4 结语

作为一种经典的去噪方法,中值滤波一直以来都是去除椒盐噪声的主要方法,很多算法的提出与改进也都是基于中值滤波。本文在实现中值滤波的前提下,针对边缘存在的椒盐噪声提出了去除椒盐噪声的三种算法,方法一和方法三又包含三种去噪方式。总的来说,方法二和方法三去噪效果最好,能达到理想的去噪效果。方法一由于在去噪过程中依赖了大量的噪声,因此去噪效果不是很理想,在实际去噪过程中依然存在大量噪声。方法二和方法三在实际去噪时都能明显的去除噪声,不失为一种去噪的好方法,特别是方法二,从实际处理速度上来说,方法二更加适合作为边缘去噪的方法。由于在进行边缘去噪时依然采用了1×2、1×3、1×4 或2×2 的模板进行去噪,因此在实际处理中还存在个别像素得不到处理的情况。以方法一中的1×2 模板为例,每次进行赋值为模板第一个像素的位置,当模板移动到最右侧时,右上角的像素得不到赋值,依然保持原来像素的灰度值。图像上得不到赋值的像素位置总共两个(右上角和右下角),因此本文还有可改进的地方。

猜你喜欢
椒盐灰度均值
航空滤光片阵列多光谱图像条带灰度调整算法
采用改进导重法的拓扑结构灰度单元过滤技术
天津港智慧工作平台灰度发布系统和流程设计
学做椒盐虾
Arduino小车巡线程序的灰度阈值优化方案
均值—方差分析及CAPM模型的运用
均值—方差分析及CAPM模型的运用
浅谈均值不等式的应用
均值不等式的小应用
椒盐芝麻烧饼