この記事では、Python+SciPy+NumPyを用いて、高速フーリエ変換によりスペクトル強度を算出する方法をソースコード付きで解説します。
高速フーリエ変換でスペクトル強度算出
NumPyには、2次元配列の高速フーリエ変換をおこなうメソッド「numpy.fft.fft2(img)」があります。
今回はこれらを用いて、SciPyで読み込んだ画像を高速フーリエ変換し、スペクトル強度を算出してグラフ表示してみました。
ソースコード(Python3+SciPy+NumPy)
サンプルプログラムのソースコードです。
# -*- coding: utf-8 -*- import numpy as np from scipy import ndimage import matplotlib.pyplot as plt def main(): # 入力画像をグレースケールで読み込み img = ndimage.imread('input.jpg', mode='L') # 高速フーリエ変換(2次元) fimg = np.fft.fft2(img) # 零周波数成分を配列の左上から中心に移動 fimg = np.fft.fftshift(fimg) # 強度スペクトルの計算 mag = 20*np.log(np.abs(fimg)) # 入力画像とスペクトル画像をグラフ描画 plt.subplot(121) plt.imshow(img, cmap = 'gray') plt.title('Input Image') plt.subplot(122) plt.imshow(mag, cmap = 'gray') plt.title('Magnitude Spectrum') plt.show() if __name__ == "__main__": main()
実行結果
サンプルプログラムの実行結果です。
■入力画像(左)と出力画像(右)
【Python超入門】使い方とサンプル集
Pythonの使い方について、基礎文法から応用例まで入門者向けに解説します。
コメント