MATLAB 图像处理:巴特沃斯滤波器

本教程演示如何使用 MATLAB 进行图像处理,使用巴特沃斯滤波器进行低通和高通滤波,并展示滤波后的图像频谱。

代码:

% 读取图像
img = imread('image.jpg');
subplot(2,4,1), imshow(img),title('原始图像');

% 转换为灰度图像
if size(img,3)==3
img = rgb2gray(img);
end

% 计算频域
fft_img = fft2(double(img));
fft_shift_img = fftshift(fft_img);
freq = log(abs(fft_shift_img));

% 显示图像频谱
subplot(2,4,2), mesh(freq),title('原始图像频谱');

% 构建巴特沃斯低通滤波器
[M,N]= size(img);
D0 = 50;%截止半径
n = 4;
%阶数
H_1p = zeros(M,N);
%低通滤波器
for u=1:M
for v=1:N
D = sqrt((u-M/2)^2+(v-N/2)^2);
H_1p(u,v)= 1/(1+(D/D0)^(2*n));
end
end

% 应用低通滤波器
fft_shift_img_lp = H_lp.* fft_shift_img;
fft_img_lp = ifftshift(fft_shift_img_lp);
img_1p = uint8(real(ifft2(fft_img_lp)));
subplot(2,4,3), imshow(img_lp),title('低通滤波后的图像');

% 显示低通滤波器的3D频谱
freq_lp = log(1+abs(fftshift(H_1p)));
subplot(2,4,4),mesh(freq_lp),title('巴特沃斯低通滤波器的频谱1');
f = fftshift(fft2(img_lp));f_log = log(abs(f));
subplot(2,4,5),mesh(f_log),title('巴特沃斯低通滤波器的频谱2');

% 构建巴特沃斯高通滤波器
D0 = 50;
%截止半径
n = 4;
%阶数
H_hp = zeros(M,N);
%高通滤波器
for u=1:M
for v=1:N
D = sqrt((u-M/2)^2+(v-N/2)^2);H_hp(u,v)= 1/(1+(D0/D)^(2*n));
end
end

% 应用高通滤波器
fft_shift_img_hp = H_hp.* fft_shift_img;
fft_img_hp = ifftshift(fft_shift_img_hp);
img_hp = uint8(real(ifft2(fft_img_hp)));
subplot(2,4,6), imshow(img_hp),title('高通滤波后的图像');

% 显示高通滤波器的3D频谱
freq_hp = log(1+abs(fftshift(H_hp)));
subplot(2,4,7),mesh(freq_hp),title('巴特沃斯高通滤波器的频谱1');
f1 = fftshift(fft2(img_hp));
f_log1 = log(abs(f1));
subplot(2,4,8),mesh(f_log1),title('巴特沃斯高通滤波器的频谱2');

说明:

  • 代码首先读取名为 'image.jpg' 的图像。
  • 如果图像为 RGB 格式,则将其转换为灰度图像。
  • 代码计算图像的频谱,并使用巴特沃斯滤波器创建低通和高通滤波器。
  • 滤波器应用于图像的频谱,并使用逆傅里叶变换将滤波后的频谱转换回空间域。
  • 代码显示原始图像、滤波后的图像以及滤波器的频谱。

注意:

  • 为了显示其他图像,需要将代码中的图片路径更改为其他图像的路径。
  • 如果读入的图像是 RGB 格式,需要先将其转换为灰度图像,否则会出现错误。
  • 如果图像尺寸过大,可能会导致频谱显示不清晰,可以通过调整图像尺寸或截止半径大小来改善效果。
MATLAB 图像处理:巴特沃斯滤波器

原文地址: https://www.cveoy.top/t/topic/oy5i 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录