网上找的,希望给你带来帮助!!! 空间滤波和频域线性滤波的基础都是卷积定理(针对线性系统): 在使用MATLAB中的fft2函数实现傅立叶滤波时,分两种情况:①无填充时②有填充。 ①无填充。假设图像数据为f,直接调用fft2(f)进行FT滤波。 >> f=zeros(256,256); >> f(1:128,:)=1; >> imshow(f)%生成简单图像 >> [M,N]=size(f)%获得图像尺寸 >> F=fft2(f);%进行傅立叶滤波,无参数 >> sigma=10; >> H=lpfilter('gaussian',M,N,sigma);%生成高斯低通滤波器, >> G=H.*F;%在频域将图像的FT和生成的滤波器点乘(由公式(1),再进行IFT,就可得到滤波后的图像) >> g=real(ifft2(G));%IFT,再取实部以还原图像 >> figure,imshow(g,[]) 滤波后,图像边缘产生了模糊——这是预期的,低通滤波器就是能让图像模糊。但垂直边缘不模糊。其原因在于DFT计算中暗含的周期性。DFT将图像看成向四个方向(x,y轴正负向)延伸的无限周期序列。序列中,原图数据分别向四个方向延伸,可以想像其四周邻接的是什么图像。当滤波器下(同时存在)一块亮区域和暗区域时,滤波结果便得到模糊且变暗的图像。当滤波器位于序列图像的亮部时,它会遇到一个周期分量相同的区域,常数区域的平均值仍为常数,故不会产生模糊现象。 ②有填充的情形 无填充时,会产生相邻周期之间的干扰(称为:折叠误差的干扰),可以通过使用0来填充函数的方法来避免。——冈萨雷斯《数字图像处理》 >> PQ=paddedsize(size(f))%求取填充尺寸,如f(x,y)和h(x,y)的大小分别为AxB,CxD,则P≥A+C-1,Q≥B+D-1 PQ = 512 512 >> fp=fft2(f,PQ(1),PQ(2));%有填充的FT >> hp=lpfilter('gaussian',PQ(1),PQ(2),2*sigma);%低通滤波器 >> gp=hp.*fp;%频域相乘 >> gp2=real(ifft2(gp));%IFT求取原图像 >> figure >> imshow(gp2,[]) >> gpc=gp2(1:size(f,1),1:size(f,2)); %将左上部的矩形修剪为原始大小 >> figure >> imshow(gpc,[])
|