噪声去除
数字图像容易产生各种类型的噪声。噪声是图像采集过程中错误的结果,导致像素值不能反映真实场景的真实强度。有几种方法可以将噪声引入图像,这取决于图像是如何创建的。例如:
如果从胶片上的照片扫描图像,胶片颗粒是噪声源。噪声也可能是胶片损坏的结果,或者是扫描仪本身引入的。
如果以数字格式直接获取图像,则用于收集数据的机制(如CCD检测器)可能会引入噪声。
图像数据的电子传输会引入噪声。
为了模拟上面列出的一些问题的效果,工具箱提供了imnoise
函数,您可以使用它来添加图像的各种类型的噪声。本节中的示例使用了该函数。
线性滤波去除噪声
您可以使用线性滤波来去除某些类型的噪声。某些滤波器,如平均或高斯滤波器,适用于此目的。例如,平均滤波器用于从照片中去除颗粒噪声。由于每个像素都被设置为其邻近像素的平均值,因此减少了由颗粒引起的局部变化。
看到什么是空间域图像滤波?有关线性滤波的更多信息,请使用imfilter
.
使用平均滤波器和中值滤波器去除噪声
这个例子展示了如何使用平均滤波器和中值滤波器从图像中去除盐和胡椒噪声,以允许结果进行比较。这两种类型的滤波都将输出像素的值设置为对应输入像素周围邻域像素值的平均值。然而,使用中值滤波,输出像素的值由邻域像素的中值决定,而不是平均值。中位数对极端值(称为异常值)的敏感度远低于平均值。因此,中值滤波能够更好地去除这些异常值,而不降低图像的清晰度。
注:中值滤波是有序统计滤波的一种特殊情况,也称为秩滤波。有关顺序统计信息过滤的信息,请参阅ordfilt2
函数。
将图像读入工作区并显示它。
I = imread(“eight.tif”);图imshow(我)
对于本例,在图像中添加盐和胡椒噪声。这种类型的噪声由被设置为黑色或白色(数据范围的极端)的随机像素组成。
J = imnoise(I,“盐和胡椒”, 0.02);图imshow (J)
对噪声图像进行滤波,J
,并显示结果。这个例子使用了一个3乘3的邻域。
Kaverage = filter2(fspecial(“平均”3), J) / 255;图imshow (Kaverage)
现在使用中值滤波器来过滤有噪声的图像,J
.该示例还使用了3 × 3邻域。并排显示两个过滤后的图像以进行比较。请注意,medfilt2
能更好地去除噪音,减少硬币边缘的模糊。
Kmedian = medfilt2(J);imshowpair (Kaverage Kmedian,“蒙太奇”)
自适应滤波去除噪声
方法的使用wiener2
函数将维纳滤波器(一种线性滤波器)应用于图像自适应。维纳滤波器根据局部图像方差进行自我调整。当方差很大时,wiener2
执行小平滑。当方差很小时,wiener2
执行更多平滑操作。
这种方法通常比线性滤波产生更好的结果。自适应滤波器比线性滤波器更具选择性,可以保留图像的边缘和其他高频部分。此外,没有设计任务;的wiener2
函数处理所有初步计算,并为输入图像实现过滤器。wiener2
然而,与线性滤波相比,它需要更多的计算时间。
wiener2
当噪声是常功率(“白”)加性噪声时,如高斯噪声,效果最好。应用下面的示例wiener2
加了高斯噪声的土星图像。
将图像读入工作区。
RGB = imread(“saturn.png”);
将图像从真彩色转换为灰度。
I = im2gray(RGB);
为图像添加高斯噪声
J = imnoise(I,“高斯”, 0, 0.025);
显示有噪声的图像。因为图像相当大,所以只显示图像的一部分。
imshow (J (600:1000 1:6));标题(“加高斯噪声的部分图像”);
删除噪音使用wiener2
函数。
K = wiener2(J,[5 5]);
显示处理后的图像。因为图像相当大,所以只显示图像的一部分。
图imshow (K (600:1000 1:6));标题(维纳滤波去噪图像的部分);
另请参阅
imfilter
|imguidedfilter
|imgaussfilt
|locallapfilt
|nlfilter
|imbilatfilt