NumPy中2D傅里叶变换的频率基选择及维度匹配疑问
NumPy/TensorFlow中2D傅里叶变换的频域基元与频率选取说明
np.fft.fft2与tf.signal.fft2d的输出形状和输入一致,核心原因是傅里叶变换本质是用与输入维度长度相等的正交复指数基元对信号做线性分解,每个维度的基元数量匹配输入维度长度,最终输出形状自然和输入一致。
频域基元的选择
对于M×N的2D输入图像,傅里叶变换的基元是2D复指数函数,形式为:
e^(-2πi*(u*x/M + v*y/N))
其中:
- u的取值范围是
0到M-1,v的取值范围是0到N-1 - x为输入图像的行索引(
0到M-1),y为列索引(0到N-1)
每个基元对应频域输出中的一个点,该点的复数幅值代表基元在输入图像中的权重,相位代表基元的偏移量。
最低频率的定义
最低频率对应u=0且v=0的基元,也就是直流分量(DC Component):
- 这个基元是常数函数,其幅值等于输入图像所有像素值的总和(傅里叶变换未做归一化,若要得到均值需除以总像素数M×N)
- 它对应频域输出的
[0,0]位置,反映图像的整体亮度水平。
高周期性频率的选取
频域的频率采用环绕式排列,并非直观的“从低到高”顺序:
- 对于长度为L的维度,前半段索引(
0到L//2)对应正频率,后半段索引(L//2+1到L-1)对应负频率。负频率与对应正频率的基元共轭对称,幅值相同、相位相反,信息冗余。 - 最高正频率对应索引
L//2:比如100长度的维度,最高正频率是索引50,对应的基元周期为2个像素(每2个像素完成一次周期重复)。 - 若需要将频谱调整为“中心低频、边缘高频”的直观排列,可以使用
np.fft.fftshift(或tf.signal.fftshift),将直流分量移至频域输出的中心位置。
内容的提问来源于stack exchange,提问作者baubel
相关产品推荐
相关产品推荐

