以下、実施の形態につき図面を参照して説明する。
[第1の実施形態]
図1は第1の実施形態に係る領域検出装置のハードウェア構成を示すブロック図である。図1に示す領域検出装置は、コンピュータ(以下、PCと称する)10を用いて実現されるものとする。PC10は、CPU11と、記憶装置12と、入出力制御部13とを備えている。CPU11、記憶装置12及び入出力制御部13は、バス14によって相互接続されている。
記憶装置12は、領域検出ソフトウェア121及び文字認識ソフトウェア122のようなソフトウェア群、入力画像、及び作業データ等を格納するのに用いられる。CPU11は、記憶装置12から領域検出ソフトウェア121を読み取って実行することにより、入力画像から枠に囲まれた領域を検出する領域検出処理を行う。領域検出処理は、領域検出結果を記憶装置12または外部デバイスに出力する処理を含む。CPU11はまた、記憶装置12から文字認識ソフトウェア122を読み取って実行することにより、領域検出処理で検出された領域内の文字を認識する文字認識処理を行う。文字認識処理は、文字認識結果を記憶装置12または外部デバイスに出力する処理を含む。
入出力制御部13は、画像を撮像する画像取得手段としてのカメラ21と接続されている。入出力制御部13はまた、シリアルインタフェース22と接続されている。入出力制御部13は、カメラ21からの画像の入力、及び外部デバイス(カメラ21以外の外部デバイス)へのシリアルインタフェース22を介してのシリアル出力を制御(つまり、外部の装置との間の入出力を制御)する。入出力制御部13はまた、カメラ21から入力した画像を、例えばダイレクトメモリアクセス(DMA)により記憶装置12へ転送する。入出力制御部13は更に、CPU11による領域検出ソフトウェア121或いは文字認識ソフトウェア122の実行の結果(つまり、領域検出結果或いは文字認識結果)等を、シリアルインタフェース22を介して外部デバイスにシリアル出力する、或いはバス14を介して記憶装置12に出力する。
図2は第1の実施形態に係る領域検出装置の機能構成を示すブロック図である。図2に示す領域検出装置の機能構成は、CPU11が領域検出ソフトウェア121を読み取って実行することによって実現される。
図2に示す領域検出装置は、輪郭線抽出手段210、選択手段220及び領域出力手段230を備えている。
輪郭線抽出手段210は、カメラ21から入力された画像(つまり、入力画像)から輪郭線毎に輪郭画素の系列を検出することにより、当該輪郭画素の系列の集合S1を抽出する。
選択手段220は、輪郭画素の系列の集合S1から1つまたは複数の輪郭画素の系列を選択することにより、当該選択した輪郭画素の系列の集合S4(つまり、集合S1の部分集合S4)を抽出する。
領域出力手段230は、選択(抽出)された画素の系列の集合S4を、領域検出の結果として外部デバイスまたは記憶装置12に出力する。
次に。図2に示す領域検出装置の動作について説明する。以下の説明では1次元の配列αの第i番目の要素をα(i)、2次元の配列βの横方向にj番目、縦方向にi番目の要素をβ(i,j)と表す。但し、記号αは任意の1次元配列変数、βは任意の2次元配列変数の、それぞれ変数名を表すものとする。また、以下では入力画像が原則モノクログレースケール画像(いわゆるものモノクロ画像)であるものとして説明する。
図3は入力画像の例を示す図である。図3に示す入力画像は、丸枠の中に文字列「10」を含む。入力画像は横幅w画素、高さh画素の画素値の配列であり、記憶装置12に格納される。また、以下の説明では、入力画像の座標(x,y)の画素を画素(x,y)と表記する。画素(x,y)の画素値は2次元配列f、つまりf(x,y)として読み書きできるものとする。但し、xは図3における矢印31の方向(右方向)を正、yは図3における矢印32の方向(下方向)を正とする。
輪郭線抽出手段210は、図3に示す入力画像から、輪郭線毎に輪郭画素の系列を検出することにより、当該輪郭画素の系列の集合S1を抽出する。この集合S1の抽出のために、輪郭線抽出手段210は、エッジ検出手段211及び輪郭線追跡手段212を備えている。
エッジ検出手段211は、入力画像内の隣接する画素間からエッジを検出する。より詳細には、エッジ検出手段211は、隣接する画素間の画素値の差に基づいてエッジを検出する。ここではエッジ検出手段211は、隣接する画素間の画素値の差の絶対値がしきい値Te以上の場合にエッジを検出し、Te未満の場合にエッジを検出しない。
輪郭線追跡手段212は、検出されたエッジで区切られた画素の塊毎に、当該画素の塊の輪郭線を追跡する。輪郭線追跡手段212は、輪郭線追跡により検出された輪郭線を構成する輪郭画素の系列を、上記画素の塊に対応する輪郭線毎に抽出する。
以下、エッジ検出手段211によるエッジ検出の詳細について説明する。ここで、横方向(x方向)のエッジの有無を表す変数をh(x,y)と表記し、縦方向(y方向)のエッジの有無を表す変数をv(x,y)と表記する。
エッジ検出手段211は、入力画像から、後述する方法で、変数h(x,y)及び縦方向のエッジの有無を表す変数v(x,y)を−1≦y≦h−1且つ1≦x≦w−1で規定される範囲の座標(x,y)全てについて算出する。
変数h(x,y)は、入力画像の座標(x,y)の画素(x,y)と縦方向に隣接する画素(x,y+1)とを結ぶ線分を横切る横エッジが検出されたか否かを表す。
h(x,y)には、横エッジが検出された場合は0、当該横エッジが検出されなかった場合は1が代入される。したがってh(x,y)は、
|f(x,y)−f(x,y+1)|≧Te
ならば0、
|f(x,y)−f(x,y+1)|<Te
ならば1となる。
変数v(x,y)は、入力画像の座標(x,y)の画素(x,y)と横方向に隣接する画素(x+1,y)とを結ぶ線分を横切る縦エッジが検出されたか否かを表す。
v(x,y)には、縦エッジが検出された場合は0、当該縦エッジが検出されなかった場合は1が代入される。したがってh(x,y)は、
|f(x,y)−f(x+1,y)|≧Te
ならば0、
|f(x,y)−f(x+1,y)|<Te
ならば1となる。
但しエッジ検出手段211は、入力画像の外側の画素、即ちx<0またはx≧wまたはy<0またはy≧hの画素については、画素値f(x,y)が予め定められた値Cであるものとみなして、h(x,y)及びv(x,y)を算出する。
図4は、図3に示す入力画像内で隣接する2つの画素の対の群のうち、エッジ検出手段211によって当該2つの画素間にエッジが検出されなかった画素同士を線分で結んだ様子を示す図である。
輪郭線追跡手段212は、検出されたエッジ(横方向のエッジまたは縦方向のエッジ)で区切られた画素の塊の輪郭線を追跡することにより、輪郭線毎に当該輪郭線を構成する輪郭画素の系列を検出する。輪郭線追跡手段212は、この輪郭線毎の輪郭画素の系列を検出することにより、検出された輪郭線の集合を表す、輪郭画素の系列の集合S1を抽出する。
以下、輪郭線追跡手段212による輪郭線検出の詳細について説明する。
輪郭線追跡手段212は、輪郭線検出のために以下の変数群
(a1)入力画像と同様の、横幅w画素、高さh画素の整数の配列g
(a2)輪郭線の追跡開始画素(つまり追跡開始点)の座標を表す整数変数x0,y0
(a3)現在追跡中の画素(輪郭点)の座標を表す整数変数x,y
(a4)上下左右の方向を、値0で右方向、値1で上方向、値2で左方向、値3で下方向を表す整数変数d0,d1,d2
(a5)追跡中の輪郭線の番号(且つ追跡が完了した輪郭線の個数)を表す整数変数N1
(a5)抽出(列挙)された輪郭画素の個数(輪郭画素数)を表す整数変数M1
(a6)抽出(列挙)された輪郭画素の2次元座標を格納する配列変数(配列)p1
(a7)要素r1(n)が、第n番目に追跡された輪郭線を構成する画素の系列の先頭画素(つまり始点)の配列p1中での位置を表す整数の配列変数(配列)r1
(a8)要素m1(n)が、第n番目に追跡された輪郭線を構成する画素(つまり輪郭画素)の系列に含まれる輪郭画素の個数(輪郭画素数)を表す整数の配列変数(配列)m1
を用いる。これらの変数群は、記憶装置12に格納される。
次に、輪郭線追跡手段212によって実行される輪郭線抽出処理の手順について、図5及び図6のフローチャートを参照して説明する。この輪郭線抽出処理では、以下に述べるように、輪郭線を構成する輪郭画素が抽出(列挙)される。
まず輪郭線追跡手段212は、N1を0に、M1を0に、それぞれ初期化する(ステップ501)。また輪郭線追跡手段212は、配列gの要素を全て0に初期化する(ステップ502)。また輪郭線追跡手段212は、y0を0に初期化する(ステップ503)。
次に輪郭線追跡手段212は、y0がhに達するまで以下のループAの処理(ステップ504)を繰り返す。
まず輪郭線追跡手段212は、x0を0に初期化する(ステップ505)。次に輪郭線追跡手段212は、x0がwに達するまで以下のループBの処理(ステップ506)を繰り返す。
まず輪郭線追跡手段212は、g(x0,y0)=0で且つh(x0,y0)=0であるかを判定する(ステップ507)。もし、ステップ507の判定がYesであるならば、輪郭線追跡手段212は、m1(N1)に0を、r(N1)にM1を、それぞれ代入する(ステップ508)。また輪郭線追跡手段212は、xにx0を、yにy0を、それぞれ代入する(ステップ509)。また輪郭線追跡手段212は、d0に2を代入する(ステップ510)。次に輪郭線追跡手段212は、d1にd0を代入する(ステップ511)。
すると輪郭線追跡手段212は、x=x0で且つy=y0で且つd1=d0となるまで以下のループCの処理(ステップ601)を繰り返す。
まず輪郭線追跡手段212は、p1(M1)に座標(x,y)を代入する(ステップ602)。このステップ602が繰り返されることにより、座標(x,y)の画素(x,y)が輪郭画素として列挙(抽出)される。
次に輪郭線追跡手段212は、m1(N1)にm1(N1)+1を代入し(ステップ603)、M1にM1+1を代入する(ステップ604)。
次に輪郭線追跡手段212は、座標(x,y)の画素(x,y)と、当該画素(x,y)からd2が指し示す方向に隣接した画素(隣接画素)との間にエッジが検出されているかを判定する(ステップ605)。このステップ605において輪郭線追跡手段212は、前記判定結果に基づき、隣接画素との間にエッジが検出されていない方向を指すようになるまで、d2を以下の値
・(d1+3) MOD 4
・ d1
・(d1+1) MOD 4
・(d1+2) MOD 4
の順に変更する。但し、d2の方向の画素が入力画像の範囲外ならば、輪郭線追跡手段212は、隣接画素の値は0であるとみなす。ここで、「a MOD b」はaをbで割った余りを表す。
また輪郭線追跡手段212は、d2が指し示す方向に隣接した画素との間にエッジが検出されているかを、d2の値によって以下のように判定する。
d2=0で且つh(x,y)=0なら、エッジが検出されている。
d2=1で且つv(x,y−1)=0なら、エッジが検出されている。
d2=2で且つh(x−1,y)=0なら、エッジが検出されている。
d2=3で且つv(x,y)=0なら、エッジが検出されている。
その他の場合は、エッジが検出されていない。
輪郭線追跡手段212は、ステップ605を実行し終えると、d1にd2を代入し(ステップ606)、g(x,y)に1を代入する(ステップ607)。
次に輪郭線追跡手段212は、d1の値に応じて、以下のいずれかの処理を行う(ステップ608)。
d1=0なら、輪郭線追跡手段212はxにx+1を代入する。
d1=1なら、輪郭線追跡手段212はyにy−1を代入する。
d1=2なら、輪郭線追跡手段212はxにx−1を代入する。
d1=3なら、輪郭線追跡手段212はxにy+1を代入する。
ステップ608の後、x=x0で且つy=y0で且つd1=d0が成立していないならば、輪郭線追跡手段212はループC(ステップ601)を再び実行する。
これに対し、x=x0で且つy=y0で且つd1=d0が成立しているならば、輪郭線追跡手段212はループC(ステップ601)の繰り返しを終了する。
すると輪郭線追跡手段212は、N1にN1+1を代入する(ステップ609)。
次に輪郭線追跡手段212は、x0を1増やす(ステップ610)。また、前記ステップ507の判定がNoの場合にも、輪郭線追跡手段212はx0を1増やす(ステップ610)。
ステップ610の後、x0=wが成立していないならば、輪郭線追跡手段212はループB(ステップ506)を再び実行する。
これに対し、x0=wが成立しているならば、輪郭線追跡手段212はループB(ステップ506)の繰り返しを終了する。
すると輪郭線追跡手段212は、y0を1増やす(ステップ611)。
ステップ611の後、y0=hが成立していないならば、輪郭線追跡手段212はループA(ステップ504)を再び実行する。
これに対し、y0=hが成立しているならば、輪郭線追跡手段212はループA(ステップ504)の繰り返しを終了する。
以上に述べた輪郭線追跡手段212の処理により、記憶装置12には、抽出された輪郭線(を構成する輪郭画素の系列)の群に関する情報が格納される。図7は、この輪郭線の群に関する情報のデータ構造の例を示す図である。このデータ構造は、整数変数N1、整数変数M1、配列変数(配列)r1、配列変数(配列)p1及び配列変数(配列)m1を含む。
図8は、図3に示した入力画像から輪郭線追跡手段212によって抽出された輪郭画素の系列全てをまとめて示す図である。図8には、11の輪郭画素の系列801乃至811(より詳細には、11の輪郭線を構成する輪郭画素の系列801乃至811)が示されている。系列801乃至811は、輪郭画素の系列の集合S1を構成する。
図9は、図8に示した輪郭画素の系列801乃至811のうちの系列801乃至806を個別に示す図であり、図10は、当該輪郭画素の系列801乃至811のうちの系列807乃至811を個別に示す図である。
再び図2を参照すると、選択手段220は、輪郭線抽出手段210によって抽出されたた集合S1から、1つまたは複数の輪郭画素の系列を選択する。そして選択手段220は、選択された輪郭画素の系列を含む集合S4を、集合S1の部分集合S4として抽出する。選択手段220による輪郭画素の系列(つまり部分集合S4)の選択(抽出)の詳細について以下に説明する。
選択手段220は、n=0,…,N1−1の各々について、第n番目に追跡された輪郭線を構成する輪郭画素の系列を選択するか否かを、次のような方法により判定する。
(1-1)まず選択手段220は、第n番目に追跡された輪郭線が取り囲む面積を算出する。算出された面積が負の場合、即ち第n番目に追跡された輪郭線がエッジで区切られた画素の塊の外輪郭をなす場合には、選択手段220は、当該輪郭線を構成する画素の系列を選択しないと判定する。図8に示した輪郭画素の系列(輪郭線)の集合の場合、例えば、系列802及び803のうちの系列802、系列804び805のうちの系列804、系列806及び807のうちの系列806、系列808及び809のうちの系列808、そして系列810及び811のうちの系列810が、上記外輪郭をなすために選択されない。
第n番目に追跡された輪郭線が取り囲む面積は、i=0,…,m1(n)−1の各々についての以下の値
(p1(r1(n)+i).x
+p1(r1(n)+i+1 MOD m1(n)).x)
×(p1(r1(n)+i).y−p1(r1(n)+i+1).y)/2
を足し合わせることによって算出される。ここで、p1(r1(n)+i).xは、p1(r1(n)+i)に格納された2次元座標のx成分を示し、p1(r1(n)+i).yは、p1(r1(n)+i)に格納された2次元座標のy成分を示す。p1(r1(n)+i+1).についても同様である。
(1-2)次に選択手段220は、i=0,…,m1(n)−1に関するp1(r1(n)+i).xの、それぞれ最小値xmin(n)及び最大値xmax(n)を算出する。そして選択手段220は、第n番目に追跡された輪郭線の幅xmax(n)−xmin(n)+1を算出する。
算出された幅xmax(n)−xmin(n)+1が、予め定められたしきい値wmin未満であるか、或いは予め定められたしきい値wmaxを超えるならば、選択手段220は、第n番目に追跡された輪郭線を構成する輪郭画素の系列を選択しない。wminが後述するように16の場合、上述の外輪郭をなさない系列807,809及び811も選択されない。
(1-3)同様に選択手段220は、i=0,…,m1(n)−1に関するp1(r1(n)+i).yの、それぞれ最小値ymin(n)及び最大値ymax(n)を算出する。そして選択手段220は、第n番目に追跡された輪郭線の高さymax(n)−ymin(n)+1を算出する。
算出された高さxmax(n)−xmin(n)+1が、予め定められたしきい値hmin未満であるか、或いは予め定められたしきい値hmaxを超えるならば、選択手段220は、第n番目に追跡された輪郭線を構成する輪郭画素の系列を選択しない。
wmax及びhmaxは、入力画像の周縁に対応する輪郭線の輪郭画素の系列801のように、枠とは無関係の輪郭線の輪郭画素の系列が選択されるのを防止するために設定される。一方、wmin及びhminは、枠として用いられないような小領域の輪郭線の輪郭画素の系列が選択されるのを防止するために設定される。
(1-4)上記(1-2)、(1-3)のいずれにも該当しない場合、選択手段220は、第n番目に追跡された輪郭線を構成する輪郭画素の系列を選択する。
このようにして選択手段220は、集合S1から選択条件に合致する輪郭画素の系列を選択し、当該選択された輪郭画素の系列を集合(部分集合)S4に格納する。
集合S4の記憶装置12におけるデータ構造は集合S1と同様である。つまり、集合S4のデータ構造は、変数M1、N1、r1、p1、m1の代わりに、変数M4、N4、r4、p4、m4を用いる点を除いてS1と同等である。後述する集合S2についても同様であり、変数M1、N1、r1、p1、m1の代わりに、変数M2、N2、r2、p2、m2が用いられる。また、後述する集合S3についても同様であり、変数M1、N1、r1、p1、m1の代わりに、変数M3、N3、r3、p3、m3が用いられる。
図11は、図9及び図10に示した輪郭画素の系列801乃至811から、上述の選択条件の下で選択手段220により抽出された輪郭画素の系列の集合S4の例を示す図である。選択条件は、例えばwmin=16、hmin=16、wmax=34、hmin=34を含む。図11では、集合S4を構成する輪郭画素の系列(つまり選択された輪郭画素の系列)が実線で表され、選択されなかった輪郭画素の系列が破線で表されている。図11の例では、集合S4は、2個の輪郭画素の系列803及び805から構成されており、領域検出装置によって検出された領域を表す。
なお、選択手段220が、前述の方法で抽出した集合のうちで面積が最大の系列だけを含む集合を集合S4として抽出してもよい。また選択手段220が、集合S1を構成する全ての輪郭画素の系列をS4に含めても良い。つまり、S4=S1とすることにより、枠で囲まれた領域の輪郭画素の系列だけでなく、他の領域の輪郭画素の系列を抽出しても構わない。このように選択手段220において輪郭画素の系列を選択する方法は、後続の処理の負荷の大小や利用可能な計算機資源等の条件が許す限り、いかなる方法であっても良い。
領域出力手段230は、選択手段220によって輪郭画素の系列の集合S4が抽出されると領域取得手段として機能して、当該輪郭画素の系列の集合S4を、入力画像から検出された領域の情報(つまり、領域検出の結果)として取得する。領域出力手段230は、取得された領域検出の結果(つまり集合S4)を、領域検出装置の外部のデバイス(外部デバイス)または記憶装置12に出力する。ここでは、領域出力手段230による集合S4の出力は、文字認識ソフトウェア122(より詳細には、文字認識ソフトウェア122に従って文字認識処理を実行するCPU11)から参照可能な記憶装置12の領域に変数M4、N4、r4、p4、m4のコピーを作成することによって行われる。なお、領域出力手段230による集合S4の出力が、例えば入出力制御部13及びシリアルインタフェース22を介して、変数M4、N4、r4、p4、m4の内容を外部デバイスに送信することで行われても構わない。つまり、領域出力手段230による集合S4の出力は、当該集合S4が何らかの形で情報処理の用に供される方法で行われるならば、他の方法で行われても構わない。
図12は、第1の実施形態に係る領域検出装置に付加されている文字認識機構の機能構成を示すブロック図である。図12に示す文字認識機構の機能構成は、CPU11が文字認識ソフトウェア122を読み取って実行することによって実現される。なお、文字認識機構が、外部デバイスに備えられていてもよい。この場合、領域出力手段230による集合S4の出力が、外部デバイスに対して行われればよい。
図12に示す文字認識機構は、2値化手段240、画像抽出手段250、認識手段260及び認識結果出力手段270を備えている。
2値化手段240は、入力画像を2値化して2値画像を生成する。
画像抽出手段250は、領域出力手段230によって出力された集合S4に含まれる輪郭画素の系列の各々について、上記2値画像から対応する画像を抽出する。つまり画像抽出手段250は、図2に示す領域検出装置によって検出された領域の画像を抽出する。
認識手段260は、画像抽出手段250によって抽出された画像上の文字(つまり領域検出装置で検出された領域内の文字)を認識する。認識結果出力手段270は、認識手段260によって認識された結果(認識結果)を、記憶装置12または外部デバイスに出力する。
以下、図12に示す文字認識機構の動作の詳細について説明する。
2値化手段240は、入力画像を2値化して2値画像を生成する。この2値化には、例えば、周知のNiblackのアルゴリズムが用いられるものとする。図13は、図3に示した入力画像を2値化することによって生成される2値画像の例を示す図である。
画像抽出手段250は、集合S4に含まれる輪郭画素の系列で示される領域(つまり、領域検出装置によって検出された領域)の内部の画素を、上記2値画像から抽出する。そして画像抽出手段250は、検出された領域の外部の画素を白画素で埋めることにより、当該領域の外部の画素が白画素で埋められた抽出画像を生成する。この画像抽出手段250による抽出画像の生成について更に具体的に説明する。
まず画像抽出手段250は、周知のソリッド・スキャン・コンバージョンのアルゴリズムを用いて、集合S4に含まれる輪郭画素の系列に囲まれた領域(検出された領域)内の画素値が1で、当該領域外の画素値が0のマスク画像を生成する。そして画像抽出手段250は、マスク画像上の画素値が1の座標における画素値が入力画像のそれと一致し、残りの画素の画素値が白を示す抽出画像を生成する。
図14は、図3に示した入力画像から最終的に抽出される輪郭画素の系列が図11に示した系列803及び805である場合に、画像抽出手段250により生成されるマスク画像及び抽出画像の例を示す図である。ここでは、マスク画像は図14(a)に示されており、画素値が1の画素が白で、画素値が0の画素が灰色で表されている。画素値が1の画素(つまり、白で表される画素)の領域は、図11に示した系列805の示す輪郭線の内部の領域であり、図3に示した入力画像に含まれている丸枠内の領域に対応する。一方、抽出画像は図14(b)に示されている。図14(b)に示す抽出画像は、図3に示した入力画像に含まれている丸枠内の文字列「10」を含む。
認識手段260は、周知の文字認識処理により文字列画像上の文字(文字列)を次のように認識する。まず認識手段260は、上記抽出画像からラベリングにより黒画素の連結成分を抽出した上で、当該連結成分の外接矩形内から部分画像を抽出する。次に認識手段260は、抽出された部分画像を部分空間法により認識して、認識結果に対応する文字コードを取得する。
認識結果出力手段270は、認識手段260によって取得された文字コードを記憶装置12に出力する。もし、認識手段260によって複数の文字コードが取得されたならば、認識結果出力手段270は、当該複数の文字コードを外接矩形の中心座標の順にソートする。そして認識結果出力手段270は、ソートされた文字コードの列を、文字認識結果を表す文字列データとして、記憶装置12に出力する。なお、認識結果出力手段270が、文字列データと改行コード(ASCIIコードならば0x0a)とを文字認識結果として入出力制御部13及びシリアルインタフェース22を介して外部デバイスに出力してもよい。つまり、認識結果出力手段270による文字認識結果の出力は、当該文字認識結果が何らかの形で情報処理の用に供される方法で行われるならば、他の方法で行われても構わない。
第1の実施形態によれば、入力画像がモノクログレースケールでありながら、当該入力画像内の隣接する画素間からエッジを検出し、検出されたエッジで区切られた画素の塊毎に、当該画素の塊の輪郭線を追跡することにより、領域を形成する輪郭線を検出すること、つまり領域を検出することができる。
上記第1の実施形態では、入力画像がモノクログレースケールであることを想定している。しかしながら、入力画像がカラーであっても構わない。入力画像がカラーである場合、画素値の配列fの各要素に、カラーの画素値を表現する2次元以上のベクトル(以下、画素値ベクトルと称する)を適用するとよい。
画素値ベクトルを適用する場合、第1の実施形態において、しきい値Teとの比較のためエッジ検出手段211によって算出される、隣接する画素間の画素値の差の絶対値に代えて、当該隣接する画素間の画素値ベクトルの差分のノルムを用いるとよい。また、画素値ベクトルの成分を、赤、緑、青の色成分を表すRGB値としても、或いは赤、緑の色成分を表す2値としてもよい。要するに、画素値ベクトルの成分として、カメラ21で撮像された画像の色を表現する値の組み合せならば、いずれを用いても構わない。
また、カメラ21から入力された画素値の色成分の組み合せを、エッジ検出により一層適した別の色成分に変換する前処理が行われてもよい。この前処理として、例えばRGB表色系からHSV表色系への変換等が挙げられる。
[第2実施形態]
次に、第2の実施形態について説明する。
第2の実施形態に係る領域検出装置のハードウェア構成は、第1の実施形態と同様である。但し、領域検出ソフトウェア121の構成は第1の実施形態と異なる。一方、文字認識ソフトウェア122の構成、つまり文字認識機構の構成は第1の実施形態と同様である。これらの点を考慮して、以下の説明では、便宜的に図1及び図12を援用する。
図15は第2の実施形態に係る領域検出装置の機能構成を示すブロック図である。図15において図2と等価な構成要素には同一参照番号を付して、当該等価な構成要素についての詳細な説明は省略する。
図15に示す領域検出装置は、図2に示した領域検出装置(第1の実施形態)と同様に、輪郭線抽出手段210及び領域出力手段230を備えている。この領域検出装置は更に、凸包抽出手段280及び選択手段221を備えている。
凸包抽出手段280は、輪郭線抽出手段210(より詳細には、輪郭線抽出手段210の輪郭線追跡手段212)によって抽出された輪郭画素の系列(以下、第1の輪郭画素の系列と称する)の集合S1に基づき、当該第1の輪郭画素の系列の各々の凸包を抽出する。具体的には、凸包抽出手段280は、集合S1に含まれる第1の輪郭画素の系列の各々について、GrahamScanのアルゴリズムを適用することで当該第1の輪郭画素の系列の凸包の頂点に位置する輪郭画素が当該凸包の外輪上での順に並んだ系列(以下、第2の輪郭画素の系列と称する)を抽出する。凸包抽出手段280は、抽出された第2の輪郭画素の系列を全て含む集合S3を取得する。つまり凸包抽出手段280は、集合S1に含まれる第1の輪郭画素の系列に対応して抽出された全ての第2の輪郭画素の系列を含む集合S3を取得する。集合S3を構成する第2の輪郭画素の系列の情報(変数M3、N3、r3、p3、m3)は記憶装置12に格納される。
選択手段221は、凸包抽出手段280によって取得された第2の輪郭画素の系列の集合S3から1つまたは複数の輪郭画素の系列を選択することにより、当該選択した輪郭画素の系列の集合S4(つまり、集合S3の部分集合S4)を抽出する。
次に、第2の実施形態の特徴について説明する。
まず輪郭線抽出手段210が、入力画像から、第1の実施形態と同様に輪郭線毎に輪郭画素の系列を検出することにより、当該輪郭画素の系列の集合S1を抽出したものとする。図16は、この入力画像の例を示す図である。図16に示す入力画像では、図3に示した入力画像と異なり、丸枠内の文字列「10」のうちの文字「0」の一部が、当該丸枠の内側と接触している。
図17は、図16に示した入力画像から輪郭線追跡手段212によって抽出された輪郭画素の系列全てをまとめて示す図である。図17には、10の輪郭画素の系列1701乃至1710(より詳細には、10の輪郭線を構成する輪郭画素の系列1701乃至1710)が示されている。系列1701乃至1710は、輪郭画素の系列の集合S1を構成する。
ここで、系列1701乃至1704は、それぞれ図8の系列801乃至804に対応し、系列1706,1707,1708,1709及び1710は、それぞれ図8の系列806,807,809,810,及び811に対応する。これに対し、系列1705は、図8の2つの系列805及び808に対応する。その理由は、上述したように、図8の系列805に対応する丸枠の内側の輪郭線と文字「0」の外側の輪郭線とが接触しているためである。
図18は、図17に示した輪郭画素の系列1701乃至1710のうちの系列1701乃至1706を個別に示す図であり、図19は、当該輪郭画素の系列1701乃至1710のうちの系列1707乃至1710を個別に示す図である。
図20は、図17に示した輪郭画素の系列1701乃至1710のうちの系列1705から凸包抽出手段280によって抽出された凸包を構成する輪郭画素の系列の例を示す図である。ここでは、第1の実施形態から類推されるように、輪郭画素の系列の集合S4は、系列1705から抽出された凸包を構成する輪郭画素の系列(図20参照)と、系列1703から抽出された凸包を構成する輪郭画素の系列とから構成される。
図21は、図16に示した入力画像の場合に、画像抽出手段250によって生成されるマスク画像及び抽出画像の例を示す図である。ここでは、マスク画像は図21(a)に示されており、画素値が1の画素が白で、画素値が0の画素が灰色で表されている。このマスク画像は、図16に示した入力画像及び図20に示した輪郭画素の系列(つまり、系列1705から抽出された凸包を構成する輪郭画素の系列)に基づいて画像抽出手段250によって生成されたものである。
一方、抽出画像は図21(b)に示されている。図21(b)は、図16に示した入力画像及び図21(a)に示したマスク画像に基づいて生成される抽出画像の例を示している。
図22は第2の実施形態との比較のために、図16に示した入力画像の場合に、第1の実施形態において画像抽出手段250によって生成されるマスク画像及び抽出画像の例を示す図である。ここでは、マスク画像は図22(a)に示されており、抽出画像は図22(b)に示されている。図22(a)に示すマスク画像は、図16に示した入力画像と図18(e)に示した輪郭画素の系列に基づいて生成されたものであり、画素値が1の画素が白で、画素値が0の画素が灰色で表されている。
図22(a)に示すマスク画像では、文字「0」を取り囲む輪郭線と枠の内側の輪郭線とが繋がっており、文字「0」を囲んでいない。したがって、図22(a)に示すマスク画像と図16に示した入力画像とに基づいて抽出画像を生成すると、図22(b)に示すように、文字「0」が消失し、文字列「10」のうちの文字「1」のみが残ったものとなる。第2実施形態において、凸包を構成する輪郭画素の系列を適用しているのは、このような文字の消失(より詳細には、検出されるべき領域の輪郭線が枠に接触していることに起因して発生する文字の消失)を防止するためである。
第2の実施形態によれば、抽出された輪郭線を構成する輪郭画素の系列の各々の凸包を抽出することにより、たとえ枠と枠内の文字等が接触している場合でも、枠の内側と外側の区別をより確実にし、枠に囲まれた領域の検出性能を向上することができる。
[第3の実施形態]
次に、第3の実施形態について説明する。
第3の実施形態に係る領域検出装置のハードウェア構成は、第1の実施形態と同様である。但し、領域検出ソフトウェア121の構成は第1の実施形態と異なる。一方、文字認識ソフトウェア122の構成、つまり文字認識機構の構成は第1の実施形態と同様である。これらの点を考慮して、以下の説明では、便宜的に図1及び図12を援用する。
図23は第3の実施形態に係る領域検出装置の機能構成を示すブロック図である。図23において図2と等価な構成要素には同一参照番号を付して、当該等価な構成要素についての詳細な説明は省略する。
図23に示す領域検出装置は、図2に示した領域検出装置(第1の実施形態)と同様に、輪郭線抽出手段210及び領域出力手段230を備えている。図23に示す領域検出装置は更に、明暗判定手段290、変化点検出手段300、輪郭線修正手段310及び選択手段222を備えている。
明暗判定手段290は、輪郭線抽出手段210(より詳細には、輪郭線抽出手段210の輪郭線追跡手段212)によって抽出された輪郭画素の系列の集合S1に基づき、当該輪郭画素の系列が近傍の画素と比較して明るいか暗いかを判定する。
変化点検出手段300は、明暗判定手段290によって判定された明暗が対応する輪郭画素の系列で示される輪郭線上で変化する点(画素)の集合を当該輪郭画素の系列上で検出する。
輪郭線修正手段310は、変化点検出手段300によって検出された点において輪郭線を繋ぎ直し、その繋ぎ直された輪郭線を構成する画素(輪郭画素)の系列の集合S2を取得する。
選択手段222は、輪郭線修正手段310によって取得された集合S2から1つまたは複数の輪郭画素の系列を選択することにより、当該選択した輪郭画素の系列の集合S4(つまり、集合S3の部分集合S4)を抽出する。
次に。図23に示す領域検出装置の動作について説明する。
ここでは、図23に示す領域検出装置によって図24に示す入力画像から枠で囲まれた領域が検出されるものとする。図24に示す入力画像では、図3に示した入力画像と異なり、枠(丸枠)の一部に、いわゆる白飛びが発生している。つまり、本来黒画素として検出されるべき画素の系列が徐々に白画素に変化している。
輪郭線抽出手段210のエッジ検出手段211は、図24に示す入力画像内の隣接する画素間からエッジを検出する。
図25は、図24に示す入力画像内で隣接する2つの画素の対の群のうち、エッジ検出手段211によって当該2つの画素間にエッジが検出されなかった画素同士を線分で結んだ様子を示す図である。
輪郭線抽出手段210の輪郭線追跡手段212は、エッジ検出手段211によって検出されたエッジで区切られた画素の塊毎に、当該画素の塊の輪郭線を追跡する。輪郭線追跡手段212は、輪郭線追跡により検出された輪郭線を構成する輪郭画素の系列を、上記画素の塊に対応する輪郭線毎に抽出する。
図26は、図24に示した入力画像から輪郭線追跡手段212によって抽出された輪郭画素の系列全てをまとめて示す図である。図26には、8つの輪郭画素の系列2601乃至2608(より詳細には、8つの輪郭線を構成する輪郭画素の系列2601乃至2608)が示されている。系列2601乃至2608は、輪郭画素の系列の集合S1を構成する。
ここで、系列2603乃至2608は、それぞれ図8の系列806乃至811に対応する。これに対し、系列2601は、図8の2つの系列802及び803に対応し、系列2602は、図8の2つの系列804及び805に対応する。その理由は、上述したように、図8の系列802及び803並びに804及び805に対応する丸枠の部分で白飛びが発生しているためである。なお、図26には、図8の系列801に相当する輪郭画素の系列は省略されている。
図27は、図26に示した輪郭画素の系列2601乃至2608のうちの系列2601乃至2606を個別に示す図であり、図28は、当該輪郭画素の系列2601乃至2608のうちの系列2607及び2608を個別に示す図である。
明暗判定手段290は、上記集合S1に含まれている輪郭画素の系列における輪郭画素の各々が近傍の画素と比較して明るいか暗いかを判定する。具体的には、明暗判定手段290は、輪郭画素が近傍の画素(予め定められた範囲内の画素)と比較して明るいか暗いかを、当該輪郭画素の画素値と、当該輪郭画素の上下左右にD画素を含む正方形(つまり、当該輪郭画素を中心とする縦横が2D+1の領域)の内部の画素値の平均値とを比較することで判定する。図29に明暗判定手段290による明暗判定の対象となる画素と近傍の画素との位置関係の例を示す。図29において、判定の対象となる画素には記号×が付されている。
明暗判定手段290による上述の明暗判定は、M1個の輪郭画素の各々について行われる。M1個の輪郭画素の各々の明暗判定結果は、要素数M1の整数配列sに格納される。この整数配列sは記憶装置12に格納される。
以下、明暗判定手段290によって実行される明暗判定処理の手順について図30のフローチャートを参照して説明する。
まず明暗判定手段290は、輪郭画素の番号を表す整数変数iを0に初期化する(ステップ3001)。
次に明暗判定手段290は、iがM1以上であるかを判定する(ステップ3002)。もし、i≧M1でないならば(ステップ3002のNo)、明暗判定手段290は、座標(p1(i).x,p1(i).y)の画素の画素値と、当該画素の上下左右にD画素を含む正方形の内部の画素値の平均値との差Δ(i)を計算する(ステップ3003)。
次に明暗判定手段290は、Δ(i)が正であるかを判定する(ステップ3004)。明暗判定手段290は、Δ(i)が正であるならば(ステップ3004のYes)、s(i)に「明」を示す1を代入し(ステップ3005)、そうでないならば(ステップ3004のNo)、s(i)に「暗」を示す0を代入する(ステップ3006)。s(i)は、図7に示した配列(配列変数)p1の座標(p1(i).x、p1(i).y)に対応付けて記憶装置12に格納される。
次に明暗判定手段290は、iにi+1を代入して(ステップ3007)、ステップ3002に戻る。以上の処理がM1回繰り返されて、i≧M1となると(ステップ3002のYes)、明暗判定手段290は明暗判定処理を終了する。
図31は、明暗判定手段290によって取得される、配列p1内の各画素(つまり抽出された輪郭画素の系列の各画素)が近傍の画素と比較して明るいか暗いかの判定結果を示す配列(配列変数)s1を含む、記憶装置12に格納される輪郭線の群に関する情報のデータ構造の例を示す図である。
変化点検出手段300は、明暗判定手段290によって判定された明暗が対応する輪郭画素の系列で示される輪郭線上で変化する点(以下、変化点と称する)を、当該輪郭画素の系列上で検出する。変化点検出手段300は、検出された変化点を、対応する輪郭線の輪郭画素の系列上での当該変化点の順序数として、記憶装置12に格納する。
以下、変化点検出手段300によって実行される変化点検出処理の手順について図32のフローチャートを参照して説明する。
まず変化点検出手段300は、輪郭線の番号を表す整数変数jを0に初期化する(ステップ3201)。以下の説明では、jで示される輪郭線を輪郭線jと称することもある。
次に変化点検出手段300は、jがN1以上であるかを判定する(ステップ3202)。もし、j≧N1でないならば(ステップ3202のNo)、輪郭線j上の変化点の個数を示す整数の配列変数e(j)に0を代入する(ステップ3203)。次に変化点検出手段300は、s(m1(j)−1)とs(0)とが異なるかを判定する(ステップ3204)。つまり変化点検出手段300は、輪郭線jの終点(最後の画素)及び始点(最初の画素)の明暗が異なるかを判定する。
もし、s(m1(j)−1)≠s(0)であるならば(ステップ3204のYes)、変化点検出手段300は、輪郭線jの始点は終点に対して変化点であると判定する。この場合、変化点検出手段300は、変化点の輪郭線j上における輪郭画素の番号を表す整数の配列変数c(e(j)+r1(j))に0を代入し(ステップ3205)、e(j)を1増やす(ステップ3206)。そして変化点検出手段300は、輪郭線j上の輪郭画素の番号を表す整数変数iを1に初期化する(ステップ3207)。以下の説明では、iで示される輪郭画素を輪郭画素iと称することもある。一方、s(m1(j)−1)≠s(0)でないならば(ステップ3204のNo)、変化点検出手段300はステップ3207にジャンプしてiを1に初期化する。
次に変化点検出手段300は、前述のステップ3002と同様にiがM1以上であるかを判定する(ステップ3208)。もし、i≧M1でないならば(ステップ3208のNo)、変化点検出手段300は、s(i−1)とs(i)とが異なるかを判定する(ステップ3209)。つまり変化点検出手段300は、輪郭線j上のi−1番目の画素及びi番目の画素の明暗が異なるかを判定する。
もし、s(i−1)≠s(i)であるならば(ステップ3209のYes)、変化点検出手段300は、i番目の画素は変化点であると判定し、c(e(j)+r1(j))にiを代入し(ステップ3210)、e(j)を1増やす(ステップ3211)。次に変化点検出手段300はiにi+1を代入し(ステップ3212)、ステップ3208に戻る。これに対し、s(i−1)≠s(i)でないならば(ステップ3209のNo)、つまりs(i−1)=s(i)であるならば、変化点検出手段300はi番目の画素は変化点でないと判定する。この場合、変化点検出手段300は、ステップ3212にジャンプしてiにi+1を代入し、ステップ3208に戻る。
ステップ3208において変化点検出手段300は、i≧m1(j)であるかを判定する。もし、i≧m1(j)であるならば(ステップ3208のYes)、変化点検出手段300はjにj+1を代入し(ステップ3213)、ステップ3202に戻る。ステップ3202において変化点検出手段300は、j≧N1であるかを判定する。もし、j≧N1であるならば(ステップ3202のYes)、変化点検出手段300は変化点検出処理を終了する。
図33は、変化点検出手段300によって取得される、各輪郭線上の変化点の個数を表す配列e及び当該変化点の輪郭画素の番号を表す配列cを含む、記憶装置12に格納される輪郭線の群に関する情報のデータ構造の例を示す図である。
輪郭線修正手段310は、変化点検出手段300によって検出された変化点において輪郭線を繋ぎ直す。そして輪郭線修正手段310は、繋ぎ直された輪郭線を構成する画素(輪郭画素)の系列の集合S2を取得する。輪郭線修正手段310は、上述の輪郭線の繋ぎ直し(つまり修正)のために、輪郭線切断手段311及び輪郭線再接続手段312を備えている。
輪郭線切断手段311は、変化点検出手段300によって検出された変化点において対応する輪郭画素の系列(つまり輪郭線)を切断する。輪郭線切断手段311は、この輪郭線の切断により、切断された輪郭線の断片を構成する輪郭画素の系列を取得する。取得された、輪郭線の断片を構成する輪郭画素の系列は、記憶装置12に格納される。
輪郭線再接続手段312は、輪郭線切断手段311によって取得された輪郭線の1つまたは複数の断片(つまり1つ以上の断片)を構成する輪郭画素の系列(1つ以上の系列)における端点を繋ぎ合わせる。この接続(つまり断片の接続)により、輪郭線再接続手段312は、接続(修正)された輪郭線を構成する画素の系列を取得する。
第3の実施形態では、輪郭線の断片を構成する輪郭画素の系列に含まれる画素(輪郭画素)の座標が要素数M1の配列p8に格納される。また、輪郭線の断片を構成する画素の系列に含まれる当該画素の数(輪郭画素数)が整数の配列m8に、当該系列(つまり断片)の始点のp8中での位置(開始位置)が整数の配列r8に格納される。図34は、輪郭線の断片を構成する輪郭画素の系列を含む、記憶装置12に格納される輪郭線の群に関する情報のデータ構造の例を示す図である。
次に、輪郭線切断手段311によって実行される輪郭線切断処理の手順について、図35乃至図37のフローチャートを参照して説明する。
まず輪郭線切断手段311は、切断中の輪郭線の番号を表す変数jを0に初期化する(ステップ3501)。このステップ3501において輪郭線切断手段311は、kを0に、N8を0に、それぞれ初期化する。kは輪郭線の切断された断片の始点の、当該輪郭線の輪郭画素の系列における位置(番号)を表す整数変数、N8は配列p8の要素数を表す整数変数である。
次に輪郭線切断手段311は、jがN1以上であるかを判定する(ステップ3502)。もし、j≧N1でないならば(ステップ3502のNo)、輪郭線切断手段311はe(j)が0であるかを判定する(ステップ3503)。つまり輪郭線切断手段311は、輪郭線j上の変化点の個数が0であるかを判定する。
もし、e(j)=0であるならば(ステップ3503のYes)、輪郭線切断手段311はm8(N8)にm1(j)を、r8(N8)にkを、iに0を、それぞれ代入する(ステップ3504,3505,3506)。
次に輪郭線切断手段311は、iがm1(j)以上であるかを判定する(ステップ3507)。もし、i≧m1(j)でないならば、輪郭線切断手段311はp8(k).xにp1(k).xを、p8(k).yにp1(k).yを、それぞれ代入する(ステップ3508,3509)。つまり輪郭線切断手段311は、輪郭線j上のk番目の画素の座標を配列p1から配列p8にコピーする。次に輪郭線切断手段311は、i及びkを、それぞれ1増やす(ステップ3510)。
すると輪郭線切断手段311はステップ3507に戻り、iがm1(j)以上であるかを判定する。もし、i≧m1(j)であるならば(ステップ3507のYes)、輪郭線切断手段311はN8を1増やし(ステップ3511)、しかる後にjを1増やす(ステップ3512)。そして輪郭線切断手段311はステップ3502に戻る。
一方、ステップ3503で、e(j)=0でないと判定されたならば、輪郭線切断手段311はステップ3601に進む。ステップ3601において輪郭線切断手段311は、c(r1(j))が0であるかを判定する。もし、c(r1(j))=0であるならば(ステップ3601のYes)、輪郭線切断手段311は、輪郭線上で最後に切り出す断片の直前の変化点の輪郭線上での番号を表す整数変数eaにe(j)−1を代入する(ステップ3602)。そして輪郭線切断手段311は、後述するステップ3706に進む。
これに対し、c(r1(j))=0でないならば(ステップ3601のNo)、輪郭線切断手段311はsi2にc(e(j)−1)を代入する(ステップ3603)。また輪郭線切断手段311は、ei3にc(0)−1を、eaにe(j)−2をそれぞれ代入する(ステップ3604,3605)。
輪郭線切断手段311は、ステップ3605を実行すると、m8(N8)に0を代入し、iにsi2を、それぞれ代入する(ステップ3606,3607)。次に輪郭線切断手段311は、ステップ3507と同様に、iがm1(j)以上であるかを判定する(ステップ3608)。
もし、i≧m1(j)でないならば(ステップ3608のNo)、輪郭線切断手段311は、p8(k).xにp1(r1(j)+i).xを、p8(k).yにp1(r1(j)+i).yを、それぞれ代入する(ステップ3609,3610)。また輪郭線切断手段311は、i、k及びm8(N8)を、それぞれ1増やす(ステップ3611)。
すると輪郭線切断手段311はステップ3608に戻り、iがm1(j)以上であるかを判定する。もし、i≧m1(j)であるならば(ステップ3608のYes)、輪郭線切断手段311はステップ3701に進む。ステップ3701において輪郭線切断手段311は、iに0を代入する。
次に輪郭線切断手段311は、iがei3より大きいかを判定する(ステップ3702)。もし、i>ei3でないならば(ステップ3702のNo)、輪郭線切断手段311は、p8(k).xにp1(r1(j)+i).xを、p8(k).yにp1(r1(j)+i).yを、それぞれ代入する(ステップ3703,3704)。次に輪郭線切断手段311は、i、k及びm8(N8)をそれぞれ1増やし(ステップ3705)、ステップ2702に戻る。これに対し、i>ei3であるならば(ステップ3702のYes)、輪郭線切断手段311はステップ3706に進む。
ステップ3706において輪郭線切断手段311は、新しく切り出す輪郭線の断片の直前の変化点の輪郭線上での番号を表す整数変数aに0を代入する。次に輪郭線切断手段311は、aがeaより大きいかを判定する(ステップ3707)。もし、a>eaであるならば(ステップ3707のYes)、輪郭線切断手段311はステップ3512にジャンプする。すると輪郭線切断手段311は、jを1増やして(ステップ3512)、ステップ3502に戻る。
一方、a>eaでないならば(ステップ3707のNo)、輪郭線切断手段311は、iにc(a)を、ei4にc(a)+e(a)−1を、それぞれ代入する(ステップ3708)。次に輪郭線切断手段311は、iがei4よりも大きいかを判定する(ステップ3709)。もし、i>ei4であるならば(ステップ3709のYes)、輪郭線切断手段311は、a及びN8を、それぞれ1増やし(ステップ3710)、ステップ3707に戻る。
これに対し、i>ei4でないならば(ステップ3709のNo)、輪郭線切断手段311は、p8(k).xにp1(r1(j)+i).xを、p8(k).yにp1(r1(j)+i).yを、それぞれ代入する(ステップ3711,3712)。また輪郭線切断手段311は、i、k及びm8(N8)を、それぞれ1増やす(ステップ3713)。そして輪郭線切断手段311は、ステップ3709に戻る。
前述したように輪郭線切断手段311は、ステップ3512においてjを1増やすと、ステップ3502に戻る。もし、jを1増やした結果、i≧N1となったならば(ステップ3502のYes)、輪郭線切断手段311は輪郭線切断処理を終了する。
以上に述べた輪郭線切断手段311の処理により,前記輪郭線抽出手段210で抽出された輪郭線の各々が前記変化点検出手段300で検出した変化点の各々を境に切断した断片が生成され,配列変数p8,m8及びr8に格納される.
図38は、図26に示した輪郭線(つまり、図24に示した入力画像から抽出された輪郭線)が輪郭線切断手段311によって切断された断片の輪郭画素の系列を含む全ての輪郭画素の系列をまとめて示す図である。なお、図38において、図26と同一の輪郭画素の系列には、同一参照番号を付してある。図38には、図26に示した輪郭画素の系列2601から構成される輪郭線が切断された2つの断片の輪郭画素の系列2601a及び2601bと、輪郭画素の系列2602から構成される輪郭線が切断された2つの断片の輪郭画素の系列2602a及び2602bとが示されている。また、図38には、図26に示した輪郭画素の系列2603乃至2608も示されている。
図39は、図38に示した輪郭画素の系列のうちの系列2601a,2601b,2602a,2602b,2603及び2604を個別に示す図であり、図40は、図38に示した輪郭画素の系列のうちの系列2605乃至2608を個別に示す図である。
輪郭線再接続手段312は、前述したように、輪郭線切断手段311によって取得された輪郭線の1つ以上の断片を構成する輪郭画素の系列の端点を繋ぎ合わせる(つまり接続する)ことにより、修正された輪郭線を構成する画素の系列を取得する。取得された輪郭線を構成する画素の系列の集合S2は記憶装置12に格納される。
輪郭線再接続手段312が輪郭線の断片同士を接続するためには、記憶装置12に格納された順に各断片の後ろに接続すべき断片を決定する必要がある。以下、輪郭線再接続手段312によって実行される接続断片決定処理の手順について図41及び図42のフローチャートを参照して説明する。
まず輪郭線再接続手段312は、j=0,…,N8−1のそれぞれについて、F(j)に0を代入する(ステップ4101)。ここで、Fは要素数N8の整数の配列であり、F(j)は配列Fのj番目の要素を示す。次に輪郭線再接続手段312は、整数変数k及びjを、それぞれ0を代入する(ステップ4102,4103)。
次に輪郭線再接続手段312は、jがN8以上であるかを判定する(ステップ4104)。この例のようにj≧N8でないならば(ステップ4104のNo)、輪郭線再接続手段312はF(j)が0であるかを判定する(ステップ4105)。この例のようにF(j)=0であるならば(ステップ4105のYes)、輪郭線再接続手段312は、r8(j)の示す画素を始点とするj番目の断片の隣接画素の系列をp8から取得し、当該j番目の断片の隣接画素の系列を集合S2のk番目の系列として当該集合S2に格納する(ステップ4106)。ここで、j番目の断片の隣接画素の系列を構成する隣接画素の個数は、m8(j)で示され、集合S2に格納される隣接画素の系列は、p8(r8(j))の位置から始まるm8(j)個の画素から構成される。
次に輪郭線再接続手段312は、j番目の断片の隣接画素の系列が集合S2に既に格納済みであることを示すために、F(j)に1を代入する(ステップ4107)。次に輪郭線再接続手段312は、整数変数flagに0を代入する(ステップ4108)。一方、F(j)=0でないならば(ステップ4105のNo)、つまりF(j)=1であるならば、輪郭線再接続手段312はj番目の断片の隣接画素の系列が集合S2に既に格納済みであると判断する。この場合、輪郭線再接続手段312は、整数変数flagに0を代入する(ステップ4108)。
輪郭線再接続手段312は、整数変数flagに0を代入すると(ステップ4108)、j2=0,…,N8−1のそれぞれについて、score(j2)に0を代入する(ステップ4109)。scoreは要素数N8の実数の配列であり、score_(j2)は、配列scoreのj2番目の要素を示す。
次に輪郭線再接続手段312は、実数変数score_maxに−1を、整数変数j2_optに0を、それぞれ代入する(ステップ4110)。そして輪郭線再接続手段312は整数変数j2に0を代入する(ステップ4111)。
次に輪郭線再接続手段312は、j2がN8以上であるかを判定する(ステップ4201)。この例のようにj2≧N8でないならば(ステップ4201のNo)、輪郭線再接続手段312は、F(j2)=0で、且つs1(r8(j2))=s1(r8(j))で、且つj2番目の断片上の最初の輪郭画素とj番目の断片の最後の輪郭画素とのユークリッド距離ud(j2,j)が予め定められた正の定数εより小さいかを判定する(ステップ4202)。ここで、s1(r8(j2))=s1(r8(j))であること、つまりj2番目の断片の始点の明暗がj番目の断片の始点の明暗と一致することは、j2番目の断片上の輪郭画素を近傍の輪郭画素と比較した明暗がj番目の断片上のそれと一致することを示す。また、ud(j2,j)<εは、j2番目の断片上の端点(例えば始点)とj番目の断片の端点(例えば終点)の位置が予め定められた範囲(つまり、近傍として定義される範囲)にあることを示す。
もし、ステップ4202の判定がYesであるならば、輪郭線再接続手段312は、j番目の断片の最後の輪郭画素(つまり終点)から最後からδ番目の輪郭画素へのベクトルVAを算出する(ステップ4203)。δは予め定められた自然数である。また輪郭線再接続手段312は、j2番目の断片の最初の輪郭画素(つまり始点)から最初からδ番目の輪郭画素へのベクトルVBを算出する(ステップ4204)。
次に輪郭線再接続手段312は、ベクトルVAとベクトルVBとがなす角度θを余弦定理により算出する(ステップ4205)。ここでは、角度θの単位は「度」であるとする。次に輪郭線再接続手段312は、角度θがscore_maxよりも大きいかを判定する(ステップ4206)。
ステップ4209の判定は、ベクトルVAとベクトルVBとがなす角度θが、j2がそれぞれ0,…,N8−1番目の断片のうちj番目の断片に対して最も大きい(つまり180度に最も近い)断片を検出するために、ステップ4202の示す条件を満たす断片について繰り返し行われる。j番目の断片に対してベクトルVAとベクトルVBとがなす角度θが最も大きい断片がj2_opt番目の断片である場合、j2_opt番目の断片の端点(ここでは始点)が、0,…,N8−1番目の断片の端点の中で、j番目の断片の端点(ここでは終点)に対して最も正対しているといえる。
もし、θ>score_maxであるならば(ステップ4206のYes)、輪郭線再接続手段312は、score_maxにθを、整数変数j2_optにj2を代入する(ステップ4207)。次に輪郭線再接続手段312はflagに1を代入し(ステップ4208)、しかる後にj2を1増やす(ステップ4209)。flag=1は、j番目の断片に接続されるべき断片が存在することを示す。整数変数j2_opt=j2は、j番目の断片に接続されるべき断片として、断片0,…,j2のうちの断片j2が最適であることを示す。
一方、θ>score_maxでないならば(ステップ4206のNo)、輪郭線再接続手段312はステップ4209にジャンプしてj2を1増やす。また、ステップ4202の判定がNoの場合にも、輪郭線再接続手段312はステップ4209にジャンプしてj2を1増やす。
輪郭線再接続手段312は、j2を1増やすと(ステップ4209)、ステップ4201に戻り、j2≧N8であるかを判定する。もし、j2≧N8であるならば、輪郭線再接続手段312は、j番目の断片に接続されるべき断片をj2=0,…,N8−1についてチェックし終えたと判断する。
そこで輪郭線再接続手段312は、flagが1であるかを判定する(ステップ4210)。もし、flag=1であるならば(ステップ4210のYes)、輪郭線再接続手段312は、集合S2のk番目の輪郭画素の系列(の示す輪郭線の断片)の末尾にj2_opt番目の断片の輪郭画素の系列を追加する(ステップ4211)。
このように、k番目の輪郭線の断片へのj2_opt番目の断片の追加は、当該j2_opt番目の断片に含まれる輪郭画素の系列を当該輪郭線の輪郭画素の系列に追加することで行われる。これにより、k番目の輪郭線の断片にj2_opt番目の断片が繋ぎ合わされたことになる。ここで、j2_opt番目の断片の輪郭画素の系列は、p8に格納されている断片の輪郭画素の系列のうち、輪郭画素r8(j2_opt)の示す画素を始点とする断片の輪郭画素の系列であり、m8(j)で示される個数の輪郭画素から構成される。
輪郭線再接続手段312は、k番目の輪郭線の断片にj2_opt番目の断片を追加すると(ステップ4211)、F(j2_opt)に1を代入する(ステップ4212)。次に輪郭線再接続手段312は、kを1増やし(ステップ4112)、jを1増やす(ステップ4113)。一方、flag=1でないならば(ステップ4210のNo)、輪郭線再接続手段312はステップ4112にジャンプしてkを1増やし、jを1増やす(ステップ4113)。輪郭線再接続手段312は、jを1増やすと(ステップ4113)、ステップ4104に戻り、jがN8以上であるかを判定する。もし、j≧N8であるならば(ステップ4104のYes)、輪郭線再接続手段312は輪郭線再接続処理を終了する。
図43は、図38に示した輪郭画素の系列の群に含まれている切断された断片の輪郭画素の系列の再接続後の全ての輪郭画素の系列をまとめて示す図である。なお、図43において、図38と同一の輪郭画素の系列には、同一参照番号を付してある。図43には、図38に示した断片の輪郭画素の系列2601aの始点及び終点が接続された輪郭線の輪郭画素の系列4301及び図38に示した断片の輪郭画素の系列2601bの始点及び終点が接続された輪郭線の輪郭画素の系列4302が示されている。
系列4301及び4302は、それぞれ断片の輪郭画素の系列2601a及び2601bを、上記ステップ4106で集合S2に格納することにより生成される。系列2601a及び2601bの末尾に別の断片の輪郭画素の系列が追加されない場合、つまりステップ4211が実行されない場合、系列2601a及び2601bが集合S2に格納されるだけで、系列2601aの両端、及び系列2601bの両端が、それぞれ繋がれたことになる。
図43にはまた、図38に示した断片の輪郭画素の系列2602aの始点及び終点が接続された輪郭線の輪郭画素の系列4303及び図38に示した断片の輪郭画素の系列2602bの始点及び終点が接続された輪郭線の輪郭画素の系列4304が示されている。系列4303及び4304は、それぞれ断片の輪郭画素の系列2602a及び2602bを、上記ステップ4106で集合S2に格納することにより生成される。図43には更に、図38に示した輪郭画素の系列2603乃至2608も示されている。
図44は、図43に示した輪郭画素の系列のうちの系列4301乃至4304、2603及び2604を個別に示す図であり、図45は、図43に示した輪郭画素の系列のうちの系列2605乃至2608を個別に示す図である。
なお、輪郭線の断片を構成する輪郭画素の系列におけるそれぞれ1つまたは複数の端点を繋ぎ合わせる手法は、近傍の画素と比較した明暗が一致しており、端点が最も正対している断片同士を繋ぎ合せる手法ならば、第3の実施形態で適用した方法に限らずいかなる方法で行ってもよい。
また、輪郭線再接続手段312が、M2にM1を、N2にN8を、それぞれ代入し、j=1,…,N8について、r2(j)にr8(j)を、m1(j)にr8(j)を、それぞれ代入してもよい。つまり、輪郭線再接続手段312が、輪郭線切断手段311によって得られた断片の両端を単純に繋いだものを新しい輪郭線としてもよい。
さて、輪郭線再接続手段312による輪郭線再接続処理が終了すると、選択手段222は、輪郭線修正手段310によって取得された集合S2から、第1の実施形態における選択手段220と同様に1つまたは複数の輪郭画素の系列を選択することにより、当該選択した輪郭画素の系列の集合S4を抽出する。
第3の実施形態によれば、輪郭画素の系列で示される輪郭線上で変化する点(変化点)を検出して、当該変化点において輪郭線を繋ぎ直すことにより、光の反射などに起因する白飛びに頑健な領域検出を実現することができる。
[第4実施形態]
次に、第4の実施形態について説明する。
第4の実施形態に係る領域検出装置のハードウェア構成は、第1の実施形態と同様である。但し、領域検出ソフトウェア121の構成は第1の実施形態と異なる。
図46は第4の実施形態に係る領域検出装置の機能構成を示すブロック図である。図46において、図2、図15または図23と等価な構成要素には同一参照番号を付して、当該等価な構成要素についての詳細な説明は省略する。
図46に示す領域検出装置は、図2、図15及び図23に示した領域検出装置と同様に、輪郭線抽出手段210及び領域出力手段230を備えている。図46に示す領域検出装置はまた、図23に示した領域検出装置と同様に、明暗判定手段290、変化点検出手段300及び変化点検出手段300を備えている。図46に示す領域検出装置は更に、図15に示した領域検出装置内の凸包抽出手段280に相当する凸包抽出手段281を備えると共に、図15に示した領域検出装置と同様に選択手段221を備えている。
凸包抽出手段281は、輪郭線修正手段310(輪郭線再接続手段312)によって取得された集合S2に含まれる輪郭画素の系列の各々の凸包を抽出し、当該凸包を構成する画素の系列の集合S3を取得する。凸包抽出手段281は、凸包抽出の対象となる輪郭画素の系列の集合が集合S1ではなくて集合S2である点を除き、第2の実施形態で適用される凸包抽出手段280と同様である。
図46に示す領域検出装置の特徴は、第3の実施形態で適用された図23に示す領域検出装置の構成において、輪郭線修正手段310及び領域出力手段230の間に、第2の実施形態で適用された凸包抽出手段280及び選択手段221に対応する、凸包抽出手段281及び選択手段221を追加した点にある。
第2の実施形態及び第3の実施形態から明らかなように、第4の実施形態によれば、白飛びに頑健な領域検出を実現すると共に、枠と枠内の文字等が接触している場合における枠に囲まれた領域の検出性能を向上することができる。
以上説明した少なくとも1つの実施形態によれば、白飛びに頑健な領域検出を実現できる領域検出装置、領域検出方法及びプログラムを提供することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。