【画像処理】適応的二値化処理の原理・特徴・計算式

画像処理における適応的二値化処理の原理や計算式についてまとめました。

スポンサーリンク

適応的二値化処理

本ページの内容は以下動画で解説しています。

単純な二値化では、人が感覚的に閾値を決定する必要があります。その問題を改善するために登場したのが「適応2値化処理」です。
適応的二値化処理では、閾値を固定せず、注目画素と周囲にある画素の画素値の平均値を閾値とします。これにより、画素ごとに異なる閾値を設定できます。
以下のような全体的に緩やかに明るさが変化しているようなるような画像(不鮮明な写真や影が写り込んでいる写真など)に対して二値化処理するのに向いています。

■入力画像(左)と適応的二値化処理後の出力画像(右)

スポンサーリンク

閾値の計算

入力画像の画素値をI(x,y)とすると、その閾値t(x,y)は以下の式で求まります。

(1)   \begin{eqnarray*} t(x,y)=\frac{1}{N}\sum_{x, y} \sum_{\subset D} I(x,y) \end{eqnarray*}

スポンサーリンク

計算例

次のような入力画像Iが与えられた場合、I(1,1)=120の閾値t(1,1)を求めます。

(2)   \begin{eqnarray*} I= \left[ \begin{array}{ccccc} 100 & 200 & 150 \\ 110 & 120 & 120 \\ 190 & 230 & 200 \\ \end{array} \right] \end{eqnarray*}

※8近傍(注目画素+周囲8画素の画素値)の平均値で考えると

(3)   \begin{eqnarray*} t(1, 1)=\frac{1}{9}(100+200+150+110+120+120+190+230+200)=158 \end{eqnarray*}

となります。
I(1, 1)=120で、閾値t(1,1)未満なので、二値化処理で画素値が0となります。

スポンサーリンク

実装例

適応的二値化処理をプログラムで実装した例を下記事で解説しています。

【Python/OpenCV】cv2.adaptiveThreshold(適応的閾値処理)で二値化画像に変換する方法
Python版OpenCV(cv2.adaptiveThreshold)で適応的二値化処理を実装する方法をソースコード付きで解説します。
【画像処理入門】アルゴリズム&プログラミング
この記事では、画像処理における基本的なアルゴリズムとその実装例(プログラム)についてまとめました。
画像処理
スポンサーリンク

コメント