12 06 2023
以下是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频谱'); ``` 运行结果如下图所示: ![ideal_filtering_result](https://img-blog.csdnimg.cn/20211019173212905.png)
延伸阅读
    玉石床是骗人的吗?怎么避免家人上当?
    足球比赛中,每队有多少名球员?
    用python对pdf指定位置进行截图并保存到Excel中
    如何进行移动应用开发和用户体验优化?
    如何更好地协调公司的国内和国际人才资源?