freq
有幾個非常大的值和很多小值。你可以看到,通過繪製
plt.hist(freq.ravel(), bins=100)
(見下文)。所以,當你使用
ax1.imshow(freq, interpolation="none")
Matplotlib使用freq.min()
作爲顏色的最低值(默認情況下爲藍色),和freq.max()
作爲顏色範圍中的最高值(默認爲紅色)。由於freq
中的幾乎所有值接近藍色末端,所以整個情節看起來是藍色的。
您可以通過,這樣低的值的顏色範圍更加廣泛地分佈在freq
重新調整價值得到更翔實的情節。
例如,您可以通過利用freq
的log
得到價值更好地分配。 (您可能不希望丟掉的最高價值,因爲它們對應於具有最高功率的頻率。)
import matplotlib as ml
import matplotlib.pyplot as plt
import numpy as np
import Image
file_path = "data"
image = np.asarray(Image.open(file_path).convert('L'))
freq = np.fft.fft2(image)
freq = np.abs(freq)
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(14, 6))
ax[0,0].hist(freq.ravel(), bins=100)
ax[0,0].set_title('hist(freq)')
ax[0,1].hist(np.log(freq).ravel(), bins=100)
ax[0,1].set_title('hist(log(freq))')
ax[1,0].imshow(np.log(freq), interpolation="none")
ax[1,0].set_title('log(freq)')
ax[1,1].imshow(image, interpolation="none")
plt.show()
從the docs:
的輸出,類似於FFT,包含在轉化的軸的低位拐角零頻率 術語,
因此,freq[0,0]
是 「零頻率」 術語。換句話說,它是discrete Fourier Transform中的常數項。
這個問題似乎是題外話,因爲它是關於理解什麼是傅立葉變換並(試行http://dsp.stackexchange.com)。 –
我明白fft在原理上做了什麼,我只是沒有真正得到'numpy.fft.fft2'輸出,我會期望一個沒有「空」頻段的1D數組。 – TheChymera