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

matplotlib Animation

はじめに

この記事では、scikit-imageライブラリのflood_fillアルゴリズムのtoleranceパラメータが変化した際の効果をmatplotlibアニメーションで視覚化する方法について解説します。flood_fillは画像内の特定領域を塗りつぶすアルゴリズムで、toleranceは色の許容範囲を制御します。ここでは、matplotlibのFuncAnimationを使用してtoleranceの変化に伴う領域の拡大・縮小をアニメーションとして表示する方法を説明します。

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

[scikit-image] 83. flood_fillによる特定の領域の塗りつぶし(skimage.segmentation.flood_fill)
scikit-imageライブラリのflood_fill関数を使用して画像の特定領域を塗りつぶす方法を解説します。基本的な使い方、パラメータの設定、実践的な応用例を含め、効果的な画像セグメンテーション技術を学ぶことができます。
[scikit-image] 84. flood_fillのtoleranceにより塗りつぶす領域を変化させる(skimage.segmentation.flood_fill)
scikit-imageのflood_fill関数のtoleranceパラメータが塗りつぶし領域に与える影響を解説します。値を変えることで色の近さの許容範囲が調整でき、画像セグメンテーションの精度を向上させることができます。

コード

解説

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

バージョン

画像の読み込み

花が咲いたサボテン 満月の画像を用います。

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

画像を表示

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

図中左上にあるマゼンタの丸をシードポイントとしてflood_fillを実行する。

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

画像処理にflood_fillを使用し、toleranceの値を変化させながらアニメーションを作成します。ax.cla()で現在表示されている画像をクリアし、ax.imshowで処理後の画像を表示することでアニメーション効果を生み出します。各フレームではax.set_title(‘Tolerance {0}’.format(str(2 + i)))を使って、現在のtoleranceの値を画面上に表示します。

アニメーションの表示

FuncAnimationを使用してアニメーションを表示します。フレーム数を100、フレーム間隔を100msに設定して、合計10秒のアニメーションを作成します。

HTML(ani.to_html5_video())を実行することで、Jupyter NotebookやJupyter Lab上に直接アニメーションを表示できます。

また、ani.save(‘ファイル名’, writer=”ffmpeg”, dpi=100)を使用すれば、アニメーションをMP4形式で保存できます。

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

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

まとめ

skimage.segmentation.flood_fillのtoleranceパラメータの値によって、塗りつぶし範囲が大きく変わることがアニメーションを通して視覚的に理解できます。matplotlibのFuncAnimationを活用することで、パラメータの効果をインタラクティブに観察できる効果的な学習ツールとなっています。

参考

Flood Fill — skimage 0.26.0rc0.dev0 documentation

コメント