はじめに
matplotlibのFuncAnimationでモルフォロジー処理の膨張(dilation)を複数回実行したときの2値化とラベリングのアニメーションを表示する。
コード
解説
モジュールのインポートなど
画像データの生成
画像データの作成は下記記事と同様に行った。
画像を表示すると下記のようになる。
バイナリ画像の生成
threshold_otsuで大津の方法により2値化のためのしきい値を得る。
そのしきい値を用いて画像imをバイナリ画像へと変換する。
大津の方法による2値化については下記記事で説明した。
図示すると下記のようになる。
ヒストグラムとしきい値の表示
画像のヒストグラムとしきい値を示すと上記のようになる。
しきい値はvlinesで表示した。
バイナリ画像のラベリング
labelでreturn_numをTrueにすると、ラベル画像と総ラベル数が返り値として得られるので、label_num = label_image[1]で総ラベル数を取得する。
label_imageの0の部分をnp.nanにして表示すると上記のようになる。タイトルに総ラベル数を表示した。
バイナリ画像の膨張処理
binary_dilationで膨張処理ができる。上記のように黄色い部分が一回り大きくなった画像が得られる。
アニメーションの設定
図の表示など
subplotsで2×2の図を作成して左上にオリジナル画像、右上にdilation処理で変化するラベル数の図、左下にバイナリ画像、右下にラベル画像を表示する。
アニメーション関数の設定
最初にバイナリ画像をいれるリスト(imgs_b)とラベル画像をいれるリストを(imgs_l)と変化するラベル数の図をいれるリスト(pllott)を作成しておく。
imgs_b.pop().remove()などは、リスト内にある画像を消去することを意味する。つまり画像を消して表示するを繰り返すことでアニメーションとしている。
imgs_b.append(img)でしきい値を変化させて作成したバイナリ画像をリストに入れる。
ラベル画像も同様に、作成した後にimgs_l.append(img)でリストに入れる。
ラベル数の図も同様に処理する。
アニメーションの表示
FuncAnimationで20framesの表示間隔500msのアニメーションを表示する。HTML(ani.to_html5_video())
により、jupyter notebook またはjupyter lab上にアニメーションを表示できる。
ani.save(‘ファイル名’, writer=”ffmpeg”,dpi=100)でアニメーションをMP4形式で保存することができる。
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)
コメント