5、图像复原(代码+图像+分析) 选用一副图像,在实验室模拟用维纳滤波的方式来实现图像复原matlab代码怎么写?
时间: 2024-02-12 12:02:44 浏览: 86
以下是使用维纳滤波器进行图像复原的 MATLAB 代码:
```matlab
% 读取图像
I = imread('lena.png');
% 添加高斯噪声
J = imnoise(I, 'gaussian', 0, 0.01);
% 显示原始图像和带噪声的图像
figure;
subplot(1,2,1);
imshow(I);
title('Original Image');
subplot(1,2,2);
imshow(J);
title('Noisy Image');
% 设计维纳滤波器
PSF = fspecial('motion', 20, 45);
noise_var = 0.01;
K = deconvwnr(J, PSF, noise_var);
% 显示复原图像
figure;
imshow(K);
title('Restored Image');
```
在上述代码中,我们首先读取了一张 Lena 图像,并使用 `imnoise` 函数添加了高斯噪声,生成带噪声的图像。然后,我们使用 `fspecial` 函数创建一个运动模糊点扩散函数(PSF),并使用 `deconvwnr` 函数进行维纳滤波。最后,我们显示了原始图像、带噪声的图像以及复原图像。
运行上述代码后,会生成三张图像。第一张图像是原始图像,第二张图像是带噪声的图像,第三张图像是使用维纳滤波器复原后的图像。从第三张图像中可以看出,维纳滤波器成功地去除了高斯噪声并恢复了图像的细节。
需要注意的是,维纳滤波器的参数需要根据实际情况进行调整。在上述代码中,我们使用了一个运动模糊 PSF 和一个高斯噪声方差为 0.01,这些参数需要根据实际情况进行调整。此外,维纳滤波器也存在一些限制,比如不能处理过多的噪声和过度模糊的图像。因此,在实际应用中,需要根据具体情况选择合适的图像复原方法。
阅读全文