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

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

適応的二値化処理

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

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

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

閾値の計算

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

$$ t(x,y)=\frac{1}{N}\sum_{x, y} \sum_{\subset D} I(x,y) $$

計算例

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

$$ I= \begin{bmatrix} 100 & 200 & 150 \\ 110 & 120 & 120 \\ 190 & 230 & 200 \end{bmatrix} $$

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

$$ t(1, 1)=\frac{1}{9}(100+200+150+110+120+120+190+230+200)=158 $$

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

実装例

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

PythonとOpenCVで画像処理プログラミング超入門
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
【画像処理超入門】アルゴリズムの仕組みと実装方法を簡単に解説
画像処理超アルゴリズムの仕組みとプログラミングによる実装方法を簡単に解説します。
記事の監修者
西住技研

在学中はシステム制御理論や画像処理、機械学習を専攻分野として研究していました。就職後は、プログラミング(Python)を活用したデータ分析や作業自動化に取り組み、現在に至ります。そこで得たノウハウをブログで発信しています。
⇓YoutubeやX(旧Twitter)でも情報発信中です

西住技研をフォローする
画像処理

コメント