はじめに
画像の二値化とは、あるグレー画像(8bit)を白(255)と黒(0)の 2 色のみの二値画像(1bit)に変換する処理のことです。閾値を設けることで、ある値以上のピクセルを白、ある値未満のピクセルを黒といったように変換します。画像を 2 色に変換することで画像処理の対象物の境界が明確になり様々な画像分析が可能になります。例えば、画像中にある物体の境界を明確化することによって物体検出をしやすくしたり、物体面積の算出を行ったりできます。本記事ではその画像の二値化の流れと代表的な手法について紹介します。
二値化の概要
画像の二値化は画像から物体の輪郭を抽出する処理です。対象物体の輪郭をきれいに抽出するためには適切な閾値の設定を行う必要があります。そこで、画像から得られる情報をもとに自動的に閾値を決定する手法「適応的二値化」「大津の二値化(判別分析法)」について紹介してます。
大津の二値化(判別分析法)
大津の二値化はグレースケール画像のヒストグラムを求め、分離度がもっとも大きくなるときの画素値を閾値にします。
以下は画素値を x 軸、画素の数を y 軸にとるヒストグラムの例です。

アルゴリズム
大津の二値化の処理手順は以下の通りです。
1. 入力からヒストグラムを求める。
2. ヒストグラムから最大値Imax、最小値Imin、平均値μ0を求めます。
3. Imin~Imaxの範囲内で、ある閾値 T を選びます。
4. 閾値 T でヒストグラムを 2 つのクラスに分離します。
5. クラスごとの分散σn2、平均値μn、画素数pnを求めます。
6. 以下の式でクラス内分散σw2とクラス間分散σb2
σw2=p1+p2p1σ12+p2σ22
σb2=p1+p2p1(μ1−μ0)2+p2(μ2−μ0)2
- 6 で求めた分散から分離度S(クラス内、クラス外分散の比)を求める。
S=σw2σb2
8. 3~7を繰り返し、分離度SをImin~Imaxの範囲内にあるすべてのTの分だけ求め、分離度Sが最大になる T を二値化処理に用いる閾値に決定します。
適応的二値化
適応的二値化処理は小領域を設定し、画像中の小領域ごとに閾値の値を計算します。そのため領域ごとに光源環境が変わってしまうような画像に対して有効です。
アルゴリズム
以下の画像は 3x3 の局所領域(近傍 8 画素)で適応的二値化処理の例です。

結果の比較
大津の二値化と適応的二値化の比較画像です。

大津の二値化はパラメータが少なく、処理が高速なため、組み込みに使われることが多いそうですが、画像の輝度のムラがある場合うまく処理を行ってくれません。対して、適応的二値化は部分的な輝度のムラがある場合でもうまく二値化できることができています。
まとめ
今回は代表的な二値化処理手法である大津の二値化と適応的二値化処理にういて紹介しました。opencv ライブラリで今回紹介した 2 つの二値化処理を実装することができます。両方ともメリット、デメリットがあるため、タスクに応じて使い分けるのがよいでしょう。
参考