首页 » 刷脸背后:人脸检测 人脸识别 人脸检索 » 刷脸背后:人脸检测 人脸识别 人脸检索全文在线阅读

《刷脸背后:人脸检测 人脸识别 人脸检索》2.6 图像的噪声和滤波

关灯直达底部

在数字图像处理中,经常会遇到一些模糊、失真或者有干扰的图像,这些造成图像不清晰的因素就是图像的噪声。图像的噪声可分为加性噪声、乘性噪声和量化噪声,常见的噪声模型有高斯噪声、椒盐噪声、均匀分布噪声、指数分布噪声和Gamma分布噪声。为了获得清晰的、高质量的图像,需要对有噪声的图像进行去噪,比较经典的去噪算法有均值滤波、自适应维纳滤波、中值滤波、形态学噪声滤波和小波滤波。本节主要对常见的噪声模型和经典的去噪算法进行介绍。

2.6.1 常见的噪声模型

1.高斯噪声

高斯噪声是一种源于电子电路噪声和由低照明度或高温带来的传感器噪声。高斯噪声是一种比较常见的噪声,它的概率密度呈正态分布。

在MATLAB中,函数imnoise可以对图像添加高斯噪声,有三种方式,格式如下。

第一种:

newimg=imnoise(img,’ gaussian’,m,v);

newimg是添加高斯噪声后的图像,img是原图像,gaussian表示噪声类型为高斯噪声,m为噪声的均值,v是噪声的方差。m和v如果不设置,则使用系统默认参数。

第二种:

newimg=imnoise(img,’localvar’,V);

newimg是添加高斯噪声后的图像,img是原图像,V是一个和img相同尺寸的数组,V中的每个元素表示在img对应位置添加的高斯噪声的方差,此时高斯噪声的均值为0。

第三种:

newimg=imnoise(img,’localvar’,h,v);

newimg是添加高斯噪声后的图像,img是原图像,h是一个表示图像亮度的向量,亮度值在[0,1]。v和h的长度相同,h的每个值表示和v对应位置的亮度上添加的高斯噪声的方差。

下面我们通过Code25来说明如何在图像上添加高斯噪声。

Code25:ch2_25.m

运行Code25后,结果如图2-37所示。该程序使用三种不同的方式添加高斯噪声,图(a)是原图像,图(b)是根据噪声的均值和方差添加高斯噪声后的图像,图(c)是根据像素位置添加高斯噪声后的图像,图(d)是根据图像的亮度添加高斯噪声后的图像。

图2-37 Code25运行后的结果

2.椒盐噪声

椒盐噪声是一种只有两种灰度值作为噪声出现在图像上的噪声,因此也称为双极脉冲噪声。负脉冲时黑点出现,正脉冲时盐点(白点)出现。

去除椒盐噪声最常用的算法是中值滤波。

对图像img添加噪声,类型可以为:gaussian(高斯噪声)、salt&pepper(椒盐噪声)、speckle(乘性噪声)、poisson(泊松噪声)。param是对应类型噪声的参数,如果不设置,则使用系统默认的参数。

在MATLAB中,也可以使用函数imnoise产生椒盐噪声,格式如下。

newimg=imnoise(img,’salt & pepper’,d)

newimg是添加椒盐噪声后的图像;img是原图像;salt & pepper表示噪声的类型为椒盐噪声;d为椒盐噪声的密度,表示椒盐噪声占图像像素总分的百分比。

下面我们通过Code26来说明如何利用函数imnoise产生椒盐噪声。

Code26:ch2_26.m

运行Code26后,结果如图2-38所示。图(a)的噪声密度为0.01,图(b)的噪声密度为0.08。从中可以看出,噪声密度越大,噪声越多。黑点代表胡椒点,白点代表盐点。

图2-38 Code26的运行结果

此外,函数imnoise还可以产生其他类型的噪声,如乘性噪声、泊松噪声等,本书不多做介绍,读者可查阅MATLAB帮助文档进行学习。

2.6.2 经典的去噪算法

1.均值滤波

均值滤波是一种简单的去噪方法,对于图像中的坐标为(x,y)的像素,以该点为中心创建一个矩形框,计算该矩形框中像素的平均值,用得到的平均值替换像素点(x,y)的值。在MATLAB中,可以通过函数fspecial(/'average/')得到均值滤波算子,然后利用函数imfilter对含噪声的图像进行滤波。

下面我们通过程序Code27来说明如何利用函数fspecial和函数imfilter对包含噪声的图像进行均值滤波。

Code27:ch2_27.m

运行Code27后,结果如图2-39所示。可以看到,进行均值滤波后的图像变得模糊,这是因为均值滤波破坏了图像的细节部分,这也是均值滤波的一个缺点。

图2-39 Code27的运行结果

2.自适应维纳滤波

在MATLAB中,函数wiener2可以对含噪声的图片进行自适应维纳滤波,还可以估计噪声。该函数由图像的局部方差决定滤波器的输出结果,使用格式如下。

newimg=wiener2(img,[m,n],noise);

img是包含噪声的图像;[m,n]是采用的窗口大小,默认为[3,3];noise是噪声的能量;newimg是滤波后的图像。

[newimg,noise]=wiener2(img,[m,n])

该函数用来估计图像中的噪声。

下面我们通过Code28来说明如何对包含噪声的图像进行自适应维纳滤波。

Code28:ch2_28.m

运行Code28后,结果如图2-40所示。在工作空间中,查看noise的值,即估计的噪声能量,noise=0.0124。

图2-40 Code28的运行结果

3.中值滤波

中值滤波是顺序统计滤波中的一种,顺序统计滤波中还有最小值滤波、最大值滤波。中值滤波适合去除椒盐噪声,因为它可以保留图像的边缘。对于图像上坐标为(x,y)的像素,以该像素为中心的一个m×n像素的窗口,找出该区域内中间的像素值,用于替换点(x,y)的像素值。在MATLAB中,函数medfilt2可实现图像的二维中值滤波,格式如下。

newimg=medfilt2(img,[m,n]);

img是含噪声的图像;newimg是滤波后的图像;[m,n]是窗口的大小,默认为[3,3]。

下面我们通过Code29来说明如何利用函数medfilt2对含噪声的图像进行滤波。

Code29:ch2_29.m

运行Code29,结果如图2-41所示。由图2-41(a)和(b)可以看出,中值滤波对于含椒盐噪声的图像去噪效果较好。

图2-41 Code29的运行结果