[scikit-image] 86. EuclideanTransformで画像の中心を原点として回転する(skimage.transform.EuclideanTransform)

python

はじめに

scikit-imageのEuclideanTransformを使用して画像の中心を原点として回転させる方法を紹介します。EuclideanTransform(ユークリッド変換)は回転と平行移動を組み合わせた剛体変換の一種で、画像処理において物体の位置や向きを変更する際に役立ちます。本記事では、画像の中心点を基準とした回転処理の実装方法について具体的なコード例を交えて解説します。

コード

解説

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

バージョン

画像の読み込み

下記サイトのジャスミン茶の画像を用います。

ペットボトルのジャスミン茶のイラスト
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

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

原点を画像中心として回転

transform.EuclideanTransformで回転角度と平行移動量を設定します。平行移動量は-np.array(img.shape[:2]) / 2と指定することで、画像の中心を原点とします。

@演算子を使って行列積を計算します。画像中心を原点として回転する場合は、「平行移動の逆行列@回転行列@平行移動行列」という順序で計算します。

逆行列と正則行列の積は単位行列となります。

画像のユークリッド変換と表示

transform.EuclideanTransform(matrix)をtransform.warpに適用することで、画像中心を原点として回転させた結果を得ることができます。

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

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

まとめ

scikit-imageのEuclideanTransformを使用することで、画像の中心を原点として回転処理を実現できることを解説しました。回転の中心点を画像中心に設定するための座標変換と、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
numpy.linalg.inv — NumPy v2.3 Manual

コメント