[matplotlib animation] 79. flood_fillのtolerance変化アニメーション(skimage.segmentation.flood_fill)

matplotlib Animation

はじめに

skimage flood_fillのパラメータであるtoleranceを変化させたときの画像の変化をアニメーション(matplotlib, FuncAnimation)で表示する。

なお、skimageのflood_fillについては下記で解説した。

[scikit-image] 83. flood_fillによる特定の領域の塗りつぶし(skimage.segmentation.flood_fill)
skimage.segmentationのflood_fillで、特定の領域を指定の色で塗りつぶす方法について説明する。
[scikit-image] 84. flood_fillのtoleranceにより塗りつぶす領域を変化させる(skimage.segmentation.flood_fill)
skimage.segmentationのflood_fillでtoleranceを変化させたときに、塗りつぶされる領域がどのように変化するかを解説する。

コード

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

解説

モジュールのインポートなど

バージョン

画像の読み込み

花が咲いた満月の画像を用いる。

この画像をplt.imreadで読み込み、rgb2grayでグレースケール化して、img_as_ubyteで0〜255のデータに変換した。

画像を表示

画像を表示すると以下のようになる。

図中左上にあるマゼンタの丸をseed pointとしてflood_fillを行う。

アニメーション関数の設定

flood_fillでtoleranceを変化させて画像を処理し、ax.cla()ですでに表示されている画像を消し、ax.imshowで処理した画像を表示することでアニメーションとする。
そのときそのときのtoleranceの値はax.set_title(‘Tolerance {0}’.format(str(2 + i)))で随時表示する。

アニメーションの表示

FuncAnimationでアニメーションを表示する。frame数を100、intervalを100msとし、10秒のアニメーションとする。
HTML(ani.to_html5_video())により、jupyter notebook またはjupyter lab上にアニメーションを表示できる。

ani.save(‘ファイル名’, writer=”ffmpeg”,dpi=100)でアニメーションをMP4形式で保存することができる。

参考

Flood Fill — skimage v0.18.0.dev0 docs

コメント