はじめに
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.25.0rc2.dev0 documentation
Expand segmentation labels without overlap — skimage 0.25.0rc2.dev0 documentation
コメント