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)^(2n)); 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)^(2n)); 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'); % 为什么不能显示其他结果内容:可能是因为代码中存在错误或者变量名重复导致程序运行出错,需要进行调试和修改。同时,也需要确保代码中没有未声明的变量或未引入的函数等问题。
原文地址: https://www.cveoy.top/t/topic/oy5j 著作权归作者所有。请勿转载和采集!