[scikit-image] 97. 適応的しきい値処理による画像の2値化(skimage.filters threshold_local)

matplotlib

はじめに

scikit-imageライブラリのthreshold_local関数を使用した適応的しきい値処理について解説します。この手法は、画像内の各ピクセルに対して周辺の局所的な領域に基づいたしきい値を計算することで、照明条件が不均一な画像でも効果的に2値化処理を行うことができます。基本的な使用方法、重要なパラメータ、実践的なヒント、応用例などを紹介します。

解説

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

バージョン

画像の読み込み

以下のサイトの画像を使用します。まず、color.rgba2rgb関数でPNG形式からRGB画像に変換し、次にcolor.rgb2gray関数でグレースケール形式に変換します。最後に、img_as_ubyte関数でubyte形式に変換します。

袋に入ったコーラのイラスト
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

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

block_sizeパラメータで局所的な計算範囲を設定し、threshold_local関数で適応的しきい値処理を実行します。この処理では各画素ごとに最適なしきい値が計算されるため、しきい値像として出力できます。なお、画像全体に対する大域的しきい値は、大津の方法を実装したthreshold_otsu関数で取得できます。

結果の表示

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

methodを変化させた時の2値化像

methodは{‘generic’, ‘gaussian’, ‘mean’, ‘median’}から選択でき、’generic’を選択した場合はparamパラメータに任意の式を設定できます。

block_sizeを変化させた時の2値化像

block_sizeを変化させた時の2値化像は下のようになります。

sigmaを変化させた時の2値化像

method=”gaussian”を使用する場合、parameterでsigmaの値を設定できます。画像表示では上部に2値化像、下部にしきい値像が表示されます。

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

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

まとめ

scikit-imageのthreshold_local関数を使用した適応的しきい値処理は、照明条件が不均一な画像に対して効果的な2値化を実現する強力なツールです。適切なパラメータ設定と前処理を組み合わせることで、様々な画像処理タスクにおいて高品質な結果を得ることができます。

参考

skimage.filters — skimage 0.26.0rc0.dev0 documentation
skimage.color — skimage 0.26.0rc0.dev0 documentation
袋に入ったコーラのイラスト
いらすとやは季節のイベント・動物・子供などのかわいいイラストが沢山見つかるフリー素材サイトです。

コメント