[scikit-image] 24. 画像の非線形変換(渦巻き模様:transform.swirl)

python

はじめに

ここでは、skimage.transformswirlを用いた画像の非線形変換(渦巻き)について説明する。

コード

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

解説

モジュールのインポート

画像データの読み込み

ギムノカリキウム属 新天地(Gymnocalycium saglionis)の画像をplt.imread()で読み込む。グレースケール画像である必要はない。

スワール変換

まず、出力画像の座標(x,y)について考える。 中心の座標を(x0,y0)とすると、(x,y)は極座標で以下のようになる。

\begin{align}\begin{aligned}\theta = \arctan(y/x)\\\rho = \sqrt{(x – x_0)^2 + (y – y_0)^2},\end{aligned}\end{align}

これを以下の式で変換する。

\begin{align}\begin{aligned}r = \ln(2) \, \mathtt{radius} / 5\\\phi = \mathtt{rotation}\\s = \mathtt{strength}\\\theta’ = \phi + s \, e^{-\rho / r + \theta}\end{aligned}\end{align}

ここで、 strengthはスワール量のパラメータで、 radiusはスワールの範囲をピクセル単位で示し、 rotationは回転角度を意味する。

結果の表示

図をImageGridにより表示する。ImageGridは下記で解説した。

[matplotlibの使い方] 19. mpl_toolkits.axes_grid1 の使い方(画像の表示)
axes_grid1のImageGridを用いて複数の画像を表示する方法

左のgrid[0]にオリジナル画像、右のgrid[1]に非線形渦巻き処理した画像を表示している。スワール変換した画像は、中心の生長点の辺りで渦を巻いている状態となっている。

参考

Swirl — skimage v0.16.1 docs
新天地、新天地錦:実生4年目 - アレオーレのブログ
四年前の四月に種を蒔いたギムノカリキウム属の新天地錦、オークション出品者によれば...

コメント