有点悲剧,在快编辑完了的时候不小心点到舍弃,结果一下午字白打了。


傅里叶变换被称为数学中的棱镜,可以将函数分解为频率不同的正弦函数和余弦函数的组合。而图像处理中的傅里叶变换一般专指二维离散傅里叶变换,它可以将图像从空间域变换到频域,拥有很多优良的特质,如线性、对称、平移、卷积等。在此,我们对于一维以及连续的傅里叶变换不做描述,只说二维离散傅里叶变换。


二维离散傅里叶变换

人们一般都在空间域来描述图像,即通过二维空间坐标上的灰度值来表征出图像的形状、纹理、尺寸等特征,这也是最为直观且被人所接受的图像表达方式。而傅里叶变换的出现给了图像分析一个全新的角度:频域。在二维图像角度,频率的高低表征的是原图灰度的变化剧烈程度,也就是空间域中所指的梯度。背景区域等灰度变化缓慢的区域,梯度较低,处于频域中的低频部分,边缘、噪声等灰度变化快的区域,梯度较高,处于频域中的高频部分。一般的图片低频的内容会占大多数部分。

二维离散傅里叶变换公式:

用python实现二维傅里叶变换 二维傅里叶变换卷积_付立叶变换

其中F(u,v)为傅里叶变换结果,u和v为频率分量,f(x,y)为原图,M和N为图像的宽度和高度。

特例:当u,v均为0时,F(0,0)的值为原图f(x,y)的均值,虚部为0,被称之为直流分量。

计算得到的结果为复数,分为实部和虚部,图像处理中一般求取其模(频率幅值),并反向投影回以u,v为坐标轴的二维空间进行分析。


|F(u,v)|  = sqrt(R(u,v)^2+I(u,v)^2)

其中R(u,v)和I(u,v)分别为实部和虚部。


由于求取的频率幅值跨幅巨大,并不适合直接反向投影回二维图像空间来观察,所以一般会将结果求取对数,将结果从线性尺度变换到对数尺度:


D(u,v) = log(1+|F(u,v)|)


再进行归一化后即可以灰度值的方式直观的看到幅值的高低变化,即图像的频谱图。

另外,基于傅里叶变换的对称性,为了便于观察频谱图,一般会将原点F(0,0)平移到图像中心,使得低频区域位于图像中部,高频区域位于图像外围。

实现方式有两种:

(1):将原图f(x,y)乘以(-1)^(x+y)后再做傅里叶变换

(2):直接做傅里叶变换,之后将频谱图以N/2,M/2为线划分成四个区域,位于对角线的两两区域对调位置,如图:

用python实现二维傅里叶变换 二维傅里叶变换卷积_用python实现二维傅里叶变换_02

一张图像在变换到频域后的成分分布可以参考下图:

用python实现二维傅里叶变换 二维傅里叶变换卷积_付立叶变换_03


傅里叶变换在图像处理中的应用

个人能想到的利用场景有如下:


1.图像去噪

正如前文所述,大部分的噪声是位于图像的高频区域,所以,利用低通滤波器来过滤图像噪声是图像去噪的一个重要手段。另外,一些周期噪声反映到频谱上会呈现出孤立的亮点,利用傅里叶变换可以轻松的将这种噪声过滤掉,如下图所示:

用python实现二维傅里叶变换 二维傅里叶变换卷积_图像去噪_04


2.简化卷积运算

利用傅里叶变换的卷积特性(即空间域中的卷积等于频域的点积,频域的卷积等于空间域的点积),可以有效的简化空间域中的卷积运算,如各类滤波器的卷积操作等,在变换到频域后采用与该滤波器等价的频域函数进行点积运算,再反傅里叶变换回空间域即完成了空间域中的卷积运算。


3.寻找直线轮廓

空间域中的直线在变换到频域后会呈现出一条与之垂直的高亮直线(有时也可能不那么明显),利用这个特性可以找到原图中疑似直线的轮廓及其角度(以前有做过一个项目就通过傅里叶变换来进行图像的倾斜矫正),效果图:

用python实现二维傅里叶变换 二维傅里叶变换卷积_用python实现二维傅里叶变换_05

lena的帽檐在频谱图中对应了一条与之垂直的亮线。


4.图像压缩

如上文所述,图像的大部分信息集中在频域的低频部分,所以图像的压缩、提萃也是可以用到傅里叶变换的。