编写一个利用维纳滤波方法进行图像复原的MATLAB
时间: 2024-05-10 16:16:39 浏览: 6
下面是一个基于维纳滤波的图像复原的MATLAB代码示例:
```matlab
% 读取图像
I = imread('image.jpg');
% 将图像转换为灰度图
I = rgb2gray(I);
% 添加高斯噪声
I_noise = imnoise(I, 'gaussian', 0, 0.01);
% 显示原始图像和添加噪声后的图像
figure;
subplot(1,2,1), imshow(I), title('Original Image');
subplot(1,2,2), imshow(I_noise), title('Noisy Image');
% 计算噪声功率谱密度
N = size(I_noise,1)*size(I_noise,2);
noise_var = var(double(I_noise(:)));
noise_pow_spec = abs(fft2(I_noise)).^2 / N;
% 计算图像功率谱密度
I_pow_spec = abs(fft2(I)).^2 / N;
% 计算维纳滤波器
K = I_pow_spec ./ (I_pow_spec + noise_pow_spec / noise_var);
I_restored = real(ifft2(K .* fft2(I_noise)));
% 显示复原后的图像
figure, imshow(I_restored), title('Restored Image');
```
上述代码首先读取图像,将其转换为灰度图,并向其添加高斯噪声。然后,它计算添加噪声后的图像的噪声功率谱密度和原始图像的功率谱密度。接下来,它计算维纳滤波器,并使用该滤波器对添加噪声的图像进行复原。最后,它显示复原后的图像。
请注意,这只是一个基本的维纳滤波器实现示例。实际应用中,需要根据图像和噪声的特性进行适当的调整,并考虑其他技术,如双边滤波等。