はじめに
skimage.segmentationのrandom_walkerによって、ランダムウォーカーアルゴリズムを使い画像をセグメント化した例について説明する。
コード
解説
モジュールのインポート
バージョン
画像の読み込みとグレースケール化
アストロフィツム属・兜丸の画像を用いる。
rgb2grayでグレースケール画像とする。
ヒストグラムは以下のようになる。
画像の3値化
ランダムウォーカーアルゴリズムは複数のラベル付けされた領域がそれぞれうまい具合に拡散していってセグメント化が行われる。その原理については下記が詳しい。
skimage.segmentation — skimage 0.24.0 documentation
ここでは、要素の値が0.6未満の領域を1とし、値が0.9より大きいものを2、それ以外を0としてラベル像を作成した。
random walker セグメンテーションの適用
dataには画像、 markersにはlabel像を指定する。prob_tolは結果の確率が区間[0, 1]に収まるようにするための許容範囲となる。ここではエラーが出たので0.1としている。その他指定できるパラメータとして、betaがある。betaはランダムウォーカーの拡散挙動に対する係数であり、値が大きいほど、拡散が制限される、デフォルト値は130。
modeは計算方式のことで‘cg’, ‘cg_j’, ‘cg_mg’, ‘bf’がある。実行速度は下記のようにcg_j > bf > cgとなる。
cg_mgモードを使うには pyamg module (http://pyamg.github.io/)をインストールする必要がある。
画像の表示
左に元画像、中央にラベル像、右にランダムウォーカーセグメンテーションの結果を示すと以下のようになる。
3値化を0.6と0.95で行なった場合
ラベル像の3値化を0.6と0.95で行なった場合の結果を示すと以下のようになる。
3値化を0.5と0.9で行なった場合
ラベル像の3値化を0.5と0.9で行なった場合の結果を示すと以下のようになる。
コードをダウンロード(.pyファイル)
コードをダウンロード(.ipynbファイル)
参考
Random walker segmentation — skimage 0.24.0 documentation
skimage.segmentation — skimage 0.24.0 documentation
コメント