噪声去除

数字图像容易产生各种各样的噪声。噪声是在图像采集过程中由于错误导致的像素值不能反映真实场景的真实强度的结果。有几种方法可以将噪声引入图像,这取决于图像是如何创建的。例如:

  • 如果从胶片上拍摄的照片上扫描图像,胶片颗粒就是噪声源。噪音也可能是胶片损坏的结果,或者是由扫描仪本身引起的。

  • 如果直接以数字格式获取图像,则收集数据的机制(如CCD探测器)可能会引入噪声。

  • 图像数据的电子传输会引入噪声。

为了模拟上面列出的一些问题的效果,工具箱提供imnoise函数,您可以使用该函数添加图像中的各种类型的噪声。本节中的示例使用此函数。

通过线性滤波去除噪声

你可以用线性滤波去除某些类型的噪声。某些滤波器,如平均滤波器或高斯滤波器,适合于此目的。例如,平均滤波器对于去除照片中的颗粒噪声很有用。因为每个像素都被设置为其邻域像素的平均值,从而减少了由纹理引起的局部变化。

看到什么是空间域的图像过滤?有关使用的线性滤波的更多信息imfilter

使用平均滤波器和中值滤波器去除噪声

此示例演示如何使用平均滤波器和中值滤波器从图像中去除椒盐噪声,以便对结果进行比较。这两种类型的滤波都将输出像素的值设置为相应输入像素周围邻域中像素值的平均值。然而,通过中值滤波,输出像素的值由邻域像素的中值而不是平均值确定。中位数对极值(称为异常值)的敏感性远低于均值。因此,中值滤波能够更好地去除这些异常值,而不会降低图像的清晰度。

注:中值滤波是顺序统计滤波的一种特殊情况,也称为秩滤波。有关顺序统计滤波的信息,请参阅ordfilt2函数。

将图像读入工作区并显示它。

我= imread (“eight.tif”); 图1(I)

对于本例,添加盐和胡椒噪声的图像。这种类型的噪声由被设置为黑色或白色(数据范围的极端)的随机像素组成。

J = imnoise(我的盐和胡椒, 0.02);图imshow (J)

滤波噪声图像,J,并显示结果。这个例子使用了一个3 × 3的邻域。

Kaverage = filter2 (fspecial (“平均”3), J) / 255;图imshow (Kaverage)

现在使用中值滤波器来过滤噪声图像,J.这个例子还使用了一个3 × 3的邻域。显示两个过滤图像并排比较。请注意,医疗过滤器2在消除噪音方面做得更好,硬币边缘的模糊程度更低。

Kmedian=medfilt2(J);imshowpair(Kaverage、Kmedian、,“蒙太奇”

自适应滤波去除噪声

此示例显示如何使用维纳2函数将维纳滤波器(一种线性滤波器)自适应应用于图像。维纳滤波器根据局部图像的变化量进行自我调整。如果差异很大,维纳2执行平滑。当方差很小时,维纳2执行更平滑的操作。

这种方法通常产生比线性滤波更好的结果。自适应滤波器比可比的线性滤波器更有选择性,保留了图像的边缘和其他高频部分。此外,没有设计任务;的维纳2函数处理所有的初步计算并实现输入图像的过滤器。维纳2,然而,确实需要比线性滤波更多的计算时间。

维纳2当噪声是恒定功率(“白”)的加性噪声,如高斯噪声时,工作效果最好。应用下面的示例维纳2添加了高斯噪声的土星图像。

将图像读入工作区。

RGB=imread(“saturn.png”);

将图像从真彩色转换为灰度。

I=im2gray(RGB);

添加高斯噪声的图像

J = imnoise(我“高斯”,0,0.025);

显示有噪声的图像。因为图像相当大,所以只显示图像的一部分。

imshow (J (600:1000 1:6));标题(“添加高斯噪声的图像部分”);

使用扬声器消除噪音维纳2函数。

K = wiener2(J,[5 5]);

显示处理后的图像。因为图像相当大,所以只显示图像的一部分。

图imshow(K(600:1000,1:600));标题(“用维纳滤镜去除噪点的部分图像”);

另请参阅

|||||

相关话题