登录论坛

查看完整版本 : [MATLAB图像处理] 关于巴特沃斯低通滤波器的问题


martinawd
2009-09-22, 17:24
看到一个巴特沃斯低通滤波器的程序,程序代码如下
I=imread('7.bmp');
J=imread('5.bmp');
K=imabsdiff(I,J);
figure,imshow(K,[]);
L=rgb2gray(K);
f=double(L);
g=fft2(f);
g=fftshift(g);
[N1,N2]=size(g);
n=2;
d0=50;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1;
for j=1:N2;
d=sqrt((i-n1)^2+(j-n2)^2);
h=1/(1+0.414*(d/d0)^(2*n));
result(i,j)=h*g(i,j);
end
end
result=ifftshift(result);
X2=ifft2(result);
X3=uint8(real(X2));
figure,imshow(X3)

我想请问的是巴特沃斯低通滤波器的函数式是H(u,v)=1/(1+(D/D0)^2n),但是程序中计算h的时候为什么多了个0.414

zhaibolan
2009-10-15, 17:38
巴特沃兹滤波器有两种形式,在分母的第二项上加上系数(sqrt(2)-1)是另外一种形式的巴特沃兹滤波器,能问一下,这个图像的低通滤波程序是你写的吗?为什么图像数据在进行傅里叶变换前要乘以-1^(i+j),书上说这样可以使FFT变换后的结果中的低频数据处于图像中央,你只要为什么吗?谢谢