[scikit-image] 84. flood_fillのtoleranceにより塗りつぶす領域を変化させる(skimage.segmentation.flood_fill)

python

はじめに

scikit-imageのsegmentationモジュールに含まれるflood_fill関数は、画像内の特定の領域を塗りつぶすための機能を提供します。この関数の重要なパラメータの一つがtoleranceであり、これにより塗りつぶしの範囲をコントロールすることができます。本記事では、toleranceの値を変化させた場合に、塗りつぶされる領域がどのように変わるかを具体的に解説します。

コード

解説

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

バージョン

画像の読み込み

発芽後1年10ヶ月が経過した海王丸の画像を使用します。

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

特定の領域を塗りつぶし

座標(y,x)=(100,50)に属する領域のすべての画素を255(白)に設定します。この例ではtoleranceを1としています。toleranceは許容値の設定であり、シードポイントの画素値からプラスマイナスの許容範囲内にある値を持つ隣接画素が塗りつぶし対象となります。

結果の表示

左にオリジナル画像、右にflood_fill処理した画像を表示しています。右図には、flood_fillで指定したseed_pointの座標をマゼンタ色の丸で示しています。

toleranceを変化させたときの塗りつぶし領域の変化

toleranceを5から10刻みで変化させると、塗りつぶされる領域は以下のように変化します。toleranceの値が大きくなるほど、より広い範囲が塗りつぶされることがわかります。

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

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

まとめ

本記事では、scikit-imageのflood_fill関数におけるtoleranceパラメータの影響について解説しました。toleranceの値を大きくすると、より広い範囲の画素値を持つ領域が塗りつぶされ、小さくすると厳密に近い色合いの領域のみが塗りつぶされることがわかりました。この特性を理解することで、画像処理タスクにおいて望ましい領域だけを正確に塗りつぶすことが可能になります。

参考

Flood Fill — skimage 0.26.0rc0.dev0 documentation
skimage.segmentation — skimage 0.26.0rc0.dev0 documentation
skimage.util — skimage 0.26.0rc0.dev0 documentation
skimage.color — skimage 0.26.0rc0.dev0 documentation

コメント