使用两次一维DFT的叠加方式实现二维的DFT运算可以有效的减少计算成本。
一维DFT公式
X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π N k n X[k]=\sum_{n=0}^{N-1}x[n]e^{-j\frac{2\pi}{N}kn} X[k]=n=0∑N−1x[n]e−jN2πkn
将DFT转化为矩阵运算
在MATLAB中,使用矩阵运算比循环更加有效率。下面展示对每一行的处理:(以256x256大小图片举例)
对第i行进行DFT处理,则第i行第一个元素的卷积为:
x [ i , 1 ] e − j 2 π N 0 ∗ 0 + x [ i , 1 ] e − j 2 π N 0 ∗ 1 + . . . + x [ i , 1 ] e − j 2 π N 0 ∗ 255 x[i,1]e^{-j\frac{2\pi}{N}0*0}+x[i,1]e^{-j\frac{2\pi}{N}0*1}+...+x[i,1]e^{-j\frac{2\pi}{N}0*255} x[i,1]e−jN2π0∗0+x[i,1]e−jN2π0∗1+...+x[i,1]e−jN2π0∗255
所以将每行的每个元素都进行此运算之后得到:
X [ i , 1 ] = x [ i , 1 ] e − j 2 π N 0 ∗ 0 + x [ i , 1 ] e − j 2 π N 0 ∗ 1 + . . . + x [ i , 1 ] e − j 2 π N 0 ∗ 255 X [ i , 2 ] = x [ i , 2 ] e − j 2 π N 1 ∗ 0 + x [ i , 2 ] e − j 2 π N 1 ∗ 1 + . . . + x [ i , 2 ] e − j 2 π N 1 ∗ 2 . . . . . . X [ i , 256 ] = x [ i , 256 ] e − j 2 π N 255