(57)【要約】【課題】並行して行われる、非反復的な、メモリ効率の良い、画像スキューを測定する方法を提供する。【解決手段】低速走査による２次モーメントデータセットは、画像データのうちの最新の走査線を受け取って、所定の本数であるＢ本の走査線を有する帯域を備えるバッファ内における走査線を用いて回転角度のセットについての列合計を更新して、生成する（２３５）。高速走査による２次モーメントデータセットは、第１の回転角度に、受け取られた画像データのうちのＭ行に投影する複数の画素を投影して、当該Ｍ個の記憶場所のうちの１つが、完了された行合計を格納するＭ個の記憶場所を更新して、前記完了された行合計の２乗をモーメント累算器に加算することによって生成される（２３０）。原稿スキュー角度（２８０）は、高速走査による２次モーメントデータセットおよび低速走査による２次モーメントデータセットに基づいて測定する（２７０）。【選択図】図２
2004199679.tif 000002
【特許請求の範囲】
【請求項１】
走査読み込みされた画像データを処理する方法であって、
各々の走査線が複数の画素を備える複数の走査線を備える画像データを受け取って、
高速走査による２次モーメントデータセットを生成して、
低速走査による２次モーメントデータセットを生成して、
前記高速走査および低速走査による２次モーメントデータセットから、原稿スキュー角度を測定することを特徴とする方法において、
前記低速走査による２次モーメントデータセットを生成するステップが、
画像データのうちの最新の走査線を受け取って、
走査線の帯域であって、所定の本数であるＢ本の走査線を有する帯域を備えるバッファ内における走査線を用いて回転角度のセットについての列合計を更新して、
前記バッファを前記最新の走査線で更新することを含むことを特徴とする方法。
【請求項２】
画像データを処理する方法であって、
原稿を走査読み込みして、各々の走査線が複数の画素を有する複数の走査線を備える走査読み込みされた画像データを生成して、
行合計に基づいた２次モーメントの第１のセットを生成して、
列合計に基づいた２次モーメントの第２のセットを生成して、
２次モーメントの前記第１および第２のセットから、原稿スキュー角度を測定することを特徴とする方法において、
前記２次モーメントの第１のセットを生成するステップが、
第１の走査線を受け取って、
前記第１の走査線内における複数の画素を少なくとも第１の回転角度に投影して、
投影された前記複数の画素のうちの第１のサブセットを第１の記憶場所に加算して、
投影された前記複数の画素のうちの第２のサブセットを第２の記憶場所に加算して、
投影された前記複数の画素のうちの第３のサブセットを第３の記憶場所に加算して、
前記第１の記憶場所における画素合計の２乗をモーメント累算器に加算することを含むことを特徴とする方法。
【請求項３】
請求項２に記載の方法において、
前記２次モーメントの第２のセットを生成するステップが、
走査線の帯域であって、所定の本数であるＢ本の走査線を有する帯域を備えるバッファ内における走査線を用いて回転角度のセットについての列合計を更新して、
先入れ先出しの優先順位に従って、前記バッファを前記第１の走査線で更新することを含むことを特徴とする方法。
【請求項４】
画像データを処理して画像スキューを測定するメモリ効率の良い方法であって、
各々の走査線が複数の画素を備える複数の走査線を備える走査読み込みされた画像データを受け取って、
高速走査による２次モーメントデータセットを生成して、
低速走査による２次モーメントデータセットを生成して、
前記高速走査および低速走査による２次モーメントデータセットから、原稿スキュー角度を測定することを特徴とする方法において、前記高速走査による２次モーメントデータセットを生成するステップが、
１本の走査線内における複数の画素であって、Ｍ行に投影する複数の画素を少なくとも第１の回転角度に投影して、
Ｍ個の記憶場所であって、当該Ｍ個の記憶場所のうちの各々１つが、Ｍ行のうちの１つに対応するとともに、各々の記憶場所が、対応する行に投影する画素を用いて更新されることによって、当該記憶場所のうちの１つが、完了された行合計を格納するとともに、当該記憶場所のうちのＭ−１個が、部分的な行合計を格納するＭ個の記憶場所を更新して、
前記完了された行合計の２乗をモーメント累算器に加算して、
前記投影して、更新して、加算するステップを、複数の走査線内における各々の走査線について繰り返すことによって、完了された行合計を有する記憶場所を、後に続く行合計を累算するために再利用することで、Ｍ個だけの記憶場所が、行合計を累算するために必要とされるようにすることを含むことを特徴とする方法。
【請求項５】
画像データを処理して画像スキューを測定する請求項４に記載の方法において、
前記１本の走査線内における複数の画素を投影するステップが、前記走査線内における複数の画素を、Ｎ個の回転角度のセットであって、各々の回転角度によって画素がｉ＝１〜Ｎの場合におけるＭi行に投影されており、各々の回転角度がそれと関連づけられたＭi個の記憶場所を有しており、所与の回転角度の場合におけるＭi個の記憶場所の各々がＭi行の１つに対応しているＮ個の回転角度のセット内における各々の角度に投影することをさらに含み、
前記記憶場所を更新するステップが、各々の回転角度と関連づけられたＭi個の記憶場所を更新することをさらに含むことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像データ処理方法、特に画像スキューを計算する非反復的な方法に関する。
【背景技術】
【０００２】
多くの画像処理アプリケーションにおいて、原稿画像のスキュー（skew：傾き）を測定して補正することが望ましい。例えば、光学式文字認識（ＯＣＲ：Optical Character Recognition）システムのようなテキスト認識システムにおいて、わずかな角度を超えるスキューを伴う向きに配置されたテキストが提供された場合、さらには、言うまでもないが、テキストが横向きまたは上下反対に配置される場合には十分に機能しない。また、画像スキューがすでに分かっている場合、あるいは画像がスキュー除去されている場合にはテキスト行とテキスト列を特定することが容易である。
【０００３】
反復的な推定アプローチを用いて画像スキューを測定するための様々な方法が提案されてきている（例えば、特許文献１参照）。そのようなアプローチの１つとしては、連続している構成要素の境界ボックス（bounding boxes）を用いて画像スキューを推定することが含まれる。トークン点の座標が、境界ボックスの下部中央において選択され、スキュー角度の関数Ｓtokensが、これらの座標から算出される。具体的には、関数Ｓtokens（θ）は、ラスタ方向に対して角度θの行のセットに沿って算出された点の数を２乗したものの合計である。垂直方向のシアー（shear）が、それらの点のセットに基づいて擬似的に再現されて、ｙ座標が同一であるそれらの点にわたって合計が求められる。定数は別にして（θとは無関係に）、関数Ｓtokensは、角度の関数としての、１行におけるトークン数の分散（variance）である。この分散とは、各々のテキスト行のトークンが同一行の近くに位置する方向における最大値である。
【０００４】
スキューを測定するためのもう１つの方法によれば、ラスタ方向を基準とする角度のセットにおいて、当該画像のうちの直線をトラバース測量（traverse）する。関数Ｓδ（θ）が算出されるが、これは、走査方向θがテキスト行に沿っている場合における最大値を有する。上述のアプローチでは、連続している構成要素からトークンを算出するが、それとは異なり、この方法では、画像中のすべての画素を用いる。関数Ｓδ（θ）は、角度θが選択されて、画素合計がこの角度における画像中の各行に沿って求められるという意味において、関数Ｓtokens（θ）と同様である。但し、トークンの合計を２乗する代わりに、第２の方法によれば、隣接する行におけるオン画素の合計の間における差が２乗されて、関数Ｓδ（θ）は、すべての行にわたって合計することによって求められる。関数Ｓδ（θ）は、定数は別として、角度θにおける隣接する行における画素合計の間における差の分散である。
【０００５】
【特許文献１】米国特許第５００１７６６号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上述のスキュー除去方法は、特許文献１の発明に基づいて反復的な推定アプローチを用いるその他のスキュー除去方法とともに、画像のローカルコピーが保存されることを必要とする。そのために、パイプライン処理が妨げられ、同時に、これらの方法の反復的な性質によって、並列処理の可能性が排除される。従って、画像のスキューが除去され得る速度は、必然的に制限される。
【課題を解決するための手段】
【０００７】
本明細書において開示された教示によれば、画像スキューを測定して補正するための方法および装置が提案される。特に、並行して行われる、非反復的な、メモリ効率の良い、画像スキューを測定する方法が教示されている。本明細書において開示された１つの実施の形態によれば、画像スキューを測定する方法であって、原稿を走査読み込みして、各々の走査線が複数の画素を有する複数の走査線を備える走査読み込みされた画像データを生成して、高速走査による２次モーメントデータセットを生成して、低速走査による２次モーメントデータセットを生成して、前記高速走査および低速走査による２次モーメントデータセットから、原稿スキュー角度を測定することを特徴とする方法において、前記低速走査による２次モーメントデータセットを生成するステップが、画像データのうちの最新の走査線を受け取って、走査線の帯域であって、所定の本数であるＢ本の走査線を有する帯域を備えるバッファ内における走査線を用いて回転角度のセットについての列合計を更新して、前記バッファを前記最新の走査線で更新することを含むことを特徴とする方法が提供されている。
【０００８】
本明細書において開示されたもう１つの実施の形態によれば、画像スキューを測定する方法であって、原稿を走査読み込みして、各々の走査線が複数の画素を有する複数の走査線を備える走査読み込みされた画像データを生成して、行合計に基づいた２次モーメントの第１のセットを生成して、列合計に基づいた２次モーメントの第２のセットを生成して、２次モーメントの前記第１および第２のセットから、原稿スキュー角度を測定することを特徴とする方法において、前記２次モーメントの第１のセットを生成するステップが、第１の走査線を受け取って、前記第１の走査線内における複数の画素を第１の回転角度に投影して、投影された前記複数の画素のうちの第１のサブセットを第１の記憶場所に加算して、投影された前記複数の画素のうちの第２のサブセットを第２の記憶場所に加算して、投影された前記複数の画素のうちの第３のサブセットを第３の記憶場所に加算して、前記第１の記憶場所における画素合計の２乗をモーメント累算器に加算することを含むことを特徴とする方法が提供されている。
【０００９】
本明細書において開示されたもう１つの実施の形態によれば、画像データを処理して画像スキューを測定する方法であって、各々の走査線が複数の画素を備える複数の走査線を備える走査読み込みされた画像データを受け取って、高速走査による２次モーメントデータセットを生成して、低速走査による２次モーメントデータセットを生成して、前記高速走査および低速走査による２次モーメントデータセットから、原稿スキュー角度を測定することを特徴とする方法において、前記高速走査による２次モーメントデータセットを生成するステップが、１つの走査線内における複数の画素であって、Ｍ行に投影する複数の画素を少なくとも第１の回転角度に投影して、Ｍ個の記憶場所であって、当該Ｍ個の記憶場所のうちの各々１つが、Ｍ行のうちの１つに対応するとともに、各々の記憶場所が、対応する行に投影する画素を用いて更新されることによって、当該記憶場所のうちの１つが、完了された行合計を格納するとともに、当該記憶場所のうちのＭ−１個が、部分的な行合計を格納するＭ個の記憶場所を更新して、前記完了された行合計の２乗をモーメント累算器に加算して、前記投影して、更新して、加算するステップを、複数の走査線内における各々の走査線について繰り返すことによって、完了された行合計を有する記憶場所を、後に続く行合計を累算するために再利用することで、Ｍ個だけの記憶場所が、行合計を累算するために必要とされるようにすることを含むことを特徴とする方法が提供されている。
【発明を実施するための最良の形態】
【００１０】
以下、本発明を実施するための最良の形態（以下、実施形態という）について、図面に基づいて説明する。
【００１１】
図１に、本発明の実施形態に掛かる、走査原稿１２における画像スキューを測定して補正する撮像装置を示す。画像スキューとは、原稿内における、例えば、文字のような印刷されたものの行の支配的な向きと、ゼロ回転誤差である読み取り装置つまりスキャナが従う基準線との間における回転誤差を指す。スキャナ１６は、従来の方法で原稿１２を走査して、電気的な走査画像データを生成し、そのコピーが画像データメモリ２０に保存される。走査画像データは、画素からなる２次元のデータセット（行および列）として表現される。
【００１２】
画像データをメモリ２０に提供することに加えて、画像データの走査線が、累算器（accumulator）２４に提供される。有益なことに、累算器２４に提供される画像データの走査線は、複数の２値画素から構成されている。すなわち、各々の画素は、オンまたはオフであると考えることが可能である。例えば、画素値が０（黒）から２５６（白）までの８ビットシステムにおいては、画素が、黒（例えば、あらかじめ設定されている閾値未満）である場合にオンであって、白（例えば、あらかじめ設定されている閾値未満）である場合にオフであると定義される場合もある。そのようなシステムにおいて、閾値は、例えば、所定のレベルに設定される場合もあれば、当該原稿について割り出された背景レベルに基づく場合もある。黒をオンと、白をオフと指定することは、ただ単に、対象となるほとんどの原稿が黒色の前景と白色の背景を有するという事実を反映しているにすぎない。但し、当然のことながら、本明細書における教示は、反転画像に対しても同様に適用可能である。
【００１３】
累算器２４は、様々な回転角度の行および列について画素数を合計して、所定の回転角度の各々について２次モーメントを計算する。受け取られた画像データにおける各々の２値化された走査線について、累算器２４は、並行して複数の原稿回転角度における画素データを抽出する。２次モーメントは、累算器２４によって、行および列についての原稿回転角度の関数として計算され、これによって、行および列の２次モーメントデータセットが与えられる。行および列の２次モーメントデータセットは、スキュー角度プロセッサ３０に提供され、これによって、２次モーメントデータセットが処理されて、結果として画像スキュー角度が得られる。累算器２４およびスキュー角度プロセッサ３０における演算については、以下にさらに完全に説明する。
【００１４】
メモリ４０を備える画像プロセッサ３８が、計算されたスキュー角度の推定値を受け取り、これを、画像データメモリ２０から受け取った走査画像データに適用する。画像プロセッサ３８は、スキュー角度プロセッサ３０から受け取ったスキュー角度の推定値に応じて画像中に存在するスキュー誤差を補正する。スキュー補正には、画像のスキューが除去されるように、スキュー角度プロセッサ３０によって測定されたスキュー角度の否定によって、画像データメモリ２０に保存された元の画像を回転させることを伴う。画像を回転させるためのそのような手段は、よく知られているが、小さな角度（５度未満）の回転の場合には、２つの直交するシアーを加えることを含む。より大きいスキュー角度の場合には、水平方向における等しい大きさの第１および第３のシアーおよび垂直方向におけるより大きい第２のシアーを有する３つのシアーによって回転を近似させることが可能である。スキューが除去されたデジタル画像表現は、画像出力装置５０に対して出力されるが、これには、静電複写式（例えば、電子写真式、イオノグラフィ方式）のプリンタ、液体インクプリンタ（例えば、圧電式、音響方式、相転移方式、ワックス式あるいは感熱式のようなドロップオンデマンド方式）、例えば、ＣＲＴ、ＬＣＤ、ＬＥＤ等のような電子的な表示システム、または同様の出力装置が含まれる場合もある。
【００１５】
図２は、走査原稿における画像スキューを測定する方法に係る実施の形態を示すフローチャートである。本明細書における教示によれば、画像スキューが、いくつかの所定の回転角度について高速走査方向および低速走査方向の両方向において、２次投影モーメント（second order projected moment）を同時に計算することによって測定される。各モーメントは、まず、各々の回転角度について画像中において投影された線に沿って画素値を合計することによって計算される。このとき、投影された線のピッチは、回転角度の関数である。さらに、各々の角度について、投影された線の合計を、２乗した上で足し合わせることで、１つの基準単位（metric）が形成される。
【００１６】
図２の実施形態では、原稿を、従来の方法で走査する（２００）ことで、画像データにおける１本または複数の走査線が取得される。必要に応じて、画像データの解像度を下げることで（２１０）、処理速度を上げるようにする。
【００１７】
画像データにおける行および列が、１つまたは複数の所定の原稿回転角度において、２つの方向、すなわち高速走査方向および低速走査方向に沿って抽出される（２２０）が、これは、１行または１列当たりのオン画素の数を算出することを目的とする。さらに詳細に述べると、画像データにおける所与の走査線の範囲内で、その走査線の範囲内における各々の画素位置について、画素位置の回転させられた配置は、すべての所定の原稿回転角度について同時に計算されるとともに、対応する行合計および列合計が更新される。換言すれば、各々の画素が読み取られると、その配置が、各々の原稿回転角度について同時に計算されて、あたかも走査線が回転させられたかのように抽出されるとともに、計算された画素配置についての対応する行合計および列合計が、その時点において更新される。このプロセスについては、図３を参照して、以下にさらに完全に説明する。
【００１８】
図３において、画像データにおける走査線が受け取られると、その走査線の範囲内における画素が、抽出されたり読み取られたりする（３００）が、これは、つまり、オンまたはオフのいずれかであることが判断されるのである。続いて、走査線の範囲内における各々の画素が、複数の所定の原稿回転角度に沿って投影され（３１０）、そのように投影された各々の画素の配置が測定される。各々の原稿回転角度について投影された画素配置に基づいて、対応する行合計および列合計が同時に更新される（３２０）。以下にさらに説明するように、オン画素の２次モーメントは、更新された行合計および列合計に基づいて、各々の所定の原稿回転角度について計算される。ステップ３００〜３２０のプロセスは、走査原稿全体にわたる画像データにおける複数の走査線について繰り返される。ステップ３１０は、走査線の範囲内における各々の画素を複数の所定の原稿回転角度に沿って投影することであると説明したが、このプロセスを用いて、走査線の範囲内における画素のサブセットのみを投影することも可能である。
【００１９】
画素抽出、回転、および行／列合計に関するプロセスについて、さらに、図４および図５を参照して具体的に説明する。図４に、複数の行を有する原稿４００を示す。０ミリラジアンの所与の原稿回転角度において、オンであると判断されている特定の画素４１０が、第１２００行４２０に沿って、あるｘ値における所与の列（画素位置）に配置される。画素４１０を数えて、０ミリラジアンの原稿回転角度について第１２００行４２０におけるオン画素の数の行合計に加算する。但し、異なる原稿回転角度、例えば、α＝１ミリラジアンの場合には、位置４１０における画素は、第１１００走査線上における画素位置（列）４３０に移動することになる。当然のことながら、投影された画素位置４３０は、式Δｙ＝ｘαによって第１１００走査線上となるように計算される。この関係は、αが小さい場合に、ｔａｎαは、αに近似できることから当てはまる。従って、各々の画素が、最初の原稿回転角度について読み取られると、それが投影されることになるであろう行が計算されるとともに、後に続く画素数が、各々の所定の原稿回転角度について更新されて、その画素が読み取られると抽出されることになる。
【００２０】
同様に、図５に、複数の列を有する原稿５００を示す。０ミリラジアンの所与の原稿回転角度において、オンであると判断されている特定の画素５１０が、第１００列に相当する列５２０に沿って、所与の位置、つまり行（例えば、第１１５０行）に配置される。画素５１０を数えて、０ミリラジアンの原稿回転角度について第１００列における列合計に加算する。原稿回転角度αでは、第１００列沿いの位置５１０における画素は、同一行である第１１５０行沿いではあるが、第１１０列上に存在する画素位置５３０上に投影することになる。このとき、繰り返しになるが、投影された画素位置５３０が、式Δｘ＝ｙαによって求めることが可能であるということは容易に理解できる。
【００２１】
上述のことから、当然のことながら、ある行または列沿いの画素位置であればいずれについて投影された位置であっても、回転角度およびその画素が属する行または列の関数として容易に算出することが可能である。すなわち、回転角度αにおける所与の行ｙ0沿いのいずれかの画素ｘが投影することになる行ｙは、式ｙ＝ｘα＋ｙ0によって与えられる。同様に、回転角度αにおける所与の列ｘ0沿いのいずれかの画素ｙが投影することになる列ｘは、式ｘ＝ｙα＋ｘ0によって与えられる。投影された画素位置を繰り返し計算することの代替方法として、いずれの回転角度について投影された画素位置であっても、行（ｙ）方向または列（ｘ）方向において、そのオフセットによって定義することが可能である。投影された線は、１行または１列当たりの画素数を考慮すれば、数少ない行または列を横切る傾向があるので、画素オフセット値は、かなりの数の画素にわたって一定となり、オフセット値のコンパクトな保存が可能となる。さらに、画素オフセット値は、単に、一度に１行または１列を増加させるにすぎないので、当該システムは、ただその行または列沿いの画素を特定することを必要とするにすぎないが、ここで、投影された画素位置は、その次の行または列にシフトする（オフセットされる）。そのような実施の形態において、行合計または列合計を更新する際に、当該方法は、ただそれらの画素を追跡する（数える）とともに、行合計または列合計をシフトさせて適切なときに更新することを必要とするにすぎない。
【００２２】
図２に戻ると、２次モーメントデータセットが、高速走査方向沿いの走査線について計算される（２３０）。換言すれば、２次モーメントデータセットは、原稿回転角度の関数として計算された２次モーメントを含む。２次モーメントとは、所与の原稿回転角度についての各々の行におけるオン画素の数を２乗したものの合計の平均値である。さらに詳細に述べると、２次モーメントは、以下の形の式によって計算される。
【数１】
2004199679.tif 000003
式中、Ｎは、高速走査方向沿いにおける行（走査線）の数であり、ｎは、１本の走査線におけるオン画素の数であり、ｉは、高速走査方向沿いにおける走査線のためのカウンタである。言い換えると、所与の原稿回転角度について、２次モーメントは、各々の走査線つまり行全体にわたってオン画素の数を合計して、その合計を２乗して、走査線すべてについて合計することによって計算される。２次モーメントは、スキュー角度を測定するための好適な基準単位であるが、当然のことながら、例えば、隣接する走査線におけるオン画素の合計の間における差の２乗、つまり分散のようなその他の基準単位を用いる場合もある。
【００２３】
上述の演算において、行の代わりに、列に沿って合計することによって、同様のプロセスを用いて、低速走査方向沿いの２次モーメントデータセットを計算する（２３５）。換言すれば、低速走査方向に沿って２次モーメントデータセットを計算することを目的として、走査列沿いにおけるオン画素の数が、以下の形の式によって計算される。
【数２】
2004199679.tif 000004
式中、Ｍは、低速走査方向沿いにおける列（走査線１本当たりの画素）の数であり、ｍは、１列におけるオン画素の数であり、ｊは、低速走査方向沿いにおける列のためのカウンタである。
【００２４】
高速走査および低速走査による２次モーメントデータセットから、第１および第２のスキュー角度を計算する（２４０，２４５）。各々のスキュー角度推定値（２４０，２４５）が、確認プロセス（２５０，２５５）を通過させられて、このプロセスにおいて、無効なデータセットは廃棄されて（２６０）、有効なデータセットはさらに比較合成ステップ（２７０）に受け渡されて、これによって、最終的に、結果として得られるスキュー角度推定値が与えられる（２８０）。
【００２５】
さらに詳細に述べると、図６においては、各々の２次モーメントデータセット（６００）が、曲線当てはめ分析にかけられるが（６１０）、これは、対応するスキュー角度を計算することを目的とする。さらに詳細に述べると、各々の２次モーメントデータセットを、以下の形の式に当てはめる。
【数３】
2004199679.tif 000005
式中、Ｓαmaxは、最大２次モーメント値であり、αmaxは、Ｓαmaxとなる原稿回転角度である。この当てはめの結果、２次モーメントが実質的に最大値となる原稿回転角度が、高速走査および低速走査の両方による２次モーメントデータセットについて算出される。換言すれば、最大２次モーメントとなる原稿回転角度が、スキュー角度推定値である。
【００２６】
特定の２次モーメントデータセットが有効であるかどうかを判断することを目的として、少なくとも１つの品質係数（quality factor）つまりｑ係数を計算する（６２０）。さらに詳細に述べると、式（３）から、ローカル品質係数Ｑlocが、以下の式によって計算される。
【数４】
2004199679.tif 000006
Ｑlocは、ローカル最大値における特定の２次モーメントデータセットに対する式当てはめにおける傾きに等しい。さらに、グローバル品質係数ＱGlobalが、以下の式によって計算される。
【数５】
2004199679.tif 000007
式中、Ｓαminは、最小２次モーメント値であり、αminは、Ｓαminとなる原稿回転角度である。当然のことながら、ＱlocおよびＱGlobalは、高速走査および低速走査の両方による２次モーメントデータセットにおける強度および完全性を示す指標である。
【００２７】
計算された品質係数は、以下に述べるいくつかの確認ステップまたは検証ステップにおいて用いられる。第１の確認ステップは、各々の２次モーメントデータセットが、単一の主要なピークを含むのか、あるいは複数のピークを含むのかを検証すること（６３０）を含む。１つの実施の形態においては、所定のピークツーバレー（peak-to-valley）閾値を用いて、２次モーメントデータセット内に存在する主要なピークの数を判断する。複数のピークが存在する場合には、そのデータセットは、無効であると判断される（６６０）。単一の主要なピークを前提として、ピーク純度試験が行われるが、このとき、関数が、主要なピークの近くにおいて狭義減少（strictly decreasing）であるかどうかが判断される（６４０）。例えば、主要なピークに隣接してサイドノード（side node）が存在する場合のように、狭義減少ピークが存在しない場合においては、データセットは、無効であると宣言される（６６０）。反対に、単一のピークが、狭義減少であると考えられる場合には、そのピークと関連づけられたｑ係数つまり品質係数を、所定の閾値と比較する（６５０）。ｑ係数が所定の閾値に適合しない場合には、データセットは、無効であると考えられて、対応するスキュー角度推定値は、その後の処理においては用いられない。但し、ｑ係数が閾値よりも大きいと判断される場合には、データセットは、有効であると考えられて（６７０）、対応するスキュー角度推定値は、さらに比較合成ステップ（２７０）に受け渡される。
【００２８】
図７に、有効なデータセット（７００）から、スキュー角度を比較合成する方法（２７０）を示す。まず、有効なデータセットの数を算定する（７０５）。有効なデータセットが存在しない場合には、失敗したことが宣言されて（７１０）、スキュー角度は報告されない。当然のことながら、この状態は、並はずれて大量のテキストおよび／または非常に多くの様々な主要な向きのテキストを含む原稿画像において生じる場合がある。１つの有効なデータセットが存在する場合には、その有効なデータセットに対応するスキュー角度が、特定の画像について結果として得られるスキュー角度として報告される（７１５）。
【００２９】
２つの有効なデータセットの場合には、各々の有効なデータセットについての対応するｑ係数ＱGlobalおよび／またはＱlocが互いに比較される（７２０）。２つのデータセットについてのｑ係数の間における差が所定の閾値よりも大きいかどうかが判断される（７２５）。当然のことながら、ローカルｑ係数およびグローバルｑ係数の両方を、この判断において考慮する場合もある。ｑ係数の差が所定の閾値よりも大きい場合には、より高いｑ係数を有するデータセットに対応するスキュー角度が、当該画像についてのスキュー角度として報告される（７３０）。この状態は、単一の主要なデータセット、すなわち、一方のデータセットが他方よりも著しく高いｑ係数を有する状態として特徴づけられる。それぞれのｑ係数の間における差が所定の閾値よりも小さい場合には、両方のデータセットについてのスキュー角度を比較する（７３５）。すなわち、スキュー角度における差が所定の閾値よりも大きいかどうかが判断される（７４０）。スキュー角度の差が所定の閾値よりも小さい場合には、２つのスキュー角度の平均が、当該画像について結果として得られるスキュー角度として報告される（７５０）。この場合、当然のことながら、シアーが同様に報告される場合もあるが、このとき、シアーは、２つのスキュー角度推定値の間における角度差に等しい。但し、第１および第２のスキュー角度の間における差が所定の閾値よりも大きい場合には、より小さいスキュー角度推定値が報告される（７４５）。当然のことながら、より小さいスキュー角度推定値を報告することで、原稿画像を過剰に補正すること、つまり過剰に操作することを避けようとする上での付加的な予防措置が講じられる。
【００３０】
１つの実施の形態において、図１の累算器２４は、１つの記憶場所を用いて、各々の原稿回転角度について各々の行合計を保存する。但し、そのような実施の形態を実施するには、Ｎ本の走査線にわたるＡ個の回転角度の各々が、投影された行合計を保存するために（Ａ×Ｎ）個を超える記憶場所（メモリ）を必要とする。但し、当然のことながら、いつであっても一度には、記憶場所の小さなサブセットのみがアクセスされている。従って、そのようなメモリ要求を伴う実施の形態を実施することは可能であるとはいえ、メモリ資源の特に効率的な使用状態とはいえない。
【００３１】
本明細書において説明したような、画像が走査線の順序で受け取られる画像スキュー測定方法に係る１つの実施の形態において、各々の入力走査線における画素は、数少ない行にわたって投影することになる。特に、各々の原稿角度について、各々の入力走査線が投影することになる行数Ｐを計算することが可能である。ラジアン単位で表された角度αの場合に、１本の走査線が投影する可能性がある行合計の数Ｐαは、ほぼ（αＭ）＋１であって、このとき、Ｍは、走査線１本当たりの画素数である。各々処理された走査線の終わりにおいて、メモリは、１本の完全な投影された線についての合計を、すぐ隣の（Ｐα−１）行の部分的な合計に加えて保持する。換言すれば、後に続く走査線によって書き込まれることのない記憶場所が１つある。この投影された行合計は、完了しており、これを２乗して、２乗を累計する計算に累算することが可能である。完了された行（各角度について１行）を保持するメモリは、後に続く走査線が投影することになる新しい行合計のために空けられる場合もある。
【００３２】
さらに具体的に述べると、投影された走査線が１００行を横切る場合に、その角度についての合計を保存するために必要とされる記憶場所は、１００個にすぎない。各々の入力画素は、１００行のうちの１つにマッピングして、対応する記憶場所をインクリメントすることになる。受け取られた各々の新しい走査線について、１本の投影された走査線が完了されることになるが、その行合計の２乗が計算されて累算される。対応する記憶場所は、その新しい走査線のために空けられることになる。角度が０°の場合の合計を計算する際に、投影された走査線は、入力走査線と同一である。単一のメモリレジスタを用いて、合計を格納する場合もある。
【００３３】
上述のプロセスは、図８および図９を参照して例示として示すことが可能であって、図中、それぞれ、回転が０°およびαにおける複数の走査線の投影を示す。特に、図８は、それぞれ、行ｙ，ｙ＋１，ｙ＋２上に投影された０°回転における３本の走査線７０，７２，７４を示す。０°の回転角度について投影された行合計は、単に、行ｙにおけるオン画素の合計である。同様に、行ｙ＋１，ｙ＋２について、０°の場合に投影された行合計は、単に、それぞれ、走査線７２，７４におけるオン画素の合計である。図９は、原稿回転角度αにおける３本の走査線７０，７２，７４の投影を示す。図９に示すように、角度αにおける行ｙについて投影された行合計は、走査線７０の画素セット１−Ｘ1におけるオン画素の数である。角度αにおける行ｙ＋１について投影された行合計は、走査線７２の画素１−Ｘ1におけるオン画素の数に、走査線７０の画素セットＸ1−Ｘ2におけるオン画素の数を加えたものである。同様に、行ｙ＋２について投影された行合計は、走査線７４の画素１−Ｘ1におけるオン画素の数に、走査線７２の画素Ｘ1−Ｘ2におけるオン画素の数、および走査線７０の画素Ｘ2−Ｘ3内におけるオン画素の数を加えたものである。
【００３４】
上述の低減されたメモリ要求によれば、原稿回転が０°およびαの場合における行ｙ，ｙ＋１，ｙ＋２についての行合計を累算する上で、必要とされる記憶場所（Ｌ0−Ｌ3）は４つにすぎない。走査線７０が受け取られると、画素１−Ｘ3が合計されてメモリＬ0に保存される。並行して、走査線７０を角度αまで回転させて、走査線７０の画素セット１−Ｘ1，Ｘ1−Ｘ2，Ｘ2−Ｘ3内におけるオン画素の数を、記憶場所Ｌ1，Ｌ2，Ｌ3にそれぞれ加算する。処理中のこの時点において、記憶場所Ｌ0，Ｌ1が、角度０°およびαの場合に行ｙについて投影された行合計を保持する一方で、位置Ｌ2，Ｌ3が、角度αの場合に行ｙ＋１，ｙ＋２についてそれぞれ投影された部分的な行合計を保持する。記憶場所Ｌ0，Ｌ1に累算された合計は２乗されて、角度０°およびαの場合の２次モーメントにそれぞれ累算される。続いて、記憶場所Ｌ0，Ｌ1は消去されて、次の走査線を受け取り次第、新しい行合計を累算し始めるのに用いるために空けられる。
【００３５】
次に、走査線７２が受け取られて、角度０°およびαまでの回転に従って、走査線内におけるオン画素の数が記憶場所Ｌ0に加算されて、角度０°の場合における行ｙ＋１についての行合計となる。並行して、走査線７２の画素セット１−Ｘ1，Ｘ1−Ｘ2，Ｘ2−Ｘ3内におけるオン画素の数が、記憶場所Ｌ2，Ｌ3，Ｌ1にそれぞれ加算される。処理中のこの時点において、角度０°およびαの場合に行ｙ＋１について投影された行合計は、完了されており、記憶場所Ｌ0，Ｌ2においてそれぞれ保持される。位置Ｌ3，Ｌ1は、行ｙ＋２，ｙ＋３についての部分的な行合計をそれぞれ保持する。Ｌ0，Ｌ2の行合計は２乗されて、角度０°およびαの場合の２次モーメントにそれぞれ累算される。続いて、記憶場所Ｌ0，Ｌ2は、次の走査線を受け取り次第、新しい行合計を累算し始めるのに用いるために空けられる。
【００３６】
続いて、走査線７４が受け取られて、角度０°およびαまで回転させられる。走査線７４内におけるオン画素の数が、記憶場所Ｌ0に加算されて、角度０°の場合における行ｙ＋２についての行合計となる。並行して、走査線７４の画素セット１−Ｘ1，Ｘ1−Ｘ2，Ｘ2−Ｘ3内におけるオン画素の数が、記憶場所Ｌ3，Ｌ1，Ｌ2にそれぞれ加算される。処理中のこの時点において、位置Ｌ0，Ｌ3が、角度０°およびαの場合に行ｙ＋２について投影された行合計を保持する一方で、Ｌ1，Ｌ2が、行ｙ＋３，ｙ＋４についての部分的な行合計をそれぞれ保持する。記憶場所Ｌ0，Ｌ3に累算された、投影された行合計は、２乗されて、角度０°およびαの場合の２次モーメントにそれぞれ累算される。続いて、記憶場所Ｌ0，Ｌ3は消去されて、次の走査線を受け取るために空けられる。
【００３７】
上述した走査原稿における画像スキューを測定する実施の形態において、画像スキューは、いくつかの所定の回転角度について並行して高速走査方向および低速走査方向の両方向において、２次投影モーメントを計算することによって測定される。高速走査方向および低速走査方向の両方向において２次投影モーメントを計算する際に、各々の画素は、検討されている各々の角度について所与の列合計の上に投影される。従って、処理された１つ１つの画素について、各々の回転角度において、記憶場所をインクリメントすることが必要とされる。インクリメントされた記憶場所は、その回転角度の場合に、画素が投影されることになるであろう列に相当する。メモリのインクリメントにおいて、２つのメモリアクセス演算処理が必要とされるが、その１つが読み出しであり、１つが書き込みである。従って、１本１本の走査線について、これは、結果として、２×Ａ×Ｍのメモリアクセスとなるが、このとき、Ａは、測定されているスキュー角度の基準単位の数であり、Ｍは、走査線１本当たりの画素数である。この更新に際しては、１画素当たり２×Ａのメモリアクセスを用いて、または行間の間隙（interline gap）において２×Ａ×Ｍのメモリアクセスを行うことによって更新することが可能である。
【００３８】
１つのアプローチとして、部分的な並列処理を用いて、いくつかの走査線について一度に演算するということがある。画像を、一回につき１行ずつ受け取ると仮定して、列合計を計算するアルゴリズムを、複数行の「帯域」にわたって実行する場合もある。列合計を格納する外部メモリの更新は、行ごとにではなく、複数行帯域の各帯域につき一度だけ行われる。Ｂ行の帯域が受け取られると、投影された列合計は、Ｂ行について計算される場合もあるが、それらの行のシフトされたものを合計してから、結果として得られる部分的な合計を用いて、外部メモリを更新する。各々の角度において、さらに、２×Ａ×Ｍ（実際には、２×Ａ×（Ｍ＋１））の更新が必要とされるが、このときの更新は、０〜Ｂの間の数を、各々の角度について投影された１つ１つの合計位置に加算することからなる。これは、単に場合によっては記憶場所をインクリメントする従前の更新方法とは対照的であって、加算される数の幅が、大幅に狭められた帯域幅と引き換えに拡大されている。このとき、繰り返しになるが、Ｂ行の場合におけるメモリアクセスの総数は、２×Ａ×（Ｍ＋１）となる。但し、この「列合計」メモリに対する、合計のメモリアクセスは、またこれに伴って帯域幅は、ほぼＢ分の１に減少させられている。
【００３９】
当該システムのキャッシュ要求は、以前は、メモリ内に必要な走査線は１本にすぎなかったのに対して増加してきている。上述の実施例では、キャッシュ内において走査線Ｂ本分のメモリを用いることが必要とされる。帯域内における走査線の数Ｂが大きければ大きいほど、アルゴリズムは、「キャッシュ／内部」メモリという犠牲を払ってより速く走ることになる。
【００４０】
代替の解決策では、１本だけの追加の線のバッファリングが用いられる。Ｂ本の完全な線の帯域が利用可能であれば、画像を、一回につき１つの角度ずつ処理する場合もある。但し、Ｂ本の走査線を受け取るために要する時間の間に、（上述したように）、Ａ個の角度を全て更新する代わりに、Ａ／Ｂ個の角度だけを、新しい行を受け取るために要する時間のうちに更新する。すなわち、回転角度の特定のセットについての列合計だけは、各々の走査線が受け取られるのに伴って更新されるが、Ｂ本ごとの走査線の後で、全ての回転角度についての列合計が一度更新されている。当然ことながら、このプロセスは、時分割多重化方式の考え方に類似している。
【００４１】
さらに具体的に述べると、各々の新しい行（走査線）が受け取られるのに伴って、新しく受け取られた行を「回転」させて帯域内に入れた上で、その帯域内において最も古い行が、次の入力行を受け入れるために空けられる。入力行が受け取られているときに、Ａ／Ｂ個の角度に係る次のセットが処理されて更新される。Ｂ行が受け取られる時間のうちに、Ａ個の角度全てについての処理が完了する。すなわち、上記のアルゴリズムは、（ａ）画像データの新しい走査線を取得して、（ｂ）走査線の帯域から構成されているバッファ内における画像データの走査線を用いて回転角度のセットについての列合計を更新して、（ｃ）先入れ先出しの優先順位を用いて新しく取得された走査線でバッファを更新する、という３つのステップから構成されている。有益なことに、新しい走査線を取得するステップと列合計を更新するステップは並行して行われる。必要とされる全体のメモリは、２×Ｂ×Ｍ個のスロットではなく、（Ｂ＋１）×Ｍ個の画素分のキャッシュにまで低減されるが、このとき、外部メモリの帯域幅要求における増加は伴わない。
【００４２】
上記プロセスに係る１つの実施の形態について、表１を参照して説明する。走査線４が取得されると、角度セット１内における回転角度についての列合計が、バッファ内における画像データ（走査線１〜３）を用いて更新される。行４が取得されて角度セット１についての列合計が更新された後に、バッファは、先入れ先出しの優先順位で更新されて、走査線４を回転させてバッファ内に入れるとともに、走査線１を押し出す。同様に、走査線５が取得されているときに、角度セット２内における回転角度についての列合計が、バッファ内における走査線（走査線２〜４）を用いて更新される。行５が取得された後に、バッファは、走査線５を回転させて入れる一方で、走査線２を回転させて出すように更新される。このプロセスは、原稿の走査を通じて繰り返される場合がある。
【表１】
2004199679.tif 000008
【図面の簡単な説明】
【００４３】
【図１】本明細書中において開示された実施の形態の１つまたは複数の態様を組み込む場合がある撮像装置を示すブロック図である。
【図２】画像スキューを測定する方法に係る１つの実施の形態を示すフローチャートである。
【図３】複数の原稿回転角度において画素データを並行して抽出する方法に係る実施の形態を示すフローチャートである。
【図４】１つの原稿回転角度に沿って画素の投影を示す図である。
【図５】１つの原稿回転角度に沿って画素の投影を示す図である。
【図６】２次モーメントデータセットを確認する方法に係る実施の形態を示すフローチャートである。
【図７】有効なデータセットに基づいてスキュー角度推定値を合成するための方法に係る実施の形態を示すフローチャートである。
【図８】本明細書中における教示に従って、特定の原稿回転角度について行合計を取得する実施の形態を示す図である。
【図９】本明細書中における教示に従って、特定の原稿回転角度について行合計を取得する実施の形態を示す図である。
【符号の説明】
【００４４】
１２  原稿、１６  スキャナ、２０  画像データメモリ、２４  累算器、３０  スキュー角度プロセッサ、３８  画像プロセッサ、４０  メモリ、５０  画像出力装置、５２  コントローラ、５４  イルミネータ、５６  現像器、５８  定着器、４００，５００  原稿、４１０，４３０，５１０，５３０  画素（画素位置）、４２０  行（走査線）、５２０  列（走査線）、７０，７２，７４  走査線。
【図１】
2004199679.tif 000009
【図２】
2004199679.tif 000010
【図３】
2004199679.tif 000011
【図４】
2004199679.tif 000012
【図５】
2004199679.tif 000013
【図６】
2004199679.tif 000014
【図７】
2004199679.tif 000015
【図８】
2004199679.tif 000016
【図９】
2004199679.tif 000017
【外国語明細書】
2004199679.tif 000018
2004199679.tif 000019
2004199679.tif 000020
2004199679.tif 000021
2004199679.tif 000022
2004199679.tif 000023
2004199679.tif 000024
2004199679.tif 000025
2004199679.tif 000026
2004199679.tif 000027
2004199679.tif 000028
2004199679.tif 000029
2004199679.tif 000030
2004199679.tif 000031
2004199679.tif 000032
2004199679.tif 000033
2004199679.tif 000034
2004199679.tif 000035
2004199679.tif 000036
2004199679.tif 000037
2004199679.tif 000038
2004199679.tif 000039
2004199679.tif 000040
2004199679.tif 000041
2004199679.tif 000042
2004199679.tif 000043
2004199679.tif 000044
2004199679.tif 000045
2004199679.tif 000046
2004199679.tif 000047
2004199679.tif 000048