以下に、添付図面を参照して、本発明に係る枠線認識手法の好適な実施例を詳細に説明する。なお、以下では、本発明に係る枠線認識手法の概要について図1を用いて説明した後に、本発明に係る枠線認識手法を適用した枠線認識装置についての実施例を図2〜図19を用いて説明する。
まず、本発明に係る枠線認識手法の概要について図1を用いて説明する。図1は、本発明に係る枠線認識手法の概要を示す図である。なお、同図では、手書き文字を含んだ帳票をスキャンした入力画像1から枠線を検出し、最終的に、枠線で囲まれた領域(以下、「枠線内領域」と記載する)を確定するまでの手順を示している。
なお、「罫線」という用語は、入力画像1から抽出された直線を指す場合に用い、「枠線」という用語は、後述する経路探索によって検出された閉じた経路を指す場合に用いることとする。また、入力画像は、あらかじめ2値化されているものとする。
図1に示すように、本発明に係る枠線認識手法は、入力画像1から検出した水平罫線および垂直罫線の各交点について、交点に属する罫線の向きを示す腕ベクトルを生成するとともに、生成した腕ベクトルに基づいて経路探索を行う。また、本発明に係る枠線認識手法は、経路探索で腕ベクトルが用いられたか否かを示すフラグである通過済フラグがすべて通過済みとなったことを条件として経路探索を終了する。
具体的には、本発明に係る枠線認識手法では、まず、入力画像1から「交点情報」を検出する(図1の(A)参照)。ここで、交点情報は、各交点が、左、右、上および下のうちどの向きの腕ベクトルを有するかを示す「交点種別」と、各腕ベクトルが経路探索で用いられたこと、すなわち、通過済みとなったことを示す「通過済フラグ」とを含んだ情報である。
なお、以下では、「交点種別」および「通過済フラグ」をそれぞれ4ビットで表現する場合について説明する。また、「交点種別」は、腕ベクトルが存在する場合には「1」、存在しない場合には「0」とし、「通過済フラグ」は、通過済みである場合には「1」、未通過の場合には「0」として説明するが、他の表現方式をとっても構わない。
また、図1に示す、「左」、「右」、「上」および「下」は、「左向きの腕ベクトル」、「右向きの腕ベクトル」、「上向きの腕ベクトル」および「下向きの腕ベクトル」にそれぞれ対応している。なお、各交点に示した「黒矢印」は、該当する腕ベクトルが未通過である旨を、「白抜き矢印」は、該当する腕ベクトルが通過済みである旨を、それぞれ示している。
図1の(A)に示したように、交点gは、水平罫線と垂直罫線とが接する右上のコーナーであるので、「交点種別」における「左」および「下」が「1」、「右」および「下」が「0」となる。また、「通過済みフラグ」は、初期値としてすべて「0」が設定されている。
ここで、本発明に係る枠線認識手法は、交点の腕ベクトルをすべて通過したことを、上記した「通過済フラグ」を介して検出した場合に、経路探索を終了する点に特徴がある。このため、本発明に係る枠線認識手法では、交点の集合によって構成される閉領域の外周を探索する「外周経路探索」と、内周を探索する「内周経路探索」との周回方向を逆方向としている。
そして、図1の(B)に示したように、交点a、d、e、g、h、c、bおよびaという閉じた外周経路が検出された場合には、通過した腕ベクトルに対応する通過済みフラグが「1」へ更新される。たとえば、交点gの通過済みフラグの「下」は、「0」から「1」へ更新される。
また、図1の(C)に示したように、交点a、b、f、e、dおよびaという閉じた内周経路、交点g、e、f、b、c、hおよびgという閉じた内周経路がそれぞれ検出されると、通過した腕ベクトルに対応する通過済みフラグが「1」へ更新される。たとえば、交点gの通過済みフラグの「左」は、「0」から「1」へ更新される。この段階で、交点gの交点種別「1001」と、通過済みフラグ「1001」とが一致した状態となる。
そして、図1の(D)に示したように、他のすべての交点についても同様に、交点種別と通過済みフラグとが一致した状態となった場合に、本発明に係る枠線認識手法は、経路探索を終了し、検出した枠線で囲まれた枠線内領域を確定する。
このように、本発明に係る枠線認識手法では、交点の腕ベクトルに従って経路探索を行うとともに、各腕ベクトルに対応したフラグがすべて通過済みとなった場合に、経路探索を終了して枠線内領域を確定する。したがって、本発明に係る枠線認識手法によれば、枠線によって囲まれた様々な形状の対象領域を確実に認識することができる。
以下では、図1を用いて説明した枠線認識手法を適用した枠線認識装置についての実施例を説明する。なお、以下では、画像読取装置(たとえば、スキャナ装置)から入力画像を取得する枠線認識装置について説明するが、スキャナ装置を含んだ枠線認識装置を構成することとしてもよい。また、枠線認識装置にいわゆるOCR(Optical Character Reader)機能を持たせ、認識した枠線内領域に対応する画像の文字認識を行わせることとしてもよい。
図2は、本実施例に係る枠線認識装置10の構成を示すブロック図である。同図に示すように、枠線認識装置10は、画像読取装置20と接続されており、画像読取装置20が読み取った画像(たとえば、帳票をスキャンした画像)を取得する。なお、画像読取装置20としては、たとえば、いわゆるスキャナ装置を用いることができる。
枠線認識装置10は、制御部11と、記憶部12とを備えており、制御部11は、画像取得部11aと、罫線抽出部11bと、交点抽出部11cと、グループ化部11dと、枠線抽出部11eと、枠線内画像抽出部11fと、破線検出部11gと、交点補正部11hとをさらに備えている。また、記憶部12は、入力画像12aと、交点情報12bと、枠線情報12cと、枠線内画像12dとを記憶する。
制御部11は、枠線認識装置10の全体制御および枠線抽出処理を行う制御部である。また、画像取得部11aは、画像読取装置20から、手書き文字を含んだ帳票をスキャンした入力画像1(図1参照)を取得し、2値化処理を行ったうえで、記憶部12へ入力画像12aとして記憶させる処理を行う処理部である。なお、入力画像1が2値化画像である場合には、2値化処理を行う必要はない。
罫線抽出部11bは、記憶部12の入力画像12aから罫線を抽出する処理を行うとともに、抽出した罫線に関する情報を交点抽出部11cへ渡す処理を行う処理部である。ここで、罫線抽出部11bによって行われる罫線抽出処理の内容について図3を用いて説明しておく。
図3は、罫線抽出処理の説明図である。まず、図3の(A)に示したのは、入力画像12a(原画像)を、1/16最小値圧縮した圧縮画像31である。ここで、「1/16最小値圧縮」とは、隣接する4画素×4画素の画素グループを1つの代表画素へ置き換える際に、画素グループに属する画素の画素値の最小値を、代表画素の画素値とする処理を指す。つまり、16画素中に1つでも画素値0(黒に対応)の画素があれば、代表画素は画素値0となる。そして、罫線抽出部11bは、かかる圧縮画像31を罫線の抽出対象として用いる。
つづいて、図3の(B)に示したように、罫線抽出部11bは、図3の(A)に示した圧縮画像31から、水平罫線32および垂直罫線33をそれぞれ抽出する。ここで、水平罫線32としては、所定方向にそれぞれ連続する黒画素群(以下、「ランレン」と記載する)のうち、水平方向のもの、かつ、所定長以上のものが抽出される。
また、垂直罫線33としては、垂直方向のランレンのうち、所定長以上のものが抽出される。なお、図3の(B)に示した場合では、水平罫線32が4つ、垂直罫線33が3つ、それぞれ抽出されている。
ここで、所定長以上のランレンを水平罫線32あるいは垂直罫線33として検出する処理を行う場合、平行する2本の罫線が近接していると、1本の罫線として誤検出してしまうおそれがある。このため、罫線抽出部11bは、図3の(C)に示した「罫線方向圧縮」を行うことで、近接した2本の罫線を1本の罫線として誤検出してしまう問題を回避する。
水平罫線32の場合を例にあげて説明すると、図3の(C)に示したように、検出された罫線のラベリングを行ったうえで、得られたラベルの外接矩形内で入力画像12a(原画像)を切り出す。そして、切出画像34を、罫線方向(この場合、水平方向)にのみ1/4最小値圧縮する(図3の(C−1)参照)。なお、垂直罫線33の場合には、垂直方向にのみ1/4最小値圧縮すればよい。ここで、1/4最小値圧縮とは、一方向へ隣接する4画素の画素グループを1つの代表画素へ置き換える際に、画素グループに属する画素の画素値の最小値を代表画素値とする処理を指す。
つづいて、罫線方向圧縮画像35でランレンを取得し、所定値以下のランレンを削除する(図3の(C−2)参照)。このようにすることで、入力画像12a(原画像)の対応部分における罫線方向以外のランレンを効率的に削除することができる。そして、残ったランレンをラベリングすることで(図3の(C−3)参照)、近接した2本の罫線を、ラベル36およびラベル37として、すなわち、2本の罫線として検出することができる。
ところで、図3の(C)に示した「罫線方向圧縮」を用いた場合には、入力画像12a(原画像)に「かすれ」や「ひずみ」がある場合に、1本の罫線を複数本の罫線として検出してしまう副作用が発生する可能性がある。このため、罫線抽出部11bは、複数のラベルの結合処理をあわせて行う。
具体的には、図3の(D)に示したように、2つのラベル38およびラベル39の重なり長(lap)および間隔(dist)を、それぞれ取得する。そして、lapが所定の閾値以下であり、かつ、distが所定の閾値以下である場合に、2つのラベルを結合する。なお、lapに関する閾値と、distに関する閾値としては、画像の解像度であるdpi(dot per inch)などに基づいて予め定められた最適な値がそれぞれ用いられるものとする。
このように、罫線抽出部11bは、図3の(C)に示した罫線の分離処理および図3の(D)に示した罫線の結合処理をそれぞれ行い、最終的に残った罫線に対して識別番号を付与する。なお、以下では、罫線に対して付与された識別番号を、「罫線ID」と記載することとする。
たとえば、図3の(E)に示した場合では、水平罫線32については、y座標(図3の(A)参照)が小さい方から順に、罫線IDとして「0」、「1」、「2」および「3」を付与している。また、垂直罫線33については、x座標(図3の(A)参照)が小さい方から順に、罫線IDとして「0」、「1」および「2」を付与している。
なお、図3の(E)では、水平罫線32および垂直罫線33が、図3の(B)のものと同一の場合を例示したが、図3の(C)あるいは(D)で、罫線の追加や削除が行われた場合には、最終的に残った罫線に対して罫線IDが付与されることはいうまでもない。
また、x座標が同じ罫線が複数存在する場合には、y座標が小さい方から昇順の罫線IDを付与し、y座標が同じ罫線が複数存在する場合には、x座標が小さい方から昇順の罫線IDを付与するものとする。なお、罫線IDの付与を降順に行っても構わない。
図2の説明に戻り、制御部11の説明をつづける。交点抽出部11cは、罫線抽出部11bから受け取った罫線に関する情報に基づいて交点情報12bを生成する処理を行う処理部である。また、この交点抽出部11cは、生成した交点情報12bを記憶部12へ記憶させる処理をあわせて行う。
ここで、交点抽出部11cによって行われる交点抽出処理の内容について図4を用いて説明しておく。図4は、交点抽出処理の説明図である。なお、図4の(A)および(B)では、図3の(E)に示した0〜3の4本の水平罫線32および0〜2の3本の垂直罫線33の交点を求める場合について説明する。
図4の(A)に示すように、交点抽出部11cは、罫線抽出部11bから受け取った罫線に関する情報に基づいて交点を抽出し、抽出した交点に対して座標を付与する。ここで、交点抽出部11cは、水平罫線32の罫線ID(v座標に相当)と、垂直罫線33の罫線ID(u座標に相当)とで、罫線の交点に対して罫線IDを用いた座標(u,v)を付与する。
たとえば、図4の(A)に示した交点(1,2)は、u=0の垂直罫線33と、v=2の水平罫線32との交点である。また、交点(2,3)は、u=2の垂直罫線33と、v=3の水平罫線32との交点である。
また、交点抽出部11cは、図4の(B)に示したように、座標を付与した各交点の交点種別を特定する。すなわち、交点抽出部11cは、所定の交点と、u座標またはv座標が同一な直近の交点を検出する処理を行い、直近の交点を検出した場合に、直近の交点へ向かう「腕ベクトル」があると判定する。
たとえば、図4の(B)に示したように、交点(0,0)とu座標が同一で直近の交点は、交点(0,2)であるので、交点(0,0)には下向きの腕ベクトルがあると判定される。なお、交点(0,0)の上側、すなわち、v座標の負方向には交点がないので、交点(0,0)には上向きの腕ベクトルはないと判定される。
また、図4の(B)に示したように、交点(0,0)とv座標が同一で直近の交点は、交点(1,0)であるので、交点(0,0)には右向きの腕ベクトルがあると判定される。なお、交点(0,0)の左側、すなわち、u座標の負方向には交点がないので、交点(0,0)には左向きの腕ベクトルはないと判定される。
このように、交点抽出部11cは、座標が付与されたすべての交点の交点種別、すなわち、4方向の腕ベクトルがそれぞれあるか否かの種別を特定する(図4の(B)で円に囲まれた領域を参照)。ここで、交点種別のパターンは、図4の(C)に示したように、パターンAからパターンIまでの9種類が存在する。
たとえば、図4の(B)に示した交点(0,0)の交点種別41aは、図4の(C)に示したパターンAである。また、図4の(B)に示した交点(2,3)の交点種別41bは、図4の(C)に示したパターンIである。なお、本実施例では、各交点からそれぞれ遠ざかる向きの腕ベクトルを用いる場合について説明するが、各交点へそれぞれ近づく向きの腕ベクトルを用いることとしてもよい。
ここで、各交点種別は、左向きの腕ベクトル(左腕)、右向きの腕ベクトル(右腕)、上向きの腕ベクトル(上腕)および下向きの腕ベクトル(下腕)の各腕ベクトルがあるか否かを示す情報である。したがって、図4の(D)に示したように、各1ビットのフラグ×4方向の計4ビットの情報として表現することができる。
図4の(D)に示したように、パターンEでは、4方向の腕ベクトルをすべて有しているので、4つのフラグをすべて立てた「1111」と表現することができる。また、パターンIでは、左腕および上腕のみを有しているので、「1010」と表現することができる。
なお、交点抽出部11cは、上記した「交点種別」と、交点種別に含まれる腕ベクトルが後述する経路探索で用いられたか否かを示す「通過済フラグ」とを含んだ交点情報12bを生成するが、この交点情報12bの詳細な内容については、図9を用いて後述する。
ところで、図4では、交点抽出部11cによって行われる交点抽出処理のうち、最も基本的な処理、すなわち、水平罫線32と垂直罫線33との交点を、単に交点として抽出する処理について説明した。
しかしながら、角が丸い枠が存在する場合や、枠がかすれている場合、枠に文字が接していたりノイズの影響があったりする場合などには、検出すべき交点を検出できなかったり、本来は交点ではないのに交点として検出してしまったりといった交点の誤検出が発生する。
そこで、交点抽出部11cは、交点の削除や追加といった交点の補正処理をあわせて行う。このため、以下では、交点抽出部11cによって行われる交点補正処理について、図5〜図7を用いて説明する。なお、交点補正処理は、図4の(A)に示した座標付与処理と、図4の(B)に示した交点種別特定処理との間に挿入される形で行われる。
図5は、交点補正処理その1の説明図である。なお、交点補正処理その1は、角が丸い枠を矩形枠と仮定した場合の仮交点を検出し、検出した仮交点をあらたな交点として追加する処理である。なお、交点は「●」で、交点ではない先端は「◇」で、それぞれ示している。
図5の(A)に示したのは角が丸い枠をもつ入力画像12aの一例である。なお、図5の(A)に示した場合では、右下の角のみが角が丸い状態、すなわち、L字部分のみが丸い状態である。
この場合、図3を用いて説明した罫線抽出処理で水平罫線32および垂直罫線33を抽出し、図4を用いて説明した交点抽出処理で交点を抽出すると、図5の(A−1)に示したように、3つの交点(交点51a、交点51bおよび交点51c)のみが検出される。
ここで、図5の(A−1)に示した矩形の上辺および左辺は、それぞれ2つの交点で挟まれた罫線であるが、同じく下辺および右辺は、1つの交点のみしか有しない罫線である。
そこで、交点抽出部11cは、1つの交点のみしか有しない罫線の先端(すなわち、交点ではない先端)を延伸し、他の罫線もしくは他の罫線の先端を延伸した線との交点を求める処理を行う。
具体的には、図5の(A−1)に示した場合、交点抽出部11cは、1つの交点のみしか有しない罫線の先端52aおよび先端52bをそれぞれ延伸し、先端52aおよび先端52bを対角線とする矩形領域である検証領域53を生成する。なお、有効な検証領域53のサイズはあらかじめ定められているものとし、所定のサイズよりも大きい検証領域しか得られなかった場合には、図5の(A−2)以降の処理は行われない。
つづいて、交点抽出部11cは、図5の(A−2)に示したように、検証領域53において、先端52aと先端52bとをつなぐ黒画素が、図5の(A)に示した入力画像12aにあるか否かを検査する。
そして、図5の(A−2)に示した場合には、先端52aと先端52bとをつなぐ黒画素(連結線52c)が検出されたので、図5の(A−3)に示したように、延伸した線同士が交わる点を交点54とし、あらたな交点(交点種別:図4の(C)のパターンI)として追加する。
次に、枠線のT字部分が丸い場合について、図5の(B)および(B−1)〜(B−3)を用いて説明する。図5の(B)に示したのは角が丸い枠をもつ入力画像12aのその他の例である。なお、図5の(B)に示した場合では、逆T字部分が丸い状態である。
この場合、図3を用いて説明した罫線抽出処理で水平罫線32および垂直罫線33を抽出し、図4を用いて説明した交点抽出処理で交点を抽出すると、図5の(B−1)に示したように、5つの交点(交点56a、交点56b、交点56c、交点56dおよび交点56e)が検出される。
ここで、図5の(B−1)に示した垂直罫線33の55a、水平罫線32の55bおよび55cは、1つの交点のみしか有しない罫線である。そこで、交点抽出部11cは、1つの交点のみしか有しない罫線の先端(先端57a、先端57bおよび先端57c)を延伸し、他の罫線もしくは他の罫線の先端を延伸した線との交点を求める処理、すなわち、図5の(A)と同様の処理を行う。このような処理を行うと、図5の(B−2)に示した連結線57dおよび連結線57eが検出され、図5の(B−3)に示したように、交点59a(交点種別:図4の(C)のパターンI)と、交点59b(交点種別:図4の(C)のパターンG)とがあらたな交点候補として見つけられる。
ここで、あらたな交点候補が見つけられた罫線(55a、55bおよび55c)において、総当たりの各ペアで罫線幅方向に重なりがあるか否かが検証され、重なりがある場合には、該当するペア(図5の(B−3)では、罫線55bおよび罫線55c)同士を結合する。
そして、図5の(B−4)に示したように、結合した罫線上の交点59aおよび交点59b(同図の(B−3)参照)を合成し、あらたな交点59c(交点種別:図4の(C)のパターンH)として確定し、追加する。この場合、あらたな交点59cのv座標は、罫線55bまたは罫線55cのいずれかの罫線IDを用いる。また、罫線55b上の交点および罫線55c上の交点についても、交点59cのv座標に用いた罫線IDへ共通化する。
つづいて、交点補正処理その2について説明する。図6は、交点補正処理その2の説明図である。なお、交点補正処理その2は、「かすれ」によって分断された罫線を結合し、先端に交点をもたない罫線に対してあらたな交点を追加する処理である。
なお、図6の(A)には、最終的に結合する線分のペアと、結合しない線分とを模式的に示している。また、図5の場合と同様に、交点は「●」で、交点ではない先端は「◇」で、それぞれ示している。図6の(A)に示したように、交点抽出部11cは、交点ではない先端を有する線分(線分61a〜線分61e)をそれぞれ抽出する。ここで、線分とは、罫線上において交点と交点とで挟まれた部分の直線、または、罫線の先端と先端から最も近い交点とで挟まれた部分の直線のことを指す。
つづいて、交点抽出部11cは、図6の(B)に示したように、先端から所定距離以内に交点がない線分を抽出する(図6の(B−1)参照)。ここでは、線分61a〜線分61dが抽出されている。なお、線分61eは、先端から所定距離以内に交点をもっているので候補から除外される。ここで、所定距離としては、あらかじめ定められた画素数や長さ(たとえば、mm)が用いられる。
また、図6の(B)に示したように、交点抽出部11cは、先端から所定距離以内に交点がない線分(線分61a〜線分61d)の先端を延伸し、延伸した線分の幅方向に重なる最も近い線分を抽出する(図6の(B−2)参照)。
なお、図6の(B)では、線分61aのペアとして線分62aが、線分61bのペアとして線分62bが、線分61cのペアとして線分62cが、それぞれ抽出されている。これに対し、線分61dについては該当する線分がないため、候補から除外される。
つづいて、交点抽出部11cは、図6の(B)で候補として残った線分について、図6(C)に示した結合条件(C−1)〜(C−3)を適用し、すべての結合条件を満たした線分を図6の(B)で抽出したペア線分と結合する。
ここで、結合条件(C−1)は、ペアとなる線分間の距離を結合後の線分長で除した値がα%よりも小さいという条件である。また、結合条件(C−2)は、ペアとなる線分間の距離がβよりも小さいという条件である。さらに、結合条件(C−3)は、結合後の線分から垂直方向に出っ張る黒画素長がγよりも小さいという条件である。
なお、α%は、たとえば、5%であり、βあるいはγについては、あらかじめ定められた画素数や長さ(たとえば、mm)が用いられる。
また、図6の(B)で候補として残った線分61a、線分61bおよび線分61cのうち、線分61cは、結合条件(C−1)あるいは結合条件(C−2)を満たさない例である。また、線分61bは、結合条件(C−3)を満たさない例である。
このようにして、図6に例示した場合では、最終的には、線分61aが、線分62aと結合される。ここで、線分61aを有する罫線上の交点と、線分62aを有する罫線上の交点のu座標を、2つの罫線のうちいずれかの罫線の罫線IDへ共通化する。なお、ここでは、垂直罫線を結合する場合について説明したが、水平罫線を結合する場合にはv座標を共通化することとすればよい。そして、図6に示した線分の結合処理の後、交点補正処理その3、すなわち、1つの交点のみしか有しない線分の削除処理が行われる。
つづいて、交点補正処理その3について説明する。図7は、交点補正処理その3の説明図である。なお、交点補正処理その3は、枠に文字が接した影響や、ノイズの影響で誤検出された交点を削除する処理である。
図7の(A)に示したのは、文字が枠に接した入力画像12aの一例である。図7の(A)に示した場合では、領域71aで、「市」という手書き文字が線分71に接している。また、領域71bで、「1」という手書き文字が線分71に接している。
この場合、図3を用いて説明した罫線抽出処理で水平罫線32および垂直罫線33を抽出し、図4を用いて説明した交点抽出処理で交点を抽出すると、図7の(B)に示したように、線分71と交点をもつ線分として線分72bおよび線分72cが、線分72cと交点をもつ線分として線分72aが、それぞれ抽出される。なお、抽出された交点は、それぞれ「●」で示している。
ここで、交点抽出部11cは、図7の(C)に示したように、交点を1つしか有しない線分である線分72aおよび線分72bを削除する。そして、線分72aを削除した結果、1つの交点のみしか有しない線分となった線分72cを、図7の(D)に示したように、削除する。このように、交点抽出部11cは、1つの交点のみしか有しない線分の削除を、再帰的に行う。これにより、削除された線分が有していた交点は順次、削除されていくことになる。
なお、図7には、枠に文字が接した影響によって誤検出された交点を削除する場合について例示したが、ノイズの影響で誤検出された交点についても同様の手法で削除することができる。
このように、交点抽出部11cは、水平罫線32と垂直罫線33との交点を抽出した後、図5〜図7に示した交点の削除や追加といった交点補正処理を行う。そして、交点抽出部11cは、交点補正処理後の交点について交点情報12bを生成する。
図2の説明に戻り、制御部11の説明をつづける。グループ化部11dは、交点抽出部11cによって記憶部12へ格納された交点情報12bに基づき、交点のグループ分けを行う処理部である。
ここで、グループ化部11dによって行われる交点グループ化処理について図8を用いて説明しておく。図8は、交点グループ化処理の説明図である。なお、図8の(A)には、グループ分けの対象となる交点の例を、図8の(B)には、グループ分けの結果を、それぞれ示している。
グループ化部11dは、座標が付与された交点について、罫線によってつながっているグループを検索する。たとえば、図8の(A)に示した場合では、交点(0,0)、交点(0,4)、交点(3,4)および交点(3,0)が罫線によってつながれているので、これらの交点をグループAとする。
また、図8の(A)に示した場合では、交点(1,1)、交点(1,2)、交点(1,3)、交点(2,3)、交点(2,2)および交点(2,1)が罫線によってつながれているので、これらの交点を1つのグループBとする。
このようにして、グループ化部11dは、交点のグループ分けを行い、図8の(B)に示した結果を得る。なお、図8では、2つのグループを示したが、3つ以上のグループについても同様の手順でグループ分けを行うことができる。
図2の説明に戻り、制御部11の説明をつづける。枠線抽出部11eは、グループ分け済みの交点情報12bに基づき、経路探索を行うことで、閉じた経路である枠線を抽出する処理を行う処理部である。
また、枠線抽出部11eは、抽出した枠線に関する情報である枠線情報12cを、記憶部12へ記憶させる処理をあわせて行う。なお、枠線抽出部11eによって行われる枠線抽出処理の詳細な内容については、図10〜図12を用いて後述する。また、枠線抽出処理につづいて行われる枠線補正処理の詳細な内容については、図14を用いて後述する。
枠線内画像抽出部11fは、枠線抽出部11eによって記憶部12へ記憶させられた枠線情報12cと、入力画像12aとに基づき、枠線によって囲まれた領域である枠線内画像12dを抽出する処理を行う処理部である。また、この枠線内画像抽出部11fは、抽出した枠線内画像12dを記憶部12へ記憶させる処理をあわせて行う。
破線検出部11gは、記憶部12から読み出した枠線内画像12dから、破線を検出する処理を行う処理部である。また、この破線検出部11gは、検出した破線に関する情報を、交点補正部11hへ渡す処理をあわせて行う。
交点補正部11hは、破線検出部11gから受け取った破線に関する情報に基づき、交点情報12bを更新する処理を行うとともに、更新後の交点情報12bに基づいた交点の再グループ分けをグループ化部11dに対して指示する処理を行う処理部である。
すなわち、交点補正部11hは、破線検出部11gによって破線が検出され、検出された破線に基づく交点があらたに検出された場合に、あらたに検出された交点に関する情報で交点情報12bを更新する。
そして、グループ化部11dは、更新後の交点情報12bに含まれる交点を用いてグループ化処理を再度実行する。なお、破線検出部11gによってあらたな破線が検出されなかった段階で、枠線情報12cは確定されることになる。
なお、枠線内画像抽出部11fによる枠線内画像抽出処理の具体的な内容については図15を用いて、破線検出部11gによる破線検出処理および交点補正部11hによる交点補正処理の具体的な内容については図16を用いて、それぞれ後述することとする。
記憶部12は、不揮発性メモリやハードディスクドライブといった記憶デバイスで構成される記憶部であり、入力画像12aと、交点情報12bと、枠線情報12cとを記憶する。入力画像12aは、画像読取装置20から画像取得部11a経由で受け取った画像であり、たとえば、手書き文字を含んだ帳票をスキャンし、2値化した原画像である。
また、交点情報12bは、交点抽出部11cによって生成された情報であり、交点ごとの腕ベクトルの有無を示す交点種別と、各腕ベクトルが枠線抽出部11eによる経路探索で用いられたか否かを示す通過済フラグと、ピクセル座標(たとえば、入力画像の左上を原点とした座標系)を含んだ情報である。なお、交点種別、通過済みフラグおよびピクセル座標を別々の情報として記憶部12へ記憶させることとしてもよい。
ここで、この交点情報12bの一例について図9を用いて説明する。図9は、交点情報12bの一例を示す図である。ここで、図9の(A)には、交点抽出部11cによって生成された直後、すなわち、枠線抽出部11eによる経路探索が行われる以前の交点情報12bの例を示している。また、図9の(B)には、枠線抽出部11eによる経路探索が完了した時点の交点情報12bの例を示している。
なお、図9に示した各交点は、図4の(A)や(B)に示した8個の交点にそれぞれ対応している。なお、以降の説明では、図9に示したように、罫線ID座標(u,v)で特定された交点を、交点a(0,0)、あるいは、単に、交点aのように記載することとする。
図9の(A)に示すように、交点情報12bは、交点の罫線ID座標ごとに、「交点種別」項目、「通過済フラグ」項目およびピクセル座標を有する情報である。たとえば、交点a(0,0)は、左腕、右腕、上腕および下腕の各腕ベクトルのうち、右腕および下腕の腕ベクトルを有するので、有する腕ベクトルに対応するビットが「1」となり、交点種別は「0101」とあらわされる。なお、通過済フラグは「0000」であり、ピクセル座標は(x1、y1)である。
また、交点e(1,1)は、左腕、右腕、上腕および下腕のうち、右腕、上腕および下腕の腕ベクトルを有するので、交点種別は「0111」とあらわされる。なお、通過済フラグは「0000」であり、ピクセル座標は(x5、y5)である。また、その他の交点についても、図9の(A)に示した状態では、通過済フラグはすべて「0000」である。
ところで、枠線抽出部11eによる経路探索が完了した状態では、すべての腕ベクトルがすべて通過済みとなる。したがって、図9の(B)に示した状態では、すべての交点について、交点種別のビット状態と、通過済フラグのビット状態とが一致する。すなわち、枠線抽出部11eは、交点種別および通過済フラグが図9の(B)のように完全一致するまで、経路探索処理を継続する。
このように、交点情報12bは、交点の罫線ID座標ごとに、交点の腕ベクトルの有無を含んだ情報である。なお、交点情報12bを様々な用途に用いることができる。たとえば、見かけ上は異なるフォーマット(たとえば、文字が入りきれずに枠を拡張した場合など)であっても、交点の個数と、交点の交点種別とが同一であることをもって同一のフォーマットとみなすことができる。また、枠内に空白が多い場合には、文字の読み取り後に、該当する枠を交点種別の関係を崩さない程度に縮小して保存することも可能となる。
次に、枠線抽出部11eによって行われる枠線抽出処理の詳細な内容について、図10〜図12を用いて説明する。図10は、経路探索の優先順位を示す図である。なお、同図の(A)には、外周の探索を時計回りで行う場合の優先順位を、同図の(B)には、外周の探索を反時計回りで行う場合の優先順位を、それぞれ示している。
図10の(A)および(B)に示したように、枠線抽出部11eは、外周探索の周回方向と、内周探索の周回方向とを逆方向に行う点に特徴がある。このように、外周探索の周回方向と、内周探索の周回方向とを逆にすることで、すべての腕ベクトルを1回ずつ通過したことをもって、経路探索が完了したことを検出することができる。なお、この点の詳細については、図11および図12を用いて後述する。
図10の(A)に示したように、枠線抽出部11eは、外周の探索を時計回りで行う場合には、内周の探索を反時計回りで行う。また、枠線抽出部11eは、経路探索で通過しようとする交点に未通過の腕ベクトルが複数ある場合には、左折を最も優先し、直進を次に優先し、右折を最も優先しない。
たとえば、通過しようとする交点における未通過の腕ベクトルが進路を左折する向きと、進路を直進する向きと、進路を右折する向きとの3つがある場合には、枠線抽出部11eは、通過しようとする交点で左折する向きの腕ベクトルを選択する。
また、通過しようとする交点における未通過の腕ベクトルが進路を左折する向きと、進路を右折する向きとの2つがある場合には、枠線抽出部11eは、通過しようとする交点で左折する向きの腕ベクトルを選択する。なお、未通過の腕ベクトルが進路を直進する向きと、進路を右折する向きとの2つがある場合には、枠線抽出部11eは、通過しようとする交点を直進する向きの腕ベクトルを選択する。
これに対し、図10の(B)に示したように、枠線抽出部11eは、外周の探索を反時計回りで行う場合には、内周の探索を時計回りで行う。また、枠線抽出部11eは、経路探索で通過しようとする交点に未通過の腕ベクトルが複数ある場合には、右折を最も優先し、直進を次に優先し、左折を最も優先しない。
このように、枠線抽出部11eは、外周を時計回りで探索する場合(図10の(A)の場合)であっても、外周を反時計回りで探索する場合(図10の(B)の場合)であっても、外周探索の場合には、探索経路で囲まれる閉領域の面積がなるべく大きくなるように未通過の腕ベクトルを選択していく。逆に、内周探索の場合には、探索経路で囲まれる閉領域の面積がなるべく小さくなるように未通過の腕ベクトルを選択していく。
次に、枠線抽出部11eによる外周経路探索および内周経路探索の例について図11および図12を用いて説明する。図11は、外周経路探索の一例であり、図12は、内周経路探索の一例である。
なお、図11および図12には、外周経路探索を時計回りで行った場合(図11の矢印111参照)、すなわち、内周経路探索を反時計回りで行った場合(図12の矢印121および矢印123参照)の例を示している。また、図11および図12では、未通過の腕ベクトルを「黒矢印」で、通過済みの腕ベクトルを「白抜き矢印」で、それぞれ示している。
図11の(A)に示したように、外周経路の探索前には、交点a〜交点hの腕ベクトルはすべて「黒矢印」である。まず、枠線抽出部11eは、交点a〜交点hの中から、経路探索の始点となる交点を選択する。たとえば、枠線抽出部11eは、u座標またはv座標が最も大きい交点あるいは最も小さい交点を選択する。
図11の(B−1)に示したのは、外周経路探索の始点として、u座標およびv座標が最も小さい交点である交点aを選択した場合である。この場合、外周経路探索は時計回りであるので、枠線抽出部11eは、交点aの腕ベクトルのうち右向きの腕ベクトルを選択する。ここで、u座標またはv座標が最も大きい交点または小さい交点を選択した場合の外周探索の始点となりうる交点パターン(図4の(C)に対応)と、探索開始時に選択する腕ベクトルの向きとを図11の(C)に示している。図11の(B−1)に示した場合では、周回方向が時計回りであるので、交点パターンがパターンAである交点aから探索を開始する際に選択される腕ベクトルは右向きである。
そして、交点dを通過する場合には、左折および直進ができないので、右折することになり、枠線抽出部11eは、下向きの腕ベクトルを選択する。つづいて、交点eを通過する場合には、進行方向について、左折または直進の選択肢があるが、左折を優先するので、右向きの腕ベクトルを選択する。また、交点gを通過する場合には、選択肢が右折しかないので、下向きの腕ベクトルを選択する。以下、同様に、交点hでは左向きの腕ベクトルを選択し、交点cでは上向きの腕ベクトルを選択する。
また、交点bでは、直進または右折の選択肢があるが、直進を優先するので、上向きの腕ベクトルを選択する。そして、外周経路探索の始点である交点aに戻ったならば、枠線抽出部11eは、交点aを始点とし、交点d、交点e、交点g、交点h、交点cおよび交点bを通過して交点aに戻る経路112を、確定した外周経路として枠線情報12cへ記録する。
なお、上記した外周経路探索で通過した交点については、図11の(B−2)に示したように、選択した腕ベクトルに対応する通過済フラグを更新する。なお、仮に、始点に戻らなかった場合には、異なる腕ベクトルから出発するか、異なる始点から出発すればよい。なお、u座標またはv座標が最も大きい交点、u座標またはv座標が最も小さい交点を始点として選択し、図11の(C)に示した向きで出発すれば必ず始点に戻るが、始点または出発向きを任意に選択すると、始点に戻れない場合がある。ただし、すべての始点またはすべての出発向きで総当たりの探索を行えば、外周経路を必ず見つけることができる。
次に、図11に示した外周経路探索につづいて行われる内周経路探索について図12を用いて説明する。なお、図12に示した内周経路探索では、図11における外周経路探索で通過済みとなった各腕ベクトル(白抜き矢印)を引き継ぐ。なお、探索すべき内周経路が2つあるため、1つめの内周経路探索を図12の(A−1)および(A−2)に、2つめの内周経路探索を図12の(B−1)および(B−2)に、それぞれ示している。
図12の(A−1)に示したように、1つめの内周経路探索では、たとえば、交点aを始点として、矢印121に示すように反時計回りで経路探索が行われる。ここで、内周経路探索の始点とする交点は、外周経路探索後に未通過の腕ベクトルをもつ交点であればいずれの交点でもよく、出発時の腕ベクトルも未通過であれば、いずれの腕ベクトルから出発してもよい。なお、内周経路探索を反時計回りに行う場合には、図11に示した外周経路探索と同様に、左折を最も優先し、直進を次に優先し、右折を最も優先しない(図10の(A)参照)。
まず、図12の(A−1)に示したように、枠線抽出部11eは、交点aの未通過の腕ベクトルである下向きの腕ベクトルを選択する。そして、交点bを通過する場合には、進行方向について左折または直進の選択肢があるが、左折を優先するので、右向きの腕ベクトルを選択する。
また、交点fでは、選択肢が左折しかないので、上向きの腕ベクトルを選択する。そして、交点eでは、左折の選択肢はないが、直進の選択肢はあるので、上向きの腕ベクトルを選択し、交点dでは、選択肢が左折しかないので、左向きの腕ベクトルを選択する。
このようにして、始点である交点aに戻ったならば、枠線抽出部11eは、交点aを始点とし、交点b、交点f、交点eおよび交点dを通過して交点aに戻る経路122を、確定した内周経路として枠線情報12cへ記録する。なお、経路探索時に通過した交点については、図12の(A−2)示したように、選択した腕ベクトルに対応する通過済フラグを更新する。ここで、外周経路探索後の内周探索においては、優先順位に従って選択した未通過の腕ベクトルの向きに進めば必ず始点に戻る。
また、図12の(B−1)に示したように、2つめの内周経路探索では、たとえば、交点gを始点として、矢印123に示すように反時計回りで経路探索が行われる。なお、左折を最も優先し、直進を次に優先し、右折を最も優先しない(図10の(A)参照)点については図12の(A−1)と同様である。
まず、図12の(B−1)に示したように、枠線抽出部11eは、交点gの未通過の腕ベクトルである左向きの腕ベクトルを選択する。そして、交点eを通過する場合には、進行方向について未通過の腕ベクトルの向きは左折しかないので、下向きの腕ベクトルを選択する。
また、交点fでは、選択肢が右折しかないので、左向きの腕ベクトルを選択し、交点bでは、選択肢が左折しかないので、下向きの腕ベクトルを選択する。また、交点cでは、選択肢が左折しかないので、右向きの腕ベクトルを選択し、交点hでは、選択肢が左折しかないので、上向きの腕ベクトルを選択する。
このようにして、始点である交点gに戻ったならば、枠線抽出部11eは、交点gを始点とし、交点e、交点f、交点b、交点cおよび交点hを通過して交点gに戻る経路124を、確定した内周経路として枠線情報12cへ記録する。なお、経路探索時に通過した交点については、図12の(B−2)に示したように、選択した腕ベクトルに対応する通過済フラグを更新する。
次に、枠線抽出部11eによって更新される枠線情報12cの例について図13を用いて説明する。図13は、枠線情報12cの一例を示す図である。
図13に示したように、枠線情報12cは、図8を用いて説明したグループを示す「グループ」項目と、外周経路探索か内周経路探索かの区別を示す「周回種別」項目とを含んでいる。また、枠線情報12cは、確定された枠線の識別子に相当する「枠線番号」項目と、確定した経路を構成する交点を示す「経路」項目とを含んでいる。
なお、図13に示した「枠線番号」項目が「1」の経路は、図11の(B−2)で確定した外周経路に対応している。また、図13に示した「枠線番号」項目が「2」の経路および「3」の経路は、それぞれ、図12の(A−2)および(B−2)で確定した内周経路に対応している。
このため、「枠線番号」項目が「1」の「周回種別」項目は「外周」であり、「枠線番号」項目が「2」および「3」の「周回種別」項目は「内周」である。なお、図13に示した場合では、「グループ」項目はすべて「A」となっているが、図8に示した場合のように、複数のグループが検出された場合には、各グループに対応する識別子がそれぞれ格納されることになる。
次に、枠線抽出部11eによって行われる枠線補正処理の詳細な内容について図14を用いて説明する。ここで、枠線補正処理とは、検出された枠線のうち、「1つの線分でつながる枠線」および「1つの交点でつながる枠線」を、複数の枠線へ分離する処理のことを指す。
図14は、枠線補正処理の説明図である。図14の(A)に示した4つのパターンは、分離すべき枠線の代表的なパターンである。なお、図14の(A)では、罫線のパターンに対してアルファベットなしの符号(たとえば、141)を、検出された枠線に対して「a」付きの符号(たとえば、141a)を付している。
また、図14の(A)では、枠線を接続する部分に対して「b」付きの符号(たとえば、141b)を、分離された枠線に対して「c」または「d」付きの符号(たとえば、141cおよび141d)を、付している。
ここで、図14の(A)に示したように、4つのパターンのうち、左側の2つが、「1つの線分でつながる枠線」に対応するパターンであり、右側の2つが、「1つの交点でつながる枠線」に対応するパターンである。枠線抽出部11eは、図14の(A)に示したパターンを検出した場合に、枠線を分離する処理を行う。
具体的には、枠線抽出部11eは、枠線の中継点となる交点の中に複数回通過している交点がある場合に、分離すべき枠線であると判定する。そして、枠線抽出部11eは、複数回通過している交点に内接する点が一致するか否かに基づき、「1つの線分でつながる枠線」であるか、「1つの交点でつながる枠線」であるかを判定する。
たとえば、図14の(B)に示したように、枠線抽出部11eは、枠線の中継点の中で複数回通過している交点(同図では「交点c」)、すなわち、一致点を検出する(図14の(B−1)参照)。
つづいて、枠線抽出部11eは、一致点にそれぞれ内接する2つの点が一致しているか否かを判定する。ここで、図14の(B)に示した場合では、一致点にそれぞれ内接する2つの点(同図では「交点f」)が一致しているので(図14の(B−2)参照)、枠線抽出部11eは、「1つの線分でつながる枠線」、すなわち、「線分結合」と判定する。
そして、枠線抽出部11eは、枠線を、2つの一致点(同図では「交点c」)の内側と外側との2つの枠線へ分離する。なお、「線分結合」の場合、片方の一致点は削除する(図14の(B−3)参照)。このようにして、枠線抽出部11eは、1つの経路を、「a、b、c、dおよびa」という経路と、「f、g、h、eおよびf」という経路とに分離する。
また、図14の(C)に示したように、枠線抽出部11eは、枠線の中継点の中で複数回通過している交点(同図では「交点c」)、すなわち、一致点を検出する(図14の(C−1)参照)。
つづいて、枠線抽出部11eは、一致点にそれぞれ内接する2つの点が一致しているか否かを判定する。ここで、図14の(C)に示した場合では、一致点にそれぞれ内接する2つの点(同図では「交点e」および「交点g」)が相違しているので(図14の(C−2)参照)、枠線抽出部11eは、「1つの交点でつながる枠線」、すなわち、「点結合」と判定する。
そして、枠線抽出部11eは、枠線を、2つの一致点(同図では「交点c」)の内側と外側との2つの枠線へ分離する(図14の(C−3)参照)。なお、「点結合」の場合、片方の一致点を分離後の枠線でそれぞれ用いる。このようにして、1つの経路を、枠線抽出部11eは、「a、b、c、dおよびa」という経路と、「c、e、f、gおよびc」という経路とに分離する。
次に、枠線内画像抽出部11fによる枠線内画像抽出処理の具体的な内容について図15を用いて説明する。図15は、枠線内画像抽出処理の説明図である。なお、ここでは、図15の(A)に示すように、枠線抽出部11eによって凹型の枠線が抽出された場合について説明する。
図15の(A)に示したように、枠線内画像抽出部11fは、枠線151をすべて含み、かつ、枠線よりも若干大きい領域152を、入力画像12aから切り出す。ここで、枠線を構成する経路の各交点に対応してピクセル座標(たとえば、入力画像の左上を原点とした座標系)が保持されており、かかるピクセル座標を用いて上記した切り出し処理および以降の処理が行われる。なお、同図では、領域152が矩形である場合を示しているが、枠線151の形状に合わせる(たとえば、枠線151が凹型であれば凹型の形状など)こととしてもよい。
つづいて、図15の(B)に示したように、枠線内画像抽出部11fは、所定の傾きを有する直線153を同図に示す矢印の方向へ平行移動させることで、経路を構成する線分との交点を検出する。なお、検出された交点は「●」で示している。
そして、枠線内画像抽出部11fは、直線153上の最初の交点までは「外」、次の交点までは「内」、さらに次の交点までは「外」という判定を交互に繰り返すことで、直線153上の各画素が枠線の「外」に対応するか、「内」に対応するかを決定する。
ここで、入力画像12aから切り出した領域152の各画素は、「黒」か「白」の2値画像であるので、枠線内画像抽出部11fは、「内」の画素についてはそのまま、「外」の画素については「灰色」のような他の画素値へ変更する。このようにして、枠線内画像抽出部11fは、図15の(C)に入力画像として示した画像データを得る。
そして、枠線内画像抽出部11fは、連続する「黒画素」をラベル化するいわゆるラベリング処理を行う(図15の(C−1)参照)。なお、同図に示した場合では、ラベル152aと、ラベル152bと、ラベル152cと、ラベル152dとが得られている。
また、枠線内画像抽出部11fは、図15の(C)に示した入力画像における「灰色」の領域を「黒」、入力画像における「白」または「黒」の領域を「白」とした2値画像である有効領域画像154を得る。ここで、有効領域画像154の「白」画素は、「有効エリア」に対応し、「黒」画素は、「無効エリア」に対応している。
つづいて、枠線内画像抽出部11fは、有効領域画像154の有効エリアを所定回数(n回)収縮させる処理を行う(図15の(C−2)参照)。これにより、有効領域が「痩せた」有効領域画像154aが得られる。なお、このように、有効エリアの収縮処理を行うのは、有効エリアに対応する経路内画像を文字認識対象領域として取り扱うと、枠線自体が含まれる場合があり、枠線を文字と誤認識してしまうおそれがあるためである。
このように、ラベリングが完了した領域152と、有効エリアを収縮させた有効領域画像154aとが得られると、枠線内画像抽出部11fは、両画像を重ね合わせる(図15の(C−3)参照)。そして、有効領域画像154aの無効領域に部分的に含まれるラベルは残し(図15の(C−4)参照)、完全に無効領域に含まれるラベルはノイズとみなして削除する。
具体的には、図15の(C)に示した場合では、無効領域に完全に含まれるラベル152aは削除されるが、その一部が無効領域に含まれるラベル152b、ラベル152cおよびラベル152dは残されている。
このように、枠線内画像抽出部11fは、残存するラベルからなる画像を枠線内画像12dとして、記憶部12へ記憶させる。そして、破線検出部11gは、記憶部12から読み出した枠線内画像12dに含まれるラベルの位置関係などに基づいて破線を検出する処理を行うことになる。
次に、破線検出部11gによって行われる破線検出処理の具体的な内容について図16を用いて説明する。図16は、破線検出処理の説明図である。なお、図16の(A)に示した画像161は、枠線内画像抽出部11fから渡された枠線内画像12dの一例であり、同図において破線で囲まれた領域は、各ラベルを示している。
ここで、図16の(A)に示したように、破線検出部11gは、各ラベルの高さおよび幅を検出する。なお、同図では、ラベル161bの高さh1および幅w1のみを例示しているが、すべてのラベルについて高さおよび幅が検出される。
そして、破線検出部11gは、高さまたは幅のうちいずれかが所定値α以上の場合、または、高さまたは幅のいずれかがαよりも小さい所定値β以上でラベル内の黒画素占有率が所定値以下(たとえば、50%以下)の場合に、該当するラベルを破線候補から削除する。
このようにして、図16の(B)に示したように、ラベル161b、ラベル161cおよび161dは破線候補から削除される。一方、矩形状の9つのラベル161a(図16の(A)参照)は、削除されない。つづいて、破線検出部11gは、図16の(A)に示したx座標が重なり合うラベル同士をグループ化する。ただし、対象となるラベルが2個以下の場合にはグループ化しない。このようにして、グループ162aと、グループ162bとが得られる。
なお、図16の(B)では、垂直方向の破線を検出する場合について示しているが、水平方向の破線を検出する場合には、y座標が重なり合うラベル同士をグループ化することとすればよい。
つづいて、破線検出部11gは、図16の(C)に示したように、グループに含まれる各ラベルの高さ(同図ではh2)、グループ内に含まれる各ラベルの中心ピッチ(同図ではp1、p2およびp3)を、それぞれ検出する。なお、同図では、記載を省略しているが、ラベルの高さおよびピッチの検出は、グループに含まれるすべてのラベルについて行われる。
そして、破線検出部11gは、グループ内の各ラベルの高さ(h2)の総和を枠線内画像161の高さ(h3)で除した値が、所定値以上(たとえば、50%以上)であるグループを破線候補として残し、その他のグループを削除する。また、破線検出部11gは、グループ内のラベルにおける中心ピッチの標準偏差を算出し、算出した標準偏差が所定値以下であるグループを破線候補として残し、その他のグループを削除する。
つづいて、図16の(D)に示したように、破線検出部11gは、枠線内画像161の右辺または左辺から残存しているグループのx座標までの距離(W2)が所定値以下の場合に、該当するグループを削除する。
ここで、枠線内画像161の右辺または左辺に近いグループを削除するのは、文字を入力するための枠として、たとえば、記入可能な大きさの文字よりも狭い枠は不自然であるためである。なお、水平方向の破線を検出する場合には、枠線内画像161の上辺または下辺からの距離を用いて同様の処理を行えばよい。
このようにして、最終的に、図16の(C)に示したグループ162bが、破線として確定される。そして、破線検出部11gは、確定した破線に関する情報を交点補正部11hへ渡し、交点補正部11hは、グループ162bに相当する線分163が、枠線内画像の上辺と交わる点をあらたな交点164とするとともに、下辺と交わる点をあらたな交点165とし、交点情報12bを更新する。また、交点補正部11hは、グループ化部11dへ更新後の交点情報12bに基づいて再度のグループ化処理を行うように指示する。
次に、枠線認識装置10が実行する処理手順について図17〜図19を用いて説明する。図17は、枠線認識装置10が実行する処理手順を示すフローチャートである。図17に示すように、罫線抽出部11bが罫線抽出処理を行うと(ステップS101)、交点抽出部11cは、交点抽出処理を行う(ステップS102)。
なお、ステップS101の罫線抽出処理の詳細な処理手順については図18を用いて、ステップS102の交点抽出処理の詳細な処理手順については図19を用いて、それぞれ後述する。
つづいて、グループ化部11dが、交点のグルーピング(グループ分け)を行うと(ステップS103)、枠線抽出部11eは、1つのグループを選択し(ステップS104)、外周経路探索を行うとともに(ステップS105)、内周経路探索を行う(ステップS106)。
さらに、枠線抽出部11eは、探索経路の分離を行い、分離後の経路を枠線情報12cとして記憶部12へ記憶させる(ステップS107)。そして、枠線抽出部11eは、経路が分離されたか否かを判定し(ステップS108)、経路が分離されなかった場合には(ステップS108,No)、入力画像12aから枠線内画像12dの抽出を行い(ステップS109)、破線検出部11gは、破線の検出処理を行う(ステップS110)。なお、ステップS108にて、経路が分離されたと判定された場合には(ステップS108,Yes)、グループが変更されるため、ステップS103以降の処理を繰り返す。
そして、全グループについての処理が完了したか否かを判定し(ステップS111)、全グループについての処理が終了した場合には(ステップS111,Yes)、ステップS109にて破線が検出されたグループがあるか否かを判定する(ステップS112)。なお、ステップS111の判定条件を満たさなかった場合には(ステップS111,No)、ステップS104以降の処理を繰り返す。
そして、ステップS112にて、破線が検出されたと判定された場合には(ステップS112,Yes)、ステップS103以降の処理を繰り返し、破線の検出がないと判定された場合には(ステップS112,No)、処理を終了する。
次に、図17のステップS101に示した罫線抽出処理の詳細な処理手順について図18を用いて説明する。図18は、罫線抽出処理の処理手順を示すフローチャートである。図18に示すように、罫線抽出部11bは、入力画像12aに対して1/16最小値圧縮を行い(ステップS201)、圧縮後の入力画像12aについて、水平方向および垂直方向のランレンを算出する(ステップS202)。
つづいて、罫線抽出部11bは、所定値以下のランレンを削除するとともに(ステップS203)、残ったランレンに対して罫線方向圧縮を行う(ステップS204)。そして、罫線方向圧縮によってあらたに検出された罫線を含んだすべての罫線を対象としたうえで、水平罫線および垂直罫線それぞれに罫線IDを付与し(ステップS205)、処理を終了する。
次に、図17のステップS102に示した交点抽出処理の詳細な処理手順について図19を用いて説明する。図19は、交点抽出処理の処理手順を示すフローチャートである。図19に示すように、交点抽出部11cは、水平罫線と垂直罫線とが交わる部分を抽出する(ステップS301)。
つづいて、交点抽出部11cは、各交点について交点種別および罫線ID座標を付与し(ステップS302)、交点が1つの線分の結合および削除を行う(ステップS303)。そして、ステップS303の処理で結合および削除後の交点情報12bを生成し(ステップS304)、記憶部12へ記憶させたうえで、処理を終了する。
上述してきたように、本実施例では、交点抽出部が、入力画像から抽出した罫線同士の交点を抽出し、記憶部が、交点に属する各罫線に沿ってこの交点からそれぞれ遠ざかる向きの腕ベクトルと、この腕ベクトルが経路探索に用いられたか否かを示すフラグとを含んだ交点情報を記憶するように枠線認識装置を構成した。
また、本実施例では、枠線抽出部が、所定の交点を始点として腕ベクトルの向きに従った経路探索を行うことによって閉じた経路が検出された場合に、この閉じた経路を枠線として抽出し、閉じた経路の検出に用いられた腕ベクトルに対応するフラグを使用済みへ更新し、すべてのフラグが使用済みへ更新された場合に、経路探索を終了させるように枠線認識装置を構成した。したがって、枠線によって囲まれた様々な形状の対象領域を確実に認識することができる。
なお、上述した実施例では、様々な形状の枠内領域を確実に認識することができるため、検出した枠内領域単位で、文字抽出に用いる閾値を変更するといった処理への応用が容易である。また、上述した実施例では、スキャナ装置(画像読取装置)とは独立した枠線認識装置について説明したが、スキャナ装置を含んだ枠線認識装置を構成することとしてもよい。また、枠線認識装置にいわゆるOCR(Optical Character Reader)機能を持たせ、認識した枠線内領域に対応する画像の文字認識を行わせることとしてもよい。