(57)【特許請求の範囲】
【請求項１】
多値画像を２値化するための２値化閾値を決定して、２値化処理を行う画像処理方法において、
複数画素からなる所定の大きさのブロック単位で２値化処理を行う際に、ライン順次での多値画像の入力と、前記ブロック順次での２値化閾値決定処理と、前記２値化閾値決定処理で決定された閾値を用いて、ライン順次での２値化処理とをパイプライン処理で行い、
前記２値化閾値決定処理は、前記所定の大きさのブロック単位に、ブロック内の輝度毎の頻度を算出し、当該輝度頻度から輝度平均値及びスキュー値を演算することで２値化閾値を決定し、さらに各演算をパイプライン処理で同期させながら実行することを特徴とする画像処理方法。
【請求項２】
前記多値画像の入力、前記２値化閾値決定処理、前記２値化処理の際に用いられる処理バッファを、単一のメモリブロックで構成し、前記単一のメモリブロックを所定の処理単位毎に時分割でアクセスすることを特徴とする請求項１記載の画像処理方法。
【請求項３】
前記２値化閾値決定処理は、前記輝度頻度を算出するためのメモリと前記輝度平均値及びスキュー値を演算するためのメモリとを、それぞれ切り替えて使用し、前記輝度頻度の算出と、前記輝度平均値及びスキュー値の演算とをパイプラインで動作させることを特徴とする請求項２記載の画像処理方法。
【請求項４】
前記スキュー値の演算において、スキュー値を算出するためのヒストグラムの範囲の情報からスキュー値のとりえる値を予測し、その予測値から前記スキュー値の演算の小数点位置を決定して演算値の桁数の切り捨て及び繰り上げを行い、最終演算値を予め設定した有効桁数内に収めることを特徴とする請求項１記載の画像処理方法。
【請求項５】
多値画像を２値化するための２値化閾値を決定して、２値化処理を行う画像処理装置において、
複数画素からなる所定の大きさのブロック単位で２値化処理を行う際に、ライン順次での多値画像を入力する入力手段と、
前記ブロック順次で２値化閾値を決定する２値化閾値決定手段と、
前記２値化閾値決定手段で決定された閾値を用いて、ライン順次での２値化処理を行う２値化手段と、
前記入力手段による多値画像の入力と、前記２値化閾値決定手段による２値化閾値の決定と、前記２値化手段により２値化処理とをパイプライン処理で実行する制御手段と、
を有し、
前記２値化閾値決定手段は、前記所定の大きさのブロック単位に、ブロック内の輝度毎の頻度を算出し、当該輝度頻度から輝度平均値及びスキュー値を演算することで２値化閾値を決定し、さらに前記制御手段は前記輝度平均値及びスキュー値の演算をパイプライン処理で同期させながら実行することを特徴とする画像処理装置。
【請求項６】
前記多値画像の入力、前記２値化閾値決定処理、前記２値化処理の際に用いる、単一のメモリブロックで構成した処理バッファを有し、前記制御手段は前記単一のメモリブロックを所定の処理単位毎に時分割でアクセスするように制御することを特徴とする請求項５記載の画像処理装置。
【請求項７】
前記制御手段は、前記輝度頻度を算出するためのメモリと前記輝度平均値及びスキュー値を演算するためのメモリとをそれぞれ切り替えて使用するように制御し、前記輝度頻度の算出と、前記輝度平均値及びスキュー値の演算とをパイプラインで動作させることを特徴とする請求項６記載の画像処理装置。
【請求項８】
前記２値化閾値決定手段は、前記スキュー値の演算において、スキュー値を算出するためのヒストグラムの範囲の情報からスキュー値のとりえる値を予測し、その予測値から前記スキュー値の演算の小数点位置を決定して演算値の桁数の切り捨て及び繰り上げを行い、最終演算値を予め設定した有効桁数内に収めることを特徴とする請求項５記載の画像処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は画像処理方法及び画像処理装置に関し、例えば、多値画像から２値化閾値を決定して２値化を行う画像処理方法及び画像処理装置に関する。
【０００２】
【従来の技術】
近年の画像処理技術の発展はめざましく、フルカラー画像等の多値画像の処理や、多値画像内の文字認識処理等が可能な画像処理装置も普及してきている。
【０００３】
このような画像処理技術において、多値画像の２値化処理は不可欠の技術となっている。従来の２値化方法としては、予め設定してある固定閾値による単純２値化法をはじめとして、ある閾値でヒストグラムを２クラスに分割した場合のクラス間分散が最大になる時の閾値を２値化閾値とする大津法（大津、“判別および最小２乗基準に基づく自動しきい値選定方”、電子通信学会論文誌、ｖｏｌ．Ｊ６３−Ｄ，ｎｏ．４，ｐｐ．３４９−３５６，１９８０）や、また、階調をもつ画像に対して、局所的濃度に応じて閾値を設定する２値化方法等があった。
【０００４】
【発明が解決しようとする課題】
しかしながら、上述したような従来の画像処理装置における２値化方法においては、以下のような問題点があった。
【０００５】
固定閾値による単純２値化方法では、画像内の対象物濃度と背景濃度との間に適切な閾値を設定することが難しく、その結果、画像一面が黒く潰れてしまったり、逆に白くなってしまっていた。また、大津法では、２クラスの分布が極端に異なる場合においては、大きい方のクラスに閾値が寄ってしまうという性質があり、従ってノイズの多い２値画像が生成されてしまっていた。
【０００６】
そこで、画像内の対象物濃度と背景濃度との間に適切な２値化閾値を自動的に設定可能な方法を、本出願人は特願平７−２２８９５号公報で出願している。
【０００７】
前記出願における閾値決定の流れを以下に説明する。
【０００８】
図２０において、まずステップＳ１で８ビットの多値画像を入力する。尚、該多値画像は、スキャナ等の画像入力装置により、入力される。そして、ステップＳ２において、入力画像全体のヒストグラムを算出する。ここでは、画像中の全画素を用い、８ビット、即ち「０」から「２５５」までの各デジタル値に対する頻度を計算する。これにより、例えば図２１に示すヒストグラムが得られる。
【０００９】
次にステップＳ３において、パラメータＳＴＡＲＴ，ＥＮＤにそれぞれ「０」、「２５５」をセットする。ＳＴＡＲＴ，ＥＮＤはそれぞれ、後段のステップＳ４やステップＳ５で求める輝度値の統計量の始点及び終点に対応する。
【００１０】
ステップＳ４では、ＳＴＡＲＴからＥＮＤまでのデジタル値に対応する画素の平均値ＡＶを算出する。例えば、ＳＴＡＲＴ＝０，ＥＮＤ＝２５５であれば「０」から「２５５」の値を持つ画素（この場合、全画素）の平均値ＡＶを算出し、ＳＴＡＲＴ＝０，ＥＮＤ＝１７７であれば「０」から「１７７」の値を持つ画素の平均値ＡＶを算出する。
【００１１】
ステップＳ５では、ＳＴＡＲＴからＥＮＤまでの輝度値に対応する画素のスキュー値ＳＫを算出する。スキュー値とは、ヒストグラム分布の偏りを示す統計量である。スキュー値の算出には、以下に示す式を用いる。
【００１２】
ＳＫ＝（Σ（Ｘｉ−ＡＶ）＾３）／Ｄ
（尚、Ｒ＾３の表記によってＲの３乗を示すものとする。）
【００１３】
ここで、Ｘｉは画素の輝度値である。また、Ｄは画像全体の分散値であり、下記式により算出される。
【００１４】
Ｄ＝Σ（Ｘｉ−ＡＶ）＾２
（尚、Ｒ＾２の表記によってＲの２乗を示すものとする。）
【００１５】
上述した式において、スキュー値は各画素の輝度値と、その平均値との差分を３乗することにより算出されるが、奇数乗であれば３乗に限定されるものではない。
【００１６】
続いてステップＳ６、Ｓ７では、ヒストグラムの偏りの方向を判断する。まずステップＳ６では、以下に示す式によりヒストグラムの偏りの方向を判断する。これは、ヒストグラムの偏りが平均値ＡＶよりも小さい値の範囲にあるか否かの判断となる。
【００１７】
ＳＫ＜−１．０
【００１８】
ステップＳ６において上記式が真ならばステップＳ１０へ進み、偽ならばステップＳ７へ進む。ステップＳ１０では、ＳＴＡＲＴは変化させず、ＥＮＤに平均値ＡＶをセットする。そしてステップＳ４に戻り、再びＳＴＡＲＴ値からＥＮＤ値までの平均値ＡＶを算出する。
【００１９】
一方、ステップＳ７では以下に示す式によりヒストグラムの偏りの方向を判断する。これは、ヒストグラムの偏りが平均値ＡＶより大きい値の範囲にあるか否かの判断となる。
【００２０】
ＳＫ＞１．０
【００２１】
ステップＳ７において上記式が真ならばステップＳ１１へ進み、偽ならばステップＳ８へ進む。ステップＳ１１では、ＳＴＡＲＴに平均値ＡＶをセットし、ＥＮＤは変化させない。そしてステップＳ４に戻り、再びＳＴＡＲＴ値からＥＮＤ値までの平均値ＡＶを算出する。
【００２２】
一方、ステップＳ８ではステップＳ６，Ｓ７における条件が共に偽である場合の平均値ＡＶを、２値化閾値ＴＨとして設定する。そして、ステップＳ９で２値化閾値ＴＨを用いた単純２値化処理を行う。
【００２３】
以下、具体的な画像の例を参照して、特願平７−２２８９５号公報における２値化処理について更に詳細に説明する。
【００２４】
上述した図２１に示すヒストグラムの例を用いて、２値化閾値ＴＨの決定処理について説明する。
【００２５】
図２１は、ある画像（８ビット入力）のヒストグラムを示したものである。図２１において、横軸は左端が「０」即ち黒、右端が「２５５」即ち白を表す輝度のデジタル値であり、縦軸は各デジタル値の頻度を表している。図２２は、図２１に示す様なヒストグラムを有する画像に対して、上述した図２０で示す２値化処理においてステップＳ４及びＳ５で示した処理の際の、各パラメータの値の変化を示す図である。尚、図２２において示される各パラメータ値は、ステップＳ４及びＳ５を通過する回数によって、それぞれ示されている。
【００２６】
まず、ステップＳ４及びＳ５を通過する１回目の処理では、ＳＴＡＲＴ＝０，ＥＮＤ＝２５５で平均値ＡＶ，統計量ＳＫを計算し、それぞれ「１７７」，「−７８．９」という値を得る。の場合、統計量ＳＫが「−１．０」未満であるため、ステップＳ１０においてＳＴＡＲＴ＝０，ＥＮＤ＝１７７が設定される。
【００２７】
続いて２回目の処理ではＳＴＡＲＴ＝０，ＥＮＤ＝１７７における平均値ＡＶ，統計量ＳＫを計算し、それぞれ「９１」，「−８．６」という値を得る。これも、統計量ＳＫが「−１．０」未満であるため、ステップＳ１０においてＳＴＡＲＴ＝０，ＥＮＤ＝９１が設定される。
【００２８】
続いて３回目の処理では、ＳＴＡＲＴ＝０，ＥＮＤ＝９１における平均値ＡＶ，統計量ＳＫを計算し、それぞれ「４３」，「９．６」という値を得る。この場合は、統計量ＳＫが「１．０」を超えるため、ステップＳ１１においてＳＴＡＲＴ＝４３，ＥＮＤ＝９１が設定される。
【００２９】
続いて４回目の処理では、ＳＴＡＲＴ＝４３，ＥＮＤ＝９１における平均値ＡＶ，統計量ＳＫを計算し、それぞれ「７２」，「−７．０」という値を得る。これも、統計量ＳＫが「−１．０」未満であるため、ステップＳ１０においてＳＴＡＲＴ＝４３，ＥＮＤ＝７２が設定される。
【００３０】
続いて５回目の処理では、ＳＴＡＲＴ＝４３，ＥＮＤ＝７２における平均値ＡＶ，統計量ＳＫを計算し、それぞれ「５８」，「−２．２」という値を得る。これも、統計量ＳＫが「−１．０」未満であるため、ステップＳ１０においてＳＴＡＲＴ＝４３，ＥＮＤ＝５８が設定される。
【００３１】
そして６回目の処理では、ＳＴＡＲＴ＝４３，ＥＮＤ＝５８における平均値ＡＶ，統計量ＳＫを計算し、それぞれ「５０」，「−０．４」という値を得る。ここで、統計量ＳＫが「−１．０」以上かつ「１．０」以下であるため、ステップＳ６，Ｓ７の条件を満たさず、ステップＳ８へ進んで２値化閾値ＴＨとして、「５０」が設定される。そしてステップＳ９において２値化閾値ＴＨを用いた単純２値化処理が行われる。
【００３２】
この様に、スキュー値が所定値まで収束するようにして２値化閾値を決定し、２値化を行う。即ち、入力された多値画像において、輝度頻度とその偏りに基づいて、画像内の背景と対象物とを分離するために最も適した閾値が存在する領域を特定した後、該特定領域の平均輝度値をもって閾値とする。
【００３３】
特願平７−２２８９５号公報の閾値決定方法によれば、対象物濃度と背景濃度との間に適切な閾値を設定できるが、図２０の処理フローをそのまま実行する場合、輝度頻度情報の演算範囲の収束の仕方が入力画像によって異なるため閾値算出のための演算量が最小の場合と最大の場合で大きく異なる。そのため所定の時間でこの演算を行うためには処理周波数を高くしなければならないので高速化のボトルネックになっていた。
【００３４】
また、従来からコンピュータ上の数値演算方法には整数演算と浮動小数点演算がある。整数演算はコンピュータの扱える整数有効数値（１６ｂｉｔ整数で３２７６７〜−３２７６８）内で高速に演算され、さらにコンピュータ内部の整数有効数値（ＣＰＵやシステムなどの処理環境に依存する）内では、より高速に演算される。浮動小数点演算は数値部と指数部を持った型の数値で行われるので、大きな数値から、小数点以下の数値まで表現できる。
【００３５】
またコンピュータプログラムによる計算ではなく演算器により演算するブロックを構成するにあたって浮動小数点演算器を用いて構成する方法と整数演算器を用いて構成する方法があった。
【００３６】
しかしながら、上述したような画像処理の数値演算装置における２値化閾値決定の演算方法においては、以下のような問題があった。
【００３７】
整数演算で画像処理の数値演算を行っている場合、浮動小数点演算に比べ圧倒的に高速であるが、割り算などで少数部が切り捨てられることによる誤差が発生し、繰り返し演算に割り算が含まれている場合などには誤差が大きくなりやすく精度が保てない。また整数の幅に制限があり、制限を超えた大きな数値や、小数点以下の数値は扱えなかった。
【００３８】
浮動小数点演算で画像処理の数値演算を行っている場合、高精度を保つことができるが、演算処理が遅く処理時間がかかってしまっていた。またＣＰＵの中には浮動小数点演算ユニットを持たないのも少なからずあるため、その場合はさらに処理時間がかかることになる。
【００３９】
ハードによる演算では、まず浮動小数点演算器で構成した場合において演算速度が遅く回路規模が大きくなり、整数演算器で構成した場合は切り捨てによる演算誤差が大きくなるという点があった。
【００４０】
これは、浮動小数点演算の場合、必ず演算毎に仮数部を正規化して指数部の値を更新するという操作がはいる。この操作は乗除算ではそれほどではないが加減算ではかなりのクロック数を必要とし、これを少ないクロック数で実行しようとした場合にそのハード量が大きくなってしまうという欠点がある。対して整数演算または固定小数演算ではオーバーフローの危険と丸め誤差による演算精度の低下の恐れが生ずる。整数演算で浮動小数点演算の時と同等の演算精度を得るためには演算器の桁数を大きくするしかなく、この場合にはハード量の増大または動作可能周波数の低下が避けられない。
【００４１】
本発明は上述した技術に鑑みなされたものであり、多値画像を２値化するための２値化閾値を決定して２値化処理を行う際に、処理を極めて高速化することができる画像処理方法の提供を目的とする。
【００４２】
また、本発明は多値画像の画像処理の演算において、限られたコンピュータの扱える整数の有効数値内で一定の精度を保ち、特に、大きな数値から小さい数値まで収束させるような繰り返し演算の高速化ができる画像処理方法の提供を目的とする。
【００４３】
【課題を解決するための手段】
上述した目的を達成するため、本発明の画像処理方法は、多値画像を２値化するための２値化閾値を決定して、２値化処理を行う画像処理方法において、複数画素からなる所定の大きさのブロック単位で２値化処理を行う際に、ライン順次での多値画像の入力と、前記ブロック順次での２値化閾値決定処理と、前記２値化閾値決定処理で決定された閾値を用いて、ライン順次での２値化処理とをパイプライン処理で行い、前記２値化閾値決定処理は、前記所定の大きさのブロック単位に、ブロック内の輝度毎の頻度を算出し、当該輝度頻度から輝度平均値及びスキュー値を演算することで２値化閾値を決定し、さらに各演算をパイプライン処理で同期させながら実行する。
【００４４】
また、上述した目的を達成するため、本発明の画像処理装置は、多値画像を２値化するための２値化閾値を決定して、２値化処理を行う画像処理装置において、複数画素からなる所定の大きさのブロック単位で２値化処理を行う際に、ライン順次での多値画像を入力する入力手段と、前記ブロック順次で２値化閾値を決定する２値化閾値決定手段と、前記２値化閾値決定手段で決定された閾値を用いて、ライン順次での２値化処理を行う２値化手段と、前記入力手段による多値画像の入力と、前記２値化閾値決定手段による２値化閾値の決定と、前記２値化手段により２値化処理とをパイプライン処理で実行する制御手段と、を有し、前記２値化閾値決定手段は、前記所定の大きさのブロック単位に、ブロック内の輝度毎の頻度を算出し、当該輝度頻度から輝度平均値及びスキュー値を演算することで２値化閾値を決定し、さらに前記制御手段は前記輝度平均値及びスキュー値の演算をパイプライン処理で同期させながら実行する。
【００４５】
【発明の実施の形態】
図１は、本実施の形態における２値化処理を実行するシステム構成を示すブロック図である。図１において、１は画像の２値化処理、文字認識処理などを行う画像処理装置であり、２は画像を入力するスキャナ等の画像入力装置、３は処理後の画像を表示する画像表示装置である。
【００４６】
画像処理装置１において、４は画像入力装置２とのインターフェースとなる入力インターフェース部、５は入力された多値画像からの二値化閾値を演算し、多値画像を二値化処理する閾値演算二値化部である。６は画像データを記憶する記憶部、７は画像処理装置全体を制御するＣＰＵ部で、ＣＰＵ、ＲＯＭ、ＲＡＭ等からなる。８は文字領域として抽出された領域に対し、文字認識処理を行う文字認識部、９は文字領域以外の領域に分離された領域に対する各種画像処理や画像のレイアウト処理を行う画像処理部、１０は画像表示装置３とのインターフェースとなる出力インターフェース部である（文字認識部８と画像処理部９の処理はＣＰＵ部７がプログラムによって実行されてもよい）。
【００４７】
画像入力装置２から入力インターフェース部４を通じて入力された多値の画像データは閾値演算二値化部５に入力される。閾値演算二値化部５は所定領域（６４×６４画素）毎の二値化閾値を演算して６４×６４画素の多値画像データを二値画像に変換する。閾値演算二値化部内部５の詳細は後で説明する。変換された二値画像データは記憶部６に格納される。記憶部６に格納された画像のうち文字領域と識別された画像には文字認識処理がなされて文字コードに変換される。
【００４８】
図２は閾値演算二値化部５の内部を表した図である。
【００４９】
閾値演算二値化部５において、２０１は多値画像データを入力する入力部であり、２０７は入力部２０１からの画像データを所定領域のライン数分格納するバッファメモリである。２０６はバッファメモリ２０７のデータ入出力を制御するメモリ制御部であり、２０５は入力画像の所定領域毎の輝度頻度とそれに対する二値化閾値を算出する二値化閾値演算部である。２０４は二値化閾値演算部２０５が得られた閾値データを複数バンド分記憶することのできる結果記憶部であり、２０３は多値画像より二値画像の作成を行う画像変換処理部であり、２０２は変換された二値画像を出力する出力部である。２０８は制御部でありＣＰＵ部７から指示を受けて閾値演算二値化部５の全体の制御を行う。なお閾値演算二値化部５では多値画像を輝度で扱う。よって８ビット輝度データが意味するものは最も濃い黒が０で最も淡い白が２５５になる。画像入力装置２や画像表示装置３ではこの意味が異なることが考えられるが、この場合は入力部２０１と出力部２０２において反転処理を行う。
【００５０】
図３は二値化閾値演算部２０５の詳細を示した図である。
【００５１】
３０１は輝度頻度演算部、３０２は閾値演算部、３０３はマルチプレクサ、３０４、３０５は輝度頻度記憶ＲＡＭである。輝度頻度記憶ＲＡＭ３０４、３０５は２ポートＲＡＭで構成され１つのポートは読み出し専用、他ポートは書き込み専用でともにマルチプレクサ３０３に接続されている。ＲＡＭ３０４、３０５はマルチプレクサ３０３を介して輝度頻度演算部３０１と閾値演算部３０２に交互に接続される。
【００５２】
図４はこれらの動作タイミングを示した図である。まず図２において、入力部２０１を通してラスタ順次に入力された多値画像データはメモリ制御部２０６を介してバッファメモリ２０７に書き込まれる。６４ライン分のデータが入力されると、その後順次６４×６４のブロックデータをバッファメモリ２０７から読み出し、メモリ制御部２０６を介して二値化閾値演算部２０５へ入力する。輝度頻度演算部３０１はメモリ制御部２０６から６４×６４画素のブロック内の輝度毎の頻度をカウントする。各輝度の頻度は輝度頻度記憶ＲＡＭの輝度値をアドレスとする箇所に計数される。最初のブロックの輝度頻度は輝度頻度記憶ＲＡＭ３０４に生成されるとすると次の輝度頻度は輝度頻度記憶ＲＡＭ３０５に生成される。閾値演算部３０２は輝度頻度演算部３０１の処理に対して１ブロック遅れて動作する。即ち輝度頻度演算部３０１が第Ｎブロックを処理している時間には閾値演算部３０２は第Ｎ−１ブロックの処理をする。この輝度頻度演算部３０１と閾値演算部３０２の詳細は後で述べる。閾値演算部３０２で演算された閾値は結果記憶部２０４に格納される。二値化処理は多値画像入力に対して約１２８ライン遅れたところから開始される。
【００５３】
図５はバッファメモリ２０７でのデータ入出力の流れである。入力部からバッファメモリへの流れ（多値画像入力）はライン順次であり、バッファメモリから二値化閾値演算部への出力は６４画素×６４ラインのブロック順次で、バッファメモリから画像変換処理部への多値画像はライン順次で流れる。従って、画像変換処理部２０３から二値画像出力もライン順次で出力される。
【００５４】
図６は画像の入力に対するバッファメモリ２０７の入出力を示す図である。入力、演算、出力の各処理は小分割してアクセスされる。説明すると、３２画素（３２バイト）単位にアクセスする場合、多値画像の入力３２画素分の画像入力クロックを処理の単位としてその時間内に入力３２バイト、演算３２バイト、出力３２バイトの入出力を行う（３アクセスが競合した場合）。
【００５５】
画像入力レートに対してバッファメモリの入出力レートは３倍であるが、バッファメモリのデータ幅が１６ビットであるとすると１．５倍となる。この様にバッファメモリのデータ幅を調整すれば、メモリ速度に適した入出力レートにすることができる。メモリ制御部２０６には画像入力の速度とバッファメモリの入出力の速度の差を吸収する小バッファ（ＦＩＦＯメモリ）が６４バイト（３２バイト×２）程度内部に持っている。また入力、演算、出力の各処理バッファをバンクに分割している場合は各バンクの処理が終わらないと切り換えできないが分離していないため各処理の開始を自由にできる。図６で説明すると入力、演算、出力の開始の間隔は等間隔でなければならないが、図から分かるように出力処理の開始を少し早めている。これにより、各ラインの入力に対する出力時間差を小さくすることを可能にしている。
【００５６】
図７は輝度頻度演算部３０１の構成と輝度頻度記憶ＲＡＭ３０４／３０５との関係を示した図で、図８は輝度頻度の演算処理タイミングを示した図である。
【００５７】
５０１は同じ輝度データが連続して入力されたかどうかをチェックする値チェック部、５０２は入力された輝度値に対応する輝度頻度記憶ＲＡＭ３０４、３０５の部分のデータを読み出すＲＡＭリード部、５０３は５０２で読み出されたデータに＋１を加算する＋１加算部、５０４は＋１加算されたデータを輝度頻度記憶ＲＡＭ３０４、３０５に書き戻すＲＡＭライト部、５０５はパイプライン処理の不整合を回避するデータマルチプレクサである。図８に示されているように輝度頻度演算部３０１は同一アドレス（輝度値）のチェック、メモリ読み出し、＋１加算処理、書き込み処理をパイプランで処理する。しかし輝度頻度記憶ＲＡＭから読み出されたデータが＋１加算処理されて書き戻される間に同じ輝度データが入力された場合、そのままでは＋１加算する前のデータが処理されるため正しく輝度頻度を計数できない。そこで同一アドレスのチェック部５０１によってパイプラインの段数内に同一データがないかどうかチェックする。例えば、値チェック部５０１でＮ番目のデータを処理する場合、その値と前のＮ−１とＮ−２番目のデータの値を比較して同一の値がないかチェックする。もし同じ輝度データがあった場合マルチプレクサ５０５によってデータをフィードバックしてデータ読み出し手段によって輝度頻度記憶ＲＡＭからデータを無視するようにして正しく輝度頻度を計数できるようにしている。また同一アドレスに対し同時にリード動作とライト動作をするパターンになった場合はリード動作を禁止する。処理ブロックを６４×６４画素とすると輝度頻度は０から４０９６で１３ビット幅のメモリが必要であるが、４０９５に制限する。その１２ビットの他に１ビットを初期化フラグに使用する。初期化フラグは動作開始時に１に設定され、初期化フラグが１のデータは他の１２ビットがいかなる値でも０として扱う。初期化フラグの設定は次の閾値演算部３０２で行う。
【００５８】
図９は閾値演算部３０２の構成及び輝度頻度記憶ＲＡＭ３０４／３０５との関係を示した図である。３０４／３０５は輝度頻度記憶ＲＡＭであり０から２５５の値をとる輝度をアドレス値としたＲＡＭである。
【００５９】
６０１はクリア処理部であり、輝度頻度記憶ＲＡＭ３０４、３０５の初期化フラグの処理をする。６０２は指示された範囲の輝度頻度からその平均輝度を算出する平均値演算部であり、６０３は同じく指示された範囲の輝度頻度からそのスキューを算出するスキュー演算部である。輝度頻度記憶ＲＡＭ３０４／３０５の出力はこの平均値演算部６０２とスキュー演算部６０３に接続され、読み出されたデータは並列に入力される。６０４は判定部であり平均値演算部６０２とスキュー演算部６０３の出力を受けて終了判定を行う。６０５は全体の制御を行う制御部であり主にレンジの管理を行う。６０６は閾値演算部であり、閾値の上限と下限の処理を行う。
【００６０】
次に、本実施の形態における２値化の閾値決定処理の流れについて、図１０〜図１４のフローチャートを参照して詳細に説明する。
【００６１】
ステップＳ７０１において、パラメータＳＴＡＲＴ、ＥＮＤにそれぞれ「０」、「２５５」をセットする。同時に後述する画像特徴判別、かすれ文字処理、つぶれ文字処理で使用するＭＦ、ＫＦ、ＴＦの各フラグを「ＯＦＦ、ＯＮ、ＯＦＦ」に初期化し、また、閾値決定処理ループ回数ｉに「１」をセットする。ＳＴＡＲＴ、ＥＮＤはそれぞれ、後段のステップＳ７０２やステップＳ７０４で求める輝度値の統計量（平均値、スキュー値）の始点及び終点に対応する。
【００６２】
ステップＳ７０２では、ＳＴＡＲＴからＥＮＤまでのデジタル値に対応する画素の平均値ＡＶを算出する。例えば、ＳＴＡＲＴ＝０、ＥＮＤ＝２５５であれば、「０」から「２５５」までの値を持つ画素の平均値ＡＶを算出し、ＳＴＡＲＴ＝０、ＥＮＤ＝１０９であれば「０」から「１０９」までの値を持つ画素の平均値ＡＶを算出する。
【００６３】
ｋを０から２５５の輝度値、ＰｋまたはＰ（ｋ）をその輝度値に対応した分布量とすると平均値ＡＶは、
ＡＶ＝Σ（ｋ×Ｐ（ｋ））÷ΣＰ（ｋ）  （ｋ＝ＳＴＡＲＴ‥ＥＮＤ）…（１）
となる。
【００６４】
Ｓ７０３では、閾値決定処理ループ回数ｉの判断を行い、ｉが「１０」ならばステップＳ７１８へ、「１０」以外ならステップＳ７０４へ進む。
【００６５】
ステップＳ７０４では、ＳＴＡＲＴからＥＮＤまでの輝度値に対応する画素のスキュー値ＳＫを算出する。スキュー値とは、ヒストグラム分布の偏りを示す統計量である。スキュー値の算出には、以下に示す（２）式を用いる。
【００６６】
0003673598.tif 000002
スキュー値を求める（２）式において分母部分は画像全体の分散値であり、分子は各画素の輝度値と、その平均値との差分を３乗することにより算出されるが、奇数乗であれば３乗に限定されるものではない。
【００６７】
ステップＳ７０５では、１つの処理ブロックにおける閾値決定処理ループ回数ｉの判断（ｉ＝１、つまり最初のループかどうかの判断）を行う。ｉが「１」であればステップＳ７０６へ、ｉが「１」以外であればステップＳ７０９へ進む。ステップＳ７０６では、処理中のブロックが「文字ブロック」かどうかの画像特徴判別を行い、ステップＳ７１８へ進む。画像特徴判別の詳細（Ｓ７２８〜Ｓ７２９、Ｓ７０７〜Ｓ７０８）は後述するが文字ブロックであると判断された場合はＭＦが「ＯＮ」に設定される。
【００６８】
ステップＳ７０９では（３）式に示す様にヒストグラムの偏りの大きさを判断する。
【００６９】
｜ＳＫ｜＜０．１２５  …（３）
つまり、スキュー値ＳＫの絶対値が「０．１２５」未満かの判断を行う。ステップＳ７０９が真ならばステップＳ７１９へ、偽ならばステップＳ７１０へ進む。
【００７０】
ステップＳ７１０ではかすれ文字処理を行う。Ｓ７１０の条件が成立した場合はＳ７１９へ、成立しなかった場合はＳ７１１へ進む。かすれ文字処理の詳細（Ｓ７１０、Ｓ７３０〜Ｓ〜７３１、Ｓ７１２〜Ｓ７１３）は後述する。
【００７１】
ステップＳ７１１では、閾値決定処理ループ回数ｉの判定を行い、ｉが「２」ならばステップＳ７１２へ、「２」以外ならステップＳ７１６へ進む。ｉが「２」の場合に進むステップＳ７１４では、処理中のブロックが「つぶれ文字ブロック」かどうの判断と処理を行いステップＳ７１６で合流する。つぶれ文字処理の詳細（Ｓ７１４、Ｓ７３２〜Ｓ７３３、Ｓ７１５）は後述するがつぶれ文字ブロックであると判断された場合はつぶれ文字フラグＴＦが「ＯＮ」に設定される。
【００７２】
ステップＳ７１６では、以下に示す（４）式によりヒストグラムの偏りの方向を判断する。
【００７３】
ＳＫ＞＝０  …（４）
【００７４】
ステップＳ７１６において（４）式が真（ヒストグラムの偏りが平均値ＡＶよりも大きい値の範囲にある事を意味する）ならばステップＳ７１７へ進み、偽（ヒストグラムの偏りが平均値ＡＶよりも小さい値の範囲にある事を意味する）ならばステップＳ７１８へ進む。
【００７５】
ステップＳ７１７では、ＳＴＡＲＴに平均値ＡＶをセットし、ＥＮＤは変化させない。そして、ステップＳ７３４へ進む。ステップＳ７１８では、ＳＴＡＲＴは変化させず、ＥＮＤに平均値ＡＶをセットする。そして、ステップＳ７３４へ進む。ステップＳ７３４では、閾値決定処理ループ回数ｉに「１」を加え、そしてステップＳ７０２に戻り、再びＳＴＡＲＴ値からＥＮＤ値までの平均値ＡＶを算出する。この様にスキュー値ＳＫが所定値まで収束する様にして２値化閾値を設定することで、下地を除去し、鮮明な２値画像を得ることができる。
【００７６】
ステップＳ７１９では平均値ＡＶを、２値化閾値ＴＨとして設定する。ステップＳ７２０からＳ７２７は得られた二値化閾値ＴＨの制限処理であり、詳細は後述する。この閾値制限の処理を行うと閾値決定処理が終了する。
【００７７】
以上説明したようにして本実施例における２値化処理が行われるが、式（３）、（４）で示した範囲は、これに限定されるものではない。
【００７８】
このフローチャートにより説明した二値化閾値決定処理を図９における回路で実行するのであるが、演算精度を確保するために以下の様に変形する。
【００７９】
輝度値ｋの範囲は０から２５５であるため平均値ＡＶも０から２５５の範囲の値となる。しかしスキューＳＫを演算する場合、輝度ｋは平均値ＡＶの差分（ｋ−ＡＶ）の値が基本となっている。１０回の演算の繰り返しにおいて演算領域であるＳＴＡＲＴ、ＥＮＤ間が狭くなるため、その差分の値が次第に小さくなり、またΣＰｉも同様に小さくなる。よって（２）式における分母および分子部分の値が小さくなっていくためスキューＳＫの有効桁数を１回目のループと同程度確保する場合に分母／分子の演算桁を大きくすることが必要となる。即ち小数点以下の桁数を増やしていくしかない。
【００８０】
（１）式においてＸを（１４−（（ＥＮＤ−ＳＴＡＲＴ）のビット数））とすると、
0003673598.tif 000003
となり、本来の平均値ＡＶとの関係は、
ＡＶ＝ＡＶ′÷２X ＋ＳＴＡＲＴ                                  （４）
となる。
【００８１】
初回のループのＳＴＡＲＴ＝０、ＥＮＤ＝２５５の時（ＥＮＤ−ＳＴＡＲＴが８ビット範囲で収まる）に平均値ＡＶを整数部分８ビット、小数部分を７ビットで求められるとすると、２回目以降において（ＥＮＤ−ＳＴＡＲＴ）が７ビット範囲であれば整数部分は７ビットであるため小数点部分を８ビットまで求めても同じ演算器で処理が可能になる。説明すると（３）式において（ｋ−ＳＴＡＲＴ）によってオフセット処理してＸによってスケーリングを行っているために同じ除算部分は２７ビット割る１３ビットで演算されても小数点以下の桁数が７から１４まで変化する。小数点以下の桁数が大きくなるのは（２）の分母／分子の値が小さくなるのと歩調があっている。
【００８２】
同じようにＹを（１２−（Σｐ（ｉ）のビット数））（ただしＹがマイナス値の場合は０）として（２）式は
ｔｍｐＡ＝（ｋ−ＳＴＡＲＴ）×２X −ＡＶ′                        （５）
ｔｍｐＢ＝（（ｔｍｐＡ×ｔｍｐＡ）÷２7 ）×（ｐ（ｋ）×２Y ）    （６）
ｔｍｐＣ＝Σ（ｔｍｐＡ×（ｔｍｐＢ÷２3 ））                      （７）
Ｄ＝（ΣｔｍｐＢ）÷２7                                           （８）
Ｅ＝｜ｔｍｐＣ｜÷２X+5                                           （９）
Ｓ…ｔｍｐＣの符号                                              （１０）
ＳＫ′＝Ｅ÷Ｄ                                                  （１１）
と変形される。ここでＳＫ′は｜ＳＫ｜に等しい。
【００８３】
図９の各部の内部構成を説明する前に図１０〜１４の閾値算出の処理フローを図１５に示す。大きく分けて平均値演算部６０２とスキュー演算部６０３と判定部６０４の動作の流れを示しているが、同時に動作する部分は横並びで表し、時間経過を上下で図示している。
【００８４】
最初にｎ回目の平均値、スキューをそれぞれＡＶｎ、ＳＫｎ（その前段階がＤｎ、Ｅｎ、Ｓｎ）として説明を行う。まずフェーズＰ８０１としてＳＴＡＲＴ＝０、ＥＮＤ＝２５５と初期化される。フェーズＰ８０２としてＥＮＤ〜ＳＴＡＲＴの範囲のデータが輝度頻度記憶ＲＡＭ３０４／３０５から読み出されて平均値演算部６０２に入力される。これにより輝度２５５から０までの輝度の平均値ＡＶ′１が算出される。次にフェーズＰ８０３でやはり２５５から０の範囲のデータが輝度頻度記憶ＲＡＭ３０４／３０５から読み出されてスキュー演算部６０３に入力されてＤ１、Ｅ１、Ｓ１が演算される。この時同時に０からＡＶ１の範囲の平均輝度ＡＶ′２が平均演算部６０２によって演算される。次のフェーズＰ８０４でＥＮＤをＡＶ１に設定し、フェーズＰ８０５においてＡＶ２−ＥＮＤ間の平均値ＡＶ′３ｂとＳＴＡＲＴ−ＡＶ２間の平均値ＡＶ′３ａが平均値演算部６０２によって演算され、ＥＮＤ−ＳＴＡＲＴ間のスキューＤ２、Ｅ２、Ｓ２がスキュー演算部６０３によって算出される。このフェーズＰ８０４からＰ８０５の間に同時に判定部６０４によってＤ１／Ｅ１の演算を行って得られたＳＫ′１を用いて画像特徴判別が行われる。
【００８５】
フェーズＰ８０５ではＡＶ３としてＡＶ３ａとＡＶ３ｂの二つが求められるが、続くフェーズＰ８０６で次の演算範囲を決定するのにＳＫ２の符号すなわちＳ２が正であればＡＶ３ａがＡＶ３となり負であればＡＶ３ｂがＡＶ３となる。本来であればＳ２すなわちＳＫ２の演算が終了するまでＡＶ３を求めるための領域がＳＴＡＲＴ−ＡＶ２間であるかＡＶ２−ＥＮＤ間であるかが決定されていないが、ＳＫ２（Ｄ２、Ｅ２、Ｓ２）の演算にＳＴＡＲＴ−ＡＶ２−ＥＮＤ間のデータをアクセスするため、平均値演算部６０２においてＳＴＡＲＴ−ＡＶ２間の平均値ＡＶ３ａとＡＶ２−ＥＮＤ間の平均値ＡＶ３ｂの二つの値を求めておく。輝度頻度記憶ＲＡＭ３０４／３０５のデータはＳＴＡＲＴ−ＡＶ２、ＡＶ２−ＥＮＤのように時間的にずれて入力されるため平均値演算部６０２を複数持つ必要はない。このＡＶ′３ａ、ＡＶ′３ｂ、Ｄ２、Ｅ２、Ｓ２が判定部６０４に入力され、Ｓ２の符号によりＡＶ３を決定して制御部に出力する。制御部６０５は受けた平均値によりＳＴＡＲＴとＥＮＤの再設定を行って次の演算範囲を決定し次の平均値とスキュー（ＡＶ４、Ｄ３、Ｅ３、Ｓ３）の演算を行わせる。それと平行して判定部６０４ではＤ２／Ｅ２の演算がなされ、｜ＳＫ２｜＜０．１の終了判定やつぶれ文字処理またはかすれ文字処理が行われる。詳しくは後述するがつぶれ文字とかすれ文字は相対する性質であるためどちらか一方の処理が行われる。これらの処理により終了条件が成立した場合はＡＶ２を閾値ＴＨとして出力し、制御部６０５は演算中の平均値演算部６０２とスキュー演算部６０３の動作を停止させて全処理を終了する。
【００８６】
終了条件が成立しなかった場合は同様の処理を続行していき、最後に１０回目の平均値ＡＶ１０の演算が終わってＳＫ９に対する終了判定をして終了条件が成立した場合はＡＶ９を閾値ＴＨとして成立しなかった場合はＡＶ１０を閾値ＴＨとして終わる。
【００８７】
このように平均値演算部６０２、スキュー演算部６０３、判定部６０４が同時に動作して演算を行っており、判定部６０４がｎ回目の演算を行っているとするとスキュー演算部６０３は（ｎ＋１）回目の演算であり、平均値演算部６０２は（ｎ＋２）回目の演算をパイプラインで行っていることになる。しかし単純なパイプライン動作ではなく、平均値演算部６０２とスキュー演算部６０３の演算は同期を取って行われるため輝度頻度記憶ＲＡＭ３０４／３０５は一つで処理することができる。
【００８８】
ところで平均値演算部６０２においてＳＴＡＲＴ、ＡＶｎ、ＥＮＤの三つの値が与えられた場合、ＳＴＡＲＴ−ＡＶｎ間とＡＶｎ−ＥＮＤ間の平均値を求めるためにＡＶｎに該当する箇所の輝度データを２度アクセスしなければならないが、例として図１６に示すような構成にすれば１回のアクセスですむ。
【００８９】
図１６は平均値演算部６０２の詳細な構成を示したブロック図である。
【００９０】
輝度頻度記憶ＲＡＭ３０４／３０５のデータは２５５から０へアクセスされる。９０１は入力されたＳＴＡＲＴとＥＮＤの値からＥＮＤ−ＳＴＡＲＴとＸの値を求める演算器である。この平均値演算部６０２では平均値を２つ演算するため、入力ＡとＢにはＳＴＡＲＴ、ＡＶｎ、ＥＮＤの値が実際には入力される。
【００９１】
９０２はＥＮＤ−ＳＴＡＲＴの値を入力して０までダウンカウントするカウンタ、９０３は入力Ａ、Ｂの乗算を行う乗算器であり、乗算器９０３の入力Ａには輝度すなわち輝度頻度記憶ＲＡＭ３０４／３０５のデータを読み出す時のアドレスの値−ＳＴＡＲＴの値即ちカウンタ９０２の出力が入力され、入力Ｂにはその読み出された頻度データが入力される。この乗算器９０３によって（ｋ−ＳＴＡＲＴ）×Ｐ（ｋ）の演算が行われる。９０４は加算器でありΣ（ｋ−ＳＴＡＲＴ）×Ｐ（ｋ）の演算を行う。９０５はレジスタであり、加算器９０４の出力を２つ分保持する。９０６はシフタであり、演算器９０１によって得られたＸの値によってレジスタ９０５の出力をシフトさせる。このシフト量によってＡＶ′ｎの小数点以下の桁数が決定される。９０７はテンポラリのレジスタであり、輝度がＡＶｎに相当する箇所のデータを一時的に保持するものである。９０８はマルチプレクサであり、９０９は加算器である。マルチプレクサ９０８は加算器９０９への入力をレジスタ９０７のデータにするか加算器９０９の出力をフィードバックさせるかを選択するもので、通常は出力をフィードバックさせるように選択されている。加算器９０９によりΣＰ（ｋ）が演算される。
【００９２】
９１０はレジスタであり、加算器９０９のデータが確定したところでその値を保持するものである。平均値は二つ求めなければならないためその出力を２つ分記憶する容量を持つ。９１１は除算器でありレジスタ９０５、９１０からデータを入力し、平均値を求める。
【００９３】
レジスタ９０７はＰ（ｋ）のデータをディレイさせるものである。最初に加算器９０４と９０９は初期化され０に設定されｋ＝ＥＮＤから演算を開始し、ｋ＝ＡＶｎのデータを演算したところで加算器９０４と９０９の出力をレジスタ９０５、９１０にセーブする。ｋ＝ＡＶｎ＋１の演算時にマルチプレクサ９０８はレジスタ９０７のデータを選択することにより、加算器５０７ではＰ（ＡＶｎ）＋Ｐ（ＡＶｎ＋１）の演算を行う。加算器９０４においては重複するデータの値は入力Ａ側が０であるためディレイ目的のテンポラリのレジスタは必要ない。その後ｋ＝ＳＴＡＲＴまでの演算が終わるとその結果をまたレジスタ９０５、９１０に出力する。
【００９４】
このようにすることによってデータに読み出しが各１回になるので平均値演算部６０２とスキュー演算部６０３が動作を始めてから、同期をとるためにスキュー演算部６０３を止める必要はなくなる。
【００９５】
図１７はスキュー演算部６０３の構成図である。
【００９６】
１００１はカウンタであり、ＥＮＤ−ＳＴＡＲＴの値をロードして０までカウントダウンを行う。１００２はシフタであり、平均値演算部６０２で演算されたＸを受けて（ｋ−ＳＴＡＲＴ）×２Ｘの演算を行う。１００３は減算器であり、（ｋ−ＳＴＡＲＴ）×２Ｘ−ＡＶ′すなわちｔｍｐＡの演算を行う。１００４は乗算器でありｔｍｐＡ×ｔｍｐＡの演算を行う。１００５は演算器であり平均値演算部６０２で演算されたΣＰ（ｋ）の値からＹを求める。１００６はシフタでありＹの値で輝度分布量Ｐ（ｋ）から（Ｐ（ｋ）×２Y ）の演算を行う。１００７は乗算器であり、（ｔｍｐＡ×ｔｍｐＡ÷２7 ）×（Ｐ（ｋ）×２Y ）即ちｔｍｐＢの演算を行う。１００８はディレイであり、減算器１００３の出力を乗算器１００４と１００７の演算クロック数分遅れさせる。１００９は乗算器であり、ｔｍｐＡ×（ｔｍｐＢ÷２2 ）の演算を行う。１０１０は加算器であり、ΣｔｍｐＢの演算をしてＤの結果を出力する。１０１１は加算器であり、ΣｔｍｐＡ×（ｔｍｐＢ÷２2 ）の演算を行う。１０１２は演算器であり、｜ΣｔｍｐＡ×（ｔｍｐＢ÷２2 ）｜÷２X+5 の演算をしてＥとその符号Ｓの出力を行う。
【００９７】
図１８は閾値算出の終了条件を判定する判定部６０４の詳細を示したブロック図である。
【００９８】
１１０１は比較器であり、スキュー演算部６０３で得られたＤ、Ｅの値からＥ×８＜Ｄ即ち｜ＳＫ｜＜０．１２５の判定を行う。１１０２は除算器であり、同じくＤ＜Ｅの値からＥ÷Ｄを演算してＳＫ′ｎ即ち｜ＳＫｎ｜の値を求める。１１０３は画像特徴判定部であり、１１０４はかすれ文字処理部であり、１１０５はつぶれ文字処理部である。１１０３、１１０４、１１０５内には図１０〜図１４のＭＦ、ＫＦ、ＴＦ、ＳＫ１があって共通に管理されている。
【００９９】
では、画像特徴判別部１１０３について、図１０、図１２に戻って説明する。ステップＳ７０１では、動作開始時に処理中のブロックが「文字ブロック」かどうかを示す、文字フラグＭＦに「０」をセットし、ステップＳ７０４にて一回目のスキュー値の演算がなされるのを待つ。一回目のスキュー値（この段階ではＤ１、Ｅ１）が演算されると画像特徴判別Ｓ７０６に入り、そのスキュー値の符号Ｓが負である場合（Ｓ７２８）、ステップＳ７２９へ進み符号Ｓが負でない場合ステップＳ７１８へ進み画像特徴判別を終了する。ステップＳ７２９では除算器１１０２によって演算されるスキュー値ＳＫ′１を用い、処理中のブロックが「文字ブロック」かどうかの判断を（１２）式により行う。
【０１００】
ＳＫ′＞ＭＨ  …（１２）
ここで、ＭＨは処理中のブロックが「文字ブロック」かどうかを示す値であり、制御部２０８にＣＰＵ部７が設定した値である。ここでは、「ＭＨ＝２０」とする。ステップＳ７２９において（１２）式が真ならばステップＳ７０７へ、偽ならばこの画像特徴判別処理を終える。ステップＳ７０７では、処理中のブロックが「文字ブロック」であることを示す、文字フラグＭＦに「１」をセットし、次のステップＳ７０８で得られたスキュー値をＳＫ１に保持してこの画像特徴判別処理を終える。
【０１０１】
以上説明したようにして本実施の形態における画像特徴判別処理が行われるが、式（１２）で示した条件は、これに限定されるものではない。
【０１０２】
次に、つぶれ文字処理部について、同じく図１０、図１４を用い詳細に説明する。
【０１０３】
ここで、つぶれ文字とは、１文字の画数が多い等のため、つぶれている文字のことであり、つぶれ文字と判断されるとそれを良好に再現できる閾値を割り当てる。
【０１０４】
ステップＳ７０１では、処理中のブロックが「つぶれ文字ブロック」かどうかを示す、つぶれ文字フラグＴＦに「ＯＦＦ」をセットする。２回目のスキュー演算（Ｄ２、Ｅ２）が終わるとステップＳ７１４に進み、文字フラグＭＦが「ＯＮ」であり符号Ｓが正である場合、ステップＳ７０８で保持されたＳＫ１と除算器１１０２によって演算されるスキュー値ＳＫ′２を用い、ステップＳ７３３では、処理中のブロックが「つぶれ文字ブロック」かどうかの判断を（１３）式により行う。
【０１０５】
ＳＫ１＞＝ＳＲ×ＳＫ′２  …（１３）
ここで、ＳＲは処理中のブロックが「つぶれ文字ブロック」かどうかを示す値であり、ここでは、「ＳＲ＝３．０」とする。ステップＳ７３３において（１３）式が真ならばステップＳ７１５へ、偽ならばこのつぶれ文字処理を終える。ステップＳ７１５では、処理中のブロックが「つぶれ文字ブロック」であることを示す、つぶれ文字フラグＴＦに「ＯＮ」をセットし、このつぶれ文字処理を終える。
【０１０６】
以上説明したようにして本実施の形態における、つぶれ文字処理が行われるが、式（１３）で示した条件は、これに限定されるものではない。
【０１０７】
さらに、かすれ文字処理について、図１０、図１３を用い詳細に説明する。かすれ文字とはうすくなってしまった文字のことであるが、本例ではこのうすれ文字にも最適な閾値を割り当てる。ステップＳ７０１では、処理中のブロックが「かすれ文字ブロック」かどうかを示す、かすれ文字フラグＫＦに「ＯＦＦ」をセットする。２回目以降のスキュー値に対して文字フラグＭＦが「ＯＮ」で符号Ｓが負である場合、ステップＳ７０８で保持されたＳＫ１と除算器１１０２によって演算されるスキュー値ＳＫ′ｎを用い、ステップＳ７３１では、処理中のブロックが「かすれ文字ブロック」かどうかの判断を（１３）式により行う。ここで、ＳＲは処理中のブロックが「かすれ文字ブロック」かどうかを示す値であり、ここでは、「ＳＲ＝３．０」とする。ステップＳ７１０において（１３）式が真ならばステップＳ７１９へ進む。偽ならばステップＳ７１１へ進み、ループ回数が２の場合のみＳ７１２へ進む。ステップＳ７１２において符号Ｓが正の場合はかすれ文字フラグＫＦを「ＯＦＦ」にする。
【０１０８】
ＳＲは処理中のブロックが「かすれ文字ブロック」かどうかを示す値であり、ここでは、「ＳＲ＝３．０」とする。
【０１０９】
以上説明したようにして本実施の形態における、かすれ文字処理が行われるが、式（６）で示した条件は、これに限定されるものではない。
【０１１０】
図１０の２回目のループにおいて、かすれ文字処理とつぶれ文字処理が重なるが処理の本体であるＳ７３１とＳ７３３は同じ処理であり、Ｓ７３０とＳ７３２から分かるように２回目のスキューの符号によってどちらが実行されるか決まる。よって２つの処理は排他的でありかつ同一処理であるため回路規模や実行時間に対する影響は小さい。
【０１１１】
終了判定が行われると判定部６０４から閾値制限部６０６に平均値ＡＶが出力され、閾値制限部６０６ではその時の平均値ＡＶを閾値ＴＨに設定してＳ７２０に進む。処理ブロックが文字ブロックでない場合すなわち文字フラグＭＦが「ＯＦＦ」の時は閾値ＴＨを下限値Ｌと上限値Ｈによる制限を行う。つまり、ステップＳ７１９で決定された閾値ＴＨが、下限値Ｌよりも小さいときは閾値ＴＨをＬで代表させ、上限値Ｈよりも大きいときは閾値ＴＨをＨで代表させるような制限処理を行う。尚、この下限値Ｌと上限値Ｈは、画像入力装置２の特性により決定される値である。文字ブロックである場合、ステップＳ７２５へ進んでつぶれ文字フラグＴＦが「ＯＮ」かどうかの判断（処理中のブロックがつぶれ文字ブロックかどうかの判断）をする。その結果が、つぶれ文字ブロックであればステップＳ７２６へ行く。ステップＳ７２６において閾値ＴＨが上限値Ｈに達しない場合はＳ７２７へ進み閾値ＴＨに文字つぶれ防止用の定数ＴＰをかけるような制限処理を行う。定数ＴＰは０．８７５としているが画像入力装置２の特性により決定される値である。
【０１１２】
図１９は図２の結果記憶部２０４と画像変換処理部２０３の詳細を示したブロック図である。
【０１１３】
結果記憶部２０４は二値化閾値演算部２０５で決定された各ブロックの閾値とそのブロックが文字ブロックであるかどうかを示す文字フラグＭＦを受け取り内部に格納する。二値化閾値演算部２０５からは６４×６４＝４０９６画素入力の時間間隔で閾値が入力される。内部のメモリ容量は扱う画像の１ラインの最大画素数を８１９２画素とすると１２８×２×９ビット（８１９２÷６４＝１２８）である。メモリ制御部２０６からは二値化する画像がライン順次で入力されるため結果記憶部２０４から画像変換処理部２０３（後述の１２０１から１２１１）への出力は６４画素分の時間間隔があり入出力の競合を調停する。画像変換処理部２０３の内部は１２０１から１２１１である。１２０１は１６ビットレジスタであり、メモリ制御部２０６より読み出された２画素分のデータを一時的に記憶する。１２０２、１２０３は比較器であり、２画素データを同時に閾値と大小比較を行い出力する。１２０４は２ビット→４ビット変換レジスタであり、１２０５は４ビット幅のＦＩＦＯメモリである。レジスタ１２０４は比較器１２０２、１２０３からの２画素分の二値化データ（２ビット）を２回受け取り４ビットそろったところでＦＩＦＯメモリ１２０５へ出力する。１２０１から１２０４は内部動作クロックに同期し１２０６から１２１１は画像の入出力クロックに同期して動作するのであるがＦＩＦＯメモリ１２０５はこのクロック速度の違いを吸収するものである。１２０６は二値画像を２ライン分ディレイさせるメモリで２ｋ×８ｂｉｔの容量を持つ。働きは８ｋ×２ｂｉｔのＦＩＦＯメモリと等価であるがバス幅を４倍の８ビット幅にしていることにより１ポートＲＡＭで処理している。画像のクロックにして２クロックに１回アクセスされる。１２０７、１２０８、１２０９はシフトレジスタであり、３画素×３画素のウインドウを作る。１２１０は文字フラグのディレイメモリであり、１２８＋αビットの容量を持つ。１２１１は孤立点除去部であり、シフトレジスタ１２０８の注目画素即ち３×３画素の中心画素のまわりの画素を調べて、孤立点であれば白画素「１」に変換して出力する。ディレイメモリ１２１０から孤立点除去部１２１１への出力はこの注目画素が含まれたブロックの文字フラグＭＦの値であり、文字フラグが「１」であれば孤立点除去を働かせ、「０」であれば休止させて注目画素をスルー出力させる。
【０１１４】
尚、６４×６４の処理ブロックからはずれる部分の二値化閾値はその近傍の６４×６４のブロックの二値化閾値を用いる。
【０１１５】
前述の実施の形態ではブロックのサイズを６４×６４としたが、画像の解像度が倍になった場合は１２８×１２８であり、１／２の場合は３２×３２とする。ブロックサイズが小さくなった場合でも（５）式から（１１）式にある全画素数によって変化するＹによって同じハードで演算精度を確保できる。ブロックサイズを大きくする場合は、輝度頻度記憶ＲＡＭのビット幅（容量）を大きくしてかつ閾値を演算する平均値演算部とスキュー演算部の演算器のビット数も大きくする。即ち、演算系は処理する画像の解像度の最大値によって設計される。
【０１１６】
しかし、十分なサンプリング数（輝度頻度を構成する画素数）が必要であれば、データを間引いて処理できる。例えば４０９６画素で十分であれば、１２８×１２８の領域から輝度頻度は飛び飛びに４０９６画素でとるのである。この場合は閾値演算部の構成は変わらない。また、輝度頻度記憶ＲＡＭのビット幅を２ビット増やして、閾値を演算する平均値演算部とスキュー演算部には輝度頻度記憶ＲＡＭの下位２ビットを除いて入力しても閾値演算部の構成は変わらない。
【０１１７】
この必要とするサンプリング数は画像入力装置の特性等によって決定される。
【０１１８】
また、前記実施の形態ではブロックの大きさを縦横同じにしたが長方形でもよい。
【０１１９】
また、前記実施の形態ではブロックと判定されたブロックのみ孤立点除去を行うとしたが、全ブロックに行ってもよく、全ブロックに対して処理をスルーさせてもよい。
【０１２０】
また、動作周波数に余裕がある場合は輝度頻度記憶ＲＡＭを１ポートＲＡＭで構成してもよい。輝度値に対応するメモリデータの読み出し、＋１加算、メモリデータの書き込みの一連の動作をすることになるので処理クロック数が３倍程度になるが、パイプラインの不整合を監視する回路が不要になる。
【０１２１】
また、同じく輝度頻度を記憶するものをカウンタで構成してもよい。回路規模は大きくなるが１画素を１クロックで処理できるので動作周波数を高くできる。
【０１２２】
以上説明したように、本実施の形態によれば、各処理ごとに必要であったバンドメモリが１ブロックに統一されるため、メモリ制御信号が１組ですみ信号の数を少なくできるためＩＣ化しやすい。また各処理バッファが物理的に分離されていないため各処理の開始のタイミングを自由に設定できる。
【０１２３】
また、輝度頻度記憶メモリを多ポートＲＡＭで構成することによって輝度頻度累計のための周波数を低減することができ、より高速動作が可能になる。
【０１２４】
また、二値化閾値を演算する平均値演算部とスキュー演算部の演算の同期をとってパイプライン化されているため、本来であればシーケンシャルに実行するか、平均値演算部とスキュー演算部のそれぞれに必要な輝度頻度記憶ＲＡＭが１個ですむため、処理の高速化と回路規模増加の回避を同時に実現できる。
【０１２５】
また、画像の文字及び線画部分の孤立点が除去されるため見やすくなり、かつ文字認識の認識率が向上する。また、圧縮効率も向上するので画像の格納スペースとＦＡＸ等の転送速度の向上がなされる。
【０１２６】
また、本実施の形態によれば、数値演算の演算式と演算に用いる数値データにより演算値のとり得る値の予測から、演算の小数点位置を決定して演算値の桁数を切り捨て及び繰り上げを行い、最終演算値を予め設定した有効桁数内に収めることを特徴とする。
【０１２７】
更に、演算の小数点位置は、処理単位ごとに決定することを特徴とする。
【０１２８】
更に、前記決定処理単位は、前記画像の輝度頻度の平均値を求め、前記画像の輝度頻度の偏りを求める単位を処理単位とする決定手段を有することを特徴とする。
【０１２９】
例えば、有効桁数は演算値の必要精度によって決定されることを特徴とする。
【０１３０】
以上の構成により、多値画像の画像処理の演算において、限られたコンピュータの扱える整数の有効数値内で一定の精度を保ち、特に、大きな数値から小さい数値まで収束させるような繰り返し演算の高速化ができるという特有の作用効果が得られる。
【０１３１】
即ち全計算を複数に分割してそれを処理単位とし、演算処理単位毎にデータ範囲を調べて必要とする演算精度を得られる桁数を決定する。この決定した桁数によって整数演算の小数点位置を移動させて演算するのである。このことにより各処理範囲中は整数演算で行うためハード演算の場合はハード量を少なくできる。かつ処理単位毎に最適な小数点位置にするため桁数を少なくして精度を高めることができる。
【０１３２】
【発明の効果】
以上説明した如く本発明によれば、多値画像を２値化するための２値化閾値を決定して２値化処理を行う際に、処理を極めて高速化することができる。
【０１３３】
また、多値画像の画像処理の演算において、限られたコンピュータの扱える整数の有効数値内で一定の精度を保ち、特に、大きな数値から小さい数値まで収束させるような繰り返し演算を高速化ができる。
【図面の簡単な説明】
【図１】本実施の形態における画像処理装置の全体構成を示した図である。
【図２】閾値演算二値化部の構成を示したブロック図である。
【図３】二値化閾値演算部２０５の内部構成を示した図である。
【図４】二値化閾値演算部におけるパイプライン処理を説明するための図である。
【図５】二値化閾値演算部におけるパイプライン処理を説明するための図である。
【図６】画像入力に対するバッファメモリの入出力を示す図である。
【図７】輝度頻度演算部の構成を示した図である。
【図８】輝度頻度演算部における処理タイミングを示した図である。
【図９】閾値演算部の構成を示したブロック図である。
【図１０】閾値演算処理を示したフローチャート図である。
【図１１】閾値演算処理を示したフローチャート図である。
【図１２】閾値演算処理を示したフローチャート図である。
【図１３】閾値演算処理を示したフローチャート図である。
【図１４】閾値演算処理を示したフローチャート図である。
【図１５】閾値演算部におけるタイミングチャート図である。
【図１６】平均値演算部の構成を示したブロック図である。
【図１７】スキュー演算部の構成を示したブロック図である。
【図１８】判定部の構成を示したブロック図である。
【図１９】結果記憶部と画像変換処理部の構成を示したブロック図である。
【図２０】閾値決定処理を説明するための図である。
【図２１】閾値決定処理を説明するための図である。
【図２２】閾値決定処理を説明するための図である。
【符号の説明】
１  画像処理装置
２  画像入力装置
３  画像表示装置
４  入力Ｉ／Ｆ部
５  閾値演算二値化部
６  記憶部
７  ＣＰＵ部
８  文字認識部
９  画像処理部
１０  出力Ｉ／Ｆ部
【図１】
0003673598.tif 000004
【図２】
0003673598.tif 000005
【図３】
0003673598.tif 000006
【図４】
0003673598.tif 000007
【図５】
0003673598.tif 000008
【図６】
0003673598.tif 000009
【図７】
0003673598.tif 000010
【図８】
0003673598.tif 000011
【図９】
0003673598.tif 000012
【図１０】
0003673598.tif 000013
【図１１】
0003673598.tif 000014
【図１２】
0003673598.tif 000015
【図１３】
0003673598.tif 000016
【図１４】
0003673598.tif 000017
【図１５】
0003673598.tif 000018
【図１６】
0003673598.tif 000019
【図１７】
0003673598.tif 000020
【図１８】
0003673598.tif 000021
【図１９】
0003673598.tif 000022
【図２０】
0003673598.tif 000023
【図２１】
0003673598.tif 000024
【図２２】
0003673598.tif 000025