(57)【特許請求の範囲】
【請求項１】
画像処理装置に、
画素毎の固有の値が３以上の諧調で表現される多値画像を受付け、
前記多値画像に含まれる複数の画素のうちの一の画素に対し、該多値画像に対して該一の画素を含む領域を設定し、
前記領域に含まれる画素群の画素各々について、各々の固有の値から第一の閾値をそれぞれに算出し、
前記一の画素に係る第一の閾値と、該一の画素以外の前記画素群内の他の画素に係る他の第一の閾値とに基づいて、該一の画素に係る第一の閾値以上の値を有する第二の閾値を算出し、
前記第二の閾値と前記一の画素の固有の値とを比較し、
比較結果に基づいて、前記一の画素の固有の値を二値化する処理を実行させることを特徴とする画像処理プログラム。
【請求項２】
前記第二の閾値を算出する処理において、前記画像処置装置に、
前記画素群に含まれる画素各々について算出した複数の前記第一の閾値のうち、前記他の第一の閾値として、最大値を選択させることを特徴とする画像処理プログラム。
【請求項３】
画像処理装置に、
画素毎の固有の値が３以上の諧調で表現される多値画像を受付け、
前記多値画像に含まれる複数の画素のうちの一の画素に対し、該多値画像に対して該一の画素を含む領域を設定し、
前記領域に含まれる画素群の画素各々について、各々の固有の値から第一の閾値をそれぞれに算出し、
前記画素群に含まれる画素各々について算出した複数の前記第一の閾値のうち、最大の値を有する第一の閾値を第二の閾値として選択し、
前記第二の閾値と前記一の画素の固有の値とを比較し、
比較結果に基づいて、前記一の画素の固有の値を、二値化する処理を実行させることを特徴とする画像処理プログラム。
【請求項４】
前記第一の閾値をそれぞれ算出する処理において、前記画像処理装置に、
前記画素群に含まれる画素各々について、該画素を含む他の領域を設定し、
前記他の領域に含まれる他の画素群に含まれる画素各々の固有の値の平均、および前記領域に含まれる前記画素群に含まれる画素各々の固有の値の平均に基づき、前記画素群に含まれる画素各々の前記第一の閾値を算出する処理を実行させること特徴とする請求項１乃至請求項３のいずれか一項に記載の画像処理プログラム。
【請求項５】
前記画像処理装置に、さらに、
前記多値画像内の罫線を検出し、
前記罫線から所定範囲に存在する画素を前記一の画素として、該一の画素の固有の値を前記第一の値または前記第二の値に設定する処理を実行させることを特徴とする請求項１乃至請求項４のいずれか一項に記載の画像処理プログラム。
【請求項６】
前記画像処理装置に、さらに、
前記罫線の端を検出し、
前記端から所定範囲に存在する画素を前記一の画素として、前記第二の閾値を算出する処理を実行させることを特徴とする請求項１乃至請求項５のいずれか一項に記載の画像処理プログラム。
【請求項７】
画素毎の固有の値が３以上の諧調で表現される多値画像を受付ける画像入力手段と、
前記多値画像に含まれる複数の画素のうちの一の画素に対し、該多値画像に対して該一の画素を含む領域を設定するとともに、前記領域に含まれる画素群の画素各々について、各々の固有の値から第一の閾値をそれぞれに算出する閾値取得手段と、
前記一の画素に係る第一の閾値と、該一の画素以外の前記画素群内の他の画素に係る他の第一の閾値とに基づいて、該一の画素に係る第一の閾値以上の値を有する第二の閾値を算出する閾値補正手段と、
前記第二の閾値と前記一の画素の固有の値とを比較し、比較結果に基づいて、前記一の画素の固有の値を二値化する二値判定手段とを有することを特徴とする画像処理装置。
【請求項８】
画素毎の固有の値が３以上の諧調で表現される多値画像を受付ける画像入力手段と、
前記多値画像に含まれる複数の画素のうちの一の画素に対し、該多値画像に対して該一の画素を含む領域を設定するとともに、前記領域に含まれる画素群の画素各々について、各々の固有の値から第一の閾値をそれぞれに算出する閾値取得手段と、
前記画素群に含まれる画素各々について算出した複数の前記第一の閾値のうち、所定の条件に合致する第一の閾値を、前記一の画素に係る第一の閾値以上の値を有する第二の閾値として選択する閾値補正手段と、
前記第二の閾値と前記一の画素の固有の値とを比較し、比較結果に基づいて、前記一の画素の固有の値を、二値化する二値判定手段とを有することを特徴とする画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力画像に含まれる罫線を検出する画像処理に関する。
【背景技術】
【０００２】
文書画像には、表、文字、画像などが混在する。文書画像情報から文字画像をコンピュータで扱うことが可能な文字データに変換する技術として光学文字認識技術（ｏｐｔｉｃａｌ  ｃｈａｒａｃｔｅｒ  ｒｅａｄｅｒまたはｏｐｔｉｃａｌ  ｃｈａｒａｃｔｅｒ  ｒｅｃｏｇｎｉｔｉｏｎ（以下ＯＣＲとする））がある。ＯＣＲ技術は、紙文書で運用されてきた業務を電子化したり、紙で配布された文書を電子文書に変換したりすることを可能とする。電子文書には、例えば、帳票文書がある。帳票文書の文字をＯＣＲ技術で認識する場合、帳票文書中に含まれる表を認識する技術が重要である。表は罫線で構成されるため、罫線を検出することが重要である。
【０００３】
帳票文書には、複数の色を使用したものがある。ＯＣＲ技術では、一般に、多値画像を二値画像に変換してから罫線を抽出する。多値画像を二値画像にする手法は、例えば、大域的二値化、局所的二値化等がある。
【０００４】
大域的二値化は、画素の頻度分布を画像全体について求め、一つの閾値で全画素の二値化判定を行う。この閾値を用いた二値化技術は「大津の二値化」として広く知られている。大津の二値化は、まず、明度値の頻度分布に基づいて画素を２の群に分ける。２の群に画素を分けた際に、判別分析で用いられるクラス分離度（＝クラス間分散／クラス内分散）が最大になるような閾値を求める。しかし、大域的二値化は、画像全体で一つの閾値を用いるため、背景と前景が明確に分かれている場合は安定した結果が得られる。しかし、背景にグラデーションがかかっているような場合は前景と背景の分離に失敗する領域が生ずる。
【０００５】
局所的二値化は、画像内の画素ごとに求めた閾値を用いて画素の二値化を行う。局所的二値化では、例えば、二値化の処理対象の画素の周辺領域の明度平均が閾値の規準となる。しかし、着目画素の周辺領域内の画素の明度に応じて、明度平均値は変化する。周辺領域内の明度平均値は近接画素の影響を受ける。明度平均値の変動に対応して閾値は変動する。閾値が変動によって、着目画素の二値化の判別結果が誤りになる場合がある。例えば、明度が低い罫線の付近に、罫線よりも明度が低い画素が多く含まれる場合、二値化のための閾値が下がる。この結果、罫線は背景であると誤認識され、罫線が検出されない場合がある。
【０００６】
従来技術として下記文献がある。
【特許文献１】特開平０６−１５０００２号公報
【特許文献２】特開２００１−３４６０４０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
多値画像から二値画像を精度良く求める画像処理技術を提供することである。
【課題を解決するための手段】
【０００８】
本発明の第一の解決手段は、画素毎の固有の値が３以上の諧調で表現される多値画像を受付け、前記多値画像に含まれる複数の画素のうちの一の画素に対し、該多値画像に対して該一の画素を含む領域を設定し、前記領域に含まれる画素群の画素各々について、各々の固有の値から第一の閾値をそれぞれに算出し、前記一の画素に係る第一の閾値と、該一の画素以外の前記画素群内の他の画素に係る他の第一の閾値とに基づいて、該一の画素に係る第一の閾値以上の値を有する第二の閾値を算出し、前記第二の閾値と前記一の画素の固有の値とを比較し、比較結果に基づいて、前記一の画素の固有の値を二値化することを特徴とする。
【０００９】
本発明の第二の解決手段は、第一の解決手段において、前記画像処置装置に、前記画素群に含まれる画素各々について算出した複数の前記第一の閾値のうち、前記他の第一の閾値として、最大値を選択させることを特徴とする。
【００１０】
本発明の第三の解決手段は、画素毎の固有の値が３以上の諧調で表現される多値画像を受付け、前記多値画像に含まれる複数の画素のうちの一の画素に対し、該多値画像に対して該一の画素を含む領域を設定し、前記領域に含まれる画素群の画素各々について、各々の固有の値から第一の閾値をそれぞれに算出し、前記画素群に含まれる画素各々について算出した複数の前記第一の閾値のうち、最大の値を有する第一の閾値を第二の閾値として選択し、前記第二の閾値と前記一の画素の固有の値とを比較し、比較結果に基づいて、前記一の画素の固有の値を、二値化することを特徴とする。
【００１１】
本発明の第四の解決手段は、第一から第三のいずれかの解決手段において、前記画素群に含まれる画素各々について、該画素を含む他の領域を設定し、前記他の領域に含まれる他の画素群に含まれる画素各々の固有の値の平均、および前記領域に含まれる前記画素群に含まれる画素各々の固有の値の平均に基づき、前記画素群に含まれる画素各々の前記第一の閾値を算出すること特徴とする。
【００１２】
本発明の第五の解決手段は、第一から第四のいずれかの解決手段において、前記多値画像内の罫線を検出し、前記罫線から所定範囲に存在する画素を前記一の画素として、該一の画素の固有の値を前記第一の値または前記第二の値に設定することを特徴とする。
【発明の効果】
【００１３】
本発明により、多値画像内の二値化処理の対象とする対象画素の周辺の領域に含まれる画素毎の固有の第一の閾値から対象画素を二値化する第二の閾値を選択し、第二の閾値と対象画素の固有の値との比較によって対象画素の固有の値を二値化することができる。対象画素の周辺の誤差を生じさせる画素の影響を低下させた第二の閾値によって二値化の判別を行うことが可能となる。この結果、多値画像から二値画像を精度良く求めることが可能となる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施の形態を説明する。
【００１５】
図１は、画像処理装置の装置構成図である。１は画像処理装置である。画像処理装置１は、多値画像から二値画像を取得する機能を実現する装置である。画像処理装置１は、制御部２、入力部３、出力部４、メモリ５、記憶部６、ネットワークインターフェース（ネットワークＩ／Ｆ）７を有し、それぞれがバス９で接続される。
【００１６】
制御部２は画像処理装置１の全体を制御する。例えば、中央処理装置（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ））である。制御部２はメモリ５に展開された画像処理プログラム８を実行する。画像処理プログラム８は画像処理装置１に画像処理を実行させる。制御部２は画像処理プログラム８によって、画像を取得する画像取得手段、画像を二値化する画像二値化手段、画像内の罫線の候補を抽出する罫線候補抽出手段等として機能する。画像二値化手段は、二値化する領域を取得する二値化領域取得手段、第一の閾値および第二の閾値を算出する算出手段、画素の二値を判別する判別手段、罫線の候補となるエッジを検出するエッジ検出手段等として機能する。罫線候補抽出手段は、黒画素をグループ化する黒画素グループ化手段、短いランレングスを削除する短ラン削除手段、罫線の領域を取得する罫線領域取得手段、罫線の座標を補正する罫線座標補正手段、罫線の幅を検証する罫線幅検証手段等として機能する。制御部２は、以上の処理によって、多値画像から罫線を検出する機能を実現する。
【００１７】
入力部３は、制御部２に与える種々の命令を受付ける。入力部３は、例えば、キーボード、マウス、タッチパネル、イメージスキャナ等である。また、命令は、ネットワーク７−１を経由して取得する場合もある。
【００１８】
出力部４は、例えば、ディスプレイである。なお、制御部２により作成された二値画像は、例えば、文字認識処理での入力画像情報に相当する場合がある。この場合、二値画像は出力部４に表示する必要はない。
【００１９】
メモリ５は、制御部２で実行する画像処理プログラム８が展開される記憶領域である。メモリ５は、制御部２の演算結果などのデータ、入力画像データ、出力画像データ等も格納する。例えば、第一の閾値を格納する閾値バッファが格納される。メモリ５は、例えば、ランダムアクセスメモリ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ））である。
【００２０】
記憶部６は例えばハードディスク装置である。記憶部６は、画像処理プログラム８、ノード間の意味の階層情報テーブル、テキスト情報等を記憶する。
【００２１】
ネットワークインターフェース７は、ネットワーク７−１に接続し、情報のやり取りを可能にする。制御部２は、ネットワークインターフェース７を介して入力画像情報、出力画像情報、演算パラメータ等を取得するあるいは出力する場合もある。
【００２２】
以下、制御部２が実行する処理について説明する。まず、制御部２は、入力画像を取得する。例えば、文書が紙の媒体である場合、制御部２は光学スキャナと光学スキャナを制御するプログラムを実行することによって入力画像を取得する。また、記憶部に入力画像情報が格納されている場合、記憶部から入力画像情報を読み出す処理を実行することによって入力画像を取得する。また、制御部２は、画像処理装置に接続されたネットワーク７−１を経由して入力画像を取得すること等も可能である。
【００２３】
ここで、入力画像および出力画像の語句を定義する。図２は画像の構成例である。
【００２４】
１０は画像である。本実施例の画像は、多値画像と二値画像がある。多値画像は入力画像である。多値画像は、画素の輝度（明度）を３以上の階調で表示するものである。多値画像は、例えば、カラー画像や濃淡（グレースケール）画像等である。二値画像は出力画像である。二値画像は、画素の輝度（明度）を２の階調で表示するものである。２の階調は、白画素あるいは黒画素である。本実施例では、入力画像内の文字、罫線等を示す画素を黒画素として表示するものとする。
【００２５】
１１は画像１０の横方向の幅である。幅１１は、画像１０の横方向に並ぶ画素数である。１２は画像１０の縦方向の高さである。高さ１２は、画像１０の縦方向に並ぶ画素数である。１３は画素の画像１０の横方向の位置を特定するための横座標値である。１４は画素の画像１０の縦方向の位置を特定するための縦座標値である。
【００２６】
１５は、横座標値１３、縦座標値１４で特定される画素である。なお、以降の説明において、二値化処理の対象となる画素を着目画素（対象画素）という。
【００２７】
１６は、画素１５を二値化処理の対象の着目画素としたときの着目画素１５の周辺領域である。周辺領域１６は着目画素１５の第一の閾値を求める範囲である。第一の閾値は、従来の手法で算出する値である。例えば、第一の閾値は周辺画素の明度から計算で算出する。本実施例の周辺領域１６は、着目画素１５を中心とした矩形領域である。周辺領域１６内の各周辺画素が有するそれぞれの第一の閾値が、複数の第一の閾値である。
１７は、着目画素１５から周辺領域１６の幅１１方向の端までの距離である。本実施例では、周辺領域１６は着目画素１５を中心とした矩形領域であるため、距離１７は、着目画素１５から周辺領域１６の高さ方向１２の端までの距離でもある。１８は、周辺領域１６に含まれる画素である。なお、以降の説明において、周辺領域１６に含まれる画素を周辺画素という。１６−２は、画素１８に対する第一の閾値を算出するための周辺領域である。本実施例では、周辺領域１６−２は、画素１８を中心とした矩形領域である。周辺領域１６−２は、周辺領域１６と同じ大きさである。周辺領域１６と周辺領域１６−２とは異なる大きさであってもよい。本実施例では、以上の２種類の周辺領域が用いられる。局所的二値化で使用する領域が周辺領域１６−２（第二の周辺領域）である。本実施例で新たに導入された領域が周辺領域１６（第一の周辺領域）である。
【００２８】
次に、制御部２が入力画像情報を取得してから、入力画像上の罫線情報を検出するまでの処理について説明する。
図３は、入力画像情報を取得してから、入力画像上の罫線情報を検出するまでの制御部２の機能ブロック図である。制御部２は、入力画像を取得する画像入力手段２０１、入力画像を二値化する画像二値化手段２０２、罫線の候補を抽出する罫線候補抽出手段２０６として機能する。また、画像二値化手段２０２は、入力画像内の着目画素を設定して着目画素の周辺領域に存在する周辺画素の値から第一の閾値を求める閾値取得手段２０３、周辺領域内の着目画素および各周辺画素の第一の閾値から着目画素を二値化するための第二の閾値を求める閾値補正手段２０４、着目画素を二値に判別する二値判定手段２０５から構成される。
【００２９】
制御部２の処理は、以下の２つの処理ステップに大きく分けられる。制御部２は、第一の処理ステップで入力画像を二値化した二値画像を求める。制御部２は、第二の処理ステップで二値画像から罫線を求める。
【００３０】
制御部２が実行する第一の処理ステップの概要は、以下である。制御部２は入力画像の着目画素１５に対する周辺領域１６内の各画素に対応する第一の閾値を求める。そして、制御部２は、周辺領域１６内の各画素に対応する複数の第一の閾値の内、最大値を検索する。そして、制御部２は、第一の閾値の最大値を利用して、着目画素１５の第二の閾値を計算する。第二の閾値は、着目画素１５が白画素か黒画であるかを判別する閾値である。以上の処理を実行することにより、制御部２は入力画像の各画素に対する第二の閾値を算出する。
【００３１】
制御部２の第二の閾値を求める処理には、二種類の手法がある。第一の方法は、着目画素１５が変わるたびに周辺領域１６の各周辺画素について第一の閾値を算出するものである。第一の方法は、着目画素１５が変わるたびに周辺領域１６の画素について第一の閾値を算出するため、多くの処理ステップを要する。しかし、周辺領域１６内で最大値となる第一の閾値のみを格納しておけばよいため、記憶領域の使用量が少ない。
【００３２】
第二の方法は、入力画像内の第二の閾値を算出する領域に含まれる各画素に対応する第一の閾値を予め算出するものである。制御部２は算出した第一の閾値を画素に対応付けてメモリ５に記憶する。制御部２は、着目画素１５について第二の閾値を算出するときに、記憶した着目画素１５に対応する１６に含まれる周辺画素の第一の閾値を読み出して使用する。第二の方法は、各画素に対応する第一の閾値を格納するための記憶領域を必要とする。しかし、制御部２は第一の閾値を各画素について一回演算すれば良いため、処理量が少ない。なお、入力画像全体に対応する各画素の第一の閾値を算出するのではなく、入力画像を部分領域に分割し、部分領域毎で第一の閾値を求める構成にすることも可能である。
【００３３】
上記の二種類の手法は処理の目的、対象によって使い分けることが可能である。
【００３４】
例えば、制御部２が画素数の多い入力画像全体について第二の閾値を取得する場合、記憶領域を多く消費しても第一の方法によって計算の高速化を図るのが得策と考えられる。一方、第二の閾値を算出する処理を画像内の特定の部分についてのみ行うのであれば、画像全体で第一の閾値を計算するのは無駄なので、第二の方法の利用が適当である。以下、第一の方法によって第二の閾値を算出する処理について説明する。第二の方法については図２５にて説明する。
【００３５】
図４は、第一の方法での閾値取得手段２０３、閾値補正手段２０４の機能を詳細にした機能ブロック図である。閾値取得手段２０３は、着目画素に対応する第一の閾値を算出する閾値演算部２１４である。着目画素に対する周辺領域内の第一の閾値の最大値を算出する最大値演算部２１６、および着目画素の第一の閾値と周辺領域内の第一の閾値の最大値との重み付き平均から第二の閾値を算出する補正閾値演算部２１７である。
【００３６】
図５は、第一の方法によって第二の閾値を算出する処理のフローチャートである。制御部２は、第二の閾値を算出する着目画素１５を特定する（Ｓ０１）。制御部２は横座標１３および縦座標１４によって、着目画素１５を特定する。次に、制御部２は、着目画素に対して周辺領域１６を設定する（Ｓ０２）。制御部２は、周辺領域１６に含まれる各周辺画素の第一の閾値を算出する（Ｓ０３）。
【００３７】
ここで周辺領域１６内の着目画素１５および周辺画素の第一の閾値の算出について説明する。
【００３８】
図６は第一の閾値を算出する処理のフローチャートである。第一の閾値は、局所的二値化の手法を使用して求める。制御部２は、例えば、第一の閾値を周辺画素の明度から算出する。第一の閾値は、例えば、ニブラック（Ｎｉｂｌａｃｋ）の二値化の計算方法を使用する。数（１）はＮｉｂｌａｃｋの二値化の計算式である。
【００３９】
【数１】
0005145862.tif 000002
数（１）の「Ｔｈ１」は第一の閾値である。「ｍ」は周辺領域内の各画素の明度の平均値である。「ｓ」は画素の明度値の頻度分布の標準偏差である。「ｋ」はあらかじめ定めた定数である。「ｋ」は、例えば、−０．１〜−０．３といった値が用いられる。「ｋ」が負の値に設定されることで第一の閾値は矩形領域内の画素の明度の平均値よりも若干低い値に設定される。この結果、制御部２は閾値に近い値の画素がノイズとして残ってしまう現象を回避できる。一方、ノイズがさほど問題にならない場合や前景となる黒画素の脱落が問題になる場合、「ｋ」を「０」に設定することも可能である。「ｋ」が「０」の場合、周辺画素の明度の平均値をそのまま閾値として用いることになり、計算ステップが減少するメリットがある。また、第一の閾値は、周辺画素の明度の平均値ではなく、周辺画素の最大値と最小値の中間点を閾値とするなどの類似手法によって算出することも可能である。
【００４０】
本実施例の入力画像は、解像度が２００ｄｐｉであり２５６階調のグレイ画像であるとする。グレイ画像の各画素は、０から２５５までのいずれかの値の明度をとる。
【００４１】
着目画素１５は入力画像の画素の座標位置で特定されている。着目画素１５には周辺領域１６が設定されている。周辺領域１６の幅および高さの画素数は「Ａ」であるとする。着目画素１５を周辺領域１６の中央とすると、周辺領域１６の端までの画素数「ａ」は数（２）で求まる。
【００４２】
【数２】
0005145862.tif 000003
例えば、周辺領域１６は、着目画素１５を中心とした縦方向に５画素、横方向に５画素の矩形領域であるとする。ａは「２」である。なお、周辺領域１６の大きさ、形状は、入力画像の特徴、制御部２の処理能力などによって適宜変更が可能である。
【００４３】
着目画素１５の横座標値１３および縦座標値１４は（ｘ、ｙ）であるとする。
【００４４】
また、周辺領域１６内の周辺画素の座標は（ｘｉ、ｙｊ）であるとする。「ｘｉ」は「ｘ−ａ」から「ｘ＋ａ」までの範囲となる。「ｙｊ」は「ｙ−ａ」から「ｙ＋ａ」までの範囲となる。制御部２は、「ｘｉ」を「ｘ−ａ」から「ｘ＋ａ」まで「ｙｊ」を「ｙ−ａ」から「ｙ＋ａ」まで変化させて各周辺画素を設定する（Ｓ１１）。次に、制御部２は、例えば、周辺画素の明度値を取得する（Ｓ１２）。制御部２は、周辺領域１６の全ての周辺画素の明度値を取得するまでＳ１１からの処理を繰り返す（Ｓ１３）。
【００４５】
次に、制御部２は、周辺領域１６内の周辺画素の明度値の平均値「ｍ」を求める（Ｓ１４）。制御部２は、周辺画素の明度値の頻度分布の標準偏差「ｓ」を求める（Ｓ１５）。制御部２は、平均値「ｍ」と定数「ｋ」倍した標準偏差「ｓ」との和を求めることで、閾値「Ｔｈ１」を求める（Ｓ１６）。
【００４６】
なお、着目画素１５が入力画像の端部の場合、着目画素１５の周辺領域１６に５×５の周辺画素が揃わない場合がある。この場合、制御部２は、周辺領域１６に含まれる周辺画素のみで第一の閾値を算出することも可能である。
【００４７】
以上により着目画素１５についての第一の閾値を取得することができる。周辺画素に対して第一の画素を算出する場合、図６のフローチャートの着目画素１５に周辺画素を当てはめて実行する。周辺画素に対応する第一の閾値は、周辺画素を中心にした第二の周辺領域１６−２を基準に求める。本実施例では、第二の周辺領域１６−２の幅および高さは周辺領域１６の大きさと同じであり、制御部２は、図６の処理によって周辺画素についての第一の閾値を算出できる。
【００４８】
ここで、第一の閾値の特性について説明する。図７、図８、図９、図１０、図１１、図１２、図１３、図１４は、入力画像と第一の閾値との関係を示す図である。まず、図７、図９、図１１、および図１３について説明する。３０は入力画像である。３１は、多値画像の内、明度が中間程度の画素である。例えば、帳票の罫線である。３２は、多値画像の内、明度が高い画素である。例えば、帳票の背景である。３３は、多値画像の内。明度が低い画素である。例えば、帳票の文字である。１５−１、１５−２、１５−３および１５−４は着目画素１５である。１６−３、１６−４、１６−５、および１６−６は、それぞれ着目画素１５−１、１５−２、１５−３および１５−４に対する周辺領域である。
【００４９】
図８、図１０、図１２、および図１４は、それぞれ、図７、図９、図１１、および図１３の周辺領域１６−３、１６−４、１６−５、１６−６に含まれる各画素の明度の頻度分布図である。４２は、罫線に対応する画素３１の明度である。４３は、背景に対応する画素３２の明度である。４４は、文字に対応する画素３３の明度である。
【００５０】
図７では、周辺領域１６−３には、帳票の罫線に対応する画素３１と背景に対応する画素３２のみがある。図８は、図７の周辺領域１６−３の各画素の明度の頻度分布図である。周辺領域１６−３から算出される着目画素１５−１に対する第一の閾値は４１−１となる。第一の閾値４１−１は、罫線に対応する画素３１の明度４２よりも大きくなる。したがって、着目画素１５−１は黒画素であると判別される。
【００５１】
図９では、周辺領域１６−４には、帳票の罫線に対応する画素３１、背景に対応する画素３２、および文字に対応する画素３３がある。図１０は、図９の周辺領域１６−４の各画素の明度の頻度分布図である。周辺領域１６−４から算出される着目画素１５−２に対する第一の閾値は４１−２となる。第一の閾値４１−２は、罫線に対応する画素３１の明度４２よりも高い明度となる。したがって、着目画素１５−２は黒画素であると判別される。
【００５２】
図１１では、着目画素１５−３は罫線上にあるが、文字の画素３３に近い。したがって、周辺領域１６−５には、帳票の罫線に対応する画素３１、背景に対応する画素３２、および文字に対応する画素３３がある。図１２は、図１１の周辺領域１６−５の各画素の明度の頻度分布図である。周辺領域１６−５から算出される着目画素１５−３に対する第一の閾値は４１−３となる。第一の閾値４１−３は、罫線に対応する画素３１の明度４２よりも低い明度となる。したがって、着目画素１５−３は白画素であると判別される。
【００５３】
図１３では、着目画素１５−４は罫線上にあるが、文字の画素３３に近い。したがって、周辺領域１６−６には、帳票の罫線に対応する画素３１、背景に対応する画素３２、および文字に対応する画素３３がある。図１４は、図１３の周辺領域１６−６の各画素の明度の頻度分布図である。周辺領域１６−６から算出される着目画素１５−４に対する第一の閾値は４１−４となる。第一の閾値４１−４は、罫線に対応する画素３１の明度４２よりも低い明度となる。したがって、着目画素１５−４は白画素であると判別される。
【００５４】
次に、着目画素が図１１の画素１５−３に位置する場合の、周辺領域１６−５内の各周辺画素に対応する第一の閾値について説明する。図１５、図１６、図１７、図１８、図１９、および図２０は、入力画像と第一の閾値との関係を示す図である。まず、図１５、図１７、および図１９について説明する。３０は入力画像である。３１は、多値画像の内、明度が中間程度の画素である。例えば、帳票の罫線である。３２は、多値画像の内、明度が高い画素である。例えば、帳票の背景である。３３は、多値画像の内。明度が低い画素である。例えば、帳票の文字である。１５−３は着目画素である。１６−５は着目画素１５−３に対する周辺領域である。１８−１、１８−２、および１８−３は周辺領域１６−５内の周辺画素である。１６−８、１６−９、および１６−１０は、それぞれ、周辺画素１８−１、１８−２、および１８−３に対する周辺領域である。
【００５５】
図１６、図１８、および図２０は、それぞれ、図１５、図１７、および図１９の周辺領域１６−８、１６−９、および１６−１０内の各画素の明度の頻度分布図である。４５は、罫線に対応する画素３１の明度である。４６は、背景に対応する画素３２の明度である。４７は、文字に対応する画素３３の明度である。４８−１、４８−２、および４８−３は、周辺画素１８−１、１８−２、および１８−３に対する第一の閾値である。
【００５６】
図１５では、周辺画素１８−１についての第一の閾値は、周辺領域１６−８に含まれる各画素から算出する。周辺領域１６−８には、帳票の罫線に対応する画素３１、背景に対応する画素３２、および文字に対応する画素３３がある。図１６は、図１５の周辺領域１６−８の各画素の明度の頻度分布図である。周辺領域１６−８から算出される第一の閾値は４８−１となる。第一の閾値４８−１は、罫線に対応する画素３１の明度４２よりも高い明度の値になる。
【００５７】
図１７では、周辺画素１８−２についての第一の閾値は、周辺領域１６−９に含まれる各画素から算出する。周辺領域１６−９には、帳票の罫線に対応する画素３１および背景に対応する画素３２がある。図１８は、図１７の周辺領域１６−９の各画素の明度の頻度分布図である。周辺領域１６−９から算出される第一の閾値は４８−２となる。第一の閾値４８−２は、罫線に対応する画素３１の明度４２よりも高い明度の値になる。
【００５８】
図１９では、周辺画素１８−３についての第一の閾値は、周辺領域１６−１０に含まれる各画素から算出する。周辺領域１６−１０には、帳票の罫線に対応する画素３１、背景に対応する画素３２、および文字に対応する画素３３がある。図２０は、図１９の周辺領域１６−１０の各画素の明度の頻度分布図である。周辺領域１６−１０から算出される第一の閾値は４８−３となる。第一の閾値４８−３は、罫線に対応する画素３１の明度４２よりも低い明度の値になる。
図５の説明に戻る。
【００５９】
制御部２は、周辺領域１６内の全ての画素についての第一の閾値を取得するまで、Ｓ０３の処理を繰り返す（Ｓ０４）。次に、制御部２は、Ｓ０３で取得した周辺領域１６内の全ての第一の閾値の中から最大値となる第一の閾値を求める（Ｓ０５）。制御部２は、周辺領域１６の第一の閾値の最大値を数（３）によって算出する。
【００６０】
【数３】
0005145862.tif 000004
「Ｔｈ１（ｉ）」は周辺領域１６内の各画素に対する第一の閾値である。「Ｍ」は周辺領域１６内の画素数である。「Ｔｈ１ｍ」は、周辺領域１６内で最大となる第一の閾値である。制御部２は、Ｓ０５で求めた第一の閾値の最大値を用いて第二の閾値を算出する（Ｓ０６）。制御部２は、例えば、着目画素１５の第二の閾値を数（４）によって算出する。
【００６１】
【数４】
0005145862.tif 000005
「Ｔｈ１ｒ」は着目画素１５の第一の閾値である。「ｂ」は０〜１の定数である。定数「ｂ」は、着目画素の第二の閾値を決定するときに、着目画素についての第一の閾値および周辺領域１６内から取得した第一の閾値の重みの大きさを決定する。例えば、「ｂ＝０」の場合、周辺領域１６内の各画素についての第一の画素の最大値が第二の閾値になる。また、「ｂ＝１」の場合、着目画素１５に対する第一の閾値が第二の閾値となる。なお、第二の閾値の求め方は種々考えられる。例えば、第二の閾値は、複数の第一の閾値の最大値を使用する。第二の閾値は、最大値でなく２番目に大きい第一の閾値を使用することにしてもよい。また、制御部２は、着目画素１５の第一の閾値と周辺領域内の第一の閾値の最大値との重み付き平均値を第二の閾値として算出しても良い。例えば重みは第一の閾値の最大値と着目画素１５の第一の閾値との割合を４対１などと設定する。また、重みは、着目画素１５との距離に応じて変更することも可能である。
【００６２】
制御部２は、第二の閾値によって着目画素１５が黒画素か白画素かを判別する（Ｓ０７）。黒画素か白画素かは、着目画素１５の明度と第二の閾値との比較によって判別する。
【００６３】
制御部２は、以上の処理を入力画像内の二値化の対象の範囲内の全ての画素について実行する（Ｓ０８）。制御部２は、入力画像の全画素について第二の閾値を算出する場合、個々の画素を着目画素に設定する。そして、各着目画素に対応する第二の閾値を算出する。
【００６４】
以上により、制御部２は、第二の閾値を取得する。制御部２は、取得した第二の閾値によって入力画像を二値化する。この結果、制御部２は、二値画像を取得することができる。
【００６５】
ここで、第一の閾値を用いた場合の二値画像と第二の閾値を用いた場合の二値画像との違いについて説明する。図２１は入力画像である。図２２は第一の閾値によって二値化した二値画像である。図２３は第二の閾値によって二値化した二値画像である。
【００６６】
図２１の５０は入力画像であり、５１は罫線の画素であり、５２は背景の画素であり、５３は文字の画素である。１５は着目画素である。１６は着目画素１５の周辺領域である。１８は周辺画素である。１６−２は周辺画素１８の周辺領域である。着目画素１５に対する第一の閾値は、周辺領域１６内の画素の明度の平均値である。この場合、周辺領域１６は明度が低い文字の画素５３を含むため、周辺領域内にある画素の明度の平均値は低くなる。第一の閾値が着目画素１５の明度よりも低くなると、第一の閾値を用いた二値化処理時に、着目画素１５は白画素（背景画素）に判別される。
【００６７】
図２２は、図２１の入力画像５０の各着目画素を、二値化対象となる着目画素に対する第一の閾値で二値化した二値画像である。５４は、図２１の入力画像５０の各着目画素を、二値化対象となる着目画素に対する第一の閾値で二値化した二値画像である。５６は、背景の画素（白画素）である。５７は、前景の画素（黒画素）である。５８は、第一の閾値で二値化したため、罫線の画素が白画素に判別された領域である。５８付近が罫線の途切れが発生した領域である。
【００６８】
図２３は、図２１の入力画像５０の各画素を各画素に対する第二の閾値で二値化した二値画像である。５９は、図２１の入力画像５０の各画素を各画素に対する第二の閾値で二値化した二値画像である。６０は白画素である。６１は黒画素である。図２１の周辺画素１８の周辺領域１６−２は、罫線の画素３１および背景の画素３２のみで構成される。したがって、周辺画素１８に対する第一の閾値は罫線の画素３１の明度よりも高い明度となる。着目画素１５の第二の閾値は、例えば、周辺領域１６内の周辺画素の第一の閾値の内、最大値となる第一の閾値を採用する。この結果、着目画素１５の明度は第二の閾値よりも低くなる。着目画素１５は黒画素と判別される。以上から、図２３は罫線の欠けのない二値画像になる。
【００６９】
以上の方法により制御部２は、罫線の欠けのない二値画像を取得することができる。
【００７０】
次に、第二の方法で第二の閾値を算出する手順について説明する。第二の方法は、着目画素１５が変わるたびに周辺領域１６の画素について第一の閾値を算出するものである。
図２４は、第二の方法で第二の閾値を算出する手順での閾値取得手段２０３、閾値補正手段２０４の機能を詳細にした機能ブロック図である。閾値取得手段２０３は、着目画素に対応する第一の閾値を算出する閾値演算部２１４である。閾値補正手段２０４は、閾値演算部２１４の出力結果となる第一の閾値を画素の位置に応じて格納する二次元の整数配列である閾値バッファ２１５、着目画素に対する周辺領域内の第一の閾値の最大値を算出する最大値演算部２１６、および着目画素の第一の閾値と周辺領域内の第一の閾値の最大値との重み付き平均から第二の閾値を算出する補正閾値演算部２１７である。なお、閾値バッファ２１５は、メモリ５に格納される。
図２５は、第二の方法によって第二の閾値を算出する処理のフローチャートである。第二の方法は、入力画像内の第二の閾値を算出する領域に含まれる各画素に対応する第一の閾値を予め算出するものである。なお、入力画像内の第二の閾値を算出する領域は、予め特定されているものとする。
【００７１】
制御部２は、二値化の対象の領域内の画素毎に対応する第一の閾値を算出する（Ｓ２１）。制御部２は、二値化の対象の領域内の全ての画素について第一の閾値を算出する（Ｓ２２）。制御部２は、二値化の対象の領域内の全ての画素について第一の閾値を算出すると（Ｓ２２：ｙｅｓ）、制御部２は着目画素１５を設定する（Ｓ２３）。制御部２は、着目画素１５に対する周辺領域１６を設定する（Ｓ２４）。制御部２は、着目画素１５に対応する第二の閾値を算出する（Ｓ２６）。例えば、制御部２は、周辺領域に含まれる周辺画素の第一の閾値を読み出す。制御部２は、読み出した第一の閾値の内で最大となる値を検出する。制御部２は、検出した最大となる第一の閾値を第二の閾値として取得する。制御部２は、第二の閾値によって着目画素１５を二値化する。制御部２はＳ２５からＳ２７までの処理を入力画像の処理の対象の全ての範囲が終了するまで繰り返す（Ｓ２８）。全ての範囲が終了すると（Ｓ２８：ｙｅｓ）、制御部２は二値化処理を終了する。
【００７２】
次に、制御部２の第二の閾値を算出する処理を画像領域の特定の場所でのみ実行する構成について説明する。入力画像の全ての領域で第二の閾値を算出すると、罫線とは関係がない場所の画素が第二の閾値で二値化されることになる。第二の閾値は、着目画素１５の周辺領域１６の第一の閾値の最大値を利用した値である。したがって、着目画素に対する第二の閾値の値は着目画素に対する第一の閾値に比較して増加する傾向がある。罫線の領域以外を第二の閾値で判別すると、制御部２は背景と判別されるべき画素を前景であると誤って判定する場合がある。この結果、二値画像に前景の画素である黒画素が不要に増える。
【００７３】
そこで、着目画素１５の近くに罫線が存在するか否かを判定する手段を設け、制御部２は罫線が存在する場所でのみ第二の閾値を算出するようにする。以下に制御部２が実行する処理について説明する。
【００７４】
図２６は、着目画素１５の近くに罫線が存在するか否かを判定した結果を考慮する場合の制御部２の機能ブロック図である。制御部２は、入力画像を取得する画像入力手段２０１、入力画像を二値化する画像二値化手段２０２、罫線の候補を抽出する罫線候補抽出手段２０６として機能する。また、画像二値化手段２０２は、入力画像内の着目画素を設定して着目画素の周辺領域に存在する周辺画素の値から第一の閾値を求める閾値取得手段２０３、周辺領域内の着目画素および各周辺画素の第一の閾値から着目画素を二値化するための第二の閾値を求める閾値補正手段２０４、着目画素を二値に判別する二値判定手段２０５、および着目画素の周辺領域の各画素におけるエッジ成分の方向と強度を求め、抽出したい罫線方向と一致した方向のエッジ成分が周辺領域内に存在するか否かを判定する罫線エッジ判定手段２０７から構成される。
【００７５】
図２７は、罫線エッジ判定手段２０７の機能を詳細にした機能ブロック図である。罫線エッジ判定手段２０７は、ソベル（ｓｏｂｅｌ）フィルタによる畳み込み演算によって着目画素のエッジのソベル勾配を演算するＳｏｂｅｌ勾配演算部２１８、エッジの勾配の強度を演算する勾配強度演算部２２０、エッジの勾配の方向を演算する勾配方向演算部２１９、およびエッジが所定の方向、強度の条件を満たすときに罫線のエッジであると判定する罫線エッジ判定部２２１とから構成される。
【００７６】
図２８は、罫線のエッジの有無を判別するフローチャートである。制御部２は、以下の処理を実行することで、着目画素１５の周辺領域１６にエッジがあるか否かを判別する。
【００７７】
まず、制御部２は周辺領域１６のエッジ成分を抽出する（Ｓ３１）。エッジ成分の抽出は、例えば、ソベル勾配（以下Ｓｏｂｅｌ勾配とする）により抽出する。制御部２は周辺領域１６内の着目画素１５、周辺画素についてＳｏｂｅｌ勾配を求める。
【００７８】
制御部２は、例えば以下の処理によってＳｏｂｅｌ勾配を算出する。図２９は縦の勾配を検出するＳｏｂｅｌフィルタ６２である。図３０は横の勾配を検出するＳｏｂｅｌフィルタ６３である。制御部２は、縦方向のＳｏｂｅｌフィルタ６３、および横方向のＳｏｂｅｌフィルタ６４の中心を着目画素１５に合わせる。制御部２は各Ｓｏｂｅｌフィルタの係数を用いて着目画素１５の周囲の画素に対して畳み込み演算を行う。
【００７９】
制御部２は、横方向のＳｏｂｅｌフィルタ６４を用いた演算により横方向の明度の変化の強さ（横勾配値ｓｂｌｘ）、縦方向のＳｏｂｅｌフィルタ６３を用いた演算により縦方向の明度の変化の強さ（縦勾配値ｓｂｌｙ）を取得する（Ｓ３２）。制御部２は勾配強度（ｓｂｌｍ）を数（５）によって算出する。
【００８０】
【数５】
0005145862.tif 000006
制御部２は、エッジの勾配強度（ｓｂｌｍ）が所定の値以上となるか否かを判定する（Ｓ３３）。エッジがない、あるいは勾配強度（ｓｂｌｍ）が所定の値未満である場合（Ｓ３３：ｎｏ）、制御部２は、周辺領域１６内に罫線は存在しないと推定する（Ｓ３７）。制御部２は、罫線が存在しない領域では、例えば、従来の二値化手法によって着目画素１５を二値化する。所定値となる強度は、例えば、勾配強度（ｓｂｌｍ）が１００以上などである。
【００８１】
周辺領域１６内に所定値以上の勾配強度がある場合（Ｓ３３：ｙｅｓ）、制御部２はエッジ成分の方向を求める（Ｓ３４）。制御部２は勾配方向を数（６）により算出する。
【００８２】
【数６】
0005145862.tif 000007
制御部２は、周辺領域１６内のエッジ成分の方向が、罫線候補の条件を満たす方向か否かを判別する（Ｓ３５）。具体的には、制御部２はエッジの勾配方向が所定の範囲内か否かを判定する。
【００８３】
エッジの勾配の範囲は、例えば、０°以上から１８０°未満であるとする。エッジの勾配は、入力画像の横方向に対する角度によって特定する。エッジの勾配が０°のとき入力画像の横方向と平行である。エッジの勾配が９０°のとき入力画像の縦方向と平行である。エッジの勾配方向の所定の範囲は、横方向の罫線の場合、例えば、０°以上１０°以下または１７０°以上１８０度未満とする。エッジの勾配方向の所定の範囲は、縦方向の罫線の場合、例えば、８０°以上１００°以下とする。周辺領域１６に罫線の方向に合致するエッジ成分を含む場合（Ｓ３５：ｙｅｓ）、制御部２は第二の閾値の算出処理を実行する。
【００８４】
以上により、制御部２は、罫線があると推測される領域についてのみ第二の閾値を算出することが可能となる。この結果、制御部２は、不要な黒画素の増加を防ぐことが可能となり、ノイズの少ない二値画像を取得することが可能となる。以上で、制御部２が、二値画像を取得する処理を実行するときに第二の閾値によって画素を判別する処理を説明した。
【００８５】
次に、制御部２が、二値画像から罫線を検出する手順について簡単に説明する。図３１は、罫線の候補を抽出するため場合の制御部２の機能ブロック図である。制御部２は、取得した二値画像から直線的に連続した画素を抽出し、連続する画素数が所定値以下のものを削除する短ラン削除手段２１１、黒画素が連続する画素が所定値以下の領域を削除した画像中で隣接した黒画素を順にグループにまとめ、黒画素の連結領域を作成する黒画素グループ化手段２１２、および所定の上限値を以下の幅となる罫線の候補を罫線候補とする罫線幅検証手段２１３から構成される。
【００８６】
図３２は横方向の罫線を検出する処理のフローチャートである。まず、制御部２は、二値画像の横方向に黒画素が連続する領域を抽出する（Ｓ４１）。例えば、制御部２は二値画像の行ごとに黒画素が連続する領域を抽出する。図３３は、二値画像の横方向の黒画素の領域が検出される第一の状態である。７０−１は二値画像の一部の領域である。７１は白画素である。７２は黒画素である。７３−１、７３−２、７３−３、７３−４、７３−５、および７３−６は横方向に黒画素が連続する領域である。７４は二値画像７０−１の横方向である。制御部２の求める罫線が横方向である場合、横方向７４は罫線の長さ方向になる。７５は二値画像７０−１の縦方向である。罫線が横方向である場合、縦方向７５は罫線の幅方向になる。
【００８７】
制御部２は、黒画素が連続する領域の長さが所定値よりも長いか否かを判別する（Ｓ４２）。所定値は予め設定する。所定値は例えば「４」と設定する。所定値を設定する基準は、罫線と判定できるか否かによる。罫線の判定は、ランレングス（以下ランとする）の大きさで判定する。ランは黒画素が連続する長さである。長さの単位は例えば画素数である。横方向にある程度の長いランであれば、横方向の罫線の可能性がある。一方、横方向に短いランは、横方向の罫線ではない。黒画素が連続する領域が所定値未満のランとなる場合（Ｓ４２：ｎｏ）、制御部２は、所定値未満の黒画素が連続する領域を白画素に変更する（Ｓ４３）。制御部２は、所定値未満の黒画素が連続する領域の各画素を黒画素から白画素に変える。この結果、二値化画像には横方向に一定長以上のランを有する黒画素が残る。
【００８８】
制御部２は、二値画像の全ての領域について処理を繰り返す（Ｓ４４）。
【００８９】
図３４は、二値画像の横方向の黒画素の領域が検出される第二の状態である。７０−１は二値画像の一部の領域である。７１は白画素である。７２は黒画素である。７３−１、７３−４、７３−５、および７３−６は横方向に黒画素が連続する領域である。７４は二値画像７０−１の横方向である。制御部２の求める罫線が横方向である場合、横方向７４は罫線の長さ方向になる。７５は二値画像７０−１の縦方向である。罫線が横方向である場合、縦方向７５は罫線の幅方向になる。図３３の領域７３−２はランが「３」であるため、制御部２は領域７３−２を白画素７３−７に変更する。図３３の領域７３−３はランが「２」であるため、制御部２は領域７３−３を白画素７３−８に変更する。
【００９０】
制御部２は、二値画像の全ての領域について処理が終了すると（Ｓ４４：ｙｅｓ）、制御部２は、画素をグループにまとめる（Ｓ４５）。グループは二値画像内の罫線の候補が存在すると判別される領域である。グループは、横方向に連続する黒画素の領域の集合である。例えば、横方向に連続する第一の領域に含まれる黒画素および横方向に連続する第二の領域に含まれる黒画素があるとする。第一の領域に含まれる黒画素および第二の領域に含まれる黒画素の内、縦方向で隣接する黒画素がある場合、第一の領域と第二の領域とがグループとしてまとめられる対象となる。罫線の候補は、グループとしてまとめられる対象内の黒画素の外接枠とする。
【００９１】
図３５は、二値画像の横方向の黒画素の領域が検出される第三の状態である。７０−１は二値画像の一部の領域である。７１は白画素である。７２は黒画素である。７４は二値画像７０−１の横方向である。７５は二値画像７０−１の縦方向である。図３４の黒画素が連続する領域７３−１、７３−４、７３−５、および７３−６はそれぞれ隣接するため、グループにまとめられる。７６は、グループ化された領域は黒画素の外接枠である。図３２の説明に戻る。
【００９２】
なお、横方向の罫線の候補を検出するときにＳ４５の処理によって、黒画素の集合が、縦方向に多くの行でグループ化される場合がある。この場合、黒画素の集合結果は縦方向に太い横方向の罫線となる。罫線には一般的な太さがある。罫線ではないにも関わらず、罫線の候補の端を延長する処理を行うと二値画像から文字情報を検出する処理等において、エラーの原因となる。また、後述する罫線の延長処理においての処理量の増加および不要な黒画素の発生の原因となる。そこで、明らかに罫線ではないと考えられる太さの罫線の候補については、罫線ではないと判別する。
【００９３】
罫線の幅の上限値は予め設定する。上限値は、例えば、入力画像が２００ｄｐｉのときに６ｐｉｘｅｌ程度にする。制御部２は、グループ化した領域の幅が上限値以下か否かを判定する（Ｓ４６）。グループ化した領域が上限値以下の幅となる場合（Ｓ４６：ｙｅｓ）、制御部２はグループ化した領域を罫線候補と判別する（Ｓ４７）。一方、グループ化した領域の幅が上限値以上となる場合は、罫線の候補ではない。したがって、制御部２は、上限値以上の幅となる領域については罫線の候補とは判別しない。以上の処理により、制御部２は二値画像から罫線を検出する。
【００９４】
次に、第二の実施例として、制御部２が、入力画像を第一の閾値によって二値化した二値画像を取得し、その二値画像内の罫線の途切れの発生した領域を検出し、罫線の途切れを修復する方法について説明する。制御部２が既存の方法を用いて第一の閾値を求め、制御部２が第一の閾値によって入力画像を二値化するとする。この場合、第一の閾値によって入力画像を二値化した二値画像（以下、第一の二値画像とする）から制御部２が抽出する罫線の候補は、途切れが発生する場合がある。
【００９５】
罫線の途切れが発生する原因は、制御部２が抽出した罫線の候補を延長した領域に含まれる画素が、罫線の候補を延長した領域に含まれるそれぞれの画素に対応する第一の閾値の変動によって白画素に誤って認識されたものと推測できる。そこで、制御部２は、罫線の途切れが発生した付近の領域の画素について第二の閾値を算出する。具体的には、制御部２は以下の処理を実行して罫線の端点となる付近の領域について第二の閾値を算出する。
図３６は、罫線の途切れが発生した付近の領域の画素について第二の閾値を算出する場合の制御部２の機能ブロック図である。制御部２は、入力画像を取得する画像入力手段２０１、入力画像を二値化する画像二値化手段２０２、罫線の候補を抽出する罫線候補抽出手段２０６、および罫線の候補の端点が延長される場合に罫線の領域座標を修正する罫線座標補正手段２０９として機能する。また、画像二値化手段２０２は、入力画像内の着目画素を設定して着目画素の周辺領域に存在する周辺画素の値から第一の閾値を求める閾値取得手段２０３、周辺領域内の着目画素および各周辺画素の第一の閾値から着目画素を二値化するための第二の閾値を求める閾値補正手段２０４、着目画素を二値に判別する二値判定手段２０５、入力画像の罫線のエッジの有無を判定し第二の閾値を求めるべきか否かを判定する罫線エッジ判定手段２０７、および罫線の候補の端点の近傍の再二値化の判定を行うべき領域を求める再二値化領域取得手段２０８から構成される。
【００９６】
図３７は罫線の端点を検出して、端点付近の領域について再度二値化処理を実行する処理のフローチャートである。制御部２は、入力画像を取得する。制御部２は、図６で説明した処理を実行することにより、入力画像の各画素の第一の閾値を算出する（Ｓ５１）。制御部２は、二値化の対象の領域内の全ての画素について第一の閾値を算出する（Ｓ５２）。制御部２は、第一の閾値による二値化処理が終了すると（Ｓ５３：ｙｅｓ）、制御部２は第一の閾値で求めた第一の二値画像から罫線の候補を抽出する（Ｓ５４）。罫線の候補の抽出は図３４のフローチャートによって行う。
【００９７】
次に、制御部２は、罫線の候補から第二の閾値を算出する領域を特定する（Ｓ５５）。罫線の途切れが発生していると推測される領域は、罫線の候補の端となる画素および罫線の候補の端の画素の近傍の領域である。
【００９８】
図３８は、第二の実施例での罫線の端となる画素および画素の近傍の領域の説明図である。９９は罫線の候補である。罫線の候補９９は横方向の罫線である。９８は罫線の候補９９の長さ方向である。９７は罫線の候補９９の幅方向である。罫線の候補９９は、黒画素が集合した領域である。（ｘｓ，ｙｓ）および（ｘｅ，ｙｅ）は、罫線の候補９９を構成する黒画素の外接矩形の頂点座標である。制御部２は、罫線の候補９９の幅方向９７の大きさ（ｙｓ−ｙｅ）で罫線の候補９９の長さ方向９８に延長した領域を、罫線の候補９９の途切れが発生している領域とする。
【００９９】
なお、罫線の候補９９の長さ方向９８を二値画像の端まで延長した領域を罫線の途切れが発生している領域とすると、ノイズの増加が発生することもあり得る。そこで、本実施例では、図３８のように長さ方向に長さ「ｍ」だけ罫線領域を延長した領域９６−１、９６−２を、罫線の途切れが発生している領域とする。例えば、文書でよく使われる１０ｐｏｉｎｔの文字サイズの半分を罫線途切れが生ずる最大長であると設定する。この場合、入力画像の解像度が２００ｄｐｉの場合、約１４ｐｉｘｅｌとなる。そこで、罫線途切れが生ずる最大長として、ｍ＝１４と設定する。
【０１００】
制御部２は、縦方向の罫線の場合も同様に、罫線の横方向の幅の領域内で縦方向に延長した領域を罫線の途切れが発生していると推測される領域とする。つまり、制御部２は、罫線の候補の幅内で、かつ、罫線の長さ方向に延長した領域を、罫線の途切れが発生している領域であると推測する。図３７の説明に戻る。
【０１０１】
次に、制御部２は、第一の二値画像の内、罫線の途切れが発生していると推測される領域内の画素について、入力画像から第二の閾値を算出する（Ｓ５６）。具体的には、Ｓ５６の第二の閾値は、第一の二値画像の画素の位置に対応する入力画像の画素を着目画素として第二の閾値を算出する。
例えば、制御部２は、図６または図２５のフローチャートを実行する。なお、制御部２が第二の閾値を算出する画素は、罫線候補９９の右側の領域９６−２の場合、横の座標は「ｘｅ」から「ｘｅ＋ｍ」まで、縦の座標は「ｙｓ」から「ｙｅ」までになる。制御部２が第二の閾値を算出する画素は、罫線の候補９９の左側の領域９６−１の場合、横の座標は「ｘｓ−ｍ」から「ｘｓ」まで、縦の座標は「ｙｓ」から「ｙｅ」までになる。
【０１０２】
制御部２は算出した第二の閾値により入力画像の着目画素１５が黒画素か白画素かを判別する（Ｓ５７）。着目画素１５が白画素から黒画素に変更になった場合（Ｓ５８：ｙｅｓ）、制御部２は罫線の候補の延長処理を実行する（Ｓ５９）。制御部２は、例えば、以下の処理を実行して罫線の途切れが発生した領域の周辺の画素を修正する。
【０１０３】
図３９、４０、４１を用いて、罫線の外接枠の拡張を説明する。制御部２は罫線の延長を行うスキャン処理を行う。スキャン処理は罫線の端から罫線の延長方向に連続する黒画素の有無を判断する。罫線の候補の端から連続する黒画素をグループ化することにより罫線を延長する。
【０１０４】
図３９は、延長前の罫線の候補の状態である。９０は第一の二値画像の一部の領域である。９１は白画素である。９２は黒画素である。９２−２はＳ５６にて算出された第二の閾値によって黒画素に判別された画素である。９９は罫線の候補である。９９−１は罫線候補９９の端である。９３は、スキャン処理を行うスキャン方向である。スキャン方向９３は罫線から離れる方向とする。９４は、画素の範囲を特定するスキャン幅である。スキャン幅９４は罫線の候補９９の幅である。９５−１、９５−２、９５−３、９５−４、および９５−５はスキャンラインである。本実施例では、スキャンラインは罫線９９の延長方向に対して垂直方向とする。
【０１０５】
図４０は、スキャン処理のフローチャートである。制御部２は、罫線候補の端９９−１に最も近いスキャンライン９５−１からスキャン方向９３に向かってスキャン処理を行う。まず、制御部２は、罫線９９の端の隣の画素をスキャン処理の対象とするスキャンラインを設定する（Ｓ６１）。制御部２は、スキャンライン９５上で、スキャン幅９４内に黒画素があるかどうかを判定する（Ｓ６２）。制御部２は、Ｓ６２で判定したスキャンライン９５上に黒画素がある場合（Ｓ６１：ｙｅｓ）、一画素分だけスキャン方向９３にスキャンライン９５を移動する（Ｓ６３）。
【０１０６】
制御部２は、スキャン幅９４内に黒画素が無いスキャンラインを検出するまで、スキャン方向９３に向かってスキャン処理を継続する。
【０１０７】
一方、制御部２は、Ｓ６２で判定したスキャンライン９５上に黒画素がない場合（Ｓ６１：ｎｏ）、罫線の候補の端９９−１をＳ６２で判定したスキャンライン９５の一つ前のスキャンラインまで延長する（Ｓ６４）。図３９のスキャンライン９５−５のスキャン幅９４内には黒画素がない。制御部２は、スキャン方向９３で一つ前のスキャンラインとなるスキャンライン９５−４まで罫線の候補９９を延長する。
【０１０８】
図４１は、延長後の罫線の候補の状態である。図３９と同じ番号が付されているものは、図３９と同様であるため説明を省略する。９９−２は、延長された罫線の候補である。９９−３は、罫線の候補９９から延長された領域である。罫線の候補９９−２は、スキャン処理前の罫線の候補９９に対して、スキャンライン９５−４まで延長される。スキャンライン９５−４は、スキャンライン上に黒画素が無いスキャンライン９５−５からスキャン方向９３で一つ前のスキャンラインである。以上によって、制御部２は、罫線の候補９９を延長することが可能となる。図３７の説明に戻る。
制御部２は第一の二値画像の処理対象の領域内の全ての画素について処理が終了したか否かを判定する（Ｓ６０）。制御部２は、第一の二値画像の処理対象の領域内について処理が終了していない場合（Ｓ６０：ｎｏ）、Ｓ５６からの処理を行う。第一の二値画像の処理対象の領域内の全ての画素について処理が終了すると（Ｓ６０：ｙｅｓ）、制御部２は処理を終了する。以上の処理により、制御部２は第一の二値画像で罫線の途切れがあると推測される領域内の各画素の位置に対応する入力画像の画素について第二の閾値を算出し、罫線の途切れがあると推測される領域内の各画素について算出した第二の閾値で二値化した第二の二値画像を取得する。
【０１０９】
次に、罫線の途切れを修正する第二の手法について説明する。第二の手法は、スキャン処理時に使用する第二の閾値の取得方法の変更例である。制御部２は、第二の閾値を罫線の候補に判別された画素について使用した第一の閾値から取得する。
【０１１０】
図４２は、罫線の途切れを修正する第二の手法の場合の制御部２の機能ブロック図である。制御部２は、入力画像を取得する画像入力手段２０１、入力画像を二値化する画像二値化手段２０２、罫線の候補を抽出する罫線候補抽出手段２０６、および罫線の候補の端点が延長される場合に罫線の領域座標を修正する罫線座標補正手段２０９として機能する。また、画像二値化手段２０２は、入力画像内の着目画素を設定して着目画素の周辺領域に存在する周辺画素の値から第一の閾値を求める閾値取得手段２０３、罫線候補上の画素の第一の閾値から罫線の候補の延長される領域の画素に対する第二の閾値を求める罫線閾値取得手段２１０、着目画素を二値に判別する二値判定手段２０５、入力画像の罫線のエッジの有無を判定し第二の閾値を求めるべきか否かを判定する罫線エッジ判定手段２０７、および罫線の候補の端点の近傍の再二値化の判定を行うべき領域を求める再二値化領域取得手段２０８から構成される。
【０１１１】
図４３は、罫線閾値取得手段２１０の機能を詳細にした機能ブロック図である。罫線閾値取得手段２１０は、罫線候補の外接枠座標を取得する罫線領域座標取得部２２５、罫線の外接枠座標の領域内の各画素に対応する第一の閾値を取得する第一の閾値取得部２２２
取得した第一の閾値を格納する第一の閾値バッファ２２３、および格納された第一の閾値の集合の中央地を算出する中央値演算部２２４から構成される。
【０１１２】
図４４および図４５を用いて、第二の閾値の取得方法を説明する。
【０１１３】
図４４は、入力画像の一部の領域である。８０は入力画像の一部の領域である。８１は罫線に相当する画素である。８２は背景に相当する画素である。８３は前景に相当する画素である。罫線画素８１は、背景画素８２よりも明度が低く、前景画素８３よりも明度が高い。１０１乃至１１０は、罫線画素３１の個々の画素である。１１１は、第一閾値で二値化すると罫線画素３１が前景に判別される領域である。１１２は、第一閾値で二値化すると罫線画素３１が背景に判別される領域である。
【０１１４】
図４５は、入力画像の領域内の罫線を構成する画素の第一の閾値の分布図である。図４５の分布図の横軸は、図４４の罫線画素３１の個々の画素１０１乃至１１０である。図４５の分布図の縦軸は、図４４の各罫線画素３１の第一の閾値である。画素１０６の第一の閾値は、画素１０５の第一の閾値に比べて、減少している。
【０１１５】
罫線であるにも関わらず背景であると判別された画素の第一の閾値は、罫線として判別された画素に対応する第一の閾値に比べて低い。したがって、第一の閾値の急激な低下が罫線の途切れが発生する原因である。一方、罫線として判別された画素に対応する第一の閾値は、少なくとも罫線の画素を抽出するために適切な範囲の値になる。したがって、罫線の候補上の画素の第一の閾値の分布によって、第二の閾値を算出する領域を特定することができる。例えば、罫線の候補上の画素に対応する第一の閾値の平均値や最頻値、中央値などを第二の閾値にする。制御部２は、罫線の候補上の画素の第一の閾値から第二の閾値を算出する。
【０１１６】
具体的には、制御部２は、図３７のＳ５６の処理の変わりに以下の処理を実行する。制御部２は、罫線の候補の外接枠の座標を取得する。制御部２は、罫線の候補となる領域内の各画素の第一の閾値を取得する。制御部２は、Ｓ４１からＳ４３の二値化処理時で算出した各画素の第一の閾値をメモリ内の第一の閾値バッファに蓄積する。制御部２は、閾値バッファに蓄積された第一の閾値の集合から、罫線領域に該当する第一の閾値群を読み出す。制御部２は、例えば、読み出した第一の閾値群の中央値を算出する。なお、中央値の他、平均値、最頻値、その他の代表値等を用いることも可能である。
【０１１７】
中央値の演算はその定義に従って以下のように記述できる。第一の閾値群の各閾値はＴｈ（ｉ）であるとする。第一の閾値群の数はＮ個であるとする。「ｉ」は０から「Ｎ−１」まで変化する。Ｔｈ（ｉ）が数値の小さい順に並んでいるとすると、Ｎが奇数の時の中央値Ｃ１は、数（７）になる。
【０１１８】
【数７】
0005145862.tif 000008
Ｎが偶数の時の中央値は数（８）になる。
【０１１９】
【数８】
0005145862.tif 000009
以上の処理により、制御部２は、罫線の候補を判別する際に使用した第一の閾値を代表する閾値を取得することが出来る。制御部２は取得した閾値を第二の閾値にする。制御部２は、第二の閾値によって、罫線の延長方向の画素について、前景か背景かを判別する処理を実行する。
【０１２０】
本実施例では、画像内の罫線を検出する方法について説明した。多値画像を二値画像に変換するときに画素に使用する閾値を変更する技術は、文字や図形の検出についても適用することが可能である。また、本実施例では、画素を識別する値として明度を用いる。画像の色彩を特定する他のパラメータ、例えば、色相、彩度、輝度等を用いることも可能である。
【０１２１】
本発明により、入力画像の罫線の周辺に文字や別の罫線などの濃い近接画素が存在する場合でも罫線の途切れの無い二値画像を得ることができる。画素が濃いとは、前景に近い値の明度を持つことである。制御部２は、罫線の途切れの無い二値画像を取得できるため表認識の精度が向上する。表認識の制度の向上は、入力帳票画像内の文字画像情報の認識率を高めることができる。
【０１２２】
濃度が濃い画素は、文字だけでなく、罫線の場合がある。例えば、背景の明度が高く、比較的明度が低い罫線と比較的明度の高い罫線とが直交している場合、二値化処理を実行すると、比較的明度の高い罫線に途切れが発生する場合がある。この場合の罫線の途切れも防ぐことが可能である。
【図面の簡単な説明】
【０１２３】
【図１】画像処理装置の装置構成図である。
【図２】画像の構成例である。
【図３】制御部２の機能ブロック図である。
【図４】第一の方法の詳細な機能ブロック図である。
【図５】第一の方法によって第二の閾値を算出する処理のフローチャートである。
【図６】第一の閾値を算出する処理のフローチャートである。
【図７】入力画像と第一の閾値との関係を示す図である。
【図８】図７の周辺領域１６−３に含まれる各画素の明度の頻度分布図である。
【図９】入力画像と第一の閾値との関係を示す図である。
【図１０】図９の周辺領域１６−４に含まれる各画素の明度の頻度分布図である。
【図１１】入力画像と第一の閾値との関係を示す図である。
【図１２】図１１の周辺領域１６−５に含まれる各画素の明度の頻度分布図である。
【図１３】入力画像と第一の閾値との関係を示す図である。
【図１４】図１３の周辺領域１６−６に含まれる各画素の明度の頻度分布図である。
【図１５】入力画像と第一の閾値との関係を示す図である。
【図１６】図１５の周辺領域１６−８内の各画素の明度の頻度分布図である。
【図１７】入力画像と第一の閾値との関係を示す図である。
【図１８】図１７の周辺領域１６−９内の各画素の明度の頻度分布図である。
【図１９】入力画像と第一の閾値との関係を示す図である。
【図２０】図１９の周辺領域１６−１０内の各画素の明度の頻度分布図である。
【図２１】入力画像である。
【図２２】第一の閾値によって二値化した二値画像である。
【図２３】第二の閾値によって二値化した二値画像である。
【図２４】第二の方法の詳細な機能ブロック図である。
【図２５】第二の方法によって第二の閾値を算出する処理のフローチャートである。
【図２６】罫線が存在するか否かを判定した結果を考慮する場合の機能ブロック図である。
【図２７】罫線エッジ判定手段２０７の機能を詳細にした機能ブロック図である。
【図２８】罫線のエッジの有無を判別するフローチャートである。
【図２９】縦の勾配を検出するＳｏｂｅｌフィルタ６２である。
【図３０】横の勾配を検出するＳｏｂｅｌフィルタ６３である。
【図３１】罫線の候補を抽出するため場合の機能ブロック図である。
【図３２】横方向の罫線を検出する処理のフローチャートである。
【図３３】二値画像の横方向の黒画素の領域が検出される第一の状態である。
【図３４】二値画像の横方向の黒画素の領域が検出される第二の状態である。
【図３５】二値画像の横方向の黒画素の領域が検出される第三の状態である。
【図３６】罫線の途切れが発生した付近の領域の画素について第二の閾値を算出する場合の機能ブロック図である。
【図３７】罫線の端点を検出して、端点付近の領域について再度二値化処理を実行する処理のフローチャートである。
【図３８】第二の実施例での罫線の端となる画素および画素の近傍の領域の説明図である。
【図３９】延長前の罫線の候補の状態である。
【図４０】スキャン処理のフローチャートである。
【図４１】延長後の罫線の候補の状態である。
【図４２】罫線の途切れを修正する第二の手法の場合の制御部２の機能ブロック図である。
【図４３】罫線閾値取得手段２１０の機能を詳細にした機能ブロック図である。
【図４４】入力画像の一部の領域である。
【図４５】入力画像の領域内の罫線を構成する画素の第一の閾値の分布図である。
【符号の説明】
【０１２４】
１  画像処理装置
２  制御部
３  入力部
４  出力部
５  メモリ
６  記憶部
７  ネットワークインターフェース
８  画像処理プログラム
９  バス
【図１】
0005145862.tif 000010
【図２】
0005145862.tif 000011
【図３】
0005145862.tif 000012
【図４】
0005145862.tif 000013
【図５】
0005145862.tif 000014
【図６】
0005145862.tif 000015
【図７】
0005145862.tif 000016
【図８】
0005145862.tif 000017
【図９】
0005145862.tif 000018
【図１０】
0005145862.tif 000019
【図１１】
0005145862.tif 000020
【図１２】
0005145862.tif 000021
【図１３】
0005145862.tif 000022
【図１４】
0005145862.tif 000023
【図１５】
0005145862.tif 000024
【図１６】
0005145862.tif 000025
【図１７】
0005145862.tif 000026
【図１８】
0005145862.tif 000027
【図１９】
0005145862.tif 000028
【図２０】
0005145862.tif 000029
【図２１】
0005145862.tif 000030
【図２２】
0005145862.tif 000031
【図２３】
0005145862.tif 000032
【図２４】
0005145862.tif 000033
【図２５】
0005145862.tif 000034
【図２６】
0005145862.tif 000035
【図２７】
0005145862.tif 000036
【図２８】
0005145862.tif 000037
【図２９】
0005145862.tif 000038
【図３０】
0005145862.tif 000039
【図３１】
0005145862.tif 000040
【図３２】
0005145862.tif 000041
【図３３】
0005145862.tif 000042
【図３４】
0005145862.tif 000043
【図３５】
0005145862.tif 000044
【図３６】
0005145862.tif 000045
【図３７】
0005145862.tif 000046
【図３８】
0005145862.tif 000047
【図３９】
0005145862.tif 000048
【図４０】
0005145862.tif 000049
【図４１】
0005145862.tif 000050
【図４２】
0005145862.tif 000051
【図４３】
0005145862.tif 000052
【図４４】
0005145862.tif 000053
【図４５】
0005145862.tif 000054