function [U, V]= dftuv(M,N)
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;
[U, V]= meshgrid(v,u); %建立用于实现频域滤波器的网格数组
function [H,D]=lpfilter(type,M,N,D0,n) %LPFILTER用于生成所有低通滤波器的传递函数;
[U,V]=dftuv(M,N); %计算M X N 的矩形中每一点到矩形原点的距离平方;
D=sqrt(U.^2+V.^2);
switch type
case 'ideal'
H=double(D<=D0);
case 'btw'
if nargin==4
n=1;
end
H=1./(1+(D./D0).^(2*n));
case 'gaussian'
H=exp(-(D.^2)./(2*(D0^2)));
otherwise
error('Unkonw filter type.') %设计理想,巴特沃思,高斯低通滤波器;
end
function H=hpfilter(type,M,N,D0,n)
if nargin==4
n=1;
end
Hlp=lpfilter(type,M,N,D0,n); %调用低通滤波器;
H=1-Hlp; %利用低通滤波器设计高通滤波器
f=imread('707.tif');%读入一幅图像;
subplot(231);
imshow(f); %显示读入图像;
[M,N]=size(f); %求出图像矩阵的大小;
[U,V]=dftuv(M,N); %计算每一点到矩形原点的距离平方;
F=fft2(double(f)); %对原始图像进行傅立叶变换;
H=lpfilter('ideal',M,N,30);%调用理想低通滤波器;