傅立叶频域滤波实现及理解

空间滤波和频域线性滤波的基础都是卷积定理(针对线性系统):

傅立叶频域滤波实现及理解_第1张图片

在使用
MATLAB中的fft2函数实现傅立叶滤波时,分两种情况:①无填充时②有填充。

①无填充。假设图像数据为f,直接调用fft2(f)进行FT滤波。

>> f=zeros(256,256);

>> f(1:128,:)=1;

>> imshow(f)%生成简单图像

傅立叶频域滤波实现及理解_第2张图片

>> [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,[])

傅立叶频域滤波实现及理解_第3张图片

(注:
IPT中没有函数lpfilter,需要下载http://www.pudn.com/downloads145/sourcecode/graph/texture_mapping/detail632606.htmllpfilter函数中有个调用函数dftuv也没有,可从网上下载:(冈萨雷斯)matlab版图形处理工具箱压缩包http://www.pudn.com/downloads82/sourcecode/graph/texture_mapping/detail317968.html,里面包含了DIP中涉及到的相应程序)

滤波后,图像边缘产生了模糊——这是预期的,低通滤波器就是能让图像模糊。但垂直边缘不模糊。其原因在于DFT计算中暗含的周期性。DFT将图像看成向四个方向(x,y轴正负向)延伸的无限周期序列。序列中,原图数据分别向四个方向延伸,可以想像其四周邻接的是什么图像。当滤波器下(同时存在)一块亮区域和暗区域时,滤波结果便得到模糊且变暗的图像。当滤波器位于序列图像的亮部时,它会遇到一个周期分量相同的区域,常数区域的平均值仍为常数,故不会产生模糊现象。

②有填充的情形

无填充时,会产生相邻周期之间的干扰(称为:折叠误差的干扰),可以通过使用0来填充函数的方法来避免。——冈萨雷斯《数字图像处理》

(后面用到的paddedsize函数可从http://www.pudn.com/downloads267/sourcecode/math/detail1224503.html下载)

>> PQ=paddedsize(size(f))%求取填充尺寸,如f(x,y)h(x,y)的大小分别为AxB,CxD,则PA+C-1QB+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,[])

傅立叶频域滤波实现及理解_第4张图片

>> gpc=gp2(1:size(f,1),1:size(f,2)); %将左上部的矩形修剪为原始大小

>> figure

>> imshow(gpc,[])

傅立叶频域滤波实现及理解_第5张图片

总结频域滤波的步骤:

傅立叶频域滤波实现及理解_第6张图片

你可能感兴趣的:(傅里叶变换)