[scikit-image] 63. 大津の方法による画像の3値化(skimage.filters threshold_multiotsu)

python

はじめに

scikit-imageライブラリのthreshold_multotsu関数を使用して、画像を3値化する方法について解説します。大津の方法(Otsu’s method)は、画像のヒストグラムから最適なしきい値を自動的に決定するアルゴリズムで、この拡張版であるMulti-Otsu法を用いることで、画像を複数の領域に分割できます。特に3値化では、画像を背景・中間領域・前景の3つに分類することが可能です。

コード

解説

モジュールのインポート

画像の読み込み

画像には、パロディア属の小町を用います。

大津の方法による多値化

大津の方法による多値化は

threshold_multiotsuで実行できます。この関数は画像を3つの領域に分類するためのしきい値を返します。

しきい値を利用して3値化像を作成

np.digitizeで画像データとしきい値を設定することで、しきい値で区切った多値化像が得られます。ここでは3つのしきい値が設定されているため、0、1、2の値で構成された画像が生成されます。

結果の表示

for thresh in thresholds: ax[1].axvline(thresh, color=’m’)により、大津の方法で算出されたしきい値をヒストグラム上にマゼンタ色の線で表示しています。

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

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

まとめ

skimage.filters.threshold_multotsuを用いることで、画像を3つの領域に分割する3値化処理が実現できます。この手法は、複雑な画像セグメンテーションが必要な場合に特に有効で、単純な2値化では捉えられない中間的な領域を抽出できる利点があります。クラス数を指定することで、さらに多くの領域に分割することも可能です。

参考

Multi-Otsu Thresholding — skimage v0.16.1 docs
Module: filters — skimage v0.16.1 docs
numpy.digitize — NumPy v2.3 Manual

コメント