はじめに
scikit-imageのtransformモジュールにある「swirl」関数を使用すると、画像に渦巻き効果を適用することができます。この非線形変換により、画像が中心点を軸に回転したような渦巻き模様に変換されます。この記事では、swirlの基本的な使い方からパラメータの調整方法まで解説していきます。
コード

解説
モジュールのインポート
画像データの読み込み
ギムノカリキウム属 新天地(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は下記で解説しました。

左のgrid[0]にオリジナル画像、右のgrid[1]に非線形渦巻き処理した画像を表示しています。スワール変換した画像は、中心の生長点の辺りで渦を巻いている状態となっています。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)まとめ
scikit-imageのtransform.swirl関数を使用することで、画像に渦巻き効果を簡単に適用できることがわかりました。strength、radius、rotationなどのパラメータを調整することで、様々な渦巻き効果を実現できます。この非線形変換は、アート作品の作成や画像処理の学習教材として活用できるでしょう。
コメント