降噪
数字图像容易出现各种类型的噪声。噪声是图像采集过程中错误的结果,该过程导致像素值无法反映真实场景的真实强度。根据图像的创建方式,可以通过几种方式将噪声引入图像中。例如:
如果图像是从胶片上拍摄的照片中扫描的,则胶片是噪音的来源。噪声也可能是对膜损坏的结果,也可能是扫描仪本身引入的。
如果直接以数字格式获取图像,则收集数据的机制(例如CCD检测器)可以引入噪声。
图像数据的电子传输可以引入噪声。
为了模拟上述某些问题的影响,该工具箱提供了imnoise
功能,您可以使用添加图像的各种噪音。本节中的示例使用此功能。
通过线性过滤消除噪音
您可以使用线性过滤来删除某些类型的噪声。某些过滤器(例如平均或高斯过滤器)适合此目的。例如,平均过滤器可用于消除照片中的谷物噪声。由于每个像素都设置为邻居中像素的平均值,因此谷物引起的局部变化会减少。
看空间域中的图像过滤是什么?有关使用线性过滤的更多信息Imfilter
。
使用平均过滤器和中间过滤器去除噪音
此示例显示了如何使用平均过滤器和中间过滤器从图像中清除盐和胡椒噪声,以比较结果。这两种过滤都将输出像素的值设置为相应输入像素周围附近的像素值的平均值。但是,通过中位过滤,输出像素的值由邻域像素的中值决定,而不是平均值。中位数比对极值值(称为异常值)的平均值敏感得多。因此,中值过滤可以更好地删除这些异常值,而无需降低图像的清晰度。
注意:中值过滤是订单统计过滤的特定情况,也称为秩滤波。有关订单统计过滤的信息,请参阅参考页ORDFILT2
功能。
将图像读取到工作区中并显示。
i = imread('八.tif');图Imshow(i)
在此示例中,在图像中添加盐和胡椒噪声。这种类型的噪声包括将随机像素设置为黑色或白色(数据范围的极端)。
j = imnoise(i,'椒盐',0.02);图IMShow(J)
过滤嘈杂的图像,j
,使用平均过滤器并显示结果。该示例使用3 x 3社区。
kaverage = filter2(fspecial('平均',3),j)/255;图IMShow(Kaverage)
现在使用中位过滤器过滤嘈杂的图像,j
。该示例还使用3 x 3社区。并排显示两个过滤图像以进行比较。注意Medfilt2
在消除噪音方面做得更好,而硬币边缘的模糊性较小。
kmedian = medfilt2(j);Imshowpair(Kaverage,Kmedian,'剪辑')
通过自适应过滤消除噪音
此示例显示了如何使用Wiener2
函数以适应图像应用Wiener滤波器(一种线性滤波器)。维纳过滤器为本地图像方差量身定制。差异很大的地方Wiener2
几乎没有平滑。差异很小的地方Wiener2
执行更平滑。
这种方法通常比线性过滤更好。自适应滤波器比可比较的线性滤波器更具选择性,保留图像的边缘和其他高频部分。此外,没有设计任务;这Wiener2
功能处理所有初步计算,并实现输入图像的过滤器。Wiener2
但是,与线性过滤相比,确实需要更多的计算时间。
Wiener2
当噪声是恒定功率(“白色”)添加噪声(例如高斯噪声)时,效果最好。下面的示例适用Wiener2
到土星图像,并增加了高斯噪音。
将图像阅读到工作区中。
rgb = imread('Saturn.png');
将图像从TrueColor转换为灰度。
i = im2gray(rgb);
在图像中添加高斯噪音
j = imnoise(i,“高斯”,0,0.025);
显示嘈杂的图像。因为图像很大,所以仅显示图像的一部分。
Imshow(J(600:1000,1:600));标题(“图像的一部分,加上高斯噪声”);
消除噪音Wiener2
功能。
k = wiener2(j,[5 5]);
显示处理的图像。因为图像很大,所以仅显示图像的一部分。
图Imshow(K(600:1000,1:600));标题(“图像的一部分,由Wiener Filter删除了噪声”);
也可以看看
Imfilter
|IMGUIDERFILTER
|Imgaussfilt
|locallapfilt
|nlfilter
|Imbilatfilt