[scikit-image] 46. Region Adjacency Graph(RAG)を構築した後にNormalized Cut(skimage.future graph)

python

はじめに

scikit-imageの機能を使って画像のセグメンテーションを行うプロセスを解説します。特に、k-meansクラスタリングによる初期セグメンテーションの後、Region Adjacency Graph(RAG)を構築し、Normalized Cutアルゴリズムを適用することで、より洗練されたセグメンテーション結果を得る方法に焦点を当てています。

コード

コードをダウンロード

解説

モジュールのインポート

画像データの読み込み

コリファンタ属の象牙丸を用います。

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

segmentation.slic()関数を使用すると、k平均法による画像のセグメント化が可能です。この関数の主なパラメータは以下の通りです。

「image」はセグメント化する対象の画像を指定します。

「compactness」は色の近接性と空間の近接性のバランスを調整するパラメータです。この値を大きくすると空間的な近接性が重視され、セグメント化された領域がより正方形に近い形状になります。推奨される調整範囲はログスケールで0.01から100です。

「n_segments」はセグメントの概算数を指定するパラメータで、値を大きくするとより細かくセグメント化されます。

セグメント化された画像の色の設定

label2rgbは画像のラベル化された部分に色を設定する機能です。kind=’avg’を指定すると、元画像の各ラベル領域の平均色が使用されます。

領域隣接グラフを計算

画像とそのセグメント化された情報から領域隣接グラフ(RAG)を構築します。色の近接度を調整するには、オプションパラメータのsigmaを使用します。

領域隣接グラフでセグメンテーション

graph.cut_normalized(labels1, g)関数を使用して、領域隣接グラフの結果をラベルに適用し、新しいラベルを生成します。

画像の表示

まとめ

本記事では、scikit-imageのsegmentation、color、future.graphモジュールを活用して、k-meansクラスタリングから始まり、Region Adjacency Graph(RAG)の構築、そしてNormalized Cutアルゴリズムの適用までの画像セグメンテーションの一連のプロセスを解説しました。この手法により、単純なk-meansクラスタリングよりも意味のある領域分割が可能になることを示しました。

参考

Normalized Cut — skimage 0.25.2 documentation
skimage.segmentation — skimage 0.25.2 documentation
skimage.color — skimage 0.25.2 documentation
https://scikit-image.org/docs/stable/api/skimage.future.graph.html#skimage.future.graph.rag_mean_color
https://scikit-image.org/docs/stable/api/skimage.future.graph.html#skimage.future.graph.cut_normalized

コメント