パターン認識入門
1. カラー画像からグレースケール画像を作る方法
カメラに限らず、昨今コンピュータで取り扱われる画像は一般的にはカラー画像です。
パターン認識においてカラー画像をそのまま用いる場合もありますが、単にコンピュータに形を認識させたりあるいは今回のアプリケーションのように文字を認識させたりしたい場合には、カラー画像をそのまま使うよりもグレースケール画像を認識に用いた方がアルゴリズムが簡単になります。ここで言うグレースケール画像というのは、明るさの度合いのみによって構成された画像のことです。
この明るさ l は、赤、緑、青の各色成分の明るさをそれぞれ r、g、b とすると、
で表せます。ここで Wr 、Wg 、Wb は各色成分の重みです。
実際に人間の目が感じる明るさは r、g、b の値に応じて Wr 、Wg 、Wb も異なるのですが、通常これらを定数とします。特に、
- Wr = 0.299
- Wg = 0.587
- Wb = 0.114
の値が用いられます。
この処理の結果は、具体的には次のようになります。
2. 背景と文字の区別
紙などに印刷された文字や図形をコンピュータに認識させるためには、認識させたい対象とその周りにある背景とをコンピュータに区別させなければなりません。これを 2 値化と言います。つまり認識の対象を 1 で、背景を 0 と符号化するのです。この文字認識アプリケーションでは 2 値化に判別分析法と呼ばれる方法を採用しました。
判別分析法は、2 つの山からなる明るさに関するヒストグラムから谷の部分を探し出す手法です。因みにヒストグラムとは横軸に明るさを、縦軸にその明るさを持つ画素の数をとった棒グラフのことです。
例えば、次の
という画像では、ヒストグラムは次のようになります。
このヒストグラムでは、左側が上の画像の黒い部分に、右側が白い部分に対応します。このヒストグラムで、明るさが 200 未満の点の明るさを全て 0 とし、逆に明るさが 200 以上の点の明るさを全て 255 としてみます。
すると、上の画像は、
となります。
この例の 200 という値、これを閾値と言いますが、この値を人が決めました。これをコンピュータが自分で判断するためのアルゴリズムの 1 つが、判別分析法なのです。そして、閾値で分けた後の 0 という値の代わりに 1 を、255 という値の代わりに 0 という値を用いれば、処理後の画像の黒い点が 1 で、白い点が 0 で表されることになり、結果的に文字と背景とが分離できるのです。
この判別分析法にはヒストグラムに谷が存在しなかったり、あるいは谷が複数存在しても多くの場合適切な閾値が得られるという特徴があります。
それでは判別分析法による閾値の求め方を説明します。
画像の明るさが 0 から N での数値で表現されているとします。そして、明るさが t である画素の数を f (t) で表すことにします。この f (t) こそ、ヒストグラムそのものです。
まず明るさ t を境に明るさが t 未満のものをクラス 1、明るさが t 以上のものをクラス 2 としてヒストグラムを 2 つのクラスに分けたとします。
クラス 1 に含まれる画素の数 n1(t) は、
です。またクラス 1 に含まれる画素が持つ明るさの平均値 μ 1(t) は、
です。これからクラス 1 の明るさに関する分散 σ1(t)2 は、
と求まります。
同様にクラス 2 に含まれる画素の数 n2(t)、明るさの平均値 μ2(t) 、分散 σ2(t)2 はそれぞれ、
となります。
これらの値を使って、クラス内分散 σw(t)2 とクラス間分散 σB(t)2 とを次のように定義します。
ただし μ は画像全体の明るさの平均値で、
です。
更に W(t) を、
とします。
0 から N までの全ての t に対して W(t) を計算し、 W(t) が最大となる t = tMAX を見つけます。
この tMAX を 2 値化の閾値と採用します。これが判別分析法です。
今回の文字認識アプリケーションでは文字は暗い色に、背景は明るい色になっていると想定して、各点の明るさがこの tMAX 未満であれば文字の一部であり、そうでない場合は背景であると見なすようにしています。