[scikit-image] 85. EuclideanTransformによるユークリッド変換(skimage.transform.EuclideanTransform)

python

はじめに

scikit-imageのEuclideanTransformを使うと、画像の回転と平行移動を組み合わせたユークリッド変換(剛体変換)を簡単に行うことができます。このクラスは画像の位置合わせや、物体検出、画像認識などの前処理に役立ちます。本記事では、EuclideanTransformの基本的な使い方と応用例について解説します。

コード

解説

モジュールのインポートなど

バージョン

画像の読み込み

本記事では、2年前に100円ショップ(ダイソー)で購入し、最近ようやく花が咲いたテロカクタス属大統領の画像を使用します。

この画像をplt.imreadで読み込み、img_as_floatを使用して0〜1の範囲にデータを変換した。

2Dユークリッド変換

transform.EuclideanTransformを使用して回転角度と平行移動量を設定すると、画像変換に必要な変換行列を作成できます。

画像のユークリッド変換

変換行列を画像に適用する際、出力画像の各ピクセルについて入力画像のどの位置から取得するかを把握する必要がある。そのため、変換行列をそのまま使用するのではなく、変換行列の逆行列を使用することが必要となる。

回転角を変化させた場合

まず、anglesという変数で回転させたい角度のリストを作成します。次に、transform.EuclideanTransform(rotation=angles[i])を使って各角度における回転行列を生成します。その後、transform.warp(img, tforms[i].inverse)を適用して回転された画像を作成し、最終的にsubplotsを使って複数の画像を並べて表示しました。plt.suptitleで図全体のタイトルを設定できます。

平行移動量を変化させた場合

平行移動量を変化させたときの画像の変化も、角度を変化させた場合と同じ方法で表示しました。

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

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

まとめ

本記事では、scikit-imageのEuclideanTransformを使った画像の回転と平行移動について解説しました。このクラスを使うことで、画像の剛体変換を簡単に実装できます。実際の応用例として、画像の位置合わせや物体検出の前処理などに活用できることを示しました。パラメータの調整によって様々な変換が可能であり、画像処理における基本的なツールとして役立つでしょう。

参考

Types of homographies — skimage 0.26.0rc0.dev0 documentation
skimage.transform — skimage 0.26.0rc0.dev0 documentation
skimage.transform — skimage 0.26.0rc0.dev0 documentation

コメント