(57)【特許請求の範囲】
【請求項１】
画像の辺部から複数画素の領域を用いて、反対側の辺部に向けて走査することによって検出した黒画素の位置に基づいて、該画像の周辺部にある余白領域と該画像の黒画素領域との境界を検出する境界検出手段と、
前記境界検出手段によって検出された境界の水平又は垂直からの傾き角度を算出する境界傾き算出手段と、
前記境界傾き算出手段によって算出された境界の傾き角度に基づいて、前記画像全体の傾き角度を算出する画像傾き算出手段
を具備し、
前記境界検出手段は、走査して得た複数の黒画素を直線の近傍に位置するものからなるセグメントに分割して境界を検出し、
前記境界傾き算出手段は、前記境界検出手段によって分割されたセグメント毎に傾き角度を算出し、
前記画像傾き算出手段は、前記境界傾き算出手段が傾き角度の算出に用いたセグメント毎に含まれる黒画素数に基づいて、各セグメントの傾き角度に重み付けを行い、前記画像全体の傾き角度を算出する
ことを特徴とする画像処理装置。
【請求項２】
画像の辺部から複数画素の領域を用いて、反対側の辺部に向けて走査することによって検出した黒画素の位置に基づいて、該画像の周辺部にある余白領域と該画像の黒画素領域との境界を検出する境界検出手段と、
前記境界検出手段によって検出された境界の水平又は垂直からの傾き角度を算出する境界傾き算出手段と、
前記境界傾き算出手段によって算出された境界の傾き角度に基づいて、前記画像全体の傾き角度を算出する画像傾き算出手段
を具備し、
前記境界検出手段は、境界近傍に位置する黒画素塊のサイズを検出し、該サイズに応じて、前記境界検出手段が用いる複数画素の領域の長さを決定する
ことを特徴とする画像処理装置。
【請求項３】
前記境界検出手段は、複数の境界を検出し、
前記境界傾き算出手段は、前記境界検出手段によって検出された複数の境界の傾き角度を各々算出し、
前記画像傾き算出手段は、複数の境界の傾き角度に基づいて、前記画像全体の傾き角度を算出する
ことを特徴とする請求項１又は２に記載の画像処理装置。
【請求項４】
前記境界検出手段は、走査して得た複数の黒画素を直線の近傍に位置するものからなるセグメントに分割して境界を検出し、
前記境界傾き算出手段は、前記境界検出手段によって分割されたセグメント毎に傾き角度を算出する
ことを特徴とする請求項２に記載の画像処理装置。
【請求項５】
コンピュータを、
画像の辺部から複数画素の領域を用いて、反対側の辺部に向けて走査することによって検出した黒画素の位置に基づいて、該画像の周辺部にある余白領域と該画像の黒画素領域との境界を検出する境界検出手段と、
前記境界検出手段によって検出された境界の水平又は垂直からの傾き角度を算出する境界傾き算出手段と、
前記境界傾き算出手段によって算出された境界の傾き角度に基づいて、前記画像全体の傾き角度を算出する画像傾き算出手段
として機能させ、
前記境界検出手段は、走査して得た複数の黒画素を直線の近傍に位置するものからなるセグメントに分割して境界を検出し、
前記境界傾き算出手段は、前記境界検出手段によって分割されたセグメント毎に傾き角度を算出し、
前記画像傾き算出手段は、前記境界傾き算出手段が傾き角度の算出に用いたセグメント毎に含まれる黒画素数に基づいて、各セグメントの傾き角度に重み付けを行い、前記画像全体の傾き角度を算出する
ことを特徴とする画像処理プログラム。
【請求項６】
コンピュータを、
画像の辺部から複数画素の領域を用いて、反対側の辺部に向けて走査することによって検出した黒画素の位置に基づいて、該画像の周辺部にある余白領域と該画像の黒画素領域との境界を検出する境界検出手段と、
前記境界検出手段によって検出された境界の水平又は垂直からの傾き角度を算出する境界傾き算出手段と、
前記境界傾き算出手段によって算出された境界の傾き角度に基づいて、前記画像全体の傾き角度を算出する画像傾き算出手段
として機能させ、
前記境界検出手段は、境界近傍に位置する黒画素塊のサイズを検出し、該サイズに応じて、前記境界検出手段が用いる複数画素の領域の長さを決定する
ことを特徴とする画像処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置及び画像処理プログラムに関する。
【背景技術】
【０００２】
紙文書をスキャンして得た文書画像の傾き角度を検知する技術として、ハフ変換を用いる方法が一般に広く使われている。この手法は、対象画像をハフ変換して画像内の直線を複数検出し、その直線を水平・垂直に近い角度を持つ長い直線に絞り込む。そして、絞り込まれた直線の水平・垂直からのずれを傾き角度として検知するものである。
しかし、この方法には処理コストが大きいという欠点がある。
そこで、ハフ変換を用いずに、簡便・確実でしかも高速に傾き角度を検知することを目的とした技術が実用化に向けて開発されている。
【０００３】
これに関連する技術として、例えば、特許文献１には、文書の画像を利用して、文書の上に書かれたキーワードを操作者が指やペンで指示するだけで計算機に入力される文字列入力方法及び装置の提供を目的とし、文字列入力装置は、画像中の文書領域のエッジを検出する手段と、エッジから文書領域を表わす長方形を特定する手段と、長方形の平面における傾きから細長い物体を動かす方向を算出する手段と、その物体の移動を検出する手段と、物体の移動情報を用いて、物体が表わす指定点の座標の時系列データを求める手段と、求められた指定点の座標の時系列データの中から、操作者の指定動作に該当する部分を認識し、動作で指定される領域を算出する手段と、指定領域の近くに存在する文字列パターンを抽出する手段と、文字列パターンを文字認識により文字コードに変換する手段とからなることが開示されている。
【０００４】
また、例えば、特許文献２には、少ない処理量で高速に、画像の傾き角度を検出し、文字のない画像の傾きも検出可能にすることを目的とし、黒／白画素境界判定部によって、２値イメージメモリに入力された２値画像上の黒画素と白画素の境界の点を複数個抽出し、この点列のＸ座標とＹ座標を２変数とする回帰直線の回帰係数を回帰係数算出部で計算し、画像傾き検出部で、回帰係数の値より画像の傾き角度を計算することが開示されている。
【０００５】
また、例えば、特許文献３には、画像処理装置等の書類の辺縁検出において、書類に比較的大きな破損、折れ、汚れなどがあったり、大きく傾いて読み取られたりしても、安定して高精度かつ高速に辺縁検出を行うことを目的とし、書類の多値画像を２値画像に変換する画像２値化部と、変換された画像データの辺縁上の複数点の座標を検出する辺縁座標メモリと、該複数の辺縁上の点の隣合う２点を結んだ方向ベクトルを作成し、本来の辺縁上にある点を結んだ方向ベクトルの傾きは平行あるいは直角になることを利用して不適当な点の候補を除去し、残った点のみを用いて書類の辺縁直線の方程式を求めるＣＰＵとを備えたことが開示されている。
【０００６】
つまり、紙を載せずにスキャンすると画像が黒くなるスキャナを用いて、紙文書より大きな領域をスキャンし、背景（黒）と紙（白）の境界を検出して紙の傾きを算出する技術である。その際、特許文献３では、所定間隔離れた複数の垂直線・水平線に沿って前記境界の検出を繰り返し、画像データが黒（背景）から白（紙）に変わる点を複数求める。次に隣合う変化点同士を結ぶベクトルを定義し、これらのベクトル群からより多くのものが互いに平行になるベクトル群を抽出し、これらの水平・垂直からのずれを傾き角度として算出するものである。
特許文献３記載の技術を実施するには、スキャナは次のような仕様を備えていなければならない。
（１）スキャナの画像幅が紙幅より広いこと
（２）紙を載せずにスキャンすると画像が黒くなること
【特許文献１】特開平１１−０６５７５３号公報
【特許文献２】特開平０７−１９２０８６号公報
【特許文献３】特開平０６−１６２１９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、スキャナの画像幅が紙幅より常に広くなっていることを要せず、又は紙を載せずにスキャンすると画像が必ず黒くなることも必要としないスキャナを用いて、画像の傾き角度を検知するようにした画像処理装置及び画像処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００８】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
請求項１記載の発明は、画像の辺部から複数画素の領域を用いて、反対側の辺部に向けて走査することによって検出した黒画素の位置に基づいて、該画像の周辺部にある余白領域と該画像の黒画素領域との境界を検出する境界検出手段と、前記境界検出手段によって検出された境界の水平又は垂直からの傾き角度を算出する境界傾き算出手段と、前記境界傾き算出手段によって算出された境界の傾き角度に基づいて、前記画像全体の傾き角度を算出する画像傾き算出手段を具備し、前記境界検出手段は、走査して得た複数の黒画素を直線の近傍に位置するものからなるセグメントに分割して境界を検出し、前記境界傾き算出手段は、前記境界検出手段によって分割されたセグメント毎に傾き角度を算出し、前記画像傾き算出手段は、前記境界傾き算出手段が傾き角度の算出に用いたセグメント毎に含まれる黒画素数に基づいて、各セグメントの傾き角度に重み付けを行い、前記画像全体の傾き角度を算出することを特徴とする画像処理装置である。
請求項２記載の発明は、画像の辺部から複数画素の領域を用いて、反対側の辺部に向けて走査することによって検出した黒画素の位置に基づいて、該画像の周辺部にある余白領域と該画像の黒画素領域との境界を検出する境界検出手段と、前記境界検出手段によって検出された境界の水平又は垂直からの傾き角度を算出する境界傾き算出手段と、前記境界傾き算出手段によって算出された境界の傾き角度に基づいて、前記画像全体の傾き角度を算出する画像傾き算出手段を具備し、前記境界検出手段は、境界近傍に位置する黒画素塊のサイズを検出し、該サイズに応じて、前記境界検出手段が用いる複数画素の領域の長さを決定することを特徴とする画像処理装置である。
【０００９】
請求項３記載の発明は、前記境界検出手段は、複数の境界を検出し、前記境界傾き算出手段は、前記境界検出手段によって検出された複数の境界の傾き角度を各々算出し、前記画像傾き算出手段は、複数の境界の傾き角度に基づいて、前記画像全体の傾き角度を算出することを特徴とする請求項１又は２に記載の画像処理装置である。
【００１０】
請求項４記載の発明は、前記境界検出手段は、走査して得た複数の黒画素を直線の近傍に位置するものからなるセグメントに分割して境界を検出し、前記境界傾き算出手段は、前記境界検出手段によって分割されたセグメント毎に傾き角度を算出することを特徴とする請求項２に記載の画像処理装置である。
【００１３】
請求項５記載の発明は、コンピュータを、画像の辺部から複数画素の領域を用いて、反対側の辺部に向けて走査することによって検出した黒画素の位置に基づいて、該画像の周辺部にある余白領域と該画像の黒画素領域との境界を検出する境界検出手段と、前記境界検出手段によって検出された境界の水平又は垂直からの傾き角度を算出する境界傾き算出手段と、前記境界傾き算出手段によって算出された境界の傾き角度に基づいて、前記画像全体の傾き角度を算出する画像傾き算出手段として機能させ、前記境界検出手段は、走査して得た複数の黒画素を直線の近傍に位置するものからなるセグメントに分割して境界を検出し、前記境界傾き算出手段は、前記境界検出手段によって分割されたセグメント毎に傾き角度を算出し、前記画像傾き算出手段は、前記境界傾き算出手段が傾き角度の算出に用いたセグメント毎に含まれる黒画素数に基づいて、各セグメントの傾き角度に重み付けを行い、前記画像全体の傾き角度を算出することを特徴とする画像処理プログラムである。
請求項６記載の発明は、コンピュータを、画像の辺部から複数画素の領域を用いて、反対側の辺部に向けて走査することによって検出した黒画素の位置に基づいて、該画像の周辺部にある余白領域と該画像の黒画素領域との境界を検出する境界検出手段と、前記境界検出手段によって検出された境界の水平又は垂直からの傾き角度を算出する境界傾き算出手段と、前記境界傾き算出手段によって算出された境界の傾き角度に基づいて、前記画像全体の傾き角度を算出する画像傾き算出手段として機能させ、前記境界検出手段は、境界近傍に位置する黒画素塊のサイズを検出し、該サイズに応じて、前記境界検出手段が用いる複数画素の領域の長さを決定することを特徴とする画像処理プログラムである。
【発明の効果】
【００１４】
請求項１の画像処理装置によれば、スキャナの画像幅が紙幅より常に広くなっていることを要せず、又は紙を載せずにスキャンすると画像が必ず黒くなることも必要としないスキャナを用いた場合であって、画像の傾き角度を検知することができる。走査して得られる文字等の黒画素の位置が必ずしも直線上にはないために発生する検出した境界の凹凸を抑制して、より正確な画像の傾き角度を検知することができる。長いセグメントから算出した傾き角度と短いセグメントから算出した傾き角度では精度が異なり、この異なる精度に配慮して、より正確な画像の傾き角度を検知することができる。
請求項２の画像処理装置によれば、スキャナの画像幅が紙幅より常に広くなっていることを要せず、又は紙を載せずにスキャンすると画像が必ず黒くなることも必要としないスキャナを用いた場合であって、画像の傾き角度を検知することができる。黒画素領域のサイズに影響を受けることなく、より精度を向上させることができる。
【００１５】
請求項３の画像処理装置によれば、より正確な画像の傾き角度を検知することができる。
【００１６】
請求項４の画像処理装置によれば、走査して得られる文字等の黒画素の位置が必ずしも直線上にはないために発生する検出した境界の凹凸を抑制して、より正確な画像の傾き角度を検知することができる。
【００１８】
境界検出手段が用いる複数画素の領域は、境界に文字等がある場合に対応するためのものである。複数画素の領域の長さが狭いと文字等の黒画素領域の凸凹に影響を受けやすくなり、広いとセグメント内の黒画素数が少なくなる。さらに、対象となる文書等の画像には様々な大きさの文字等が混在している。
【００１９】
請求項５の画像処理プログラムによれば、スキャナの画像幅が紙幅より常に広くなっていることを要せず、又は紙を載せずにスキャンすると画像が必ず黒くなることも必要としないスキャナを用いた場合であって、画像の傾き角度を検知することができる。走査して得られる文字等の黒画素の位置が必ずしも直線上にはないために発生する検出した境界の凹凸を抑制して、より正確な画像の傾き角度を検知することができる。長いセグメントから算出した傾き角度と短いセグメントから算出した傾き角度では精度が異なり、この異なる精度に配慮して、より正確な画像の傾き角度を検知することができる。
請求項６の画像処理プログラムによれば、スキャナの画像幅が紙幅より常に広くなっていることを要せず、又は紙を載せずにスキャンすると画像が必ず黒くなることも必要としないスキャナを用いた場合であって、画像の傾き角度を検知することができる。黒画素領域のサイズに影響を受けることなく、より精度を向上させることができる。
【発明を実施するための最良の形態】
【００２０】
以下、図面に基づき本発明を実現するにあたっての好適な一実施の形態の例を説明する。
図１は、本実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア（コンピュータ・プログラム）、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、コンピュータ・プログラム、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するの意である。また、モジュールは機能にほぼ一対一に対応しているが、実装においては、１モジュールを１プログラムで構成してもよいし、複数モジュールを１プログラムで構成してもよく、逆に１モジュールを複数プログラムで構成してもよい。また、複数モジュールは１コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって１モジュールが複数コンピュータで実行されてもよい。なお、１つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続（データの授受、指示、データ間の参照関係等）を含む。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク（一対一対応の通信接続を含む）等の通信手段で接続されて構成されるほか、１つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。
【００２１】
なお、画像内の位置を表すのに、原点（０，０）を左下隅としたｘｙ座標で表す場合がある。つまり、画像の下辺はｙ＝０の線分、上辺はｙ＝ｍａｘｙ（画像の高さ）の線分、左辺はｘ＝０の線分、右辺はｘ＝ｍａｘｘ（画像の横幅）の線分で表す。
また、黒画素塊とは、４連結又は８連結で連続する黒画素領域を少なくとも含み、これらの画素領域の集合をも含む。これらの画素領域の集合とは、４連結等で連続した画素領域が複数あり、その複数の画素領域は近傍にあるものをいう。ここで、近傍にあるものとは、例えば、互いの画素領域が距離的に近いもの、文章としての１行から１文字ずつ切り出すように縦又は横方向に射影し、空白地点で切り出した画像領域、又は一定間隔で切り出した画像領域等がある。
なお、１つの黒画素塊で１文字の画像となる場合が多い。ただし、実際に人間が文字として認識できる画素領域である必要はない。文字の一部分、文字を形成しない画素領域等もあり、何らかの黒画素の塊であればよい。以下、文字という場合は、この黒画素塊を指す。
【００２２】
本実施の形態は、境界検出モジュール１２Ａ、境界検出モジュール１２Ｂ、境界検出モジュール１２Ｃ、境界検出モジュール１２Ｄ、境界傾き算出モジュール１３Ａ、境界傾き算出モジュール１３Ｂ、境界傾き算出モジュール１３Ｃ、境界傾き算出モジュール１３Ｄ、画像傾き算出モジュール１４、画像回転モジュール１５を有している。本実施の形態は、画像の周囲に必ず存在する余白領域と画像内の黒画像領域との境界を検出し、その境界と水平又は垂直とのずれを傾き角度として、画像全体の傾き補正をするものである。
【００２３】
境界検出モジュール１２Ａは、境界傾き算出モジュール１３Ａと接続されており、入力画像１１を受け付け、入力画像１１の辺部から複数画素の領域（以下、スリットという）を用いて、反対側の辺部に向けて走査することによって検出した黒画素の位置に基づいて、入力画像１１の周辺部にある余白領域と入力画像１１の黒画素領域との境界を検出し、その境界を境界傾き算出モジュール１３Ａへ渡す。なお、境界検出モジュール１２Ａは、入力画像１１の上側にある境界を検出するものであり、入力画像１１の辺部とは入力画像１１の上辺（ｙ＝ｍａｘｙ）のことである。そして、反対側の辺部に向けてとは、上から下へ向けての意である。
より詳細には、スリットを上辺部の左端に置き、上から下へ走査し、そのスリット内に黒画素が入ったら、その黒画素の位置を記憶して、スリットを上辺部の右へ移動する。この手順を、スリットが右端に到達するまで繰り返して、記憶した複数の黒画素の位置を用いて、直線の近傍に位置するものからなるセグメントに分割して境界を検出する。
また、境界検出モジュール１２Ａは、境界近傍に位置する黒画素塊のサイズを検出し、そのサイズに応じて、スリットの長さＮを決定するようにしてもよい。より詳細には、境界近傍の黒画素領域で画素塊を抽出し、その外接矩形の大きさのヒストグラムから最も頻度の高いものを文字のサイズとして算出し、スリットの長さＮはその文字サイズに適正な倍数（例えば、０．５〜２倍）を掛けた値とするのが望ましい。
文字の外形が直線ではないために、検出した境界には凹凸が発生する。境界検出モジュール１２Ａは、この凹凸の影響を削減して境界を検出するためのものである。
【００２４】
境界検出モジュール１２Ｂ、１２Ｃ、１２Ｄは、境界検出モジュール１２Ａと同様であり、各々入力画像１１の下側、右側、左側にある境界を検出するものである。そして、入力画像１１の辺部とは、入力画像１１の各々下辺（ｙ＝０）、右辺（ｘ＝ｍａｘｘ）、左辺（ｘ＝０）のことである。そして、反対側の辺部に向けてとは、各々下方から上方へ向けて、右から左へ向けて、左から右へ向けての意である。
【００２５】
境界傾き算出モジュール１３Ａは、境界検出モジュール１２Ａ、画像傾き算出モジュール１４と接続されており、境界検出モジュール１２Ａによって検出された境界の水平からの傾き角度を算出し、その傾き角度を画像傾き算出モジュール１４へ渡す。より詳細には、境界検出モジュール１２Ａによって分割されたセグメント毎に傾き角度を算出する。また、境界検出モジュール１２Ａが傾き角度の算出に用いたセグメント毎に含まれる黒画素数に基づいて、各セグメントの傾き角度に重み付けを行い、入力画像１１全体の傾き角度を算出するようにしてもよい。
境界傾き算出モジュール１３Ｂ、１３Ｃ、１３Ｄは、境界傾き算出モジュール１３Ａと同様であり、各々入力画像１１の下側、右側、左側にある境界の傾き角度を算出するものである。そして、境界傾き算出モジュール１３Ｃ、１３Ｄは、境界の垂直からの傾き角度を算出する。
【００２６】
画像傾き算出モジュール１４は、境界傾き算出モジュール１３Ａ、境界傾き算出モジュール１３Ｂ、境界傾き算出モジュール１３Ｃ、境界傾き算出モジュール１３Ｄ、画像回転モジュール１５と接続されている。境界傾き算出モジュール１３Ａ、境界傾き算出モジュール１３Ｂ、境界傾き算出モジュール１３Ｃ、境界傾き算出モジュール１３Ｄによって各々算出された境界の傾き角度に基づいて、入力画像１１全体の傾き角度を算出し、その入力画像１１の傾き角度を画像回転モジュール１５へ渡す。入力画像１１全体の傾き角度を算出するとは、例えば、各々算出された境界の傾き角度の平均や最頻値などの公知の統計処理を施すことにより行う。
画像回転モジュール１５は、画像傾き算出モジュール１４と接続されており、画像傾き算出モジュール１４から入力画像１１の傾き角度及び対象となっている入力画像１１を受け取り、その傾きに応じて入力画像１１を回転し、出力画像１６を生成する。入力画像１１の回転はアフィン変換等を用いて行う。
【００２７】
なお、境界検出モジュール（１２Ａ、１２Ｂ、１２Ｃ、１２Ｄ）と境界傾き算出モジュール（１３Ａ、１３Ｂ、１３Ｃ、１３Ｄ）は、各々４つずつあるが、１つずつであってもよい。その場合、境界検出モジュールに与えるパラメータ（上下右左の種別）によって、画像の上下右左のいずれかの境界を検出し、同様に、境界傾き算出モジュールに与えるパラメータ（上下右左の種別）によって、画像の上下右左のいずれかの境界の傾き角度を算出し、これを４回繰り返すようにしてもよい。また、境界検出モジュールが上下右左の全ての境界を検出した後に、境界傾き算出モジュールがそれぞれの境界の傾き角度を算出するようにしてもよい。
【００２８】
また、入力画像１１の４方向全ての境界の検出及びその傾きの算出を行っているが、１つの周辺部を対象としてもよく、より精度を高めるために上下左右のうち少なくとも２つの周辺部に適用するようにしてもよい。
つまり、文書には文字・表罫線・写真・グラフィックスなどが含まれる。本実施の形態における余白領域と黒画素領域の境界の検出は、文字・表罫線には有効であるが、写真・グラフィックスの場合には文字・表罫線の場合に比較すると精度が高くない傾向がある。すなわち、もし画像周辺の黒画素領域が写真・グラフィックスであると精度が低下する恐れがある。そこで、画像の上下左右に４箇所ある余白領域のうち少なくとも２つ以上の余白領域に対して黒画素領域との境界を検出することで複数の境界を得て、黒画素領域が写真・グラフィックスである場合の影響を抑えるようにしてもよい。
【００２９】
次に作用・働き（動作）を説明する。
図２は、境界検出モジュールが行う処理例を示すフローチャートである。境界検出モジュール１２Ｂが行う処理、つまり、画像の下部の余白領域と黒画素領域との境界を検出する処理例について説明する。
図２に示すフローチャートの前半（ステップＳ２００〜ステップＳ２２０）は、スリット走査（下から上）で最初に検出した黒画素の位置を記憶する処理を、走査位置を左から右にずらしながら繰り返し、余白領域と黒画像領域の境界に位置する黒画素を複数検出する処理例を示すものである。後半（ステップＳ２２２〜ステップＳ２３６）は、この複数の黒画素が上下に大きく離れるところで複数のセグメントに分割する処理例を示すものである。
【００３０】
ステップＳ２０２では、入力画像１１を取得する。画像を取得するとは、スキャナで画像を読み込むこと、ファックスで画像を受信すること、画像データベース等から画像を読み出すこと等が含まれる。また、画像の周辺部には黒枠が無くてもよい。つまり、スキャナの画像幅が紙幅より常に広くなっていることを要せず、又は紙を載せずにスキャンすると画像が必ず黒くなることも必要としないスキャナを用いて読み込んだ画像であってもよい。その画像は、１枚であってもよいし、複数枚の画像であってもよい。また、画像の内容として、ビジネス用に用いられる文書、広告宣伝用のパンフレット等であってもよい。
【００３１】
ステップＳ２０４では、入力画像１１の下部（下辺から所定領域内）にある文字のサイズを算出する。
ステップＳ２０６では、ステップＳ２０４で算出した文字サイズに基づいて、スリットの長さＮを決定する。以下、スリットの大きさを１×Ｎとして説明する。
ステップＳ２０８では、初期状態として左下隅にスリットを設定する。このスリットは、スリット内にある画素で黒画素があるか否かを判断するためのものである。
ステップＳ２１０では、スリット内に黒画素があるか否かを判断する。黒画素がある場合はステップＳ２１４へ進み、ない場合はステップＳ２１２へ進む。
ステップＳ２１２では、スリット内に黒画素がない場合であり、スリットを上方向に移動させる。つまり、そのスリット長さの範囲で最下端にある黒画素が見つかるまでステップＳ２１０、ステップＳ２１２の処理を繰り返す。
ステップＳ２１４では、その黒画素の位置（ｘｙ座標）を記憶する。スリット内に複数の黒画素がある場合は、その全ての黒画素の位置であってもよい。
【００３２】
ステップＳ２１６では、スリットを最下段に戻す。
ステップＳ２１８では、スリットを右方向にＮドット移動する。
ステップＳ２２０では、ステップＳ２１８の処理によってスリットは画像内に収まっているか否かを判断する。画像内にある場合はステップＳ２１０へ戻り、画像内にない場合はステップＳ２２２へ進む。つまり、スリットを左端から右端へ移動させるまでステップＳ２１０〜ステップＳ２２０の処理を繰り返す。
【００３３】
ステップＳ２２２では、変数ｉ、ｊに１を代入する。ここでの変数ｉは、ステップＳ２１４で記憶された黒画素の位置を特定するものである。変数ｊは、セグメントを特定するものである。
ステップＳ２２４では、ｉ番目とｉ＋１番目の黒画素位置を取得する。
ステップＳ２２６では、ｉ番目とｉ＋１番目の黒画素位置の上下方向（ｙ座標の差）が所定範囲内か否かを判断する。所定範囲内であればステップＳ２２８へ進み、それ以外であればステップＳ２３２へ進む。つまり、黒画素のｙ座標で比較した場合に近傍にあるか否かを判断しており、近傍にあるとは黒画素の位置は直線に近似していることを表している。
ステップＳ２２８では、ｊ番目のセグメントの要素としてｉ＋１番目の黒画素位置を記憶する。つまり、近傍に位置する黒画素を同一のセグメントに分類する。
ステップＳ２３０では、ｉ＋１をｉに代入する（ｉをインクリメントする）。つまり、次の黒画素を対象とする。
【００３４】
ステップＳ２３２では、ｉ＋１をｉ、ｊ＋１をｊに各々代入する。つまり、次の黒画素を対象とし、新しいセグメントを生成する。
ステップＳ２３４では、ｉは全黒画素数以下であるか否かを判断し、全黒画素数以下であればステップＳ２２４へ戻り、それ以外の場合は終了する（ステップＳ２３６）。つまり、ステップＳ２１４で記憶された全ての黒画素に対してセグメント化の処理（ステップＳ２２４〜ステップＳ２３２）を施したか否かを判断している。
【００３５】
図３は、境界検出モジュールによる処理例を示す説明図である。
図３（ｂ）に示している境界線検出画像３２は、図３（ａ）に示している原画像３１に対して、境界検出モジュール１２Ｂによる処理（図２で示したフローチャートの処理）を施した結果である。なお、境界線検出画像３２内の白い点がステップＳ２１４によって記憶された黒画素を表している。つまり、原画像３１内のスリット単位内での最下端の黒画素の位置であり、原画像３１の傾きを算出するための境界の候補である。
【００３６】
図４は、境界傾き算出モジュールが行う処理例を示すフローチャートである。境界検出モジュールが検出した、セグメント分けされた「境界に位置する黒画素列」の位置情報から、各セグメントの傾きを算出する処理例である。
ステップＳ４０２では、セグメント数を取得し、変数ｍにその数を代入する。セグメント数は、図２に示したフローチャートでは最終的な変数ｊの値が該当する。
ステップＳ４０４では、変数ｉに１を代入する。ここでの変数ｉは、セグメントを特定するものである。
【００３７】
ステップＳ４０６では、ｉ番目のセグメントに属する黒画素列を取得する。つまり、着目しているセグメントに属する黒画素列を取得することであり、詳細には図２に示したフローチャートでステップＳ２２８でセグメントの要素として記憶された黒画素を取得する。そして、その黒画素を計数する。
ステップＳ４０８では、ステップＳ４０６で計数した黒画素数がＴ以上であるか否かを判断する。Ｔ以上であるならばステップＳ４１０へ進み、それ以外であるならばステップＳ４１６へ進む。つまり、取得した黒画素数が所定値（Ｔ）未満なら、ステップＳ４１４等（最小二乗法など）の処理に適さないため、これらの処理をバイパスする。例えば、黒画素数＝１のときは最小二乗法の計算式でエラーが起きるため、これを除外する目的でＴ＝２としてもよい。また、黒画素数が非常に少ない場合は最小二乗法で求めた傾きに大きな誤差が含まれているため、これを除外する場合はＴ＝３又はＴ＝４としてもよい。
【００３８】
ステップＳ４１０では、最小二乗法で直線近似を行う。つまり、あるセグメントに属するｎ個の黒画素数を対象とした場合、その位置を数１とする。
【数１】
0004978437.tif 000002
求めたい直線の式を数２とする。
【数２】
0004978437.tif 000003
ａとｂは、数３のように表すことができる。
【数３】
0004978437.tif 000004
すなわち、各黒画素の位置から数３を用いてａ、ｂを求め、数２に代入することによって近似の直線式を得ることができる。
【００３９】
ステップＳ４１２では、ステップＳ４１０で求めた直線の近似式より傾きを算出する。つまり、数２のａより水平又は垂直からの傾きを算出する。
ステップＳ４１４では、ステップＳ４１２で算出された傾きと黒画素数とを対応させて記憶する。このデータ構造を、図５（ａ）の傾き元情報５１に示す。傾き元情報５１は、位置欄５１１、傾き（角度）欄５１２、精度情報欄５１３を有している。位置欄５１１は、どの境界算出モジュールが処理したかを記憶しており、境界検出モジュール１２Ａは上、１２Ｂは下、１２Ｃは右、１２Ｄは左である。傾き（角度）欄５１２はセグメントを近似した直線の傾き、精度情報欄５１３はそのセグメント内の黒画素数を記憶している。
ステップＳ４１６では、変数ｉにｉ＋１を代入する。つまり、次のセグメントを対象とする。
ステップＳ４１８では、ｉはｍ以下であるか否かを判断する。以下であればステップＳ４０６へ戻り、それ以外の場合は終了する（ステップＳ４２０）。つまり、全てのセグメントに対して処理を終了したか否かを判断する。
【００４０】
図５は、画像傾き算出モジュール１４が処理対象とするデータの例を示す説明図である。図５（ａ）に示す傾き元情報５１は、画像傾き算出モジュール１４が入力するデータ（境界傾き算出モジュール１３Ａ等が画像傾き算出モジュール１４へ渡すデータ）である。図５（ｂ）に示す重み付き傾き情報５２は、近似直線の傾きとその重みのデータである。重み付き傾き情報５２は、傾き（方向を考慮）欄５２１、重み欄５２２を有している。ここで重みを用いるのは、長いセグメント（黒画素数が多いセグメント）から算出した傾きと、短いセグメントから算出したセグメントでは精度が異なるため、セグメントの長短を加味してより正確な画像全体の傾き角度を得るためである。
【００４１】
画像傾き算出モジュール１４は、次の３つの処理を行う。
（１）傾き元情報５１の傾き（角度）欄５１２に記憶されている傾きから、方向を考慮した傾きを算出して、重み付き傾き情報５２の傾き（方向を考慮）欄５２１に記憶する。つまり、位置欄５１１が「上」であるならばそのまま、「下」であるならば１８０度減算し、「右」であるならば２７０度減算し、「左」であるならば９０度減算する。
（２）傾き元情報５１の精度情報欄５１３に記憶されている精度情報（傾き算出に用いた黒画素数）から、重みを算出して、重み付き傾き情報５２の重み欄５２２に記憶する。ここでの重み付けは、精度情報欄５１３に記憶されている黒画素数の合計に対する割合である。つまり、図５の例で１行目にある傾き「３．５９」の重みは、精度情報欄５１３に記憶されている黒画素数の合計である２５７に対する３８の割合０．１４８（３８／２５７）である。
（３）重み付き傾き情報５２を用いて、傾きの加重平均を算出して、これを画像全体の傾きとする。重み付き傾き情報５２の例では２．９４度となる。
次に、画像回転モジュール１５は、画像傾き算出モジュール１４によって算出された画像全体の傾きを修正する方向に回転させる。つまり、図５に示した例では−２．９４度回転させる。
【００４２】
図６を参照して、本実施の形態のハードウェア構成例について説明する。図６に示す構成は、例えばパーソナルコンピュータ（ＰＣ）などによって構成されるものであり、スキャナ等のデータ読み取り部６１７と、プリンタなどのデータ出力部６１８を備えたハードウェア構成例を示している。
【００４３】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）６０１は、前述の実施の形態において説明した各種のモジュール、すなわち、境界検出モジュール１２Ａ、境界傾き算出モジュール１３Ａ、画像傾き算出モジュール１４、画像回転モジュール１５等の各モジュールの実行シーケンスを記述したコンピュータ・プログラムにしたがった処理を実行する制御部である。
【００４４】
ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）６０２は、ＣＰＵ６０１が使用するプログラムや演算パラメータ等を格納する。ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）６０３は、ＣＰＵ６０１の実行において使用するプログラムや、その実行において適宜変化するパラメータ等を格納する。これらはＣＰＵバスなどから構成されるホストバス６０４により相互に接続されている。
【００４５】
ホストバス６０４は、ブリッジ６０５を介して、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ／Ｉｎｔｅｒｆａｃｅ）バスなどの外部バス６０６に接続されている。
【００４６】
キーボード６０８、マウス等のポインティングデバイス６０９は、操作者により操作される入力デバイスである。ディスプレイ６１０は、液晶表示装置又はＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）などからなり、各種情報をテキストやイメージ情報として表示する。
【００４７】
ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）６１１は、ハードディスクを内蔵し、ハードディスクを駆動し、ＣＰＵ６０１によって実行するプログラムや情報を記録又は再生させる。ハードディスクには、入力画像１１や出力画像１６などが格納される。さらに、その他の各種のデータ処理プログラム等、各種コンピュータ・プログラムが格納される。
【００４８】
ドライブ６１２は、装着されている磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリ等のリムーバブル記録媒体６１３に記録されているデータ又はプログラムを読み出して、そのデータ又はプログラムを、インタフェース６０７、外部バス６０６、ブリッジ６０５、及びホストバス６０４を介して接続されているＲＡＭ６０３に供給する。リムーバブル記録媒体６１３も、ハードディスクと同様のデータ記録領域として利用可能である。
【００４９】
接続ポート６１４は、外部接続機器６１５を接続するポートであり、ＵＳＢ、ＩＥＥＥ１３９４等の接続部を持つ。接続ポート６１４は、インタフェース６０７、及び外部バス６０６、ブリッジ６０５、ホストバス６０４等を介してＣＰＵ６０１等に接続されている。通信部６１６は、ネットワークに接続され、外部とのデータ通信処理を実行する。データ読み取り部６１７は、例えばスキャナであり、ドキュメントの読み取り処理を実行する。データ出力部６１８は、例えばプリンタであり、ドキュメントデータの出力処理を実行する。
【００５０】
なお、図６に示すハードウェア構成は、１つの構成例を示すものであり、本実施の形態は、図６に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア（例えば特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）等）で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続しているような形態でもよく、さらに図６に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、複写機、ファックス、スキャナ、プリンタ、複合機（スキャナ、プリンタ、複写機、ファックス等のいずれか２つ以上の機能を有している画像処理装置）などに組み込まれていてもよい。
【００５１】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通などのために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク（ＤＶＤ）であって、ＤＶＤフォーラムで策定された規格である「ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ等」、ＤＶＤ＋ＲＷで策定された規格である「ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等」、コンパクトディスク（ＣＤ）であって、読出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）等、光磁気ディスク（ＭＯ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読出し専用メモリ（ＲＯＭ）、電気的消去及び書換可能な読出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）等が含まれる。
そして、前記のプログラム又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、あるいは無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して
記録されていてもよい。また、圧縮や暗号化など、復元可能であればどのような態様で記録されていてもよい。
【図面の簡単な説明】
【００５２】
【図１】本実施の形態の構成例についての概念的なモジュール構成図である。
【図２】境界検出モジュールが行う処理例を示すフローチャートである。
【図３】境界検出モジュールによる処理例を示す説明図である。
【図４】境界傾き算出モジュールが行う処理例を示すフローチャートである。
【図５】画像傾き算出モジュールが処理対象とするデータの例を示す説明図である。
【図６】本実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
【符号の説明】
【００５３】
１１…入力画像
１２Ａ…境界検出モジュール
１２Ｂ…境界検出モジュール
１２Ｃ…境界検出モジュール
１２Ｄ…境界検出モジュール
１３Ａ…境界傾き算出モジュール
１３Ｂ…境界傾き算出モジュール
１３Ｃ…境界傾き算出モジュール
１３Ｄ…境界傾き算出モジュール
１４…画像傾き算出モジュール
１５…画像回転モジュール
１６…出力画像
【図１】
0004978437.tif 000005
【図２】
0004978437.tif 000006
【図３】
0004978437.tif 000007
【図４】
0004978437.tif 000008
【図５】
0004978437.tif 000009
【図６】
0004978437.tif 000010