读取一幅图像,为该图像添加噪声(噪声类型、噪声参数自选),利用逆滤波对该图像进行复原,输出原图像、噪声图像、复原后图像。使用matlab编写一个程序
时间: 2024-02-06 17:04:33 浏览: 84
好的,以下是使用 MATLAB 编写的程序,实现您的要求:
```matlab
% 读取一幅图像
img = imread('lena.jpg');
img = double(rgb2gray(img));
% 添加高斯噪声
mean = 0;
std = 30;
noise = normrnd(mean, std, size(img));
noisy_img = img + noise;
% 计算傅里叶变换,获取功率谱密度函数
f = fft2(noisy_img);
fshift = fftshift(f);
psd_noise = abs(fshift) .^ 2;
f = fft2(img);
fshift = fftshift(f);
psd_img = abs(fshift) .^ 2;
% 计算逆滤波核函数
kernel = psd_img ./ psd_noise;
kernel(kernel < 0.1) = 0;
% 逆滤波复原
fshift = fshift .* kernel;
fshift = ifftshift(fshift);
ifft = ifft2(fshift);
restored_img = abs(ifft);
% 输出原图像、噪声图像、复原后图像
subplot(131), imshow(img, []), title('Original Image');
subplot(132), imshow(noisy_img, []), title('Noisy Image');
subplot(133), imshow(restored_img, []), title('Restored Image');
```
这段程序中,我们首先读取了一幅图像,并将其转换为灰度图像。然后,我们添加了高斯噪声,并计算了傅里叶变换,获取了图像和噪声的功率谱密度函数。接着,我们计算了逆滤波核函数,并使用逆滤波对图像进行复原。最后,我们输出了原图像、噪声图像和复原后图像。
注意:在 MATLAB 中,傅里叶变换和逆傅里叶变换的函数分别为 fft 和 ifft,而不是 fft2 和 ifft2。另外,为了能够正确显示图像,我们使用了 imshow 函数,并将显示范围设为 []。
阅读全文