可可西

傅立叶变换(Fourier Transform)

欧拉公式

维基百科(wikichs

注1:这里的j为虚部,即j2 = -1

注2:欧拉公式的证明详见https://math.fandom.com/zh/wiki/Euler_%E5%85%AC%E5%BC%8F?variant=zh

欧拉公式描述的是一个随着时间变化,在复平面上做圆周运动的

 

推导可以得到:

 

傅里叶变换

维基百科:(wikichs

傅里叶变换描述的就是一系列点的运动叠加的效应

逆傅里叶变换来理解这个过程

$F(w)$为当值为$w$时的频域值,$F(w) \cdot e^{iwt} $为单个圆上的点旋转随时间的展开(即:单个正弦波)

对$w$从$-\infty$到$+\infty$对$F(w) \cdot e^{iwt} $进行积分,表示将各个正弦波进行叠加求和,最后乘以一个$\frac{1}{2\pi } $的系数

 

一个信号是由不同频率不同相位的正弦信号叠加而成   注:正弦信号包括正弦波和余弦波,正弦波和余弦波只是相差$\frac{\pi }{2} $个相位

 

时域信号与频域信号

 

左图为初相位为0的三角函数叠加 -----  右图为初相位不为0的三角函数叠加

 

傅立叶变换(FT,Fourier Transform)

 

离散傅立叶变换(DFT,Discrete Fourier Transform)

维基百科:(wikichs

 

 

 

以样本数为4为例(即M=4),来进行说明:

$F(0) = \sum_{x=0}^{3} f(x)\cdot e^{0} =\sum_{x=0}^{3} f(x)= f(0)+f(1)+f(2)+(3)$

$F(1) = \sum_{x=0}^{3} f(x)\cdot e^{\frac{-j\cdot2\pi\cdot x}{4} } =\sum_{x=0}^{3} f(x)\cdot e^{-j\cdot\frac{\pi}{2}\cdot x }= f(0)+f(1)\cdot e^{-j\cdot\frac{\pi}{2} }+f(2)\cdot e^{-j\cdot \pi }+f(3)\cdot e^{-j\cdot\frac{3\pi}{2} }$

$F(2) = \sum_{x=0}^{3} f(x)\cdot e^{\frac{-j\cdot4\pi\cdot x}{4} } =\sum_{x=0}^{3} f(x)\cdot e^{-j\cdot\pi\cdot x }= f(0)+f(1)\cdot e^{-j\cdot\pi }+f(2)\cdot e^{-j\cdot 2\pi }+f(3)\cdot e^{-j\cdot3\pi }$

$F(3) = \sum_{x=0}^{3} f(x)\cdot e^{\frac{-j\cdot2\pi\cdot 3\cdot x}{4} } =\sum_{x=0}^{3} f(x)\cdot e^{-j\cdot\frac{3\pi}{2}\cdot x }= f(0)+f(1)\cdot e^{-j\cdot\frac{3\pi}{2} }+f(2)\cdot e^{-j\cdot 3\pi }+f(3)\cdot e^{-j\cdot\frac{9\pi}{2} }$

用矩阵表示,则为:

$\begin{bmatrix}
F(0) & F(1) & F(2) &F(3)
\end{bmatrix}
=
\begin{bmatrix}
f(0) & f(1) & f(2) &f(3)
\end{bmatrix}
\cdot
\begin{bmatrix}
1 & 1 & 1 & 1\\
1 & e^{-j\cdot \frac{\pi}{2} } & e^{-j\cdot \pi } & e^{-j\cdot\frac{3\pi}{2} }\\
1 & e^{-j\cdot\pi } & e^{-j\cdot 2\pi } & e^{-j\cdot3\pi }\\
1 & e^{-j\cdot \frac{3\pi}{2} } & e^{-j\cdot 3\pi } & e^{-j\cdot\frac{9\pi}{2} }
\end{bmatrix}$

其中矩阵$A$为一个对称阵:

$\begin{bmatrix}
1 & 1 & 1 & 1\\
1 & e^{-j\cdot \frac{\pi}{2} } & e^{-j\cdot \pi } & e^{-j\cdot\frac{3\pi}{2} }\\
1 & e^{-j\cdot\pi } & e^{-j\cdot 2\pi } & e^{-j\cdot3\pi }\\
1 & e^{-j\cdot \frac{3\pi}{2} } & e^{-j\cdot 3\pi } & e^{-j\cdot\frac{9\pi}{2} }
\end{bmatrix}$

 

利用欧拉公式$e^{-j\theta } = cos\theta -j \cdot sin \theta  $可知

$e^{-j\cdot \frac{\pi}{2} }=-j$

当$u$为奇数时,$e^{-j\cdot u \pi }=-1$,$e^{-j\cdot \frac{(2u+1)\pi}{2} }=e^{-j\cdot u \pi } \cdot e^{-j\cdot \frac{\pi}{2} }=-1 \cdot -j = j$

当$u$为偶数时,$e^{-j\cdot u \pi }=1$,$e^{-j\cdot \frac{(2u+1)\pi}{2} }=e^{-j\cdot u \pi } \cdot e^{-j\cdot \frac{\pi}{2} }=1 \cdot -j =-j$

矩阵$A$化简为:

$\begin{bmatrix}
1 & 1 & 1 & 1\\
1 & -j & -1 & j\\
1 & -1 & 1 & -1\\
1 & j & -1 & -j
\end{bmatrix}$

 

快速傅立叶变换(FFT,Fast Fourier Transform)

维基百科:(wikichs

DFT的算法复杂度为$O(n^2)$,FFT算法对其进行了改善,在得到一样结果基础上,大大降低了其计算量,将算法的复杂度优化到$O(n\cdot log_{2} n)$

 

FFT必须要求元素的数量为$2^n$个,实际上可以通过添加0来补全为$2^n$个,从而可以计算任意个元素的FFT   注:添加0之后,只会让频率阈的幅度谱更加平滑

 

主流有两种实现方式:

库利-图基FFT算法(Cooley–Tukey FFT algorithm) // 基于蝶形运算的递归实现方式

威诺格拉德FFT算法(Winograd FFT algorithm) // 基于多项式乘法的递归实现方式

原始Cooley-Tukey算法的基本思路是采用递归的方法进行计算,但在算法实现会将显式的递归算法改写为非递归的形式,以便让该算法也可以在gpu上执行  注:gpu上不允许执行递归函数

 

Cooley-Tukey算法

下面以一维DFT来讲解Cooley-Tukey算法的非递归实现方式:

$F(0) = f(0)+f(1)+f(2)+(3) = f(0)+f(2)+f(1)+(3)= \left [ f(0)+f(2) \right ] +\left [ f(1)+(3) \right ] \cdot e^{0} $

$F(1) = f(0)+f(2)\cdot e^{-j\cdot \pi }+f(1)\cdot e^{-j\cdot\frac{\pi}{2} }+f(3)\cdot e^{-j\cdot\frac{3\pi}{2} } =  f(0)-f(2)+\left [ f(1)+f(3)\cdot e^{-j\cdot\pi } \right ]\cdot e^{-j\cdot\frac{\pi}{2} } = \left [ f(0)-f(2) \right ]+ \left [ f(1)-f(3) \right ]\cdot e^{-j\cdot\frac{\pi}{2} } $

$F(2) = f(0)+f(2)\cdot e^{-j\cdot 2\pi }+f(1)\cdot e^{-j\cdot\pi }+f(3)\cdot e^{-j\cdot3\pi } = f(0)+f(2)+\left [ f(1)+f(3)\cdot e^{-j\cdot2\pi } \right ] \cdot e^{-j\cdot\pi } = \left [ f(0)+f(2) \right ]+ \left [ f(1)+f(3) \right ] \cdot e^{-j\cdot\pi }$

$F(3) = f(0)+f(2)\cdot e^{-j\cdot 3\pi }+f(1)\cdot e^{-j\cdot\frac{3\pi}{2} }+f(3)\cdot e^{-j\cdot\frac{9\pi}{2} } =f(0)-f(2)+\left [ f(1)+f(3)\cdot e^{-j\cdot 3\pi } \right ]\cdot e^{-j\cdot\frac{3\pi}{2} } = \left [ f(0)-f(2) \right ]+\left [ f(1)-f(3) \right ]\cdot e^{-j\cdot\frac{3\pi}{2} }$

 

将奇数项(Odd)和偶数项(Even)分离,得到:

$F(0) = \left [ f(0)+f(2) \right ]+\left [ f(1)+f(3) \right ] \cdot 1$

$F(2) = \left [ f(0)+f(2) \right ]+\left [ f(1)+f(3) \right ] \cdot -1$

 

$F(1) = \left [ f(0)-f(2) \right ]+\left [ f(1)-f(3) \right ]  \cdot -j$

$F(3) = \left [ f(0)-f(2) \right ]+\left [ f(1)-f(3) \right ] \cdot j$

 

将奇数项(Odd)和偶数项(Even)分离,将序列长为$M$的DFT分割为两个长为$M/2$的子序列的DFT,公式推导如下:

$F(u)= \sum_{x=0}^{M-1} f(x)\cdot e^{\frac{-j\cdot 2\pi \cdot u \cdot x}{M} }$

$F(u)= \sum_{r=0}^{\frac{M}{2} -1} f(2r)\cdot e^{\frac{-j\cdot 2\pi \cdot u \cdot 2r}{M} } + \sum_{r=0}^{\frac{M}{2} -1} f(2r+1)\cdot e^{\frac{-j\cdot 2\pi \cdot u \cdot (2r+1)}{M} }$

$F(u)= \sum_{r=0}^{\frac{M}{2} -1} f_1(r)\cdot e^{\frac{-j\cdot 2\pi \cdot u \cdot r}{M/2} } + \sum_{r=0}^{\frac{M}{2} -1} f_2(r)\cdot e^{\frac{-j\cdot 2\pi \cdot u \cdot (r+1/2)}{M/2} } $

$F(u)= \sum_{r=0}^{\frac{M}{2} -1} f_1(r)\cdot e^{\frac{-j\cdot 2\pi \cdot u \cdot r}{M/2} } + \sum_{r=0}^{\frac{M}{2} -1} f_2(r)\cdot e^{\frac{-j\cdot 2\pi \cdot u \cdot r}{M/2} } \cdot e^{\frac{-j\cdot 2\pi \cdot u }{M} } $

$F(u)= \sum_{r=0}^{\frac{M}{2} -1} f_1(r)\cdot e^{\frac{-j\cdot 2\pi \cdot u \cdot r}{M/2} } + {\color{Red}{ e^{-j\cdot 2\pi \cdot \frac{u}{M} }} } \cdot \sum_{r=0}^{\frac{M}{2} -1} f_2(r)\cdot e^{\frac{-j\cdot 2\pi \cdot u \cdot r}{M/2} }$

 

旋转因子(twiddle factor)

上面$W_{M}^{u} = \color{Red}{ e^{-j\cdot 2\pi \cdot\frac{u}{M} } }$为旋转因子(twiddle factor)

用欧拉公式展开得:$W_{M}^{u} =cos2\pi \cdot \frac{u}{M} - j \cdot sin 2\pi \cdot \frac{u}{M}$

几何意义:向量$(1,0)$按照顺时针进行旋转,$W_{M}^{u}$表示旋转$u$个$W_{M}^{1}$角度

 

$W_{M}^{2} = W_{M}^{1} * W_{M}^{1}$

$W_{M}^{3} = W_{M}^{1} * W_{M}^{1}* W_{M}^{1} = W_{M}^{2} * W_{M}^{1}$

$W_{M}^{4} = W_{M}^{1} * W_{M}^{1}* W_{M}^{1} * W_{M}^{1} = W_{M}^{2} * W_{M}^{2} = W_{M}^{3} * W_{M}^{1}$

。。。 。。。

 

旋转因子的性质:

① $W_{M}^{0} = 1$

② 周期性,$W_M$具有周期$M$,即:$W_{M}^{u+M} = W_{M}^{u}$

③ 对称性,即:$W_{M}^{u+\frac{M}{2}} = W_{M}^{u}$

④ 若$m$是$M$的约数,$W_{M}^{mu} = W_{\frac{M}{m}}^{u}$

 

分解得到的2个子序列的DFT为:

$\begin{cases}
F(r) \space \space\space\space\space\space\space\space\space\space\space\space\space =f_1(r) + W_{M}^{u} \cdot f_2(r)
\\
F(r+M/2) = f_1(r) - W_{M}^{u} \cdot f_2(r)
\end{cases}$

其中$r=0, 1, 2, ... , M/2 -1$

示例图如下:

 

4个元素蝶形运算

以上使用蝶形运算可表示为:

上面为4个元素,即$M=4$,所以

$W_{M}^{0} = W_{4}^{0} = e^{-j\cdot 2\pi \cdot\frac{0}{4} } = e^0 = 1$

$W_{M}^{1} = W_{4}^{1} = e^{-j\cdot 2\pi \cdot\frac{1}{4} } = e^{-j\cdot \frac{\pi}{2} } = -j$

 

8个元素蝶形运算

对于8个元素,将奇数项(Odd)和偶数项(Even)分离,注意这里是彻底分离,直到分离不能再分的状态(即:每个子序列中只有2个元素)

例如:0、1、2、3、4、5、6、7分离成0、2、4、6 || 1、3、5、7两个子序列,继续对两个子序列进行奇偶分离

得到:0、4 | 2、6 || 1、5 | 3、7四个子序列

用蝶形运算可表示为:

上面为8个元素,即$M=8$,所以

$W_{M}^{0} = W_{8}^{0} = e^{-j\cdot 2\pi \cdot\frac{0}{8} } = e^0 = 1$

$W_{M}^{1} = W_{8}^{1} = e^{-j\cdot 2\pi \cdot\frac{1}{8} } = e^{-j\cdot \frac{\pi}{4} } = cos\frac{\pi}{4} - j\cdot sin\frac{\pi}{4} = \frac{\sqrt{2} }{2} -\frac{\sqrt{2} }{2}j$

$W_{M}^{2} = W_{8}^{2} = e^{-j\cdot 2\pi \cdot\frac{2}{8} } = e^{-j\cdot \frac{\pi}{2} } = -j$

$W_{M}^{3} = W_{8}^{3} = e^{-j\cdot 2\pi \cdot\frac{3}{8} } = e^{-j\cdot \frac{3\pi}{4} } = cos\frac{3\pi}{4} - j\cdot sin\frac{3\pi}{4} = -\frac{\sqrt{2} }{2} -\frac{\sqrt{2} }{2}j$

 

展开得到:

$F(0)=[f(0)+f(4)]+[f(2)+f[6])+\left \{[f(1)+f(5)]+[f(3)+f(7)]\right \}$

$F(4)=[f(0)+f(4)]+[f(2)+f[6])-\left \{ [f(1)+f(5)]+[f(3)+f(7)]\right \}$

 

$F(2)=[f(0)+f(4)]-[f(2)+f[6])+\left \{[f(1)+f(5)]-[f(3)+f(7)]\right \}\cdot W_{8}^{2}$

$F(6)=[f(0)+f(4)]-[f(2)+f[6])-\left \{[f(1)+f(5)]-[f(3)+f(7)]\right \}\cdot W_{8}^{2}$

 

$F(1)=[f(0)-f(4)]+[f(2)-f(6)]\cdot W_{8}^{2} +\left \{   [f(1)-f(5)]+[f(3)-f(7)]\cdot W_{8}^{2}\right \} \cdot W_{8}^{1}$

$F(5)=[f(0)-f(4)]+[f(2)-f(6)]\cdot W_{8}^{2} -\left \{   [f(1)-f(5)]+[f(3)-f(7)]\cdot W_{8}^{2}\right \} \cdot W_{8}^{1}$

 

$F(3)=[f(0)-f(4)]-[f(2)-f(6)]\cdot W_{8}^{2} +\left \{   [f(1)-f(5)]-[f(3)-f(7)]\cdot W_{8}^{2}\right \} \cdot W_{8}^{3}$

$F(7)=[f(0)-f(4)]-[f(2)-f(6)]\cdot W_{8}^{2} -\left \{   [f(1)-f(5)]-[f(3)-f(7)]\cdot W_{8}^{2}\right \} \cdot W_{8}^{3}$

 

16个运算蝶形运算

对于16个元素,将奇数项(Odd)和偶数项(Even)彻底分离

例如:0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15分离成0、2、4、6、8、10、12、14 ||| 1、3、5、7、9、11、13、15两个子序列,继续对两个子序列进行奇偶分离

得到:0、4 、8、12 || 2、6、10、14 ||| 1、5、9、13 || 3、7、11、15四个子序列,继续对四个子序列进行奇偶分离

得到:0、8  | 4、12  || 2、10 | 6、14 ||| 1、9 | 5、13  || 3、11 | 7、15八个子序列

用蝶形运算可表示为:

旋转因子如下:

 

奇偶解调

对于M个点,如何将奇数项(Odd)和偶数项(Even)彻底分离,快速分成2点 一组,作为第一级FFT变换的输入呢?

可使用码位倒置(即:将二进制反过来,又称位反转 -- Bit Reversal)方法来快速得到,以16个点的序列为例:

原序列(10进制) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
原序列(2进制) 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
码位倒置(2进制) 0000  1000 0100 1100  0010  1010  0110  1110  0001 1001  0101  1101  0011  1011 0111 1111
码位倒置(10进制)  0 8 4 12 2 10 14 1 9 5 13 3 11 7 15

 

图像的空间域到频率域之间的转换

空间域 --》DFT或FFT --》频率域 --》中心化 --》对数放大 --》傅立叶谱

傅立叶谱 --》指数还原 --》去中心化 --》频率域 --》IDFT或IFFT --》空间域

 

 

在频率域中,低频是信号中慢变化部分,对应图像的概貌(如大的轮廓);高频是信号中快速变化变化部分,对应图像的细节

 

 

图像信号的傅里叶变换包含幅度与相位两部分:

幅度谱:具有较明显的信号结构特征,且易于解释。频率越低越靠近中心,频率越高越靠近边缘。但幅度本身只包含图像本身的周期结构,并不包含位置信息

相位谱:类似随机图案,一般难以解释,但包含图像里的位置信息,物体在空间的移动,相当于频域的相位移动,相位谱对于图像恢复具有同样重要的意义

 

对图像进行傅里叶变换,起始是一个二维离散傅里叶变换,图像的频率是指图像灰度变换的强烈程度,将二维图像由空间域变为频域后。

图像上的每个点的值都变成了复数,也就是所谓的复频域,通过复数的实部和虚部,可以计算出幅值和相位,计算幅值即对复数取模值,将取模值后的矩阵显示出来,即为其频谱图。

但是问题来了,复数取模后,数字有可能变的很大,远大于255,如果数据超过255,则在显示图像的时候会都当做255来处理,图像就成了全白色。

因此,一般会对模值再取对数,在在0~255的范围内进行归一化,这样才能够准确的反映到图像上,发现数据之间的差别,区分高频和低频分量,这也是进行傅里叶变换的意义。

 

基于傅里叶变换的滤波

 

参考

五分钟内掌握快速傅里叶变换(FFT)算法

11.图像预处理之傅里叶变换与频谱滤波

数字图像处理-图像的频率域变换

傅里叶变换这样学,何愁不会呢?直观理解傅里叶变换

 

posted on 2024-09-08 00:02  可可西  阅读(119)  评论(0编辑  收藏  举报

导航