利用matlab任意导入一张256*256图像,并转换成灰度图像,为其叠加高斯噪声,然后分别通过两种空域平滑和一种频域平滑的方法对其进行滤波,滤波器设计成方形的,并显示原图,叠加高斯噪声的图像,以及两种空域平滑的图像,频域平滑的图像,频域平滑的频谱图,滤波器图
时间: 2023-10-08 14:11:37 浏览: 147
基于matlab的数字图像处理,包括亮度变化,锐化,灰度变换,DCT,旋转,加噪声,均衡,中值滤波
好的,以下是针对您的问题提供的matlab代码:
```matlab
% 读入一张256*256的图像并转换为灰度图像
img = imread('lena.bmp');
if size(img,3) == 3
img = rgb2gray(img);
end
% 叠加高斯噪声
noise_img = imnoise(img,'gaussian',0,0.01);
% 空域平滑:均值滤波
mean_filter = fspecial('average',3);
mean_img = imfilter(noise_img,mean_filter);
% 空域平滑:中值滤波
median_img = medfilt2(noise_img,[3 3]);
% 频域平滑:理想低通滤波
d0 = 20;
h = lpfilter('ideal',size(noise_img,1),size(noise_img,2),d0);
ideal_img = freqfilter(noise_img,h);
% 显示结果
figure;
subplot(2,3,1); imshow(img); title('原图');
subplot(2,3,2); imshow(noise_img); title('叠加高斯噪声后的图像');
subplot(2,3,3); imshow(mean_img); title('空域平滑:均值滤波');
subplot(2,3,4); imshow(median_img); title('空域平滑:中值滤波');
subplot(2,3,5); imshow(ideal_img); title('频域平滑:理想低通滤波');
% 显示频域平滑的频谱图和滤波器图
figure;
subplot(1,2,1); imshow(log(abs(fftshift(fft2(noise_img))))); title('叠加高斯噪声的频谱图');
subplot(1,2,2); imshow(h); title('理想低通滤波器');
```
请注意,这里我们使用了matlab自带的一些函数,如`imread`、`imnoise`、`fspecial`、`imfilter`等。其中,`imnoise`用于生成高斯噪声,`fspecial`用于创建均值滤波器,`imfilter`用于进行图像滤波,`medfilt2`用于进行中值滤波,`lpfilter`用于创建理想低通滤波器,`freqfilter`用于对图像进行傅里叶变换和频域滤波。在代码中,我们分别对原图、叠加高斯噪声后的图像、空域平滑后的图像、频域平滑后的图像进行了显示,并在最后一个figure中分别显示了叠加高斯噪声的频谱图和理想低通滤波器。
阅读全文