[scikit-image] 104. 写真のイラスト風変換(segmentation.slic, graph. rag_mean_color, filters. unsharp_mask)

matplotlib

はじめに

skimage.segmentation.slic, graph. rag_mean_color, filters. unsharp_maskを使って、写真画像をイラスト風に変換する例について説明する。

解説

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

バージョン

画像の読み込み

サボテン ノトカクタス すみれ丸の写真を用いる。なお、このサボテンは関西では「シャクヤク丸」、関東では「スミレ丸」と呼び名が違う。

segmentation.slicによるセグメント化

RGB画像でk-meansクラスタリングを使用して画像をセグメント化する。n_segmentsでセグメント化するラベルのおおよその数を設定できる。ここではその数を[200,400,800,1600]としてセグメント化した。

n_segmentsを変化させた場合の結果

結果を表示すると以下のようになる。次のステップには右下のn_segments =1600の画像を用いる。

グラフカットによる領域の結合

各領域の平均色を用いて領域隣接グラフを作成し、似ている色の領域を結合する。どのくらいの近似度かを設定するパラメータとしてthreshを用いる。ここでは、threshを[.02,.04,.06,.08]として領域を結合した。print(labels2.max())でラベル画像の最大値を表示することでthreshの増加で領域数が低下していることがわかる。

threshを変化させた場合の結果

unsharp_maskによる画像の鮮明化

処理の増幅度を調整するパラメータであるamountを変化させてunsharp_mask処理を行う。unsharp_maskについては下記記事で解説した。

[scikit-image] 36. アンシャープマスク処理による画像の鮮明化(skimage.filters unsharp_mask)
ここでは、skimage filters unsharp_maskにより画像を鮮明化する例について説明する。

amountを変化させた場合の結果

イラスト化処理前後を比較

イラスト化処理の関数

結果に影響するパラメータとしてn_segments,thresh,amountを変数として関数化した。

画像に関数を適用

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

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

参考

Module: segmentation — skimage v0.20.0.dev0 docs
Module: future.graph — skimage v0.20.0.dev0 docs
Module: future.graph — skimage v0.20.0.dev0 docs
Module: filters — skimage v0.18.0 docs

コメント