matlab的fft2函数可以实现求解图像的DFT,比如下面的这张图片,
通过matlab可以获得它的DFT图像(frequency spectrum)
img = rgb2gray(im);
>> ft = fft2(img);
>> imshow(log(abs(ft)),[]);
按照前面章节的说明,当前显示的结果同时覆盖了四个循环区域,使用fftshift函数进行调整,得到如下图示,
>> fts = fftshift(ft);
>> imshow(log(abs(fts)),[]);
图示中,中间高亮部分是低频部分,由中间向四周频率越来越高,低频对应的是图像中梯度平缓的地方,而高频对应的是图像中梯度较大的地方,如边缘等。我们发现,在DFT结果中,存在明显的“十字”形状,这主要是由于DFT的周期性导致图像拼接处存在强烈的色差形成较大梯度区域,从下图的红色框区域内可明显看出。
再看下面这个图像,左侧为原图像,中间为shift之后的图像(不存在明显的过渡边缘),右侧为对应的DFT图像,相比于前面的图像来说,则不存在这种边缘现象。
我们先来介绍下频率域滤波的基本步骤:
接下来,将介绍几种低通滤波和高通滤波应用,低通滤波可以保留图像的低频信息而丢弃部分高频信息,由于高频信息对应于图像中梯度变化较大的区域,如边缘等,所以低通滤波的效果实际上是等同于图像平滑效果;同样的,可以推测高通滤波则等同于图像的边缘提取。
低通滤波
三种常见的低通滤波:理想低通滤波(ILPF)、Butterworth低通滤波(BLPF)以及高斯低通滤波(GLPF)。
1.理想低通滤波:理想低通滤波的原理很简单,它只是简单地截断频谱上半径区域D0外所有的频率信息,而完全保留D0内的低频信息。滤波函数定义为,