绘制图像的2D FFT

Bas*_*asj 7 python fft matplotlib scipy

我正在尝试绘制图像的2D FFT:

from scipy import fftpack, ndimage
import matplotlib.pyplot as plt

image = ndimage.imread('image2.jpg', flatten=True)     # flatten=True gives a greyscale image
fft2 = fftpack.fft2(image)

plt.imshow(fft2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但我明白了TypeError: Image data can not convert to float.

如何绘制图像的2D FFT?

Agu*_*guy 8

任何fft的结果通常由复数组成.这就是为什么你不能这样绘制它的原因.根据您的需求,您可以从查看绝对值开始

plt.imshow(abs(fft2))
Run Code Online (Sandbox Code Playgroud)

  • 解决了`plt.imshow(20*np.log10(abs(fft2)))`...现在这是我在 2D FFT 中的第一步(经过多年研究音频 1D FFT + STFT)... :) 任何想法我如何通过将某些 2DFFT 箱归零然后逆 FFT 来移除 [这张图片](http://gget.it/ykp8jbsr/image2.jpg) 的水平线? (3认同)
  • 缩放比例不好,因为您的组件很少(例如0,0 DC组件)。尝试以对数刻度`plt.imshow(np.log10(abs(fft2)))`进行操作 (2认同)