[scikit-image] 96. 大津の適応的しきい値処理による画像の2値化(skimage.filters rank.otsu)

matplotlib

はじめに

この記事では、scikit-imageのrank.otsu関数を使用した大津の適応的しきい値処理による画像の2値化について解説します。この方法は局所的な領域ごとに最適なしきい値を自動的に計算し、照明条件が不均一な画像でも効果的に2値化できる手法です。

解説

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

バージョン

画像の読み込み

下記のサイトから画像を取得し、まずcolor.rgba2rgbでPNG画像をRGB形式に変換します。次にcolor.rgb2grayでグレースケール化し、最後にimg_as_ubyteでubyte形式へ変換します。

マリトッツォのキャラクター
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

計算範囲の設定

適応型閾値処理の適用範囲を設定します。ここでは半径12のdiskを使用し、selemのサイズは(25, 25)となります。

適応的大津の方法と大域的大津の方法によるしきい値の計算

適応型閾値処理は、rank.otsu(img, selem)で実行できます。各画素ごとにしきい値が計算されるため、しきい値像が出力されます。大域的な大津の方法によるしきい値は、threshold_otsuで求められます。

結果の表示

subplotsを使って、オリジナル画像、しきい値画像、適応的大津法による2値化画像、大域的大津法による2値化画像を表示すると、以下のようになります。

計算範囲を変化させた時の変化

計算範囲のradiusを10から60まで変化させた場合、適応的大津法による2値化画像は以下のようになります。

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

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

まとめ

scikit-imageのrank.otsu関数を用いた大津の適応的しきい値処理により、照明条件が不均一な画像でも効果的に2値化処理が行えることを学びました。局所的な領域ごとに最適なしきい値を自動的に計算するこの手法は、テキスト抽出や物体検出など様々な画像処理タスクで有用です。

参考

Local Otsu Threshold — skimage v0.12.2 docs
skimage.color — skimage 0.26.0rc0.dev0 documentation
マリトッツォのキャラクター
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

コメント