图像中的傅立叶变换

Posted jermmyxu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像中的傅立叶变换相关的知识,希望对你有一定的参考价值。

上一篇文章讲了傅立叶变换的本质。这篇文章会总结一下傅立叶变换的常用性质,公式巨多,慎入!慎入!

相关概念

首先,回顾一下傅立叶变换的公式:

\\[F(u)=\\frac{1}{M}\\sum_{x=0}^{M-1}f(x)e^{-2j\\pi (ux/M)} \\]

频谱(spectrum)

由上面的公式可以看出,傅立叶变换得到的系数 \\(F(u)\\) 是一个复数,因此可以表示为:\\(F(u)=R(u)+jI(u)\\),其中,\\(R(u)\\) 是实部,\\(I(u)\\) 是虚部。傅立叶变换的频谱被定义为:

\\[|F(u)|=\\sqrt{R^2(u)+I^2(u)} \\]

相位谱(phase)

根据欧拉公式,我们知道 \\(R(u)\\) 代表的是一个余弦值,而 \\(I(u)\\) 则是正弦值。如果把 \\(F(u)\\) 看作一个向量 \\((R(u), I(u))\\),则这个向量的夹角为 \\(\\phi(u)=\\arctan{[\\frac{I(u)}{R(u)}]}\\)。这个夹角也被称为相位谱

能量谱(power)

能量谱其实就是频谱的平方:\\(P(u)=|F(u)|^2=R^2(u)+I^2(u)\\)

常用性质

周期性

所谓周期性,即:

\\[F(u,v)=F(u+M,v)=F(u,v+N)=F(u+M,v+N) \\]

证明如下:

\\[\\begin{eqnarray} F(u+M,v+N)&=&\\frac{1}{MN}\\sum_{x=0}^{M-1}\\sum_{y=0}^{N-1}f(x,y)e^{-j2\\pi [(u+M)x/M+(v+N)/N]} \\\\ &=&\\frac{1}{MN}\\sum_{x=0}^{M-1}\\sum_{y=0}^{N-1}f(x,y)e^{-j2\\pi [(u+M)x/M+(v+N)y/N]} \\\\ &=&\\frac{1}{MN}\\sum_{x=0}^{M-1}\\sum_{y=0}^{N-1}f(x,y)e^{-j2\\pi (ux/M+vy/N)}e^{-j2\\pi (x+y)} \\end{eqnarray} \\]

注意,\\(e^{-j2\\pi (x+y)}={(e^{-j2\\pi})}^{x+y}=1^{(x+y)}=1\\),所以

\\[F(u+M,v+N)=\\frac{1}{MN}\\sum_{x=0}^{M-1}\\sum_{y=0}^{N-1}f(x,y)e^{-j2\\pi (ux/M+vy/N)}=F(u,v) \\]

类似地,可以推出

\\[f(x,y)=f(x+M,y)=f(x,y+N)=f(x+M,y+N) \\]

共轭对称性

回忆一下,在复数域中,共轭指的是虚部取反。即 \\(z=x+jy\\) 的共轭是 \\(z*=x-jy\\)

在傅立叶变换中,存在以下共轭对称性:

\\[F(u,v)=F*(-u,-v) \\]

证明如下:

\\[\\begin{eqnarray} F*(-u,-v)&=&\\frac{1}{MN}\\sum_{x=0}^{M-1}\\sum_{y=0}^{N-1}f(x,y)e^{ux/M+vy/N} \\\\ &=&\\frac{1}{MN}\\sum_{x=0}^{M-1}\\sum_{y=0}^{N-1}f(x,y)[\\cos{[2\\pi (ux/M+vy/N)]}-j\\sin{[2\\pi(ux/M+vy/N)]}] \\text{(注意共轭)} \\\\ &=&F(u,v) \\end{eqnarray} \\]

那么这个性质有什么用呢?注意,\\(|F*(-u,-v)|=|F(-u,-v)|\\),换句话说,\\(|F(u,v)|=|F(-u,-v)|\\)

要知道,\\(|F(u,v)|\\) 表示的是傅立叶频谱图,所以,共轭对称性表明,傅立叶的频谱图是中心对称的。

具体地,下图所示的傅立叶频谱图,四个对角上的能量是沿图片中心对称的。

平移性

平移性指的是:

\\[f(x-x_0,y-y_0) \\Leftrightarrow F(u,v)e^{-j2\\pi (ux_0/M+vy_0/N)} \\tag{1} \\]

这个等价关系的意思是说,如果原图 \\(f(x,y)\\) 平移了 \\((x_0,y_0)\\) 个单位,那么平移后的图像对应的傅立叶变换为 \\(F(u,v)e^{-j2\\pi (ux_0/M+vy_0/N)}\\),即在原来 \\(F(u,v)\\) 的基础上乘上 \\(e^{-j2\\pi (ux_0/M+vy_0/N)}\\)

这个公式的证明很简单。平移前的公式为:

\\[f(x,y)=\\sum_{u=0}^{M-1}\\sum_{v=0}^{N-1}F(u,v)e^{j2\\pi (ux/M+vy/N)} \\]

现在,原图的像素由 \\((x,y)\\) 平移到 \\((x-x_0,y-y_0)\\),因此,我们只需要将 \\((x-x_0,y-y_0)\\) 代入上式即可:

\\[\\begin{eqnarray} f(x-x_0,y-y_0)&=&\\sum_{u=0}^{M-1}\\sum_{v=0}^{N-1}F(u,v)e^{j2\\pi [(x-x_0)u/M+(y-y_0)v/N]} \\\\ &=&\\sum_{u=0}^{M-1}\\sum_{v=0}^{N-1}F(u,v)e^{-j2\\pi(ux_0/M+vy_0/N)}e^{j2\\pi (ux/M+vy/N)} \\end{eqnarray} \\]

