(57)【特許請求の範囲】
【請求項１】
多値の画像データをライン単位で入力する入力手段と、
前記ライン単位で入力される多値の画像データを順次２値化して２値画像データを生成し、当該生成された２値画像データをバンド単位で記憶手段に格納させる２値化手段と、
前記ライン単位で入力される多値の画像データとエッジしきい値とに基づいてライン毎にエッジを検出し、当該検出されたエッジのうちライン方向に近接するエッジ同士を結合することによって得られるエッジ部分の座標情報と、各エッジ部分に含まれるエッジの個数を抽出するエッジ部分抽出手段と、
前記画像データの複数のラインについて、前記エッジ部分抽出手段で抽出されたエッジ部分の座標情報とエッジの個数とに基づいて、前記ライン方向と垂直な方向において所定の近さにあるエッジ部分同士を結合することによって結合領域を生成し、結合領域の座標情報と各結合領域に含まれるエッジ数とを生成する生成手段と、
前記生成手段で生成された結合領域の座標情報とエッジ数とに基づいて、前記結合領域が文字画像を含むか否か判定する判定手段と、
前記２値化手段によって前記記憶手段に前記２値画像データが格納されるバンドについて、前記判定手段によって文字画像を含むと判定された結合領域が存在しないバンドについては上書きを許可し、前記判定手段によって文字を含むと判定された結合領域が存在するバンドについては上書きを許可しないようにして、前記２値化手段による前記記憶手段に対する前記２値画像の格納を制御する制御手段とを備えることを特徴とする情報処理装置。
【請求項２】
前記エッジ部分抽出手段は、１ラインの画像データを所定幅で区切って得られる部分についてエッジが存在するか否かを判定し、エッジが存在する所定幅の部分を抽出し、当該エッジが存在する所定幅の部分のうちライン方向に近接するもの同士を結合することによって、前記エッジ部分の座標情報を抽出し、当該エッジ部分に含まれるエッジが存在する所定幅の部分の数を前記エッジの個数とすることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記抽出手段は、前記所定幅部分の一部を重複させながら所定幅部分を順次切り出してエッジが存在するか否かを判定し、エッジが存在する所定幅部分を抽出することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記記憶手段にバンド単位で記憶された２値画像データに対して文字認識処理を行ない、原稿方向を判定する方向判定手段を更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項５】
多値の画像データをライン単位で入力する入力工程と、
前記ライン単位で入力される多値の画像データを順次２値化して２値画像データを生成し、当該生成された２値画像データをバンド単位で記憶手段に格納させる２値化工程と、
前記ライン単位で入力される多値の画像データとエッジしきい値とに基づいてライン毎にエッジを検出し、当該検出されたエッジのうちライン方向に近接するエッジ同士を結合することによって得られるエッジ部分の座標情報と、各エッジ部分に含まれるエッジの個数を抽出するエッジ部分抽出工程と、
前記画像データの複数のラインについて、前記エッジ部分抽出工程で抽出されたエッジ部分の座標情報とエッジの個数とに基づいて、前記ライン方向と垂直な方向において所定の近さにあるエッジ部分同士を結合することによって結合領域を生成し、結合領域の座標情報と各結合領域に含まれるエッジ数とを生成する生成手段と、
前記生成工程で生成された結合領域の座標情報とエッジ数とに基づいて、前記結合領域が文字画像を含むか否か判定する判定工程と、
前記２値化工程によって前記記憶手段に前記２値画像データが格納されるバンドについて、前記判定工程によって文字画像を含むと判定された結合領域が存在しないバンドについては上書きを許可し、前記判定工程によって文字を含むと判定された結合領域が存在するバンドについては上書きを許可しないようにして、前記２値化工程による前記記憶手段に対する前記２値画像の格納を制御する制御工程とを備えることを特徴とする情報処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は画像信号から必要な領域を抽出する領域抽出方法及び情報処理装置に関するものである。
【０００２】
【従来の技術】
近年の複写機はインテリジェント化が進んでおり、複数の原稿を１枚にレイアウトしたり、両面コピーしたりなど、いろいろな機能がある。さらに、ＡＤＦ（Ａｕｔｏ Ｄｏｃｕｍｅｎｔ Ｆｅｅｄｅｒ）の充実により、自動化、高速化も進んでいる。特に、複数の原稿を１枚の記録用紙にレイアウトして複写する際には、方向を自動判別することは重要である。例えば、ユーザがＡＤＦを利用して全２０枚の原稿を２枚づつ１枚の記録用紙上にレイアウトし１０枚に出力する場合、原稿の方向が自動的に判別できればユーザが全ての原稿を上向きにそろえておく必要がなくなる。
【０００３】
このように入力原稿の方向を判別する複写機においては、読み取った原稿画像から文字領域を抽出し、抽出した領域に対してＯＣＲ処理を施して方向の判定を行なっている。一般に、画像信号から必要な領域を抽出するには、画像信号をそのまま（多値信号のまま）、または２値化してメモリに格納し、メモリ内に存在する全画像信号に対してフィルタなどの信号処理、または輪郭線追跡などの処理を行うことにより、必要な領域を抽出したり、領域を分離したり、解析したりしていた。
【０００４】
【発明が解決しようとする課題】
しかしながら上記の手法では、次のような問題が生じる。
【０００５】
第１に、領域抽出のために、画像信号全部を格納するメモリが必要となる。領域抽出を目的として画像データが２値化されたものであるとはいえ、画像全体のデータを保持するには大容量のメモリが必要である。このように、領域抽出処理という用途に特化された大容量メモリを備えることは装置の低下価格化、小型化を妨げる要因となる。
【０００６】
第２に、画像信号全部を格納するまで領域抽出処理を開始することが出来ないことにより処理時間の遅れが生ずる。
【０００７】
本発明は上記の問題に鑑みてなされたものであり、特定の画像領域を抽出するのに全ての画像信号がメモリに格納されるのを待つことなく、しかも、不要な画像領域をメモリに格納せずに少量のメモリで高速に画像信号から必要な領域を抽出することを可能とすることにある。
【０００８】
【課題を解決するための手段】
上記の目的を達成する本発明の情報処理装置は、
多値の画像データをライン単位で入力する入力手段と、
前記ライン単位で入力される多値の画像データを順次２値化して２値画像データを生成し、当該生成された２値画像データをバンド単位で記憶手段に格納させる２値化手段と、
前記ライン単位で入力される多値の画像データとエッジしきい値とに基づいてライン毎にエッジを検出し、当該検出されたエッジのうちライン方向に近接するエッジ同士を結合することによって得られるエッジ部分の座標情報と、各エッジ部分に含まれるエッジの個数を抽出するエッジ部分抽出手段と、
前記画像データの複数のラインについて、前記エッジ部分抽出手段で抽出されたエッジ部分の座標情報とエッジの個数とに基づいて、前記ライン方向と垂直な方向において所定の近さにあるエッジ部分同士を結合することによって結合領域を生成し、結合領域の座標情報と各結合領域に含まれるエッジ数とを生成する生成手段と、
前記生成手段で生成された結合領域の座標情報とエッジ数とに基づいて、前記結合領域が文字画像を含むか否か判定する判定手段と、
前記２値化手段によって前記記憶手段に前記２値画像データが格納されるバンドについて、前記判定手段によって文字画像を含むと判定された結合領域が存在しないバンドについては上書きを許可し、前記判定手段によって文字を含むと判定された結合領域が存在するバンドについては上書きを許可しないようにして、前記２値化手段による前記記憶手段に対する前記２値画像の格納を制御する制御手段とを備える。
【０００９】
また、上記の目的を達成するための本発明の情報処理方法は、
多値の画像データをライン単位で入力する入力工程と、
前記ライン単位で入力される多値の画像データを順次２値化して２値画像データを生成し、当該生成された２値画像データをバンド単位で記憶手段に格納させる２値化工程と、
前記ライン単位で入力される多値の画像データとエッジしきい値とに基づいてライン毎にエッジを検出し、当該検出されたエッジのうちライン方向に近接するエッジ同士を結合することによって得られるエッジ部分の座標情報と、各エッジ部分に含まれるエッジの個数を抽出するエッジ部分抽出工程と、
前記画像データの複数のラインについて、前記エッジ部分抽出工程で抽出されたエッジ部分の座標情報とエッジの個数とに基づいて、前記ライン方向と垂直な方向において所定の近さにあるエッジ部分同士を結合することによって結合領域を生成し、結合領域の座標情報と各結合領域に含まれるエッジ数とを生成する生成手段と、
前記生成工程で生成された結合領域の座標情報とエッジ数とに基づいて、前記結合領域が文字画像を含むか否か判定する判定工程と、
前記２値化工程によって前記記憶手段に前記２値画像データが格納されるバンドについて、前記判定工程によって文字画像を含むと判定された結合領域が存在しないバンドについては上書きを許可し、前記判定工程によって文字を含むと判定された結合領域が存在するバンドについては上書きを許可しないようにして、前記２値化工程による前記記憶手段に対する前記２値画像の格納を制御する制御工程とを備える。
【００１０】
【発明の実施の形態】
以下、添付の図面を参照して本発明の好適な実施形態を説明する。
【００１１】
本実施形態では、入力原稿の方向を判別する機能を具備した複写機システムを本発明の一実施形態として説明する。図１は、本実施形態によるディジタル複写機の構成を表すブロック図である。図１において１はディジタル複写機を表す。２は、光学系であり、原稿用紙を照射するためのランプ、原稿用紙からの反射光を受光部３のＣＣＤセンサに導くレンズ系等を備える。３は受光部であり、光学系２よりの原稿画像の反射光をＣＣＤセンサによって読み取り、電気信号に変換する。
【００１２】
４は画像処理部であり、受光部３からの原稿画像に対応する電気信号をＡ／Ｄ変換してディジタル画像信号を得、このディジタル画像信号に種々の処理を加え、印字用のデータを生成する。５はプリント部であり、例えばレーザビーム方式によって、画像処理部４より出力される印字データに基づいて記録紙への画像形成を行なう。なお、画像処理部４は、複数枚の原稿を１枚の記録紙上にレイアウトする機能を有する。
【００１３】
１００は方向判定部であり、画像処理部４におけるＡ／Ｄ変換によって得られたディジタル信号に基づいて原稿の方向を判定し、その結果を画像処理部４に返す。画像処理部４では、複数枚の原稿を１枚の記録紙上にレイアウトする際に、原稿の方向判定結果を参照し、原稿の向きがそろうように画像を回転する等の処理を行なう。
【００１４】
さて、方向判定部１００では、文字領域を抽出し、抽出した文字領域に対してＯＣＲ処理を行うことにより方向判別を実現する。図２は本実施形態による方向判定部１００の構成を示すブロック図である。図２において、１Ａの矩形で囲まれた内部の処理構成が文字抽出を行なうものであり、本実施形態の特徴的な構成でもある。
【００１５】
図２において、１０１はしきい値決定回路であり、入力回路（本実施形態では図１の画像処理部４）からの多値画素データを入力し、２値化処理のための２値化しきい値、およびエッジ検出のためのエッジ検出しきい値を決定する。１０２はエッジ検出回路であり、多値画素データとしきい値決定回路１０１からの出力であるエッジ検出しきい値を入力し、クロックに同期して高周波検出処理を行う。１０３はエッジ座標記憶部であり、エッジ検出回路１０２により検出されたエッジ座標を格納する。
【００１６】
１０４は領域情報記憶部であり、検出されたエッジ座標を結合した結果作成される領域情報を格納する。１０５は結合処理回路であり、エッジ座標記憶部１０３内の座標と領域情報記憶部１０４内の座標とを比較し、必要に応じて領域情報記憶部１０４に記憶された領域とエッジ座標記憶部１０３に記憶されたエッジ部分を結合して新たな領域情報を得て、その結果を領域情報記憶部１０４に格納する。１０６は２値化回路であり、多値画素データとしきい値決定回路１０１の出力である２値化しきい値を入力し、多値画素データを２値化し、２値データを出力する。
【００１７】
１１１はバンドメモリコントローラであり、エッジ検出回路１０２からの情報および結合処理回路１０５の領域結合情報を利用して２値メモリ１０７のバンド情報を作成して２値メモリ１０７のアドレスを出力する。１０７は２値メモリであり、２値化回路１０６により２値化された２値データをバンドメモリコントローラ１１１からのアドレスの入力に従って格納する。
【００１８】
１０８はＣＰＵであり、領域情報記憶部１０４の領域情報（座標情報）および２値メモリ１０７に格納された２値画像データを利用して、文字認識処理を行い方向認識結果を出力する。１０９はＲＡＭであり、文字認識処理を行う上でのワークメモリとなる。１１０はＲＯＭであり、文字認識プログラムのコードを格納する。
【００１９】
なお、本実施形態では、領域情報記憶部１０４と２値メモリ１０７はダブルの構成となっており、各々が原稿の１ページ分のデータを保持する構成となっている。ＣＰＵ１０８は、領域情報記憶部１０４に格納された領域情報に基づいて文字領域を位置を認識する。そして、これに基づいて２値メモリ１０７から文字領域の２値化データを読み出し、この２値化データに対して例えば０度、９０度、１８０度、２７０度の各方向について文字認識を行って文書の方向を判別する。なお、本実施形態では、後述のように、２値メモリ１０７はバンド単位で２値データを記憶し、しかも文字領域を含むバンドのみが格納される。そして、その格納状態はメモリバンドコントローラ１１１によって管理される。従って、ＣＰＵ１０８は、領域情報記憶部１０４から領域情報を得て、これをメモリコントローラ１１１に渡す。メモリコントローラ１１１は渡された領域情報から対応する２値データのアドレスを発生し、要求された領域の２値データを２値メモリ１０７からＣＰＵ１０８へ与える。ただし、２値メモリ１０７はダブルであり、片方は入力多値画像をリアルタイムに２値化したものが書き込まれ、もう片方はＣＰＵからの要求により、前のページの２値データを読み出す形になるので、バンドメモリコントローラ１１１から２値メモリへの信号をダブルで持つか、またはぶつからないように調停する必要がある。
【００２０】
次に、しきい値決定回路１０１の処理手順について説明する。図３はしきい値決定回路１０１による処理手順の一例を示すフローチャートである。
【００２１】
まず、しきい値決定回路１０１による処理の概要を説明すると次の通りである。１ライン分の画素データについて、上位３ビット分の値を用いてヒストグラムを取る（ステップＳ２０１〜Ｓ２０５）。次に、レベルが隣り合うヒストグラムの合計値が１ラインの全画素数の７５％以上となる部分を探し、そのヒストグラムが指す輝度が原稿の下地であるとする（ステップＳ２０６〜Ｓ２０８、Ｓ２１１、Ｓ２１２）。このようにして原稿の下地の輝度が決定されたら、エッジ検出回路１０２にわたすエッジ検出しきい値（THR_MAXMIN）および２値化回路１０６に渡す２値化しきい値（BI_THRE）を決定する（ステップＳ２０９、Ｓ２１０）。なお、８ビット画素データは０が黒で２５５が白の輝度データとするが、これに限られるものではない。また、ヒストグラムを作成する際に用いた「上位３ビット」、下地であるか否かの判定に用いた「７５％」などの数値は一例であり、これに限定されるものではない。
【００２２】
以下、図３のフローチャートについて詳細に説明をする。
【００２３】
ステップステップＳ２０１ではヒストグラムバッファhistgnd[8]を０にリセットしている。すなわち、８個のヒストグラムバッファhistgnd[0]〜histgnd[7]の全てにゼロを書き込む。次に、ステップＳ２０２では画素数カウンタｉを０にリセットしている。画素数カウンタｉは１ライン分の画素データのヒストグラムを作成する際に、１ライン分の画素を処理したか否かを判定するのに用いる。
【００２４】
ステップＳ２０３では、ｉ番目の画素データimage[i]を右に５ビットシフトして（この処理により、画素データの上位３ビットのみが残る）、その値に対応するhistgnd[]をインクリメントしている。ステップＳ２０４では画素数カウンタｉをインクリメントしている。ステップＳ２０５では１ライン終了したかどうかチェックして、終了していたら２０６に進み、終了していなかったら２０３に戻る。以上ステップＳ２０３からステップＳ２０５の処理を繰り返すことによって、１ライン分の画素データの各々がhistgnd[0]〜histgnd[7]の何れかのレベルに振り分けられ、その数がhistgnd[0]〜histgnd[7]に格納される。すなわち、画素データ１ライン分の上位３ビットのヒストグラムを取ることができる。
【００２５】
次に、ステップＳ２０６以降の処理により、２値化しきい値（BI_THRE）及びエッジ検出しきい値（THR_MAXMIN）を決定する。
【００２６】
まず、ステップＳ２０６ではヒストグラムの番号を示すＫを３にリセットしている。そして、ステップＳ２０７において、Ｋ番目のレベルとＫ＋１番目のレベルの隣り合ったヒストグラム値を足しあわせ、ステップＳ２０８でその値が１ラインの画素数の７５％を越えるか否かを判定する。
【００２７】
ここで、Ｋの値を０でなく３としているのは、ヒストグラムのレベル０〜２といった黒よりの下地を検出しても、その下地上には文字がないことが比較的多く、また文字であっても白抜き文字の可能性が高いのでレベル０〜２を対象外としたためである。なお、白抜き文字処理（２値化の際、反転するなど）を行ってもよい。
【００２８】
ステップＳ２０７では隣り合ったヒストグラムを足し合わせているが、例えばＫ＝３であれば、histgnd[3]＋histgnd[4]であり、これは８ビットの画素値で９６（２進０１１０００００）から１５９（２進１００１１１１１）までの間に存在した画素数を示す。この加算の結果がhistaddに代入される。
【００２９】
また、ステップＳ２０８では、ステップＳ２０７で得られたhistaddが１ライン中の全画素数の７５％を占めているかどうかチェックし、７５％以上だったら当該レベルが下地であるとしてステップＳ２０９に進み、しきい値を決定する。一方、７５％以下だったらステップＳ２１１に進み、Ｋを１つ増加させて次のレベルについてチェックを行なう。
【００３０】
ステップＳ２０９ではエッジ検出しきい値であるTHR_MAXMINにＫを左５ビットシフトした数を代入する。この結果、エッジ検出しきい値には、histgnd[K]がカバーする画素値の範囲の下限値が設定される。続いて、ステップＳ２１０では、２値化しきい値BI_THREに（Ｋ＋１）を左４ビットシフトした数を代入し、処理を終了する。この結果、２値化しきい値には、histgnd[K+1]がカバーする画素値の範囲の下限値の１／２の値が設定される。
【００３１】
一方、ステップＳ２１１ではＫをインクリメントする。そして、ステップＳ２１２でＫが７以下だったらばステップＳ２０７に戻リ、上記処理を繰返す。一方、Ｋが７以上だったらば、本処理を終了する。この結果、エッジ検出しきい値及び２値化しきい値は前回の結果が保持されることになる。
【００３２】
以上のようなしきい値決定回路１０１を持ちTHR_MAXMINを変動させることにより、色紙に印刷された文字なども良好に抽出することが可能となる。
【００３３】
次に、エッジ検出回路１０２の処理手順を説明する。図４〜図６はエッジ検出回路１０２の処理手順を説明するフローチャートである。なお、図３で説明したしきい値決定回路１０１の処理と図４〜図６に示したエッジ検出回路１０２の処理は同時に行われ、図３内に記述してあるエッジしきい値THR_MAXMINは常に変動している。なお、この場合、決定されたしきい値は次のラインの処理に適用されることになる。
【００３４】
エッジ検出回路１０２の動作の概要を説明すると次のようである。まず、エッジ検出は１ラインより連続するSAMPLE_PIXEL個の画素を取り出し、取り出された画素の最大値と最小値との差に基づいて、当該取り出し部分がエッジ部分であるかどうかを判定する（ステップＳ３０１〜Ｓ３０８）。この判定の結果に基づいて、エッジの開始位置と終了位置の検出、隣接するエッジの結合、エッジの個数の計数等を行なう（ステップＳ３１１〜Ｓ３１７、Ｓ３２１〜Ｓ３２６）。以上の処理を、SAMPLE_PIXEL／２画素ずつ重複させて１ラインに渡って実行し、得られたエッジ情報をエッジ座標記憶部へ書き込む（ステップＳ３０９、Ｓ３１０、Ｓ３３０）。例えば、SAMPLE_PIXEL＝８とすれば、０〜７番目の画素についてエッジ検出を行ない、次に４〜１１番目、次に８〜１５番目という具合に、取り出す画素を重複させながら処理を進める。以下、図４〜図６に従って、詳細に説明する。
【００３５】
ステップＳ３０１では１行中の画素をカウントするｉと抽出エッジ数をカウントするcountを０にリセットする。ステップＳ３０２ではエッジ抽出中か否かを示すフラグflagをＯＦＦにリセットする。
【００３６】
ステップＳ３０３ではmaxdataに０をセットし、mindataに２５５をセットする。ステップＳ３０４からステップＳ３０６では、ｉ番目の画素から始まってSAMPLE_PIXEL分の画素を見て、その中の最大値をmaxdataに格納し、最小値をmindataに格納する処理をしている。そして、ステップＳ３０７において、最大値maxdataと最小値mindataの差をdiffに代入する。
【００３７】
ステップＳ３０８ではdiffがしきい値決定回路１０１により決定されたTHR_MAXMINより大きいかどうかチェックする。大きい場合はＡ（図５のステップＳ３１１）に進み、それ以外の場合はＢ（図５のステップＳ３２１）に進む。Ａ，Ｂでそれぞれの処理を行ったあと、Ｃに戻り、ステップＳ３０９で、ｉをSAMPLE_PIXEL／２だけ進める。そして、ステップＳ３１０では１ライン終了したかどうかチェックし、終了していたらステップＳ３３０でエッジ座標記憶部１０３にエッジ情報を書き込み、本処理を終了する。一方、まだ終了していなければ、ステップＳ３０３に戻リ、上述の処理を繰返す。
【００３８】
さて、ステップＳ３０８においてdiffがTHR_MAXMINよりも大きければ、図５のステップＳ３１１に処理が進む。
【００３９】
ステップＳ３１１ではエッジ抽出中がどうかを示すフラグflagがＯＦＦかどうかチェックする。flagがＯＦＦであれば、エッジの開始であるとしてステップＳ３１２に進み、エッジ開始処理（ステップＳ３１２〜ステップＳ３１４）を実行する。一方、flagがＯＮであれば、エッジ抽出中であるので、エッジ開始処理を行なわずにステップＳ３１５に進む。
【００４０】
エッジ開始処理において、まずステップＳ３１２でエッジ抽出中か否かを示すフラグflagをＯＮにセットする。ステップＳ３１３では当該エッジ（count番目のエッジ）の開始座標を示すstartx[count]にｉを代入する。この結果、count番目のエッジの開始座標が当該SAMPLE_PIXEL個の画素の先頭画素に設定される。次に、ステップＳ３１４では当該エッジ（count番目のエッジ）のエッジ数を示すedgenum[count]を０にリセットする。
【００４１】
ステップＳ３１５ではcount番目のエッジの終了座標を示すendx[count]にｉ＋SAMPLE_PIXEL／２を代入する。そして、ステップＳ３１６ではcount番目のエッジのエッジ数を示すedgenum[count]をインクリメントする。続いて、ステップＳ３１７では、横方向のスペース数をカウントするspace_countを０にリセットする。このspace_countは、以下に説明するステップＳ３２１〜Ｓ３２６の処理において、横方向にエッジのない小領域がしきい値以下存在しても、おなじエッジとする（すなわち、横方向に近接するエッジ部分を結合する）ために用いられる。これは後で説明する結合処理の負担を軽減するためである。
【００４２】
一方、図４のステップＳ３０８においてdiff≦THR_MAXMINであった場合は、図６のステップＳ３２１に処理が進む。
【００４３】
ステップＳ３２１ではエッジ抽出中かどうかを示すフラグflagがＯＮかどうかチェックし、ＯＮならばエッジの終了である可能性があるのでステップＳ３２２に進む。一方、flagがＯＦＦの場合は何もせずにＣ（ステップＳ３０９）に進む。ステップＳ３２２ではspacecountをインクリメントする。ステップＳ３２３では、spacecountがあらかじめ決めてあるspace_limit以上かどうか、または、ｉが（画像の横幅width−SAMPLE_PIXEL）より大きいかどうかをチェックし、いずれかに当てはまったらステップＳ３２４に進む。この条件を満たさない場合は、そのままＣ（ステップＳ３０９）に戻る。ステップＳ３２３における前者の条件は、エッジのない小領域が限度値（space_limit）以上存在した場合に、そのエッジが終了したと判断するためのもので、この条件によりエッジ部分の結合が実現される。また、後者の条件は、ラスターの画像幅（width）分の処理が終り、そのエッジを終了させなければいけない場合を示す。
【００４４】
ステップＳ３２３において、エッジの終了と判定されると、ステップＳ３２４でエッジ抽出中かどうかを示すフラグflagをＯＦＦにする。そして、ステップＳ３２５でエッジ数を示すcountをインクリメントする。ステップＳ３２６ではcountがCOUNT_LIMITに達したかどうかチェックし、ＹＥＳのときはエッジ座標記憶部１０３の記憶領域のオーバーフローを防ぐためＥＮＤに進む。ステップＳ３２６における判定の結果がＮＯであれば、Ｃ（ステップＳ３０９）に進む。
【００４５】
図７は、エッジ検出処理におけるオーバーラップ例を説明する図である。上述の最大値最小値抽出処理は、例えばSAMPLE_PIXELを８とすると、図７に示すように、まず０番目から７番目の画素まで見て最大値最小値を求め、ステップＳ３０７からＳ３１０までの処理を行い、次は４番目から１１番目までの画素を見て最大値最小値を求め、３０７からＳ３１０までの処理を行い、その次は８番目から１５番目までの画素を見て最大値最小値を求め、というように、オーバーラップして処理を進める。
【００４６】
３００ｄｐｉで画像を読み取った結果に関し、SAMPLE_PIXELを１６として、上記の如くオーバーラップして以下に説明する文字抽出処理を行うと、７ポイントから３２ポイントまでの文字を万遍なく抽出することができる。但し、SAMPLE_PIXELの値やオーバーラップの量は上述したものに限定されない。すなわち、SAMPLE_PIXELの値は適宜選択可能であるし、エッジ検出処理時のオーバーラップの仕方はSAMPLE_PIXEL／２でなくてもよいし、オーバーラップさせなくてもよい。
【００４７】
図８は、SAMPLE_PIXEL＝８、space_limit＝２の場合のエッジ座標検出処理の結果例を説明する図である。図８では、処理したSAMPLE_PIXEL個の画素を含む小領域においてdiff＞THR_MAXMINとなった場合を○で、diff≦THR_MAXMINとなった場合を×で示してある。
【００４８】
ｉ＝０、４、８の各小領域では、diff≦THR_MAXMINであり、ステップＳ３０８でＮＯ側に分岐し、ステップＳ３２１でもＮＯ側に分岐するので、何のエッジ情報も生じない。
【００４９】
ｉ＝１２の小領域ではdiff＞THR_MAXMINであり、Ｓ３０８でＹＥＳに分岐する。この時点でflag＝ＯＦＦ、count＝０であるから、ステップＳ３１１においてＹＥＳに分岐し、flagがＯＮになり、startx[0]にｉ＝１２が代入される（ステップＳ３１２〜Ｓ３１３）。edgenum[0]はステップＳ３１４で０にリセットされるが、その後のステップＳ３１６でインクリメントされるので１になる。また、ステップＳ３１５でendx[0]にはｉ＋SAMPLE_PIXEL＝１６が代入される。
【００５０】
次に、ｉ＝１６の小領域も同様にdiff＞THR_MAXMINであるので、ステップＳ３０８でステップＳ３１１に進む。ステップＳ３１１において、今回はflagがすでにＯＮであるのでステップＳ３１５に処理を進める。ステップＳ３１５では、endx[0]にｉ＋SAMPLE_PIXEL＝２０が代入される。また、ステップＳ３１６で、edg_num[0]がインクリメントされ２になる。
【００５１】
ｉ＝２０の小領域においては、diff≦THR_MAXMINであるので、ステップＳ３０８からステップＳ３２１へ進む。ステップＳ３２１において、flagがＯＮであるのでステップＳ３２２に進み、spacecountがインクリメントして１になる。ステップＳ３２３では、どちらの条件も満たさないのでそのままステップＳ３０９に進む（本例では、space_limit＝２である）。
【００５２】
ｉ＝２４の小領域においては、再びdiff＞THR_MAXMINとなるので、ステップＳ３０８からステップＳ３１１に進む。ステップＳ３１１では、flag＝ＯＮであるので、ＮＯに分岐し、endx[0]に２８を代入し、edgenum[0]がインクリメントされて３になり、spacecountが０にリセットされる。
【００５３】
以上のようにして各小領域についての処理が進み、ｉ＝５２の小領域が処理されると、diff≦THR_MAXMINなのでステップＳ３０８からステップＳ３２１へ処理が進む。ステップＳ３２１ではflagがＯＮであるのでステップＳ３２２に進み、spacecountがインクリメントされて３になる。この結果、ステップＳ３２３では、spacecount＞space_limitとなるので処理はＳ３２４に進み、flagがＯＦＦになる。そして、countがインクリメントされて１になる。ステップＳ３２６ではＮＯとなりステップＳ３０９に進む。
【００５４】
以上のように、ある程度近接しているものを結合しながら、横方向のエッジ抽出処理がおこなわれる。
【００５５】
実際は離れているエッジを結合するメリットを以下に説明する。エッジ検出処理の時点で離れていても近接するものを結合しながら行うことによって、エッジ座標記憶部１０３の記憶領域、および領域情報記憶部１０４の記憶領域の上限を小さく抑えることができる。それにより、記憶領域の削減というメリットと、その後の結合処理の時間が少なくてするというメリットが生じる。
【００５６】
例えば、Ａ３原稿の大きさ（主走査方向約３０ｃｍ×副走査方向約４２ｃｍ）を３００dｄｐｉで記録する場合に、sample_pixelを「８」とし、図７に示すようなオーバーラップ処理をしない場合、発生するエッジ情報の最大値は３５４３／１６＝２２１（space_limit＝０）となる。また、副走査方向のエッジ検出処理も、８ライン毎に行った場合４９６０／１６＝３１０となる。
【００５７】
ハードウエアにて実現する場合、エッジ座標記憶部１０３及び領域情報記憶部１０４の容量は最初に決定しなければならない。その時、必要な最大値を持つとすると、エッジ座標記憶部１０３に２２１個、領域情報記憶部１０４に２２１×３１０＝６８５１０個必要となる。この場合の結合処理は、２２１×６８５０＝１５１４０７１０の組み合わせとなる。これは、時間的によ容量的にも不可能なので、エッジ座標記憶部１０３及び領域情報記憶部１０４共に１２８個程度にとどめたい。しかし、その場合、データ（エッジ情報または領域情報）のオーバーフローが発生してしまう。これを防ぐために、space_limitに３を設定すると、エッジ座標記憶部１０３に必要な最大値は、３５４３／３２＝１１０となり、小さく抑えることができる。また、領域情報記憶部１０４を深さ１２８としたときのオーバーフローも少なくすることが可能となる。
【００５８】
次に結合処理回路１０５について説明する。図９は結合処理回路１０６の処理手順の一例を示すフローチャートである。結合処理回路１０６は、エッジ座標記憶部１０３に記憶された新しいエッジ情報と、領域情報記憶部１０４に記憶された領域情報とに基づいて、結合処理、フィックス処理、バンド処理等を施し、領域情報を順次更新していく。
【００５９】
ここで、領域情報記憶部１０４に格納されている領域情報について説明する。図１３は、領域情報記憶部１０４に記憶される領域情報の一例を示す図である。validは、その領域情報が有効か無効かを示す１ビットの情報である。fixは、その領域情報がフイックスしているかどうかを示す１ビットの情報である。startxは、矩形データのＸ軸開始点である。最大原稿をＡ３として、エッジ検出処理のサンプリング数を８とすると９ビットで済む計算になる。startyは、矩形データのＹ軸開始点である。最大原稿をＡ３として、エッジ検出処理の処理間隔を４とすると１１ビットで済む計算になる。endxは、矩形データのＸ軸終了点である。最大原稿をＡ３として、エッジ検出処理のサンプリング数を８とすると９ビットで済む計算になる（３５４３÷８＝４４２）。endyは、矩形データのＹ軸終了点である。最大原稿をＡ３として、エッジ検出処理の処理間隔を４とすると１１ビットで済む計算になる（４９６０÷４＝１２７０）。max_edgenumは、バンド内でのその矩形データのエッジ量を示す。たとえばＭＡＸＭＩＮしきい値にひっかかった最大数を保持するとするとＸの最大値以上にはならないので９ビットで済む計算になる。
【００６０】
pre_delは、その矩形データが直前のバンドで文字判定で文字でないとなったか否かを示す１ビットの情報である。seriesは、その矩形データが直前のバンドから続いているか否かを示す１ビットの情報である。remainは、その矩形データはそれ以前のバンドで文字であると判定されたか否かを示す１ビットの情報である。上記、pre_del、series、remainはバンド処理により発生してくる情報である。上述した領域情報は、結合処理回路１０５で作成される。
【００６１】
まず、ステップＳ６０１において、エッジ検出回路１０２により検出されてエッジ座標記憶部１０３に格納されたエッジ座標（エッジ開始点startx[]、エッジ終了点endx[]）と、領域情報記憶部１０４に格納された領域情報との結合処理を行う。
【００６２】
図１０は結合処理を説明する図である。図１０の７０１〜７０４、７１２は領域情報記憶部１０４に格納されている領域情報によって示される領域の一例である。一方、７０５〜７０８、７１３はエッジ検出回路１０２により検出され、エッジ座標記憶部１０３に記憶されたエッジ情報によって示されるエッジ部分の一例である。
【００６３】
ここで、領域情報記憶部１０４に記憶されている情報には、上述のように矩形開始座標（startx，starty）、矩形終了座標（endx，endy）および最大エッジ数（max_edgenum），その矩形がフイックスしているかどうかを示すフラグ（fix）が含まれている。但し、領域情報の構成は上記例に限られるものではなく、領域は矩形でなくてもよい。またエッジ座標記憶部１０３に記憶されているエッジ情報は開始点（startx）と終了点（endx）とエッジ数（edge_num）である。
【００６４】
結合処理回路１０５は、領域情報記憶部１０４に記憶されている領域７０１とエッジ座標記憶部１０３に記憶されたエッジ領域７０５の位置関係から、両者を結合すべしと判断し、結果として７０９の領域情報を作成し、領域情報記憶部１０４の領域７０１の領域情報を上書きする。その際、最大エッジ数は領域７０１のmax_edgenumと、エッジ領域７０５のedge_numのどちらか大きい方となる。こうして、領域７０１に関る矩形開始座標（startx，starty）、矩形終了座標（endx，endy）および最大エッジ数（max_edgenum）が更新され、矩形７０９を示す領域情報となる。ここで、領域情報記憶部１０４に記憶されている領域とエッジ情報記憶部に記憶されているエッジ領域とを結合するかどうかの判断は、両領域のｘ座標が重複し、かつ両領域のｙ座標の最小間隔がspace_limit_h以下であることを条件としてなされ、この条件を満足した場合に結合が行われる。
【００６５】
同様に、領域７０２に対してエッジ領域７０６および７０７が結合すべしと判断され、結果として領域７１０の領域情報を作成し、領域情報記憶部の領域７０２の領域情報を上書きする。また、最大エッジ数は、領域７０２のmax_edgenumとエッジ領域７０６と７０７のedge_numを足した数のどちらか大きい方となる。
【００６６】
また、エッジ領域７０８は、領域７０３、７０４の両方に対して結合するので、結果として領域７１１の領域情報が作成される。そして、この作成された領域情報で領域情報記憶部１０４の領域７０３の領域情報を上書きし、領域７０４の領域情報は削除される。その際、最大エッジ数は領域７０３のmax_edgenumと領域７０４のmax_edgenumを足した数と、エッジ領域７０８のedge_numのどちらか大きい方となる。
【００６７】
図９の説明に戻る。以上のようにして、領域の結合を終えると、ステップＳ６０２において矩形が閉じた領域情報を抽出し、フィックス処理を行う。フィックス処理を図１０を利用して説明する。領域情報記憶部１０４に格納されている領域７１２は、領域７１２の下方space_limit_hの範囲に、結合すべきエッジ領域が存在しないので、この領域情報の矩形は閉じたとしてフィックス処理が行われる。フィックス処理では、当該領域が文字領域であるかどうかを判定する。
【００６８】
まず、そのmax_edgenumがr_width＝（endx−endy）に対して、大きい場合、すなわち、
max_edgenum／r_width＞THR_EDGE_RATE（あらかじめ決められた値）
を満足し、かつ、
r_width＞THR_WIDTH（あらかじめ決められた値）
かつ
r_height＝（starty−endy）＞THR_HEIGHT（あらかじめ決められた値）
の全てを満足するとき、そこは文字領域であると判定する。そして、fixフラグをＯＮにする。一方、上記条件を満足しなかったときは、当該領域は文字領域でないとして、その領域情報は削除される。なお上記の条件は一例であり、いろいろな条件が考えられる。例えば、面積とエッジ数の比を調べてもよいし、r_widthによってTHR_EDGE_RATEの値を変えてもよい。
【００６９】
space_limitが横方向の多少離れた近傍のエッジを結合するか否かを決定するのに対して、space_limit_hは縦方向の多少離れたエッジを結合するか否かを決定するのに用いられる。このように結合を行うことで、領域情報記憶部１０４の記憶領域を小さくすることが出来る。また、文字を行単位でなく、ブロック単位で抽出することが可能となる。
【００７０】
再び、図９の説明に戻る。ステップＳ６０３において、バンド処理を行うか否かを判定する。たとえば、縦軸方向に６４画素（即ち６４ライン）の倍数をトリガにしてバンド処理を行う。その場合６４ライン毎に、ステップＳ６０４に進みバンド処理を行うことになる。一方、バンド処理を行なうタイミングでなければ、そのまま当該ラインの処理を終了する。
【００７１】
次に、バンド処理を説明する。図１１はバンド処理の概要を説明する図である。図１１の（ａ）は処理する原稿を示している。図１１の（ｂ）はバンド処理により画像がバンド分けされる様子を示す。上述のように、バンド処理は縦方向に６４画素ごと（３００ｄｐｉで５ミリくらい）程度で行うと良好な結果が得られるが、図１１では説明のために画像を８分割したものを示す。図１１の（ｃ）は（ａ）の画像の文字領域を示す図である。太い矩形で囲まれた部分が抽出された文字領域である。図１１の（ｄ）は２値メモリの実メモリ空間における画像の保持のされ方を示している。文字の存在しないバンドは、一旦メモリに書き込まれるものの、バンド内に文字が存在しないと判断されると、新たなバンドによって上書きされる。この結果、文字が存在しないバンドが抜かされてメモリに格納されることになる。
【００７２】
図１１の例では実画像空間に８個、メモリ空間にも８個のバンドが格納され得る。メモリ容量の削減を実現するには、メモリ空間のバンド数を実画像空間のバンド数より少なく設定する。たとえば、実画像空間のバンド数が６４でメモリ空間のバンド数を１６とするといったように設定される。
【００７３】
図１２は、画像のバンドとメモリのバンドに関る情報を説明する図である。図１２の（ａ）は画像のバンド番号とメモリのバンド番号を対応させる情報である。その情報の名前をmem_no_for_band[]とする。上述した図１１の（ｄ）がメモリへの格納結果であるとすると、最終的なmem_no_for_band[8]は｛０，８，２，１，８，４，３，８｝となる。ここで８という数値は、０オリジンで８個のメモリバンドを有するメモリ空間（０−７）には存在しない数値なので、２値メモリ上に存在しないバンドであることを示す。例えば、図１２において上から２番目のバンドは、mem_no_for_band[1]＝８であり、２値メモリには格納されていないことがわかる。
【００７４】
また、図１２の（ｂ）はメモリの各バンド内にいくつの文字領域が存在するかを示す情報である。その情報の名前をregion_in_band[]とする。図１１の（ｄ）がメモリへの格納結果であるすると、最終的なregion_in_band[8]は｛２，１，１，１，１，０，０，０｝となる。たとえば、一番上のバンドには、文字領域が２つ存在している。
【００７５】
上記の情報mem_no_for_band[]とregion_in_band[]は、バンドメモリコントローラ１１１によって作成され、２値メモリのアドレスを作成するのに利用される。詳細は後述する。
【００７６】
図１４はバンド処理の手順を説明するフローチャートである。ステップＳ７０１において、当該バンド内に結合処理等によって得られた矩形領域が存在するかどうかを判定する。矩形領域があれば、ステップＳ７０２に進み、一つの領域を選択する。
【００７７】
ステップＳ７０３では、選択した領域が当該バンド内において文字を含むか否かを判定する。この判定はいろいろ考えられるが、一例としては、上述したステップＳ６０２の処理と同様の条件で行うことが考えられる。当該領域が文字を含むと判定されればステップＳ７０４、そうでなければステップＳ７０５へそれぞれ進む。
【００７８】
ステップＳ７０４では、領域情報のremainをＯＮに、pre_delをＯＦＦにそれぞれ設定する。一方、ステップＳ７０５では、「pre_del＝ＯＮ＆remain＝ＯＦＦ＆seriese＝ＯＮ」を満足するかどうかを判定する。この条件を満足する場合、当該矩形領域が２つのバンドに渡って存在しており、いずれのバンドにおいても文字が存在していないことを表す。従って、当該矩形領域のこの２つのバンドの部分は不要であると判断し、ステップＳ７０６において、領域情報のstartyを次のバンドの先頭を示すように更新する。このように処理することで、矩形領域のうち、文字の存在しない部分をバンド単位で切り捨てることができる。その後、処理はステップＳ７１１へ進む。
【００７９】
ステップＳ７０５の条件が満足されない場合は、ステップＳ７０７へ進み、「pre_del＝ＯＮ＆remain＝ＯＮ＆seriese＝ＯＮ」が満足されるかどうかを判定する。この条件が満足される場合は、当該矩形が文字を含むと一度判定されたものの、最近の２バンドには文字が含まれていないという場合である。従って、ステップＳ７０８においてendyを２つ前のバンドの最終ラインを示すように更新し、当該矩形の最近の２つのバンドの部分（この部分には文字は存在しない）をカットする。更に、ステップＳ７０９において当該矩形をフィックスさせる。この処理により、文字の存在しない不要な部分をカットすることができる。ステップＳ７０９の処理を終えたならば、当該矩形はフィックスされるので、次の領域について処理を行なうべくステップＳ７０１に戻る。
【００８０】
ステップＳ７０７の条件も満足していない場合は、ステップＳ７１０へ進み、pre_delにＯＮをセットしてステップＳ７１１へ進む。
【００８１】
ステップＳ７１１では、当該矩形領域が次のバンドへ続くか否かを判定し、続くのであればステップＳ７１２において当該矩形領域の領域情報におけるseriesをＯＮにセットする。そして、ステップＳ７０１へ戻り、次の矩形領域の処理を実行する。ステップＳ７０１において、未処理の矩形領域がなくなれば本処理を終了する。
【００８２】
以上説明したバンド処理を図１５、図１６の２つの原稿例を用いて説明する。図１５、図１６はバンド処理の一例を説明する図である。
【００８３】
まず図１５のイラストの下に文字が続く原稿を処理する場合を説明する。この画像はバンド処理を行わないと、イラストと文字すべてを含んだ矩形を抽出してしまうものである。図１５（ａ）は１番上のバンド１４０１を処理するときの様子である。バンド１４０１に対するバンド処理の段階では、エッジ検出、および結合処理によって、１４０２のような矩形が抽出されている。そしてその矩形情報のうちの（pre_del,series,remain）は、そのバンド内で始まった矩形であるので（OFF,OFF,OFF）の状態である。その矩形情報内のエッジ量を示すmax_edgenumはイラスト部分であるため非常に小さく、文字判定のしきい値を超えない。したがって、その１４０１のバンドでの矩形１４０２の文字判定は「文字でない」となり、また、当該矩形領域は次のバンドへ継続されるので、矩形情報（pre_del,series,remain）は（ON,ON,OFF）となる。
【００８４】
図１５（ｂ）は２番目のバンド１４０３を処理するときの様子である。バンド１４０３のバンド処理の段階では、バンド１４０４のような矩形が抽出されている。そしてその矩形情報（pre_del,series,remain）はバンド１４０１のバンド処理の結果から（ON,ON,OFF）の状態である。さて、その矩形情報内のエッジ量を示すmax_edgenumはイラスト部分であるため非常に小さく、文字判定のしきい値を超えない。したがって、バンド１４０３のバンドにおける矩形１４０４の文字判定は「文字でない」となる。
【００８５】
ここで、文字判定が文字でなく、pre_delがＯＮ、seriesがＯＮ、remainがＯＦＦの場合は、Startyを遅らす処理（ステップＳ７０６）を実行する。矩形情報に保管されているstartyはバンド１４０１内に存在する点であるが、バンド１４０３のバンド処理の段階で、「文字判定が文字でなく、Pre_delがＯＮ、seriesがＯＮ、remainがＯＦＦ」の場合、次のバンドの先頭までstartyを遅らす。そして矩形情報（pre_del,Series,remain）は（ＯＮ，ＯＮ，ＯＦＦ）となる。
【００８６】
図１５（ｃ）は３番目のバンド１４０５を処理するときの様子である。バンド１４０５のバンド処理の段階では、矩形１４０６のような矩形が抽出されている。そしてその矩形情報（pre_del,series,remain）はバンド１４０３のバンド処理の結果から（ON,ON,OFF）の状態である。さて、その矩形情報内のエッジ量を示すmax_edgenumは文字部分であるため非常に大きく、文字判定のしきい値を超える。したがって、バンド１４０３での矩形１４０４の文字判定は「文字である」となり、矩形情報（pre_del,series,remain）は（OFF,ON,ON）となる。
【００８７】
図１５（ｄ）は４番目のバンド１４０７内で矩形が閉じた時の様子を示している。上器バンド処理の結果、矩形１４０８のような矩形が抽出され、そこでその矩形は閉じる（それ以上続かない）。閉じた段階で、その矩形情報（pre_del,series,remain）はバンド１４０５のバンド処理の結果から（OFF,ON,ON）の状態である。さて、その矩形情報内のエッジ量を示すmax_edgenumは文字部分であるため非常に大きく、文字判定のしきい値を超える。したがって、その閉じた矩形１４０４のバンド１４０７内での文字判定は「文字である」となる。したがって、その矩形は文字矩形として保持される。ちなみに、バンド１４０７内での文字判定が文字でないとなったとしても、remainがＯＮなので、その矩形は文字矩形として保持される。
【００８８】
次に図１６の文字の下にイラストが続く原稿を処理する場合を説明する。この画像はバンド処理を行わないと、文字とイラストすべてを含んだ矩形を抽出してしまうものである。
【００８９】
図１６（ａ）は１番上のバンド１５０１を処理するときの様子である。バンド１５０１のバンド処理の段階では、エッジ検出、および結合処理によって、１５０２のような矩形が抽出されている。そしてその矩形情報の（pre_del,series,remain）は、そのバンド内で始まった矩形であるので（OFF,OFF,OFF）の状態である。その矩形情報内のエッジ量を示すmax_edgenumは文字部分であるため非常に大きく、文字判定のしきい値を超える。したがって、バンド１５０１での矩形１５０２の文字判定は「文字である」となり、矩形情報（pre_del,series,remain）は（OFF,ON,ON）となる。
【００９０】
図１６（ｂ）は２番目のバンド１５０３を処理するときの様子である。バンド１５０３のバンド処理の段階では、１５０４のような矩形が抽出されている。そしてその矩形情報（pre_del,series,remain）はバンド１５０１に対するバンド処理の結果から（OFF,ON,ON）の状態である。さて、その矩形情報内のエッジ量を示すmax_edgenumはイラスト部分であるため非常に小さく、文字判定のしきい値を超えない。したがって、バンド１５０３での矩形１５０４の文字判定は「文字でない」となる。そして矩形情報（pre_del,series,remain）は（ON,ON,ON）となる。
【００９１】
図１６（ｃ）は３番目のバンド１５０５を処理するときの様子である。バンド１５０５のバンド処理の段階では、１５０６のような矩形が抽出されている。そしてその矩形情報（pre_del,series,remain）はバンド１５０３に対するバンド処理の結果から（ON,ON,ON）の状態である。さて、矩形１５０６のバンド１５０５内のエッジ量を示すmax_edgenumはイラスト部分であるため非常に小さく、文字判定のしきい値を超えない。したがって、その１５０３のバンドでの矩形１５０４の文字判定は「文字でない」となる。ここで、文字判定が文字でなく、Pre_delがＯＮ、seriesがＯＮ、remainがＯＮの場合は、endyを早めて閉じる処理をする。現時点で矩形情報に保管されているendyはバンド１５０５の最終ラインであるが、バンド処理の段階で、「文字判定が文字でなく、Pre_delがＯＮ、seriesがＯＮ、remainがＯＮの場合」は、２つ前のバンドの最終ラインまでendyを早める。そしてその矩形を閉じて、フィックスする。
【００９２】
図１６（ｄ）は最終的に得られた文字矩形１５０７の様子を示している。なお、矩形１５０６が更に次のバンドに続く場合は、次のバンドにおける結合処理により新たな矩形が誕生することになる。
【００９３】
次にバンドメモリコントローラ１１１の保持する情報mem_no_for_band[]とregion_in_band[]の作成の仕方を説明する。mem_no_or_band[]には処理中のバンドｍのメモリＮＯおよび、処理中のバンドの次のバンドｍ＋１のメモリＮＯを決める。たとえば、一番最初（０番目）のバンドを処理する前に、mem_no_for_band[0]＝０，mem_no_for_band[1]＝１と代入しておく。
【００９４】
一方、region_in_band[mem_no_for_band[m]]は、初期値を０として、
（１）エッジ検出回路で新エッジが一つ検出される毎に、処理中のバンドｍの矩形数をインクリメントする。これは、ステップＳ３１６でedgenum(count)がインクリメントされる毎に、region_in_band[mem_no_for_band[m]]をインクリメントすれば良い。
（２）結合処理回路でバンド処理のときに有効な矩形情報（validがＯＮの矩形情報）が１つにつき処理中のバンドの次のバンドｍ＋１の矩形数をインクリメントする（region_in_band[mem_no_for_band[m+1]]をインクリメントする）。
（３）結合処理回路で結合される時、Startyが小さい矩形が存在するバンドのregion_in_band[]をデクリメント。
【００９５】
図１７は結合処理による矩形数の変化を説明する図である。結合処理によって矩形数が変化するのが理解されよう。なお、例えば、図１５（ａ）〜（ｄ）へと処理が進みにつれて、バンド１４０１、１４０３には矩形が存在しなくなる。この場合、バンド１４０１、１４０３の矩形数region_in_band[]がゼロとなった時点で、新たな次のバンドを上書きするように制御する。図１６（ａ）〜（ｄ）においても、バンド１５０３、１５０５の矩形数region_in_band[]はゼロとなり、上書きの対象となる。この結果、文字の存在しないバンドが効率良く除去され、２値メモリのメモリ容量を低減させることになる。
【００９６】
図１７におけるmem_no_for_band[]の変化を説明すれば次のようになる。いま、図１７の上から４番目のバンドの処理（結合処理）を終えた時点で、有効な領域情報の数「４」が、上から５番目のバンドの有効領域数を表すregion_in_band[mem_no_for_band[5]]に書き込まれているとする。続いて、上から５番目のバンドにおけるエッジ検出処理において、領域１６０５、１６０６、１６０７、１６０８が発生すると、順次region_in_band[mem_no_for_band[5]]の値に１が加算され、最終的にregion_in_band[mem_no_for_band[5]]に「８」が書き込まれることになる。
【００９７】
以上のエッジ検出処理を終えて、結合処理を行うと、region_in_band[mem_no_for_band[5]]の内容は次のように変化する。
▲１▼  領域１６０５を領域１６０１に結合する。region_in_band[mem_no_for_band[5]]の内容が８から７へ変化する。
▲２▼  領域１６０６を領域１６０２に結合する。region_in_band[mem_no_for_band[5]]の内容が７から６へ変化する。
▲３▼  領域１６０７を▲２▼でできた領域に結合する。region_in_band[mem_no_for_band[5]]の内容が６から５へ変化する。
▲４▼  領域１６０８を領域１６０３に結合する。region_in_band[mem_no_for_band[5]]の内容が５から４へ変化する。
▲５▼  ▲４▼で更新された領域１６０８に領域１６０１を結合する。region_in_band[mem_no_for_band[5]]の内容が４から３へ変化する。
【００９８】
図１８はバンドメモリコントローラ１１１の処理手順を説明するフローチャートである。同図において、ステップＳ８１１では、処理すべきバンド番号を表す変数ｍにゼロを代入する。ステップＳ８１２では、mem_no_for_band[0]に０を、mem_no_for_band[1]に１を代入する。即ち、画像データの最初の２つのバンドは、まず、メモリ空間中の第０番目と第１番目のバンドに格納されることになる。
【００９９】
ステップＳ８１３では、画像データのｍ番目のバンドの２値化データを、mem_no_for_band[m]番目のバンドへ書き込み始めるべく２値メモリ１０７のアドレスを制御する。続いて、ステップＳ８１４では、領域情報に基づいて、既に２値メモリに格納されたバンドの矩形数、すなわちregion_in_band［mem_no_for_band[0]]〜region_in_band［mem_no_for_band[m-1]]に格納されている矩形数を更新する。ここで、上述の結合処理、バンド処理による処理結果が反映されることになる。
【０１００】
ステップＳ８１５では、region_in_band［mem_no_for_band[0]]〜region_in_band［mem_no_for_band[m-1]]の中に、０のものがあるかどうか、すなわち矩形の存在しないバンドが存在するかどうかを判定する。矩形の存在しないバンドが存在し、そのバンドがメモリ空間の第ｋ番目のバンドであれば、ステップＳ８１６でmem_no_for_band[m+2]にｋをセットする。一方、矩形の存在しないバンドがなければ、mem_no_for_band[m+2]に未使用のバンドの番号をセットする。
【０１０１】
ステップＳ８１８では、変数ｍをインクリメントし、画像データの次のバンドの処理へと移る（ステップＳ８１９を介してステップＳ８１３へ戻る）。ここで、画像データの全てのバンドについて処理を終えたならば本処理を終了する（ステップＳ８１９）。
【０１０２】
以上の処理を行うことにより、良好な文字抽出をバッファを必要とせずに行うことができる。以上のようにして１ページ分のデータについて文字領域の抽出を終えると、原稿方向を判定するための文字認識処理を開始する。文字認識処理においては、領域情報記憶部１０４に格納された領域情報を用いて２値メモリをアクセスして文字領域画像を獲得する。この際、２値メモリにはイメージデータがバンド単位で格納されるが、その順序はmem_no_for_band[]によって管理される。従って、ＣＰＵ１０８はバンドメモリコントローラ１１１に対して必要な領域を通知し、バンドメモリコントローラ１１１は２値メモリ１０７の対応する領域のデータをＣＰＵ１０８に返すよう制御する。
【０１０３】
以上説明したエッジ検出処理１０２を例えば入力された行の４ライン毎に行い、結合処理回路１０５によるエッジ座標記憶部１０３と領域情報記憶部１０４の結合処理は残りの３ラインで行うことによって、行単位で入力画素を止めることなく、リアルタイムでの処理が可能となる。なお、３ラインで間に合わない場合は領域情報記憶部をダブルで所有することによって４ライン分の時間を確保することが出来る。また、４という数字は一例であり、５でも、６でも８でも１６でも構わない。
【０１０４】
以上の文字抽出を方向認識に利用する場合のタイムチャートを図１９に示す。図１９において、８０１はスキャナ（ＣＣＤ）からの画像の入力であり、８０２はスキャナから入力された多値画像の二値化処理を示す。８０３は上述した文字抽出部１Ａによる文字抽出処理であり、スキャナからの入力に同期してリアルタイムで文字抽出を行なう。８０４はＯＣＲ処理であり、文字抽出処理８０３により抽出された文字領域について４方向でＯＣＲ処理を行い、文書の方向、および縦書きか、横書きかなどを識別する。ＯＣＲ処理８０４ではタイマを利用して、時間内の判定をめざし、判定が出来なかったときはＵＮＫＮＯＷＮとして自信度０を返す。
【０１０５】
図２０は、一般的な文字方向判別処理のタイミングを説明する図である。ＣＣＤによる原稿の読取と２値化処理はリアルタイムで進行するが、文字領域の抽出及びＯＣＲによる方向判定は、１ページ分の画像を読み取った後でなければ開始できない。
【０１０６】
これに対して、第１の実施形態によれば、図１９で説明したように、ＣＣＤによる読み取りを停止させず、リアルタイムで方向認識が可能となる。また、ＯＣＲ処理でタイマを使用しない場合は時間オーバーが考えられるが、それでも図２０の場合と比較して高速な方向判別処理が可能となる。
【０１０７】
なお、図１９の例では２値メモリ１０７がダブルで必要になるが、ダブルで持たない構成としては図２１のようなタイミングで処理を行なえばよい。すなわち、文字抽出処理９０３によって文字が抽出されたら即座にＯＣＲ処理を開始する。その場合、多少ＣＣＤを停止させなければいけない可能性がある。ただし、図１９と同様にタイマによって制限時間を設け、制限時間内に方向が判別できなかった場合はＵＮＫＮＯＷＮを返すようにすればＣＣＤを停止する必要はなくなる。なお、２ページ目の例が示すように、次のページの開始までに方向が判別できる可能性もある。
【０１０８】
なお、上記の実施形態ではラスター画像の横方向だけを見て高周波領域を検出したがその限りでなく、２次元的に高周波領域を抽出してもよい。その際、図４のフローチャートで示したような画素最大値と画素最小値の差でエッジを判定する場合、最大値と最小値を画像横画素数／SAMPLE_PIXEL（横）分保持するレジスタが必要となる。２次元的に見ることによって、従来抽出することが困難であった「ー」や「二」などの横方向に高周波成分を持たない文字も検出可能となる。
【０１０９】
また、エッジ検出回路でなにも検出されなかった行や、抽出された領域がｆｉｘ処理で削除となり、ほかに領域がない場合など、２値メモリ１０７のアドレスをインクリメントせずに（バンド単位のインクリメントを行わずに）前行に上書きすることによって２値メモリ１０７の容量を更に倹約することが出来、コストの削減が可能となる。なお、ｆｉｘ処理では、最終的に抽出された領域を、領域の大きさを基準に破棄する処理を行う。
【０１１０】
さらに、方向を判別することが目的の場合、方向判別を行なえるだけの文字領域が抽出できれば良い。従って、抽出量をモニタし、抽出量が所定値に達した時点で２値化データの保持を終了させるようにしてもよい。このようにすれば、さらにメモリを小さくすることが可能となる。
【０１１１】
また、上記の実施形態ではエッジ検出に最大値最小値の差を利用したがその限りでなく、たとえば、周波数変換を行い、高周波部を検出してもよい。更に、上記実施形態において、エッジ検出数が所定数以上の領域を文字領域として検出したが、エッジ検出数が所定数以下の領域を写真領域として検出するように構成してもよい。
【０１１２】
以上説明したように上記実施形態によれば、画像の２値化結果を待つことなく、多値画像からリアルタイムで文字領域の抽出処理が行なえるので、ＣＣＤの駆動を止めることなくリアルタイムな処理が可能となる。
【０１１３】
また、高周波検出処理を所定ライン数毎に行うことによりページ単位でなく、行単位でもＣＣＤを停止させずにリアルタイムで文字抽出することが可能となる。
【０１１４】
さらに、コストを抑えたい場合は、多値画像からバッファを必要とせずに入力画素から順番にリアルタイムで文字抽出を行うことが可能なので、文字が存在しなかった領域（バンド）は、メモリのアドレスをインクリメントしない（バンド単位のメモリアドレスのインクリメントを行わない）ことにより前のバンドに上書きすることができ、メモリの節約ができる。この結果、メモリを１ページ全面分持つ必要がなくなりコスト削減が可能となる。
【０１１５】
なお、本発明は、複数の機器（例えばホストコンピュータ，インタフェイス機器，リーダ，プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機，ファクシミリ装置など）に適用してもよい。
【０１１６】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成されることは言うまでもない。
【０１１７】
この場合、記憶媒体から読出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０１１８】
プログラムコードを供給するための記憶媒体としては、例えば、フロッピディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，磁気テープ，不揮発性のメモリカード，ＲＯＭなどを用いることができる。
【０１１９】
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１２０】
さらに、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１２１】
【発明の効果】
以上説明したように本発明によれば、特定の画像領域を抽出するのに全ての画像信号がメモリに格納されるのを待つことなく、しかも、不要な画像領域をメモリに格納せずに少量のメモリで高速に画像信号から必要な領域を抽出することができる。
【０１２２】
【図面の簡単な説明】
【図１】本実施形態によるディジタル複写機の構成を表すブロック図である。
【図２】本実施形態による方向判定部１００の構成を示すブロック図である。
【図３】しきい値決定回路１０１による処理手順の一例を示すフローチャートである。
【図４】エッジ検出回路１０２の処理手順を説明するフローチャートである。
【図５】エッジ検出回路１０２の処理手順を説明するフローチャートである。
【図６】エッジ検出回路１０２の処理手順を説明するフローチャートである。
【図７】エッジ検出処理におけるオーバーラップ例を説明する図である。
【図８】  SAMPLE_PIXEL＝８、space_limit＝２の場合のエッジ座標検出処理の結果例を説明する図である。
【図９】結合処理回路１０６の処理手順の一例を示すフローチャートである。
【図１０】結合処理を説明する図である。
【図１１】バンド処理の概要を説明する図である。
【図１２】画像のバンドとメモリのバンドに関る情報を説明する図である。
【図１３】領域情報記憶部１０４に記憶される領域情報の一例を示す図である。
【図１４】バンド処理の手順を説明するフローチャートである。
【図１５】バンド処理の一例を説明する図である。
【図１６】バンド処理の一例を説明する図である。
【図１７】結合処理によるバンド毎の矩形数の変化を説明する図である。
【図１８】バンドメモリコントローラ１１１の処理手順を説明するフローチャートである。
【図１９】文字抽出を方向認識に利用する場合のタイムチャートを示す図である。
【図２０】一般的な文字方向判別処理のタイミングを説明する図である。
【図２１】２値メモリをダブルで設けずに、文字抽出を方向認識に利用する場合のタイムチャートを示す図である。
【図１】
0003884845.tif 000002
【図２】
0003884845.tif 000003
【図３】
0003884845.tif 000004
【図４】
0003884845.tif 000005
【図５】
0003884845.tif 000006
【図６】
0003884845.tif 000007
【図７】
0003884845.tif 000008
【図８】
0003884845.tif 000009
【図９】
0003884845.tif 000010
【図１０】
0003884845.tif 000011
【図１１】
0003884845.tif 000012
【図１２】
0003884845.tif 000013
【図１３】
0003884845.tif 000014
【図１４】
0003884845.tif 000015
【図１５】
0003884845.tif 000016
【図１６】
0003884845.tif 000017
【図１７】
0003884845.tif 000018
【図１８】
0003884845.tif 000019
【図１９】
0003884845.tif 000020
【図２０】
0003884845.tif 000021
【図２１】
0003884845.tif 000022