AI创作问答(高级版)
以下是MATLAB代码实现:
```matlab
% 读取图像
img = imread('lena.png');
% 转换为灰度图像
img = rgb2gray(img);
% 显示原图像
subplot(2,2,1);
imshow(img);
title('原图像');
% 计算图像的3D频谱
f = fftshift(fft2(img));
f_abs = abs(f);
f_log = log(1+f_abs);
subplot(2,2,2);
mesh(f_log);
title('原图像3D频谱');
% 理想低通滤波器
D0 = 50; % 截止频率
[M, N] = size(img);
u = 0:(M-1);
v = 0:(N-1);
idx = find(u>M/2);
u(idx) = u(idx)-M;
idy = find(v>N/2);
v(idy) = v(idy)-N;
[V, U] = meshgrid(v, u);
D = sqrt(U.^2 + V.^2);
H = double(D<=D0);
% 显示理想低通滤波器
subplot(2,2,3);
imshow(H);
title('理想低通滤波器');
% 应用理想低通滤波器
f_filtered = f.*H;
img_filtered = ifft2(ifftshift(f_filtered));
img_filtered = uint8(real(img_filtered));
% 显示滤波后的图像
subplot(2,2,4);
imshow(img_filtered);
title('理想低通滤波后图像');
% 计算滤波后的3D频谱
f_filtered = fftshift(fft2(img_filtered));
f_filtered_abs = abs(f_filtered);
f_filtered_log = log(1+f_filtered_abs);
subplot(2,2,5);
mesh(f_filtered_log);
title('理想低通滤波后3D频谱');
% 理想高通滤波器
D0 = 50; % 截止频率
[M, N] = size(img);
u = 0:(M-1);
v = 0:(N-1);
idx = find(u>M/2);
u(idx) = u(idx)-M;
idy = find(v>N/2);
v(idy) = v(idy)-N;
[V, U] = meshgrid(v, u);
D = sqrt(U.^2 + V.^2);
H = double(D>=D0);
% 显示理想高通滤波器
subplot(2,2,6);
imshow(H);
title('理想高通滤波器');
% 应用理想高通滤波器
f_filtered = f.*H;
img_filtered = ifft2(ifftshift(f_filtered));
img_filtered = uint8(real(img_filtered));
% 显示滤波后的图像
subplot(2,2,7);
imshow(img_filtered);
title('理想高通滤波后图像');
% 计算滤波后的3D频谱
f_filtered = fftshift(fft2(img_filtered));
f_filtered_abs = abs(f_filtered);
f_filtered_log = log(1+f_filtered_abs);
subplot(2,2,8);
mesh(f_filtered_log);
title('理想高通滤波后3D频谱');
```
运行结果如下图所示:
