[scikit-image] 89. transform.AffineTransformで画像のアフィン変換

matplotlib

はじめに

skimage.transform.AffineTransformによるアフィン変換を使用して、画像を平行移動、回転、せん断、拡大縮小する方法について解説する。

下準備

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

バージョン

画像の読み込み

画像は下記サイトから取得した。

猫の顔のイラスト
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

読み込んだ画像とそのサイズは以下の通り。

平行移動

transform.AffineTransformのtranslationにタプルで(xの移動量、yの移動量)を設定し、アフィン変換行列を作成する。
作成した行列をtransform.warpで適用する。imgに変換したい画像を指定し, tform[i].inverseで画像に行列式を適用する。返り値として変換された画像が得られる。

せん断変形

transform.AffineTransformのshearにせん断角度を設定する。translationは画像が枠外にはみ出すのではみ出さないように移動している。
作成した変換行列をtransform.warpで適用すると返り値としてせん断変形した画像が得られる。

回転

transform.AffineTransformのrotationに回転角度を設定する。
作成した変換行列をtransform.warpで適用すると返り値として回転した画像が得られる。

拡大縮小

transform.AffineTransformのscaleに拡大倍率を設定する。スカラー値の場合はx,y方向が同じ倍率で変形し、(1.2,0.6)のように指定すると横に伸びた画像、(0.6,1.2)のようにすると縦に伸びた画像となる。
作成した変換行列をtransform.warpで適用すると返り値として拡大縮小した画像が得られる。

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

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

参考

Types of homographies — skimage v0.19.0.dev0 docs
Module: transform — skimage v0.19.0.dev0 docs
Module: transform — skimage v0.19.0.dev0 docs

コメント