[scikit-image] 48. rag_boundary(skimage.future graph)で領域境界グラフ(RAG)を構築

python

はじめに

skimage.future graphのrag_boundaryにより、エッジ画像から領域境界RAGを構築する例について説明する。

コード

コードをダウンロード

解説

モジュールのインポート

画像データの読み込み

コリファンタ属の象牙丸を用いる。rgb2grayによりグレースケール画像とする。

k平均法によるセグメント化

segmentation.slic()により、k平均法によるセグメント化を行う。
imgはセグメント化する画像で、
compactnessは色の近接性と空間の近接性のバランスのパラメータであり、値を大きくするとスペースの近接度が高くなりセグメント化された形状が正方形に近い形となる。値の調整は、ログスケール(0.01から100)で行うことが推奨されている。
n_segmentsは概算のセグメント数となり、多くするほどより細かくセグメント化される。

エッジ画像の生成

グレースケール画像からエッジ画像を生成する。sobelフィルタについては下記で説明した。

[scikit-image] 16. エッジ演算子(filters.roberts, sobel)
skimage.filters の roberts, sobelを用いた画像のエッジ検出

edges_rgb = color.gray2rgb(edges)により1次元のグレースケール画像を3次元のRGB画像とする。

領域境界にもとづくRAG

graph.rag_boundary(labels, edges)で、セグメント化された画像とエッジ画像から、領域隣接グラフ(RAG)を構築する。2つの隣接する領域間の境界に沿ったピクセルの重みは、edge_mapの対応する領域の平均値となる。

領域隣接グラフを表示

ラベル画像とRAGから、指定されたカラーマップでRAGのノード、エッジを表示する。
edges_rgbのように入力画像はRGB画像にする必要がある。edge_cmapでエッジに用いるカラーマップ、edge_widthで線の太さを調整できる。

参考

Region Boundary based RAGs — skimage v0.15.0 docs
Module: segmentation — skimage v0.15.0 docs
Module: future.graph — skimage v0.15.0 docs
Module: future.graph — skimage v0.15.0 docs
Module: filters — skimage v0.15.0 docs
にほんブログ村 IT技術ブログ Pythonへ
にほんブログ村 IT技術ブログへ

コメント