(57)【要約】【課題】 画像傾き検出方法において、従来はあらかじめ決めておいた角度毎で輝度値や画素数の累積、ハフ変換等でヒストグラムを作成し、角度毎のヒストグラムに対して分散値算出等の統計処理を行い、その結果を用いて画像の傾きを算出する。しかしながら、角度毎のヒストグラムを記憶するための記憶容量や計算量を多く必要とし、結果として高速な処理を行うことができない。【解決手段】 画像処理装置は、画像から水平方向のエッジを検出するエッジ検出手段と、エッジ位置を画像の水平方向に対してあらかじめ決めておいた角度毎で画像に垂直な軸へ射影を行い角度毎に射影点の数を計数する計数手段と、射影点の数が最小である射影角度を画像の傾きと決定する傾き決定手段を備える。角度毎のヒストグラムを不要とすることで、ヒストグラムを記憶するための記憶容量が不要となり、かつ統計処理が不要となるため計算量も削減でき、高速な処理を可能となる。【選択図】 図５
2017049820.tif 000002
【特許請求の範囲】
【請求項１】
水平方向の文字列から構成される画像を処理する画像処理装置であって、
前記画像から水平方向のエッジを検出する検出手段と、
前記検出手段により得られたエッジの位置を前記画像に対して垂直な軸へ与えられた射影角度で射影し、軸の上の射影点の数を計数する計数手段と、
前記射影角度を変えながら前記計数手段を用い、各射影角度に対応する射影点の数から射影点の数が最小となる射影角度を前記画像の傾きと決定する傾き決定手段と
を有することを特徴とする画像処理装置。
【請求項２】
垂直方向の文字列から構成される画像を処理する画像処理装置であって、
前記画像から垂直方向のエッジを検出する検出手段と、
前記検出手段により得られたエッジの位置を前記画像に対して水平な軸へ与えられた射影角度で射影し、軸の上の射影点の数を計数する計数手段と、
前記射影角度を変えながら前記計数手段を用い、各射影角度に対応する射影点の数から射影点の数が最小となる射影角度を前記画像の傾きと決定する傾き決定手段と
を有することを特徴とする画像処理装置。
【請求項３】
文字列から構成される画像を処理する画像処理装置であって、
前記画像から水平方向のエッジを検出する第１の検出手段と、
前記画像から垂直方向のエッジを検出する第２の検出手段と、
前記第１の検出手段により得られたエッジ位置を前記画像に対して垂直な軸へ与えられた射影角度で射影し、軸の上の射影点の数を計数する第１の計数手段と、
前記第２の検出手段により得られたエッジ位置を前記画像に対して水平な軸へ与えられた射影角度で射影し、軸の上の射影点の数を計数する第２の計数手段と、
前記射影角度を変えながら前記第１の計数手段及び第２の計数手段を用い、各射影角度に対応する射影点の数から射影点の数が最小となる射影角度を前記画像の傾きと決定する傾き決定手段と
を有することを特徴とする画像処理装置。
【請求項４】
前記傾き決定手段は、前記射影角度を、まず粗い刻みで前記画像の傾きを算出した後、細かい刻みで前記画像の傾きを算出することで傾きを決定することを特徴とする請求項１〜３のいずれか１項に記載の画像処理装置。
【請求項５】
前記傾き決定手段は、前記射影角度の絶対値が小さい方から順に前記射影点の数を算出することを特徴とする請求項１〜４のいずれか１項に記載の画像処理装置。
【請求項６】
前記計数手段は同一射影点に射影されるエッジ位置の区間を算出し、該区間の左端に位置するエッジに対してのみ射影処理を行い、ただちに次の区間の射影処理を開始する請求項１〜５のいずれか１項に記載の画像処理装置。
【請求項７】
前記射影手段はそれまでの射影点の数のうち最小値の射影点の数を参照し、射影点の数を計数において前記最小値を超えた場合に、射影処理を打ち切る請求項１〜６のいずれか１項に記載の画像処理装置。
【請求項８】
水平方向の文字列から構成される画像を処理する画像処理装置の制御方法であって、
前記画像から水平方向のエッジを検出する検出工程と、
前記検出工程により得られたエッジ位置を前記画像に対して垂直な軸へ与えられた射影角度で射影し、軸の上の射影点の数を計数する計数工程と、
前記射影角度を変えながら前記計数工程を実施し、各射影角度に対応する射影点の数から射影点の数が最小となる射影角度を前記画像の傾きと決定する傾き決定工程と
を有することを特徴とする画像処理装置の制御方法。
【請求項９】
垂直方向の文字列から構成される画像を処理する画像処理装置の制御方法であって、
前記画像から垂直方向のエッジを検出する検出工程と、
前記検出工程により得られたエッジ位置を前記画像に対して水平な軸へ与えられた射影角度で射影し、軸の上の射影点の数を計数する計数工程と、
前記射影角度を変えながら前記計数工程を実施し、各射影角度に対応する射影点の数から射影点の数が最小となる射影角度を前記画像の傾きと決定する傾き決定工程と
を有することを特徴とする画像処理装置の制御方法。
【請求項１０】
請求項８又は９に記載の画像処理装置の制御方法を、コンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、主に活字文字列から構成される画像から活字文字列の傾きを検出する画像処理装置、その制御方法に関する。
【背景技術】
【０００２】
従来から、名刺や文書を原稿台に置いて、スキャンした画像からＯＣＲ(Optical Character Recognition)技術を利用して、文字認識を行う、様々なアプリケーションが存在する。
原稿台に名刺や文書を置く際に生じる傾きや、原稿台カバーを閉じる際に名刺や文書がずれることで生じる傾きはＯＣＲ処理の文字認識率を低下させてしまう。従って、傾きを検出し、補正することは必須である。
【０００３】
このような画像の傾き補正の方法について、特許文献１では、２次元に配置された画像の集合体からなる第１の画像の輪郭を抽出して第２の画像を作成する。次に、第２の画像を、第１の画像の水平方向に対してあらかじめ決めておいた角度毎に回転させて、第１の画像の水平方向に、第２の画像の画素毎の輝度値を累積して、回転させた角度毎のヒストグラムを作成する。さらに、ヒストグラムそれぞれの分散値を算出し、最も分散値の大きなヒストグラムを作成したときの角度で第１の画像を回転させる方法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2004-128643号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示される技術では、回転させた角度毎のヒストグラムを作成し、かつヒストグラムそれぞれの分散値を算出する必要があり、計算量が多く、結果として、処理時間がかかる、という課題がある。
本発明は、このような課題に鑑み、角度毎のヒストグラムの作成を不要とし、計算量を減らし、処理を高速に行うことのできる画像の傾き検出方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、水平方向の文字列から構成される画像を処理する画像処理装置であって、前記画像から水平方向のエッジを検出する検出手段と、前記検出手段により得られたエッジ位置を前記画像に対して垂直な軸へ与えられた射影角度で射影し、軸の上の射影点の数を計数する計数手段と、前記射影角度を変えながら前記計数手段を用い、各射影角度に対応する射影点の数から射影点の数が最小となる射影角度を前記画像の傾きと決定する傾き決定手段とを有することを特徴とする。
【発明の効果】
【０００７】
本発明によれば、角度毎のヒストグラムの作成、及びヒストグラムの分散値の算出を不要とし、画像の傾き検出を高速に行うことを可能にする。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施例に係る画像傾き検出方法を実行するための画像処理装置の構成の一例を説明するブロック図である。
【図２】エッジ位置から画像に対して垂直な軸に射影する手段を説明するための図である。
【図３】画像に垂直な軸に射影する具体的な例を説明するための画像である。
【図４】画像に垂直な軸に射影角度０〜４度で射影する例を説明するための図である。
【図５】本発明の実施例に係る画像傾き検出方法のメイン処理及び射影処理を説明するためのフローチャートである。
【図６】本発明の実施例に係る水平方向エッジの判定方法を説明するための図である。
【図７】画像に対して水平な軸に射影する手段を説明するための図である。
【図８】画像に水平な軸に射影する具体的な例を説明するための画像である。
【図９】画像に垂直な軸に射影角度０〜４度で射影する例を説明するための図である。
【図１０】本発明の実施例に係る画像傾き検出方法のメイン処理及び射影処理(画像に対して水平な軸への射影を行う場合)を説明するためのフローチャートである。
【図１１】エッジ画像を作成する前の処理を説明するための図である。
【図１２】本発明の実施例に係る画像傾き検出方法による、射影角度と射影点の数の関係を説明するための画像を示す図である。
【図１３】射影角度０〜３度での射影処理における計算量が削減可能であることを説明するための図である。
【図１４】本発明の他の実施例に係る画像傾き検出方法の射影処理を説明するフローチャートである。
【図１５】本発明の別の実施例に係る画像傾き検出方法のメイン処理及び射影処理を説明するためのフローチャートである。
【図１６】本発明の別の実施例に係る射影処理の処理を説明するフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明を実施するための形態について図面を用いて説明する。
【実施例１】
【００１０】
（画像傾き検出装置の構成）
図１は、本発明の実施例１に係る画像傾き検出方法を実行するための画像処理装置の構成の一例を説明するブロック図である。画像処理装置100は、ユーザが各種の操作および設定変更を行うための操作部103と、操作部103からの指示に従い画像情報を読み取るスキャナ部109と、画像データを用紙に印刷するプリンタ部107とを有する。スキャナ部109は、スキャナ部109を制御する図示しないＣＰＵや原稿読取を行うための図示しない照明ランプや走査ミラーなどを有する。プリンタ部107は、プリンタ部107の制御を行う図示しないＣＰＵや画像形成や定着を行うための図示しない感光体ドラムや定着器を有する。
【００１１】
また、画像処理装置100は、ＣＰＵ101が実行するブートプログラムが格納されているＲＯＭ104を有する。また、画像処理装置100は、ＣＰＵ101が動作するためのシステムワークメモリであり、かつ画像データを一時記憶するための画像メモリでもあるシステムメモリ111を有する。
また、画像処理装置100は、スキャナ部109から画像データが入力されるスキャナＩ/Ｆ108と、プリンタへ画像データを出力するプリンタＩ/Ｆ106とを有する。画像処理装置100は、スキャナＩ/Ｆ108からの画像データに処理を施すための画像処理部105を有する。画像処理部105は画像処理後のスキャナ入力データをシステムメモリ111に書き込むために画像バス121と接続される。
【００１２】
また、画像処理装置100は、画像処理装置の動作を統括的に制御するＣＰＵ101を備える。また、画像処理装置100は、ネットワークＩ/Ｆ102を介し、ネットワーク上の図示しない汎用コンピュータと通信（送受信）を行う。また、画像処理装置100は、ＵＳＢＩ/Ｆ114を介し、画像処理装置100と接続された図示しない汎用コンピュータと通信（送受信）を行う。また、画像処理装置100は、ＦＡＸＩ/Ｆ115を介し、公衆回線網と接続し、図示しない他の画像処理装置やファクシミリ装置と通信（送受信）を行う。ＦＡＸＩ/Ｆには公衆回線網からの呼出信号（CI信号:CALL INDICATOR）を検知する図示しないCI検知回路がある。画像処理装置100は、ＣＰＵ101が実行するブートプログラムを読み出し動作を制御するＲＯＭＩ/Ｆ112を有する。また、画像処理装置100は、ＣＰＵ101、ネットワークＩ/Ｆ102、操作部Ｉ/Ｆ113、ＵＳＢＩ/Ｆ114、ＦＡＸＩ/Ｆ115、ＲＯＭＩ/Ｆ112、スキャナＩ/Ｆ108、プリンタＩ/Ｆ106、画像処理部105を相互に接続するシステムバス120を有する。ＣＰＵ101は、システムバス120に接続された、各ブロックに対する設定を、システムバス120を介して行う。
【００１３】
また、画像処理装置100は、システムメモリ111への書き込み、読み出し動作を制御するメモリコントローラ110を有する。メモリコントローラ110は、システムバス120および画像バス121に接続され、画像バス121に接続されたバスマスタのシステムメモリ111へのアクセスと、システムバス120に接続されたバスマスタのシステムメモリ111のアクセスとを、排他的に切り替える。
傾きを検出すべき画像はスキャナ部109から読み込まれ、システムメモリ111に格納されたものであるか、その画像の一部であってもよい。
【００１４】
（画像傾き検出方法の説明）
図２を用いてエッジ位置から画像に対して垂直な軸に射影する手段を説明する。同図は角度θでエッジ位置（x,y）を垂直な軸に射影している。垂直な軸に射影された点の座標は、
【数１】
2017049820.tif 000003
【００１５】
となる。同図において、floorは小数部を切り捨てる関数であり、垂直な軸に射影された、複数の点が同じ整数部を持つ場合、同一の射影点とみなす。ここで、切り捨てはあくまで一例であり、四捨五入や切り上げでもよい。
【００１６】
図３と図４(A)から(E)を用いて、画像に垂直な軸に射影する具体的な例を説明する。図３は射影を行う画像を示している。図３の画像に含まれる文字列は２度（反時計回り）の傾きを持っている。なお、図３における枠部分は文字列の傾きをわかりやすくするための画像の水平及び垂直を示すもので、画像の一部ではない。図４(A)から(E)はそれぞれ０度から５度の角度で射影した様子を拡大して示すものである。図４において、灰色の部分は図３に示した、元の画像を示す。また、図４において、黒い丸は水平方向のエッジ部分を示し、そのエッジ位置から画像に垂直な軸への射影される様子を黒い実線で示している。同図には、射影された点の数も示している。画像に含まれる文字列の傾きである２度で射影した場合（図４(C)）で射影された点の数が最小になることが分かる。
【００１７】
図５は本実施例に係る画像傾き検出方法を説明するためのフローチャートである。図５のフローチャートの各手順は、ソフトウェアに従って、ＣＰＵ101により実行される。
【００１８】
（画像傾き検出方法のメイン処理）
まず、図５(A)を用いて、画像傾き検出方法のメイン処理について説明する。ここで、θmin、θmax及びθdeltaはあらかじめ決めておいた角度で決定される定数であり、それぞれ角度の最小値、最大値及び角度の最小値と最大値の間を刻む増分である。count_minは後述する射影処理で得られる射影点の数の最小値を保持する変数であり、θresultはその最小値が得られた時の射影角度を保持する変数である。また、θは射影処理に与える射影角度を保持する変数であり、pcountは射影処理で得られた射影点の数を一時的に保持する変数である。
【００１９】
[S1001] ステップS1001では、ＣＰＵ101がシステムメモリ111に格納される画像から水平方向エッジ画像を作成し、システムメモリ111に格納する。エッジ画像とはエッジとエッジでない画素に対して、それぞれ異なる画素値を与えた画像である。例えば、エッジに対応する画素の画素値を0（黒）、それ以外を255（白）とした画像である。
【００２０】
水平方向エッジの判定方法について、図６(A)と(B)を用いて説明する。同図において、Cは注目画素を示し、UとLはそれぞれ注目画素の上と下の画素を示す。また、黒い丸は画素の明度がある閾値（例えば、明度の最大値の半分の値）未満、つまりその画素が黒に近い画素値を持つことを意味し、一方白い丸は画素の明度がある閾値以上、つまりその画素が白に近い画素値を持つことを意味する。画像がカラーである場合には、グレースケールに変換後の明度で判断する。図６(A)は注目画素Cとその上の画素Uが黒に近い画素で、かつ注目画素Cの下に画素Lが白に近い画素であり、この場合注目画素Cは下エッジと判定する。同様に、図６(B)は注目画素Cとその下の画素Lが黒に近い画素で、かつ注目画素Cの上に画素Uが白に近い画素であり、この場合注目画素Cは上エッジと判定する。下エッジか上エッジである場合、注目画素Cは水平方向エッジと判定する。
【００２１】
[S1002] ステップS1002では、ＣＰＵ101が射影角度θをθminに初期化し、count_minをINT_MAXに初期化する。INT_MAXはいかなる場合においても射影処理が射影点の数として返す値より大きい値であればよい。例えば、画像幅×画像高さとしてもよい。
[S1003] ステップS1003では、ＣＰＵ101が射影角度θで射影処理を行い、射影された点の数を計数して、pcountに格納する。射影処理の詳細は後述する。
[S1004] ステップS1004では、ＣＰＵ101がpcountとcount_minを比較する。
-(Yes) pcountがcount_min未満であれば、count_minとθresultを更新するために次のステップS1005に進む。
-(No) さもなければ、ステップS1006へジャンプする。
【００２２】
[S1005] ステップS1005では、ＣＰＵ101がcount_minとθresultをそれぞれ、pcountとθに更新する。
[S1006] ステップS1006では、ＣＰＵ101がθにθdeltaを加算し、θを更新する。
[S1007] ステップS1007では、ＣＰＵ101がθとθmaxを比較する。
-(Yes) θがθmax以下であれば、次の射影処理を行うためにステップS1003に戻る。
-(No) さもなければ、処理を終了する。θresultに算出された画像の傾きが格納されている。
【００２３】
（射影処理）
次に、図５(B)を用いて、ステップS1003で呼び出される射影処理の処理フローを説明する。
[S2001] ステップS2001では、ＣＰＵ101が各種変数や配列を初期化する。Tはtanθに初期化される。この処理フロー中ではθは変化しないので、tanθの計算を繰り返し行うのを避けるために、Tにtanθの値を格納している。射影された点の数を格納するpcountは０に初期化される。画像の垂直方向の位置を示すyは０に初期化される。また、画像に垂直な軸への射影点の座標を添え字とする配列existsをすべて０に初期化する。射影点の座標をsとすると、exists[s]が０であれば、画像に垂直な軸の座標sに射影されたエッジがないことを示す。
【００２４】
[S2002] ステップS2002では、ＣＰＵ101が画像の水平方向の位置を示すxを０にする。このステップは画像のライン毎の処理開始時に実行され、ＣＰＵ101が処理すべき画素位置を画像の左端に設定する。
[S2003] ステップS2003では、ＣＰＵ101はステップS1001で作成された水平方向エッジ画像を参照し、位置（x,y）がエッジか否かを判断する。
-(Yes) エッジであれば、次のステップS2004に進む。
-(No) さもなければ、次の画素を処理するためにステップS2007にジャンプする。
[S2004] ステップS2004では、ＣＰＵ101は画像に垂直な軸への射影点の座標を計算し、sに格納する。
【００２５】
[S2005] ステップS2005では、ＣＰＵ101はexists[s]を参照し、射影処理の現時点で画像に垂直な軸の座標sに射影されたエッジがないか否かを判断する。
-(Yes) 射影処理の現時点で画像に垂直な軸の座標sに射影されたエッジがないならば、次のステップS2006に進む。
-(No) さもなければ、次の画素を処理するためにステップS2007にジャンプする。
[S2006] ステップS2006では、ＣＰＵ101はexists[s]を1に更新し、射影された点の数pcountをインクリメントする。
[S2007] ステップS2007では、ＣＰＵ101は処理すべき画素位置を右に進めるために、xをインクリメントする。
【００２６】
[S2008] ステップS2008では、ＣＰＵ101はxと画像幅を比較し、
-(Yes) xが画像幅未満であれば、次の画素を処理するためにステップS2003へ戻る。
-(No) さもなければ、次のステップS2009へ進む。
[S2009] ステップS2009では、ＣＰＵ101は処理すべき画素位置を次のラインに進めるために、yをインクリメントする。
【００２７】
[S2010] ステップS2010では、ＣＰＵ101はyと画像高さを比較する。
-(Yes) yが画像高さ未満であれば、次の画素を処理するためにステップS2002へ戻る。
-(No) さもなければ、画像の全画素に対して処理が完了したので、射影された点の数pcountをメイン処理に戻し、終了する。
【００２８】
なお、本実施例の説明では、あらかじめ決めておいた角度をθmin、θmax及びθdeltaで計算し、それぞれ角度で射影処理を行っているが本発明の画像傾き検出方法はこれに限定されるものではない。例えば、-5度から+5度の範囲を0.25度刻みで画像の傾きを検出したい場合、θmin=-5、θmax=+5、θdelta=0.25で画像傾き検出を行うと、41種の角度で射影処理を行うことになる。同等な結果を得るために、まず、θmin=-5、θmax=+5、θdelta=1で画像傾き検出を行い、粗い精度での傾きをまず検出する。それから、検出された粗い角度±1度の範囲をθdelta=0.25で画像傾き検出を行い、画像の傾きを求めてもよい。このようにすれば、17種の角度の射影処理で画像の傾きを得ることができる。
【００２９】
また、本実施例においては、水平方向の文字が並ぶ画像を前提で、水平方向エッジを検出し、エッジ位置から画像に垂直な軸への射影処理を行うこととして説明を行ったが、垂直方向の文字が並ぶ画像の場合にも、本発明は適用できる。この場合、垂直方向エッジを検出し、エッジ位置から画像に水平な軸への射影処理を行えばよい。
【００３０】
（水平な軸への射影）
図７は画像に対して水平な軸に射影する手段を説明するための図である。同図では角度θでエッジ位置（x,y）を画像に対して水平な軸に射影している。水平な軸に射影された点の座標は、
【数２】
2017049820.tif 000004
【００３１】
となる。同図において、floorは小数部を切り捨てる関数であり、水平な軸に射影された、複数の点が同じ整数部を持つ場合、同一の射影点とみなす。
【００３２】
図８は射影を行う画像を示している。同図の画像に含まれる文字列は２度（反時計回り）の傾きを持っている。なお、同図における枠部分は文字列の傾きをわかりやすくするための画像の水平、及び垂直を示すもので、画像の一部ではない。
【００３３】
図９(A)から(E)はそれぞれ０度から５度の角度で射影した様子を拡大して示すものである。図９において、灰色の部分は図８に示した、元の画像を示す。また、図９において、黒い丸は水平方向のエッジ部分を示し、そのエッジ位置から画像に垂直な軸への射影される様子を黒い実線で示している。同図には、射影された点の数も示している。画像に含まれる文字列の傾きである２度で射影した場合（同図(C)）で射影された点の数が最小になることが分かる。
【００３４】
図１0は垂直方向の文字が並ぶ画像の場合の画像傾き検出方法を説明するためのフローチャートである。ほぼ、図５と同様なので、相違点のみを簡単に説明する。図１0(A)にメイン処理の処理フローを示す。図５との相違点はステップS1101でエッジ画像として垂直方向のエッジを用いて作成する点である。また、図１0(B)に射影処理の処理フローを示す。図５との相違点はステップS2104で画像に対して水平な軸への射影を行う点である。
さらに、画像に含まれる文字列の並びが水平か垂直か明らかでない場合、画像に対して垂直な軸への射影処理と画像に対して水平な軸への射影処理を両方行い、射影された点が最小となる射影角度を求めることで、画像の傾きを得ることができる。
【００３５】
（前処理）
名刺等をスキャンして作成された画像では、活字文字以外に各種ロゴ、マーク、写真等が含まれる場合がある。図１１(A)のように、活字文字列の向きとは異なる直線状のエッジを持った領域がある場合には、画像の傾きを誤検出する可能性がある。
このことを考慮して、エッジ画像を作成する前に、ある決められた領域より大きな領域が白でない画素で埋め尽くされている場合には、その領域すべてを白画素で埋め尽くせばよい。図１１(A)のような画像はこの処理により、図１１(B)となる。なお、図１１の黒枠は画像端を示すもので、画像の一部ではない。
図１２(A)と(B)を用いて、実施例の画像傾き検出方法による射影角度と射影点の数の関係の一例を示す。
【００３６】
図１２(A)は使用した画像であり、水平方向が1000画素、垂直方向が675ラインであり、ビジネス用の名刺サイズを300dpi（dots per inch）でスキャンした画像に相当する。画像の横書きの文字列は水平方向に対して+2.5度（反時計回りで2.5度）の傾きを持っている。なお、周囲の黒い枠は画像の端部を示すもので画像の一部ではない。図１２(B)は実施例の画像傾き検出方法による射影角度と射影点の数の関係を示す。水平方向の射影に関して、射影角度2.5度で射影点の数が最小になっていて、この射影角度と画像の傾きが一致していることが分かる。垂直方向の射影に関して、画像の活字文字列が横書きのために垂直方向の射影による射影点の数が水平方向の射影による射影点の数より大きな値となっている。
【００３７】
以上のように、本実施例によれば、角度毎のヒストグラムの作成及びヒストグラムの分散値の算出を不要とし、計算量を減らし、画像の傾き検出を高速に行うことが可能となる。
【実施例２】
【００３８】
実施例１では、射影処理において全エッジ位置に対して、画像に対して垂直な軸への射影を行った。実施例２では、あるエッジ位置から画像に対して垂直な軸への射影された点と同じ点へ射影されるだろう、他のエッジ位置に対しては射影の処理を行わないように、さらに計算量を減らすことを可能にする。実施例２に係る画像傾き検出方法を実行するための画像処理装置の構成は、図１で示した実施例１と同様の画像処理装置の構成である。
【００３９】
（射影処理の計算量の削減）
図１３(A)から(D)を用いて、射影処理における計算量が削減可能であることを説明する。図１３において、四角や丸は水平方向に並ぶエッジ位置を示している。図１３(A)は０度で射影する場合を示している。０度で射影する場合、画像に垂直な軸への射影点の座標sは
【数３】
2017049820.tif 000005
【００４０】
となる。つまり、水平方向に並ぶエッジ位置はすべて同じ点に射影される。したがって、図１３(A)の四角で示されたエッジ位置の射影処理を行えば、それより左の丸で示されるエッジ位置に対しては射影処理は不要である。
【００４１】
図１３(B)は１度で射影する場合を示している。１度で射影する場合、画像に垂直な軸への射影点の座標sは
【数４】
2017049820.tif 000006
【００４２】
となる。xが0から57までの範囲では、s=yとなる。したがって、xが0から57までの範囲に存在する9個のエッジ位置に対しては、その左端に位置する四角で示されるエッジ位置のみ射影処理を行えばよい。また、xが58から144までの範囲では、s=y+1となるので、xが58から144までの範囲に存在する9個のエッジ位置に対しては、その左端に位置する四角で示されるエッジ位置のみ射影処理を行えばよい。図１３(C)と(D)はそれぞれ、２度と３度で射影する場合を示し、同様に四角のエッジ位置の射影処理を行い、丸で示されたエッジ位置に対する射影処理は不要である。
本実施例に係る画像傾き検出方法のメイン処理は実施例１の図５(A)と同じである。
【００４３】
（射影処理のフローチャート）
図１４は本実施例に係る画像傾き検出方法の射影処理を説明するフローチャートである。
[S3001] ステップS3001では、ＣＰＵ101が各種変数や配列を初期化する。Tはtanθに初期化される。この処理フロー中ではθは変化しないので、tanθの計算を繰り返し行うのを避けるために、Tにtanθの値を格納している。射影された点の数を格納するpcountは０に初期化される。画像の垂直方向の位置を示すyは０に初期化される。また、画像に垂直な軸への射影点の座標を添え字とする配列existsをすべて０に初期化する。射影点の座標をsとすると、exists[s]が０であれば、画像に垂直な軸の座標sに射影されたエッジがないことを示す。
【００４４】
[S3002] ステップS3002では、ＣＰＵ101が画像の水平方向の位置を示すxを０に、nを０に初期化する。nは図１３で示すように、画像に垂直な軸への射影点の座標sと画像の垂直方向の位置を示すyの差分を保持する変数である。このステップは画像のライン毎の処理開始時に実行され、ＣＰＵ101が処理すべき画素位置を画像の左端に設定する。
ステップS3003からステップS3011で、ＣＰＵ101は射影角度θに応じて、その時点での処理すべき画像位置（x,y）における画像に垂直な軸への射影点の座標sを算出する。また、ＣＰＵ101はその同一射影点に射影されるエッジ位置の最大のX座標xlimitも算出する。図１３に示すように、（x,y）から（xlimit,y）の区間に存在するエッジ位置はすべて、垂直な軸の座標sに射影される。
【００４５】
[S3003] ステップS3003では、ＣＰＵ101は画像に垂直な軸への射影点の座標をsに格納する。
[S3004] ステップS3004では、θが負か、正かを判断する。
-(S3004でYes) 射影角度θが負の場合は、ステップS3006へ進む。
（case:θ＞０）
[S3006] ステップS3006では、射影点の座標sはyを初期値として、xが増加するとyは減少するので、nをデクリメントする。
-(S3004でNo) 射影角度θが正か０の場合、ステップS3005へ進む。
[S3005] ステップS3005では、θが正か、０かを判断する。
-(S3005でYes) 射影角度θが正の場合は、ステップS3007へ進む。
【００４６】
（case:θ＜０）
[S3007] ステップS3007では、射影点の座標sはyを初期値として、xが増加するとyは増加するので、nをインクリメントする。
[S3008] ステップS3008は射影角度θが負または正の時に実行されるステップで、ＣＰＵ101がxlimitを計算する。
[S3009] ステップS3009では、ＣＰＵ101がxlimitと画像幅を比較する。
-(S3009のYes) xlimitが画像幅以上であれば、ステップS3010に進む。
[S3010] xlimitを画像幅-1に設定し、ステップS3012に進む。
-(ステップS3009のNo) xlimitが画像幅未満であれば、ステップS3012にジャンプする。
【００４７】
（case:θ＝０）
-(S3004のNoかつ、S3005のNo) 射影角度θが０の場合は、ステップS3011に進む。
[S3011] 図１３で示すように、画像のライン上の全てのエッジ値は同一な射影点へ射影されるので、xlimitに画像幅-1を設定し、ステップS3012に進む。
[S3012] ステップS3012では、ＣＰＵ101はexists[s]を参照し、射影処理の現時点で画像に垂直な軸の座標sに射影されたエッジがないか否かを判断する。
-(S3012のYes) 射影処理の現時点で画像に垂直な軸の座標sに射影されたエッジがないならば、次のステップS3013に進み、
-(S3012のNo) さもなければ、次の区間（X座標がxlimitより大きい部分）を処理するためにステップS3017にジャンプする。
【００４８】
[S3013] ステップS3013では、ＣＰＵ101はステップS1001で作成された水平方向エッジ画像を参照し、位置（x,y）がエッジか否かを判断する。
-(S3013のNo) エッジでなければ、次の画素を処理するためにステップS3014に進み、
-(S3013のYes) さもなければ、ステップS3016に進む。
[S3014] ステップS3014では、ＣＰＵ101は処理すべき画素位置を右に進めるために、xをインクリメントする。
[S3015] ステップS3015では、ＣＰＵ101はxとxlimitを比較する。
-(S3015のYes) xがxlimit以下であれば、次の画素を処理するためにステップS3013へ戻り、
-(S3015のNo) さもなければ、この区間の処理が完了しているので、ステップS3017へ進む。
【００４９】
[S3016] ステップS3016では、エッジを検出した時に実行されるステップで、ＣＰＵ101はexists[s]を1に更新し、射影された点の数pcountをインクリメントする。その後、この区間の処理が不要なので、ステップS3017へジャンプする。
[S3017] ステップS3017では、ＣＰＵ101は処理すべき画素位置を次の区間に進めるために、xをxlimit+1に更新する。
[S3018] ステップS3018では、ＣＰＵ101はxと画像幅を比較し、
-(S3018のYes) xが画像幅未満であれば、次の画素を処理するためにステップS3003へ戻り、
-(S3018のNo) さもなければ、次のステップへ進む。
[S3019] ステップS3019では、ＣＰＵ101は処理すべき画素位置を次のラインに進めるために、yをインクリメントする。
【００５０】
[S3020] ステップS3020では、ＣＰＵ101はyと画像高さを比較する。
-(S3020のYes) yが画像高さ未満であれば、次の画素を処理するためにステップS3002へ戻る。
-(S3020のNo) さもなければ、画像の全画素に対して処理が完了したので、射影された点の数pcountをメイン処理に戻し、終了する。
以上のように、本実施例によれば、射影手段において、画像に垂直な軸の同一点に射影されるエッジ群に対してはそのうちの一つのエッジのみ計算するので、計算量をさらに減らすことが可能となる。
【実施例３】
【００５１】
実施例１及び実施例２では、射影処理に画像に垂直な軸への射影点の数を正確に計数した。しかしながら、射影点の数が最小となる射影角度を求めることができればよいので、射影点の数が最小とならない射影角度での正確な射影点の数は必要ではない。実施例３では、射影処理において、それまでの射影点の数の最小値を参照し、ある射影角度での射影処理中に射影点の数がその最小値を超えた場合、その射影角度での射影処理を打ち切り、さらに計算量を減らすことを可能にする。実施例３に係る画像傾き検出方法を実行するための画像処理装置の構成は、図１で示した実施例１と同様の画像処理装置の構成である。
【００５２】
図１５(A)と(B)は本実施例に係る画像傾き検出方法を説明するためのフローチャートである。図１５のフローチャートの各手順は、ソフトウェアに従って、ＣＰＵ101により実行される。
まず、図１５(A)は本実施例に係る画像傾き検出方法のメイン処理を説明するフローチャートである。本実施例に係る画像傾き検出方法のメイン処理は実施例１とほぼ同じであり、同じステップには図５(A)と同じ符号を付与している。実施例１と異なるステップは図１５(A)におけるステップS1003'である。S1003'では、射影角度θに加え、それまでの射影点の数の最小値count_minを射影処理に渡す。
【００５３】
（射影処理のフロー：１）
次に、図１５(B)を用いて、ステップS1003'で呼び出される射影処理の処理フローを説明する。本実施例に係る射影処理の処理フローは実施例１とほぼ同じであり、同じステップには図５(B)と同じ符号を付与している。実施例１と異なるのはステップS4001が追加されている点である。
[S4001] ステップS4001はステップS2006でpcountがインクリメントされた後に実行される。ステップS4001では、ＣＰＵ101がpcountとcount_minを比較する。
-(S4001のYes) pcountがcount_minより大きければ、ただちに処理を終了し、pcountをメイン処理に戻す。
-(S4001のNo) さもなければ、ステップS2007に進み、処理を続行する。
【００５４】
ここで説明した射影処理の打ち切りによる計算量削減の施策は実施例２で説明した同一射影点に射影されるエッジ位置群を一度のみ計算することによる計算量削減の施策と排他的ではなく、両施策を同時に施すことができる。
【００５５】
（射影処理のフロー：２）
図１６は、ステップS1003'で呼び出される射影処理の処理を説明するフローチャートであり、実施例２で説明した同一射影点に射影されるエッジ位置群を一度のみ計算する方法に射影処理の打ち切る方法を施したものである。このフローチャートは実施例２とほぼ同じであり、同じステップには図１４と同じ符号を付与している。実施例２と異なるのはステップS5001が追加されている点である。
[S5001] ステップS5001はステップS3016でpcountがインクリメントされた後に実行される。ステップS5001では、ＣＰＵ101がpcountとcount_minを比較する。
-(Yes) pcountがcount_minより大きければ、ただちに処理を終了し、pcountをメイン処理に戻す。
-(No) さもなければ、ステップS3017に進み、処理を続行する。
【００５６】
以上のように、本実施例によれば、ある角度での射影手段での射影処理で、それ以前の射影点の数の最小値を超えた時点で、その角度での射影処理を打ち切ることができ、計算量をさらに減らすことが可能となる。
なお、本実施例の説明では、射影処理の行う順番は射影角度が小さい方から昇順で行われているが、本発明の画像傾き検出方法はこれに限定されるものではない。例えば、画像の傾きが小さい（傾きが０度に近い）頻度が高いのであれば、射影角度の絶対値が小さい方から順に射影処理の行ってもよい。例えば、−５度から+５度を１度刻みで角度を検出したいのであれば、
０度、１度、−１度、２度、−２度、３度、−３度、４度、−４度、５度、−５度
の順で射影処理を行う。画像の傾きが１度であったとすれば、−１度以降の射影処理は必ず、途中で打ち切られるので、計算量削減の効果が増大する。
（その他の実施例）
【００５７】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成が可能である。
【符号の説明】
【００５８】
100 ・・・画像処理装置
101 ・・・ＣＰＵ
102 ・・・ネットワークＩ/Ｆ
104 ・・・ＲＯＭ
105 ・・・画像処理部
110 ・・・メモリコントローラ
111 ・・・システムメモリ
112 ・・・ＲＯＭ Ｉ/Ｆ
113 ・・・操作部Ｉ/Ｆ
120 ・・・システムバス
121 ・・・画像バス
【図１】
2017049820.tif 000007
【図２】
2017049820.tif 000008
【図３】
2017049820.tif 000009
【図４】
2017049820.tif 000010
【図５】
2017049820.tif 000011
【図６】
2017049820.tif 000012
【図７】
2017049820.tif 000013
【図８】
2017049820.tif 000014
【図９】
2017049820.tif 000015
【図１０】
2017049820.tif 000016
【図１１】
2017049820.tif 000017
【図１２】
2017049820.tif 000018
【図１３】
2017049820.tif 000019
【図１４】
2017049820.tif 000020
【図１５】
2017049820.tif 000021
【図１６】
2017049820.tif 000022