在MATLAB中对512x512大小、256级灰度的数字图像lena进行频域的理想低通、高通滤波,同屏显示原图、幅度谱图和低通、高通滤波的结果图。 本题采用了高斯滤波器来对图像进行低通和高通滤波。
时间: 2024-02-03 13:03:03 浏览: 139
好的,这是一个关于MATLAB图像处理的问题。让我来回答你。
首先,我们需要导入lena图像并显示它:
```matlab
lena = imread('lena.png');
imshow(lena);
```
接下来,我们需要将lena图像进行傅里叶变换,然后计算其幅度谱:
```matlab
F = fft2(double(lena));
S = abs(F);
S = log(1+S);
imshow(S, []);
```
现在我们可以显示该图像的幅度谱。接下来,我们将创建理想低通和高通滤波器并将它们应用于图像的傅里叶变换。我们需要使用ifft2将结果转换回空间域。最后,我们将原始图像、幅度谱、低通和高通滤波的结果图像显示在同一个窗口中。
```matlab
% 理想低通滤波器
D0 = 50;
H = zeros(512,512);
for i=1:512
for j=1:512
if sqrt((i-256)^2+(j-256)^2) <= D0
H(i,j) = 1;
end
end
end
% 理想高通滤波器
D0 = 50;
H = zeros(512,512);
for i=1:512
for j=1:512
if sqrt((i-256)^2+(j-256)^2) >= D0
H(i,j) = 1;
end
end
end
% 将滤波器应用于图像的傅里叶变换
G = H.*F;
% 反傅里叶变换
g = real(ifft2(G));
% 显示原始图像、幅度谱、低通和高通滤波的结果图像
subplot(2,2,1);imshow(lena);title('Original Image');
subplot(2,2,2);imshow(S, []);title('Spectrum');
subplot(2,2,3);imshow(g, []);title('Low Pass Filtered Image');
subplot(2,2,4);imshow(lena-g,[]);title('High Pass Filtered Image');
```
这应该可以满足你的要求。如果你有任何问题或疑问,请随时问我。
阅读全文