(57)【要約】【課題】用紙の撮影画像からその用紙の傾きを簡単な方法で正確に検出することのできる用紙傾き検出装置を提供する。【解決手段】画像入力装置１２を通じて入力された用紙１０の画像データは画像処理装置１３にて二値化処理された後、水平方向をＸ軸、垂直方向をＹ軸とした画像メモリ１５に画素単位で展開される。ここで、ＣＰＵ１１は、まず、垂直方向または水平方向の少なくとも一方向からのスキャニングにより、画像メモリ１５の中で白黒反転している座標を検査する。そして、最初の白黒反転座標を開始位置として、その開始位置から白黒反転座標が一方向に連続してなる直線を用紙１０の外形線の一辺として検出し、その直線の傾き角度を用紙１０の傾き角度として算出する。【選択図】      図１
2005165822.tif 000002
【特許請求の範囲】
【請求項１】
用紙の撮影画像を入力する画像入力手段と、
この画像入力手段によって入力された撮影画像を二値化処理して得られる画像データを、水平方向をＸ軸、垂直方向をＹ軸とした画像メモリに画素単位で展開する画像展開手段と、
この画像展開手段によって前記画像メモリに展開された画像データを垂直方向または水平方向の少なくとも一方向からスキャンして前記画像メモリの中で白黒反転している座標を検査する反転検査手段と、
この反転検査手段によって得られた最初の白黒反転座標を開始位置として、その開始位置から白黒反転座標が一方向に連続してなる直線を前記用紙の外形線の一辺として検出する直線検出手段と、
この直線検査手段によって検出された直線の傾き角度を前記用紙の傾き角度として算出する傾き角度算出手段と
を具備したことを特徴とする用紙傾き検出装置。
【請求項２】
前記反転検査手段は、前記画像メモリに展開された画像データを上下左右の４方向からスキャンして前記画像メモリの中で前記用紙の外形線を構成する４辺の直線に対応した白黒反転座標をそれぞれ検査することを特徴とする請求項１記載の用紙傾き検出装置。
【請求項３】
前記直線検出手段は、白黒反転座標の連続性が途絶える個数を計数し、その計数値が予め用紙サイズによって決められた所定数内であれば現在処理対象としている直線を有効とし、前記所定数を超えた場合にはその直線を無効とすることを特徴とする請求項１記載の用紙傾き検出装置。
【請求項４】
前記傾き角度算出手段は、前記直線検査手段によって検出された直線の長さと予め用紙サイズによって決められた所定の長さとを比較し、前記直線の長さが前記所定の長さを満したときに、その直線の開始位置と終了位置の各座標値に基づいて前記用紙の傾き角度を算出することを特徴とする請求項１記載の用紙傾き検出装置。
【請求項５】
用紙の撮影画像から前記用紙の傾きを検出するための用紙傾き検出方法であって、
前記用紙の撮影画像を二値化処理して得られる画像データを、水平方向をＸ軸、垂直方向をＹ軸とした画像メモリに画素単位で展開するステップと、
前記画像メモリに展開された画像データを垂直方向または水平方向の少なくとも一方向からスキャンして前記画像メモリの中で白黒反転している座標を検査するステップと、
最初の白黒反転座標を開始位置として、その開始位置から白黒反転座標が一方向に連続してなる直線を前記用紙の外形線の一辺として検出するステップと、
この検出された直線の傾き角度を前記用紙の傾き角度として算出するステップと
を備えたことを特徴とする用紙傾き検出方法。
【請求項６】
前記画像メモリの中で白黒反転している座標を検査するステップにおいて、
前記画像メモリに展開された画像データを上下左右の４方向からスキャンして前記画像メモリの中で前記用紙の外形線を構成する４辺の直線に対応した白黒反転座標をそれぞれ検査することを特徴とする請求項５記載の用紙傾き検出方法。
【請求項７】
前記白黒反転座標が一方向に連続してなる直線を検出するステップにおいて、
白黒反転座標の連続性が途絶える個数を計数し、その計数値が予め用紙サイズによって決められた所定数内であれば現在処理対象としている直線を有効とし、前記所定数を超えた場合にはその直線を無効とすることを特徴とする請求項５記載の用紙傾き検出方法。
【請求項８】
前記用紙の傾き角度を算出するステップにおいて、
処理対象として検出された直線の長さと予め用紙サイズによって決められた所定の長さとを比較し、前記直線の長さが前記所定の長さを満したときに、その直線の開始位置と終了位置の各座標値に基づいて前記用紙の傾き角度を算出することを特徴とする請求項５記載の用紙傾き検出方法。
【請求項９】
用紙の撮影画像から前記用紙の傾きを検出する機能を備えたコンピュータによって実行されるプログラムであって、
前記コンピュータに、
前記用紙の撮影画像を二値化処理して得られる画像データを、水平方向をＸ軸、垂直方向をＹ軸とした画像メモリに画素単位で展開する機能と、
前記画像メモリに展開された画像データを垂直方向または水平方向の少なくとも一方向からスキャンして前記画像メモリの中で白黒反転している座標を検査する機能と、
最初の白黒反転座標を開始位置として、その開始位置から白黒反転座標が一方向に連続してなる直線を前記用紙の外形線の一辺として検出する機能と、
この検出された直線の傾き角度を前記用紙の傾き角度として算出する機能と
を実現させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、用紙の傾きを検出するための用紙傾き検出装置、用紙傾き検出方法及びプログラムに関する。
【背景技術】
【０００２】
例えば、文字認識装置では、カメラで用紙を撮影し、その撮影画像から用紙に印刷された文字を認識処理するものがある。この場合、用紙が傾いて撮影されていると、文字の認識精度に大きく影響するため、例えば用紙の傾き検出用の特殊なマークを用紙の所定位置に付けておき、文字認識の際にそのマークを基準にして用紙の傾きを補正することが一般的に行われている。
【０００３】
従来、この種のマークを必要とせずに、撮影画像から用紙の傾きを検出する画像処理方法として、例えば特許文献１に開示されている方法が知られている。この特許文献１では、原稿台に載置された用紙を撮影し、その撮影画像から用紙と原稿台との濃度差から用紙のエッジ（輪郭）を検出して、当該用紙の傾きを補正している。
【特許文献１】特開２０００−２２８７１９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述したように、文字認識装置などでは、撮影対象となる用紙に傾き検出用の特殊なマークを付けておくことで、そのマークを基準にして用紙の傾きを検出することが行われている。しかしながら、このような方法では、撮影対象とする用紙を自由に選べないなどの問題がある。
【０００５】
また、前記特許文献１などの画像処理の分野で知られている用紙のエッジ検出の方法は、一般的に複雑なアルゴリズムを必要とするため、より簡単な方法が求められるものである。
【０００６】
そこで、本発明は、用紙の撮影画像からその用紙の傾きを簡単な方法で正確に検出することのできる用紙傾き検出装置、用紙傾き検出方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の用紙傾き検出装置は、用紙の撮影画像を入力する画像入力手段と、この画像入力手段によって入力された撮影画像を二値化処理して得られる画像データを、水平方向をＸ軸、垂直方向をＹ軸とした画像メモリに画素単位で展開する画像展開手段と、この画像展開手段によって前記画像メモリに展開された画像データを垂直方向または水平方向の少なくとも一方向からスキャンして前記画像メモリの中で白黒反転している座標を検査する反転検査手段と、この反転検査手段によって得られた最初の白黒反転座標を開始位置として、その開始位置から白黒反転座標が一方向に連続してなる直線を前記用紙の外形線の一辺として検出する直線検出手段と、この直線検査手段によって検出された直線の傾き角度を前記用紙の傾き角度として算出する傾き角度算出手段とを具備して構成される。
【０００８】
このような構成によれば、用紙をカメラ等で撮影したときの画像データが画像メモリに展開された際に、垂直方向または水平方向の少なくとも一方向からのスキャニングにより、前記画像メモリの中で白黒反転している座標が検査される。そして、最初の白黒反転座標を開始位置として、その開始位置から白黒反転座標が一方向に連続してなる直線が前記用紙の外形線の一辺として検出され、その直線の傾き角度が前記用紙の傾き角度として算出される。
【０００９】
このように、画像メモリに展開された用紙の画像データに対し、一方向に連続する白黒反転座標を検査し、これらを結ぶ直線を用紙の外形線の一辺と見なして、その直線の傾き角度を求めることで、用紙がどの程度傾いて撮影されたのかを簡単かつ正確に検出することができる。
【００１０】
また、前記反転検査手段において、前記画像メモリに展開された画像データを上下左右の４方向からスキャンして前記画像メモリの中で前記用紙の外形線を構成する４辺の直線に対応した白黒反転座標をそれぞれ検査する構成とすれば、これらの直線の角度から用紙の傾きをより正確に求めることができる。
【００１１】
また、前記直線検出手段において、白黒反転座標の連続性が途絶える個数を計数し、その計数値が予め用紙サイズによって決められた所定数内であれば現在処理対象としている直線を有効とし、前記所定数を超えた場合にはその直線を無効とすることで、例えば画像デーの読み取り状態が悪く、用紙の外形線が所々で欠けているような場合に対処することができる。
【００１２】
また、前記傾き角度算出手段において、前記直線検査手段によって検出された直線の長さと予め用紙サイズによって決められた所定の長さとを比較し、前記直線の長さが前記所定の長さを満したときに、その直線の開始位置と終了位置の各座標値に基づいて前記用紙の傾き角度を算出することで、所定の長さを満足する直線を処理対象として正確に傾き角度を求めることができる。
【発明の効果】
【００１３】
以上のように本発明によれば、画像メモリに展開された用紙の画像データに対し、一方向に連続する白黒反転座標を検査し、これらを結ぶ直線を用紙の外形線の一辺と見なして、その直線の傾き角度を求めるようにしたことで、用紙に傾き検出用の特殊なマークがなくとも、その用紙の傾きを簡単かつ正確に検出することができ、例えば用紙に印刷された文字の認識処理を行う際に、その傾き角度を補正して正しく文字認識を行うことができるようになる。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照して本発明の実施形態を説明する。
【００１５】
（第１の実施形態）
図１は本発明の第１の実施形態に係る用紙傾き検出装置の回路構成を示すブロック図である。この用紙傾き検出装置は、例えば撮影画像から用紙上の文字を読み取る文字読取装置などに適用されるものである。
【００１６】
図１に示すように、本実施形態における用紙傾き検出装置は、マイクロプロセッサであるＣＰＵ１１を備えると共に、このＣＰＵ１１によって動作が制御される画像入力装置１２、画像処理装置１３、そして、ＲＯＭ１４、画像メモリ１５、第１のパラメータテーブル１６および第２のパラメータテーブル１７といった各種メモリデバイスを備えて構成される。
【００１７】
ＣＰＵ１１は、本装置全体の制御を司るものであり、ＲＯＭ１４などに記憶されたプログラムを読み込むことにより、そのプログラムに記述された手順に従って各種処理を実行する。
【００１８】
画像入力装置１２は、例えばカメラやスキャナなどからなり、図示せぬ原稿台などに載置された用紙１０の文字印刷面を撮影して、その撮影された画像データの入力を行う。なお、用紙１０の色は白であり、この用紙１０を載せる原稿台の色は用紙１０と区別可能な色、例えば黒であるとする。画像処理装置１３は、この画像入力装置１２から入力された用紙１０の画像データを二値化するなどの所定の画像処理を行う。
【００１９】
ＲＯＭ１４は、ＣＰＵ１１の起動に必要なプログラムを含む各種データを予め記憶している。画像メモリ１５は、所定サイズのイメージメモリであり、画像処理装置１３によって二値化処理された用紙１０の画像データを記憶する。
【００２０】
第１のパラメータテーブル１６および第２のパラメータテーブル１７は、用紙の傾きを検出するための各種パラメータ値を記憶したテーブルである。なお、第１のパラメータテーブル１６に記憶される各パラメータ値については後に図３を参照して説明し、第２のパラメータテーブル１７に記憶される各パラメータ値については後に図８を参照して説明する。
【００２１】
また、この用紙傾き検出装置には、表示装置１８、入力装置１９、電源装置２０、媒体読取り装置２１などが備えられる。
【００２２】
表示装置１８は、例えばＬＣＤ（Liquid Crystal Display）などからなり、用紙の読み取り結果やメニュー画面等の表示を行う。入力装置１９は、例えばキーボード等からなり、各種操作指示などを行う場合に用いられる。電源装置２０は、各部の駆動に必要な電源電圧の供給制御を行う。
【００２３】
媒体読取り装置２１は、記録媒体２２に記録されたプログラムを含む各種情報の読み取りを行うための装置であり、例えば磁気ディスク装置等の外部記憶装置からなる。記録媒体２２は、この媒体読取り装置２１に用いられるメディアであり、例えば磁気ディスクなどである。
【００２４】
ここで、本実施形態における用紙傾き検出装置の処理動作を説明する前に、理解を容易にするため、図２を用いて本装置によって実現される用紙傾き検出方法について説明しておく。
【００２５】
図２はその説明図であり、原稿台に傾いて置かれた用紙１０が撮影され、用紙１０の撮影画像が右上がりに傾いて画像メモリ１５に展開された状態を示している。図中のＤ１は用紙１０の画像データである。
【００２６】
図２に示すように、画像の横方向をＸ軸、縦方向をＹ軸として、２値化された画像データが用紙１０の色は白“０”で、その用紙１０の周りに存在する原稿台の色が黒“１”として記憶されている。傾き検出は、図中の点線で示すように画像の原点ＯからＸ軸方向に移動しつつ垂直スキャン（上から下方向へのスキャン）を繰り返し、白黒が反転している箇所（データ値“１”と“０”が反転している座標）を検査することで行われる。
【００２７】
ここで、最初に見つけた白黒反転箇所をＰ１とすると、そこから次のＸ方向に移動した位置で再び続けて垂直スキャンを繰り返して連続する反転位置を見つけ出す。そして、Ｐ１から一方向に連続して所定の長さＬだけ移動させた白黒反転箇所Ｐ２を見い出したとすると、このＰ１−Ｐ２の直線を用紙１０の外形線の一辺と見なし、そのＰ１とＰ２の各座標値から用紙１０がどの程度傾いているのかを算出する。
【００２８】
前記所定の長さＬは、用紙１０の撮影画像の横サイズから決められる。つまり、このＬの長さ分だけ白黒反転箇所が一方向に連続していれば、用紙１０の外形線の一辺と見なされる。
【００２９】
第１のパラメータテーブル１６には、このような傾き検出に用いられる各種パラメータ値が設定される。図３にその一例を示す。ここでは、各種パラメータを以下のように定義している。なお、“ｒｅｖ”とは、反転（ｒｅｖｅｒｓ）のことである。“ＮｏｐＣｏｕｎｔ”とは不連続カウンタのことである。また、横座標／縦座標とは、図２に示すように、画像メモリ１５のＸ座標（水平方向の座標）、Ｙ座標（垂直方向の座標）のことである。
【００３０】
ｓｉｚｅＸ      ：調査対象画像の横ｐｉｘｅｌ数
ｓｉｚｅＹ      ：調査対象画像の縦ｐｉｘｅｌ数
ｒｅｖＸ        ：反転調査対象ｐｉｘｅｌの横座標
ｒｅｖＹ        ：反転調査対象ｐｉｘｅｌの縦座標
ｓｔａｒｔＸ    ：直線の開始位置と判断したｐｉｘｅｌの横座標
ｓｔａｒｔＹ    ：直線の開始位置と判断したｐｉｘｅｌの縦座標
ＰｒｅＰｏｉｎｔ：前回検出したｐｉｘｅｌの縦座標
ＮｏｐＣｏｕｎｔ：反転検出できなかった回数
ａｎｇｌｅ      ：反転検出時の検出角度
ＰｒｅＡｎｇｌｅ：前回反転検出時の検出角度
ｎ              ：直線と認識するためのｐｉｘｅｌ数算出の係数
ＧｅｔＡｎｇｌｅ：開始点と最終測定点との間で算出される最終角度
以下に、図４および図５に示すフローチャートを参照しながら、本装置の具体的な処理動作について説明する。
【００３１】
図４は本装置の第１の実施形態における処理動作を示すフローチャートであり、用紙１０の撮影画像を取得してから用紙１０の傾きを検出するまでの処理手順（アルゴリズム）が示されている。なお、このフローチャートで示される各処理は、本装置に備えられたマイクロプロセッサであるＣＰＵ１１がＲＯＭ１４などに記憶されたプログラムを読み込むことにより実行される。
【００３２】
まず、用紙１０の画像データが画像入力装置１２を通じて取得される（ステップＡ１１）。その際、このとき得られた用紙１０の画像データを検査対象画像として、横方向（水平方向）のｐｉｘｅｌ数と、縦方向（垂直方向）のｐｉｘｅｌ数が求められ、横ｐｉｘｅｌ数＝ｓｉｚｅＸ、縦ｐｉｘｅｌ数＝ｓｉｚｅＹとして、図３に示す第１のパラメータテーブル１６にセットされる（ステップＡ１２）。
【００３３】
次に、この画像データが画像処理装置１３によって二値化されて、図２に示したように所定サイズの画像メモリ１５に画素単位で展開される（ステップＡ１３）。この画像メモリ１５に展開された画像データＤ１の各ｐｉｘｅｌ（画素）の座標値は、水平方向をＸ軸、垂直方向をＹ軸として表される。
【００３４】
ここで、画像メモリ１５に展開された画像データＤ１から以下のような手順で用紙１０の傾きが検出される。
【００３５】
すなわち、ＣＰＵ１１は、まず、反転調査対象ｐｉｘｅｌの横座標を示すｒｅｖＸを初期設定（ｒｅｖＸ＝０）した後（ステップＡ１４）、画像メモリ１５の原点（０，０）を起点にして上から下に向かって垂直スキャンを行い、白黒反転された座標（ｒｅｖＸ，ｒｅｖＹ）を調査する（ステップＡ１５）。
【００３６】
図５にこのときの反転調査処理のフローチャートを示す。このフローチャートでは、ある列に含まれる各画素を上から下に２画素ずつ順に抽出していき、その２画素間で白黒の反転が見つかったら、そこを用紙１０の外形線（輪郭）として認識する処理が示されている。
【００３７】
この図５に示すように、ＣＰＵ１１は、まず、反転調査対象ｐｉｘｅｌの縦座標を示すｒｅｖＹを０として（ステップＢ１１）、同じ列の中の隣接する２つの画素（ｒｅｖＸ，ｒｅｖＹ）と（ｒｅｖＸ，ｒｅｖＹ＋１）の白黒状態を比較する（ステップＢ１２）。その結果、両者間に白黒の反転が見られなかった場合には（ステップＢ１２のＹｅｓ）、ｒｅｖＹをインクリメントして次の画素に進む（ステップＢ１３）。なお、図中の「＋＋」の記号は更新を表している。
【００３８】
この場合、ｒｅｖＸ＝０であれば、画像メモリ１５上の（０，０）と（０，１）、（０，１）と（０，２）、（０，２）と（０，３）、（０，３）と（０，４）…といったように、ｒｅｖＸ＝０の位置から縦一列に２画素毎に白黒反転座標を順次チェックしていくことになる。
【００３９】
ここで、用紙１０の画像データＤ１の縦ｐｉｘｅｌ数をｓｉｚｅＹとした場合に、ｒｅｖＹ＝ｓｉｚｅＹになると（ステップＢ１４のＹｅｓ）、当該検査対象とする列の最後の画素までチェックしたことになるので、ここでの処理を抜ける。
【００４０】
一方、画像メモリ１５の垂直スキャンにより、隣接する２つ画素の（ｒｅｖＸ，ｒｅｖＹ）と（ｒｅｖＸ，ｒｅｖＹ＋１）の間に白黒反転を検出できた場合には（ステップＢ１２のＮｏ）、ＣＰＵ１１はそこが用紙１０の外形線（輪郭）に相当するものと判断し、その座標点を傾き検出用の直線の開始位置として定める。図２の例では、点Ｐ１がこれに当たる。
【００４１】
このようにして最初の白黒反転位置が見つかると、処理対象を隣の列に移して前記同様に反転座標の調査を行う。その際に、反転座標が見つからないと、ｒｅｖＹ＝ｓｉｚｅＹとなるので、そのときには不連続カウンタＮｏｐＣｏｕｎｔをインクリメントする。このＮｏｐＣｏｕｎｔは、例えば画像データＤ１の読み取り状態が悪く、用紙１０の外形線が所々で欠けているような場合に対処するものである。このＮｏｐＣｏｕｎｔの値が予め用意サイズによって決められた所定の値ｎ以上になるとやり直しになる（ステップＡ１６〜Ａ２３）。
【００４２】
詳しく説明すると、図４に示すように、前記ステップＡ１５の反転調査処理の後、ＣＰＵ１１は、まず、ｒｅｖＸをインクリメントして処理対象を隣の列に移す（ステップＡ１６）。その際、上述した図５の反転調査処理にて白黒反転座標が見つかっているか否かを確認するため、ＣＰＵ１１は現在のｒｅｖＹの値がｓｉｚｅＹであるか否かを判断する（ステップＡ１７）。
【００４３】
前記反転調査処理で白黒反転座標が見つかっていなければ、ｒｅｖＹ＝ｓｉｚｅＹになっており（ステップＡ１７のＹｅｓ）、そのときにステップＡ１５の処理に戻って次の列に対して反転調査を繰り返すことになる。
【００４４】
一方、前記反転調査処理で白黒反転座標が見つかっていれば、ｒｅｖＹ＝ｓｉｚｅＹでないので（ステップＡ１７のＮｏ）、その座標点（ｒｅｖＸ，ｒｅｖＹ）を傾き検出用の直線の開始位置として定めるべく、ｓｔａｒｔＹ＝ｒｅｖＹ，ｓｔａｒｔＸ＝ｒｅｖＸをセットする。また、その際に、不連続カウンタＮｏｐＣｏｕｎｔを０クリアしておくと共に、前回検出した縦座標を示すＰｒｅＰｏｉｎｔにｓｔａｒｔＹをセットしておく（ステップＡ１８）。
【００４５】
以後同様にして、ＣＰＵ１１は、ｒｅｖＸを更新しながら垂直スキャンを繰り返して、白黒反転している画素をＸ軸方向に検査していく（ステップＡ１９，Ａ２０）。上述したように、その調査中にｒｅｖＹ＝ｓｉｚｅＹとなれば（ステップＡ２１のＹｅｓ）、不連続カウンタＮｏｐＣｏｕｎｔをインクリメントし（ステップＡ２２）、その値が所定値ｎを越えてしまった場合には（ステップＡ２３のＮｏ）、現在検査対象としている直線を無効とし、新たな直線を検出するべくステップＡ１５からの処理に戻ってやり直すことになる。
【００４６】
また、ｒｅｖＹ＝ｓｉｚｅＹでなければ（ステップＡ２１のＮｏ）、隣の列で白黒反転座標が見つかったことであり、その場合には、当該列の白黒反転座標と前回検出した白黒反転座標とを比較して両者の座標点を結ぶ直線の傾き状態を検出する（ステップＡ２４〜Ａ２６）。
【００４７】
この場合、前回検出した白黒反転座標（Ｙ座標）は前記ステップＡ１８にてＰｒｅＰｏｉｎｔにセットされており、ＣＰＵ１１はそのＰｒｅＰｏｉｎｔと今回の反転調査処理で得られたｒｅｖＹとを比較する（ステップＡ２４）。
【００４８】
その結果、ＰｒｅＰｏｉｎｔ＜ｒｅｖＹであれば、つまり、今回検出した白黒反転座標のＹ座標が前回検出した白黒反転座標よりも大きければ（ステップＡ２４のＹｅｓ）、両者間を結ぶ直線は右下方向に傾いていることであり、ＣＰＵ１１は検出角度ａｎｇｌｅに「Ｍｉｎｕｓ」をセットする（ステップＡ２５）。
【００４９】
逆に、ＰｒｅＰｏｉｎｔ＞ｒｅｖＹであれば、つまり、今回検出した白黒反転座標のＹ座標が前回検出した白黒反転座標よりも小さければ（ステップＡ２４のＮｏ）、両者間を結ぶ直線は右上方向に傾いていることであり、ＣＰＵ１１は検出角度ａｎｇｌｅに「Ｐｌｕｓ」をセットする（ステップＡ２６）。
【００５０】
なお、「Ｍｉｎｕｓ」はマイナス方向の傾き、「Ｐｌｕｓ」はプラス方向の傾きを表している。図２の例では、点Ｐ１と点Ｐ２を結ぶ直線は右上がりであり、これをプラス方向の傾きとする。
【００５１】
ここで、最初の反転列の隣の列で白黒反転座標が見つかったのか否かを判断するために、ＣＰＵ１１は（ｒｅｖＸ−ｓｔａｒｔＸ−ＮｏｐＣｏｕｎｔ）を求める（ステップＡ２７）。その結果、（ｒｅｖＸ−ｓｔａｒｔＸ−ＮｏｐＣｏｕｎｔ）＝１であれば（ステップＡ２７のＹｅｓ）、最初の反転列の隣の列で白黒反転座標が見つかったものと判断して、ＣＰＵ１１は前回反転検出時の検出角度を示すＰｒｅＡｎｇｌｅに前記ステップＡ２４の処理で得られた現在の検出角度ａｎｇｌｅ（Ｍｉｎｕｓ／Ｐｌｕｓ）をセットする（ステップＡ２８）。
【００５２】
このようにして、ＰｒｅＡｎｇｌｅをセットすると、ＣＰＵ１１は現在処理対象として得られている直線（ｒｅｖＸ−ｓｔａｒｔＸ）が傾きを検出できる長さを有しているか否かを判断する（ステップＡ２９）。これは、予め用紙サイズによって決められた所定の値（ｓｉｚｅＸ／ｎ）を傾き検出可能な長さの条件とし、現在処理対象として得られている直線（ｒｅｖＸ−ｓｔａｒｔＸ）がこの長さを満足しているか否かをチェックすることで判断する。
【００５３】
（ｒｅｖＸ−ｓｔａｒｔＸ）＜（ｓｉｚｅＸ／ｎ）であれば、つまり、現在処理対象として得られている直線の長さが前記条件を満たしていなければ（ステップＡ２９のＹｅｓ）、ＣＰＵ１１はＰｒｅＰｏｉｎｔに現在のｒｅｖＹをセットし直して（ステップＡ３０）、ステップＡ１９からの処理を繰り返すことになる。
【００５４】
なお、ＰｒｅＰｏｉｎｔに現在のｒｅｖＹをセットしたときに、ＣＰＵ１１はｒｅｖＸの値を確認する（ステップＡ３０）。その結果、ｒｅｖＸ＝ｓｉｚｅＸに達してしまった場合には（ステップＡ３１のＮｏ）、直線の取得が失敗したものとして、ここで処理を終える。
【００５５】
また、ＰｒｅＰｏｉｎｔの更新により、さらに次の列に対する反転検査処理を行った結果、そのときに得られた反転座標を結ぶ直線の傾きが前回までの直線の傾きと異なっていた場合、つまり、ＰｒｅＡｎｇｌｅ＝ａｎｇｌｅでなかった場合には（ステップＡ３２のＮｏ）、ＣＰＵ１１はステップＡ１８からの処理に戻り、ｓｔａｒｔＸ、ｓｔａｒｔＹ、ＮｏｐＣｏｕｎｔ、ＰｒｅＰｏｉｎｔをリセットして、反転検査処理を最初からやり直して新たな直線を探し出す。
【００５６】
また、今回得られた反転座標を結ぶ直線の傾きが前回までの直線の傾きと同じ方向であった場合には（ステップＡ３２のＹｅｓ）、ＣＰＵ１１はその反転座標を有効として、この時点までに得られた直線の長さ（ｒｅｖＸ−ｓｔａｒｔＸ）が前記条件（ｓｉｚｅＸ／ｎ）を満たすか否かを判断する（ステップＡ２９）。その結果、まだ条件を満たしていないのであれば（ステップＡ２９のＹｅｓ）、その条件を満たすまで前記反転検査処理を繰り返す。
【００５７】
このようにして、前記反転検査処理により同じ方向に連続する直線を見つけ出す。そして、その一方向に連続する直線の長さが前記条件を満たすと、つまり、（ｒｅｖＸ−ｓｔａｒｔＸ）＝（ｓｉｚｅＸ／ｎ）になれば（ステップＡ２９のＮｏ）、ＣＰＵ１１は当該直線の開始点の座標（ｓｔａｒｔＸ，ｓｔａｒｔＹ）と終了点の座標（ｒｅｖＸ，ｒｅｖＹ）に基づいて当該直線の傾き角度ＧｅｔＡｎｇｌｅを用紙１０の傾き角度として算出する（ステップＡ３３）。
【００５８】
すなわち、図２の例で言えば、点Ｐ１と点Ｐ２を結ぶ長さＬの直線を傾き検査対象として、その点Ｐ１、Ｐ２の各Ｘ，Ｙ座標から当該直線の傾き角度を用紙１０の傾き角度として得る。
【００５９】
このように、画像メモリ１５に展開された用紙１０の画像データＤ１に対し、一方向に連続する白黒反転座標を検査し、これらを結ぶ直線が所定の長さを満たす場合に用紙１０の外形線の一辺と見なして、その直線の傾き角度を求めることで、用紙１０がどの程度傾いて撮影されたのかを簡単かつ正確に検出することができる。これにより、例えば用紙１０に印刷された文字の認識処理を行う際に、その傾き角度を補正して正しく文字認識を行うことができる。
【００６０】
なお、このような方法による傾き検出では、画像サイズに対して一定の割合で直線が存在すればいいので、例えばサムネイル画像のように、処理対象となる画像データが縮小されていても適用可能である。
【００６１】
また、前記実施形態では、画像メモリ１５の上から下方向に向かってスキャニングを行い白黒反転座標を検査したが、下から上方向へスキャニングしても良い。また、このような垂直方向のスキャニングに限らず、画像メモリ１５の左から右方向、または、右から左方向へ水平スキャンして白黒反転座標を検査することでも良い。
【００６２】
さらに、例えば画像メモリ１５の上から下方向へのスキャニングにより条件を満たす直線が得られなかった場合に、引き続き下から上方向へスキャニングするなど、別の方向からのスキャニングを続けて行って白黒反転座標を検査することでも良い。
【００６３】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。
【００６４】
前記第１の実施形態では、上から下に向かう一方向の処理を行うものとしたが、第２の実施形態では、この処理を上下左右の４方向から行うことで、用紙の４辺の直線を検出するものである。
【００６５】
図６にこの様子を示す。図２と同様に用紙１０の撮影画像が画像メモリ１５に展開された状態を示している。図中のＤ１は用紙１０の画像データである。また、画像メモリ１５の横方向をＸ軸、縦方向をＹ軸として、用紙１０の画像データＤ１の各ピクセスの座標値が表されている。
【００６６】
まず、第１方向のスキャンとして、画像メモリ１５の上から下方向へ垂直スキャンして、用紙１０の外形線を構成する４辺のうちの上辺１０ａに対応した直線を検出し、その直線の開始座標と角度を算出する。
【００６７】
次に、第２方向のスキャンとして、画像メモリ１５の下から上方向へ垂直スキャンして、用紙１０の外形線を構成する４辺のうちの下辺１０ｂに対応した直線を検出し、その直線の開始座標と角度を算出する。
【００６８】
次に、第３方向のスキャンとして、画像メモリ１５の左から右方向へ水平スキャンして、用紙１０の外形線を構成する４辺のうちの左辺１０ｃに対応した直線を検出し、その直線の開始座標と角度を算出する。
【００６９】
次に、第４方向のスキャンとして、画像メモリ１５の右から左方向へ水平スキャンして、用紙１０の外形線を構成する４辺のうちの左辺１０ｄに対応した直線を検出し、その直線の開始座標と角度を算出する。
【００７０】
このようにして、４方向からのスキャニングにより用紙１０の外形線を構成する４辺１０ａ〜１０ｄの直線を検出することにより、これらの直線の角度に基づいて用紙１０の傾きをより正確に求めることができる。また、例えば図７に示すように、用紙１０の一部がはみ出して撮影された場合であっても、他の直線の角度から用紙１０の傾きを検出することができる。
【００７１】
さらに、これらの直線の交点Ｑ１〜Ｑ４を求めて射影変換処理を行うようにすれば、例えば用紙１０が斜めに撮影された状態にあっても、その状態を補正して傾きのない画像にすることができる。
【００７２】
第２のパラメータテーブル１７には、このような傾き検出に用いられる各種パラメータ値が設定される。図８にその一例を示す。ここでは、各種パラメータを以下のように定義している。なお、横座標／縦座標とは、図６に示すように、画像メモリ１５のＸ座標（水平方向の座標）、Ｙ座標（垂直方向の座標）のことである。
【００７３】
ＴｏｐＳｔａｒｔＸ      ：直線の開始位置と判断したｐｉｘｅｌの横座標（上辺）
ＴｏｐＳｔａｒｔＹ      ：直線の開始位置と判断したｐｉｘｅｌの縦座標（上辺）
ＴｏｐＡｎｇｌｅ        ：上辺の算出角度
ＢｏｔｔｏｍＳｔａｒｔＸ：直線の開始位置と判断したｐｉｘｅｌの横座標（下辺）
ＢｏｔｔｏｍＳｔａｒｔＹ：直線の開始位置と判断したｐｉｘｅｌの縦座標（下辺）
ＢｏｔｔｏｍＡｎｇｌｅ  ：下辺の算出角度
ＬｅｆｔＳｔａｒｔＸ    ：直線の開始位置と判断したｐｉｘｅｌの横座標（左辺）
ＬｅｆｔＳｔａｒｔＹ    ：直線の開始位置と判断したｐｉｘｅｌの縦座標（左辺）
ＬｅｆｔＡｎｇｌｅ      ：左辺の算出角度
ＲｉｇｈｔＳｔａｒｔＸ  ：直線の開始位置と判断したｐｉｘｅｌの横座標（右辺）
ＲｉｇｈｔＳｔａｒｔＹ  ：直線の開始位置と判断したｐｉｘｅｌの縦座標（右辺）
ＲｉｇｈｔＡｎｇｌｅ    ：右辺の算出角度
ＴｏｐＬｅｆｔＸ        ：検出領域の左上横座標
ＴｏｐＬｅｆｔＹ        ：検出領域の左上縦座標
ＴｏｐＲｉｇｈｔＸ      ：検出領域の右上横座標
ＴｏｐＲｉｇｈｔＹ      ：検出領域の右上縦座標
ＢｏｔｔｏｍＬｅｆｔＸ  ：検出領域の左下横座標
ＢｏｔｔｏｍＬｅｆｔＹ  ：検出領域の左下縦座標
ＢｏｔｔｏｍＲｉｇｈｔＸ：検出領域の右下横座標
ＢｏｔｔｏｍＲｉｇｈｔＹ：検出領域の右下縦座標
以下に、図９に示すフローチャートを参照しながら、第２の実施形態として具体的な処理動作について説明する。
【００７４】
図９は本装置の第２の実施形態における処理動作を示すフローチャートであり、４方向からのスキャニングを行って用紙の４辺の直線を検出し、さらにこれらの交点から射影補正を行うまでの処理手順（アルゴリズム）が示されている。なお、このフローチャートで示される各処理は、本装置に備えられたマイクロプロセッサであるＣＰＵ１１がＲＯＭ１４などに記憶されたプログラムを読み込むことにより実行される。
【００７５】
今、用紙１０の画像データが画像入力装置１２を通じて取得され、図６に示すように、画像処理装置１３によって二値化された画像データＤ１が画像メモリ１５に展開されているものとする。
【００７６】
この用紙１０の画像データＤ１に対し、ＣＰＵ１１は、まず、画像メモリ１５の画像メモリ１５の上から下方向へ垂直スキャンして（第１方向のスキャン）、用紙１０の外形線を構成する４辺のうちの上辺１０ａに対応した直線を検出し、その直線の開始座標と角度を算出する（ステップＣ１１）。
【００７７】
なお、スキャニングによる直線の検出方法やその直線の傾きを検出する方法については、前記第１の実施形態と同様であるため、ここではその詳しい説明は省略するものとする。
【００７８】
ここで算出された上辺１０ａに対応した直線の開始座標は（ＴｏｐＳｔａｒｔＸ，ＴｏｐＳｔａｒｔＹ）として第２のパラメータテーブル１７にセットされる。また、その上辺１０ａに対応した直線の角度はＴｏｐＡｎｇｌｅとして第２のパラメータテーブル１７にセットされる。
【００７９】
次に、ＣＰＵ１１は、画像メモリ１５の画像メモリ１５の下から上方向へ垂直スキャンして（第２方向のスキャン）、用紙１０の外形線を構成する４辺のうちの上辺１０ｂに対応した直線を検出し、その直線の開始座標と角度を算出する（ステップＣ１２）。ここで算出された下辺１０ｂに対応した直線の開始座標は（ＢｏｔｔｏｍＳｔａｒｔＸ，ＢｏｔｔｏｍＳｔａｒｔＹ）として、角度はＢｏｔｔｏｍＡｎｇｌｅとして、それぞれ第２のパラメータテーブル１７にセットされる。
【００８０】
次に、ＣＰＵ１１は、画像メモリ１５の画像メモリ１５の左から右方向へ水平スキャンして（第３方向のスキャン）、用紙１０の外形線を構成する４辺のうちの左辺１０ｃに対応した直線を検出し、その直線の開始座標と角度を算出する（ステップＣ１３）。ここで算出された左辺１０ｃに対応した直線の開始座標は（ＬｅｆｔＳｔａｒｔＸ，ＬｅｆｔＳｔａｒｔＹ）として、角度はＬｅｆｔＡｎｇｌｅとして、それぞれ第２のパラメータテーブル１７にセットされる。
【００８１】
次に、ＣＰＵ１１は、画像メモリ１５の画像メモリ１５の右から左方向へ水平スキャンして（第４方向のスキャン）、用紙１０の外形線を構成する４辺のうちの右辺１０ｄに対応した直線を検出し、その直線の開始座標と角度を算出する（ステップＣ１４）。ここで算出された右辺１０ｄに対応した直線の開始座標は（ＲｉｇｈｔＳｔａｒｔＸ，ＲｉｇｈｔＳｔａｒｔＹ）として、角度はＲｉｇｈｔＡｎｇｌｅとして、それぞれ第２のパラメータテーブル１７にセットされる。
【００８２】
このようにして、４方向からのスキャニングにより用紙１０の外形線を構成する４辺の直線とその角度を検出した後、続いて、ＣＰＵ１１は、これらの交点を求めて射影補正を行う。
【００８３】
すなわち、ＣＰＵ１１は、まず、上片１０ａに対応した直線と左片１０ｃに対応した直線との交点Ｑ１の座標を求める（ステップＣ１５）。この２つの直線の交点Ｑ１は用紙１０の左上の一角に当たり、そのＸ，Ｙ座標値が（ＴｏｐＬｅｆｔＸ，ＴｏｐＬｅｆｔＹ）として第２のパラメータテーブル１７にセットされる。
【００８４】
次に、ＣＰＵ１１は、上片１０ａに対応した直線と右片１０ｄに対応した直線との交点Ｑ２の座標を求める（ステップＣ１６）。この２つの直線の交点Ｑ２は用紙１０の右上の一角に当たり、そのＸ，Ｙ座標値が（ＴｏｐＲｉｇｈｔＸ，ＴｏｐＲｉｇｈｔＹ）として第２のパラメータテーブル１７にセットされる。
【００８５】
同様にして、ＣＰＵ１１は、下片１０ｂに対応した直線に対しても、左片１０ｃに対応した直線との交点Ｑ３の座標、右片１０ｄに対応した直線との交点Ｑ４の座標をそれぞれ求める（ステップＣ１７、Ｃ１８）。この場合、交点Ｑ３は用紙１０の左下の一角に当たり、そのＸ，Ｙ座標値が（ＢｏｔｔｏｍＬｅｆｔＸ，ＢｏｔｔｏｍＬｅｆｔＹ）として第２のパラメータテーブル１７にセットされる。交点Ｑ４は用紙１０の右下の一角に当たり、そのＸ，Ｙ座標値が（ＢｏｔｔｏｍＲｉｇｈｔＸ，ＢｏｔｔｏｍＲｉｇｈｔＹ）として第２のパラメータテーブル１７にセットされる。
【００８６】
このようにして、用紙１０の外形線を構成する４辺の直線の各交点のＸ，Ｙ座標値が得られると、ＣＰＵ１１はこれらの交点のＸ，Ｙ座標値に基づいて所定の射影変換処理を行うことで、傾きを補正した画像データを生成する（ステップＣ１９）。
【００８７】
このように、上下左右の４方向から用紙１０の外形線を構成する４辺の直線を検出する構成としたことで、用紙１０の傾きをより正確に求めることができ、さらに、これらの直線の各交点の座標値から射影変換処理を行うことにより、傾きを補正した画像データを生成することができる。
【００８８】
また、このような上下左右の４方向から直線を検出することで、図７のように一部が検出領域からはみ出している画像データに対しても、その検出領域外の交点座標を他の直線から求めることができる、といった利点がある。
【００８９】
これにより、例えば本装置を文字認識装置に適用した場合であれば、用紙１０が傾いて撮影された場合であっても、その傾きを補正した画像データを用いて正確な文字認識処理を行うことができる。
【００９０】
なお、本発明は前記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、前記各実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【００９１】
また、上述した実施形態において記載した手法は、コンピュータに実行させることのできるプログラムとして、例えば磁気ディスク（フレキシブルディスク、ハードディスク等）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等）、半導体メモリなどの記録媒体に書き込んで各種装置に適用したり、そのプログラム自体をネットワーク等の伝送媒体により伝送して各種装置に適用することも可能である。本装置を実現するコンピュータは、記録媒体に記録されたプログラムあるいは伝送媒体を介して提供されたプログラムを読み込み、このプログラムによって動作が制御されることにより、上述した処理を実行する。
【図面の簡単な説明】
【００９２】
【図１】本発明の第１の実施形態に係る用紙傾き検出装置の回路構成を示すブロック図。
【図２】同実施形態における用紙傾き検出装置の処理動作を説明するための具体例であり、用紙の撮影画像が右上がりに傾いて画像メモリに展開された状態を示す図。
【図３】同実施形態における用紙傾き検出装置に備えられた第１のパラメータテーブルの一例を示す図。
【図４】同実施形態における用紙傾き検出装置の処理動作を示すフローチャートであり、用紙の撮影画像を取得してから用紙の傾きを検出するまでの処理手順を示すフローチャート。
【図５】同実施形態における用紙傾き検出装置の反転調査処理を示すフローチャート。
【図６】本発明の第２の実施形態における用紙傾き検出装置の処理動作を説明するための具体例であり、用紙の撮影画像が右上がりに傾いて画像メモリに展開された状態を示す図。
【図７】同実施形態における用紙傾き検出装置の処理動作を説明するための具体例であり、用紙の撮影画像の一部が検出領域からはみ出して画像メモリに展開された状態を示す図。
【図８】同実施形態における用紙傾き検出装置に備えられた第２のパラメータテーブルの一例を示す図。
【図９】同実施形態における用紙傾き検出装置の処理動作を示すフローチャートであり、４方向からのスキャニングを行って用紙の４辺の直線を検出し、さらにこれらの交点から射影補正を行うまでの処理手順を示すフローチャート。
【符号の説明】
【００９３】
１０…用紙、１１…ＣＰＵ、１２…画像入力装置、１３…画像処理装置、１４…ＲＯＭ、１５…画像メモリ、１６…第１のパラメータテーブル、１７…第２のパラメータテーブル、１８…表示装置、１９…入力装置、２０…電源装置、２１…媒体読取り装置、２２…媒体読取り装置、２２…記録媒体、Ｄ１…画像データ、Ｐ１，Ｐ２…白黒反転座標点、Ｐ１１，Ｐ１２，Ｐ１３…白黒反転座標点、１０ａ〜１０ｄ…用紙の各辺の直線、Ｑ１〜Ｑ４…各直線の交点。
【図１】
2005165822.tif 000003
【図２】
2005165822.tif 000004
【図３】
2005165822.tif 000005
【図４】
2005165822.tif 000006
【図５】
2005165822.tif 000007
【図６】
2005165822.tif 000008
【図７】
2005165822.tif 000009
【図８】
2005165822.tif 000010
【図９】
2005165822.tif 000011