下面是用Matlab实现的Butterworth高通、低通滤波器。
clc;clear all;close all;
I=imread‘cameraman.tif’);
subplot3,2,1);imshowI);
title‘原始图’);
f=doubleI); % 数据类型转换,MATLAB不支持图像的无符号整型的计算
g=fft2f); % 傅立叶变换
g=fftshiftg); % 转换数据矩阵
subplot3,2,2);imshowlog1+absg)),[]);
title‘傅里叶频谱’);
%低通滤波***************************************************************
[M,N]=sizeg);
nn=2; % 二阶巴特沃斯Butterworth)低通滤波器
d0=10;
m=floorM/2); n=floorN/2);
for i=1:M
for j=1:N
d=sqrti-m)^2+j-n)^2);
h=1/1+0.414*d/d0)^2*nn)); % 计算低通滤波器传递函数
resulti,j)=h*gi,j);
end
end
subplot3,2,3);imshowlog1+absresult)),[]);
title‘butterworth低通滤波’);
result=ifftshiftresult);
J2=ifft2result);
J3=uint8realJ2));
subplot3,2,4),imshowJ3); % 显示滤波处理后的图像
title‘低通滤波图’);
%高通滤波
for i=1:M
for j=1:N
d=sqrti-m)^2+j-n)^2);
h=1/1+0.414*d0/d)^2*nn));% 计算传递函数
resulti,j)=h*gi,j);
end
end
subplot3,2,5);imshowlog1+absresult)),[]);
title‘butterworth高通滤波’);
result=ifftshiftresult);
J2=ifft2result);
J3=uint8realJ2));
subplot3,2,6),imshowJ3); % 显示滤波处理后的图像
title‘高通滤波图’);
效果图: