繁体   English   中英

numpy 中的二维傅里叶变换的频率基础是如何选择的?

[英]How is the frequency basis chosen for 2d fourier transform in numpy?

我正在使用tf.signal.fft2d (在 numpy: np.fft.fft2中)将 2D(空间)图像转换为频域图像,并注意到开始和结束形状是相同的,尽管我不明白为什么他们必须是。 例如:

test_img = np.random.rand(100, 100) # shape (100, 100)
spectral = np.fft.fft2(test_img)

# -> spectral.shape = (100, 100)

鉴于图像现在处于光谱基础 - NumPy(和 Tensorflow 因为实现相同)中如何选择基础元素? 具体来说,什么是起始(最低)频率,以及如何选择更具周期性的频率?

为什么您期望两个轴的长度不同?

默认情况下,FFT 是在您提供的点上计算的,从而产生一个(正确地)具有与输入相同形状的二维数组。 要更改此行为,您必须向fft2提供s参数(请参阅文档)。 例如,在您的情况下,调用np.fft.fft2(test_img, s=(200, 100))将导致形状为(200, 100)的 output 。 这是通过对输入进行零填充(即沿第一个维度添加 100 个尾随零)并在结果矩阵上计算 FFT 来在内部获得的。

作为一般规则,对于形状为(N, M)的 FFT output ,(归一化)频率基础将是轴 0 上的1/N和轴 1 上的1/M 。要将它们转换为实际频率,您需要乘以每个由各自维度的采样频率。

请注意,当您计算双面 FFT 时(正如您所做的那样),您将在前半部分获得高达奈奎斯特的正频率,在后半部分获得负频率(参见此页

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM