[scikit-image] 31. 位相相関から画像間のシフト量を求める(skimage.feature register_translation)

python

はじめに

ここではskimage.featureのregister_translationにより、画像間のシフト量を求める方法について説明する。

コード

解説

モジュールのインポート

画像データの読み込み

シフト量の設定

np.random.randint(100)は0〜99の整数を1個生成するので、x,yでそれぞれ生成した。シフト値は下記のようになっている。

画像のシフト

np.fft.fftn(image)はimageを離散フーリエ変換したもので、それをfourier_shift()によりフーリエ空間上でシフトさせる。
それをnp.fft.ifftn()により、逆フーリエ変換して元の画像に戻す。

画像のシフト量を求める

register_translation(元画像、シフト画像)でシフト量がわかる。これにより得られたシフト量は下記のように前述の値にマイナスがついた値となっていることから、計算が成功しているものと考えられる。

この処理のアルゴリズムが何であるかを示すため、相互相関の結果を図で示す。

元画像の2次元フーリエ変換とシフト画像の2次元フーリエ変換の複素共役の積を求める。
それを逆2次元フーリエ変換したもののゼロ周波数成分をスペクトルの中心にシフトする。
この画像の実部を.realとすることで抽出し図に表示する。

画像の表示

参考

Structural similarity index — skimage v0.15.0 docs
scipy.ndimage.fourier.fourier_shift — SciPy v0.15.1 Reference Guide
numpy.fft.fftn — NumPy v1.15 Manual
numpy.fft.ifftn — NumPy v1.13 Manual
numpy.fft.fft2 — NumPy v1.16 Manual
numpy.conj — NumPy v1.16 Manual
numpy.fft.ifft2 — NumPy v1.16 Manual

コメント