はじめに
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で適用すると返り値として拡大縮小した画像が得られる。
参考
Types of homographies — skimage 0.25.0rc2.dev0 documentation
skimage.transform — skimage 0.25.0rc2.dev0 documentation
skimage.transform — skimage 0.25.0rc2.dev0 documentation
コメント