《 返回详情内容

使用MATLAB编程实现图像的理想低通和高通滤波,展示原图、原图3D频谱、理想低通/高通滤波后图像以及对应的3D频谱

1228次阅读  发表于2023-06-12 来源于金宣助手

使用MATLAB编程实现图像的理想低通和高通滤波,展示原图、原图3D频谱、理想低通/高通滤波后图像以及对应的3D频谱
以下是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)


本网转载内容版权归原作者和授权发表网站所有,仅供学习交流之用,如有涉及版权问题,请通知我们尽快处理。