[scikit-image] 28. 区分的アフィン変換(skimage.transform.PiecewiseAffineTransformとwarp)

python

はじめに

ここではskimage.transformの PiecewiseAffineTransformwarp による画像の区分的アフィン変換について説明する。

コード

解説

モジュールのインポート

画像データの読み込み、形状の取得

画像を読み込み、形状を取得する。

局所的アフィン変換するための準備

2次元で等間隔に並んだ配列の生成

np.linspace()で作成した配列をmeshgridにより2次元に展開する。展開したそれぞれの配列を1次元化し、dstackにより連結した配列を作成する。dstackした配列は、(1, 200, 2)の形状であるため、[0]とすることで(200,2)の形状としている。

配列にsin波を印加する

dst_rowsは、src_rows.flatのデータをsin波の形状にし、横に引き伸ばした配列となる。
dst_colsはsrc_cols.flatと同じデータとなる。

局所的アフィン変換の適用

tformをPiecewiseAffineTransform()とし、tform.estimate(src, dst)のsrcが変換前の配列、dstは変換したい配列となる。変換可能な場合、tform.estimate(src, dst)はTrueを返す。

画像への局所的アフィン変換の適用

warp(image, tform, output_shape=(out_rows, out_cols))により、imageにtformのアフィン変換を適用する。shapeで出力する画像のサイズを設定する。

画像の表示

tform.inverse(src)により逆変換が適用されるため、dstの形状のデータが画像に沿って表示される。

参考

Piecewise Affine Transformation — skimage 0.23.1 documentation

コメント