我有一个使用OpenCV3和numpy的简单Python 3 TKinter图像编辑器。
我想实现傅立叶变换,并将here中的第一个示例与numpy一起使用:

f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))

我不能只使用fshift作为结果并显示它。不幸的是,该站点上没有解释20*np.log...所在的行,而阅读有关Fourier变换的其他解释也没有向我解释。

到现在为止,我还没有用于此操作的参数,但是我测试了将20更改为其他值时的输出是否不同。这应该是用户可配置的,还是该代码示例为什么这样做?

最佳答案

another answer中所述,fshift很复杂,无法直接显示。如果要查看频谱,则需要取绝对值。

但是,有理由采用对数。光谱值在很大的范围内变化。因此,通常您只会在中心看到一个峰(或在2D中为一个亮点)。对数压缩值的范围-较大的峰比较小的峰更小。这对于可视化很有用,因为它使您可以查看所有振幅的细节。

这是一个例子:

python - 傅立叶变换可以具有哪些参数?/如何处理移位的结果?-LMLPHP

请注意,比例因子20对信号具有物理含义:

20 * log(abs(f)) = 10 * log(abs(f)^2)

因子10是任意的,但是因子2(2 * 10)等于在对数之前对频谱进行平方。如果只想可视化FFT,则此因素无关紧要-仅对数很重要。

关于python - 傅立叶变换可以具有哪些参数?/如何处理移位的结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34841808/

10-15 05:49