在保持原来的基底向量不变的情况下,我们只需要将傅立叶系数变成 \\(F(u,v)e^{-j2\\pi(ux_0/M+vy_0/N)}\\) 即可。

同样的,如果频谱图发生平移,有如下关系成立:

\\[F(u-u_0,v-v_0)\\Leftrightarrow f(x,y)e^{j2\\pi (u_0 x/M+v_0 y/N)} \\tag{2} \\]

证明的方法是类似的。

从平移关系中,我们可以得到一个很好的性质。注意,在复数中,有这样两个等式成立 \\(|e^{aj}e^{bj}|=|e^{aj}||e^{bj}|\\)\\(|e^{jx}|=1\\)(不懂的请复习复数相关的内容)。应用到上面的结论,即 \\(|F(u,v)e^{-j2\\pi (ux_0/M+vy_0/N)}|=|F(u,v)|\\)。换句话说,原图平移后,傅立叶频谱图不变。

例如,对于下面两幅图(为了保持图片大小不变,我们在图片外围补了一层 ‘0’ 边界):

它们对应的傅立叶频谱图都是这个样子的:

注意,四个角上的白点代表低频信号的分量。

另外,我们平时经常用的中心化操作也依赖于平移性和周期性。

所谓中心化,就是将频谱图平移 \\((M/2, N/2)\\) 个单位。由平移性的公式 (2),可以得到:

\\[\\begin{eqnarray} F(u-\\frac{M}{2},v-\\frac{N}{2}) &\\Leftrightarrow& f(x,y)e^{j2\\pi (\\frac{1}{2}x+\\frac{1}{2}y)} \\\\ &=&f(x,y)e^{j\\pi(x+y)} \\\\ &=&f(x,y){e^{j\\pi}}^{(x+y)} \\\\ &=&f(x,y)(-1)^{x+y} \\end{eqnarray} \\]

所以,我们只要对原图的每个像素乘以 \\((-1)^{x+y}\\),然后进行傅立叶变换,这样得到的频谱图便是中心化后的频谱图了。

如果对上一幅频谱图中心化,则可以得到:

这么做的目的是为了方便肉眼观察。中心化后,频谱图中心对应的便是低频分量,远离中心的,则是高频分量。

卷积定理

卷积定理表述为:

\\[f(x,y)*h(x,y) \\Leftrightarrow F(u,v)H(u,v) \\\\ F(u,v)*H(u,v) \\Leftrightarrow f(x,y)h(x,y) \\]

(注意,右边式子表示的是矩阵的点乘运算,而不是矩阵乘法)

它的意思是说,在空间域内进行卷积运算,跟把它们转换到频率域再进行点乘运算,效果是等价的。

要证明这个定理,首先要知道卷积的定义(关于卷积的定义,可以参考这篇知乎的回答):

\\[f(x,y)*h(x,y)=\\sum_{m=0}^{M-1}\\sum_{n=0}^{N-1}f(m,n)h(x-m,y-n) \\]

然后,我们对等式两边同时进行傅立叶变换(注意,傅立叶变换是针对x、y进行的,m、n相关的式子可以看作常数):

\\[\\begin{eqnarray} F[f(x,y)*h(x,y)]&=&F[\\sum_{m=0}^{M-1}\\sum_{n=0}^{N-1}f(m,n)h(x-m,y-n)] \\\\ &=&\\sum_{m=0}^{M-1}\\sum_{n=0}^{N-1}f(m,n)F[h(x-m,y-n)] \\\\ \\end{eqnarray} \\]

由之前的平移性,我们知道:\\(h(x-m,y-n)\\Leftrightarrow H(u,v)e^{-j2\\pi (um/M+vn/N)}\\) 。所以上式中的 \\(F[h(x-m,y-n)]=H(u,v)e^{-j2\\pi (um/M+vn/N)}\\),这样,我们便得到:

\\[\\begin{eqnarray} F[f(x,y)*h(x,y)]&=&\\sum_{m=0}^{M-1}\\sum_{n=0}^{N-1}f(m,n)F[h(x-m,y-n)] \\\\ &=&\\sum_{m=0}^{M-1}\\sum_{n=0}^{N-1}f(m,n)H(u,v)e^{-j2\\pi (um/M+vn/N)} \\\\ &=&\\sum_{m=0}^{M-1}\\sum_{n=0}^{N-1}f(m,n)e^{-j2\\pi (um/M+vn/N)} H(u,v) \\\\ &=&F(u,v)H(u,v) \\end{eqnarray} \\]

上面的 \\(\\sum_{m=0}^{M-1} \\sum_{n=0}^{N-1} f(m,n)e^{-j2\\pi (um/M+vn/N)}\\) 刚好凑成一个傅立叶变换 \\(F(u,v)\\)。所以我们最终证明:\\(f(x,y)*h(x,y) \\Leftrightarrow F(u,v)H(u,v)\\)

另一个式子 \\(F(u,v)*H(u,v) \\Leftrightarrow f(x,y)h(x,y)\\) 的证明是类似的。

参考

以上是关于图像中的傅立叶变换的主要内容,如果未能解决你的问题,请参考以下文章

图像中的傅立叶变换

python 图像的离散傅立叶变换

OpenCV中的逆傅立叶变换

傅立叶变换FFT中采样频率有啥意义

利用傅立叶变换进行图像处理的代码演示

MATLAB实现图像的傅立叶变换