はじめに
画像のセグメンテーション(領域分割)は、コンピュータビジョンの重要なタスクです。scikit-imageライブラリには、様々なセグメンテーション手法が実装されています。本記事では、k-meansクラスタリングを用いた初期セグメンテーションの後、Region Adjacency Graph(RAG)を構築し、cut_threshold関数を適用して領域のマージを行う方法について解説します。これにより、より意味のある領域分割が可能になります。
コード

解説
モジュールのインポート
画像データの読み込み
コリファンタ属の象牙丸を用います。

k平均法によるセグメント化
segmentation.slic()関数を使用すると、k平均法による画像のセグメント化が可能です。
この関数では、imgパラメータにセグメント化したい画像を指定します。
compactnessパラメータは色の近接性と空間の近接性のバランスを制御します。値を大きくすると空間的な近接性が優先され、セグメント化された領域がより正方形に近い形状になります。この値はログスケール(0.01から100)での調整が推奨されています。
n_segmentsパラメータでは、生成するセグメントの概算数を指定します。この値を大きくするほど、より細かいセグメント化が行われます。
セグメント化された画像の色の設定
label2rgbは画像のラベル化された部分に色を設定する機能です。kind=’avg’を指定すると、元画像の各ラベル領域の平均色が適用されます。
領域隣接グラフを計算
rag_mean_color()関数は、画像とそのセグメント化された情報から領域隣接グラフ(RAG)を構築します。色の近接度を調整するには、オプションパラメータのsigmaを使用できます。
領域隣接グラフでセグメンテーション
graph.cut_threshold(labels1, g, 29)関数は、領域隣接グラフの結果をラベルに適用して新しいラベルを生成します。この関数は、指定したしきい値(29)より小さい重みで接続されている領域を結合し、その結果を新しいラベルとして出力します。
画像の表示
タイトルには各画像のラベル数(領域の数)を表示しました。
しきい値を変化させたときの画像の変化
まとめ
本記事では、scikit-imageライブラリを使用して画像セグメンテーションを行い、さらにRegion Adjacency Graph(RAG)を適用して領域のマージを行う方法を解説しました。k-meansクラスタリングによる初期セグメンテーションに加え、RAGとcut_threshold関数を組み合わせることで、より意味のある領域分割が可能になります。
この手法は画像処理や機械学習のプロジェクトにおいて、前処理や特徴抽出のステップとして活用できます。特に、複雑な画像の分析やオブジェクト認識のタスクにおいて有用です。
コメント