我有一个使用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中为一个亮点)。对数压缩值的范围-较大的峰比较小的峰更小。这对于可视化很有用,因为它使您可以查看所有振幅的细节。
这是一个例子:
请注意,比例因子20对信号具有物理含义:
20 * log(abs(f)) = 10 * log(abs(f)^2)
因子10是任意的,但是因子2(2 * 10)等于在对数之前对频谱进行平方。如果只想可视化FFT,则此因素无关紧要-仅对数很重要。
关于python - 傅立叶变换可以具有哪些参数?/如何处理移位的结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34841808/