はじめに
skimage.feature graphのmerge_hierarchicalを用いて、隣接領域グラフ(RAG)を構築し、似ている色領域を結合する例について説明する。
コード
解説
モジュールのインポート
画像の読み込み
画像には、マミラリア属の雷電丸を用いる。画像のサイズは512 x 512となっている。
k平均法によるセグメント化
segmentation.slic()
により、k-meansクラスタリングを上記のRGB画像に適用して、セグメント化を行う。compactness
とn_segments
を変化させることでセグメント化の調整ができる。詳細については、下記記事で示した。
[matplotlib animation] 53. skimage.segmentation.slic()のcompactnessおよびn_segments変化アニメーション
カラー画像をk平均法でクラスタリングするskimage segmentation slic を使ってセグメント化する際、パラメータとしてcompactnessおよびn_segmentsを設定する必要がある。ここでは、これらのパラメータがセグメント化の結果に及ぼす影響について調査した。
セグメント化画像に対する色と境界の設定
label2rgb
でセグメント化された領域の色を設定する。kind='avg'
とすることで各セグメント領域の平均の色を設定できる。
mark_boundaries
でcolor
を(0,0,0)
としているので、境界の色が黒色になる。
領域隣接グラフ(RAG)の計算
k平均法でセグメント化したlabels
を用いて、graph.rag_mean_color
により、平均色による領域隣接グラフを計算する。
RAGを用いた領域の結合
graph.merge_hierarchical
により、領域の結合を行う。threshで指定した値を超えるまで領域の結合が行われる。
merge_func
は結合する領域の平均色を求める関数で以下のようになる。
weight_func
は、平均色を再計算してノードの差を求める関数で以下のようになる。
src, dstはそれぞれsourceとdestinationの略である。
threshを変化させた場合
上記と同じ処理をthresh
を50として行う。
結果の表示
threshを高く設定した画像はより多くの領域が結合していることがわかる。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)参考
Region adjacency graph (RAG) Merging — skimage 0.25.0rc2.dev0 documentation
skimage.segmentation — skimage 0.25.0rc2.dev0 documentation
skimage.color — skimage 0.25.0rc2.dev0 documentation
skimage.segmentation — skimage 0.25.0rc2.dev0 documentation
Page not found · GitHub Pages
Page not found · GitHub Pages
コメント