图像的傅立叶变换,原始图像由N 行N 列构成,N 必须是基2 的,把这个N*N 个包含图像的点称为实部,另外还需要N*N 个点称为虚部,因为FFT是基于复数的,如下图所示: (//实数DFT将时域内的N 个点变换为频域中两组各N/2+1 个点(分别对应实部和虚部)) 计算图像傅立叶变换的过程很简单:首先对每一行做一维FFT,然后对每一列做一维FFT。具体来说,先对第 0 行的N 个点做FFT(实部有值,虚部为0),将FFT输出的实部放回原来第 0 行的实部,FFT输出的虚部放回第 0 行的虚部,这样计算完全部行之后,图像的实部和虚部包含的是中间数据,然后用相同的办法进行列方向上的FFT变换,这样 N*N的图像经过FFT得到一个N*N 的频谱。 下面展示了一副图像的二维FFT 变换: 频域中可以包含负值,图像中灰色表示0,黑色表示负值,白色表示正值。可以看到 4个角上的黑色更黑,白色更白,表示其幅度更大,其实 4 个角上的系数表示的是图像的低频组成部分,而中心则是图像的高频组成部分。除此以外,FFT 的系数显得杂乱无章,基本看不出什么。 将上述直角坐标转换为极坐标的形式,稍微比较容易理解一点,幅度中4 个角上白色的区域表示幅度较大,而相位中高频和低频基本看不出什么区别来。 上述以一种不同的方法展示了图像频谱,它将低频部分平移到了频谱的中心(//MATLAB 中实现函数 fftshift)。这个其实很好理解,因为经 2D-FFT 的信号是离散图像,其 2D-FFT 的输出就是周期信号,也就是将前面一张图周期性平铺,取了一张以低频为中心的图。将原点放在中心有很多好处,比如更加直观更符合周期性的原理,但在这节中还是以未平移之前的图来解释。 行 N/2 和列 N/2 将频域分成四块。对实部和幅度来说,右上角和左下角成镜像关系,左上角和右下角也是镜像关系;对虚部和相位来说,也是类似的,只是符号要取反(//共轭?),这种对称性和1 维傅立叶变换是类似的,你可以往前看看。 为简单起见,先考虑 4*4 的像素,右边是其灰度值,对这些灰度值进行 2 维 fft变换。 h 和k 的范围在-N/2 到N/2-1 之间。 通常 I(n,m)是实数,F(0,0)总是实数(//直流分量),并且 F(h,k)具有对偶性。 如果写成复数形式,即: -------------------------------- 图像傅立叶变换的物理意义 如果只保留靠近中心的幅度,则图像的细节丢失,但是不同区域还是有着不同灰度。 如果保留的是远离中心的幅度,则图像的细节可以看得出,但...