图像处理之 _ 傅立叶变换

#图形图像

1. 图像处理中的傅立叶变换

将一幅图像从其空间域(spatial domain)转换为频域(frequency domain)。图像处理用到的主要是离散傅立叶变换(Discrete Fourier Transform),下文中简称 DFT。

图片.png

如上图所示,左边是原始图像(左白右黑),中间是 DFT 变换,右侧为变换后生成的频谱图(幅度相位共同决定了图中点亮度)。

上图展示了红色点 (x,y) 的变换,在纵轴方向,它所在的列颜色值都为 0(黑色),因此组成它的波形也能量也都为 0,在横轴方向,如中间图所示,左则为 255(白色),右则为 0(黑色),将其拆分成正弦波的组合,再利用拆分后的各个波的幅度(亮度)相位(亮度)以及频率大小(位置)生成频谱图(上图中简化了相位)。

原始图中的每个像素点,是由不同频率波投射在该点的能量叠加而成的,而频谱图中的每个点是原始图中每个像素点在该频率上的能量叠加而成的。它们之间都是一对多的关系,不存在一一对应。

2. 如何理解公式

图片.png

以上公式分别是一维和二维 DFT 的定义(摘自《学习 OpenCV》),先看看一维 DFT 公式,其中 x0…xN-1 是N个复数,它是原始数据,如音频数据中的每一帧,图像的像素点的灰度等,f 是映射到频域后的值,也是复数.下标 n 是 x 的变化范围,下标 k 是 f 的变化范围.二维空间公式同理.

图像对应的二维空间举例:把一个 256x256 像素(Nx=256,Ny=256,共 65536 个点,每一点视为 x,其值为亮度)的灰度图转换到频域,得到的也是一个 256x256 的矩阵,矩阵中的每个点都是复数(每一点视为 f).

3. 频域矩阵中的各个点的值怎么求?

每一个 f 点的值,都由所有的 x 点通过上述公式累加求得.

##4. 自然指数 exp() 的作用是什么?exp() 和正弦/余弦波有什么关系?

拆分点 x 在各个频率上的相位和幅度分量.exp() 和正弦/余弦波的关系,详见欧拉公式:

图片.png

5. 如何描述频域中的值

描述频率三个重要属性是:频率高低、幅值、相位。

输出的频域数据也由矩阵表示,其中每个点都是复数,实部和虚部分别对应幅值和相位,而该点在矩阵中的位置表示它的频率高低。

6. 怎么看 DFT 变换后的输出图 

图片.png

在很多例程中,变换后,都得到一个从中间到四周的放射状图形,如上图所示。

右侧图就是频率分布图谱,其中越靠近中心的位置频率越低,越亮的位置代表该频率的信号振幅越大。示意图大多是经过频谱中心化之后的图,如:OpenCV 的例程 OpenCV/samples/cpp/dft.cpp.在该程序中可以看到调整象限的操作。即左上右下互换,右上左下互换。数字图像的二维 DFT 所得结果,左上角是直流成分(图像的平均灰度级),四个角周围对应于低频成分,中央部分对应于高频部分。通过象限调整后,低频位置被换到了中间,这称为频谱中心化。对显示的频谱图而言,我们知道中间是低频,周围是高频即可。低频对应图像大致轮廓,高频对应图像细节。

一维 DFT 的系数对称 (2N 点的数据做 DFT,变换系数关于 N 点位置对称,类似图 5)。这是因为 DFT 的的变换基是对 0~2π分析的,因为 0 到π和π到 2π对称所以对称。二维可理解为两个一维的组合(见图 1,2,3),因此它是从中心向四周扩散的。

图像中的像素点与频谱中的点虽然大小一样,但并没有一一对应的关系(见图 4)

7. 如何使用 DFT 实现滤波

图 6 中能量分布在中高频区,从原始上看,它的细节比较多,局部跳变明显(梯度大),可想见,组成它的波成也是在某一中高频波的能量更大,也就是说边缘越多,变化的剧烈程序,中高频波分量越多。

滤波一般分为:低通(Low-pass)、高通(High-pass)、带通(Band-pass)。所谓高通就是保留图像中的高频成分,过滤低频成分,它类似于通过梯度求图像边缘。需要注意的是它过滤的是频率,而不是亮度。

具体实现就是将图片转成频谱图,过滤某一部分后,再通过逆变换转成灰度图。

8. 图像的变换与频谱图

图像的旋转平移等操作,只是位置变化,整体的亮度(能量)不变,但是在频谱图中却有差异。这是由于变换之后相位的差异,在频谱图上看到的点,实际是由幅度和相位共同算出的(见 dft.cpp 中的 magnitude 函数)

图片.png

9. DFT 与卷积

利用 DFT 可以大大加快卷积运算的速度。卷积定理:空间域的卷积运算可以转换为频域的乘法运算。具体实现是将图片转换到频域,将卷积核也转换到频域,计算频域乘法,最后将乘积进行逆变换,转回空间域。

一般只在卷积核比较大时,才使用该方法优化。

10. 对频域一些想法

把声音拆成正弦波比较好理解,声音是声波的叠加:不同高度,宽度,起始位置的波的叠加。比如弹奏“do”,发出的声音是琴弦振动的结果,弦的连续振动,必然是有规律的。人听到的是一系列基音和泛音组合的结果。声音是时域到频域的映射,维度是一,即 y=f(x),其中 x 是帧发生的时间,y 是该帧强度的大小。我们可以通过切分出一个小的时间片(do 所在的时间段),把它拆分到频谱,找个它的各个基音和泛音,进行对比,重组等等后续处理,人声也是一样,当发出“啊“声音的时候,也是一系列振动引起的。频率是声音的局部特征,即从整条音频中切出“do”或”啊”的时间片段,求取其频谱。

把一张画拆分成频率,首先把一张彩图拆成不同通道的灰度图,考虑单张灰度图的频谱。图片是空间到频域的映射,维度是二,即 z=f(x,y),其中 x,y 是像素点的坐标,z 是灰度。我们认为像素点间的灰度变化(即梯度)是有规律的。比如画中,墙和窗相交边缘上的各个点,变化都差不多(变化快,梯度大,频率高),远处云与蓝天的边缘也有相似性(变化慢),在单色的区域,比如蓝天整体变化不大(无变化),多处具体共同的性质,也是视作一种重复,我们就把它提取为规律和特征。除了图像音频,还有很多地方都可以用到频域映射,只要是有规律的重复出现即可,进而通过频谱分析,什么东西重复出现最多?它背后原因是什么?

11. 参考

  1. 图像傅里叶变换
    [http://blog.csdn.net/abcjennifer/article/details/7622228

](http://blog.csdn.net/abcjennifer/article/details/7622228)

  1. 理解深度学习中的卷积
    [http://www.jiqizhixin.com/article/2558

](http://www.jiqizhixin.com/article/2558)

  1. (精心整理) 图像的傅里叶变换
    [https://wenku.baidu.com/view/c5e2cca8fab069dc502201db.html

](https://wenku.baidu.com/view/c5e2cca8fab069dc502201db.html)

  1. 傅里叶分析之掐死教程(完整版) [https://zhuanlan.zhihu.com/p/19763358?columnSlug=wille

](https://zhuanlan.zhihu.com/p/19763358?columnSlug=wille)

  1. 如何通俗易懂地解释欧拉公式
    [http://www.matongxue.com/madocs/8.html

](http://www.matongxue.com/madocs/8.html)