(57)【特許請求の範囲】
【請求項１】
画像処理装置であって、
画像を表す多値画像データを入力する入力手段と、
前記多値画像データの下地を構成する濃度幅として、該多値画像データの画素値の頻度ヒストグラム中の最大頻度となる下地代表濃度を含み、かつ前記下地代表濃度から低濃度方向の濃度の内、最初に所定閾値よりも小さくなる頻度の濃度を下地濃度下限値とし、かつ前記下地代表濃度から高濃度方向の濃度の内、最初に前記所定閾値よりも小さくなる頻度の濃度を下地濃度上限値とする、濃度幅を判定し、該多値画像データが該濃度幅に含まれるか否かに基づいて、該多値画像データより２値画像データを抽出する抽出手段と、
前記２値画像データの配置に基づいて、前記画像を属性毎に複数の画像領域に分割する分割手段と、
前記画像領域内の前記多値画像データを量子化する量子化手段を備え、
前記多値画像データの量子化数は、前記画像領域単位で決定される
ことを特徴とする画像処理装置。
【請求項２】
前記属性は、少なくとも文字、写真を含む
ことを特徴とする請求項１に記載の画像処理装置。
【請求項３】
前記量子化手段は、更に、前記画像領域単位で前記多値画像データの頻度ヒストグラムを生成する生成手段からなり、
前記多値画像データの量子化数は、前記頻度ヒストグラムに基づき決定される
ことを特徴とする請求項１に記載の画像処理装置。
【請求項４】
画像処理方法であって、
画像を表す多値画像データを入力する入力工程と、
前記多値画像データの下地を構成する濃度幅として、該多値画像データの画素値の頻度ヒストグラム中の最大頻度となる下地代表濃度を含み、かつ前記下地代表濃度から低濃度方向の濃度の内、最初に所定閾値よりも小さくなる頻度の濃度を下地濃度下限値とし、かつ前記下地代表濃度から高濃度方向の濃度の内、最初に前記所定閾値よりも小さくなる頻度の濃度を下地濃度上限値とする、濃度幅を判定し、該多値画像データが該濃度幅に含まれるか否かに基づいて、該多値画像データより２値画像データを抽出する抽出工程と、
前記２値画像データの配置に基づいて、前記画像を属性毎に複数の画像領域に分割する分割工程と、
前記画像領域内の前記多値画像データを量子化する量子化工程を備え、
前記多値画像データの量子化数は、前記画像領域単位で決定される
ことを特徴とする画像処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、多値画像データの特徴を判定する画像処理装置及びその方法並びに媒体に関するものである。
【０００２】
【従来の技術】
近年、原稿画像を、その原稿画像内に構成される構成要素で表現する技術が高まりつつある。具体的には、原稿画像を構成する、「画像」、「図形」、「文字」、更に「章」、「節」、「段落」、「タイトル」、「キャプション」等の属性と書式を定義する。そして、定義される属性と書式の情報を出力し、出力される属性と書式の情報に基づいて、原稿画像の表示や検索を行う像域分離技術が実現している。また、これらは、世界的な通信網の整備とともに普及しつつあるインターネットに代表されるネットワークで交換されるデータや、アメリカで標準化されたＳＧＭＬという形で広がりつつある。
【０００３】
また、「複合カラー文書を対象とした構造化カラーファクシミリ」（松木他：画像電子学会誌第２４巻第１号  ｐｐ．２６−３３）のように、属性毎に符号化方式を切り替えることにより、画像を好適に符号化して伝送したり、蓄積することが考えられている。
更に、例えば、特開平８ー３０７２５号には、２値の原稿画像を入力して、上述の画像の属性や書式の情報を判定する旨が記載されている。これは、入力される原稿画像より得られる画像データ中の所定画素領域から低解像度の１画素を抽出し、低解像度の画素の連続する広がりから、画像の属性や書式の情報を判定するものである。そして、判定された属性や書式の情報を原稿画像から抽出したり、所望の属性や書式の情報を持つ領域を抽出することができる。
【０００４】
一方、像域分離技術においては、原稿画像をスキャナ等で入力する際に、その原稿画像に濃度ムラや裏写り、ひいては原稿画像の下地の濃度が濃い場合等には、それらがノイズとして原稿画像より得られる画像データの下地に発生し、その発生したノイズが像域分離処理の精度を低下させていた。また、プリンタ等でそのようなノイズを含む下地を持つ画像データを出力すると、出力画像の画質が劣化して出力されてしまっていた。そのため、上述のように画像データの下地にノイズが発生するような場合は、そのノイズを除去する画像処理装置が存在する。
【０００５】
このような画像データの下地のノイズを除去する画像処理装置は、例えば、原稿画像の濃度の平均値から下地の濃度を判定し、その判定された濃度以下の画像を出力されないように制御することで、画像データの下地に発生するノイズを除去していた。あるいは、原稿画像の入出力濃度のガンマ補正等の補正を行うことで、結果的に画像データの下地に発生するノイズが除去されていた。
【０００６】
【発明が解決しようとする課題】
しかしながら、上記従来の画像処理装置において、原稿画像の濃度の平均値を用いて下地に発生するノイズを除去する方法では、低濃度の文字や連続階調を持つ画像が存在する原稿画像に対しては、それらの濃度が下地の濃度よりも低いために、低濃度の文字や連続の階調を持つ画像の低濃度の部分が出力されないように制御されてしまうので、出力画像の画質が劣化してしまうという問題点があった。
【０００７】
また、ガンマ補正等の補正を行うことで下地に発生するノイズを除去する方法では、原稿画像の下地の濃度が白に近い場合は画像データの下地の濃度の出力が抑えられるので結果的に下地に発生するノイズが除去されるが、下地の濃度が高い場合は画像データの下地の濃度の出力が強調されるため下地に発生するノイズが逆に強められて出力されてしまうという問題点があった。
【０００８】
そのため、これらの方法では、上述のような場合に、像域分離技術の精度の問題や、出力画像の画質の劣化の問題は改善されていなかった。
一方、上記従来の画像処理装置で実行される像域分離処理では、原稿画像を読み取って得られる画像データを２値化し、その２値化して得られる２値画像データに対して像域分離処理を行うため、２値化しやすい「図形」と２値化しにくい「写真」を好適に分離することができないという問題点があった。また、強調を意図して部分的に色文字等が含まれる原稿画像を認識する場合に、その色を認識せずに像域分離を行うため、分離された文字をＯＣＲ等で認識しても、その色の情報が認識されずにいるので、所望のＯＣＲ結果が得られないという問題点があった。
【０００９】
また、下地に発生するノイズを除去した画像データであっても、その下地を構成する濃度に幅があると、画像データを伝送したり、蓄積するために行う符号化処理の効率が悪いという問題点があった。
本願は上述の事情に鑑みてなされたものであり、対象画像の特徴に応じて良好な量子化を行うことを第１の目的としている。
【００１０】
また、本願の第２の目的は、画像データの下地に発生するノイズを好適に除去し、画像データを量子化するための量子化数を好適に判定することにある。
また、本願の第３の目的は、色文字を良好に抽出することにある。
また、本願の第４の目的は、スキャナ等で読み取った原稿画像の画像データの下地に発生するノイズを好適に除去することができ、画像データによる出力画像の画質を向上することにある。
【００１１】
また、画像データの下地に発生するノイズを好適に除去することで、画像データを属性毎の領域に分離する像域分離処理の精度を向上すること、また、画像データの下地に発生するノイズを好適に除去し、ノイズを除去した画像データから好適な下地の濃度を判定し、その判定された濃度を下地の濃度として出力することで、画像データの符号化効率を向上することにある。
【００１２】
上記の目的を達成するための本発明による画像処理装置は以下の構成を備える。即ち、  画像処理装置であって、
画像を表す多値画像データを入力する入力手段と、
前記多値画像データの下地を構成する濃度幅として、該多値画像データの画素値の頻度ヒストグラム中の最大頻度となる下地代表濃度を含み、かつ前記下地代表濃度から低濃度方向の濃度の内、最初に所定閾値よりも小さくなる頻度の濃度を下地濃度下限値とし、かつ前記下地代表濃度から高濃度方向の濃度の内、最初に前記所定閾値よりも小さくなる頻度の濃度を下地濃度上限値とする、濃度幅を判定し、該多値画像データが該濃度幅に含まれるか否かに基づいて、該多値画像データより２値画像データを抽出する抽出手段と、
前記２値画像データの配置に基づいて、前記画像を属性毎に複数の画像領域に分割する分割手段と、
前記画像領域内の前記多値画像データを量子化する量子化手段を備え、
前記多値画像データの量子化数は、前記画像領域単位で決定される。
【００１６】
【発明の実施の形態】
以下、図面を参照して本発明の好適な実施の形態を詳細に説明する。
＜第１の実施の形態＞
図１は第１の実施の形態の画像処理装置の構成を示すブロック図である。
図１において、１は原稿画像を入力する画像入力部であり、ＣＣＤセンサなどの光電変換手段を含むイメージスキャナ等で構成される。ここでは入力する原稿画像を白黒の多値画像（８ビット／画素）として説明を行う。２は画像入力部１より得られる原稿画像の画像データを記憶しておくフレームメモリである。
【００１７】
３はフレームメモリ２から読み出された画像データ（８ビット／画素の多値画像データ）の画素値のヒストグラムを作成するヒストグラム生成部である。
尚、ヒストグラム生成部３は、２５６個のカウンタで構成され、各カウンタは読み出される画像データ（８ビット／画素の多値画像データ）の画素値に対応しており、多値画像データが読み出されるたびにその画素値に対応するカウンタに１が加えられる。
【００１８】
４はヒストグラムから、出力頻度の最大値とその最大値を持つ画素値を出力する最大頻度検出部である。５は最大頻度検出部４で検出された最大値から頻度分布（ヒストグラム）を量子化するための量子化ステップｑを決定する量子化ステップ算出部である。
６は量子化ステップ算出部５で算出された量子化ステップでヒストグラムを量子化する量子化部である。７は１０１個のカウンタで構成され、量子化部６の出力のヒストグラムを生成するヒストグラム生成部である。８はノイズ閾値決定部であり、ヒストグラム生成部７の出力と量子化ステップ算出部５で算出された量子化ステップｑから頻度上のノイズを除去するための頻度ノイズ閾値を決定する。
【００１９】
９はノイズ閾値決定部８で決定された頻度ノイズ閾値とヒストグラム生成部３で生成されたヒストグラムを比較する比較部である。１０は最大頻度検出部４で検出された最大値と比較部９の出力から下地を構成する濃度の幅を求める下地濃度幅検出部である。
１１は下地濃度幅検出部１０で検出された下地を構成する濃度の幅を外部装置に出力する端子である。１２は最大頻度検出部４で検出された下地の濃度を外部装置に出力する端子である。１３はフレームメモリ２の内容を外部装置に出力する端子である。
【００２０】
尚、図１で示される画像処理装置の各構成要素は、不図示のＣＰＵで制御されるものとする。
次に、図１を用いて、画像処理装置において実行される処理について説明する。
まず、処理に先立ち、不図示のＣＰＵはフレームメモリ２と、ヒストグラム生成部３、ヒストグラム生成部７のカウンタの内容を０にクリアする。
【００２１】
続いて、ＣＰＵはユーザの指示に従って、画像入力部１から白黒多値画像（８ビット／画素）を表す画像データを入力し、その画像データをフレームメモリ２に格納する。１画像分の画像データがフレームメモリ２に格納された後、ＣＰＵは、フレームメモリ２から画像データを読み出し、ヒストグラム生成部３に入力する。ヒストグラム生成部３の２５６個のカウンタは、入力される画像データの画素値に対応しており、１画素の画像データが入力されるとその画素値に対応するカウンタの内容に１を加える。
【００２２】
入力された画像データの全ての画素によってヒストグラムが生成された後、ＣＰＵは最大頻度検出部４を動作させ、ヒストグラムの中で出力頻度が最大値を持つ画素値を検出する（つまり、カウンタの値が最大となる画素値）。そして、その検出される出力頻度の最大値ｍと、対応する画素値を出力する。また、この対応する画素値は下地の濃度を示すので、この濃度を下地代表濃度ｂと呼ぶ。この下地代表濃度ｂは端子１２から出力される。
【００２３】
検出された出力頻度の最大値ｍは量子化ステップ算出部５に入力される。量子化ステップ算出部５では、ヒストグラムを正規化するための量子化ステップｑを（１）式に従って決定する。
ｑ＝ｍ／１００      …（１）
決定された量子化ステップｑは量子化部６に入力される。量子化ステップｑが入力されたら、量子化部６はヒストグラム生成部３で生成される出力頻度値ｈ（ｉ）（ｉ＝０〜２５５）（ヒストグラム）を画素値の低い方であるｈ（０）から順に読み出し、（２）式によって量子化し、その量子化結果ｒ（ｉ）（ｉ＝０〜２５５）を得る。
【００２４】
ｒ（ｉ）＝ｈ（ｉ）／／ｑ    （ｉ＝０〜２５５）      …（２）
尚、記号／／は割り算後に小数点以下を四捨五入することを表わす。
ヒストグラム生成部７は量子化部６の出力のヒストグラムを生成する。１０１個のカウンタは、量子化結果ｒ（ｉ）の値に対応しており、対応するカウンタの内容に１を加える。
【００２５】
量子化結果ｒ（ｉ）の全てについてヒストグラムの生成が終えたら、ノイズ閾値決定部８を動作させ、ヒストグラム生成部７のカウンタの内容からノイズ閾値noise_thを決定する。ノイズ閾値決定部８は、ヒストグラム生成部７のカウンタの内容から最大値をとる量子化結果ｍｒの値を検出し、量子化ステップｑを掛けた後、予め設定された値αを加算して得られる値をノイズ閾値として算出する。つまり、（３）式によって得られる値をノイズ閾値noise_thとして算出する。
【００２６】
noise_th＝ｍｒ×ｑ＋α      …（３）
ノイズ閾値決定部８で算出されたノイズ閾値noise_thは、比較部９に入力される。続いて、ヒストグラム生成部３の各カウンタの内容を順に読み出し、ノイズ閾値noise_thと比較し、出力頻度値ｈ（ｉ）がノイズ閾値noise_thより大きければその値を出力し、小さければ「０」を出力する。その結果は下地濃度幅検出部１０に入力される。
【００２７】
下地濃度幅検出部１０は、最大頻度検出部４から下地代表濃度ｂと比較部９から入力された値から、下地を構成する画素の濃度の幅を算出する。この幅は、下地代表濃度ｂを中心として最近傍の画素値において、出力頻度が０になっている値を検出する。図２を用いて、その検出する過程を示す。尚、図２には、ある原稿画像の画像データが持つ画素値とその出力頻度の関係を示しており、横軸に画素値、縦軸に出力頻度で表している。
【００２８】
まず、下地代表濃度ｂから画素値の低い方へ出力頻度の検査を行い、頻度が０になった値ｂｔ0を求める。この値が濃度幅の下限値となるので濃度幅下限値と呼ぶ。同様に、画素値の高い方へ出力頻度の検査を行い、濃度が０になった値ｂｔ1を求める。この値が濃度幅の上限値となるので濃度幅上限値と呼ぶ。尚、この濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1は端子１１から出力される。
【００２９】
次に第１の実施の形態で実行される処理について、図３のフローチャートを用いて説明する。
図３は第１の実施の形態で実行される処理の処理フローを示すフローチャートである。
まず、処理に先立ち、不図示のＣＰＵはフレームメモリ２と、ヒストグラム生成部３、ヒストグラム生成部７のカウンタの内容を０にクリアする。
【００３０】
ステップＳ３０１０で、続いて、ＣＰＵはユーザの指示に従って、画像入力部１から白黒多値画像（８ビット／画素）である原稿画像を読み込み、その画像データをフレームメモリ２に格納する。ステップＳ３０２０で、原稿画像分の画像データがフレームメモリ２に格納された後、ＣＰＵは、フレームメモリ２から画像データを読み出し、ヒストグラム生成部３に入力し、入力された画像データの全ての画素によってヒストグラムを生成する。
【００３１】
ステップＳ３０３０で、ＣＰＵは最大頻度検出部４を動作させ、ヒストグラムの中で出力頻度が最大値を持つ画素値を下地代表濃度ｂとして抽出する。ステップＳ３０４０で、量子化ステップ算出部５で、ヒストグラムを正規化するための量子化ステップｑを決定し、決定された量子化ステップｑを量子化部６に入力する。量子化部６は、決定された量子化ステップｑに基づいて、ヒストグラム生成部３で生成されたヒストグラムを量子化し、ヒストグラム生成部７で量子化部６の出力のヒストグラムを生成する。
【００３２】
ステップＳ３０５０で、ノイズ閾値決定部８を動作させ、量子化されたヒストグラムからノイズ閾値noise_thを算出する。ステップＳ３０６０では、各出力頻度値ｈ（ｉ）について、比較部９において、ヒストグラム生成部３で生成されたヒストグラムの出力頻度値ｈ（ｉ）がノイズ閾値noise_thよりも大きいか否かを比較する。ノイズ閾値noise_thが出力頻度値よりも小さい場合（ステップＳ３０６０でＮＯ）、ステップＳ３０７０で、その値を出力する。一方、ノイズ閾値noise_thが出力頻度値よりも大きい場合（ステップＳ３０６０でＹＥＳ）、ステップＳ３０８０で、「０」を出力する。ステップＳ３０８０ａで、全ての画素値について、ステップＳ３０６０の処理が終了したか否かを判定し、終了するまで順次ステップＳ３０６０〜ステップＳ３０８０を繰り返す。
【００３３】
ステップＳ３０９０で、下地濃度幅検出部１０は、最大頻度検出部４から下地代表濃度ｂと比較部９から入力された値から、下地を構成する画素の濃度の幅として濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を抽出する。
次に、第１の実施の形態で説明される画像処理装置の適用例を説明する。例えば、図４に示されるような画像通信装置に適用させた場合に、実行される動作とその構成を説明する。
【００３４】
図４は第１の実施の形態の画像処理装置を適用させた画像通信装置の構成を示すブロック図である。
図４において、２０は第１の実施の形態の図１に示される画像処理装置である。２１は、画像処理装置２０の端子１１から出力された濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1と、端子１３から出力されたフレームメモリ２の内容を比較する比較部である。２２はラッチであり、タイミング調整を行う。２３はセレクタであり、比較部２１の出力によって、ラッチ２２の出力と画像処理装置２０の端子１２から出力される下地代表濃度ｂを選択して出力する。
【００３５】
２４は入力された画像データを、直交変換、量子化、ハフマン符号化を用いた多値画像データの符号化であるＪＰＥＧ符号化を行うＪＰＥＧ符号化部である。２５は通信プロトコルに合わせてＪＰＥＧ符号化データを送信する通信インタフェースである。２６は電話回線やＬＡＮで構成される通信回線である。
次に図４で実行される処理の概要を説明する。
【００３６】
画像処理装置２０のフレームメモリ２から画像データを画素順で読み込み、端子１３を介してラッチ２２に格納する。同時に比較部２１は、端子１３より入力された画素値と、端子１１より入力された濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を比較し、入力画素値が濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1の間にあれば「１」を、そうでなければ「０」を出力する。
【００３７】
セレクタ２３は、比較部２１の出力が「１」であれば、端子１２から出力された下地代表濃度ｂを選択して出力する。一方、「０」であれば、ラッチ２２でラッチされている値を出力する。ＪＰＥＧ符号化部２４は、セレクタ２３より入力された画素値に対し、ＪＰＥＧ符号化を施し、通信インタフェース２５を介して通信回線２６に出力する。以上の処理を、フレームメモリ２の全ての画像データについて行い、送信を終了したら全ての動作を終了する。
【００３８】
以上のようなＪＰＥＧ符号化の前処理を行うことにより、入力画像の下地を整え、符号化効率を向上させることができる。尚、上述の実施の形態では、ＪＰＥＧ符号化を用いたが、符号化方法としては、他のブロック符号化、差分符号化などを用いても良い。
以上説明したように、第１の実施の形態によれば、画像データの画素値のヒストグラムに基づいて、下地代表濃度ｂと下地の濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0を抽出し、濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0の範囲内に含まれる画素値をすべて下地代表濃度ｂとして出力することで、一定した好適な下地の濃度を出力することができる。また、画素値のヒストグラムを量子化し、量子化されたヒストグラムに基づいて、ノイズ閾値noise_thを算出し、その算出されたノイズ閾値noise_thを用いることで、下地の濃度として出力される出力頻度のノイズを好適に除去することができる。
【００３９】
また、白黒画像に対して、従来より高速で比較的小さい回路規模で好適な下地の濃度判定が可能になり、その結果、下地のノイズを好適に除去できる。また、ノイズによる影響を取り除き、下地を一定濃度にすることができるので、符号化効率を向上させることができる。
＜第２の実施の形態＞
第１の実施の形態では、白黒多値画像の原稿画像の下地の濃度幅と好適な下地濃度を判定する画像処理装置について説明した。第２の実施の形態では、カラー多値画像の原稿画像の下地の濃度幅と好適な下地濃度の判定において、特に、カラー多値画像より得られる輝度画像データを用いて判定を行う下地濃度幅判定部１０９（図６参照）を備える画像処理装置について説明する。
【００４０】
図５は第２の実施の形態の画像処理装置の構成を示すブロック図である。
図５において、１０１は原稿画像を入力する画像入力部であり、カラーイメージスキャナ等で構成される。ここでは入力する原稿画像をカラー多値画像とし、ＲＧＢ各色ごとに１画素あたり８ビットの精度をつ画像データとして説明を行う。１０２は原稿画像をＣＩＥ１９７６Ｌ*ａ*ｂ*画像データ（各成分８ビット）に変換する色変換部である。１０３は色変換部１０２より得られる原稿画像のＬ*ａ*ｂ*画像データを記憶しておくフレームメモリである。
【００４１】
１０４はＣＩＥ１９７６Ｌ*ａ*ｂ*画像データの輝度を表わすＬ*画像データから入力画素が、平坦画素であるか否かを判定する平坦画素判定部である。１０５はラッチであり、制御信号によってその内容を出力するか否かを決定する。
１０６〜１０８は読み込まれたＬ*、ａ*、ｂ*画像データの画素値のヒストグラムを作成するヒストグラム生成部である。
【００４２】
尚、ヒストグラム生成部１０６〜１０８は、それぞれ２５６個のカウンタで構成され、各カウンタは読み込まれる画像データの画素値に対応しており、１画素の画像データの入力に対してその画素値に対応するカウンタに１が加えられる。ヒストグラム生成部１０６はＬ*画像データ、ヒストグラム生成部１０７はａ*画像データ、ヒストグラム生成部１０８はｂ*画像データのヒストグラムを生成する。
【００４３】
１０９はＬ*画像データのヒストグラムから下地を構成する画素のＬ*画像データの下地表示濃度ｂと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を決定する下地濃度判定部である。１１０、１１１は各ヒストグラム生成部１０７、１０８より生成されるヒストグラムから、最大出力頻度を持つ画素値を検出する最大頻度検出部である。
【００４４】
１１２は下地代表濃度ｂＬを、１１３は下地を構成する濃度の幅（濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1）を外部装置に出力する端子である。１１４はａ*画像データの最大出力頻度を持つａ*画像データの画素値を外部に出力する端子である。１１５は画像データの最大頻度を持つｂ*画像データの値を外部装置に出力する端子である。１１６はフレームメモリ１０３の内容を外部装置に出力する端子である。
【００４５】
尚、図５で示される画像処理装置の各構成要素は、不図示のＣＰＵで制御されるものとする。
次に、図５を用いて、画像処理装置において実行される処理について説明する。
まず、処理に先立ち、不図示のＣＰＵはフレームメモリ１０３と、ヒストグラム生成部１０６〜１０８のカウンタの内容を０にクリアする。
【００４６】
続いて、ＣＰＵはユーザの指示に従って、画像入力部１０１からＲＧＢカラー多値画像である原稿画像を読み込み、色変換部１０２によってＬ*ａ*ｂ*画像データに変換し、フレームメモリ１０３に格納する。
原稿画像分のＬ*ａ*ｂ*画像データがフレームメモリ１０３に格納された後、ＣＰＵは、フレームメモリ１０３からＬ*ａ*ｂ*画像データを読み出し、平坦画素判定部１０４とラッチ１０５に入力する。
【００４７】
平坦画素判定部１０４は入力画素とその周囲の画素のＬ*ａ*ｂ*画像データを入力する。フレームメモリ１０３上に格納されるＬ*、ａ*、ｂ*画像データのそれぞれの座標をＬ（ｘ，ｙ）、ａ（ｘ，ｙ）、ｂ（ｘ，ｙ）とした時、Ｌ*ａ*ｂ*画像データの各エッジ量ｅＬ、ｅａ、ｅｂを以下の（４）式によって算出する。
【００４８】
0003745069.tif 000002
これらのエッジ量ｅＬ、ｅａ、ｅｂと閾値Ｔｈ１を比較し、全てが閾値Ｔｈ１以下であれば「１」を、そうでなければ「０」を出力する。
【００４９】
ラッチ１０５は平坦画素判定部１０４からの出力が「０」の時は、格納されているＬ*、ａ*、ｂ*画像データを出力せず、ヒストグラム生成部１０６〜１０８は処理を行わない。一方、平坦画素判定部１０４からの出力が「１」の時は、格納されているＬ*、ａ*、ｂ*画像データを対応するヒストグラム生成部１０６〜１０８に出力する。
【００５０】
そして、ヒストグラム生成部１０６ではＬ*画像データのヒストグラムを作成する。同様に、ヒストグラム生成部１０７ではａ*画像データのヒストグラム、ヒストグラム生成部１０８ではｂ*画像データのヒストグラムを生成する。
フレームメモリ１０３内の全ての画素の平坦画素検出、ヒストグラム処理を終了した後、下地濃度判定部１０９、最大頻度検出部１１０、１１１を起動させる。
【００５１】
ここで、下地濃度判定部１０９の詳細な構成について、図６を用いて説明する。
図６は第２の実施の形態の下地濃度判定部１０９の詳細な構成を示すブロック図である。
図において、１２０は端子であり、ヒストグラム生成部１０６から入力されるヒストグラムの各出力頻度値を入力する。１２１は最大頻度検出部であり、ヒストグラム生成部１０６のヒストグラムから、出力頻度の最大値とその最大値を持つ画素値を出力する最大頻度検出部である。
【００５２】
１２２は最大頻度検出部１２１で検出された最大値から頻度分布（ヒストグラム）を量子化するための量子化ステップｑを決定する量子化ステップ算出部である。
１２３は量子化ステップ算出部１２２で算出された量子化ステップｑでヒストグラムを量子化する量子化部である。１２４は１０１個のカウンタで構成され、量子化部１２３の出力のヒストグラムを生成するヒストグラム生成部である。１２５はノイズ閾値決定部であり、ヒストグラム生成部１２４の出力と量子化ステップ算出部１２２で算出された量子化ステップｑから頻度上のノイズを除去するための頻度ノイズ閾値を決定する。
【００５３】
１２６はノイズ閾値決定部１２５で決定された頻度ノイズ閾値とヒストグラム生成部１０６で生成されたヒストグラムを比較する比較部である。１２７は最大頻度検出部１２１で検出された最大値と比較部１２６の出力から下地を構成する濃度の幅を求める下地濃度幅検出部である。
１２９は下地濃度幅検出部１２７で検出された下地を構成する濃度の幅を外部装置に出力する端子である。１２８は最大頻度検出部１２１で検出された下地の濃度（最大値）を外部装置に出力する端子である。
【００５４】
次に、図６を用いて、下地濃度判定部１０９で実行される処理について説明する。
入力された画像データの全ての画素についてヒストグラムを生成した後、ＣＰＵは最大頻度検出部１２１を動作させ、ヒストグラムの中で出力頻度が最大値を持つ画素値を検出する（つまり、カウンタの値が最大となる画素値）。そして、その検出される出力頻度の最大値ｍと、対応する画素値を出力する。また、この対応する画素値はＬ*の下地の濃度を示すので、この濃度を下地代表濃度ｂＬと呼ぶ。この下地代表濃度ｂＬは端子１２８から出力される。
【００５５】
検出された出力頻度の最大値ｍは量子化ステップ算出部１２２に入力される。量子化ステップ算出部１２２では、ヒストグラムを正規化するための量子化ステップｑを第１の実施の形態で説明される（１）式に従って決定する。
決定された量子化ステップｑは量子化部１２３に入力される。量子化ステップｑが入力されたら、量子化部１２３はヒストグラム生成部１０６で生成される出力頻度値ｈ（ｉ）（ｉ＝０〜２５５）を画素値の低い方から順に読み出し、第１の実施の形態で説明される（２）式によって量子化し、その量子化結果ｒ（ｉ）（ｉ＝０〜２５５）を得る。
【００５６】
ヒストグラム生成部１２４は量子化部１２３の出力のヒストグラムを生成する。１０１個のカウンタは、量子化結果ｒ（ｉ）の値に対応しており、対応するカウンタの内容に１を加える。このカウンタの内容を頻度値ｒｈ（ｋ）（ｋ＝０〜１００）とする。
量子化結果ｒ（ｉ）の全てについてヒストグラムの生成が終えた後、ノイズ閾値決定部１２５を動作させ、ヒストグラム生成部１２４のカウンタの内容、頻度値ｒｈ（ｋ）から最大値をとる量子化結果ｍｒの値と、ｋがｍｒ以上の頻度値ｒｈ（ｋ）で最初の極小値をとるｍｔを検出する。そして、極小値ｍｔに量子化ステップｑを掛けた後、予め設定された値βを加算して得られる値を、ノイズ閾値noise_thとして算出する。
【００５７】
ノイズ閾値決定部１２５で算出されたノイズ閾値noise_thは、比較部１２６に入力される。続いて、ヒストグラム生成部１０６の各カウンタの内容を順に読み出し、ノイズ閾値noise_thと比較し、出力頻度値ｈ（ｉ）がノイズ閾値noise_thより大きければその値を出力し、小さければ「０」を出力する。その結果は下地濃度幅検出部１２７に入力される。
【００５８】
下地濃度幅検出部１２７は、最大頻度検出部１２１から下地代表濃度ｂＬと比較部１２６から入力された値から、下地を構成する画素の濃度の幅を算出する。この幅は、下地代表濃度ｂＬを中心として最近傍の画素値において、出力頻度が０になっている値を検出する。この値は、上述の第１の実施の形態で説明される濃度幅下限値値ｂｔ0と濃度幅上限値ｂｔ1であり、同様の方法で検出する。この濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1は端子１２９から出力される。
【００５９】
再び、図５の画像処理装置で実行される処理について説明する。
最大頻度検出部１１０は、ヒストグラム生成部１０７で生成されたヒストグラムの中で出力頻度が最大値を持つ画素値を検出する（つまり、カウンタの値が最大となる画素値）。そして、その検出される出力頻度の最大値ｍと、対応する画素値を出力する。また、この対応する画素値はａ*の下地の濃度を示すので、この濃度を下地代表濃度ｂａと呼ぶ。この下地代表濃度ｂａは端子１１４から出力される。
【００６０】
最大頻度検出部１１１は、ヒストグラム生成部１０８で生成されたヒストグラムの中で出力頻度が最大値を持つ画素値を検出する（つまり、カウンタの値が最大となる画素値）。そして、その検出される出力頻度の最大値ｍと、対応する画素値を出力する。また、この対応する画素値はｂ*の下地の濃度を示すので、この濃度を下地代表濃度ｂｂと呼ぶ。この下地代表濃度ｂｂは端子１１５から出力される。
【００６１】
図７は第２の実施の形態で実行される処理の処理フローを示すフローチャートである。
まず、処理に先立ち、不図示のＣＰＵはフレームメモリ１０３と、ヒストグラム生成部１０６〜１０８のカウンタの内容を０にクリアする。
ステップＳ７０１で、続いて、ＣＰＵはユーザの指示に従って、ＲＧＢの色成分で表されるカラー多値画像である原稿画像を読み込み、色変換部１０２によってＬ*ａ*ｂ*画像データに変換し、フレームメモリ１０３に格納する。
【００６２】
ステップＳ７０２で、原稿画像分のＬ*ａ*ｂ*画像データがフレームメモリ１０３に格納された後、ＣＰＵは、フレームメモリ１０３からＬ*ａ*ｂ*画像データを読み出し、平坦画素判定部１０４とラッチ１０５に入力する。平坦画素判定部１０４は入力画素とその周囲の画素のＬ*ａ*ｂ*画像データを入力する。フレームメモリ１０３上に格納されるＬ*、ａ*、ｂ*画像データの各画素のエッジ量ｅＬ、ｅａ、ｅｂを算出する。そして、これらのエッジ量ｅＬ、ｅａ、ｅｂと閾値Ｔｈ１を比較する。全てが閾値Ｔｈ１以下である場合、入力画素が平坦が画素であると判定し、そうでない場合は、エッジ画素であると判定する。平坦画素であった場合のみステップＳ７０３に進み、ヒストグラムを生成する。
【００６３】
ステップＳ７０３で、Ｌ*、ａ*、ｂ*画像データを対応するヒストグラム生成部１０６〜１０８に出力し、各ヒストグラム生成部１０６〜１０８において、画像データの全ての画素によってヒストグラムを生成する。
ステップＳ７０４で、ＣＰＵは最大頻度検出部１２１を動作させ、Ｌ*画像データのヒストグラムの中で出力頻度が最大値を持つ画素値を下地代表濃度ｂＬとして抽出する。ステップＳ７０５で、量子化ステップ算出部１２２で、ヒストグラムを正規化するための量子化ステップｑを決定し、決定された量子化ステップｑを量子化部１２３に入力する。量子化部１２３は、決定された量子化ステップｑに基づいて、ヒストグラム生成部１０６で生成されたヒストグラムを量子化し、ヒストグラム生成部１２４で量子化部１２３の出力のヒストグラムを生成する。  ステップＳ７０５で、ノイズ閾値決定部１２５を動作させ、量子化されたヒストグラムからノイズ閾値noise_thを算出する。ステップＳ７０６で、比較部１２６において、ノイズ閾値noise_thがヒストグラム生成部１０６で生成されたヒストグラムの出力頻度値よりも大きいか否かを比較する。ノイズ閾値noise_thが出力頻度値よりも大きい場合（ステップＳ７０６でＹＥＳ）、ステップＳ７０８に進む。一方、ノイズ閾値noise_thが出力頻度値よりも小さい場合（ステップＳ７０６でＮＯ）、ステップＳ７０７に進む。ステップＳ７０７で、比較部１２６は、比較した画素値を下地濃度幅検出部１２９に出力する。ステップＳ７０８で、比較部１２６は、「０」を下地濃度幅検出部１２９に出力する。ステップＳ７０８ａで、全ての出力頻度値について、ステップＳ７０６の処理が終了したか否かを判定し、終了するまで順次ステップＳ７０６〜ステップＳ７０８を繰り返す。
【００６４】
ステップＳ７０９で、下地濃度幅検出部１２７は、最大頻度検出部１２１から下地代表濃度ｂＬと比較部１２６から入力された値から、下地を構成する画素の濃度の幅として濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を抽出する。
ステップＳ７１０で、最大頻度検出部１１０は、ヒストグラム生成部１０７で生成されたヒストグラムの中で出力頻度が最大値を持つ画素値をａ*の下地代表濃度ｂａとして抽出する。ステップＳ７１１で、最大頻度検出部１１１は、ヒストグラム生成部１０８で生成されたヒストグラムの中で出力頻度が最大値を持つ画素値をｂ*の下地代表濃度ｂｂとして抽出する。
【００６５】
次に、第２の実施の形態で説明される画像処理装置の適用例を説明する。例えば、図８に示されるようなプリンタ装置に適用させた場合に、実行される動作とその構成を説明する。
図８は第２の実施の形態の画像処理装置を適用させたプリンタ装置の構成を示すブロック図である。
【００６６】
図８において、１４０は第２の実施の形態の図５に示される画像処理装置である。１４１は白色下地判定部であり、画像処理装置１４０の端子１１２からＬ*画像データの下地代表濃度ｂＬを、画像処理装置１４０の端子１１２からａ*画像データの下地代表濃度ｂａを、画像処理装置１４０の端子１１５からｂ*画像データの下地代表濃度ｂｂを入力し下地が実質的に白色か否かを判定する。
【００６７】
１４２は画像処理装置１４０の端子１１３から出力された濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1と、画像処理装置１４０の端子１１６から出力されたフレームメモリ１０３のＬ*ａ*ｂ*画像データを比較する比較部である。１４３はラッチであり、タイミング調整を行う。１４４はセレクタであり、比較部１４２の出力によって、ラッチ１４３の出力または、画像処理装置１４０の端子１１２から出力される下地代表濃度ｂＬ、端子１１４から出力される下地代表濃度ｂａ、端子１１５から出力される下地代表濃度ｂｂを選択して出力する。
【００６８】
１４５は入力されたＬ*ａ*ｂ*画像データをプリンタのＹＭＣＫインクに最適な値に変換する色変換部である。１４６はＹＭＣＫ画像データを誤差拡散方式で２値化する２値化部である。１４７はＹＭＣＫのインクで２値記録を行う２値プリンタである。
次に、図８で実行される処理について説明する。
【００６９】
画像処理装置１４０のフレームメモリ１０３から画像データを画素順で読み込み、端子１１６を介してラッチ１４３に格納する。同時に比較部１４２は、端子１１６より入力された画素値と、端子１１３より入力された濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を比較し、入力画素値が濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1の間にあれば「１」を、そうでなければ「０」を出力する。
【００７０】
また、白色下地判定部１４１はＬ*、ａ*、ｂ*画像データの下地代表濃度であるｂＬ、ｂａ、ｂｂをそれぞれ端子１１２、１１４、１１５より入力し、（５）式に従って色差ｅを算出する。
ｅ＝√（（２５５−ｂＬ）2＋ｂａ2＋ｂｂ2）      …（５）
色差ｅを閾値Ｔｈ２と比較し、閾値Ｔｈ２以下であれば下地代表濃度ｂＬ、ｂａ、ｂｂの値を２５５、０、０として出力する。一方、閾値Ｔｈ２以上であれば入力された値をそのまま出力する。
【００７１】
そして、セレクタ１４４は比較部１４２の出力が「１」であれば、下地代表濃度ｂＬ、ｂａ、ｂｂを選択して出力し、「０」であれば、ラッチ１４３の値を出力する。色変換部１４５は、セレクタ１４４より入力されるＬ*ａ*ｂ*画像データを、ＹＭＣＫ画像データに変換して出力する。変換された画像データは２値化部１４６に入力され、誤差拡散方式によって２値化される。そして、２値化部１４６で２値化された画像データは、２値プリンタ１４７で、記録媒体に記録される。
【００７２】
以上の処理を、フレームメモリ１０３の全ての画素について、終了したら全ての動作を終了する。
以上説明したように、第２の実施の形態によれば、画像データの画素値のヒストグラムに基づいて、Ｌ*画像データの下地代表濃度ｂＬと下地の濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0を抽出し、濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0の範囲内に含まれる画素値をすべて下地代表濃度ｂＬ、ｂａ、ｂｂとして出力することで、一定した好適な下地の色を出力することができる。また、Ｌ*画像データの画素値のヒストグラムを量子化し、量子化されたヒストグラムに基づいて、ノイズ閾値noise_thを算出し、算出されたノイズ閾値noise_thを用いることで、下地の濃度として出力される出力頻度のノイズを好適に除去することができる。
【００７３】
また、カラー画像に対して、従来より高速で比較的小さい回路規模で好適な下地の濃度判定が可能になり、その結果、下地のノイズを好適に除去できる。また、Ｌ*、ａ*、ｂ*画像データの平坦画素を抽出することにより、下地の濃度判定の精度を向上することができる。更に、ノイズによる影響を取り除き、下地を一定濃度にすることができるので、２値画像の記録品質を向上できる。更に、また、下地代表濃度ｂＬと比較することで、下地領域への記録を抑制できるので、さらに好印象の記録を得られる。
【００７４】
＜第３の実施の形態＞
第３の実施の形態では、領域内に複数色が含まれている場合、輝度画像から異なる色が含まれていることを検知する処理を行うプログラムを、例えば、ＲＯＭ等の記憶媒体に記憶させ、そのプログラムを実行することで、本発明で説明される処理を行う。
【００７５】
図９は第３の実施の形態の画像処理装置の構成を示すブロック図である。
図９おいて、２０１は後述する第３の実施の形態で説明される処理（図１０〜２１のフローチャート参照）を実行する実行プログラムによって動作し、装置を構成する各構成要素の制御を行うＣＰＵである。２０２はその実行プログラムを格納し、実行プログラムを実行するのに必要な記憶容量を確保するプログラムメモリである。２０３はユーザが実行プログラムの実行等の各種指示を入力する端末である。２０４は磁気ディスク等で構成される記憶装置である。２０５は原稿画像の読み込みを行うカラーイメージスキャナである。ここではカラー多値画像データ（ＲＧＢ各８ビット）の原稿画像を読み込むこととする。２０６はカラー多値画像データをＲＧＢの形態で原稿画像分格納する多値フレームメモリである。
【００７６】
２０７はカラー多値画像データを２値化して得られる２値画像データを、原稿画像分格納する２値フレームメモリである。２０８は通信プロトコルに合わせて符号化データを送信する通信インタフェース（通信Ｉ／Ｆ）である。２０９は電話回線やＬＡＮで構成される通信回線である。２１０は装置を構成する各構成要素を接続し、画像データ等の各種データや制御信号を授受するバスである。
【００７７】
以下、第３の実施の形態で実行される処理について、図１０〜図２１のフローチャートを用いて説明する。
尚、第３の実施の形態では、例えば、ユーザの指示によって、原稿画像をスキャナ２０５より読み込む。そして、読み込んで得られる画像データを２値化し、２値化して得られる２値画像データの領域分割を行う。分割された各領域の属性を像域分離処理によって判定し、判定された属性に基づいて２値画像データに含まれる各領域を量子化するための量子化数を決定する。更に、決定された量子化数に基づいて、各領域の構造化データを生成し、生成された構造化データを記憶装置２０４に格納するまでの処理を、例に挙げて説明する。
【００７８】
尚、構造化データとは、各領域の属性に基づいて、領域に対応する２値画像データを好適に符号化した符号化データのことである。
まず、図１０〜図１２のフローチャートを用いて、スキャナ２０５にセットされた原稿画像を、端末２０３から装置を起動することで、原稿画像の画像データを読み込み、読み込まれた画像データに基づいて、画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出するまでの処理について説明する。
【００７９】
図１０〜図１２は第３の実施の形態によって実行される画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出する処理の処理フローを示すフローチャートである。
図１０において、ステップＳ００１で、ＣＰＵ２０１はスキャナ２０５から画像データを読み込み、多値フレームメモリ２０６に格納する。続いて、ステップＳ０２９、で多値フレーム２０６に格納されたカラー画像から、ＹＣｂＣｒ画像データの輝度を表すＹ画像データｐ（ｘ，ｙ）を生成し、プログラムメモリ２０２上に格納する。次に、ステップＳ００２で、プログラムメモリ２０２上に展開される輝度画像データの各画素データｐ（ｘ，ｙ）の画素値をカウントするカウンタを０にリセットする。尚、カウンタは２５６個の頻度hist_pixel［i］（ｉ＝０〜２５５）からなり、例えば、画素値がｉの画素データは、頻度hist_pixel［i］にカウントされる。また、各カウンタでカウントされる値は各画素値の出力頻度を示す。
【００８０】
ステップＳ００３で、プログラムメモリ２０２上より輝度画像データの画素データｐ（ｘ，ｙ）の画素値を順次読み込み、すべての画素データｐ（ｘ，ｙ）の画素値が読み込まれたか否かを判定する。そして、すべての画素データｐ（ｘ，ｙ）の画素値が読み込まれるまでは、ステップＳ００４で、順次読み込まれる画素データｐ（ｘ，ｙ）の画素値に対応する頻度hist_pixel［p(x,y)］の内容を１インクリメントする。
【００８１】
そして、各画素データｐ（ｘ，ｙ）の画素値の読み込みが終了したら、ステップＳ００６に進む。尚、各画素データｐ（ｘ，ｙ）の画素値の読み込みが終了すると、頻度hist_pixel［i］に示される各画素値の出力頻度によって、画像データの画素値の出力頻度のヒストグラムが生成される。ステップＳ００６で、生成されたヒストグラムの各画素値の出力頻度と比較するための変数max_hist、比較の結果に基づいて決定される下地代表濃度bg_value、比較した画素値の数をカウントするループカウンタｉの内容を０にリセットする。
【００８２】
ステップＳ００７で、生成されたヒストグラムから各画素値の頻度hist_pixel［i］を読み込み、すべての頻度hist_pixel［i］が読み込まれたか否かを判定する。そして、すべての頻度hist_pixel［i］が読み込まれるまでは、ステップＳ００８で、順次読み込まれるhist_pixel［i］と変数max_histを比較する。頻度hist_pixel［i］が変数max_histより大きい場合（ステップＳ００８でＹＥＳ）、ステップＳ００９に進む。ステップＳ００９で、変数max_histに頻度hist_pixel［i］を代入し、下地代表濃度bg_valueにループカウンタｉの内容を代入する。一方、頻度hist_pixel［i］が変数max_histより小さい場合（ステップＳ００８でＮＯ）、ステップＳ０１０に進む。
【００８３】
ステップＳ０１０で、ループカウンタｉの内容を１インクリメントする。そして、すべての頻度hist_pixel［i］の比較が終了したら、つまり、ループカウンタｉの内容が２５５になったら、ステップＳ０１１に進む。
図１１において、ステップＳ０１１で、ヒストグラムを正規化するための量子化ステップmax_hist／１００を算出した後に、（６）式に従って、量子化頻度hist_q［i］を算出する。
【００８４】
hist_q［i］＝  hist_pixel［i］／／（max_hist／１００）  …（６）
尚、記号／／は割り算後に小数点以下を四捨五入することを表す。
次に、ステップＳ０１２で、各量子化頻度hist_q［i］の値をカウントするカウンタhist_hist［i］の内容を０にリセットする。ステップＳ０１３で、読み込まれる量子化頻度hist_q［i］の数をカウントするループカウンタｉの内容を０にリセットする。
【００８５】
ステップＳ０１４で、読み込まれる量子化頻度hist_q［i］を順次読み込み、すべての量子化頻度hist_q［i］が読み込まれたか否かを判定する。そして、すべての量子化頻度hist_q［i］が読み込まれるまでは、ステップＳ０１５で、順次読み込まれる量子化頻度hist_q［i］の出力値をカウンタhist_hist［hist_q［i］］でカウントする。ステップＳ０１６で、ループカウンタｉの内容を１インクリメントする。
【００８６】
そして、全ての量子化頻度hist_q［i］の読み込みが終了したら、ステップＳ０１７に進む。尚、全ての量子化頻度hist_q［i］の読み込みが終了すると、各カウンタhist_hist［i］に示される値によって、量子化頻度hist_q［i］のヒストグラムが生成される。ステップＳ０１７で、生成されたヒストグラムの各量子化頻度hist_hist［i］と比較するための変数max_hist_q、比較の結果に基づいて決定されるノイズ閾値noise_th、比較した量子化頻度hist_hist［i］の数をカウントするループカウンタｉの内容を０にリセットする。
【００８７】
ステップＳ０１８で、生成されたヒストグラムから各量子化頻度hist_hist［i］を読み込み、すべての量子化頻度hist_hist［i］が読み込まれたか否かを判定する。そして、すべての量子化頻度hist_hist［i］が読み込まれるまでは、ステップＳ０１９で、順次読み込まれる量子化頻度hist_hist［i］と変数max_hist_qを比較する。量子化頻度hist_hist［i］が変数max_hist_qより大きい場合（ステップＳ０１９でＹＥＳ）、ステップＳ０２０に進む。ステップＳ０２０で、変数max_hist_qに頻度hist_hist［i］を代入し、ノイズ閾値noise_thにループカウンタｉの内容を代入する。一方、量子化頻度hist_hist［i］が変数max_hist_qより小さい場合（ステップＳ０１９でＮＯ）、ステップＳ０２１に進む。
【００８８】
ステップＳ０２１で、ループカウンタｉの内容を１インクリメントする。そして、すべての量子化頻度hist_hist［i］の比較が終了したら、つまり、ループカウンタｉの内容が２５５になったら、ステップＳ０２２に進む。
図１２において、ステップＳ０２２で、（７）式に従って、新たなノイズ閾値noise_thを算出する。
【００８９】
noise_th＝  （noise_th＋γ）×（max_hist_q／１００）  …（７）
ステップＳ０２３で、下地濃度下限値ｂｔ0として下地代表濃度bg_valueから１を引いたものを算出する。ステップＳ０２４で、順次、頻度hist_pixel［bt0］と新たなノイズ閾値noise_thを比較する。そして、頻度hist_pixel［i］がノイズ閾値noise_thよりも小さくなるまで、ステップＳ０２５で、下地濃度下限値ｂｔ0から１デクリメントする。
【００９０】
そして、頻度hist_pixel［bt0］がノイズ閾値noise_thよりも小さくなったら、ステップＳ０２６で、下地濃度上限値ｂｔ1として下地代表濃度bg_valueから１を足したものを算出する。尚、頻度hist_pixel［bt0］がノイズ閾値noise_thよりも小さくなった時の下地濃度下限値ｂｔ0が、下地濃度下限値ｂｔ0となる。
ステップＳ０２７で、順次、頻度hist_pixel［bt1］と新たなノイズ閾値noise_thを比較する。そして、頻度hist_pixel［bt1］がノイズ閾値noise_thよりも小さくなるまで、ステップＳ０２８で、下地濃度下限値ｂｔ１に１インクリメントする。そして、頻度hist_pixel［bt1］がノイズ閾値noise_thよりも小さくなったら、処理を終了する。尚、頻度hist_pixel［bt1］がノイズ閾値noise_thよりも小さくなった時の下地濃度上限値ｂｔ1が、下地濃度上限値ｂｔ1となる。
【００９１】
以上、図１０〜図１２のフローチャートで説明された処理によって、画像データの下地代表濃度bg_value、下地濃度下限値ｂｔ0、下地濃度上限値ｂｔ1が算出される。
続いて、図１３のフローチャートを用いて、画像データを像域分離処理を行うために画像データを２値化する処理について説明する。
【００９２】
図１３は第３の実施の形態で実行される画像データを２値化する処理の処理フローを示すフローチャートである。
ステップＳ１０１で、プログラムメモリ２０２上に展開される輝度画像データの各画素データｐ（ｘ，ｙ）を順次読み込む。そして、ステップＳ１０２で、すべての画素データｐ（ｘ，ｙ）に対し、後述のステップＳ１０３で実行される処理が終了したか否かを判定する。そして、ステップＳ１０３で、すべての画素データｐ（ｘ，ｙ）に対し、２値画像データｂ（ｘ，ｙ）に変換する２値化を行う。２値化の方法は、順次読み込まれる画素データｐ（ｘ，ｙ）の画素値が下地濃度下限値ｂｔ0以上でかつ下地濃度上限値ｂｔ1以下であるかを判定する。
【００９３】
そして、画素データｐ（ｘ，ｙ）が下地濃度下限値ｂｔ0以上でかつ下地濃度上限値ｂｔ1以下であれば、ステップＳ１０５で、その画素データｐ（ｘ，ｙ）の２値画像データｂ（ｘ，ｙ）を「０」として、２値フレームメモリ２０７の対応する領域に書き込む。一方、画素データｐ（ｘ，ｙ）が下地濃度下限値ｂｔ0以上でないかまたは下地濃度上限値ｂｔ1以下でなければ、ステップＳ１０４で、その画素データｐ（ｘ，ｙ）の２値画像データｂ（ｘ，ｙ）を「１」として、２値フレームメモリ２０７の対応する領域に書き込む。
【００９４】
プログラムメモリ２０２に上の全ての画素データｐ（ｘ，ｙ）について、２値化されたら、処理を終了する。
以上、図１３のフローチャートで説明された処理によって、２値フレームメモリ２０７に、多値フレームメモリ２０６上に格納される画像データの各画素データｐ（ｘ，ｙ）の２値化された２値画像データｂ（ｘ，ｙ）が格納される。
【００９５】
続いて、図１４〜図１７のフローチャートを用いて、２値フレームメモリ２０７上に格納された２値画像データを領域分割し、分割された領域の属性を像域分離処理によって判定する。そして、判定された属性に基づいて２値画像データに含まれる各領域を量子化するための量子化数を決定する処理について説明する。
図１４〜図１７は第３の実施の形態で実行されるの２値画像データに含まれる各領域を量子化するための量子化数を決定する処理の処理フローを示すフローチャートである。
【００９６】
図１４において、ステップＳ２０１で、２値フレームメモリ２０７から２値画像データを読み込む。ステップＳ２０２で、読み込まれた２値画像データに対し、類似する属性を持つ領域毎に分割する。そして、分離された領域数をカウンタarea_countでカウントする。また、各領域の位置座標と大きさを求める。ステップＳ２０３で、カウントされた各領域に対して、各領域に含まれる「１」である２値画像データの塊の密度や形状、並びから「画像（写真）」、「図形」、「文字」等の領域の属性を判定する像域分離処理を行う。ここでは、例えば、特開平８ー３０７２５号に記載されている像域分離処理の方法を用いて、像域分離を行う。
【００９７】
具体的に以下のように行う。
まず、２値データについて、所定周期で「１」の塊が連続する場合には、文字列である可能性が高いので、「文字」領域と判定する。
次に「文字」領域以外の領域については、「１」の密度が比較的高い塊は写真である可能性が高いので「画像（写真）」と判定する。
【００９８】
残りの領域のうち「１」の密度が比較的低く、かつ所定の形状を有するものを「図形」と判定する。
次に、カウントされた領域に対し、画像表現に必要な量子化数を決定する量子化数決定処理を、ステップＳ２０４以降で行う。
ステップＳ２０４で、ループカウンタｋの値を１にセットする。また、ループカウンタｋは、各領域に対して量子化数決定処理が終了する毎に、１インクリメントされ、そのカウント値とカウンタarea_countでカウントされた領域の値が対応している。ステップＳ２０５で、ループカウンタｋの値がカウンタarea_countの値よりも大きいか否かを判定する。ループカウンタｋの値がカウンタarea_countの値よりも小さい場合（ステップＳ２０５でＮＯ）、ステップＳ２０６に進む。一方、ループカウンタｋの値がカウンタarea_countの値よりも大きい場合（ステップＳ２０５でＹＥＳ）、すべてのカウントされた領域に対して、量子化数決定処理がなされたことになるので、処理を終了する。
【００９９】
ステップＳ２０６で、プログラムメモリ２０２からループカウンタｋの値に対応する領域の画素データｐ（ｘ，ｙ）の画素値をカウントするカウンタを０にリセットする。尚、カウンタは２５６個の頻度hist_pixel［i］（ｉ＝０〜２５５）からなり、例えば、画素値がｉの画素データは、頻度hist_pixel［i］にカウントされる。また、各カウンタでカウントされる値は各画素値の出力頻度を示す。
【０１００】
ステップＳ２０７で、プログラムメモリ２０２からループカウンタｋの値に対応する領域の画素データｐ（ｘ，ｙ）の画素値を順次読み込み、すべての画素データｐ（ｘ，ｙ）の画素値が読み込まれたか否かを判定する。そして、すべての画素データｐ（ｘ，ｙ）の画素値が読み込まれるまでは、ステップＳ２０８で、順次読み込まれる画素データｐ（ｘ，ｙ）の画素値に対応する頻度hist_pixel［p(x,y)］の内容を１インクリメントする。そして、全ての画素値の読み込みが終了したら、ステップＳ２０９に進む。尚、全ての画素値の読み込みが終了すると、頻度hist_pixel［i］に示される各画素値の出力頻度によって、画像データの画素値の出力頻度のヒストグラムが生成される。
【０１０１】
図１５においてステップＳ２０９で、生成されたヒストグラムの各画素値の出力頻度と比較するための変数max_hist、比較の結果に基づいて決定される下地代表濃度bg_value、比較した画素値の数をカウントするループカウンタｉの内容を０にリセットする。
ステップＳ２１０で、生成されたヒストグラムから各画素値の頻度hist_pixel［i］を読み込み、すべての頻度hist_pixel［i］が読み込まれたか否かを判定する。そして、すべての頻度hist_pixel［i］が読み込まれるまでは、ステップＳ２１１で、順次読み込まれる頻度hist_pixel［i］と変数max_histを比較する。頻度hist_pixel［i］が変数max_histより大きい場合（ステップＳ２１１でＹＥＳ）、ステップＳ２１２に進む。ステップＳ２１２で、変数max_histに頻度hist_pixel［i］を代入し、下地代表濃度bg_valueにループカウンタｉの内容を代入する。一方、頻度hist_pixel［i］が変数max_histより小さい場合（ステップＳ２１１でＮＯ）、ステップＳ２１３に進む。
【０１０２】
ステップＳ２１３で、ループカウンタｉの内容を１インクリメントする。そして、すべての頻度hist_pixel［i］の比較が終了したら、つまり、ループカウンタｉの内容が２５５になったら、ステップＳ２１４に進む。
ステップＳ２１４で、ヒストグラムを正規化するための量子化ステップmax_hist／１００を算出した後に、（６）式に従って、量子化頻度hist_q［i］を算出する。
【０１０３】
次に、ステップＳ２１５で、各量子化頻度hist_q［i］の値をカウントするカウンタhist_hist［i］の内容を０にリセットする。ステップＳ２１６で、読み込まれる量子化頻度hist_q［i］の数をカウントするループカウンタｉの内容を０にリセットする。
ステップＳ２１７で、読み込まれる量子化頻度hist_q［i］を順次読み込み、すべての量子化頻度hist_q［i］が読み込まれたか否かを判定する。そして、すべての量子化頻度hist_q［i］が読み込まれるまでは、ステップＳ２１８で、順次読み込まれる量子化頻度hist_q［i］の出力値をカウンタhist_hist［hist_q［i］］でカウントする。ステップＳ２１９で、ループカウンタｉの内容を１インクリメントする。
【０１０４】
そして、全ての量子化頻度hist_q［i］の読み込みが終了したら、ステップＳ２２０に進む。尚、全ての量子化頻度hist_q［i］の読み込みが終了すると、カウンタhist_hist［i］（ｉ＝０〜１００）に示される値によって、量子化頻度hist_q［i］のヒストグラムが生成される。
図１６において、ステップＳ２２０で、生成されたヒストグラムの量子化頻度hist_hist［i］と比較するための変数max_hist_q、比較の結果に基づいて決定されるノイズ閾値noise_th、比較した量子化頻度hist_q［i］の数をカウントするループカウンタｉの内容を０にリセットする。
【０１０５】
ステップＳ２２１で、生成されたヒストグラムからカウンタhist_hist［i］を読み込み、すべてのカウンタhist_hist［i］が読み込まれたか否かを判定する。そして、すべてのカウンタhist_hist［i］が読み込まれるまでは、ステップＳ２２２で、順次読み込まれるカウンタhist_hist［i］と変数max_hist_qを比較する。カウンタhist_hist［i］が変数max_hist_qより大きい場合（ステップＳ２２２でＹＥＳ）、ステップＳ２２３に進む。ステップＳ２２３で、変数max_hist_qに頻度hist_hist［i］を代入し、ノイズ閾値noise_thにループカウンタｉの内容を代入する。一方、量子化頻度hist_hist［i］が変数max_hist_qより小さい場合（ステップＳ２２２ＮＯ）、ステップＳ２２４に進む。
【０１０６】
ステップＳ２２４で、ループカウンタｉの内容を１インクリメントする。そして、すべての量子化頻度hist_hist［i］の比較が終了したら、つまり、ループカウンタｉの内容が１００になったら、ステップＳ２２５に進む。
ステップＳ２２５で、ノイズ閾値noise_thにγを加算して得られる新たなノイズ閾値noise_thを算出する。
【０１０７】
図１７において、ステップＳ２２６で、生成されたヒストグラムの量子化頻度hist_q［i］と新たなノイズ閾値noise_thを比較し、その比較した数をカウントをカウントするループカウントｉ、ヒストグラムに存在する量子化頻度hist_q［i］の極大値の数を示す変数ex_countの内容を０にリセットする。
ステップＳ２２７で、生成されたヒストグラムから量子化頻度hist_q［i］を読み込み、すべての量子化頻度hist_q［i］が読み込まれたか否かを判定する。そして、すべての量子化頻度hist_q［i］が読み込まれるまでは、ステップＳ２２８で、順次読み込まれる量子化頻度hist_q［i］と新たなノイズ閾値noise_thを比較する。量子化頻度hist_q［i］が新たなノイズ閾値noise_thより大きい場合（ステップＳ２２８でＹＥＳ）、ステップＳ２２９に進む。ステップＳ２２９で、量子化頻度hist_q［i］が極大値であるか否かを判定し、極大値である場合（ステップＳ２２９でＹＥＳ）、ステップＳ２３０に進み、極大値でない場合（ステップＳ２２９でＮＯ）、ステップＳ２３１に進む。ステップＳ２３０で、変数ex_countを１インクリメントし、ステップＳ２３１進む。一方、量子化頻度hist_q［i］が新たなノイズ閾値noise_thより小さい場合（ステップＳ２２８でＮＯ）、ステップＳ２３１に進む。
【０１０８】
ステップＳ２３１で、ループカウンタｉの内容を１インクリメントする。そして、すべての量子化頻度hist_q［i］の比較が終了したら、つまり、ループカウンタｉの内容が２５５になったら、ステップＳ２３２に進む。
ステップＳ２３２で、変数ex_countが２以上であるか否かを判定する。変数ex_countが２以上でない場合（ステップＳ２３２でＹＥＳ）、ステップＳ２３４に進み、ステップＳ２３４で、領域の画像の属性を示すフラグbi_mul_flagの内容を「１」にセットした後、ステップＳ２３８に進む。尚、変数ex_countが２以上でない場合は、領域の画像が単色の文字画像であると判断し、変数ex_countが２以上である場合は、領域の画像が複数色の文字画像と判断する。
【０１０９】
一方、変数ex_countが２以上である場合（ステップＳ２３２でＮＯ）、ステップＳ２３３に進む。ステップＳ２３３で、変数max_hist_qが閾値Ｔｈ３以上であるか否かを判定する。変数max_hist_qが閾値Ｔｈ３以上である場合（ステップＳ２３３でＹＥＳ）、ステップＳ２３５に進み、ステップＳ２３５で、画像内には変数ex_countの濃度が存在するとして、領域の画像の属性を示すフラグbi_mul_flagに変数ex_countの内容を代入し、ステップＳ２３６に進む。尚、変数max_hist_qがＴｈ３以上でない場合は、領域の画像が連続階調の画像であると判断し、変数max_hist_qがＴｈ３以上である場合は、領域の画像が複数色の多値画像と判断する。
【０１１０】
ステップＳ２３６で、フラグbi_mul_flagの内容に示される値に基づいて、領域を構成する色の輝度値を抽出する。領域内にはフラグbi_mul_flagの内容に示される値だけ色が存在する。量子化頻度hist_q［i］からフラグbi_mul_flagの内容の個数の極大値を持つ輝度pm［g］（g＝１〜bi_mul_flag）（これを代表輝度値と呼ぶ）。これによって、領域内の画像表現に必要な量子化数と、表現に必要な色の輝度値が抽出され、その領域に対する量子化数決定処理を終了する。この後、ステップＳ２３８に進む。
【０１１１】
一方、変数max_hist_qが閾値Ｔｈ３以上でない場合（ステップＳ２３３でＮＯ）、領域の画像の属性を示すフラグbi_mul_flagの内容を「０」にセットした後、ステップＳ２３８に進む。
ステップＳ２３８で、ループカウンタｋの内容を１インクリメントする。そして、すべての領域に対し画像表現に必要な量子化数を決定する量子化数決定処理が行われたら、つまり、ループカウンタｋの内容がカウンタarea_countの値になったら、すべての処理を終了する。
【０１１２】
以上、図１４〜図１７のフローチャートで説明される処理によって、２値フレームメモリ２０７上に格納された２値画像データを領域分割し、分割された領域の属性が像域分離処理によって判定される。そして、判定された属性に基づいて２値画像データに含まれる各領域を量子化するための量子化数が決定される。
続いて、図１８〜図２１のフローチャートを用いて、２値画像データに含まれる各領域の属性と対応する量子化数に基づいて、２値画像データに含まれる各領域の構造化データを生成する処理について説明する。
【０１１３】
図１８〜図２１は第３の実施の形態で実行される２値画像データに含まれる各領域の構造化データを生成する処理の処理フローを示すフローチャートである。
図１８において、ステップＳ３０１で、ループカウンタｋの値を１にセットする。また、ループカウンタｋは、各領域に対して構造化データを生成する処理が終了する毎に、１インクリメントされ、そのカウント値とカウンタarea_countでカウントされた領域の値が対応している。ステップＳ３０２で、ループカウンタｋの値がカウンタarea_countの値よりも大きいか否かを判定する。ループカウンタｋの値がカウンタarea_countの値よりも小さい場合（ステップＳ３０２でＮＯ）、ステップＳ３０３に進む。一方、ループカウンタｋの値がカウンタarea_countの値よりも大きい場合（ステップＳ３０２でＹＥＳ）、すべてのカウントされた領域に対して、構造化データを生成する処理がなされたことになるので、処理を終了する。
【０１１４】
ステップＳ３０３で、ループカウンタｋの値に対応する領域の像域分離処理による属性が「文字」であるか否かを判定する。領域の属性が「文字」である場合（ステップＳ３０３でＹＥＳ）、以下、後述するステップＳ３０７〜ステップＳ３１２で説明される処理を行う。一方、領域の属性が「文字」でない場合（ステップＳ３０３でＮＯ）、ステップＳ３０４に進む。
【０１１５】
以下、領域の属性が「文字」である場合に実行される処理について、図１９のフローチャートを用いて説明する。
図１９は第３の実施の形態の領域の属性が「文字」である場合に実行される処理の処理フローを示すフローチャートである。
ステップＳ３０７で、領域の属性が「文字」である領域のフラグbi_mul_flagが「１」であるか否かを判定する。領域のフラグbi_mul_flagが「１」である場合（ステップＳ３０７でＹＥＳ）、単色の「文字」領域であるので、ステップＳ３０９に進み、領域の属性が「文字」である領域のＯＣＲを行った後、ステップＳ３０６に進む。一方、領域のフラグbi_mul_flagが「１」でない場合（ステップＳ３０７でＮＯ）、ステップＳ３０８に進む。
【０１１６】
尚、領域のフラグbi_mul_flagが「１」である場合は、その領域は単色の「文字」から構成されると判断され、領域のフラグbi_mul_flagが「０」である場合は、その領域は連続階調の画像から構成されると判断され、領域のフラグbi_mul_flagが「１」でも「０」でもない場合は、その領域は複数色の「文字」から構成されると判断される。また、ＯＣＲの結果から得られた文字列は、その対応する文字コード、座標、領域サイズとともに構造化データから構成される構造化文書の書式にしたがって記憶装置２０４の所定の領域に格納される。
【０１１７】
ステップＳ３０８で、領域の属性が「文字」である領域のフラグbi_mul_flagが「０」であるか否かを判定する。領域のフラグbi_mul_flagが「０」でない場合（ステップＳ３０８でＮＯ）、ステップＳ３１０に進む。ステップＳ３１０で、ステップＳ２３６で得られた領域の量子化数と各代表輝度値pm［g］より、各代表輝度値毎のビットプレーン画像をプログラムメモリ２０２の輝度画像から生成する。
【０１１８】
ここで、代表色の抽出は以下のように行う。まず、３個のバッファを用意し、各バッファをそれぞれＲＧＢ値に対応させる。更に、画素数カウンタcpを０にリセットしておく。ビットプレーン画像の画素値と同じ位置のカラー画像データを多値フレームメモリ２０６から読み出し、画素値ｐ（ｘ，ｙ）が処理するビットプレーン画像の画素値が１であれば、バッファに格納したＲＧＢの値に読みだしたカラー画像データのＲＧＢ各色の値をそれぞれ加算して、再度バッファに格納する。更に、画素数カウンタcpの内容を１インクリメントする。領域内の全ての画素について処理が終わったら、各バッファの内容を画素カウンタcpで割ってＲＧＢ毎の平均値を求め、これらを抽出された色とする。これを各代表輝度値について行い、全ての代表輝度値について、色の抽出が終了したら、その領域に対する量子化決定処理を終了する。この後、ステップＳ３１１に進む。
【０１１９】
ステップＳ３１１で、領域の属性が「文字」である領域のＯＣＲを各代表輝度値毎に行った後、ステップＳ３０６に進む。一方、領域のフラグbi_mul_flagが「０」である場合（ステップＳ３０８でＹＥＳ）、ステップＳ３１２に進む。尚、ステップＳ３１１のＯＣＲの結果から得られた文字列は、各文字列の色、対応する文字コード、座標、領域サイズとともに構造化データから構成される構造化文書の書式にしたがって記憶装置２０４の所定の領域に格納される。
【０１２０】
ステップＳ３１２で、領域の属性が「文字」である領域のＪＰＥＧ符号化を行い、符号化データとその座標と領域サイズを構造化データを構成する構造化文書の書式にしたがって記憶装置２０４の所定の領域に格納される。そして、領域のＪＰＥＧ符号化が終了したら、ステップＳ３０６に進む。
図１８のフローチャートに戻る。
【０１２１】
ステップＳ３０４で、ループカウンタｋの値に対応する領域の像域分離処理による属性が「図形」であるか否かを判定する。領域の属性が「図形」である場合（ステップＳ３０４でＹＥＳ）、以下、後述するステップＳ３１３〜ステップＳ３１８で説明される処理を行う。一方、領域の属性が「図形」でない場合（ステップＳ３０４でＮＯ）、ステップＳ３０５に進む。
【０１２２】
以下、領域の属性が「図形」である場合に実行される処理について、図２０のフローチャートを用いて説明する。
図２０は第３の実施の形態の領域の属性が「図形」である場合に実行される処理の処理フローを示すフローチャートである。
ステップＳ３１３で、領域の属性が「図形」である領域のフラグbi_mul_flagが「１」であるか否かを判定する。領域のフラグbi_mul_flagが「１」である場合（ステップＳ３１３でＹＥＳ）、ステップＳ３１５に進み、領域の属性が「図形」である領域のアウトライン抽出によるベクトル化を行った後、ステップＳ３０６に進む。一方、領域のフラグbi_mul_flagが「１」でない場合（ステップＳ３１３でＮＯ）、ステップＳ３１４に進む。
【０１２３】
尚、領域のフラグbi_mul_flagが「１」である場合は、その領域は単色の「図形」から構成されると判断され、領域のフラグbi_mul_flagが「０」である場合は、その領域は連続階調画像の「図形」から構成されると判断され、領域のフラグbi_mul_flagが「１」でも「０」でもない場合は、その領域は複数色の「図形」から構成されると判断される。また、ベクトル化の結果から得られたベクトルは、その座標、領域サイズとともに構造化データから構成される構造化文書の書式にしたがって記憶装置２０４の所定の領域に格納される。
【０１２４】
ステップＳ３１４で、領域の属性が「図形」である領域のフラグbi_mul_flagが「０」であるか否かを判定する。領域のフラグbi_mul_flagが「０」でない場合（ステップＳ３１４でＮＯ）、ステップＳ３１６に進む。ステップＳ３１６で、ステップＳ２３６で得られた領域の量子化数と各代表輝度値より、各代表輝度値毎のビットプレーン画像を生成する。ステップＳ３１７で、領域の属性が「図形」である領域のアウトライン抽出によるベクトル化を各代表輝度値毎に行った後、ステップＳ３０６に進む。一方、領域のフラグbi_mul_flagが「０」である場合（ステップＳ３１４でＹＥＳ）、ステップＳ３１８に進む。尚、ステップＳ３１７のベクトル化の結果から得られたベクトルは、各色の座標、領域サイズとともに構造化データから構成される構造化文書の書式にしたがって記憶装置２０４の所定の領域に格納される。
【０１２５】
ステップＳ３１８で、領域の属性が「図形」である領域のＪＰＥＧ符号化を行い、符号化データとその座標と領域サイズを構造化データを構成する構造化文書の書式にしたがって記憶装置２０４の所定の領域に書き込む。そして、領域のＪＰＥＧ符号化が終了したら、ステップＳ３０６に進む。
図１８のフローチャートに戻る。
【０１２６】
ステップＳ３０５で、ループカウンタｋの値に対応する領域の像域分離処理による属性が「写真」であるか否かを判定する。領域の属性が「写真」である場合（ステップＳ３０５でＹＥＳ）、以下、後述するステップＳ３１９〜ステップＳ３２４で説明される処理を行う。一方、領域の属性が「写真」でない場合（ステップＳ３０５でＮＯ）、ステップＳ３０６に進む。
【０１２７】
以下、領域の属性が「写真」である場合に実行される処理について、図２１のフローチャートを用いて説明する。
図２１は第３の実施の形態の領域の属性が「写真」である場合に実行される処理の処理フローを示すフローチャートである。
ステップＳ３１９で、領域の属性が「写真」である領域のフラグbi_mul_flagが「１」であるか否かを判定する。領域のフラグbi_mul_flagが「１」である場合（ステップＳ３１９でＹＥＳ）、ステップＳ３２０に進み、領域の属性が「写真」である領域のＪＢＩＧ符号化を行った後、ステップＳ３０６に進む。一方、領域のフラグbi_mul_flagが「１」でない場合（ステップＳ３１９でＮＯ）、ステップＳ３２０に進む。
【０１２８】
尚、領域のフラグbi_mul_flagが「１」である場合は、その領域は単色の「写真」から構成されると判断され、領域のフラグbi_mul_flagが「０」である場合は、その領域は単色の連続階調画像の「写真」から構成されると判断され、領域のフラグbi_mul_flagが「１」でも「０」でもない場合は、その領域は複数色の「写真」から構成されると判断される。尚、ＪＢＩＧ符号化の結果から得られた符号化データは、その座標、領域サイズとともに構造化データから構成される構造化文書の書式にしたがって記憶装置２０４の所定の領域に格納される。
【０１２９】
ステップＳ３２０で、領域の属性が「写真」である領域のフラグbi_mul_flagが「０」であるか否かを判定する。領域のフラグbi_mul_flagが「０」でない場合（ステップＳ３２０でＮＯ）、ステップＳ３２１に進む。ステップＳ３２１で、ステップＳ２３６で得られた領域を構成する色と各色の量子化頻度hist_q［i］の極大値より、各色毎のビットプレーン画像を生成する。ステップＳ３２３で、領域の属性が「写真」である領域のＪＢＩＧ符号化を各色毎に行った後、ステップＳ３０６に進む。一方、領域のフラグbi_mul_flagが「０」である場合（ステップＳ３２０でＹＥＳ）、ステップＳ３２４に進む。尚、ステップＳ３２３のＪＢＩＧ符号化の結果から得られた符号化データは、各色の座標、領域サイズとともに構造化データから構成される構造化文書の書式にしたがって記憶装置２０４の所定の領域に格納される。
【０１３０】
ステップＳ３２４で、領域の属性が「写真」である領域のＪＰＥＧ符号化を行い、符号化データの色、得られたベクトル、その座標と領域サイズを構造化データから構成される構造化文書の書式にしたがって記憶装置２０４の所定の領域に格納される。そして、領域のＪＰＥＧ符号化が終了したら、ステップＳ３０６に進む。
【０１３１】
再び、図１８のフローチャートに戻る。
ステップＳ３０６で、ループカウンタｋの内容を１インクリメントする。そして、すべての領域に対し構造化データを生成する処理が行われたら、つまり、ループカウンタｋの内容がカウンタarea_countの値になったら、すべての処理を終了する。
【０１３２】
以上、図１８〜図２１のフローチャートで説明される処理によって、２値画像データに含まれる各領域の属性と対応する量子化数に基づいて、２値画像データに含まれる各領域の構造化データが生成される。
尚、第３の実施の形態では、構造化データを記憶装置２０４に格納したが、通信インタフェース２０８を介して通信回線２０９に送信することもできる。
【０１３３】
以上説明したように、第３の実施の形態によれば、画像データの画素値のヒストグラムに基づいて、下地代表濃度bg_valueと下地の濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0を抽出し、濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0の範囲内に含まれる画素値をすべて下地代表濃度bg_valueとして出力することで、一定した好適な下地の濃度を出力することができる。
【０１３４】
また、画素値のヒストグラムを量子化し、量子化されたヒストグラムに基づいて、ノイズ閾値noise_thを算出し、その算出されたノイズ閾値noise_thを用いることで、下地の濃度として出力される出力頻度のノイズを好適に除去することができる。
また、カラー画像に対して、高速で比較的小さい回路規模で好適な領域判定が可能になる。画像データの存在するノイズによる影響を取り除くことで、図形／写真を正確に判定することができる。更に、下地と文字との輝度に差がない場合でも確実に文字を検出することができる。加えて、スキャナに特有なノイズを考慮した処理を行うようなプログラムを作成することで、最適な像域分離処理が行える効果もある。
【０１３５】
また、領域毎の画像を再現するのに必要な量子化を行うための好適な量子化数を決定することができる。更に、単色の図形や多値画像のほかに限定色の文字や図形を好適に判定できるので、構造化データを生成する精度を向上することができる。
尚、第１の実施の形態〜第３の実施の形態で説明された画像処理装置の構成はハードウェアで実現するものに限定されず、全部又は一部分をソフトウェア等のプログラムで実現してももちろん構わない。
【０１３６】
また、カラー多値画像データとして、均等色空間であるＣＩＥ１９７６Ｌ*ａ*ｂ*空間を利用して、本発明で説明される処理を実行したが、もちろんこれに限定されず、ＲＧＢ表色系でもよいし、ＹＣｂＣｒ表色系やＹＩＱ表色系を利用してもよい。更に入力ビット数、それに伴うヒストグラムの生成はこれに限定されず、量子化した結果の頻度分布であっても構わない。
【０１３７】
更に、像域分離処理や量子化の方法は本発明で説明される方法に限定されず、他の方法でも構わない。また、領域の形状を矩形として説明したが、これに限定されず、輪郭線等のあらゆる自由形状であってももちろん構わない。
また、更に、メモリ構成をフレームメモリとしたが、これに限定されず、ラインバッファ等で構成してももちろん構わない。
【０１３８】
また、多値の符号化としてＪＰＲＧ符号化を例にとって説明を行ったが、もちろん、これに限定されず、ＤＰＣＭ符号化や、ベクトル量子化符号化等の他の多値の符号化を用いても構わない。更に、２値の符号化としてＪＢＩＧ符号化を例にとって説明を行ったが、もちろん、これに限定されず、ＭＭＲ符号化やＬＺＷ符号化等の他の２値の符号化を用いても構わない。更に、形状を表すのにベクトルを用いたが、チェイン符号化等の他の形状を表す符号化を用いても構わない。
【０１３９】
尚、本発明は、複数の機器（例えばホストコンピュータ、インタフェース機器、リーダ、プリンタ等）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置等）に適用してもよい。
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成されることは言うまでもない。
【０１４０】
この場合、記憶媒体から読出されたプログラムコード自体が上述した実施の形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フロッピディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。
【０１４１】
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
【０１４２】
更に、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１４３】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードを格納することになる。簡単に説明すると、例えば、図２２のメモリマップ例に示す各モジュールを記憶媒体に格納する。
すなわち、少なくとも「生成モジュール」、「算出モジュール」、「抽出モジュール」、「判定モジュール」、および「出力モジュール」の各モジュールのプログラムコードを記憶媒体に格納すればよい。
【０１４４】
尚、「生成モジュール」は、画像データの濃度の出力頻度の分布を生成する。「算出モジュール」は、生成された分布に基づいて、閾値を算出する。「抽出モジュール」は、生成された分布の最大出力頻度となる濃度を抽出する。「判定モジュール」は、最大出力頻度となる濃度を含み、閾値以上の出力頻度を有する濃度領域を判定する。「出力モジュール」は、濃度領域内の濃度を持つ画像データの濃度を一律に前記最大出力頻度となる濃度で出力する。
【０１４５】
以上説明したように、本発明の第１の実施の形態〜第３の実施の形態によれば、スキャナ等で読み取った原稿画像の画像データの下地に発生するノイズを好適に除去することができ、画像データによる出力画像の画質を向上する画像処理装置及びその方法を提供できる。
また、画像データの下地に発生するノイズを好適に除去することで、画像データを属性毎の領域に分離する像域分離処理の精度を向上する画像処理装置及びその方法を提供できる。
【０１４６】
また、画像データの下地に発生するノイズを好適に除去し、ノイズを除去した画像データから好適な下地の濃度を判定し、その判定された濃度を下地の濃度として出力することで、画像データの符号化効率を向上することができる画像処理装置及びその方法を提供できる。
＜第４の実施の形態＞
図２３は第４の実施の形態の画像処理装置の構成を示すブロック図である。
【０１４７】
図１において、４０１は原稿画像を入力する画像入力部であり、イメージスキャナ等で構成される。ここでは入力する原稿画像を白黒の多値画像（８ビット／画素）として説明を行う。４０２は画像入力部４０１より得られる原稿画像の画像データを記憶しておくフレームメモリである。
４０３は読み込まれた画像データ（８ビット／画素の多値画像データ）の画素値のヒストグラムを作成するヒストグラム生成部である。
【０１４８】
尚、ヒストグラム生成部４０３は、２５６個のカウンタで構成され、各カウンタは読み込まれる画像データ（８ビット／画素の多値画像データ）の画素値に対応しており、１画素の画像データの入力に対しその画素値に対応するカウンタに１が加えられる。
４０４はヒストグラムから、出現頻度の最大値とその最大値を持つ画素値を出力する最大頻度検出部である。
【０１４９】
４０５はヒストグラム生成部４０３で生成されたヒストグラムの頻度上のノイズを除去するための所定の閾値Ｔｈ１と最大頻度検出部４０４で検出された最大値に基づいて、下地を構成する濃度の幅を求める下地濃度幅検出部である。４０６は下地濃度幅検出部４０５から出力される下地を構成する濃度の幅基づいてフレームメモリ４０２の画像データを好適に量子化するのに必要な量子化数と後述する前景色代表濃度を判定する量子化数判定部である。
【０１５０】
４０７は最大頻度検出部４０４で検出された下地の濃度（最大値）を外部装置に出力する端子である。４０８は原稿画像を表現するのに必要な量子化数と後述する前景色代表濃度を外部装置に出力する端子である。４０９はフレームメモリ４０２の内容を外部装置に出力する端子である。４１３はヒストグラム生成部４０３の内容を外部装置に出力する端子である。
【０１５１】
４１０はＣＰＵであり、各装置構成要素を制御する。４１１はＲＯＭであり、装置の制御に必要なプログラムを格納する。４１２はＲＡＭであり、プログラムを動作させるのに必要なメモリ領域を確保する。
次に、図２３を用いて、画像処理装置において実行される処理について説明する。
【０１５２】
まず、処理に先立ち、ＣＰＵ４１０はフレームメモリ４０２と、ヒストグラム生成部４０３のカウンタの内容を０にクリアする。
続いて、ＣＰＵ４１０はユーザの指示に従って、画像入力部４０１から白黒多値画像（８ビット／画素）である原稿画像を読み込み、その画像データをフレームメモリ４０２に格納する。原稿画像分の画像データがフレームメモリ４０２に格納された後、ＣＰＵ４１０は、フレームメモリ４０２から画像データを読み出し、ヒストグラム生成部４０３に入力する。ヒストグラム生成部４０３の２５６個のカウンタは、入力される画像データの画素値に対応しており、１画素の画像データの入力に対してその画素値に対応するカウンタの内容に１を加える。
【０１５３】
入力された画像データの全ての画素によってヒストグラムが生成されたら、ＣＰＵ４１０は最大頻度検出部４０４を動作させ、ヒストグラムの中で出現頻度が最大値を持つ画素値を検出する（つまり、カウンタの値が最大となる画素値）。そして、その検出される出現頻度の最大値ｍと、対応する画素値を出力する。また、この対応する画素値は下地の濃度を示すので、この濃度を下地代表濃度ｂと呼ぶ。この下地代表濃度ｂは端子４０７から出力される。
【０１５４】
下地濃度幅検出部４０５は、最大頻度検出部４０４から下地代表濃度ｂと所定の閾値Ｔｈ１とヒストグラム生成部４０３で生成されたヒストグラムから、下地を構成する画素の濃度の幅を算出する。この幅は、下地代表濃度ｂを中心として最近傍の画素値において、出現頻度が所定の閾値Ｔｈ１になっている画素値を検出する。図２４を用いて、その検出する過程を示す。尚、図２４には、ある原稿画像の画像データが持つ画素値とその出現頻度の関係を示しており、横軸に画素値、縦軸に出現頻度で表している。
【０１５５】
まず、下地代表濃度ｂから画素値の低い方へ出現頻度の検査を行い、出現頻度が所定の閾値Ｔｈ１になった時の画素値ｂｔ0を求める。この画素値が濃度幅の下限値となるので濃度幅下限値と呼ぶ。同様に、画素値の高い方へ出現頻度の検査を行い、出現頻度が所定の閾値Ｔｈ１になった時の画素値ｂｔ1を求める。この画素値が濃度幅の上限値となるので濃度幅上限値と呼ぶ。
【０１５６】
ここで、下地濃度幅検出部４０５の詳細な構成について、図２５を用いて説明する。
図２５は第４の実施の形態の下地濃度検出部４０５の詳細な構成を示すブロック図である。
図２５において、４２６は端子であり、最大頻度検出部４０４から下地代表濃度ｂを入力する。４２０はラッチであり、下地代表濃度ｂを保持する。４２１はカウンタであり、ＣＰＵ４１０の指示に従ってカウンタ４２１の内容をカウントアップするカウントアップモード、あるいはカウンタ４２１の内容をカウントダウンするカウントダウンモードのいずれかが選択され、選択されたモードに応じてその内容を増減する。４２８は端子であり、カウンタ４２１の内容をヒストグラム生成部４０３に出力し、出力された値に対応するヒストグラム生成部４０３で生成されたヒストグラムの画素値の出現頻度値を読み出す。
【０１５７】
４２７は端子であり、カウンタ４２１より出力された値に対応するヒストグラム生成部４０３で生成されたヒストグラムの画素値の出現頻度値を読み込む。４２２は比較部であり、端子４２７から読み込まれた出現頻度値と所定の閾値Ｔｈ１とを比較する。そして、読み込まれた出現頻度値が所定の閾値Ｔｈ１より大きい場合は「０」を出力し、所定の閾値Ｔｈ１より小さい場合は「１」を出力する。４２３はセレクタであり、比較部４２２から「１」が出力された場合に、ＣＰＵ４１０がカウンタ４２１に指示しているモードに応じて、カウンタ４２１の内容をラッチ４２４、ラッチ４２５のいずれかに保持する。４２４、４２５はラッチであり、セレクタ４２３からの出力を保持する。４２９、４３０は端子であり、それぞれがラッチ４２４、４２５の出力を外部に出力する。
【０１５８】
尚、所定の閾値Ｔｈ１はヒストグラムに発生する頻度上のノイズを除去するための閾値である。
次に図２５を用いて、下地濃度幅検出部４０５で実行される処理について説明する。
ＣＰＵ４１０は、端子４２６を介して下地代表濃度ｂを読み込み、ラッチ４２０に保持する。そして、比較部４２２を０にリセットし、カウンタ４２１にラッチ４２０の下地代表濃度ｂから１を引いた画素値に対応する値をセットし、カウントダウンモードにセットする。
【０１５９】
カウントダウンモードをセットすると、カウンタ４２１より、その内容を端子４２８からヒストグラム生成部４０３に入力し、入力した値に対応するヒストグラムの画素値の出現頻度値をヒストグラム生成部４０３より読み出す。そして、読み出した出現頻度値を端子４２７から比較部４２２に入力する。比較部４２２は入力された出現頻度値と閾値Ｔｈ１を比較し、閾値Ｔｈ１よりも出現頻度値が大きい場合は「０」を出力し、閾値Ｔｈ１よりも出現頻度値が小さい場合は「１」を出力する。
【０１６０】
尚、カウンタ４２１は、比較部４２２より「０」が出力される毎に、その内容を１デクリメントし、デクリメントされた値に対応するヒストグラムの画素値の出現頻度値をヒストグラム生成部４０３より読み出す。そして、出現頻度値を読み出す毎に、比較部４２２は読み出した出現頻度値と閾値Ｔｈ１を比較する。
セレクタ４２３は、比較部４２２から「１」が出力された時点で、カウンタ４２１の内容をラッチ４２５に格納すると同時に、カウンタ４２１のカウントダウンモードによるカウントダウンを終了する。
【０１６１】
カウンタ４２１のカウントダウンが終了すると、ＣＰＵ４１０は、比較部４２２を０にリセットし、カウンタ４２１にラッチ４２０の下地代表濃度ｂから１を足した画素値に対応する値をセットし、カウントアップモードにセットする。
カウントアップモードをセットすると、カウンタ４２１より、その内容を端子４２８からヒストグラム生成部４０３に入力し、入力した値に対応するヒストグラムの画素値の出現頻度値をヒストグラム生成部４０３より読み出す。そして、読み出した出現頻度値を端子４２７から比較部４２２に入力する。比較部４２２は入力された出現頻度値と閾値Ｔｈ１を比較し、閾値Ｔｈ１よりも出現頻度値が大きい場合は「０」を出力し、閾値Ｔｈ１よりも出現頻度値が小さい場合は「１」を出力する。
【０１６２】
尚、カウンタ４２１は、比較部４２２より「０」が出力される毎に、その内容を１インクリメントし、インクリメントされた値に対応するヒストグラムの画素値の出現頻度値をヒストグラム生成部４０３より読み出す。そして、出現頻度値を読み出す毎に、比較部４２２は読み出した出現頻度値と閾値Ｔｈ１を比較する。
【０１６３】
セレクタ４２３は、比較部４２２から「１」が出力された時点で、カウンタ４２１の内容をラッチ４２４に格納すると同時に、カウンタ４２１のカウントアップモードによるカウントアップを終了する。
以上のようにして、ラッチ４２４とラッチ４２５に保持される値が、それぞれ濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0である。そして、濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0をそれぞれ端子４２９、４３０を介して量子化数判定部４０６へ出力する。
【０１６４】
再び、図２３の説明に戻る。
下地濃度幅検出部４０５で、濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0が検出されると、量子化数判定部４０６は、下地濃度幅検出部４０５で検出された濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1と、フレームメモリ４０２に格納される画像データの画素値を入力し、画像データを好適に量子化するための量子化数と前景色代表濃度を判定する。
【０１６５】
ここで、量子化数判定部４０６の詳細な構成について、図２６を用いて説明する。
図２６は第４の実施の形態の量子化数判定部４０６の詳細な構成を示すブロック図である。
４４１は比較部であり、端子４４９から入力される濃度幅上限値ｂｔ1と端子４５１から入力される画素値を比較する。そして、画素値が濃度幅上限値ｂｔ1よりも大きい場合は「０」を、小さい場合は「１」を出力する。４４２は比較部であり、端子４５０から入力される濃度幅下限値ｂｔ0と端子４５１から入力される画素値を比較する。そして、画素値が濃度幅下限値ｂｔ0よりも大きい場合は「１」を、小さい場合は「０」を出力する。４４３は比較部４４１と比較部４４２から出力される値の非論理積を算出するＮＡＮＤ回路である。４４４はラッチであり、端子４５１から入力される画素値をラッチする。また、ＮＡＮＤ回路４４３が「１」を出力したときのみ、ラッチしている画素値を出力する。
【０１６６】
４４５は２５６個のカウンタで構成され、ラッチ４４４から出力される画素値の出現頻度のヒストグラムを生成するヒストグラム生成部である。４４６はヒストグラム生成部４４５で生成されたヒストグラムから、出現頻度の極大値とその極大値を持つ画素値を検出する極大値検出部である。４４７は極大値検出部４４６で検出された極大値の数を計数するカウンタである。４４８は極大値を持つ画素値を格納するメモリである。４４９は端子であり、図２５の端子４２９を介して濃度幅上限値ｂｔ1を読み込む。４５０は端子であり、図２５の端子４３０を介して濃度幅下限値ｂｔ0を読み込む。４５１は端子であり、フレームメモリ４０２に格納される画像データの画素値を読み込む。４５２はカウンタ４４７の内容を、４５３はメモリ４４８の内容を出力する端子である。
【０１６７】
次に図２６を用いて、量子化数判定部４０６で実行される処理について説明する。
ＣＰＵ４１０は、端子４４９から濃度幅上限値ｂｔ1を、端子４５０から濃度幅下限値ｂｔ0を読み込む。続いてフレームメモリ４０２から格納順に画像データの画素値を読み込み、比較部４４１、比較部４４２、ラッチ４４４に入力する。
【０１６８】
比較部４４１は、入力画素値と濃度幅上限値ｂｔ1、比較部４４２は入力画素値と濃度幅下限値ｂｔ0とを比較する。比較部４４１、比較部４４２のそれぞれの比較結果はＮＡＮＤ回路４４３に入力し、非論理積を算出する。上述の説明により、入力画素値が濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0の間にある場合は、ＮＡＮＤ回路４４３は「０」を出力し、そうでなければ「１」を出力する。ラッチ４４４はＮＡＮＤ回路４４３の出力が「１」の場合、入力された画素値をヒストグラム生成部４４５に出力し、「０」の場合は出力しない。
【０１６９】
ラッチ４４４の出力がヒストグラム生成部４４５に入力されると、ヒストグラム生成部４４５の２５６個のカウンタは、入力される画素値に対応しており、その画素値に対応するカウンタの内容に１を加える。
フレームメモリ４０２に格納される画像データの全ての画素値に基づいて、ヒストグラム生成部４４５でヒストグラムが生成された後、ＣＰＵ４１０は極大値検出部４４６を起動するとともにカウンタ４４７の内容を０にリセットする。続いて、ヒストグラム生成部４４５の２５６個のカウンタにおいて、各画素値の出現頻度を示すカウンタの内容を画素値の低い方から順に読み出し、出現頻度が極大値を持つ画素値を検出する。
【０１７０】
例えば、ヒストグラム４４５で生成されるヒストグラムが図２７に示すようなものであるとすると、出現頻度が極大値を持つ画素値は、図において、矢印が示す位置の画素値が出現頻度の極大値を持つ画素値となる。そして、出現頻度の極大値が検出されたら、カウンタ４４７の内容を１インクリメントし、その極大値を持つ画素値をメモリ４４８に順に格納する。この場合、極大値の数は４つであり、カウンタ４４７の内容は４が格納されることになる。
【０１７１】
メモリ４４８に、格納された極大値を持つ画素値は、原稿画像を構成する背景（下地）以外の画像の濃度の代表を表わすものであり、これらを前景色代表濃度と呼ぶ。また、カウンタ４４７の内容に１を加えたものが画像を表現するのに必要な量子化数ｎ（ｎは正の整数）であり、前景色代表濃度とともに端子４５２、端子４５３を介して端子４０８から外部装置に出力される。
【０１７２】
以上のようにして、原稿画像の下地代表濃度ｂと画像データを好適に量子化する量子化数ｎと前景色代表濃度が出力される。
次に第４の実施の形態で実行される処理について、図２８のフローチャートを用いて説明する。
図２８は第４の実施の形態で実行される処理の処理フローを示すフローチャートである。
【０１７３】
まず、処理に先立ち、ＣＰＵ４１０はフレームメモリ４０２と、ヒストグラム生成部４０３のカウンタの内容を０にクリアする。
ステップＳ６０１で、続いて、ＣＰＵ４１０はユーザの指示に従って、画像入力部４０１から白黒多値画像（８ビット／画素）である原稿画像を読み込み、その画像データをフレームメモリ４０２に格納する。ステップＳ６０２で、原稿画像分の画像データがフレームメモリ４０２に格納された後、ＣＰＵ４１０は、フレームメモリ４０２から画像データを読み出し、ヒストグラム生成部４０３に入力し、入力された画像データの全ての画素によってヒストグラムを生成する。
ステップＳ６０３で、ＣＰＵ４１０は最大頻度検出部４０４を動作させ、ヒストグラムの中で出現頻度が最大値を持つ画素値を下地代表濃度ｂとして抽出する。更に、下地濃度幅検出部４０５で、最大頻度検出部４０４から下地代表濃度ｂと所定の閾値Ｔｈ１とヒストグラム生成部４０３で生成されたヒストグラムから、下地を構成する画素の濃度の幅として濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を抽出する。
【０１７４】
ステップＳ６０４で、量子化数判定部４０６は、下地代表濃度以外の出現頻度の極大値を持つ画素値を前景色代表濃度としてヒストグラムより抽出する。ステップＳ６０５で、抽出された前景色代表濃度に基づいて、画像データを量子化するための量子化数を判定する。
次に第４の実施の形態で説明される画像処理装置の適用例を説明する。例えば、図２９に示されるような画像送信装置に適用させた場合に、実行される動作とその構成を説明する。
【０１７５】
図２９は第４の実施の形態の画像処理装置を適用させた画像送信装置の構成を示すブロック図である。
図２９において、４６０は第４の実施の形態の図２３に示される画像処理装置である。４６１は図２３の端子４０７から出力された下地代表濃度ｂと端子４０８から出力された量子化数ｎと各前景色代表濃度とヒストグラムを入力し、画像データを量子化するための閾値を決定する閾値決定部である。４６２は閾値決定部４６１から出力される閾値にしたがって、端子４０９から出力された画像データを量子化する量子化部である。
【０１７６】
４６３はフレームメモリであり、量子化部４６２で量子化された画像データを格納する。例えば、量子化数がｎであるとすると、ｎ値化された画像データをｎ枚のビットプレーンで格納する。４６４はフレームメモリ４６３に格納された量子化された画像データを２値の符号化であるＪＢＩＧ符号化を行うＪＢＩＧ符号化部である。４６５は通信プロトコルに合わせて、ＪＢＩＧ符号化部４６４で生成されたＪＢＩＧ符号化データを送信する通信インタフェースである。４６６は電話回線やＬＡＮで構成される通信回線である。
【０１７７】
次に図２９で実行される処理の概要を説明する。
閾値決定部４６１は、画像処理装置４６０のカウンタ４４７とメモリ４４８から量子化数ｎと各前景色代表濃度を端子４０８を介して読み込み、ヒストグラムを端子４１３を介して読み込み、各前景色代表濃度に基づいて、量子化するための閾値を決定する。図３０を用いて、その閾値を決定する過程を示す。まず、図２４のヒストグラムに対し、図３０に示すような前景色代表濃度ｆ１〜ｆ４が決定されたとする。そして、各前景色代表濃度を中心として形成される出現頻度の山の両側に存在する出現頻度の曲線の傾きが０となる出現頻度を持つ画素値を閾値として決定する。この場合、図のｒ１〜ｒ４が量子化するための閾値として決定される。
【０１７８】
続いて、量子化部４６２は、閾値決定部４６１で決定された閾値を用いて、フレームメモリ４０２に格納される画像データの画素値を量子化する。例えば、図３０に示した閾値ｒ１〜ｒ４場合、閾値ｒ１未満の画素値を持つ画像データは「０」に、閾値ｒ１以上閾値ｒ２未満の画素値を持つ画像データは「１」に、閾値ｒ２以上閾値ｒ３未満の画素値を持つ画像データは「２」に、閾値ｒ３以上閾値ｒ４未満の画素値を持つ画像データは「３」に、閾値ｒ４以上の画素値を持つ画像データは「４」に量子化する。そして、量子化部４６２によって得られる量子化結果はフレームメモリ４６３に格納される。
【０１７９】
フレームメモリ４０２内に格納される画像データについて量子化が終了したら、端子４０８から出力される量子化数ｎを通信インタフェース４６５を介して通信回線４６６に出力する。続いて、画素値の小さい方から下地代表濃度ｂと前景色代表濃度（この場合はｆ１〜４）を通信インタフェース４６５を介して通信回線４６６に出力する。更に、ＪＢＩＧ符号化部４６４によって、フレームメモリ４６３に格納されている量子化された画像データの画素値に対し、ビットプレーン毎にＪＢＩＧ符号化を施し、通信インタフェース４６５を介して通信回線４６６に出力する。フレームメモリ４０２の全ての画像データを符号化し、送信を終えたら全ての動作を終了する。
【０１８０】
以上説明したように、第４の実施の形態によれば、画像データの画素値の出現頻度のヒストグラムに基づいて、下地代表濃度ｂと下地の濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0を抽出し、濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0の範囲内に含まれる画素値をすべて下地代表濃度ｂとして出力することで、一定した好適な下地の濃度を出力することができる。
【０１８１】
また、下地代表濃度ｂを示す極大値以外にヒストグラムに存在する出現頻度の極大値を持つ画素値を含む閾値Ｔｈ１以上の出現頻度を持つ画素値群を、下地以外に原稿画像に存在する画像として判定する。そして、その判定された画像を表現する所定範囲の画素値群を一律にその所定範囲内の出現頻度の極大値を持つ画素値（前景色代表濃度）で出力することで、一定した好適な画素値で画像を出力することができる。
【０１８２】
更に、その判定された画像を表現する前景色代表濃度を含む所定範囲の画素値群の範囲とその個数に基づいて、原稿画像を量子化するための量子化数と閾値を判定するため、原稿画像を好適に量子化する量子化数を決定することができる。
また、白黒画像に対して、高速で比較的小さい回路規模で好適な量子化数の判定が可能になり、下地のノイズに影響されることなく、文字等の前景色を効率良く抽出できる。また、符号化に適用した場合、下地のノイズによる影響を取り除き、下地を一定濃度にすることができるので、符号化効率を向上させると同時に、必要最低限に量子化して送るので少ないプレーン数で符号化でき、効率的である。
【０１８３】
＜第５の実施の形態＞
第４の実施の形態では、白黒多値画像の原稿画像の下地の濃度幅と好適な下地濃度を判定し、かつ原稿画像を量子化するための好適な量子化数を判定する画像処理装置について説明した。第５の実施の形態では、カラー多値画像の原稿画像の下地の濃度幅と好適な下地濃度を判定し、かつ原稿画像を量子化するための好適な量子化数を判定する画像処理装置について説明する。
【０１８４】
図３１は第５の実施の形態の画像処理装置の構成を示すブロック図である。
図３１において、５０１は原稿画像を入力する画像入力部であり、カラーイメージスキャナ等で構成される。ここでは入力する原稿画像をカラー多値画像とし、ＲＧＢ各色ごとに１画素あたり８ビットの精度を持つ画像データとして説明を行う。５０２は原稿画像をＣＩＥ１９７６Ｌ*ａ*ｂ*画像データ（各成文８ビット）に変換する色変換部である。５０３は色変換部５０２より得られる原稿画像のＬ*ａ*ｂ*画像データを記憶しておくフレームメモリである。
【０１８５】
５０４はＣＩＥ１９７６Ｌ*ａ*ｂ*画像データの輝度を表わすＬ*画像データから入力画素が、平坦画素であるか否かを判定する平坦画素判定部である。５０５はラッチであり、制御信号によってその内容の出力するか否かを決定する。
５０６〜５０８は読み込まれたＬ*、ａ*、ｂ*画像データの画素値のヒストグラムを作成するヒストグラム生成部である。
【０１８６】
尚、各ヒストグラム生成部５０６〜５０８は、２５６個のカウンタで構成され、各カウンタは読み込まれる画像データの画素値に対応しており、１画素の画像データの入力に対してその画素値に対応するカウンタに１が加えられる。
ヒストグラム生成部５０６はＬ*画像データ、ヒストグラム生成部５０７はａ*画像データ、ヒストグラム生成部５０８はｂ*画像データのヒストグラムを生成する。
【０１８７】
５０９はＬ*画像データのヒストグラムから下地を構成する画素のＬ*画像データの下地表示濃度ｂＬと濃度幅下限値ｂｔＬ0と濃度幅上限値ｂｔＬ1を決定する下地濃度判定部である。５１０はａ*画像データのヒストグラムから下地を構成する画素のａ*画像データの下地代表濃度ｂａと濃度幅下限値ｂｔａ0と濃度幅上限値ｂｔａ1を決定する下地濃度判定部である。５１１はｂ*画像データのヒストグラムから下地を構成する画素のｂ*画像データの下地代表濃度ｂｂと濃度幅下限値ｂｔｂ0と濃度幅上限値ｂｔｂ1を決定する下地濃度判定部である。
【０１８８】
尚、下地濃度判定部５０９〜５１１は、第４の実施の形態の図２３に示される最大頻度検出部４０４と下地濃度幅検出部４０５より構成されており、その詳細については、第４の実施の形態で説明しているので、ここでは省略する。
５１２は比較部であり、フレームメモリ５０３に格納されるＬ*ａ*ｂ*画像データの画素値を入力し、各Ｌ*、ａ*、ｂ*画像データに対応する濃度幅下限値ｂｔＬ0と濃度幅上限値ｂｔＬ1、濃度幅下限値ｂｔａ0と濃度幅上限値ｂｔａ1、濃度幅下限値ｂｔｂ0と濃度幅上限値ｂｔｂ1とを比較し、その比較結果に基づいて、Ｌ*ａ*ｂ*画像データを２値化する。５１３は比較部５１２で２値化されたＬ*ａ*ｂ*画像データを格納する２値フレームメモリである。５１４は像域分離部であり、第３の実施の形態と同様の像域分離処理の方法を用いて、像域分離処理を行う。
【０１８９】
５１５は２値フレームメモリ５１３に格納される２値化されたＬ*ａ*ｂ*画像データから、フレームメモリ５０３の画像データを量子化するための量子化数を判定する量子化数判定部である。５１６は像域分離部５１４と量子化数判定部５１５で検出された領域に関する情報を格納する領域情報メモリである。５１７〜５１９は各Ｌ*、ａ*、ｂ*画像データの下地代表濃度ｂＬ、ｂａ、ｂｂを外部装置に出力する端子である。５２０は領域情報メモリ５１６の内容を外部装置に出力する端子である。５２１はフレームメモリ５０３の内容を外部装置に出力する端子である。
【０１９０】
５７０はＣＰＵであり、各装置構成要素を制御する。５７１はＲＯＭであり、装置の制御に必要なプログラムを格納する。５７２はＲＡＭであり、プログラムを動作させるのに必要なメモリ領域を確保する。
次に、図３１を用いて、画像処理装置において実行される処理について説明する。
【０１９１】
まず、処理に先立ち、ＣＰＵ５７０はフレームメモリ５０３と、ヒストグラム生成部５０６〜５０８のカウンタの内容を０にクリアする。
続いて、ＣＰＵ５７０はユーザの指示に従って、画像入力部５０１からＲＧＢカラー多値画像である原稿画像を読み込み、色変換部５０２によってＬ*ａ*ｂ*画像データに変換し、フレームメモリ５０３に格納する。
【０１９２】
原稿画像分のＬ*ａ*ｂ*画像データがフレームメモリ５０３に格納された後、ＣＰＵ５７０は、フレームメモリ５０３からＬ*ａ*ｂ*画像データを読み出し、平坦画素判定部５０４とラッチ５０５に入力する。
平坦画素判定部５０４は入力画素とその周囲の画素のＬ*ａ*ｂ*画像データを入力する。フレームメモリ５０３上に格納されるＬ*、ａ*、ｂ*画像データのそれぞれの座標をＬ（ｘ，ｙ）、ａ（ｘ，ｙ）、ｂ（ｘ，ｙ）とした時、Ｌ*ａ*ｂ*画像データの各エッジ量ｅＬ、ｅａ、ｅｂを前述の（４）式によって算出する。
【０１９３】
これらのエッジ量ｅＬ、ｅａ、ｅｂと閾値Ｔｈ２を比較し、全てが閾値Ｔｈ２以下であれば「１」を、そうでなければ「０」を出力する。
【０１９４】
ラッチ５０５は平坦画素判定部５０４からの出力が「０」の時、即ち、いずれかの色成分にエッジが存在する特は、格納されているＬ*、ａ*、ｂ*画像データを出力せず、ヒストグラム生成部５０６〜５０８は処理を行わない。一方、平坦画素判定部５０４からの出力が「１」の時、即ち、平坦画素については、格納されているＬ*、ａ*、ｂ*画像データを対応するヒストグラム生成部５０６〜５０８に出力する。
【０１９５】
そして、ヒストグラム生成部５０６ではＬ*画像データのヒストグラムを作成する。同様に、ヒストグラム生成部５０７ではａ*画像データのヒストグラム、ヒストグラム生成部５０８ではｂ*画像データのヒストグラムを生成する。
フレームメモリ５０３内の全ての画素の平坦画素検出、ヒストグラム処理を終了したら、下地濃度判定部５０９〜５１１を起動させる。
【０１９６】
下地濃度判定部５０９は、Ｌ*画像データのヒストグラムからＬ*画像データの下地代表濃度ｂＬと濃度幅下限値ｂｔＬ0と濃度幅上限値ｂｔＬ1を判定する。同様にして、下地濃度判定部５１０は、ａ*画像データのヒストグラムからａ*画像データの下地代表濃度ｂａと濃度幅下限値ｂｔａ0と濃度幅上限値ｂｔａ1を判定する。下地濃度判定部５１１は、ｂ*画像データのヒストグラムからｂ*画像データの下地代表濃度ｂｂと濃度幅下限値ｂｔｂ0と濃度幅上限値ｂｔｂ1を判定する。判定された各Ｌ*、ａ*、ｂ*画像データの下地代表濃度ｂＬ、下地代表濃度ｂａ、下地代表濃度ｂｂを端子５１７〜５１９を介して外部装置に出力する。更に、判定された各Ｌ*、ａ*、ｂ*画像データの濃度幅下限値ｂｔＬ0と濃度幅上限値ｂｔＬ1、濃度幅下限値ｂｔａ0と濃度幅上限値ｂｔａ1、濃度幅下限値ｂｔｂ0と濃度幅上限値ｂｔｂ1を比較部５１２に出力する。
【０１９７】
比較部５１２は、比較部５１２より入力された各Ｌ*、ａ*、ｂ*画像データの濃度幅下限値、濃度幅上限値に対し、フレームメモリ５０３に格納される各Ｌ*、ａ*、ｂ*画像データであるｐＬ、ｐａ、ｐｂとを比較する。そして、濃度幅下限値ｂｔＬ0＜ｐＬ＜濃度幅上限値ｂｔＬ1、かつ濃度幅下限値ｂｔａ0＜ｐａ＜濃度幅上限値ｂｔａ1、かつ濃度幅下限値ｂｔｂ0＜ｐｂ＜濃度幅上限値ｂｔｂ1を満たす場合は「０」を出力し、そうでなければ「１」を出力する。この比較によって、Ｌ*ａ*ｂ*画像データが２値化される。２値化されたＬ*ａ*ｂ*画像データは２値フレームメモリ５１３に格納される。
【０１９８】
フレームメモリ５０３のすべてのＬ*ａ*ｂ*画像データについて、比較部５１２による比較処理が終了し、２値化されたＬ*ａ*ｂ*画像データが２値フレームメモリ５１３に格納された後、ＣＰＵ５７０は像域分離部５１４を起動する。
像域分離部５１４は２値フレームメモリ５１３から読み込んだ２値化されたＬ*ａ*ｂ*画像データを領域分割し、分割された領域の属性を像域分離処理によって判定する。判定された領域の属性や各領域の位置等を示す情報は領域情報メモリ５１６に格納する。
【０１９９】
像域分離処理が終了し、領域情報メモリ５１６にＬ*ａ*ｂ*画像データに含まれる全ての領域の属性と情報が格納されたら、ＣＰＵ５７０は量子化数判定部５１５を起動する。そして、領域情報メモリ５１６に格納されている各領域の属性と情報に基づいて、各領域に対応するＬ*ａ*ｂ*画像データをフレームメモリ５０３から順に、量子化数判定部５１５に入力し、各領域を量子化するための量子化数を判定する。
【０２００】
ここで、量子化数判定部５１５の詳細な構成について、図３２を用いて説明する。
図３２は第５の実施の形態の量子化数判定部５１５の詳細な構成を示すブロック図である。
５５６は端子であり、領域情報メモリ５１６に格納されている各領域の属性と情報に基づいて、各領域に対応するＬ*ａ*ｂ*画像データをフレームメモリ５０３から順に読み込む。５５５は端子であり、フレームメモリ５０３から読み込まれるＬ*ａ*ｂ*画像データに同期して、２値フレームメモリ５１３から対応するする２値化されたＬ*ａ*ｂ*画像データを読み込む。５４１〜５４３はラッチであり、端子５５５から入力される２値化されたＬ*ａ*ｂ*画像データを制御信号として、制御信号が「１」の場合は保持されている内容を出力し、「０」である場合は何も出力しない。尚、ラッチ５４１はＬ*画像データ、ラッチ５４２はａ*画像データ、ラッチ５４３はｂ*画像データを保持する。
【０２０１】
５４４〜５４６は読み込まれたＬ*、ａ*、ｂ*画像データの画素値のヒストグラムを作成するヒストグラム生成部である。
尚、各ラッチ５４４〜５４６は、２５６個のカウンタで構成され、各カウンタは読み込まれる画像データの画素値に対応しており、１画素の画像データの入力に対してその画素値に対応するカウンタに１が加えられる。
【０２０２】
ラッチ５４４はＬ*画像データ、ラッチ５４５はａ*画像データ、ラッチ５４６はｂ*画像データのヒストグラムを生成する。
５４７〜５４９は各ラッチ５４４〜５４６で生成されたヒストグラムを平滑化するヒストグラム平滑化部である。５５０〜５５２はヒストグラム平滑化部５４７〜５４９で平滑化されたヒストグラムで極大値をとる出現頻度の画素値を検出する極大値検出部。
【０２０３】
５５３は各極大値検出部５５０〜５５２で検出された極大値をとる出現頻度の画素値から、領域内を構成する可能性のある色の組み合せを抽出する代表色抽出部である。５５４は代表色抽出部５５３で抽出された色の組み合わせに基づいて、実際に領域内に存在する色を判定する代表色判定部である。また、色を判定するために、代表色抽出部５５３で抽出された色の組み合わせから得られる色差が最小となる色の出現頻度をカウントするカウンタが設けられている。５５７は領域内に存在する色の数と色のデータを外部装置に出力する端子である。
【０２０４】
次に図３２を用いて、量子化数判定部５１５で実行される処理について説明する。
ＣＰＵ５７０は、領域情報メモリ５１６に格納される各領域の属性と情報にしたがって、端子５５６よりフレームメモリ５０３から領域に対応するＬ*ａ*ｂ*画像データ、端子５５５より２値フレームメモリ５１３から領域に対応する２値されたＬ*ａ*ｂ*画像データを読み込む。端子５５６より読み込まれた各Ｌ*、ａ*、ｂ*画像データは、それぞれラッチ５４１〜５４３に保持される。
【０２０５】
端子５５５より読み込まれた２値化されたＬ*ａ*ｂ*画像データが「１」の場合、ラッチ５４１〜５４３はその内容を後段のラッチ５４４〜５４６にそれぞれ出力する。一方、「０」の場合、何も出力されず、ラッチ５４４〜５４６では、そのＬ*ａ*ｂ*画像データに対応するＬ*ａ*ｂ*画像データの処理は行わない。
ラッチ５４４〜５４６では、各Ｌ*、ａ*、ｂ*画像データから各画像データのヒストグラムを生成する。２５６個のカウンタは、入力される画像データの画素値に対応しており、その画素値に対応するカウンタの内容に１を加える。
【０２０６】
入力された画像データの全ての画素によってヒストグラムが生成されたら、ＣＰＵ５７０はヒストグラム平滑部５４７〜５４９を起動させる。ヒストグラム平滑部５４７〜５４９では、各ラッチ５４４〜５４６で生成された各Ｌ*、ａ*、ｂ*画像データのヒストグラムの各画素値の出現頻度値hist［i］（ｉ＝０〜２５５）と、あらかじめ設定された平滑化幅ｓｗから、（８）式を用いて出現頻度値hist［i］を平滑化し、平滑化された出現頻度値hist_sm［i］（ｉ＝０〜２５５）らなる各Ｌ*、ａ*、ｂ*画像データヒストグラムを生成する。
【０２０７】
【数１】
…（８）
極大値検出部５５０〜５５２はそれぞれ、ヒストグラム平滑部５４７〜５４９で、平滑化された出現頻度値hist_sm［i］からなる各Ｌ*、ａ*、ｂ*画像データのヒストグラムから、第４の実施の形態の図２６の極大値算出部４４６と同様の方法で、各Ｌ*、ａ*、ｂ*画像データの出現頻度の極大値を持つ画素値を検出する。そして、検出された各Ｌ*、ａ*、ｂ*画像データの出現頻度の極大値を持つ画素値は代表色抽出部５５３に入力される。
【０２０８】
代表色抽出部５５３では、各Ｌ*、ａ*、ｂ*画像データから各Ｌ*、ａ*、ｂ*画像データの出現頻度の極大値の数、極大値を持つ画素値をそれぞれ格納する。Ｌ*画像データの極大値の数をｍＬ、各極大値をｆ１［i］（ｉ＝１〜ｍＬ）、ａ*画像データの極大値の数をｍａ、各極大値をｆａ［i］（ｉ＝１〜ｍａ）、ｂ*画像データの極大値の数をｍｂ、各極大値をｆｂ［i］（ｉ＝１〜ｍｂ）とした場合に、領域内に存在する可能性があると考えられる色のデータ数ｍｃは、
ｍｃ＝ｍＬ×ｍａ×ｍｂ      …（９）
で表わされる。この（９）式によって表される全ての色の組み合わせを抽出し、データ数ｍｃとともに、代表色判定部５５４へ出力する。
【０２０９】
色の組み合わせが抽出されたら、ＣＰＵ５７０は、代表色判定部５５４の色の組み合わせの出現頻度をカウントするカウンタを０にリセットする。そして、再度、領域情報メモリ５１６に格納される領域の属性と情報にしたがって、フレームメモリ５０３から領域に対応するＬ*ａ*ｂ*画像データを代表色判定部５５４に読み込む。読み込まれたＬ*ａ*ｂ*画像データは、代表色抽出部５５３で抽出された色の組み合わせの色差を判定し、色差が最小となる色に対応するカウンタの内容を１インクリメントする。
【０２１０】
フレームメモリ５０３に格納されるＬ*ａ*ｂ*画像データのすべての画素値について、代表色抽出部５５３で抽出された色の組み合わせの色差の判定と、色差が最小となる色のカウントが終了したら、各色のカウンタの内容と閾値Ｔｈ３を比較する。そして、閾値Ｔｈ３以上となる色に関しては、その色が領域内の画像を表現するのに不可欠な色であるため、これらの色の数をカウントし、そのカウントされた数を画像を量子化するための量子化数ｎとする。また、閾値Ｔｈ３以上となる色を前景色代表色とし、量子化数ｎともに端子５５７から外部に出力する。これらの量子化数ｎと前景色代表色は、対応する領域の属性と情報ともに領域情報メモリ５１６に格納される。
【０２１１】
以上のようにして、各Ｌ*、ａ*、ｂ*画像データの下地代表濃度ｂＬ、下地代表濃度ｂａ、下地代表濃度ｂｂとＬ*ａ*ｂ*画像データを好適に量子化する量子化数ｎと前景色代表色が出力される。
次に第５の実施の形態で実行される処理について、図３３のフローチャートを用いて説明する。
【０２１２】
図３３は第５の実施の形態で実行される処理の処理フローを示すフローチャートである。
まず、処理に先立ち、ＣＰＵ５７０はフレームメモリ５０３と、ヒストグラム生成部５０６〜５０８のカウンタの内容を０にクリアする。
ステップＳ１１０１で、続いて、ＣＰＵ５７０はユーザの指示に従って、画像入力部５０１からカラー多値画像である原稿画像を読み込み、そのＬ*ａ*ｂ*画像データをフレームメモリ５０３に格納する。ステップＳ１１０２で、原稿画像分のＬ*ａ*ｂ*画像データがフレームメモリ５０３に格納された後、ＣＰＵ５７０は、フレームメモリ５０３からＬ*ａ*ｂ*画像データを読み出し、各Ｌ*、ａ*、ｂ*画像データをそれぞれヒストグラム生成部５０６〜５０８に入力し、入力された各Ｌ*、ａ*、ｂ*画像データの全ての画素によってヒストグラムを生成する。
【０２１３】
ステップＳ１１０３で、ＣＰＵ５７０は各下地濃度判定部５０９〜５１１を動作させ、各Ｌ*、ａ*、ｂ*画像データのヒストグラムの中で出現頻度が最大値を持つ画素値を下地代表濃度ｂＬ、下地代表濃度ｂａ、下地代表濃度ｂｂとして抽出する。更に、各下地代表濃度ｂＬ、下地代表濃度ｂａ、下地代表濃度ｂｂと所定の閾値Ｔｈ１と各ヒストグラム生成部５０６〜５０８で生成されたヒストグラムから、各Ｌ*、ａ*、ｂ*画像データの下地を構成する画素の濃度の幅として濃度幅下限値ｂｔＬ0と濃度幅上限値ｂｔＬ1、濃度幅下限値ｂｔａ0と濃度幅上限値ｂｔａ1、濃度幅下限値ｂｔｂ0と濃度幅上限値ｂｔｂ1を抽出する。
【０２１４】
ステップＳ１１０４で、フレームメモリ５０３のすべてのＬ*ａ*ｂ*画像データについて、２値化し、２値化されたＬ*ａ*ｂ*画像データが２値フレームメモリ５１３に格納された後、ＣＰＵ５７０は像域分離部５１４を起動する。像域分離部５１４は、２値フレームメモリ５１３から読み込んだ２値化されたＬ*ａ*ｂ*画像データを領域分割し、分割された領域の属性を像域分離処理によって判定する。判定された領域の属性や各領域の位置等を示す情報は領域情報メモリ５１６に格納する。
【０２１５】
ステップＳ１１０５で、量子化数判定部５１５は、各Ｌ*、ａ*、ｂ*画像データのヒストグラムにおいて、下地代表濃度以外の出現頻度の極大値を持つ画素値に基づいて、前景色代表色を抽出する。ステップＳ１１０６で、抽出された前景色代表色に基づいて、画像データを量子化するための量子化数を判定する。
尚、第５の実施の形態では、図３２の代表色判定部５５４の領域内に存在する前景代表色の抽出において、色の頻度（Ｌ*ａ*ｂ*画像データ）の比較に基づいて前景代表色の抽出を行ったが、これに限定されない。例えば、代表色抽出部５５３で抽出された色の組み合わせを初期ベクトルとし、フレームメモリ５０３からＬ*ａ*ｂ*画像データを読み込む。そして、ベクトル量子化のベクトルを決定するのに一般的な手法であるＬＢＧ法を用いて最適なベクトルを算出する。更に、各ベクトルが表わすＬ*ａ*ｂ*画像データ間で色差を判定し、視覚的に差が目立たない色差のものを統合することで前景代表色を抽出してももちろん構わない。
【０２１６】
更に、第５の実施の形態では、図３２の色変換部５０２でＬ*ａ*ｂ*に変換して代表色濃度、量子化数ｎ、前景色代表色を得たが、他に輝度色度を表すＹＣｂＣｒなどの画像データに変換しても構わない。また、処理を簡略化するために、色変換部５０２を省略して、ＲＧＢカラー画像データのまま行っても構わない。このときのブロック図を図３４に示す。尚、図３１と同じ番号を付したものはまったく同じ動作を行う。フレームメモリ５０３はＲＧＢ画像データを格納し、ヒストグラム生成部５０６と下地濃度判定部５０９はＲ画像データを、ヒストグラム生成部５０７と下地濃度判定部５１０はＧ画像データを、ヒストグラム生成部５０８と下地濃度判定部５１１はＢ画像データの処理を行う。
【０２１７】
また、処理を簡略化するために、Ｌ*画像データのみを像域分離に用いても構わない。このときのブロック図を図３５に示す。尚、図３１と同じ番号を付したものはまったく同じ動作を行う。５３０は平坦画素判定部であり、フレームメモリ５０３からＬ*画像データを読み込み、（４）式のエッジ量ｅＬを求め、閾値Ｔｈ２と比較を行い、０または１を出力する。５３１と５３２は最大頻度検出部であり、図２３の最大頻度検出部４０４と同じ構成で同様に動作する。５３３は比較部であり、下地判定部５０９から濃度幅下限値ｂｔＬ0と濃度幅上限値ｂｔＬ1を、フレームメモリ５０３からＬ*画像データを入力する。
【０２１８】
Ｌ*ａ*ｂ*画像データが入力順にフレームメモリ５０３から読み出され、ラッチ５０５に入力されると同時に、Ｌ*画像データが平坦画素判定部５３０に入力され、エッジ量ｅＬにしたがって０または１を出力する。
ヒストグラム生成部５０６〜５０８でヒストグラムの生成が終了したら、下地濃度判定部５０９と最大頻度検出部５３０、５３１を起動させ、下地濃度判定部５０９ではＬ*画像データの下地代表濃度ｂＬ、濃度幅下限値ｂｔＬ0、濃度幅上限値ｂｔＬ1を算出し、最大頻度検出部５３１、１３２はａ*、ｂ*画像データの下地代表濃度ｂａ、ｂｂをそれぞれ算出する。
【０２１９】
比較部５３２は濃度幅下限値ｂｔＬ0、濃度幅上限値ｂｔＬ1を入力し、更に、フレームメモリ５０３からＬ*画像データを読み込み、入力されたＬ*画像データが濃度幅下限値ｂｔＬ0と濃度幅上限値ｂｔＬ1の間の値であれば「０」をそうでなければ「１」を出力する。この２値結果を２値フレームメモリ５１３に格納し、像域分離処理を行い、領域情報を領域情報メモリ５１６に入力する。更に、フレームメモリ５０３からＬ*ａ*ｂ*画像データを読み込み、量子化数判定部５１５で量子化数ｎ、前景色代表色を算出する。
【０２２０】
次に第５の実施の形態で説明される画像処理装置の適用例を説明する。例えば、図３６に示されるような光学的文字認識装置に適用させた場合に、実行される動作とその構成を説明する。
図３６は第５の実施の形態の画像処理装置を適用させた光学的文字認識装置の構成を示すブロック図である。
【０２２１】
図３６において、５６０は第５の実施の形態の図３１に示される画像処理装置である。５６１は図３１の端子５１７〜５１９から出力された各Ｌ*、ａ*、ｂ*画像データの下地代表濃度ｂＬ、ｂａ、ｂｂと端子５２０から出力された領域情報と量子化数ｎと各前景色代表色を入力し、端子５２１から出力されたフレームメモリ５０３から出力されたＬ*ａ*ｂ*画像データを量子化する量子化部である。
【０２２２】
５６２はフレームメモリであり、量子化部５６１で量子化されたＬ*ａ*ｂ*画像データを格納する。例えば、量子化数がｎであるとすると、ｎ値化されたＬ*ａ*ｂ*画像データをｎ枚のビットプレーンで格納する。５６３はフレームメモリ５６２に格納される各ビットプレーン画像を読み込み、読み込んだ画像に含まれる文字を認識し、対応する文字情報を文字のコードとして出力するＯＣＲ部である。
【０２２３】
５６４はＯＣＲ部５６３が出力した文字コードを格納すると同時に、Ｌ*ａ*ｂ*画像データに存在する領域の属性と情報から文字の並びを調整し、色文字である文字については、文字コードのほかに色コードも付加する文字情報合成部である。５６５はＬ*ａ*ｂ*画像データに存在する領域毎に文字コードと色コードを記憶する記憶装置である。
【０２２４】
次に図３６で実行される処理の概要を説明する。
画像処理装置１６０で、Ｌ*ａ*ｂ*画像データに存在する領域の属性と情報の抽出、各領域の量子化数ｎと前景色代表色の抽出が終了したら、ＣＰＵ５７０は抽出された領域でその属性が「文字」である領域について、対応するＬ*ａ*ｂ*画像データの画素値を端子５２１から、領域の情報を端子５２０から、各Ｌ*ａ*ｂ*画像データの下地代表濃度ｂＬ、ｂａ、ｂｂを端子５１７〜５１９から読み出し、量子化部５６１に入力する。
【０２２５】
尚、ここで、フレームメモリ５６２に格納されるｎ枚のビットプレーン画像の内容を「０」にクリアしておく。また、量子化部５６１は、下地代表濃度ｂＬ、ｂａ、ｂｂで表わされる色を０番、領域情報の前景色代表色を１番からｎ番まで割り振っておく。そして、この１番からｎ番は、フレームメモリ５６２に格納されるｎ枚のビットプレーン画像に１対１で対応している。
【０２２６】
続いて、領域に対応するＬ*ａ*ｂ*画像データの画素値より、Ｌ*ａ*ｂ*画像データと下地の色、前景色代表色との間で色差を抽出し、最も色差の小さかった色を検出し、検出された色に対応する割り振られた番号を判定する。判定された番号が０以外であれば、その番号が表わすフレームメモリ５６２のビットプレーン画像に対応する画素を「１」とする。この作業を領域内の全ての画素について行った後に、ＣＰＵ５７０はＯＣＲ部５６３を起動させる。
【０２２７】
ＯＣＲ部５６３は、ビットプレーン画像を１番から順に入力し、入力されたビットプレーン画像に存在する文字をＯＣＲ処理によって文字コードを生成し、その生成された文字の位置を検出していく。１つのビットプレーン画像が終了したら、その文字コード、位置、ビットプレーン画像の番号を文字情報合成部５６４に領域毎に格納する。
【０２２８】
領域情報メモリ５１６に格納されているすべての領域について、上述の処理が実行され、その処理結果が文字情報合成部５６４へ格納されたら、ＣＰＵ５７０は文字情報合成部５６４に格納される各領域の位置を示す情報から各領域を読み出す順番を推定する。そして、その推定された順番に従って、各領域に含まれる文字の情報を読み出し、文字の位置を示す情報から文字順を算出する。更に、対応する文字コードと文字の色のコードを正しく並び変えて、記憶装置５６５の所定の記憶領域に格納する。全ての領域に含まれる文字の情報が記憶装置５６５へ格納されたら、全ての動作を終了する。
【０２２９】
以上説明したように、第５の実施の形態によれば、各Ｌ*、ａ*、ｂ*画像データの画素値のヒストグラムに基づいて、各Ｌ*、ａ*、ｂ*画像データの下地代表濃度ｂＬ、下地代表濃度ｂａ、下地代表濃度ｂｂと、下地の濃度幅上限値ｂｔＬ1と濃度幅下限値ｂｔＬ0、下地の濃度幅上限値ｂｔａ1、更には濃度幅下限値ｂｔａ0、下地の濃度幅上限値ｂｔｂ1と濃度幅下限値ｂｔｂ0を抽出し、各濃度幅上限値と濃度幅下限値の範囲内に含まれる画素値をすべて下地代表濃度として出力することで、一定した好適な下地の濃度を出力することができる。
【０２３０】
また、各Ｌ*、ａ*、ｂ*画像データの下地代表濃度ｂＬ、下地代表濃度ｂａ、下地代表濃度ｂｂを示す極大値以外にヒストグラムに存在する出現頻度の極大値の数に基づいて、下地以外に原稿画像に存在する画像の色の組み合わせを判定する。そして、その判定された画像の色の組み合わせを表現する各色群とＬ*ａ*ｂ*画像データとの色差を算出し、算出された色差が最小となる色の出現頻度を各画素値毎に計数する。更に、色差が最小となる色の出現頻度の分布に対し、閾値Ｔｈ３以上となる色（前景色代表色）で出力することで、一定した好適な色の画素値で画像を出力することができる。
【０２３１】
更に、閾値Ｔｈ３以上となる色の個数に基づいて、原稿画像を量子化するための量子化数を判定するため、原稿画像を好適に量子化する量子化数を決定することができる。
また、カラー多値画像に対して、高速で比較的小さい回路規模で好適な量子化数の判定が可能になり、下地のノイズに影響されることなく、文字等の前景色を効率良く抽出できる。また、ＯＣＲに適用した場合、文字の色を抽出することができるため、色の情報を欠落させることがない。更に、文字情報を検索する際に色で検索したり、色文字を重要な情報とするキーワードとすることで効率的な検索を行うことも可能となる。
【０２３２】
＜第６の実施の形態＞
第６の実施の形態では、第４の実施の形態と第５の実施の形態で説明された装置構成によって実行される処理のプログラムを、例えば、ＲＯＭ等の記憶媒体に記憶させ、そのプログラムを実行することで、本発明で説明される処理を行う。
図３７は第６の実施の形態の画像処理装置の構成を示すブロック図である。
【０２３３】
図３７において、１２０１は後述する第６の実施の形態で説明される処理（図４０〜５３のフローチャート参照）を実行する実行プログラムによって動作し、装置を構成する各構成要素の制御を行うＣＰＵである。１２０２はその実行プログラムを格納し、実行プログラムを実行するのに必要な記憶容量を確保するプログラムメモリである。１２０３はユーザが実行プログラムの実行等の各種指示を入力する端末である。
【０２３４】
１２０４は磁気ディスク等で構成される記憶装置である。１２０５は原稿画像の読み込みを行う白黒スキャナである。ここではカラー多値画像データの原稿画像を読み込むこととする。１２０６はカラー多値画像データを、原稿画像分格納する多値フレームメモリである。
１２０７はカラー多値画像データを２値化して得られる２値画像データを、原稿画像分格納する２値フレームメモリである。１２０８は通信プロトコルに合わせて符号化データを送信する通信インタフェース（通信Ｉ／Ｆ）である。１２０９は電話回線やＬＡＮで構成される通信回線である。２１０は装置を構成する各構成要素を接続し、画像データ等の各種データや制御信号を授受するバスである。
【０２３５】
以下、第６の実施の形態で実行される処理について、図４０〜図５３のフローチャートを用いて説明する。
尚、第６の実施の形態では、例えば、ユーザの指示によって、原稿画像をスキャナ２０５より読み込む。そして、読み込んで得られる画像データを２値化し、２値化して得られる２値画像データの領域分割を行う。分割された各領域の属性を像域分離処理によって判定し、判定された属性に基づいて２値画像データに含まれる各領域を量子化するための量子化数を決定する。更に、決定された量子化数に基づいて、各領域の構造化データを生成し、生成された構造化データを記憶装置１２０４に格納するまでの処理を、例に挙げて説明する。
【０２３６】
また、構造化データは、各領域の属性に基づいて、領域に対応する２値画像データを好適に符号化した符号化データのことである。また、第６の実施の形態で説明される処理を実行する原稿画像は、例えば、図３８の（ａ）に示されるような原稿画像を用いるものとする。原稿画像に存在する文字は、太字の「灰色」という文字が灰色であり、斜字の「赤文字」という文字が赤色であり、それ以外は黒色の文字から構成されている。
【０２３７】
まず、図４０〜図４２のフローチャートを用いて、白黒スキャナ１２０５にセットされた原稿画像を、端末１２０３から装置を起動することで、原稿画像の画像データを読み込み、読み込まれた画像データに基づいて、画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出するまでの処理について説明する。
【０２３８】
図４０〜図４２は第６の実施の形態によって実行される画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出する処理の処理フローを示すフローチャートである。
図４０において、ステップＳ１００１で、ＣＰＵ１２０１は白黒スキャナ１２０５から画像データを読み込み、多値フレームメモリ１２０６に格納する。次に、ステップＳ１００２で、多値フレームメモリ１２０６上に展開される画像データの各画素データｐ（ｘ，ｙ）の画素値をカウントするカウンタを０にリセットする。尚、カウンタは頻度hist_pixel［i］（ｉ＝０〜２５５）からなり、例えば、画素値がｉの画素データは、頻度hist_pixel［i］にカウントされる。また、各カウンタでカウントされる値は各画素値の出現頻度を示す。
【０２３９】
ステップＳ１００３で、多値フレームメモリ１２０６上より画素データｐ（ｘ，ｙ）の画素値を順次読み込み、すべての画素データｐ（ｘ，ｙ）の画素値が読み込まれたか否かを判定する。そして、すべての画素データｐ（ｘ，ｙ）の画素値が読み込まれるまでは、ステップＳ１００４で、順次読み込まれる画素データｐ（ｘ，ｙ）の画素値に対応する頻度hist_pixel［p(x,y)］の内容を１インクリメントする。
【０２４０】
そして、各画素データｐ（ｘ，ｙ）の画素値の読み込みが終了したら、ステップＳ１００６に進む。尚、各画素データｐ（ｘ，ｙ）の画素値の読み込みが終了すると、頻度hist_pixel［i］に示される各画素値の出現頻度によって、画像データの画素値の出現頻度のヒストグラムが生成される。ステップＳ１００６で、生成されたヒストグラムの各画素値の出現頻度と比較するための変数max_hist、比較の結果に基づいて決定される下地代表濃度bg_value、比較した画素値の数をカウントするループカウンタｉの内容を０にリセットする。
【０２４１】
ステップＳ１００７で、生成されたヒストグラムから各画素値の頻度hist_pixel［i］を読み込み、すべての頻度hist_pixel［i］が読み込まれたか否かを判定する。そして、すべての頻度hist_pixel［i］が読み込まれるまでは、ステップＳ１００８で、順次読み込まれるhist_pixel［i］と変数max_histを比較する。頻度hist_pixel［i］が変数max_histより大きい場合（ステップＳ１００８でＹＥＳ）、ステップＳ１００９に進む。ステップＳ１００９で、変数max_histに頻度hist_pixel［i］を代入し、下地代表濃度bg_valueにループカウンタｉの内容を代入する。一方、頻度hist_pixel［i］が変数max_histより小さい場合（ステップＳ１００８でＮＯ）、ステップＳ１０１０に進む。
【０２４２】
ステップＳ１０１０で、ループカウンタｉの内容を１インクリメントする。そして、すべての頻度hist_pixel［i］の比較が終了したら、つまり、ループカウンタｉの内容が２５５になったら、ステップＳ１０１１に進む。
図３９において、ステップＳ１０１１で、ヒストグラムを正規化するための量子化ステップmax_hist ／１００を算出した後に、前述の（６）式に従って、量子化頻度hist_q［i］を算出する。
【０２４３】
次に、ステップＳ１０１２で、読み込まれる量子化頻度hist_q［i］の数をカウントするループカウンタｉの内容を０にリセットする。
ステップＳ１０１３で、読み込まれる量子化頻度hist_q［i］を順次読み込み、すべての量子化頻度hist_q［i］が読み込まれたか否かを判定する。そして、すべての量子化頻度hist_q［i］が読み込まれるまでは、ステップＳ１０１４で、順次読み込まれる量子化頻度hist_q［i］とノイズ閾値noise_thを比較する。量子化頻度hist_q［i］がノイズ閾値noise_thより小さい場合（ステップＳ１０１４でＮＯ）、ステップＳ１０１５に進む。ステップＳ１０１５で、量子化頻度hist_q［i］の内容を０にする。一方、量子化頻度hist_q［i］がノイズ閾値noise_thより大きい場合（ステップＳ１０１４でＹＥＳ）、ステップＳ１０１６に進む。尚、ノイズ閾値noise_thは第４の実施の形態で説明される閾値Ｔｈ１と同様の目的に使うための閾値である。
【０２４４】
ステップＳ１０１６で、ループカウンタｉの内容を１インクリメントする。そして、すべての量子化頻度hist_q［i］の比較が終了したら、つまり、ループカウンタｉの内容が２５６になったら、ステップＳ１０１７に進む。
ステップＳ１０１７で、下地濃度下限値ｂｔ0として下地代表濃度bg_valueから１を引いたものを算出する。ステップＳ１０１８で、順次、頻度hist_q［bt0］が０であるか否かを判定する。そして、頻度hist_q［bt0］が０になるまで、ステップＳ１０１９で、下地濃度下限値ｂｔ0から１デクリメントする。
【０２４５】
そして、頻度hist_q［bt0］が０になったら、ステップＳ１０２０で、下地濃度上限値ｂｔ1として下地代表濃度bg_valueから１を足したものを算出する。尚、頻度hist_q［bt0］が０になった時の下地濃度下限値ｂｔ0が、下地濃度下限値ｂｔ0となる。
ステップＳ１０２１で、順次、下地濃度上限値ｂｔ1の頻度hist_q［bt1］が０であるか否かを判定する。そして、頻度hist_q［bt1］が０になるまで、ステップＳ１０２２で、下地濃度上限値ｂｔ１から１インクリメントする。そして、頻度hist_q［bt1］が０になったら、処理を終了する。尚、頻度hist_q［bt1］が０になった時の下地濃度上限値ｂｔ1が、下地濃度上限値ｂｔ1となる。
【０２４６】
以上、図４０〜図４２のフローチャートで説明された処理によって、画像データの下地代表濃度bg_value、下地濃度下限値ｂｔ0、下地濃度上限値ｂｔ1が算出される。また、図３８の（ａ）の原稿画像に上述の処理を適用した場合、図３９のようなヒストグラムが得られる。図３９において、点線はノイズ閾値noise_thを表わす。ヒストグラムで右端の最も大きな出現頻度を持つ画素値が下地代表濃度bg_valueであり、その山の両端に下地濃度下限値ｂｔ0、下地濃度上限値ｂｔ1が存在する。
【０２４７】
続いて、図４３のフローチャートを用いて、画像データの像域分離処理を行うために画像データを２値化する処理について説明する。
図４３は第６の実施の形態で実行される画像データを２値化する処理の処理フローを示すフローチャートである。
ステップＳ１１０１で、多値フレームメモリ１２０６上に展開される画像データの各画素データｐ（ｘ，ｙ）を順次読み込む。そして、ステップＳ１１０２で、すべての画素データｐ（ｘ，ｙ）に対し、後述のステップＳ１１０３で実行される処理が終了したか否かを判定する。そして、ステップＳ１１０３で、すべての画素データｐ（ｘ，ｙ）に対し、２値画像データｂ（ｘ，ｙ）に変換する２値化を行う。２値化の方法は、順次読み込まれる画素データｐ（ｘ，ｙ）の画素値が下地濃度下限値ｂｔ0以上でかつ下地濃度上限値ｂｔ1未満であるかを判定する。
【０２４８】
そして、画素データｐ（ｘ，ｙ）が下地濃度下限値ｂｔ0以上でかつ下地濃度上限値ｂｔ1未満であれば、ステップＳ１１０５で、その画素データｐ（ｘ，ｙ）の２値画像データｂ（ｘ，ｙ）を「０」として、２値フレームメモリ１２０７の対応する領域に書き込む。一方、画素データｐ（ｘ，ｙ）が下地濃度下限値ｂｔ0未満または下地濃度上限値ｂｔ1以上であれば、ステップＳ１１０４で、その画素データｐ（ｘ，ｙ）の２値画像データｂ（ｘ，ｙ）を「１」として、２値フレームメモリ１２０７の対応する領域に書き込む。
【０２４９】
多値フレームメモリ１２０６に上の全ての画素データｐ（ｘ，ｙ）について、２値化されたら、処理を終了する。
以上、図４３のフローチャートで説明された処理によって、２値フレームメモリ１２０７に、多値フレームメモリ１２０６上に格納される画像データの各画素データｐ（ｘ，ｙ）の２値化された２値画像データｂ（ｘ，ｙ）が格納される。
【０２５０】
続いて、図４４〜図４７のフローチャートを用いて、２値フレームメモリ１２０７上に格納された２値画像データを領域分割し、分割された領域の属性を像域分離処理によって判定する。そして、判定された属性に基づいて多値画像データに含まれる各領域の前景色代表濃度を抽出し、抽出された前景色代表色、前景色代表濃度に基づいて、各領域を量子化するための量子化数を決定する処理について説明する。
【０２５１】
図４４〜図４７は第６の実施の形態で実行されるの多値画像データに含まれる各領域を量子化するための量子化数、前景色代表濃度を決定する処理の処理フローを示すフローチャートである。
図４４において、ステップＳ１２０１で、２値フレームメモリ１２０７から２値画像データを読み込む。ステップＳ１２０２で、読み込まれた２値画像データに対し、類似する属性を持つ領域毎に分割する。そして、分離された領域数をカウンタarea_countでカウントする。また、各領域の位置座標と大きさを求める。ステップＳ１２０３で、カウントされた各領域に対して、各領域に含まれる「１」である２値画像データの塊の密度や形状、並びから「画像」、「図形」、「文字」等の領域の属性を判定する像域分離処理を行う。ここでは、上述の第３の実施形態と同様の像域分離処理の方法を用いて、像域分離を行う。尚、図３８の（ａ）の原稿画像に対し、像域分離を行うと、図３８の（ｂ）のような領域１２２１〜１２２３に分割され、各領域は「文字」の属性を持つ領域として判定される。
【０２５２】
次に、カウントされた各領域に対し、画像表現に必要な量子化数を決定する量子化数決定処理を、ステップＳ１２０４以降で行う。
ステップＳ１２０４で、ループカウンタｋの値を１にセットする。また、ループカウンタｋは、各領域に対して量子化数決定処理が終了する毎に、１インクリメントされ、そのカウント値と領域の番号が対応している。ステップＳ１２０５で、ループカウンタｋの値がカウンタarea_countの値よりも大きいか否かを判定する。ループカウンタｋの値がカウンタarea_countの値よりも小さい場合（ステップＳ１２０５でＮＯ）、ステップＳ１２０６に進む。一方、ループカウンタｋの値がカウンタarea_countの値よりも大きい場合（ステップＳ１２０５でＹＥＳ）、すべてのカウントされた領域に対して、量子化数決定処理がなされたことになるので、処理を終了する。
【０２５３】
ステップＳ１２０６で、多値フレームメモリ１２０６からループカウンタｋの値に対応する領域の画素データｐ（ｘ，ｙ）の画素値をカウントするカウンタを０にリセットする。尚、カウンタは頻度hist_area［i］（ｉ＝０〜２５５）からなり、例えば、画素値がｉの画素データは、頻度hist_area［i］にカウントされる。また、各カウンタでカウントされる値は各画素値の出現頻度を示す。
【０２５４】
ステップＳ１２０７で、多値フレームメモリ１２０６からループカウンタｋの値に対応する領域の画素データｐ（ｘ，ｙ）の画素値と２値フレームメモリ１２０７から画素データｐ（ｘ，ｙ）に対応する画素データｂ（ｘ，ｙ）の画素値を順次読み込み、すべての画素データｐ（ｘ，ｙ）と画素データｂ（ｘ，ｙ）の画素値が読み込まれたか否かを判定する。そして、すべての画素データｐ（ｘ，ｙ）と画素データｂ（ｘ，ｙ）の画素値が読み込まれるまでは、ステップＳ１２０８で、順次読み込まれる画素データｂ（ｘ，ｙ）の画素値を判定する。画素データｂ（ｘ，ｙ）の画素値が１の場合（ステップＳ１２０８でＹＥＳ）、ステップＳ１２０９に進む。ステップＳ１２０９で、画素データｐ（ｘ，ｙ）の画素値に対応する頻度hist_area［p(x,y)］の内容を１インクリメントする。一方、画素データｂ（ｘ，ｙ）の画素値が１でない場合（ステップＳ１２０８でＮＯ）、つまり、画素値が０である場合、ステップＳ１２０７に戻る。
【０２５５】
そして、全ての画素値の読み込みが終了したら、ステップＳ１２１０に進む。尚、全ての画素値の読み込みが終了すると、頻度hist_area［i］に示される各画素値の出現頻度によって、画像データの画素値の出現頻度のヒストグラムが生成される。  次に、ステップＳ１２１０〜ステップＳ１２１３で生成されたヒストグラムを平滑化する処理を行う。
【０２５６】
図４３において、ステップＳ１２１０で、生成されたヒストグラムの各画素値の出現頻度hist_area［i］を平滑化した画素値の数をカウントするループカウンタｉの内容を０にリセットする。
ステップＳ１２１１で、生成されたヒストグラムから各画素値の頻度hist_area［i］を読み込み、すべての頻度hist_area［i］が読み込まれたか否かを判定する。そして、すべての頻度hist_area［i］が読み込まれるまでは、ステップＳ１２１２で、上述の（８）式に従って、順次読み込まれるhist_area［i］を平滑化し、平滑化頻度hist_sm［i］を算出する。
【０２５７】
ステップＳ１２１３で、ループカウンタｉの内容を１インクリメントする。そして、すべての頻度hist_area［i］の平滑化が終了したら、つまり、ループカウンタｉの内容が２５６になったら、ステップＳ１２１４に進む。
次に、ステップＳ１２１４〜ステップＳ１２２８で、平滑化頻度hist_sm［i］からなるヒストグラムより、ヒストグラムに存在する極大値と極小値を検出し、検出された極大値と極小値に基づいて、領域の前景色代表濃度を判定する処理を行う。
【０２５８】
ステップＳ１２１４で、極大値テーブルlist_1［i］の内容と、平滑化されたヒストグラムに存在する極大値の数をカウントするカウンタex_count_1の内容と、平滑化頻度hist_sm［i］の数をカウントするループカウンタｉの内容を０にリセットする。尚、極大値テーブルlist_1［i］は、カウンタex_count_1のカウント数（list_1［ex_count_1］）とそのカウント数に対応する極大値を持つ平滑化頻度hist_sm［i］の画素値の関係を示すテーブルである。
【０２５９】
ステップＳ１２１５で、極小値テーブルlist_2［1］の内容を０にセットし、平滑化されたヒストグラムに存在する極小値の数をカウントするカウンタex_count_2の内容を１にセットする。尚、極小値テーブルlist_2［i］は、カウンタex_count_2のカウント数（list_2［ex_count_2］）とそのカウント数に対応する極小値を持つ平滑化頻度hist_sm［i］の画素値の関係を示すテーブルである。但し、一般的に、平滑化されたヒストグラムには、画素値が小さい所で、出現頻度が０の極小値を持つ画素値を持っているので、１番目にカウントされる極小値を持つ画素値は０となり、極小値テーブルlist_2［1］には０がセットされる。
【０２６０】
ステップＳ１２１６で、平滑化されたヒストグラムから各画素値の平滑化頻度hist_sm［i］を読み込み、すべての平滑化頻度hist_sm［i］が読み込まれたか否かを判定する。そして、すべての平滑化頻度hist_sm［i］が読み込まれるまでは、ステップＳ１２１７で、順次読み込まれる平滑化頻度hist_sm［i］が極大値であるか否かを判定する。平滑化頻度hist_sm［i］が極大値である場合（ステップＳ１２１７でＹＥＳ）、ステップＳ１２１８に進む。ステップＳ１２１８で、カウンタex_count_1の内容を１インクリメントし、極大値テーブルlist_1［i］のカウント数list_1［ex_count_1］に平滑化頻度hist_sm［i］の画素値を対応付ける。一方、平滑化頻度hist_sm［i］が極大値でない場合（ステップＳ１２１７でＮＯ）、ステップＳ１２１９に進む。
【０２６１】
ステップＳ１２１９で、順次読み込まれる平滑化頻度hist_sm［i］が極小値であるか否かを判定する。平滑化頻度hist_sm［i］が極小値である場合（ステップＳ１２１９でＹＥＳ）、ステップＳ１２２０に進む。ステップＳ１２２０で、カウンタex_count_2の内容を１インクリメントし、極小値テーブルlist_2［i］のカウント数list_2［ex_count_2］に平滑化頻度hist_sm［i］の画素値を対応付ける。一方、平滑化頻度hist_sm［i］が極小値でない場合（ステップＳ１２１９でＮＯ）、ステップＳ１２２１に進む。
【０２６２】
ステップＳ１２２１で、ループカウンタｉの内容を１インクリメントする。そして、すべての平滑化頻度hist_sm［i］の比較が終了したら、つまり、ループカウンタｉの内容が２５６になったら、ステップＳ１２２２に進む。
図２４において、ステップＳ１２２２で、極大値テーブルlist_3［i］の内容を０にリセットする。また、極大値テーブルlist_1［i］の中で極大値の値が近い極大値は、それらを１つの極大値として統合し、その統合後に得られる極大値とそれ以外の極大値の数をカウントするカウンタex_count_3の内容を０にリセットする。更に、統合する極大値の有無の判定がなされた平滑化頻度hist_sm［i］の数をカウントするループカウンタｉの内容を０にリセットする。尚、極大値テーブルlist_3［i］は、カウンタex_count_3のカウント数（list_3［ex_count_3］）とそのカウント数に対応する極大値を持つ平滑化頻度hist_sm［i］の画素値の関係を示すテーブルである。
【０２６３】
ステップＳ１２２３で、極小値テーブルlist_2［1］の内容を極小値テーブルlist_4［1］にセットする。また、極大値が統合されることによって、なくなる極小値とそれ以外の極小値の数をカウントするカウンタex_count_4の内容を１にセットする。尚、極小値テーブルlist_4［i］は、カウンタex_count_4のカウント数（list_4［ex_count_4］）とそのカウント数に対応する極小値を持つ平滑化頻度hist_sm［i］の画素値の関係を示すテーブルである。
【０２６４】
ステップＳ１２２４で、極大値テーブルlist_1［i］から各極大値を読み込み、読み込まれた極大値の数がカウンタex_count_1よりも大きい否かを判定する。そして、読み込まれた極大値の数がカウンタex_count_1よりも大きくなるまでは、ステップＳ１２２５で、極大値テーブルlist_1［i］のi+1番目の極大値と、i番目の極大値に対応する画素値の差を算出し、算出された差が所定の閾値Ｔｈ５よりも大きいか否かを判定する。
【０２６５】
算出された差が所定の閾値Ｔｈ５よりも大きい場合（ステップＳ１２２５でＹＥＳ）、ステップＳ１２２６に進む。ステップＳ１２２６で、カウンタex_count_3の内容を１インクリメントし、極大値テーブルlist_3［i］のカウント数list_3［ex_count_3］に、極大値テーブルlist_1［i］のカウント数list_1［i］に対応する平滑化頻度hist_sm［i］の画素値を対応付ける。ステップＳ１２２７で、極小値テーブルlist_4［i］のカウント数list_4［ex_count_4］に、極小値テーブルlist_2［i］のカウント数list_2［i］に対応する平滑化頻度hist_sm［i］の画素値を対応付ける。一方、算出された差が所定の閾値Ｔｈ５よりも小さい場合（ステップＳ１２２５でＮＯ）、ステップＳ１２２８に進む。
【０２６６】
ステップＳ１２２８で、ループカウンタｉの内容を１インクリメントする。そして、極大値テーブルlist_1［i］から各極大値を読み込み、読み込まれた極大値の数、つまり、ループカウンタｉの内容がカウンタex_count_1の内容よりも大きくなったら、ステップＳ１２２９に進む。
尚、極大値テーブルlist_3［i］に格納されている極大値に対応する画素値が、前景色代表濃度となる。
【０２６７】
次に、ステップＳ１２２９〜ステップＳ１２３７で、平滑化頻度hist_sm［i］からなるヒストグラムより検出された極大値と極小値に基づいて、領域の前景色代表濃度を判定する。更に、判定された前景色代表濃度に基づいて、領域を量子化するための量子化数、量子化するための閾値である前景色代表閾値を判定する処理を行う。
【０２６８】
図４７において、ステップＳ１２２９で、前景色代表濃度テーブルlist_color［i］の内容と、前景色代表閾値テーブルlist_v［i］の内容と、前景色代表濃度の数をカウントするカウンタcolor_numberの内容と、前景色代表濃度の判定がなされた極大値（前景色代表濃度）の数をカウントするループカウンタｉの内容を０にリセットする。尚、前景色代表濃度テーブルlist_color［i］は、カウンタcolor_numberのカウント数（list_color［color_number］）とそのカウント数に対応する極大値を持つ平滑化頻度hist_sm［i］の画素値の関係を示すテーブルである。また、前景色代表閾値テーブルlist_v［i］は、カウンタcolor_numberのカウント数（list_v［color_number］）とそのカウント数に対応する極小値を持つ平滑化頻度hist_sm［i］の画素値の関係を示すテーブルである。
【０２６９】
ステップＳ１２３０で、極大値テーブルlist_3［i］から各極大値を読み込み、読み込まれた極大値の数がカウンタex_count_3よりも大きい否かを判定する。そして、読み込まれた極大値の数がカウンタex_count_3よりも大きくなるまでは、ステップＳ１２３１で、変数subを（９）式に従って算出する。
0003745069.tif 000003
ステップＳ１２３２で、算出された変数subが所定の閾値Ｔｈ６よりも大きいか否かを判定する。算出された差が所定の閾値Ｔｈ６よりも大きい場合（ステップＳ１２３２でＹＥＳ）、ステップＳ１２３３に進む。ステップＳ１２３３で、カウンタcolor_numberの内容を１インクリメントし、前景色代表濃度テーブルlist_color［i］のカウント数list_color［color_number］に、極大値テーブルlist_3［i］のカウント数list_3［i］に対応する平滑化頻度hist_sm［i］の画素値を対応付ける。ステップＳ１２３４で、前景色代表閾値テーブルlist_v［i］のカウント数list_v［i］［color_number］に、極小値テーブルlist_4［i］のカウント数list_4［i］に対応する平滑化頻度hist_sm［i］の画素値を対応付ける。一方、算出された差が所定の閾値Ｔｈ６よりも小さい場合（ステップＳ１２３２でＮＯ）、ステップＳ１２３５に進む。
【０２７０】
ステップＳ１２３５で、ループカウンタｉの内容を１インクリメントする。そして、極大値テーブルlist_3［i］から各極大値を読み込み、読み込まれた極大値の数、つまり、ループカウンタｉの内容がカウンタex_count_3の内容よりも大きくなったら、ステップＳ１２３６に進む。
ステップＳ１２３６で、前景色代表濃度テーブルlist_color［i］に格納されている極大値に対応する画素値を前景色代表濃度とし、前景色代表閾値テーブルlist_v［i］に格納されている極小値に対応する画素値を前景色代表閾値とする。また、カウンタcolor_numberは前景色代表濃度の存在する数を表しており、その領域を量子化するための量子化数とする。これらは、領域の情報として各領域毎にプログラムメモリ２０２の所定の領域に格納される。
【０２７１】
ステップＳ１２３７で、ループカウンタｋの内容を１インクリメントする。そして、すべての領域に対し画像表現に必要な量子化数を決定する量子化数決定処理が行われたら、つまり、ループカウンタｋの内容がカウンタarea_countの値になったら、すべての処理を終了する。
以上、図４４〜図４７のフローチャートで説明される処理によって、２値フレームメモリ１２０７上に格納された２値画像データを領域分割し、分割された領域の属性が像域分離処理によって判定される。そして、判定された属性に基づいて２値画像データに含まれる各領域を量子化するための量子化数と、量子化するための前景色代表閾値、更には前景色代表濃度が決定される。
【０２７２】
続いて、図４８のフローチャートを用いて、各領域の前景色代表閾値、前景色代表濃度領域に基づいて、各領域を更に分割する処理について説明する。
尚、図３８の（ａ）のようなカラー多値画像の場合、図４４のステップＳ１２０２の領域分割では、色の区別がなされないため色毎に領域が分割されない。そのため、色毎に領域を分割するために図４８のフローチャートで説明される処理を行う。
【０２７３】
図４８は第６の実施の形態で実行される領域分割された各領域を、前景色代表閾値、前景色代表濃度領域に基づいて、更に分割する処理の処理フローを示すフローチャートである。
ステップＳ１３０１で、ループカウンタｋの値を１にセットする。また、ループカウンタｋは、各領域の前景色代表閾値、前景色代表濃度領域に基づいて、各領域を更に分割する処理が終了する毎に、１インクリメントされ、そのカウント値と量子化数color_numberでカウントされた領域の値が対応している。ステップＳ１３０２で、ループカウンタｋの値が量子化数color_numberの値よりも大きいか否かを判定する。ループカウンタｋの値がカウンタ量子化数color_numberの値よりも小さい場合（ステップＳ１３０２でＮＯ）、ステップＳ１３０３に進む。一方、ループカウンタｋの値が量子化数color_numberの値よりも大きい場合（ステップＳ１３０２でＹＥＳ）、すべてのカウントされた領域に対して、各領域の前景色代表閾値、前景色代表濃度領域に基づいて、各領域を更に分割する処理がなされたことになるので、処理を終了する。
【０２７４】
ステップＳ１３０３で、多値フレームメモリ１２０６から対応する領域の画素データｐ（ｘ，ｙ）の画素値を順次読み込み、すべての画素データｐ（ｘ，ｙ）が読み込まれたか否かを判定する。そして、すべての画素データｐ（ｘ，ｙ）の画素値が読み込まれるまでは、ステップＳ１３０４で、順次読み込まれる画素データｐ（ｘ，ｙ）の画素値が、前景色代表閾値list_v［k-1］以上でかつ前景色代表閾値list_v［k］未満であるかを判定する。
【０２７５】
そして、画素データｐ（ｘ，ｙ）が前景色代表閾値list_v［k-1］以上でかつ前景色代表閾値list_v［k］未満であれば、ステップＳ１３０５で、その画素データｐ（ｘ，ｙ）の２値画像データｂ（ｘ，ｙ）を「１」として、２値フレームメモリ１２０７の対応する領域に書き込む。一方、画素データｐ（ｘ，ｙ）が前景色代表閾値list_v［k-1］未満または前景色代表閾値list_v［k］以上であれば、ステップＳ１３０６で、その画素データｐ（ｘ，ｙ）の２値画像データｂ（ｘ，ｙ）を「０」として、２値フレームメモリ１２０７の対応する領域に書き込む。
【０２７６】
多値フレームメモリ１２０６に上の全ての画素データｐ（ｘ，ｙ）について、前景色代表閾値との比較が終了したら、ステップＳ１３０７に進む。
ステップＳ１３０７で、２値フレームメモリ１２０７に書き込まれた２値画像データに含まれる領域に対し、類似する属性を持つ領域毎に更に分割する。そして、各領域が更に分離された領域数をカウンタarea_count_areaでカウントする。また、更に分離された各領域の位置座標と大きさを求める。ステップＳ１３０８で、カウントされた更に分離された各領域に対して、更に分離された各領域に含まれる「１」である２値画像データの塊の密度や形状、並びから「画像」、「図形」、「文字」等の領域の属性を判定する像域分離処理を行う。ここでは、上述の第３の実施形態と同様の像域分離処理の方法を用いて、像域分離を行う。
【０２７７】
ステップＳ１３０９で、更に分離された各領域の位置座標と大きさ、属性、前景色代表濃度を対応する領域毎に、プログラムメモリ１２０２の所定の領域に格納される。
ステップＳ１３１０で、ループカウンタｋの内容を１インクリメントする。そして、すべての領域に対し、各領域の前景色代表閾値、前景色代表濃度領域に基づいて、各領域を更に分割する処理が行われたら、つまり、ループカウンタｋの内容が量子化数color_numberの値になったら、すべての処理を終了する。
【０２７８】
以上、図４８のフローチャートで説明される処理によって、図４２のステップＳ１２０２の領域分割された各領域が色毎の領域に更に分割される。また、分割された領域の属性が像域分離処理によって判定される。
尚、図３８の（ａ）の原稿画像の場合、図４４のステップＳ１２０２で説明される領域分割によって得られる図３８の（ｂ）の領域に対し、図４８のフローチャートで説明される処理によって、図３８の（ｃ）に示されるように、領域２２２内には灰色文字を示す領域１２２４、領域１２２３には赤色文字を示す領域２２５が更に領域をして分割される。また、第６の実施の形態のように、カラー多値画像データを白黒スキャナで読み込む場合は、カラー多値画像データに含まれる色の情報は読み込まれない。しかし、色によってカラー多値画像データの濃度が異なるので、その濃度の違いによって色を判定あるいは推定できるので、図４８のフローチャートで説明される処理のように、領域を更に色毎の領域に分割することが可能となる。
【０２７９】
また、従来は下地の濃度を含んだまま、原稿画像の前景色代表濃度を、その原稿画像の画素値の出現頻度に基づいて判定していた。例えば、図３８の（ｂ）の領域１２２２の画素値の出現頻度のヒストグラムは図４９の（ａ）、領域１２２３の画素値の出現頻度のヒストグラムは図４９の（ｂ）のように生成されていた。そのため、これらのヒストグラムより、前景色代表濃度を極大値から判定しようとすると背景の裏写り等のノイズによって極大値のカウントを誤ってしまう。また、本来、文字等の抽出したい濃度の頻度が全体に比べて小さいため、ノイズとの分離が困難であった。
【０２８０】
そこで、第６の実施の形態では、原稿画像の下地の濃度を除去することで、原稿画像の前景色代表濃度の判定の精度を向上させている。例えば、図３８の（ｂ）の領域１２２２の下地濃度を除去した画素値の出現頻度のヒストグラムは図４９の（ｃ）となり、図３８の（ｂ）の領域１２２３の下地濃度を除去した画素値の出現頻度のヒストグラムは図４９の（ｄ）となる。これによって、文字等の必要な濃度が強調されたヒストグラムが得られるので、黒文字の代表濃度、灰色文字の代表濃度、赤文字を白黒スキャナ１２０５で読み込んだ場合でも、代表濃度を明確にできるわけである。
【０２８１】
続いて、図５０〜図５３のフローチャートを用いて、２値画像データに含まれる各領域の属性と対応する量子化数に基づいて、２値画像データに含まれる各領域の構造化データを生成する処理について説明する。
図５０〜図５３は第６の実施の形態で実行される２値画像データに含まれる各領域の構造化データを生成する処理の処理フローを示すフローチャートである。
【０２８２】
図５０において、ステップＳ１４０１で、ＣＰＵ５７０は、メモリ１２０２に格納されている全ての領域について領域の並び変えを行う。並び変えは、原稿画像に含まれる領域の構造化データを生成する処理の処理順を決定するために行う。ここでは、まず最初にカウンタarea_countでカウントされた数の領域の内、「文字」の属性を持つ領域が、図４８のフローチャートで説明される処理によって更に領域が分割される場合は、更に分割される前の「文字」の属性を持つ領域を削除する。そして、その「文字」の属性を持つ領域については、更に領域が分割された複数の領域として判定する。それ以外の更に分割されない領域は、１つの領域として判定する。このようにして、原稿画像に含まれる領域を判定し、メモリ１２０２に格納される領域において、まず、更に分割されない領域をラスタ方向で検索し、検索された順に更に分割されない領域を並べる。続いて、更に分割されるをラスタ方向で検索し、検索された順に更に分割される領域を並べる。
【０２８３】
ステップＳ１４０２で、並び変えられる領域の総数をカウンタarea_count_allでカウントする。ステップＳ１４０３で、ループカウンタｋの値を１にセットする。また、ループカウンタｋは、各領域に対して構造化データを生成する処理が終了する毎に、１インクリメントされ、そのカウント値とカウンタarea_count_allでカウントされた領域の値が対応している。ステップＳ１４０４で、ループカウンタｋの値がカウンタarea_count_allの値よりも大きいか否かを判定する。ループカウンタｋの値がカウンタarea_count_allの値よりも小さい場合（ステップＳ１４０４でＮＯ）、ステップＳ１４０５に進む。一方、ループカウンタｋの値がカウンタarea_count_allの値よりも大きい場合（ステップＳ１４０４でＹＥＳ）、すべてのカウントされた領域に対して、構造化データを生成する処理がなされたことになるので、処理を終了する。
【０２８４】
ステップＳ１４０５で、ループカウンタｋの値に対応する領域の像域分離処理による属性が「文字」であるか否かを判定する。領域の属性が「文字」である場合（ステップＳ１４０５でＹＥＳ）、以下、後述するステップＳ１４０９〜ステップＳ１４１４で説明される処理を行う。一方、領域の属性が「文字」でない場合（ステップＳ１４０５でＮＯ）、ステップＳ１４０６に進む。
【０２８５】
以下、領域の属性が「文字」である場合に実行される処理について、図５１のフローチャートを用いて説明する。
図５１は第６の実施の形態の領域の属性が「文字」である場合に実行される処理の処理フローを示すフローチャートである。
ステップＳ１４０９で、領域の属性が「文字」である領域に対応する画像データを多値フレームメモリ１２０６から読み込む。そして、読み込んだ画像データに対し、前景色代表濃度を持つ画素は「１」、それ以外は「０」にして、画像データを２値化する。
【０２８６】
ステップＳ１４１０で、領域の属性が「文字」である領域のＯＣＲを行い、ステップＳ１４１１で、色文字であるか否かを判定する。色文字である場合（ステップＳ１４１１でＹＥＳ）、ステップＳ１４１２に進む。ステップＳ１４１２で、色を抽出し、その抽出した色とその文字列をキーワードとする。一方、色文字でない場合（ステップＳ１４１１でＮＯ）、ステップＳ１４１３に進む。
【０２８７】
ステップＳ１４１３で、領域の属性が「文字」である領域のＪＢＩＧ符号化を行い、ステップＳ１４１０、ステップＳ１４１２によって、ＯＣＲの結果から得られた文字列、各文字列の濃度（前景色代表濃度）、対応する文字コード、キーワードとともにＪＢＩＧ符号化データを構造化データから構成される構造化文書の書式にしたがって記憶装置１２０４の所定の領域に格納する。そして、領域のＪＢＩＧ符号化と格納が終了したら、ステップＳ１４０８に進む。
【０２８８】
図５０のフローチャートに戻る。
ステップＳ１４０６で、ループカウンタｋの値に対応する領域の像域分離処理による属性が「図形」であるか否かを判定する。領域の属性が「図形」である場合（ステップＳ１４０６でＹＥＳ）、以下、後述するステップＳ１４１５〜ステップＳ１４１７で説明される処理を行う。一方、領域の属性が「図形」でない場合（ステップＳ１４０６でＮＯ）、ステップＳ１４０７に進む。
【０２８９】
以下、領域の属性が「図形」である場合に実行される処理について、図５２のフローチャートを用いて説明する。
図５２は第６の実施の形態の領域の属性が「図形」である場合に実行される処理の処理フローを示すフローチャートである。
ステップＳ１４１５で、領域の属性が「図形」である領域に対応する画像データを多値フレームメモリ１２０６から読み込む。そして、読み込んだ画像データに対し、前景色代表濃度を持つ画素は「１」、それ以外は「０」にして、画像データを２値化する。ステップＳ１４１６で、領域の属性が「図形」である領域のアウトライン抽出によるベクトル化を行う。
【０２９０】
ステップＳ１４１７で、ベクトル化の結果から得られたベクトルは、前景色代表濃度、その座標、領域サイズとともに構造化データから構成される構造化文書の書式にしたがって記憶装置１２０４の所定の領域に格納される。そして、領域のベクトル化と格納が終了したら、ステップＳ１４０８に進む。
図５０のフローチャートに戻る。
【０２９１】
ステップＳ１４０７で、ループカウンタｋの値に対応する領域の像域分離処理による属性が「写真」であるか否かを判定する。領域の属性が「写真」である場合（ステップＳ１４０７でＹＥＳ）、以下、後述するステップＳ１４１８、ステップＳ１４１９で説明される処理を行う。一方、領域の属性が「写真」でない場合（ステップＳ１４０７でＮＯ）、ステップＳ１４０８に進む。
【０２９２】
以下、領域の属性が「写真」である場合に実行される処理について、図５３のフローチャートを用いて説明する。
図５３は第６の実施の形態の領域の属性が「写真」である場合に実行される処理の処理フローを示すフローチャートである。
ステップＳ１４１８で、領域の属性が「写真」である領域に対応する画像データを多値フレームメモリ１２０６から読み込む。そして、読み込んだ画像データに対し、ＪＰＥＧ符号化を行う。
【０２９３】
ステップＳ１４１９で、ＪＰＥＧ符号化の結果から得られた符号化データは、その座標、領域サイズとともに構造化データから構成される構造化文書の書式にしたがって記憶装置１２０４の所定の領域に格納される。そして、領域のＪＰＥＧ符号化と格納が終了したら、ステップＳ１４０８に進む。
再び、図５０のフローチャートに戻る。
【０２９４】
ステップＳ１４０８で、ループカウンタｋの内容を１インクリメントする。そして、すべての領域に対し構造化データを生成する処理が行われたら、つまり、ループカウンタｋの内容がカウンタarea_count_allの値になったら、すべての処理を終了する。
以上、図５０〜図５３のフローチャートで説明される処理によって、２値画像データに含まれる各領域の属性と対応する量子化数に基づいて、２値画像データに含まれる各領域の構造化データが生成される。
【０２９５】
尚、第６の実施の形態では、構造化データを記憶装置１２０４に格納したが、通信インタフェース２０８を介して通信回線１２０９に送信することもできる。以上説明したように、第６の実施の形態によれば、画像データの画素値のヒストグラムに基づいて、下地代表濃度bg_valueと下地の濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0を抽出し、濃度幅上限値ｂｔ1と濃度幅下限値ｂｔ0の範囲内に含まれる画素値をすべて下地代表濃度bg_valueとして出力することで、一定した好適な下地の濃度を出力することができる。
【０２９６】
また、下地代表濃度bg_valueを示す極大値以外にヒストグラムに存在する出現頻度の極大値を持つ画素値を含む閾値noith_th以上の出現頻度を持つ画素値群を、下地以外に原稿画像に存在する画像として判定する。そして、その判定された画像を表現する所定範囲の画素値群を一律にその所定範囲内の出現頻度の極大値を持つ画素値（前景色代表濃度）で出力することで、一定した好適な画素値で画像を出力することができる。
【０２９７】
また、その判定された画像を表現する前景色代表濃度を含む所定範囲の画素値群の範囲とその個数に基づいて、原稿画像を量子化するための量子化数と閾値を判定するため、原稿画像を好適に量子化する量子化数を決定することができる。また、カラー画像に対して、高速で比較的小さい回路規模で好適な領域判定が可能になる。領域毎に画像を再現するのに必要な量子化を正しく行い、限定色の文字や図形を好適に判定し、画像の構造化をより高いレベルにすることができる。
【０２９８】
尚、第４の実施の形態〜第６の実施の形態で説明された画像処理装置の構成はこれに限定されず、一部分をソフトウェア等のプログラムで実現してももちろん構わない。
また、第４の実施の形態、第６の実施の形態では白黒画像データを例にとって説明したが、Ｌ*ａ*ｂ*画像を白黒画像と同じように扱うことによってカラー画像への拡張が可能であることは言うまでもない。更に入力ビット数、それに伴うヒストグラムの生成はこれに限定されず、量子化した結果の頻度分布であっても構わない。
【０２９９】
また、ヒストグラムは、入力されたすべての画素ではなく、間引くなどして一部の画素を用いて形成しても良い。これにより、処理を高速に行うことができる。
更に、像域分離処理や量子化の方法は本発明で説明される方法に限定されず、他の方法でも構わない。また、領域の形状を矩形として説明したが、これに限定されず、輪郭線等のあらゆる自由形状であってももちろん構わない。
【０３００】
また、更に、メモリ構成をフレームメモリとしたが、これに限定されず、ラインバッファ等で構成してももちろん構わない。
尚、本発明は、複数の機器（例えばホストコンピュータ、インタフェース機器、リーダ、プリンタ等）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置等）に適用してもよい。
【０３０１】
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読出し実行することによっても、達成されることは言うまでもない。
【０３０２】
この場合、記憶媒体から読出されたプログラムコード自体が上述した実施の形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
プログラムコードを供給するための記憶媒体としては、例えば、フロッピディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。
【０３０３】
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているＯＳ（オペレーティングシステム）などが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
【０３０４】
更に、記憶媒体から読出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０３０５】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートの処理を実現するためのコンピュータのプログラムコードを格納することになる。簡単に説明すると、例えば、図５４のメモリマップ例に示す各モジュールを記憶媒体に格納する。
すなわち、少なくとも「生成モジュール」、「判定モジュール」、および「決定モジュール」の各モジュールのプログラムコードを記憶媒体に格納すればよい。
【０３０６】
尚、「生成モジュール」は、画像データの濃度の出現頻度の分布を生成する。「判定モジュール」は、生成された分布の最大出現頻度を含み、所定の閾値以上の出現頻度を有する濃度領域を判定する。「決定モジュール」は、判定された濃度領域以外の分布に含まれる極大値の数に基づいて、量子化数を決定する。
以上説明したように、本発明の第４の実施形態〜第６の実施の形態によれば、スキャナ等で読み取った原稿画像の画像データの下地に発生するノイズを好適に除去することができ、画像データによる出力画像の画質を向上する画像処理装置及びその方法を提供できる。
【０３０７】
また、画像データの下地に発生するノイズを好適に除去し、画像データを量子化するための量子化数を好適に判定する画像処理装置及びその方法を提供できる。
また、画像に対して、高速で比較的小さい回路規模で好適な領域判定が可能になる。ノイズによる影響を取り除き、図形／写真を正確に判定できる。更に、下地と文字の輝度に差がない場合でも確実に検出できる。
【０３０８】
また、領域毎に画像を再現するのに必要な量子化を正しく行い、限定色の文字や図形を好適に判定し、画像の出力、符号化、構造化をより高いレベルにすることができる効果がある。
尚、本発明は、上述の実施の形態に限らず、クレームの記載の範囲内で様々な変形、応用が可能である。
【０３０９】
【発明の効果】
以上説明したように、本発明の第１の発明によれば、対象画像の特徴に応じて良好な量子化を行うことができる。
また、第２の発明によれば、画像データの下地に発生するノイズを好適に除去し、画像データを量子化するための量子化数を好適に判定することができる。
【０３１０】
また、第３の発明によれば、色文字を良好に抽出することができる。
また、第４の発明によれば、スキャナ等で読み取った原稿画像の画像データの下地に発生するノイズを好適に除去することができ、画像データによる出力画像の画質を向上することがでる。
また、画像データの下地に発生するノイズを好適に除去することで、画像データを属性毎の領域に分離する像域分離処理の精度を向上すること、また、画像データの下地に発生するノイズを好適に除去し、ノイズを除去した画像データから好適な下地の濃度を判定し、その判定された濃度を下地の濃度として出力することで、画像データの符号化効率を向上することができる。
【図面の簡単な説明】
【図１】第１の実施の形態の画像処理装置の構成を示すブロック図である。
【図２】第１の実施の形態の下地の濃度幅抽出の様子を説明するための図である。
【図３】第１の実施の形態で実行される処理の処理フローを示すフローチャートである。
【図４】第１の実施の形態の画像処理装置を適用させた画像送信装置の構成を示すブロック図である。
【図５】第２の実施の形態の画像処理装置の構成を示すブロック図である。
【図６】第２の実施の形態の下地濃度判定部１０９の詳細な構成を示すブロック図である。
【図７】第２の実施の形態で実行される処理の処理フローを示すフローチャートである。
【図８】第２の実施の形態の画像処理装置を適用させたプリンタ装置の構成を示すブロック図である。
【図９】第３の実施の形態の画像処理装置の構成を示すブロック図である。
【図１０】第３の実施の形態によって実行される画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出する処理の処理フローを示すフローチャートである。
【図１１】第３の実施の形態によって実行される画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出する処理の処理フローを示すフローチャートである。
【図１２】第３の実施の形態によって実行される画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出する処理の処理フローを示すフローチャートである。
【図１３】第３の実施の形態で実行される画像データを２値化する処理の処理フローを示すフローチャートである。
【図１４】第３の実施の形態で実行されるの２値画像データに含まれる各領域を量子化するための量子化数を決定する処理の処理フローを示すフローチャートである。
【図１５】第３の実施の形態で実行されるの２値画像データに含まれる各領域を量子化するための量子化数を決定する処理の処理フローを示すフローチャートである。
【図１６】第３の実施の形態で実行されるの２値画像データに含まれる各領域を量子化するための量子化数を決定する処理の処理フローを示すフローチャートである。
【図１７】第３の実施の形態で実行されるの２値画像データに含まれる各領域を量子化するための量子化数を決定する処理の処理フローを示すフローチャートである。
【図１８】第３の実施の形態で実行される２値画像データに含まれる各領域の構造化データを生成する処理の処理フローを示すフローチャートである。
【図１９】第３の実施の形態の領域の属性が「文字」である場合に実行される処理の処理フローを示すフローチャートである。
【図２０】第３の実施の形態の領域の属性が「図形」である場合に実行される処理の処理フローを示すフローチャートである。
【図２１】第３の実施の形態の領域の属性が「写真」である場合に実行される処理の処理フローを示すフローチャートである。
【図２２】本発明で実行される処理フローのプログラムを記憶させた記憶媒体のメモリマップの構造を示す図である。
【図２３】第４の実施の形態の画像処理装置の構成を示すブロック図である。
【図２４】第４の実施の形態の下地の濃度幅抽出の様子を説明するための図である。
【図２５】第４の実施の形態の下地濃度幅検出部４０５の詳細な構成を示すブロック図である。
【図２６】第４の実施の形態の量子化数判定部４０６の詳細な構成を示すブロック図である。
【図２７】第４の実施の形態の前景色代表濃度の抽出の様子を説明するための図である。
【図２８】第４の実施の形態で実行される処理の処理フローを示すフローチャートである。
【図２９】第４の実施の形態の画像処理装置を適用させた画像送信装置の構成を示すブロック図である。
【図３０】第４の実施の形態の量子化数を決定する様子を説明するための図である。
【図３１】第５の実施の形態の画像処理装置の構成を示すブロック図である。
【図３２】第５の実施の形態の量子化数判定部５１５の詳細な構成を示すブロック図である。
【図３３】第５の実施の形態で実行される処理の処理フローを示すフローチャートである。
【図３４】第５の実施の形態の他の構成による画像処理装置の構成を示すブロック図である。
【図３５】第５の実施の形態の更に他の構成による画像処理装置の構成を示すブロック図である。
【図３６】第５の実施の形態の画像処理装置を適用させた光学的文字認識装置の構成を示すブロック図である。
【図３７】第６の実施の形態の画像処理装置の構成を示すブロック図である。
【図３８】（ａ）は原稿画像の例を示す図であり、（ｂ）は原稿画像を領域分割して得られる領域の構成を示す図であり、（ｃ）は領域分割された各領域を更に分割して得られる領域の構成を示す図である。
【図３９】第６の実施の形態の下地の濃度幅抽出の様子を説明するための図である。
【図４０】第６の実施の形態によって実行される画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出する処理の処理フローを示すフローチャートである。
【図４１】第６の実施の形態によって実行される画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出する処理の処理フローを示すフローチャートである。
【図４２】第６の実施の形態によって実行される画像データの下地代表濃度bg_valueと濃度幅下限値ｂｔ0と濃度幅上限値ｂｔ1を算出する処理の処理フローを示すフローチャートである。
【図４３】第６の実施の形態で実行される画像データを２値化する処理の処理フローを示すフローチャートである。
【図４４】第６の実施の形態で実行されるの２値画像データに含まれる各領域を量子化するための量子化数、前景色代表色、前景色代表濃度を決定する処理の処理フローを示すフローチャートである。
【図４５】第６の実施の形態で実行されるの２値画像データに含まれる各領域を量子化するための量子化数、前景色代表色、前景色代表濃度を決定する処理の処理フローを示すフローチャートである。
【図４６】第６の実施の形態で実行されるの２値画像データに含まれる各領域を量子化するための量子化数、前景色代表色、前景色代表濃度を決定する処理の処理フローを示すフローチャートである。
【図４７】第６の実施の形態で実行されるの２値画像データに含まれる各領域を量子化するための量子化数、前景色代表色、前景色代表濃度を決定する処理の処理フローを示すフローチャートである。
【図４８】第６の実施の形態で実行される領域分割された各領域を、前景色代表閾値、前景色代表濃度領域に基づいて、更に分割する処理の処理フローを示すフローチャートである。
【図４９】（ａ）、（ｂ）は従来の方法によって抽出される下地の濃度幅抽出、下地代表濃度、前景色代表濃度の抽出の様子を説明するための図であり、（ｃ）、（ｄ）は第６の実施の形態によって抽出される下地の濃度幅抽出、下地代表濃度、前景色代表濃度の抽出の様子を説明するための図である。
【図５０】第６の実施の形態で実行される２値画像データに含まれる各領域の構造化データを生成する処理の処理フローを示すフローチャートである。
【図５１】第６の実施の形態の領域の属性が「文字」である場合に実行される処理の処理フローを示すフローチャートである。
【図５２】第６の実施の形態の領域の属性が「図形」である場合に実行される処理の処理フローを示すフローチャートである。
【図５３】第６の実施の形態の領域の属性が「写真」である場合に実行される処理の処理フローを示すフローチャートである。
【図５４】本発明で実行される処理フローのプログラムを記憶させた記憶媒体のメモリマップの構造を示す図である。
【符号の説明】
１  画像入力装置
２  フレームメモリ
３、７  ヒストグラム生成部
４  最大頻度検出部
５  量子化ステップ算出部
６  量子化部
８  ノイズ閾値決定部
９  比較部
１０  下地濃度幅検出部
１１、１２、１３  端子
２０  画像処理装置
２２  ラッチ
２３  セレクタ
２４  ＪＰＥＧ符号化部
２５  通信インターフェイス
１０１  画像入力部
１０２  色変換部
１０３  フレームメモリ
１０４  平坦画素判定部
１０５  ラッチ
１０６〜１０８  ヒストグラム生成部
１０９  下地濃度判定部
１１０、１１１  最大頻度検出部
１４０  画像処理装置
１４１  白色下地判定部
１４２  比較部
１４３  ラッチ
１４４  セレクタ
１４５  色変換部
１４６  ２値化部
１４７  ２値プリンタ
２０１  ＣＰＵ
２０２  プログラムメモリ
２０３  端末
２０４  記憶装置
２０５  スキャナ
２０６  多値フレームメモリ
２０７  ２値フレームメモリ
２１０  バス
【図１】
0003745069.tif 000004
【図２】
0003745069.tif 000005
【図３】
0003745069.tif 000006
【図４】
0003745069.tif 000007
【図５】
0003745069.tif 000008
【図６】
0003745069.tif 000009
【図７】
0003745069.tif 000010
【図８】
0003745069.tif 000011
【図９】
0003745069.tif 000012
【図１０】
0003745069.tif 000013
【図１１】
0003745069.tif 000014
【図１２】
0003745069.tif 000015
【図１３】
0003745069.tif 000016
【図１４】
0003745069.tif 000017
【図１５】
0003745069.tif 000018
【図１６】
0003745069.tif 000019
【図１７】
0003745069.tif 000020
【図１８】
0003745069.tif 000021
【図１９】
0003745069.tif 000022
【図２０】
0003745069.tif 000023
【図２１】
0003745069.tif 000024
【図２２】
0003745069.tif 000025
【図２３】
0003745069.tif 000026
【図２４】
0003745069.tif 000027
【図２５】
0003745069.tif 000028
【図２６】
0003745069.tif 000029
【図２７】
0003745069.tif 000030
【図２８】
0003745069.tif 000031
【図２９】
0003745069.tif 000032
【図３０】
0003745069.tif 000033
【図３１】
0003745069.tif 000034
【図３２】
0003745069.tif 000035
【図３３】
0003745069.tif 000036
【図３４】
0003745069.tif 000037
【図３５】
0003745069.tif 000038
【図３６】
0003745069.tif 000039
【図３７】
0003745069.tif 000040
【図３８】
0003745069.tif 000041
【図３９】
0003745069.tif 000042
【図４０】
0003745069.tif 000043
【図４１】
0003745069.tif 000044
【図４２】
0003745069.tif 000045
【図４３】
0003745069.tif 000046
【図４４】
0003745069.tif 000047
【図４５】
0003745069.tif 000048
【図４６】
0003745069.tif 000049
【図４７】
0003745069.tif 000050
【図４８】
0003745069.tif 000051
【図４９】
0003745069.tif 000052
【図５０】
0003745069.tif 000053
【図５１】
0003745069.tif 000054
【図５２】
0003745069.tif 000055
【図５３】
0003745069.tif 000056
【図５４】
0003745069.tif 000057