维纳滤波复原matlab书上代码
时间: 2023-09-14 08:07:43 浏览: 104
以下是使用Matlab实现维纳滤波复原的示例代码:
```matlab
% 读取图像
img = imread('lena.png');
% 将图像转换为灰度图像
img_gray = rgb2gray(img);
% 添加高斯噪声
img_noisy = imnoise(img_gray, 'gaussian', 0, 0.01);
% 显示原始图像和带噪声的图像
subplot(1, 2, 1), imshow(img_gray), title('Original Image');
subplot(1, 2, 2), imshow(img_noisy), title('Noisy Image');
% 计算噪声功率谱
[m, n] = size(img_noisy);
Pn = abs(fft2(im2double(img_noisy))).^2/(m*n);
% 计算原始图像的功率谱
img_fft = fft2(im2double(img_gray));
Ps = abs(img_fft).^2/(m*n);
% 计算 Wiener 滤波器的频域函数
K = 0.01;
H = conj(img_fft)./(abs(img_fft).^2 + K*Pn);
% 对带噪声的图像进行维纳滤波复原
img_wiener = abs(ifft2(H.*fft2(im2double(img_noisy))));
% 显示维纳滤波复原后的图像
figure, imshow(img_wiener), title('Wiener Filtered Image');
```
在这个示例中,我们首先读取图像并将其转换为灰度图像。然后,我们添加高斯噪声到图像中,得到带噪声的图像。接着,我们计算噪声功率谱和原始图像的功率谱,并使用它们来计算 Wiener 滤波器的频域函数。最后,我们使用维纳滤波器对带噪声的图像进行复原,并显示复原后的图像。
阅读全文