读入 lena 图像, 进行高斯模糊和高斯噪声退化; 分别利用函数 deconvwnr, deconvreg 和 deconvblind 恢复退化图像 lena_b_n, 并计算各自的峰值信噪比 PSNR; 分别在一个窗口中显示原始图像, 退化图像和恢复结果, 并进行比较.
时间: 2024-02-18 10:03:59 浏览: 163
以下是一个完整的MATLAB代码示例,用于对lena图像进行高斯模糊和高斯噪声退化,并采用三种反卷积算法进行图像恢复:
```matlab
% 读入 Lena 图像
I = imread('lena.png');
% 转换为灰度图像
I_gray = rgb2gray(I);
% 显示原始图像
subplot(2, 3, 1), imshow(I_gray), title('Original Image');
% 添加高斯模糊
h = fspecial('gaussian', [5 5], 2); % 生成高斯滤波器
I_blur = imfilter(I_gray, h, 'symmetric'); % 进行卷积操作
% 显示退化图像
subplot(2, 3, 2), imshow(I_blur), title('Degraded Image');
% 添加高斯噪声
mean = 0; % 均值
variance = 0.01; % 方差
I_noise = imnoise(I_blur, 'gaussian', mean, variance);
% 显示退化图像
subplot(2, 3, 3), imshow(I_noise), title('Degraded Image with Gaussian Noise');
% 利用 deconvwnr 进行图像恢复
NSR = variance / var(I_gray(:)); % 计算噪声信噪比
J_wiener = deconvwnr(I_noise, h, NSR); % 进行维纳滤波
% 计算峰值信噪比 PSNR
PSNR_wiener = psnr(J_wiener, I_gray, 255);
% 显示恢复图像
subplot(2, 3, 4), imshow(J_wiener), title(['Wiener Deconvolution, PSNR = ' num2str(PSNR_wiener)]);
% 利用 deconvreg 进行图像恢复
lambda = 0.1; % 正则化参数
J_reg = deconvreg(I_noise, h, lambda); % 进行正则化滤波
% 计算峰值信噪比 PSNR
PSNR_reg = psnr(J_reg, I_gray, 255);
% 显示恢复图像
subplot(2, 3, 5), imshow(J_reg), title(['Regularized Deconvolution, PSNR = ' num2str(PSNR_reg)]);
% 利用 deconvblind 进行图像恢复
INITPSF = fspecial('gaussian', [5 5], 2); % 初始点扩散函数
[J_blind, PSF_blind] = deconvblind(I_noise, INITPSF); % 进行盲反卷积
% 计算峰值信噪比 PSNR
PSNR_blind = psnr(J_blind, I_gray, 255);
% 显示恢复图像
subplot(2, 3, 6), imshow(J_blind), title(['Blind Deconvolution, PSNR = ' num2str(PSNR_blind)]);
% 调整图像显示比例
imhist(I_gray);
imhist(I_noise);
imhist(J_wiener);
imhist(J_reg);
imhist(J_blind);
```
在运行以上代码后,会在一个窗口中显示原始图像、退化图像和三种反卷积算法的恢复结果,并计算每种算法的峰值信噪比PSNR。可以通过观察图像比较和PSNR的数值比较来评估三种算法的恢复效果。
阅读全文