(57)【特許請求の範囲】
【請求項１】
入力された原稿画像中の文字の種別を判定し下位の処理に渡す画像処理装置であって、
入力された原稿画像中の文字画像を含む文字行の領域を判別する判別手段と、
判別された文字行領域を、当該文字行の方向と垂直な方向に並んだ４つの領域に分割する分割手段と、
前記分割手段で分割された各領域中の有意なドットを計数する計数手段と、
前記計数手段で計数された各領域の有意なドット数を上の領域から順にＢ１，Ｂ２，Ｂ３，Ｂ４とした場合、（Ｂ２＋Ｂ３）と（Ｂ１＋Ｂ４）との比に基づいて第１ドット分布Ｒ１を算出し、（Ｂ３＋Ｂ４）と（Ｂ１＋Ｂ２）との比に基づいて第２ドット分布Ｒ２を算出する算出手段と、
前記算出された第１ドット分布Ｒ１が第１の閾値Ｔ１以上であるか或いは前記算出された第２ドット分布Ｒ２が第２の閾値Ｔ２以上であると判断された場合は、当該文字行領域をアルファベット文字行であると判定し、
前記第１ドット分布Ｒ１が前記第１の閾値Ｔ１より小さく且つ前記第２ドット分布Ｒ２が前記第２の閾値Ｔ２より小さいと判断された場合は、当該文字行領域を漢字圏文字行であると判定する判定手段と
を備えることを特徴とする画像処理装置。
【請求項２】
前記下位処理は文字認識処理であって、前記判定手段でアルファベット文字行と判定されたのか漢字圏文字行と判定されたのかに応じて、当該文字行領域を文字認識処理するときに使用する認識辞書を選択させることを特徴とする請求項第１項に記載の画像処理装置。
【請求項３】
前記下位処理は文字認識処理であって、前記判定手段でアルファベット文字行と判定されたのか漢字圏文字行と判定されたのかに応じて、当該文字行領域を文字認識処理するときに使用する認識アルゴリズムを選択させることを特徴とする請求項第１項に記載の画像処理装置。
【請求項４】
前記判別手段は、文字行方向に投影したドット分布に基づいて行を判別することを特徴とする請求項第１項に記載の画像処理装置。
【請求項５】
前記判別手段で文字行領域を判別する前に、前記入力された原稿画像中のノイズを除去するノイズ除去処理、前記入力された原稿画像の傾きを補正する傾き補正処理、前記入力された原稿中の文字が正立する方向を決定する処理のうち、少なくともいずれかの処理が行われることを特徴とする請求項第１項に記載の画像処理装置。
【請求項６】
入力された原稿画像中の文字の種別を判定し下位の処理に渡す画像処理方法であって、
入力された原稿画像中の文字画像を含む文字行の領域を判別する判別工程と、
判別された文字行領域を、当該文字行の方向と垂直な方向に並んだ４つの領域に分割する分割工程と、
前記分割工程で分割された各領域中の有意なドットを計数する計数工程と、
前記計数工程で計数された各領域の有意なドット数を上の領域から順にＢ１，Ｂ２，Ｂ３，Ｂ４とした場合、（Ｂ２＋Ｂ３）と（Ｂ１＋Ｂ４）との比に基づいて第１ドット分布Ｒ１を算出し、（Ｂ３＋Ｂ４）と（Ｂ１＋Ｂ２）との比に基づいて第２ドット分布Ｒ２を算出する算出工程と、
前記算出された第１ドット分布Ｒ１が第１の閾値Ｔ１以上であるか或いは前記算出された第２ドット分布Ｒ２が第２の閾値Ｔ２以上であると判断された場合は、当該文字行領域をアルファベット文字行であると判定し、
前記第１ドット分布Ｒ１が前記第１の閾値Ｔ１より小さく且つ前記第２ドット分布Ｒ２が前記第２の閾値Ｔ２より小さいと判断された場合は、当該文字行領域を漢字圏文字行であると判定する判定工程と
を備えることを特徴とする画像処理方法。
【請求項７】
前記下位処理は文字認識処理であって、前記判定工程でアルファベット文字行と判定されたのか漢字圏文字行と判定されたのかに応じて、当該文字行領域を文字認識処理するときに使用する認識辞書を選択させることを特徴とする請求項第６項に記載の画像処理方法。
【請求項８】
前記下位処理は文字認識処理であって、前記判定工程でアルファベット文字行と判定されたのか漢字圏文字行と判定されたのかに応じて、当該文字行領域を文字認識処理するときに使用する認識アルゴリズムを選択させることを特徴とする請求項第６項に記載の画像処理方法。
【請求項９】
前記判別工程では、文字行方向に投影したドット分布に基づいて行を判別することを特徴とする請求項第６項に記載の画像処理方法。
【請求項１０】
前記判別工程で文字行領域を判別する前に、前記入力された原稿画像中のノイズを除去するノイズ除去処理、前記入力された原稿画像の傾きを補正する傾き補正処理、前記入力された原稿中の文字が正立する方向を決定する処理のうち、少なくともいずれかの処理が行われることを特徴とする請求項第６項に記載の画像処理方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は画像処理装置及び方法、詳しくは入力された原稿画像中の文字種を判定し下位の処理に渡す画像処理装置及び方法に関するものである。
【０００２】
【従来の技術】
情報が溢れる現代社会において情報管理、検索が容易になる情報の電子化が早急に望まれている。情報の電子化には、スキャナなどの入力装置で読み取った画像である文字を文字コードに変換するＯＣＲ（光学的文字認識）が必須であり、その精度はどんどん向上してきている。
【０００３】
ＯＣＲは日本語（漢字、ひらがな、カタカナ）と英語その他（アルファベット）の特性の違いのため、アルファベット（特に小文字）を日本語ＯＣＲで認識するのは困難であることから、それぞれ別の認識アルゴリズムを用いたり、アルゴリズムは同じでも辞書の切り替えを行ったりする。従って、アルファベットと日本語を判別するための技術が必要になる。
【０００４】
従来、アルファベットと日本語を判別する方法はなかったため、ユーザがオペレーションパネルやキーボード或いはポインティングデバイス等を操作して、それらを区別するための指示を行っていた。
【０００５】
【発明が解決しようとする課題】
しかしながら、これではユーザの手間が多大であるし、さらに以下のような問題点がある。
【０００６】
複数枚のデータを読み込む際、ＡＤＦ（オートドキュメントフィーダ）がユーザに原稿指し替え作業を削減するが、その複数ページ中に英語のドキュメント、日本語のドキュメントが入り混じっている可能性がある。一枚読み込む毎にユーザの指示を待っていたのでは、ＡＤＦの利点が台無しになってしまう。また、全ページ読み込んだ後にユーザの指示を受ける形式にするには大量のメモリが必要になる。
【０００７】
【課題を解決するための手段】
及び
【作用】
本発明はかかる問題点に鑑みなされたものであり、入力された原稿画像中の文字種を効率良く判定することで、下位の処理、例えば文字認識処理における処理精度を上げることを可能にする画像処理装置及び方法を提供しようとするものである。
【０００８】
この課題を解決するため、例えば本発明の画像処理装置は以下の構成を備える。すなわち、
入力された原稿画像中の文字の種別を判定し下位の処理に渡す画像処理装置であって、
入力された原稿画像中の文字画像を含む文字行の領域を判別する判別手段と、
判別された文字行領域を、当該文字行の方向と垂直な方向に並んだ４つの領域に分割する分割手段と、
前記分割手段で分割された各領域中の有意なドットを計数する計数手段と、
前記計数手段で計数された各領域の有意なドット数を上の領域から順にＢ１，Ｂ２，Ｂ３，Ｂ４とした場合、（Ｂ２＋Ｂ３）と（Ｂ１＋Ｂ４）との比に基づいて第１ドット分布Ｒ１を算出し、（Ｂ３＋Ｂ４）と（Ｂ１＋Ｂ２）との比に基づいて第２ドット分布Ｒ２を算出する算出手段と、
前記算出された第１ドット分布Ｒ１が第１の閾値Ｔ１以上であるか或いは前記算出された第２ドット分布Ｒ２が第２の閾値Ｔ２以上であると判断された場合は、当該文字行領域をアルファベット文字行であると判定し、
前記第１ドット分布Ｒ１が前記第１の閾値Ｔ１より小さく且つ前記第２ドット分布Ｒ２が前記第２の閾値Ｔ２より小さいと判断された場合は、当該文字行領域を漢字圏文字行であると判定する判定手段とを備える。
【０００９】
また、本発明の好適な実施態様に従えば、前記下位処理は文字認識処理であって、前記判定手段で判定された結果に応じて認識処理するときに使用する認識アルゴリズム、又は、認識アルゴリズムと認識辞書、或いは認識辞書を選択させることが望ましい。これによって、認識処理で使用される認識アルゴリズム又は認識辞書を予め選択できるので認識速度及び認識の精度を高めることが可能になる。
【００１１】
また、前記判別手段は、文字列パターンの並び方向に投影したドット分布に基づいて行を判別することが望ましい。これによって、精度良く行を判別することが可能になる。
【００１２】
また、更に、前記入力された原稿画像中のノイズ除去するノイズ除去手段を備えることが望ましい。この結果、ノイズによる影響をなくすことができるので、行の判別をより精度良く行なえる。
【００１３】
また、更に、前記入力された画像を所定角度だけ回転させて、正立画像としての方向を決定する手段を備えることが望ましい。これによって、原稿画像の入力方向に応じて判定することが可能になる。
【００１４】
また、更に、前記入力された画像が傾いているときに、傾きを補正する手段を備えることが望ましい。これによって、傾いて入力された原稿画像もより精度良く処理できる。
【００１５】
【実施例】
以下、添付図面に従って本発明に係る実施例を詳細に説明する。
【００１６】
実施例における文字認識装置のブロック構成を図１２に示す。図中、１は装置全体の制御を司るＣＰＵ、２はブートプログラム等を記憶しているＲＯＭ、３はＣＰＵ１が実行処理するプログラムやオペレーティングシステム（ＯＳ）を記憶するＲＡＭである。４は例えばハードディスク装置等の外部記憶装置であって、ここにＯＳ、文字認識処理に係るプログラム、更には認識辞書（日本語文字用と英語文字用）が格納されている。５はキーボードやポインティングデバイス等で構成される入力装置、６は原稿画像を読み取るイメージスキャナである。７は読み取った画像を一時的に記憶する画像メモリ、８は各種メッセージや認識された情報を表示する表示装置である。
【００１７】
上記の構成における実施例の処理を説明する前に、まず、日本語と英語の文字列について考察する。
【００１８】
日本語における文字は、概して、その文字高さ一杯に書かれているのに対して、英語ではｌやｙなどが存在するため高さを数等分した真ん中の部分にその線分（すなわちドット）が集中する。そのため、この集中の度合でもって、認識対象の文字列が日本語であるのか英語であるのかを判別できる。
【００１９】
日本語と英語の一例を図７に示す。図７（ａ）は日本語の一例であり、同図（ｂ）が英語の一例であるが、英語（ｂ）が４等分した場合の領域（２）（３）に黒画素が集中しているのに対して、同図（ａ）の如く日本語では比較的全体的に分布している。同図（ｃ）はｙのような下に出っ張る文字が存在しない場合の英語である。この場合は領域（３）（４）に黒画素が集中する。
【００２０】
以上の原理に基づいて、第１の実施例の動作処理を図１のフローチャートに従って説明する。尚、同フローチャートに基づくプログラムは外部記憶装置４に格納されていて、それをＲＡＭ３上にロードすることで実行する。
【００２１】
本実施例では、１行を小領域に分ける時のその分割数ｎを４とし、その黒画素分布の比の計算を黒画素分布Ｒ１、Ｒ２を以下のようにして決定する。
【００２２】
Ｒ１＝（Ｂ２＋Ｂ３）／（Ｂ１＋Ｂ４）
Ｒ２＝（Ｂ３＋Ｂ４）／（Ｂ１＋Ｂ２）
尚、Ｂ１〜Ｂ４は、それぞれの領域における黒画素数を示している。従って、黒画素分布Ｒ１は領域（２）、（３）が領域（１）、（４）に対してどの程度の黒画素を有しているのかを示す値を、Ｒ２は領域（３）、（４）が領域（１）、（２）に対してどの程度の黒画素を有しているのかを示す値を意味することになる。尚、特定の領域が占める黒画素の多さを算出するものとしては、上記に限定されるものではなく、それ以外の尺度でもって算出しても良いのは勿論である。さて、スキャナなどの画像入力装置により入力されたビットマップ画像は、ステップＳ１０１でブロック分けが行われる。
【００２３】
１画素１ビットの２値ビットマップ画像の一例を図２（ａ）に示す。本実施例では単純２値化された２値画像が好ましい。そのビットマップ画像を図２（ｂ）の形にするのが、ステップＳ１０１の領域分離処理である。
【００２４】
領域分離処理の一例のフローチャートを図３に示す。ステップＳ３０１でビットマップ画像にｍ×ｍ画素サイズのウインドウを定義し、このウインドウ内に所定数（実施例では“１”とした）の黒画素があったら、該当するウインドウを黒とし、解像度を大幅に減らし文字部分を連結させる。ステップＳ３０１の解像度変換した様子を図４に示す。次にステップＳ３０２で輪郭線追跡をすると、文字特有の細長いパターンとその他の図形を区別することができる。最後のステップＳ３０３では、同一グループ連結処理で、隣接するテキスト部を結合させることによって図２（ｂ）のように領域分離することができる。
【００２５】
実施例においては、各ブロックを定義するために、ブロック定義用のデータ構造体を決めた。図５（ａ）がその構造体であり、ブロックの種別を定義する要素“type”（short 型）、ブロックの左上隅位置ｘ座標及びｙ座標を定義する要素“startx”,“starty”（各々をshort  型）、ブロックの幅と高さを定義する要素“width”,“height”（各々short型）、そして、次のブロックのアドレスを記憶するための要素“next_address”で構成される。
【００２６】
ここで、要素“type”は、０〜２のいずれかの数値が割り当てられ、“０”が該当するブロックは“タイトル”であることを、“１”は“テキスト”、“２”は“その他（図形や写真等）”であることを示す。
【００２７】
尚、各ブロックの種別を判定する手法であるが、実施例では図４に示すように解像度を下げて処理した場合（このとき文字パターンどうしは互いに連結されてしまい一塊の黒画素領域になる）、その領域の輪郭を追跡していって、細長い連なりかどうかを判定し、細長い（縦横比が所定条件を満たしている）とき該当する領域は文字列領域であると判定する。ここで、文字列には、タイトル（見出し）と本文のテキストの二種類に分けられるが、前者（タイトル）は一般にその文字サイズが大きい。そこで、文字領域であると判定された細長い黒画素領域の長手方向にほぼ直角な断面の長さが所定以上のとき、タイトルとして判定するようにした。また、一般にタイトルは、本文の上方にある場合が多いので、その存在位置に従ってタイトルかテキストかを判断するようにしても良い。但し、ブロックの判定そのものは本発明の主要な部分ではないので、これ以上の説明は省略する。
【００２８】
図５（ｂ）は、上記の構造体で表されるデータの例を示している。各ブロックの要素next_addressには、次のブロックのアドレスが格納され、最後はＮＵＬＬを代入しておくことでそれ以降のデータは存在しないことを明示させておく。
【００２９】
図１の説明に戻る。ステップＳ１０１でブロックデータが抽出されると、処理はステップＳ１０２に進み、未処理のブロックがなくなるまで（構造体のnext_addressがＮＵＬＬになるまで）ループする。もし、未処理のブロックがなくなったら本処理を終了するが、未処理のブロックがあるならばステップＳ１０３に移る。
【００３０】
ステップＳ１０３では現在処理しようとするブロックが文字を含んでいれば（要素ｔｙｐｅが０又は１）、ステップＳ１０４に進み、含んでいなければ１０２に戻る。
【００３１】
ステップＳ１０４ではブロック内のデータをＹ軸に斜影を行い文字の存在するＹ軸（行）抽出を行う。Ｙ軸への斜影を例として図２（ｂ）のテキスト２に対して行うと図６に示すようになる。Ｙ軸への斜影をもっと具体的に説明するために図９にフローチャートを示す。
【００３２】
尚、以下の説明に先立ち、変数ｌｉｎｅ＿ｈ［］、ｌｉｎｅ＿ｓｙ［］は共にＲＡＭに確保された配列変数であり、ｌｉｎｅ＿ｈ［］は１行分の文字列の高さ情報を格納し、ｌｉｎｅ＿ｓｙ［］は各行の左上隅の、注目ブロックの左上隅座標からの相対的なｙ座標を記憶する。また、変数ｉはブロック内における相対的なｘ座標を、変数ｊは同ｙ座標を示す。また、ｆｌａｇは、１行分の切り出し処理を行っている最中か否かを示す変数ものであり、ｋｕｒｏは着目している１ドットライン中に黒画素があるか否かの情報を記憶する変数である。また、ｎｌｉｎｅは、注目ブロック中に何行分の文字列行があるかをカウントする変数である。
【００３３】
さて、ステップＳ９０１においては、変数ｎｌｉｎｅ、ｆｌａｇ，ｊをそれぞれ“０”クリアする。そして、ステップＳ９０２で変数ｉ，ステップＳ９０３で変数ｋｕｒｏをそれぞれ“０”クリアする。
【００３４】
次いで、ステップＳ９０４に進んで、変数ｊが注目ブロックの高さ（注目ブロックがｋ番目である場合には、ＢＬＫ［Ｋ］．ｈｅｉｇｈｔで得られる）を越えたか否かを判断する。もし、超えていれば、注目ブロック内の全てのラインに対しての処理が完了したことになるから、本処理を終える。
【００３５】
従って、ここでは変数ｊの値が注目ブロックの高さに満たないとして、説明を続ける。
【００３６】
この場合、処理はステップＳ９０５に進み、画像メモリ７に格納された画像データのｘ座標がｓｔａｒｔｘ＋ｉ，ｙ座標がｓｔａｒｔｙ＋ｊの位置の画素データを読み出し、それが黒画素かどうかを判断する。ここで、ｓｔａｒｔｘ、ｓｔａｒｔｙは注目ブロックの構造体の要素名であることは理解できよう。
【００３７】
さて、変数ｉ，ｊで示される位置の画素が黒画素でないと判断した場合には、ステップＳ９０６に進み、その時の変数ｉと注目ブロックの横幅ｗｉｄｔｈを比較する。この結果、ｉ＜ｗｉｄｔｈであると判断した場合には、ステップＳ９０７に進んで、変数ｉを“１”だけインクリメントする。
【００３８】
こうして、注目ブロックの第ｊラインにおいて、変数ｉが順次インクメントさせていって注目画素が黒画素であると判断されると、処理はステップＳ９０８に進み、変数ｋｕｒｏを“１”を代入し、注目ライン（変数ｊで示されるライン）には少なくとも黒画素が存在したことを示すようにする。
【００３９】
この後、処理はステップＳ９０９に進み、ｆｌａｇが“０”であるかどうかを判断する。ｆｌａｇが“０”というのは、直前までのラインは空白部分であって、変数ｊで示されるラインになってはじめて黒画素が発生したことを意味する。従って、この場合には、ステップＳ９１０に進み、文字列パターンの発生を検出したことになるから、その時点での変数ｊを配列変数ｌｉｎｅ＿ｓｙ［ｎｌｉｎｅ］に代入する。文字パターンは複数のドットラインに存在するから、次のラインでステップＳ９１０の処理を行なわないように、ｆｌａｇに“１”を代入させておく。
【００４０】
また、変数ｊで示されるライン中に黒画素の存在を検出した場合には、同ラインにおけるそれより右側に位置する画素の状態を検出することは不要になるのでステップＳ９０７の処理を行わず、注目ラインの処理を終えたものとして、ステップＳ９１２に進む。
【００４１】
ステップＳ９１２では、ｋｕｒｏ＝０、且つ、ｆｌａｇ＝１であるかどうかを判断する。
【００４２】
つまり、黒画素が存在するラインが連続して検出されている最中に、空白ラインが検出されたかどうかを判断する。より分かりやすく説明すると、１行分の文字列パターンの領域が決定したかどうかを判断する。
【００４３】
否の場合には、ステップＳ９１３に進んで、変数ｊを“１”だけインクリメントし、ステップＳ９０２以降の処理を繰り返す。
【００４４】
こうして、１行分の文字列パターンの検出がなされたと判断した場合には、ステップＳ９１４に進んで、配列変数ｌｉｎｅ＿ｈ［ｎｌｉｎｅ］に、そのときの変数ｊからｌｉｎｅ＿ｓｙ［ｎｌｉｎｅ］を引いた値をセットする。先に説明したように、ｌｉｎｅ＿ｓｙ［ｎｌｉｎｅ］には文字列パターンの左上隅のｙ座標が格納されているから、ｌｉｎｅ＿ｈ［ｎｌｉｎｅ］には黒画素が連続するラインの本数、すなわち、文字列パターンの高さ情報が格納されることになる。
【００４５】
次いで、ステップＳ９１５で、次の文字列パターン（文字列行）の検出に備えて変数ｆｌａｇを“０”クリアし、ｎｌｉｎｅを“１”だけインクリメントする。
【００４６】
以上の結果、最終的に変数ｊが注目ブロックの高さｈｅｉｇｈｔを越えることになり、その時点で本処理を終了する。このとき、ｎｌｉｎｅは注目ブロックにおいて検出された文字列行数が格納され、ｌｉｎｅ＿ｓｙ［０］〜ｌｉｎｅ＿ｓｙ［ｎｌｉｎｅ］には各文字列パターンの左上隅のｙ座標値が、ｌｉｎｅ＿ｈ［０］〜ｌｉｎｅ［ｎｌｉｎｅ］には各文字列パターンの高さ情報が格納されることになる。
【００４７】
以上の図９の処理により各ブロックの文字画像から行数、各行のスタート点および高さを抽出することができる。
【００４８】
図１の説明に戻る。ステップＳ１０５では抽出された行データの処理のためにループを回す。全ての行の処理が終わっていない場合にはステップＳ１０２に戻り、それ以外はステップＳ１０６に進む。
【００４９】
ステップＳ１０６では図１１のように、ステップＳ１０４で抽出された行をラスタ順次に見て、領域（１）内の黒画素数を数えＢ１を得、続いて領域（２）内の黒画素数を数えＢ２を得、領域（３）内の黒画素数を数えＢ３を得、最後に領域（４）内の黒画素数を数えＢ４を得る（領域１から４の定義は図７参照）。
【００５０】
ここで各領域は、先に説明したように、行の高さ情報ｌｉｎｅ＿ｈ［］で示される高さを４分割した領域を意味する。
【００５１】
その処理の一例のフローチャートを図１０に示す。図７に示すようにステップＳ１０４の行抽出処理で抽出された行画像の左上を座標（０，０）とし、行画像の幅をＷ、画素高さをＨとする。従って右下の座標は（Ｗ−１，Ｈ−１）となる。尚、以下の示す各変数もＲＡＭ３に確保されているものである。
【００５２】
ステップＳ１００１で黒画素カウンタｃｏｕｎｔｅｒ（０）〜ｃｏｕｎｔｅｒ（３）を“０”クリアする。ここでｃｏｕｎｔｅｒ[0]がＢ１を、ｃｏｕｎｔｅｒ[1]がＢ２を、ｃｏｕｎｔｅｒ[2]がＢ３を、ｃｏｕｎｔｅｒ[3]がＢ４をそれぞれ係数する変数である。
【００５３】
ステップＳ１００２で、二次元の画像を処理するための縦座標カウンタｊをリセットする。ステップＳ１００３で縦座標カウンタｊが行画像高さＨを超えていないかどうかチェックし、超えていたらｅｎｄに進み本処理を終える。また、超えていなかったらステップＳ１００４に進む。
【００５４】
ステップＳ１００４で二次元の画像を処理するための横座標カウンタｉをリセットする。ステップＳ１００５で横座標カウンタｉが行画像幅Ｗを超えていないかどうかチェックし、超えていたらステップＳ１００９に進み、超えていなかったらステップＳ１００６に進む。ステップＳ１００６でｐｉｘｅｌ[i][j]が黒かどうかチェックし、黒ならばステップＳ１００７に進み、白ならばステップＳ１００８に進む。
【００５５】
ステップＳ１００７ではｐｉｘｅｌ[i][j]が黒ということでｃｏｕｎｔｅｒ[j/4]をインクリメントする。
【００５６】
但し、“ｊ／４”は整数部分のみを有効する。従って、ｊ／４は０、１、２、３の４つの値のいずれかであり、それでもって、ｃｏｕｎｔｅｒ［０］〜［３］のいずれか１つがインクリメントする。
【００５７】
つまり、小領域（１）中の黒画素はｃｏｕｎｔｅｒ[0]に加算され、小領域２中の黒画素はｃｏｕｎｔｅｒ[1]に加算され、小領域３中の黒画素はｃｏｕｎｔｅｒ[2]に加算され、小領域４中の黒画素はｃｏｕｎｔｅｒ[3]に加算されていく。
【００５８】
ステップＳ１００８では、横座標カウンタｉをインクリメントし、ステップＳ１００５に戻る。ステップＳ１００９で縦座標カウンタｊをインクリメントし、ステップＳ１００３に戻る。
【００５９】
以上の処理の結果、Ｂ１＝ｃｏｕｎｔｅｒ[0]，Ｂ２＝ｃｏｕｎｔｅｒ[1]，Ｂ３＝ｃｏｕｎｔｅｒ[2]，Ｂ４＝ｃｏｕｎｔｅｒ[3]として各小領域中の黒画素がカウントされる。
【００６０】
図１の説明に戻る。ステップＳ１０７では、（Ｂ２＋Ｂ３）／（Ｂ１＋Ｂ４）が予め設定されている閾値Ｔ１以上であるか否か、或いは、（Ｂ３＋Ｂ４）／（Ｂ１＋Ｂ２）が予め設定されている閾値Ｔ２以上であるかを判定する。これらいずれかのを判定が肯定されれば、注目ブロックの注目行は英文字列と判断されるので、ステップＳ１０８で、その行に対しての属性を“英語”にする。また、いずれの判定も否定された場合には、注目行は日本語であると判定されるので、その旨の属性を与える。
【００６１】
以上説明したように本実施例によれば、行単位に英語か日本語かを判断できるので、後の文字認識処理においては、適正な認識辞書が選択させることが可能となり、認識率を向上させることが可能になる。また、場合によっては、認識アルゴリズム自身を切り替えるようにしても良い。
【００６２】
＜第２の実施例の説明＞
上記第１の実施例においてアルファベット／日本語判別を文字画像の１行毎に行ったがその限りではない。
【００６３】
例えば、文字画像の１行目を抽出し、その１行目の黒画素分布を算出しアルファベット日本語判別を行ったらその結果をその画像全体の判別結果としてもよい。
【００６４】
または文字画像をＹ軸への斜影により行切りを行ない、Ｘ軸への斜影により文字切りを行ったあと、任意にｍ文字分選びだし、ｍ文字の黒目分布の平均を算出しその文字画像全体のアルファベット日本語判別を行う方法もある。
【００６５】
これらの方法により、計算時間の短縮が計れる。
【００６６】
また、上述の第１の実施例において行抽出手段は文字画像に対するＹ軸への斜影としたが、その限りではなく、例えば、図１におけるステップＳ１０１の領域分離により行っても良い。具体的には図３のステップＳ３０１の解像度変換、ステップＳ３０２の輪郭線追跡を行った後、輪郭線追跡により抽出されたオブジェクトのうち細長いものを文字と判定するが、ステップＳ３０３の同一グループ結合を行わずに、行として領域分離をする。この処理により図２（ａ）を実行した結果は図８の様になり、Ｙ軸への斜影は必要なくなる。しかし、解像度変換の影響で抽出された行の精度が低いのでそれを考慮して閾値Ｔの値をチューニングする必要がある。この閾値Ｔは原稿画像にもよるので、入力装置５から適宜調整するようにする。
【００６７】
また、入力した原稿画像中にノイズとして、本来空白部分に１画素だけの孤立画素が存在すると、上記処理は正常に行われない可能性がある。そこで、孤立画素については、それを判別し、それを除去する処理を設ける処理が望まれる。孤立画素の判定は、黒画素のまわりの所定距離以内に他の黒画素があるかどうかを判断すれば良いだろう。または、画像をウインドリングしパターンマッチングで消去する方法などを用いても良い。
【００６８】
また、第１の実施例では、ステップＳ１０１の領域分離処理を施す画像は１画素１ビットの画像としたがその限りでなく、例えば１画素８ビットの多値画像でもよい。その場合、領域分離は微分フィルタをかけて高周波成分を抽出し、文字部、写真部に分ける方法がある。本アルファベット日本語判別を実施するには上記１画素８ビットの多値画像を一定の閾値で２値化すれば良い。
【００６９】
また、本アルファベット／日本語自動判別法を施す前に、文字画像の傾きを補正することによって、原稿が傾いた画像に対してより良好な結果を得ることができる。傾き補正は例えば抽出した行の傾きを求めて、座標変換することによって実現できるので、その説明は省略する。
【００７０】
また、本アルファベット／日本語自動判別法を施す前に、文字画像の方向を検出することによって、原稿の方向に依存しない結果を得ることができる。文字画像方向の検出は例えば領域分割によって抽出した文字画像を行抽出、文字抽出を実行し、抽出した数画像を０°回転、９０°回転、１８０°回転、２７０°回転を行いＯＣＲを行う。ＯＣＲの確信度が得られるのでそれを利用して文字画像の方向を検出し原画像を行えば良い。
【００７１】
また、各小領域中の黒画素数カウントを行画像を抽出した後に行ったが、その限りでなく、例えば、Ｙ軸方向の斜影を行って行画像を抽出する時に同時にカウントしてもよい。その場合、行画像の高さがまだ未明であるのでその行の黒画素数を保持しておいて高さが判明した後に小領域中の黒画素を加算して求めることができる。
【００７２】
＜第３の実施例の説明＞
上記実施例では、文字列の行を４等分に、その中の黒画素の個数比でもって該当する行が日本語か英語かを判別するものであったが、本第３の実施例では、一般に日本語の文字パターンは単位面積当たりのドット数が英語より多いという点に着目し、文字種を判定する例を説明する。
【００７３】
尚、装置構成は先に説明した第１の実施例と同様であるものとし、ここではその処理内容について説明する。
【００７４】
図１３のフローチャートに従って本第３の実施例における処理手順を説明する。
【００７５】
図１３のフローチャート中、ステップＳ３１０１〜Ｓ３１０５までは、図１のステップＳ１０１〜Ｓ１０５と同じである。すなわち、ブロック化、及び各ブロック内のテキストもしくは見出しの行数の検出にかかる処理は同じであるものとする。
【００７６】
ステップＳ３１０１〜Ｓ３１０５では、原稿画像の入力からブロック分け、そして、着目しているブロックがタイトルもしくはテキストであって、その行の抽出処理を行う。未処理の行が存在すると判断された場合には、ステップＳ３１０６に進む。
【００７７】
ステップＳ３１０６では図１４のように行中の黒画素を見て、文字幅を検出するとともに黒画素数をカウントする。
【００７８】
図１５にステップＳ３１０６の処理内容のフローチャートを示し、以下説明する。
【００７９】
尚、図１４に示すように、ステップＳ３１０４（図９参照）の行抽出処理で抽出された行画像の左上位置を座標（０，０）とし、行画像の画素幅をＩＷ、画素高さをＨとする。従って右下の座標は（ＩＷ−１，Ｈ−１）となる。また、本処理の詳細は以下の説明から明らかになるが、要するに、着目している行の実際に文字列パターンその存在する位置の開始位置（行頭）と、終了位置（行末）の座標及び、それらの間にあるドット数を計数する処理を行うものである。
【００８０】
ステップＳ４００１で、黒画素の開始位置を検出した際に、その位置を記憶保持する変数ｓｔａｒｔｘ（ｘ座標）を更新し、それ以降の処理で当該変数ｓｔａｒｔｘを更新しないように制御する変数ｆｌａｇ＿ｂｌｋを“０”クリアする。そして、ステップＳ４００２では、黒画素数を計数する変数ｃｏｎｔｅｒを“０”クリアする。次いで、ステップＳ４００３では、注目画素位置のｘ座標位置を特定するための変数ｉを“０”クリアする。次の、ステップＳ４００４では、ｆｌａｇ＿ｌｉｎｅ２にｆｌａｇ＿ｌｉｎｅの内容を代入し、次いで、ｆｌａｇ＿ｌｉｎｅを“０”クリアする。尚、最初の段階では、ｆｌａｇ＿ｌｉｎｅには“０”が格納されているものとする。従って、ｆｌａｇ＿ｌｉｎｅ２は、最初の段階では“０”クリアされることになる。
【００８１】
また、ｆｌａｇ＿ｌｉｎｅは現在の変数ｉで示される縦１ドット列に黒画素があったかどうかを示す情報が格納され、ｆｌａｇ＿ｌｉｎｅ２には直前の縦１ドット列に黒画素があったかどうかを示す情報が格納される。従って、黒画素が連続して検出されている最中に、文字パターンが途絶えた場合にはｆｌａｇ＿ｌｉｎｅ２＝１（直前の縦１ドット列に黒画素有り）で、且つ、ｆｌａｇ＿ｌｉｎｅ＝０（注目している縦１ドット列に黒画素無し）の場合であることを判定すれば良い。
【００８２】
さて、ステップＳ４００５では、抽出する画素位置のｙ座標を記憶保持する変数ｊを“０”クリアする。
【００８３】
次いで、ステップＳ４００６で、注目行中の変数ｉ，ｊで示される位置の画素を画像メモリ７から読み出し、それが黒画素がどうかを判定する。白画素であった場合には、ステップＳ４０１２にジャンプし、変数ｊ、すなわち、ｙ座標を１つインクリメントし、ステップＳ４０１３で変数ｊが注目行の高さ以下であると判断されるまで上記ステップＳ４００５以下の処理を繰り返す。
【００８４】
こうして、変数ｊで示される縦１ドット列につき、１つも黒画素が発見できなかった場合、ステップＳ４０１３の判定は“ＮＯ”になるので、ステップＳ４０１４に進み、ｆｌａｇ＿ｌｉｎｅ２が“１”で、且つ、ｆｌａｇ＿ｌｉｎｅが“０”か否かを判断する。すなわち、文字パターンの終端を見つけたか否かを判断する。否の場合には、変数ｉをインクリメントし、次の列位置に備える。そして、ステップＳ４０１７で変数ｉと行幅とを比較し、行幅分の処理が終えていないと判断した場合には、ステップＳ４００４の処理に戻り、上記処理を繰り返す。
【００８５】
さて、この過程で、最初に黒画素が検出されると、ステップＳ４００７でｆｌａｇ＿ｂｌｋが“０”であると判断されるので、処理はステップＳ４００８に進み、そのときの変数ｉの値を変数ｓｔａｒｔｘに代入する。これにより、文字列パターンの最初のドット位置のｘ座標がｓｔａｒｔｘに格納されることになる。
【００８６】
次いで、このｓｔａｒｔｘに代入する処理は、これ以降行なわないようにするため、変数ｆｌａｇ＿ｂｌｋに“１”を代入する。
【００８７】
次いで、黒画素が１つ検出されたことになるから、変数ｃｏｕｎｔｅｒを“１”インクリメントし、且つ、注目縦１ドット列中に黒画素が検出されたわけであるから、ｆｌａｇ＿ｌｉｎｅに“１”を代入し、ステップＳ４０１２に進む。
【００８８】
以上の結果、注目行中の最初の黒画素が検出された場合には変数ｓｔａｒｔｘにそのときのｘ座標値である変数ｉを代入し、後はこの処理は行わない。そして、黒画素が検出される度に変数ｃｏｕｎｔｅｒが“１”ずつインクリメントされることになる。
【００８９】
さて、１つの文字の黒画素を検出していく過程で、その隣の文字パターンとの間に処理は移ると、当然、その間には空白部分があるので、黒画素は検出されなくなる。
【００９０】
このとき、ステップＳ４０１４の判断は、“Ｙｅｓ”になる。つまり、その時の変数ｉの値が注目している文字パターンの終わり位置になるから、その位置を仮の行末位置であるとしてｅｎｄｘにその値を代入する。従って、ｅｎｄｘの内容は、注目行中に含まれる文字数分だけ更新させるが（図１４参照）、最終的に注目行の行末位置にある文字の終わりのｘ座標値がｅｎｄｘに格納されることになる。
【００９１】
以上の結果、注目ブロック内の注目行の行頭文字パターンの開始位置がｓｔａｒｔｘに、行末文字パターンの終わりがｅｎｄｘに格納され、ｃｏｕｎｔｅｒにはその間の黒画素数が格納されることになる。
【００９２】
図１３の説明に戻る。
【００９３】
ステップＳ３１０７で白画素数（ＷＮ）を
ＷＮ＝行高さ（Ｈ）×行幅（Ｗ）−黒画素数（ＢＮ）
により求め、黒画素比Ｒを
Ｒ＝黒画素数（ＢＮ）／白画素数（ＷＮ）
によって求める。
【００９４】
ここで、行の高さは、先の第１の実施例で説明した通りであり、行幅はｅｎｄｘ−ｓｔａｒｔｘで得られる値である。
【００９５】
ステップＳ４１０８であらかじめ決めたあったしきい値ＴよりＲが大きいかどうか（黒画素が多いかどうか）チェックし、Ｒ＞Ｔの時はステップＳ３１０９に進み、Ｒ＜＝Ｔの時はステップＳ３１１０に進む。ステップＳ３１０９ではその文字画像は日本語であると判定し、ステップＳ３１０５に戻る。また、ステップＳ３１１０ではその文字画像はアルファベットであると判定し、ステップＳ３１０５に戻る。
【００９６】
以上説明したように本第３の実施例によれば、文字パターンは日本語の場合、そのドット数が多く、逆に英語の場合にはドット数が少ないという特徴を利用して、各ブロック内の行単位の字種を判別できる。従って、文字認識処理に移る場合には、その認識辞書を予め決めておく、もしくは優先する辞書を決めておくことが可能になり、文字認識率を高めることが可能になる。
【００９７】
＜第４の実施例の説明＞
第３の実施例においてアルファベット日本語判別を文字画像の１行毎に行ったがその限りではない。例えば、文字画像の１行目を抽出し、その１行目の黒画素分布を算出しアルファベット日本語判別を行ったらその結果をその画像全体の判別結果としてもよい。
【００９８】
または文字画像をＸ軸への斜影により行切りを行い、Ｙ軸への斜影により文字切りを行ったあと、任意にｍ文字分選びだし、ｍ文字のＲの平均を算出しその文字画像全体のアルファベット日本語判別を行う方法もある。これらの方法により、計算時間の短縮が計れる。
【００９９】
また、先に説明した第１の実施例と第３の実施例とを組み合わせて字種を判定するようにしても良い。このようにすると、字種判定に関する精度を向上させることが可能になる。
【０１００】
また、文字には様々なフォントや、スタイルがある。そのため、日本語のほうが文字幅の細いフォントで英語のほうが太いフォントだった場合誤判別のおそれが出てくる。そこで、第１の実施例のような処理を行う前に文字の細線処理を行えば、そのような誤判別の危険はなくなる。但し、厳密な細線化処理は、非常に複雑な処理を伴う。しかし、本第３の実施例では、単純に文字の種別を一義的な状態にさせすれば良いので、単純な細線化処理を行なえば良い。
【０１０１】
以下、簡単な細線処理について説明する。
【０１０２】
簡単な細線処理はパターンマッチングによる黒画素消去によって可能である。２画像を例えば３×３画素単位に着目し、あらかじめ決めてある消去パターンとウィンドウ中の画像パターンが一致した場合、その注目画素（ウィンドウ中の中央の画素）を黒から白に強制変換する。その処理を反復して細線処理を行う。消去パターンの一例は例えば図１６の通りである。
【０１０３】
また、第３の実施例において、行抽出手段は文字画像に対するＹ軸への斜影としたが、その限りでなく、例えば、図１３のステップＳ３１０１の領域分離により行ってもいい。
【０１０４】
具体的には、先の第１の実施例と同様に、解像度変換、輪郭線追跡を行った後、輪郭線追跡により抽出されたオブジェクトのうち細長いものを文字と判定するが、同一グループ結合を行わずに、行として領域分離をする。この処理により図２（ａ）を実行した結果は図８の様になり、Ｙ軸への斜影は必要なくなく。しかし、解像度変換の影響で抽出された行の精度が低いのでそれを考慮してしきい値Ｔの値をチューニングしなければならない。
【０１０５】
また、上述の第３の実施例において、本処理を施す１画素１ビットの画像にノイズが存在していては本アルファベット日本語判別の能力を生かせられない。従って明らかにノイズとわかる孤立ドットなどを除去すると良いだろう。孤立ドット除去の方法としては画像をウインドリングしパターンマッチングで消去する方法などがある。
【０１０６】
また、上述の第３の実施例において、図１３のステップＳ３１０１の領域分離処理を施す画像は１画素１ビットの画像としたがその限りでなく例えば１画素８ビットの多値画像でもよい。その場合、領域分離は微分フィルタをかけて高周波成分を抽出し、文字部、写真部に分ける方法がある。本アルファベット日本語判別を実施するには上記１画素８ビットの多値画像を一定しきい値で二値化する必要がある。
【０１０７】
また、本アルファベット日本語自動判別法を施す前に、文字画像の傾きを補正することによって、原稿が傾いた画像に対してより良好な結果を得ることができる。傾き補正は例えば抽出した行の傾きを求めて、座標変換することによって実現できる。
【０１０８】
また、本アルファベット日本語自動判別法を施す前に、文字画像の方向を検出することによって、原稿の方向に依存しない結果を得ることができる。文字画像方向の検出は例えば領域分割によって抽出した文字画像を行抽出、文字抽出を実行し、抽出した数画像を０°回転、９０°回転、１８０°回転、２７０°回転を行いＯＣＲを行う。ＯＣＲの確信度が得られるのでそれを利用して文字画像の方向を検出し原画像を行う。
【０１０９】
以上説明したように本第１〜第４の実施例に従えば、日本語と英語の文字パターンの分布あるいは密度に応じて文字種を判定することが可能になる。従って、文字認識する前処理として認識するときに使用する辞書を予め決める、もしくはその優先順位を決めることが可能になるので、文字認識率を向上させることが可能になる。
【０１１０】
尚、第１〜第４の実施例では、いずれも日本語と英語について説明したが、英語の代わりにドイツ語やフランス語を用いても同様であり、且つ、日本語の代わりに漢字圏（例えば中国語）にしても同様であるので、上記例によって本発明が限定されるものではない。
【０１１１】
また、実施例ではイメージスキャナ６から入力される画像に対して処理を行なったが、画像は例えば通信回線を介して送られてきても良いし、例えば所定の記憶媒体（例えばフロッピーディスク等）に記憶させておいて、そこから画像を読出しても同様に処理できるので、上記実施例によって限定されるものではない。
【０１１２】
更に、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器から成る装置に適用しても良い。また、本発明はシステム或は装置にプログラムを供給することによって達成される場合にも適用できることはいうまでもない。
【０１１３】
【発明の効果】
以上説明したように本発明によれば、入力された原稿画像中の文字種を効率良く判定することで、下位の処理、例えば文字認識処理における処理精度を上げることが可能になる。
【０１１４】
また、本発明の好適な実施態様に従えば、前記下位処理は文字認識処理であって、前記判定手段で判定された結果に応じて認識処理するときに使用する認識アルゴリズム、又は、認識アルゴリズムと認識辞書、或いは認識辞書を選択させるので、認識速度及び認識の精度を高めることが可能になる。
【０１１５】
また、分割された各領域のほぼ中央の領域に対するドットの存在割合を算出し、前記判定手段は、算出された割合が所定以上の場合には、注目行はアルファベット文字であると判定し、所定以下の場合には漢字圏文字であると判定するので、漢字圏の文字とアルファベットの文字を精度良く判定することが可能になる。
【０１１６】
また、文字列パターンの並び方向に投影したドット分布に基づいて行を判別するので、精度良く行を判別することが可能になる。
【０１１７】
また、更に、前記入力された原稿画像中のノイズ除去するノイズ除去手段を備えることにより、ノイズによる影響をなくすことができるので、行の判別をより精度良く行なえる。
【０１１８】
また、更に、前記入力された画像を所定角度だけ回転させて、正立画像としての方向を決定する手段を備えることにより、原稿画像の入力方向に応じて判定することが可能になる。
【０１１９】
また、前記入力された画像が傾いているときに、傾きを補正するので、傾いて入力された原稿画像もより精度良く処理できる。
【０１２０】
【図面の簡単な説明】
【図１】実施例における処理手順を示すフローチャートである。
【図２】原稿画像とブロック分け処理の関係を示す図である。
【図３】実施例のブロック分け処理の一例を示すフローチャートである。
【図４】図３における解像度変換処理を施した様子を示す図である。
【図５】実施例におけるブロック変数の構造体の構造及びそのデータの例を示す図である。
【図６】行判別の概念を示す図である。
【図７】日本語と英語の文字列の一例と、文字識別の原理を説明するための図である。
【図８】実施例におけるブロック分け処理後の各ブロックの属性の一例を示す図である。
【図９】実施例の行識別処理のフローチャートである。
【図１０】実施例の画素計数処理内容を示すフローチャートである。
【図１１】実施例の画素計数処理の走査内容を示す図である。
【図１２】実施例における文字認識装置のブロック構成を示す図である。
【図１３】第３の実施例の動作処理手順を示すフローチャートである。
【図１４】第３の実施例における処理過程の概要を示す図である。
【図１５】第３の実施例における黒画素分布算出処理を示すフローチャートである。
【図１６】細線化処理で使用されるパターンの例を示す図である。
【符号の説明】
１  ＣＰＵ
２  ＲＯＭ
３  ＲＡＭ
４  外部記憶装置
５  入力装置
６  イメージスキャナ
７  画像メモリ
８  表示装置
【図１】
0003710164.tif 000002
【図２】
0003710164.tif 000003
【図３】
0003710164.tif 000004
【図４】
0003710164.tif 000005
【図５】
0003710164.tif 000006
【図６】
0003710164.tif 000007
【図７】
0003710164.tif 000008
【図８】
0003710164.tif 000009
【図９】
0003710164.tif 000010
【図１０】
0003710164.tif 000011
【図１１】
0003710164.tif 000012
【図１２】
0003710164.tif 000013
【図１３】
0003710164.tif 000014
【図１４】
0003710164.tif 000015
【図１５】
0003710164.tif 000016
【図１６】
0003710164.tif 000017