freq
非常に大きな値がいくつかあり、小さな値がたくさんあります。プロットするとわかります
plt.hist(freq.ravel(), bins=100)
(下記参照)
ax1.imshow(freq, interpolation="none")
Matplotlib はfreq.min()
、色範囲の最小値 (デフォルトでは青色) とfreq.max()
色範囲の最大値 (デフォルトでは赤色) として使用します。のほとんどすべての値freq
が青色の端に近いため、プロットは全体として青色に見えます。
freq
値を再スケーリングして、低い値が色の範囲でより広く分布するようにすることで、より有益なプロットを得ることができます。
たとえば、 of を使用することで、値のより良い分布を得ることができlog
ますfreq
。(最高値は最高パワーの周波数に対応するため、おそらく最高値を捨てたくないでしょう。)
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()

ドキュメントから:
出力は、fft と同様に、変換された軸の下位隅にあるゼロ周波数の項を含みます。
したがって、freq[0,0]
「ゼロ周波数」の用語です。つまり、離散フーリエ変換における定数項です。