[matplotlib animation] 106. skimage.segmentation.expand_labelsによるラベル領域の非オーバーラップ展開

matplotlib

はじめに

skimageのlabelで作成したlabel画像のラベルをexpand_labelsによって重なり合うことなく拡大させた様子をmatplotlibのFuncAnimationのアニメーションで表示する。

コード&解説

モジュールのインポート

バージョン

画像データの作成

512 x 512の2Dデータのランダムな位置に点を作成して、ガウシアンフィルターをかけた画像を用いる。threshold_otsuで大津の2値化を行い、しきい値を求めて2値化画像を作成する。2値化像の端に接しているものはclear_borderで除去しておく。

画像を表示

生成した画像は以下のようになる。

ラベリング

skimageのlabelでラベル付けを行う。ラベル像の背景は0となる。ラベル像を表示すると下のようになる。

expand_labelsにラベルの拡大

expand_labelsによってラベルを拡大する。例えば、ラベルを10ピクセル拡大した画像は下のようになる。ラベル同士が重なり合わずに拡大していることがわかる。

ラベルを背景を埋めるまで拡大するアニメーション

ラベルを順次拡大していった画像の取得

expand_labelsのdistanceを変えて画像を生成し、からのリストに加えていき、アニメーションで表示するための画像のリストを作成する。

背景が無くなったかどうかの確認のため、len(np.where(expanded==0)[0])によって画像中の0の数を数える。

背景がなくなり、初めて0がでてくるindexは104だということがわかった。

アニメーションの表示

アニメーション関数の中で、img.set_data(im_list[i])とすることで画像のアニメーションを作成する。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

skimage.measure — skimage 0.23.2rc2.dev0 documentation
Expand segmentation labels without overlap — skimage 0.23.0rc1.dev0 documentation

コメント