分别利用逆滤波和一种改进的逆滤波对大气湍流退化图像进行恢复处理,同屏显示退 化图像和恢复图像,计算恢复图像的峰值信噪比 PSNR。matlab实现
时间: 2023-08-27 07:21:54 浏览: 103
MATLAB下求两幅图像的峰值信噪比(PSNR)
好的,根据您的要求,我将为您回答问题并给出MATLAB代码。
首先,我们需要读入已经退化的图像。在MATLAB中,我们可以使用以下代码读取图像:
```matlab
img_degraded = imread('your_degraded_image.jpg');
```
接下来,我们将使用逆滤波和改进的逆滤波对图像进行恢复。逆滤波是一种基本的恢复方法,但它对噪声非常敏感,往往会产生较差的恢复效果。因此,我们将使用一种改进的逆滤波方法,即维纳滤波,来提高恢复效果。
在MATLAB中,我们可以使用以下代码实现逆滤波和维纳滤波:
```matlab
% 定义大气湍流退化函数
function h = atm_turb_degrad(n, r)
[x, y] = meshgrid(1:n);
center = ceil(n/2);
distance = sqrt((x - center).^2 + (y - center).^2);
h = (1/(pi*r^2)) * (sin(pi*r*distance)./(pi*r*distance));
h(center, center) = 1;
end
% 逆滤波
n = size(img_degraded, 1);
r = 10; % 退化函数半径
h = atm_turb_degrad(n, r);
img_restored_inv = real(ifft2(fft2(img_degraded)./fft2(h)));
% 维纳滤波
snr = 0.01; % 信噪比
h_power_spectrum = abs(fft2(h)).^2;
k = snr / mean(h_power_spectrum(:));
img_restored_wiener = real(ifft2(fft2(img_degraded).*conj(fft2(h))./(abs(fft2(h)).^2 + k)));
% 计算恢复图像的峰值信噪比(PSNR)
mse_inv = mean(mean((img_restored_inv - img_degraded).^2));
psnr_inv = 10*log10(255^2/mse_inv);
mse_wiener = mean(mean((img_restored_wiener - img_degraded).^2));
psnr_wiener = 10*log10(255^2/mse_wiener);
```
最后,我们可以使用以下代码将退化图像和恢复图像显示在同一屏幕上,并显示它们的PSNR:
```matlab
% 显示退化图像和恢复图像
figure;
subplot(1, 3, 1);
imshow(img_degraded);
title('Degraded Image');
subplot(1, 3, 2);
imshow(uint8(img_restored_inv));
title(['Inverse Filter, PSNR = ', num2str(psnr_inv)]);
subplot(1, 3, 3);
imshow(uint8(img_restored_wiener));
title(['Wiener Filter, PSNR = ', num2str(psnr_wiener)]);
```
完整的MATLAB代码如下:
```matlab
% 读取退化图像
img_degraded = imread('your_degraded_image.jpg');
% 定义大气湍流退化函数
function h = atm_turb_degrad(n, r)
[x, y] = meshgrid(1:n);
center = ceil(n/2);
distance = sqrt((x - center).^2 + (y - center).^2);
h = (1/(pi*r^2)) * (sin(pi*r*distance)./(pi*r*distance));
h(center, center) = 1;
end
% 逆滤波和维纳滤波
n = size(img_degraded, 1);
r = 10; % 退化函数半径
h = atm_turb_degrad(n, r);
img_restored_inv = real(ifft2(fft2(img_degraded)./fft2(h)));
snr = 0.01; % 信噪比
h_power_spectrum = abs(fft2(h)).^2;
k = snr / mean(h_power_spectrum(:));
img_restored_wiener = real(ifft2(fft2(img_degraded).*conj(fft2(h))./(abs(fft2(h)).^2 + k)));
% 计算恢复图像的峰值信噪比(PSNR)
mse_inv = mean(mean((img_restored_inv - img_degraded).^2));
psnr_inv = 10*log10(255^2/mse_inv);
mse_wiener = mean(mean((img_restored_wiener - img_degraded).^2));
psnr_wiener = 10*log10(255^2/mse_wiener);
% 显示退化图像和恢复图像
figure;
subplot(1, 3, 1);
imshow(img_degraded);
title('Degraded Image');
subplot(1, 3, 2);
imshow(uint8(img_restored_inv));
title(['Inverse Filter, PSNR = ', num2str(psnr_inv)]);
subplot(1, 3, 3);
imshow(uint8(img_restored_wiener));
title(['Wiener Filter, PSNR = ', num2str(psnr_wiener)]);
```
希望这个回答能够帮助你解决问题!
阅读全文