[scikit-image] 32. 相互相関によりノイズを加えた画像のシフト量を求める(skimage.feature masked_register_translation)

python

はじめに

本記事では、scikit-imageライブラリのfeatureモジュールに含まれる

masked_register_translation関数を使用して、元画像とノイズが加わった画像間のシフト量を計算する方法について解説します。画像処理においてノイズが存在する場合でも正確に位置ずれを検出する技術は、医療画像処理や天体写真の解析など多くの分野で重要です。相互相関を用いた手法により、高精度なシフト量の推定が可能になります。

コード

解説

モジュールのインポート

画像データの読み込み

下の画像を読み込み、rgb2grayにより、グレースケール化します。

シフト量の設定

ノイズの生成

np.random.choiceを使用して、80%のTrueと20%のFalseがランダムに分布した配列を生成します。この配列の形状は元の画像(image)と同一です。

画像をシフトしてノイズを加える

ndi.shift(image, shift)を使用してimageをshift分だけ移動した画像を生成します。この画像にノイズを適用すると、False部分が0となる画像が作成されます。これによってノイズが加わった画像が得られます。

画像の移動量を求める

ノイズをマスクとして扱い、masked_register_translation関数を使用して、マスクを考慮した相互相関により画像のシフト量を求めます。この処理メカニズムは、位相相関の原理と同様と考えられます。結果として、計算されたシフト量が実際に適用されたシフト量と一致することが確認できます。

[scikit-image] 31. 位相相関から画像間のシフト量を求める(skimage.feature register_translation)
scikit-imageライブラリのregister_translation関数を使用して画像間のシフト量を測定する方法を解説。位相相関法の原理から実装方法、実際の応用例まで、Pythonによる画像処理技術を紹介します。

画像の表示

左に元画像、中央にシフトしノイズを加えた画像、右にノイズのみの画像を表示しました。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

まとめ

scikit-imageのmasked_register_translation関数を使用することで、ノイズが存在する画像間でも高精度にシフト量を検出できることを確認しました。マスク処理を適用することにより、ノイズの影響を軽減しながら位置合わせが可能です。この手法は様々な画像処理タスクにおいて有用であり、特にノイズの多い環境下での画像解析に役立ちます。

参考

https://scikit-image.org/docs/stable/auto_examples/transform/plot_masked_register_translation.html#sphx-glr-auto-examples-transform-plot-masked-register-translation-py
shift — SciPy v1.16.2 Manual
skimage.feature — skimage 0.25.2 documentation

コメント