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


コード
解説
モジュールのインポートなど
バージョン
画像の読み込み
花が咲いたサボテン 満月の画像を用います。

この画像を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を活用することで、パラメータの効果をインタラクティブに観察できる効果的な学習ツールとなっています。
コメント