傅立叶变换(FT)能应用的领域太多了,本文聊聊FT在图像处理上的应用。前有高人不用公式通俗地解释了傅立叶级数,傅立叶变换等概念(傅立叶变换讲解-知乎专栏, 任意取的一个名字,还望作者不要在意)。 本文目的是更深入地理解一下傅立叶变换在图像处理领域的应用,包括如何推导公式和变换后频谱图的物理意义。
为了表述方便,是会用到公式的,但是对数学方面的要求就是会解多元一次方程组就行。
1. 傅立叶变换的基础知识
根据傅立叶级数的知识,对于任意一个周期为的函数
,它可以被表示成一系列正弦波和余弦波的叠加:
其中。
相信看过Heinrich大神那篇文章对这个就很容易理解,Wiki的图再放一遍 傅立叶级数动图。
非周期函数没有傅立叶级数,但是我们可以把它看成一个无限大的周期函数。此时,
趋向于0,用积分的思想仍然可以把任意函数表示成正弦波和余弦波的叠加。
以上就是傅立叶变换的核心思想,任何信号都可以表示成一系列正弦波和余弦波的和的形式。不再赘述。
2. 图片傅立叶变换公式的推导
这一部分主要阐述如何在图片数据上进行傅立叶变换。
通用傅立叶公式是:
意思就是现实中的一个任意数据,是由很多频率的正弦,余弦波叠加组成。其中
是频率为
的正弦波幅度与余弦波幅度计算出的一个数值,是
t从
到
时,
的积分。这个公式不太好理解,比如为什么是负无穷到正无穷?为什么会出现自然对数?为什么会有虚数?不是说有正余弦波吗,在哪里呢?好混乱啊,这是因为理解一个东西就像是在爬楼梯,一阶一阶地上,任何人都可以毫不费力地走上去。但是如果楼梯缺了几块,就会觉得走上去很难。直接看这个公式就是让人直接从地面跳到十层楼的楼顶,对任何人都难。因为傅立叶变换的推导过程比较繁杂,最后看到的公式推想物理意义很难。我们想的是,从基本思想推导出公式。
一个灰度图片是以一个二维矩阵的形式存在,和通用傅立叶变换相比,有俩点不同:
-
图片是二维,公式是一维
-
图片数据有限且离散,公式无限且连续。
有很多资料在说在图片傅立叶变换中,一个图片会被分成8*8的小块,再进行计算。这可能是在实现时候提高运算效率的一种方法,但是我觉得这对理解傅立叶变换物理意义造成了影响。我们按照公式去实现了一下,先不考虑运算效率问题,也就是说不把图片分成小块,代码在这里: DFT 简单实现-Matlab。
-
二维的问题
二维矩阵中每一列(或者每一行)数据都可以单独看作一个波。对一个的矩阵,可以看作
个
的波。在二维傅立叶变换里,先分别对每一列(行)做傅立叶变换,会得到同样大小的傅立叶系数向量,再在另一个维度(上面是行这里就是列,上面是列这里就是行)对这些系数做傅立叶变换。所以,研究二维傅立叶变换可以看成俩个一维傅立叶变换,本质上还是一维数据的处理。
从第三部分“频谱图的理解”插图的左上角原图里,我们拿出第100列的数据,是一个个像素的值,以1-1024之间的整数做X轴,以像素的值做Y轴,画出这个向量的波是:
这个波和我们在所有地方看到的信号是一样的,可以看成是多个正余弦波的叠加。盗图一张,同样出自傅立叶变换讲解-知乎专栏,写的真好:
最左侧那个波可以看作图片中一行或者一列的数值组成的波,后面是分解出来的不同幅度,不同频率的正弦和余弦波。
-
关于无限到有限的问题
在实际情况中,无穷大是没有办法实现的,只能近似估计。图片的一维数据是一个波,我们假设这个波由P个频率的波叠加而成。
图片中的像素值是: