Main Content

wiener2

二维自适应去噪滤波

语法 wiener2(I,[m n],[mblock nblock],noise) 已删除。请改用 wiener2(I,[m n],noise) 语法。

说明

J = wiener2(I,[m n],noise) 使用像素级自适应低通 Wiener 滤波器对灰度图像 I 进行滤波。[m n] 指定用于估计局部图像均值和标准差的邻域的大小(m×n)。加性噪声(高斯白噪声)功率假定为 noise

输入图像的质量已被恒定功率加性噪声降低。wiener2 基于从每个像素的局部邻域估计的统计量使用像素级自适应 Wiener 方法。

示例

[J,noise_out] = wiener2(I,[m n]) 返回 wiener2 在进行滤波之前计算的加性噪声功率的估计值。

示例

全部折叠

此示例说明如何使用 wiener2 函数将 Wiener 滤波器(一种线性滤波器)以自适应方式应用于图像。Wiener 滤波器可自行适应图像局部方差。当方差较大时,wiener2 几乎不执行平滑处理。当方差较小时,wiener2 执行更多平滑处理。

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

当噪声是恒定功率(“白色”)加性噪声(如高斯噪声)时,wiener2 效果最佳。以下示例将 wiener2 应用于添加了高斯噪声的土星图像。

将图像读入工作区中。

RGB = imread('saturn.png');

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

I = im2gray(RGB);

向图像中添加高斯噪声

J = imnoise(I,'gaussian',0,0.025);

显示含噪图像。由于图像相当大,因此只显示图像的一部分。

imshow(J(600:1000,1:600));
title('Portion of the Image with Added Gaussian Noise');

使用 wiener2 函数去除噪声。

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

显示处理后的图像。由于图像相当大,因此只显示图像的一部分。

figure
imshow(K(600:1000,1:600));
title('Portion of the Image with Noise Removed by Wiener Filter');

输入参数

全部折叠

输入图像,指定为二维数值数组。

数据类型: single | double | int16 | uint8 | uint16

邻域大小,指定为 [m n] 形式的二元素向量,其中 m 是行数,n 是列数。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

加性噪声,指定为数值数组。如果不指定噪声,则 wiener2 使用局部方差的均值,即 mean2(localVar)

数据类型: single | double

输出参量

全部折叠

滤波后的图像,以与输入图像 I 大小和数据类型相同的数值数组形式返回。

加性噪声功率的估计值,以数值数组形式返回。

算法

wiener2 估计每个像素周围的局部均值和方差。

μ=1NMn1,n2ηa(n1,n2)

σ2=1NMn1,n2ηa2(n1,n2)μ2,

其中,η 是图像 A 中每个像素的 N×M 局部邻域。然后,wiener2 使用这些估计值创建像素级 Wiener 滤波器,

b(n1,n2)=μ+σ2ν2σ2(a(n1,n2)μ),

其中 ν2 是噪声方差。如果没有给出噪声方差,则 wiener2 使用所有局部估计方差的平均值。

参考

[1] Lim, Jae S. Two-Dimensional Signal and Image Processing, Englewood Cliffs, NJ, Prentice Hall, 1990, p. 548, equations 9.44, 9.45, and 9.46.

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开