用matlab实现在大气湍流退化图像上添加高斯噪声,利用维纳滤波处理,同屏显示退化图像和恢复图像,并标注维纳滤波参数 K,计算恢复图像的峰值信噪比 PSNR。
时间: 2024-03-03 18:53:26 浏览: 86
matlab-对一幅灰度图像进行运动模糊并叠加高斯噪声,并采用维纳滤波进行复原-源码
以下是MATLAB代码实现:
```matlab
% 读入图像
im = imread('degraded_image.png');
% 显示退化图像
subplot(1,3,1);
imshow(im);
title('退化图像');
% 生成点扩散函数(PSF)
psf = fspecial('motion', 20, 45);
% 对退化图像进行模糊处理
im_blur = imfilter(im, psf, 'conv', 'circular');
% 添加高斯噪声
im_noisy = imnoise(im_blur, 'gaussian', 0, 0.001);
% 显示添加噪声后的图像
subplot(1,3,2);
imshow(im_noisy);
title('添加高斯噪声后的图像');
% 维纳滤波
% 计算噪声功率谱密度
np = sum(im_noisy(:).^2) / numel(im_noisy);
im_wien = deconvwnr(im_noisy, psf, np / var(im(:)));
% 显示维纳滤波恢复后的图像
subplot(1,3,3);
imshow(im_wien);
title(sprintf('维纳滤波恢复图像 (K=%.2f)', np / var(im(:))));
% 计算恢复图像的PSNR
psnr_val = psnr(im, im_wien);
fprintf('恢复图像的PSNR为 %.2f dB\n', psnr_val);
```
上述代码中,我们首先读入退化图像,并显示在第一个子图中。然后,我们生成点扩散函数(PSF),并对退化图像进行模糊处理,得到模糊后的图像。接着,我们在模糊图像上添加高斯噪声,噪声方差取值为0.001,得到添加噪声后的图像,显示在第二个子图中。
接下来,我们使用维纳滤波对添加噪声后的图像进行恢复处理。其中,维纳滤波的参数 K 取值为噪声功率谱密度与原始图像方差的比值。我们根据公式 np / var(im(:)) 计算出 K 的值,并将维纳滤波恢复后的图像显示在第三个子图中,并在标题中标注 K 的值。
最后,我们计算恢复图像的PSNR值,并在命令窗口输出。需要注意的是,维纳滤波需要知道噪声功率谱密度,因此在实际应用中需要对噪声进行估计。
阅读全文