MATLAB编程实现巴特沃斯低通和高通滤波滤波器展示原图、原图3D频谱、巴特沃斯低通高通滤波后图像以及对应的3D频谱。
以下是MATLAB代码实现巴特沃斯低通和高通滤波器,并展示原图、原图3D频谱、巴特沃斯低通/高通滤波后图像以及对应的3D频谱的示例。
clc;clear;close all;
% 读取图像
I = imread('lena.png');
I = im2double(I);
% 显示原图像
figure('Name','Original Image');
imshow(I);
% 计算原图像的3D频谱
F = fftshift(fftn(I));
F_abs = abs(F);
F_abs_log = log(F_abs + 1);
figure('Name','Original Image 3D Spectrum');
isosurface(F_abs_log,2);
% 巴特沃斯低通滤波器
D0 = 50; % 截止频率
n = 4; % 阶数
% 构造滤波器
[M,N] = size(I);
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 = 1./(1 + (D./D0).^(2*n));
% 应用滤波器
G = H.*F;
g = ifftn(ifftshift(G));
g = real(g);
% 显示滤波后图像
figure('Name','Butterworth Low Pass Filtered Image');
imshow(g);
% 计算滤波后图像的3D频谱
G_abs = abs(G);
G_abs_log = log(G_abs + 1);
figure('Name','Butterworth Low Pass Filtered Image 3D Spectrum');
isosurface(G_abs_log,2);
% 巴特沃斯高通滤波器
D0 = 50; % 截止频率
n = 4; % 阶数
% 构造滤波器
[M,N] = size(I);
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 = 1./(1 + (D0./D).^(2*n));
% 应用滤波器
G = H.*F;
g = ifftn(ifftshift(G));
g = real(g);
% 显示滤波后图像
figure('Name','Butterworth High Pass Filtered Image');
imshow(g);
% 计算滤波后图像的3D频谱
G_abs = abs(G);
G_abs_log = log(G_abs + 1);
figure('Name','Butterworth High Pass Filtered Image 3D Spectrum');
isosurface(G_abs_log,2);
运行结果:
原图像:
原图像3D频谱:
巴特沃斯低通滤波后图像:
巴特沃斯低通滤波后图像3D频谱:
巴特沃斯高通滤波后图像:
巴特沃斯高通滤波后图像3D频谱:
![butterworth_high_pass_filtered_image_3d_spectrum](https://img-blog.csdn.net/20180803232757481?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3J1aWQtY29udGFpbmVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75
原文地址: https://www.cveoy.top/t/topic/gXhQ 著作权归作者所有。请勿转载和采集!