(57)【要約】【課題】誤差拡散法で問題となる、ワームや、ドット生成の遅延、及び領域外のデータを歪み、を発生させることなく高画質の出力ドットを得る。また、画素の画像データを量子化する際に、画像のデータ分布に対応するようにする。さらに、黒成分が多い画素に対しても、白ドットの分散性を向上させて視覚的に快適な印刷出力を得る。【解決手段】画像処理装置であって、入力された画素の階調画像データ値に応じて、前記階調画像データ値を白濃度に変換する白濃度変換手段と、前記白濃度に変換された画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成手段と、前記画素群生成手段で生成した画素群の重心の位置を決定する画素群重心決定手段と、前記画素群重心決定手段で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与手段と、を備えている。【選択図】図５
2004266791.tif 000002
【特許請求の範囲】
【請求項１】
入力された画素の階調画像データ値に応じて、前記階調画像データ値を白濃度に変換する白濃度変換手段と、
前記白濃度に変換された画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で生成した画素群の重心の位置を決定する画素群重心決定手段と、
前記画素群重心決定手段で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与手段と、
を備えた画像処理装置。
【請求項２】
請求項１に記載の画像処理装置であって、
前記画素群生成手段は、前記画素群重心決定手段で決定した重心から最も近い画素を画素ごとの階調画像データ値の総和が閾値以上となるまで選択し続けることにより前記画素群を生成すること特徴とする画像処理装置。
【請求項３】
請求項２に記載の画像処理装置であって、
前記画素群生成手段は、前記画素群重心決定手段で決定した重心から最も近い画素が複数存在するときに選択する画素をランダムに選択することを特徴とする画像処理装置。
【請求項４】
請求項２に記載の画像処理装置であって、
前記画素群生成手段は、前記画素群重心決定手段で決定した重心から最も近い画素が複数存在するときに、階調画像データ値が最も低い画素を選択することを特徴とする画像処理装置。
【請求項５】
入力された画素の階調画像データ値が、第１の閾値よりも大きいとき前記階調画像データ値は黒濃度を有する画素と判定して前記階調画像データ値を白濃度に変換して出力する変換手段と、
前記白濃度に変換された画素の階調画像データ値の総和が第２の閾値以上になるまで画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で生成した前記白濃度に変換された画素から構成される画素群の重心の位置を決定する画素群重心決定手段と、
前記画素群重心決定手段で決定した前記白濃度に変換された画素の画素群の重心に位置する画素に量子化画像データを付与する量子化画像データ付与手段と、
を備えた画像処理装置。
【請求項６】
入力された画素の階調画像データ値に応じて、前記階調画像データ値を白濃度に変換する白濃度変換工程と、
前記白濃度変換工程で白濃度に変換された画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成工程と、
前記画素群生成工程で生成した画素群の重心の位置を決定する画素群重心決定工程と、
前記画素群重心決定工程で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与工程とを備えた画像処理方法。
【請求項７】
入力された画素の階調画像データ値に応じて、前記階調画像データ値を白濃度に変換する白濃度変換処理と、
前記白濃度変換処理で白濃度に変換された画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成処理と、
前記画素群生成処理で生成した画素群の重心の位置を決定する画素群重心決定処理と、
前記画素群重心決定処理で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与処理とをコンピュータに実行させるためのプログラム。
【請求項８】
入力された画素の階調画像データ値に応じて、前記階調画像データ値を白濃度に変換する白濃度変換処理と、
前記白濃度変換処理で白濃度に変換された画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成処理と、
前記画素群生成処理で生成した画素群の重心の位置を決定する画素群重心決定処理と、
前記画素群重心決定処理で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与処理とをコンピュータに実行させるためのプログラムが格納された記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、画素の画像データを量子化する処理に関する。
【０００２】
【従来の技術】
従来より、階調画像データを量子化することが行われている。例えば、２５６階調の階調画像データを二値化することなどが行われている。この際、単に、階調画像データを閾値を用いて二値化したのでは誤差が大きい。例えば、階調画像データを０〜２５５、閾値を１２８としたと仮定する。この場合、ある画素のデータ（濃度）が５０であれば、閾値未満であるため、二値化すると０になる。よって、誤差が５０（＝５０−０）生ずる。
【０００３】
そこで、このような量子化の際の誤差を周辺の画素に拡散する誤差拡散法が行われている。誤差拡散法は、例えば、量子化の際の誤差を当該画素の右、下、左下および右下の画素のデータに加算する。誤差拡散法の概要は、例えば特許文献１に記載されている。
【０００４】
また、入力された画像データの階調値が閾値に達するまで所定のテーブルにより入力画素を探索してセルを生成し、セル内の中心位置にドットを生成する技術も開示されている（例えば特許文献２）。
【０００５】
【特許文献１】
特開平６−６２２５３号公報（図３０、図３１、図３２）
【０００６】
【特許文献２】
特開平１１−２７５２８（図４、図６）
【０００７】
【発明が解決しようとする課題】
しかしながら、誤差拡散法により量子化された画像には、画質上問題が発生することがある。例えば、階調画像データのハイライト付近などのドット密度が低い領域について、単純に画素を画面の左側から右側へ順番に行順に誤差拡散法により２値化していくと、誤差が右側の画素に伝播し結果的に生成されるドットが鎖状に連なって発生することがある。このような鎖状の特異なパターンをワーム（ｗｏｒｍ）という。また、ハイライト付近などのドット密度が低い領域において、ドットの生成が誤差拡散法の主走査方向および副走査方向に遅延することがある。すなわち、ハイライト付近の印刷された用紙の上部側では、誤差を伝播させても画素の階調値が閾値に中々達することができず、ドットがない領域が発生することがある。さらに、特定の階調領域の処理を終えた後で、この領域外のデータ（濃度）を歪ませることがある。すなわち、エッジの切り換わり部分（モノクロ印刷では黒色で印刷された部分と白色で印刷された部分の境目部分）では、切り換わり前に伝播された誤差が切り換わり後にも伝播され、結果的にドットの形成を歪ませてしまうことがある。
【０００８】
そこで、本発明の第１の目的は、誤差拡散法で問題となる、ワームや、ドット生成の遅延、及び領域外のデータを歪み、を発生させることなく高画質の出力ドットを得ることを目的とする。
【０００９】
また、上述した画質上の問題は、誤差拡散法においては、誤差拡散後の各画素のデータ（濃度）が、誤差拡散前の各画素の近傍のデータ（濃度）の分布に対応していないからであると考えられる。
【００１０】
そこで、本発明の第２の目的は、画素の画像データを量子化する際に、画像のデータ分布に対応するようにすることを目的とする。
【００１１】
さらに、上述した特開平１１−２７５２８では、セルの探索を所定のテーブルで行っている。しかし、実際には画素をテーブルにより左側に探索するとき確率的にすでに処理済みの画素となる場合が多く、生成されるセルが歪んだ形（例えば三角形）となる。かかる形状のセルの中心にドットを形成させても、ドットがある部分では隣のセルのドットと連なって形成される場合があり、出力ドットの偏りが発生する。
【００１２】
そこで、本発明の第３の目的は、ドットの分散性を向上させて視覚的に快適な印刷出力を得ることを目的とする。
【００１３】
さらに、本発明の第４の目的は、黒濃度を有する画素に対しても、白ドットの分散性を向上させて視覚的に快適な印刷出力を得ることを目的とする。
【００１４】
【課題を解決するための手段】
上記目的を達成するために、本発明は、画像処理装置であって、入力された画素の階調画像データ値に応じて、階調画像データ値を白濃度に変換する白濃度変換手段と、白濃度に変換された画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で生成した画素群の重心の位置を決定する画素群重心決定手段と、画素群重心決定手段で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与手段とを備えたことを特徴としている。これにより、例えば、黒濃度を有する画素に対しても白ドットを入力階調値に忠実に形成することができる。
【００１５】
さらに本発明は、上記画像処理装置であって、画素群生成手段は、画素群重心決定手段で決定した重心から最も近い画素を画素ごとの階調画像データ値の総和が閾値以上となるまで選択し続けることにより前記画素群を生成することを特徴としている。これにより、例えば、ドット間距離が均一で、ドットの分散性が向上して快適な印刷出力を得ることができる。
【００１６】
さらに、本発明は、上記画像処理装置であって、画素群生成手段は、画素群重心決定手段で決定した重心から最も近い画素が複数存在するときに選択する画素をランダムに選択することを特徴としている。これにより、例えば、周期パターンの発生を抑えることができる。
【００１７】
さらに、本発明は、上記画像処理装置であって、画素群生成手段は、前記画素群重心決定手段で決定した重心から最も近い画素が複数存在するときに階調画像データ値が最も低い画素を選択することを特徴としている。これにより、例えば、エッジ部分でも入力階調値に忠実がドットを生成させることができる。
【００１８】
また、上記目的を達成するために、本発明は、入力された画素の階調画像データ値が、第１の閾値よりも大きいとき階調画像データ値は黒濃度を有する画素と判定して階調画像データ値を白濃度に変換して出力する変換手段と、白濃度に変換された画素の階調画像データ値の総和が第２の閾値以上になるまで画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で生成した白濃度に変換された画素から構成される画素群の重心の位置を決定する画素群重心決定手段と、画素群重心決定手段で決定した白濃度に変換された画素の画素群の重心に位置する画素に量子化画像データを付与する量子化画像データ付与手段と、を備えた画像処理装置であることを特徴としている。これにより、例えば、白濃度を有する画素に対しても黒濃度を有する画素に対しても、入力階調値に忠実に出力ドットを生成することができる。
【００１９】
また、上記目的を達成するために、本発明は、画像処理方法であって、入力された画素の階調画像データ値に応じて、階調画像データ値を白濃度に変換する白濃度変換工程と、白濃度変換工程で白濃度に変換された画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成工程と、画素群生成工程で生成した画素群の重心の位置を決定する画素群重心決定工程と、画素群重心決定工程で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与工程とを備えたことを特徴としている。
【００２０】
また、上記目的を達成するために、本発明は、入力された画素の階調画像データ値に応じて、階調画像データ値を白濃度に変換する白濃度変換処理と、白濃度変換処理で白濃度に変換された画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成処理と、画素群生成処理で生成した画素群の重心の位置を決定する画素群重心決定処理と、画素群重心決定処理で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与処理とをコンピュータに実行させるためのプログラムであることを特徴としている。
【００２１】
また、上記目的を達成するために、本発明は、入力された画素の階調画像データ値に応じて、階調画像データ値を白濃度に変換する白濃度変換処理と、白濃度変換処理で白濃度に変換された画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成処理と、画素群生成処理で生成した画素群の重心の位置を決定する画素群重心決定処理と、画素群重心決定処理で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与処理とをコンピュータに実行させるためのプログラムが格納された記録媒体であることを特徴としている。
【００２２】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。
［第１の実施例］
図１は、本発明による画像出力システムをモノクロ入力画像に適用したものの構成図である。この例では、ホストコンピュータ５０において、階調画像データ５６（図１においてはモノクロである）が生成され、ページプリンタなどの画像出力装置６０に与えられる。ページプリンタなどの画像出力装置６０は、供給された画像データ５６に基づきモノクロ画像を再現する。画像出力装置６０は、画像処理を行ってエンジン７０にレーザ駆動用データ６９を供給するコントローラ６２と、前記駆動用データ６９に従って画像の再生を行うエンジン７０とを有する。
【００２３】
ホストコンピュータ５０は、ワードプロセッサや図形ツールなどのアプリケーションプログラム５２により、文字データ、図形データ及びビットマップデータ等を生成する。これらのアプリケーションプログラム５２により生成されたそれぞれのデータは、ホストコンピュータ５０にインストールされている画像出力装置用のドライバ５４により、ラスタライズされ、画素またはドット毎のモノクロデータからなる階調画像データ５６に変換される。階調画像データ５６は、例えば、各画素ごとに８ビットすなわち０〜２５５までの値をとる階調画像データ値の集合体である。
【００２４】
画像出力装置６０も、図示しないマイクロプロセッサを備え、そのマイクロプロセッサとインストールされている制御プログラムにより、ハーフトーン処理部６６及びパルス幅変調部６８を有するコントローラ６２が構成される。ハーフトーン処理部６６は、階調画像データ５６を受けて、量子化画像データ３０を生成する。ハーフトーン処理部６６の構成は後で説明する。量子化画像データ３０はパルス幅変調部６８に与えられる。パルス幅変調部６８は、ドット毎にレーザ駆動パルス有りと無しからなる駆動データ６９を生成する。
【００２５】
エンジン７０内のレーザドライバ７２が、駆動用データ６９に基づいて、画像描画用のレーザダイオード７４を駆動する。エンジン７０には、感光ドラムや転写ベルト等とその駆動部が含まれるが、図１では省略されている。
【００２６】
本発明の実施形態にかかる画像処理装置は、階調画像データ５６を量子化画像データ３０に変換するハーフトーン処理部６６に相当するものである。
【００２７】
図２は、本発明の実施形態にかかる画像処理装置の構成を示すブロック図である。画像処理装置は、階調画像データ記録部１０、画像データ走査部（画素群生成手段）１２、画像データ累計部１４、閾値記録部１６、閾値比較部１８、画像群重心決定部２０、量子化画像データ付与部２２、量子化画像データ記録部２４を備える。
【００２８】
階調画像データ記録部１０は、ホストコンピュータ５０から出力された階調画像データ５６を受けて記録する。階調画像データ５６は、例えば、各画素が８ビット（０〜２５５）の値をとる。この値は、例えば黒の濃度を意味している。
【００２９】
画像データ走査部（画素群生成手段）１２は、階調画像データ５６を走査する。階調画像データ５６の走査法を図３を参照して説明する。
【００３０】
階調画像データ記録部１０に記録されている階調画像データ５６は図３（ａ）に示すようなものである。図３（ａ）には、階調画像データの内、画素がｍ〜ｍ＋２行かつｎ〜ｎ＋３列の範囲のものを示している。なお、以後、画素を（ｍ、ｎ）というように表記する。画素（ｍ、ｎ）は、ｍ行ｎ列の画素を意味する。階調画像データの内、量子化済み画素群５６ａ（画素（ｍ、ｎ）、（ｍ、ｎ＋１）、（ｍ＋１、ｎ）、（ｍ＋１、ｎ＋１）、（ｍ＋２、ｎ＋１））は、量子化が済んでおり、画素（ｍ＋１、ｎ＋１）に量子化画像データ値”２５５”が与えられているものとする。
【００３１】
走査法には二種類あり、量子化中画素群５６ｃが無いときは初期走査、量子化中画素群５６ｃが有るときは通常走査を行う。
【００３２】
初期走査の方法を図３（ｂ）を参照して説明する。初期走査は、量子化済み画素群５６ａを除いた画素において、最も上の行の内で、最も左にある画素を走査対象とするものである。ただし、主走査方向が左から右へ向かうものとする。図３（ｂ）においては、最も上の行はｍ行であり、その内で最も左にある画素（ｍ、ｎ＋２）が初期走査の走査対象である初期走査対象画素５６ｂである。なお、初期走査対象画素５６ｂは量子化中画素群５６ｃを構成する。
【００３３】
通常走査の方法を図３（ｃ）を参照して説明する。量子化中画素群５６ｃ（画素（ｍ、ｎ＋２）、（ｍ、ｎ＋３））の重心５６ｄは、画素（ｍ、ｎ＋２）および画素（ｍ、ｎ＋３）の階調画像データ値が等しいので、画素（ｍ、ｎ＋２）および画素（ｍ、ｎ＋３）の境界線の中点にある。ここで、重心５６ｄから最も近い画素（量子化済み画素群５６ａを除く）を走査対象とするのが通常走査である。このように重心５６ｄから次の画素を探索するため、生成した量子化済み画素群５６ａは円状に生成し、その重心５６ｄにドットを形成しても、隣合うドットは均一の距離が保たれる。かかるドットの分散により視覚的に快適な印刷出力を得ることができる。
【００３４】
図３（ｃ）では、重心５６ｄから最も近い画素は、画素（ｍ＋１、ｎ＋２）および画素（ｍ＋１、ｎ＋３）である。このように、重心５６ｄから最も近い画素が複数ある場合はランダムに走査対象を選ぶことが好ましい。ランダムではなく固定順により選択すると量子化済み画素群５６ａの形が特定の形となりやすくその重心５６ｄにドットを形成しても全体としてドットの位置が周期的で印刷出力において周期パターンを発生させてしまう。かかる周期パターンは、視覚に映りやすく印刷出力の画像が不自然なものとなってしまう。一方、ランダムにより選択することで、生成される量子化済み画素群５６ａの形状が一定とはならず、重心５６ｄにドットを形成しても上述のような周期パターンが発生せず、視覚的に快適な印刷出力を得られるのである。図４（ａ）にランダムに選択した場合の印刷出力の例を示し、図４（ｂ）にはランダムではなくテーブル等を利用して固定順で画素を選択した場合の印刷出力の例を示す。図４（ｂ）に示すように固定順の場合、印刷部分の左下から右上にかけて一定の並び順でドットが形成されているため、周期パターンが発生し、このパターンが視覚に反映されて印刷出力が不自然なものとなっている。一方、図４（ａ）に示すようにランダムに選択した場合には、周期パターンが発生せず、視覚的に快適な印刷出力を得ることができる。
【００３５】
図３（ｃ）の例では、画素（ｍ＋１、ｎ＋２）が通常走査の走査対象である通常走査対象画素５６ｅとして選ばれている。通常走査対象画素５６ｅが量子化中画素群５６ｃの一部となってから、次の通常走査が行われる。
【００３６】
初期走査が行われると量子化中画素群５６ｃが生成されるため、それから後は通常走査が繰り返し行われる。通常走査対象画素５６ｅは量子化中画素群５６ｃに組み入れられる。ただし、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値（例えば、２５５）以上になると、量子化中画素群５６ｃは、量子化済み画素群５６ａとなる。すなわち、量子化中画素群５６ｃとは、量子化済み画素群５６ａとなる前に走査対象となった画素の集合である。量子化中画素群５６ｃが量子化済み画素群５６ａになると、再び初期走査が行われる。
【００３７】
画像データ走査部１２は、画像データ累計部１４に量子化中画素群５６ｃの各画素の階調画像データ値を出力する。さらに、画像データ走査部１２は、画素群重心決定部２０に、量子化中画素群５６ｃの各画素の位置および階調画像データ値を出力する。
【００３８】
画像データ累計部１４は、画像データ走査部１２から量子化中画素群５６ｃの階調画像データ値を受けて総和をとって出力する。図３（ｃ）の例でいえば、量子化中画素群５６ｃ（画素（ｍ、ｎ＋２）、（ｍ、ｎ＋３））の階調画像データ値の総和＝５０＋５０＝１００である。
【００３９】
閾値記録部１６は、量子化中画素群５６ｃの各画素の階調画像データ値の総和と比較すべき閾値を記録する。閾値は、例えば２５５である。
【００４０】
閾値比較部１８は、画像データ累計部１４の出力を、閾値記録部１６から読み出した閾値と比較する。そして、比較結果（量子化中画素群５６ｃの各画素の階調画像データ値の総和が、閾値未満か、閾値以上か）を画素群重心決定部２０に送る。さらに、閾値比較部１８は、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上であるならば、量子化画像データ付与部２２に対し、量子化画像データの付与を要求する。
【００４１】
画素群重心決定部２０は、量子化中画素群５６ｃの重心５６ｄの位置を決定する。重心５６ｄの位置は、画像データ走査部１２に送られる。重心５６ｄの位置の決定法を図５を参照して説明する。重心５６ｄの位置の決定法は、閾値比較部１８の比較結果により異なる。
【００４２】
図５（ａ）を参照して、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値未満である場合の、重心５６ｄの位置の決定法を説明する。量子化中画素群５６ｃの各画素のデータ値の総和＝５０＋５０＋５０＋５０＝２００は、閾値（＝２５５）未満である。この場合は、量子化中画素群５６ｃの各画素の中心にデータが集約されているものとして、重心５６ｄの位置を決定する。図５（ａ）の場合は、量子化中画素群５６ｃの各画素（画素（ｍ、ｎ）、（ｍ、ｎ＋１）、（ｍ＋１、ｎ）、（ｍ＋１、ｎ＋１））のデータ値はすべて等しいので、重心５６ｄの位置は、画素（ｍ、ｎ）の右下の角になる。
【００４３】
図５（ｂ）を参照して、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上である場合の、重心５６ｄの位置の決定法を説明する。量子化中画素群５６ｃの各画素のデータ値の総和＝５０＋５０＋５０＋５０＋６５＝２６５は、閾値（＝２５５）以上である。この場合は、閾値を超えた分の階調画像データ値を無視する。図５（ｂ）の例でいえば、画素（ｍ＋２、ｎ＋１）のデータ値の内、１０だけ無視し、画素（ｍ＋２、ｎ＋１）のデータ値が５５（＝６５−１０）であるとして重心５６ｄの位置を求める。重心５６ｄの位置は、図５（ａ）における重心５６ｄよりも、やや右下に動いて、画素（ｍ＋１、ｎ＋１）の内にある。
【００４４】
なお、無視した階調画像データ値”１０”（戻しデータ）は、画素（ｍ＋２、ｎ＋１）に戻す（図５（ｃ）参照）。すなわち、画素（ｍ＋２、ｎ＋１）に階調画像データ値”１０”が残ることになる。画素（ｍ＋２、ｎ＋１）は、さらに他の量子化中画素群５６ｃの構成要素となり得る。すなわち、画素（ｍ＋２、ｎ＋１）のうち階調画像データ値“１０”は、量子化済み画素群５６ａに組み込まれず、再び初期画素から探索するときに、量子化中画素群５６ｃとして重心からの探索対象となる。このように戻しデータ値をもとの画素（ｍ＋２、ｎ＋１）に戻ため、量子化済み画素群５６ａ以外の画素に戻して誤差を伝播させるときと比べて入力された画素の階調値のドット分布に忠実にドットが形成されることになる。なお、画素（ｍ、ｎ）、（ｍ、ｎ＋１）、（ｍ＋１、ｎ）、（ｍ＋１、ｎ＋１）の階調画像データ値は無視されなかったので、階調画像データ値は残らない。
【００４５】
また、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上である場合は、重心５６ｄの位置を量子化画像データ付与部２２に送る。
【００４６】
図５（ｂ）を参照して、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上である場合の、重心５６ｄの位置の決定法を説明したが、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値と等しい場合もある。例えば、図５（ａ）〜（ｃ）において、画素（ｍ、ｎ＋２）、（ｍ、ｎ＋３）、（ｍ＋１、ｎ＋２）、（ｍ＋１、ｎ＋３）、（ｍ＋２、ｎ＋３）の階調画像データ値の総和は、２５５（＝閾値）である。このような場合は、図５（ｄ）（右半分）に示すように、重心５６ｄは画素（ｍ＋１、ｎ＋３）の内にある。そして、戻しデータは発生しない。
【００４７】
量子化画像データ付与部２２は、閾値比較部１８から送られた量子化画像データの付与要求を受けると、画素群重心決定部２０から送られた重心５６ｄの位置する画素に、閾値と等しい量子化画像データを付与する。図５（ｃ）を参照して、量子化済み画素群５６ａの重心５６ｄの位置する画素（ｍ＋１、ｎ＋１）に、閾値と等しい量子化画像データ”２５５”を付与する。なお、図５（ｃ）において、量子化済み画素群５６ａとあるのは、すでに、量子化画像データ”２５５”が付与されているからである。量子化画像データ付与部２２は、量子化画像データを付与すると、画像データ走査部１２に初期化要求、すなわち、画像データ走査部１２に初期走査を行うことを要求する。これにより、画像データ走査部１２は再び初期走査を行う。
【００４８】
ここで、量子化画像データの付与について説明する。一般に、プリンタは、各画素について２５６階調もの濃度を区別して印刷することができない。例えば、各画素について白（黒の濃度が０）、黒（黒の濃度が２５５）のいずれかしか印刷できない。そこで、量子化済み画素群５６ａについて、その重心が位置する画素に、閾値と等しい量子化画像データ”２５５”を付与する。すなわち、重心が位置する画素に、黒のドットを印刷することを意味する。なお、ドットの形状は、任意である。例えば、円形が挙げられるが、他の形状でもよい。ただし、ドットが位置する画素内に、ドットの重心が位置するようにすることが好ましい。
【００４９】
また、白濃度を階調画像データとして使用する例を図６に示す。図６（ａ）を参照して、各画素には黒の濃度”２０５”等という比較的濃い黒を意味する階調画像データ値が記録されている。このままでは、すぐに、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上になる。
【００５０】
そこで、図６（ｂ）に示すように、白濃度に変換する。白濃度＝２５５−黒の濃度、である。白濃度への変換は、例えば、画像データ走査部１２（白濃度変換手段に相当）により、初期走査対象画素５６ｂの周囲について行われる。白濃度への変換は、初期走査対象画素５６ｂの階調画像データ値が中程度の濃度（例えば、１２７≒２５５／２）超えれば行うようにすることが好ましい。図６（ｂ）においては、量子化中画素群５６ｃ（画素（ｍ、ｎ）、（ｍ、ｎ＋１）、（ｍ＋１、ｎ）、（ｍ＋１、ｎ＋１））において、各画素のデータ値の総和は閾値未満である。これが、黒の濃度のまま（図６（ａ）参照）であれば、画素（ｍ、ｎ）、（ｍ、ｎ＋１）だけで、そのデータ値の総和（４１０＝２０５＋２０５）すでに閾値（２２５）を超えてしまう。
【００５１】
図６（ｃ）に示すように、戻しデータは２４５、付与される量子化画像データは０となる。これは、白濃度になおせば、それぞれ、戻しデータ”１０”、付与される量子化画像データ”２５５”となり、図５（ｃ）に対応する。
【００５２】
なお、量子化画像データ０を付与した場合は、付与された画素の周囲の画素に黒のドットを印刷し、付与された画素にはドットを印刷をしないことになる。
【００５３】
量子化画像データ記録部２４は、量子化画像データ付与部２２により付与された量子化画像データを記録する。量子化画像データ記録部２４の記録内容は、量子化画像データ３０として出力される。
【００５４】
次に、本発明の実施形態の動作を図７のフローチャートおよび図８、９を参照して説明する。
【００５５】
まず、階調画像データ記録部１０から画像データ走査部１２が階調画像データ５６を読み出し、走査していない画素があるか否かを判定する（Ｓ１０）。ここで、走査していない画素が無い、すなわち走査が終了していれば（Ｓ１０、Ｙｅｓ）、処理を終了する。走査していない画素が有る、すなわち走査が終了していなければ（Ｓ１０、Ｎｏ）、画像データ走査部１２は初期走査を行う（Ｓ１２）。すなわち、初期走査対象画素５６ｂを決定する。例えば、図８（ａ）に示すような階調画像データ５６がある場合、画素（ｍ、ｎ）が初期走査対象画素５６ｂとなる。
【００５６】
次に、初期走査対象画素５６ｂに記録されている階調画像データ値が１２７以下か否かを画像データ走査部１２が判定する（Ｓ１４）。もし、階調画像データ値が１２７を超えれば（Ｓ１４、Ｎｏ）、画像データ走査部１２は、階調画像データ５６の各画素の階調画像データ値を白濃度に変換する（Ｓ１６）（図６（ａ）、（ｂ）参照）。その後、走査した画素の階調画像データ値を画像データ累計部１４に送る。なお、階調画像データ値が１２７以下であれば（Ｓ１４、Ｙｅｓ）、画像データ走査部１２は、走査した画素の階調画像データ値を画像データ累計部１４に送る。図８（ａ）の例では、初期走査対象画素５６ｂに記録されている階調画像データ値＝５０であるため、白濃度への変換は行われない。
【００５７】
画像データ累計部１４は、画像データ走査部１２から、走査した画素の階調画像データ値を受けると、データ値の累計を計算する（Ｓ１８）。データ値の累計は、閾値比較部１８に送られる。閾値比較部１８は、データ値の累計を、閾値記録部１６から読み出した閾値（＝２５５）と比較する。そして、データ値の累計が閾値（＝２５５）以上であるか否かを判定する（Ｓ２０）。判定の結果は、画像群重心決定部２０に送られる。判定の結果により、画素群重心決定部２０の動作が異なるからである。
【００５８】
データ値の累計が閾値未満であれば（Ｓ２０、Ｎｏ）、最後に走査した画素を量子化中画素群５６ｃに組み入れる。その後、画素群重心決定部２０は、量子化中画素群５６ｃの重心を決定する（Ｓ２２）。なお、画素群重心決定部２０は、量子化中画素群５６ｃの重心決定の前に、画像データ走査部１２から量子化中画素群５６ｃの各画素の位置および階調画像データ値を受ける。これらを重心決定に用いる。そして、画像データ走査部１２が通常走査を行う（Ｓ２４）。すなわち、通常走査対象画素５６ｅを決定する。そして、データ値の累計（Ｓ１８）に戻る。
【００５９】
図８（ａ）を参照して、初期走査対象画素５６ｂに記録された階調画像データ値＝５０である。ここで、画像データ累計部１４により、階調画像データ値の累計＝５０を得る（Ｓ１８）。累計は２５５未満なので（Ｓ２０、Ｎｏ）、初期走査対象画素５６ｂを量子化中画素群５６ｃに組み入れてから（図８（ｂ）参照）、量子化中画素群５６ｃの重心を決定する（Ｓ２２）。重心は、画素（ｍ、ｎ）の中心である。重心に最も近い画素は画素（ｍ、ｎ＋１）および画素（ｍ＋１、ｎ）である。上述したように量子化済み画素群５６ａに組み入れる次の画素を探索するのに重心からの距離を利用しているために、最終的に生成される量子化中画素群５６ｃの形状はほぼ円状に成長し、ドットの形成が互いに均一の距離を有し、ドットの分散性が向上する。ここで、ランダムに通常走査対象画素５６ｅを選択し、画素（ｍ、ｎ＋１）を通常走査対象画素５６ｅとする（Ｓ２４）（図８（ｂ）参照）。上述したようにランダムに選択することで、最終的に生成される量子化済み画素群５６ａの形状は常に同じ形状にならず、ドットの周期的パターンが現れない。
【００６０】
そして、データ値の累計（Ｓ１８）に戻り、データ値の累計＝５０＋５０＝１００が求められる。累計は２５５未満なので（Ｓ２０、Ｎｏ）、通常走査対象画素５６ｅを量子化中画素群５６ｃに組み入れてから（図８（ｃ）参照）、量子化中画素群５６ｃの重心を決定する（Ｓ２２）。重心５６ｄは、画素（ｍ、ｎ＋１）および画素（ｍ＋１、ｎ）の境界線上の中点である。以後、このようにして、走査を繰り返していく。
【００６１】
データ値の累計が閾値以上であれば（Ｓ２０、Ｙｅｓ）、最後に走査した画素を量子化中画素群５６ｃに組み入れる。その後、画素群重心決定部２０は、戻しデータを決定する（Ｓ３０）。そして、画素群重心決定部２０は、量子化中画素群５６ｃの重心を決定する（Ｓ３２）。なお、画素群重心決定部２０は、量子化中画素群５６ｃの重心決定の前に、画像データ走査部１２から量子化中画素群５６ｃの各画素の位置および階調画像データ値を受ける。これらを重心決定に用いる。また、戻しデータは重心決定の際に考慮しない。閾値比較部１８は、量子化画像データ付与部２２に量子化画像データの付与を要求する。また、画素群重心決定部２０は重心の位置を量子化画像データ付与部２２に送る。さらに、画像データ走査部１２は、黒の濃度を使用したか、白濃度を使用したかを量子化画像データ付与部２２に送る。量子化画像データ付与部２２は、量子化画像データの付与要求を受け、量子化中画素群５６ｃの重心が位置する画素に量子化画像データを付与する（Ｓ３４）。付与する量子化画像データは、黒の濃度を使用した場合は２５５、白濃度を使用した場合は０となる。そして、量子化画像データ付与部２２は画像データ走査部１２に初期化を要求し、走査していない画素があるか否かの判定（Ｓ１０）に戻る。
【００６２】
図９（ａ）を参照して、量子化中画素群５６ｃが画素（ｍ、ｎ）、（ｍ、ｎ＋１）、（ｍ＋１、ｎ）、（ｍ＋１、ｎ＋１）により構成されている。このような量子化中画素群５６ｃは、例えば、画素（ｍ、ｎ）、（ｍ、ｎ＋１）、（ｍ＋１、ｎ＋１）、（ｍ＋１、ｎ）の順に走査されることにより生成される。重心５６ｄは、画素（ｍ、ｎ）の右下の角にある。重心５６ｄに最も近い画素は画素（ｍ＋２、ｎ＋１）および画素（ｍ＋２、ｎ）である。ここで、ランダムに通常走査対象画素５６ｅを選択し、画素（ｍ＋２、ｎ）を通常走査対象画素５６ｅとする（Ｓ２４）。
【００６３】
そして、データ値の累計（Ｓ１８）に戻り、データ値の累計＝５０＋５０＋５０＋５０＋６５＝２６５が求められる。累計は２５５以上なので（Ｓ２０、Ｙｅｓ）、通常走査対象画素５６ｅを量子化中画素群５６ｃに組み入れてから（図９（ｂ）参照）、戻しデータを決定する（Ｓ３０）。戻しデータは、最後に走査した画素（ｍ＋２、ｎ）について計算する。データ値の累計−閾値＝２６５−２５５＝１０である。よって、戻しデータ＝１０とし、画素（ｍ＋２、ｎ）に戻す（図９（ｃ）参照）。画素（ｍ＋２、ｎ）の階調画像データは戻しデータを減じた値＝６５−１０＝５５として量子化中画素群５６ｃの重心５６ｄを決定する（Ｓ３２）。重心５６ｄの位置は、図５（ｃ）におけるものと同様である（図９（ｄ）参照）。そして、重心５６ｄの位置する画素（ｍ＋１、ｎ＋１）に、量子化画像データ付与部２２が量子化画像データ２５５を付与する（Ｓ３４）。
【００６４】
本発明の実施形態によれば、量子化済み画素群５６ａの重心５６ｄが位置する画素に量子化画像データを付与する。これにより、量子化画像データは、量子化済み画素群５６ａの階調画像データの濃度分布に対応したものとなる。しかも、量子化画像データの値は閾値（＝２５５）と等しく、量子化済み画素群５６ａにおける各画素の階調画像データの総和（戻しデータを除く）も閾値と等しいため、量子化済み画素群５６ａ単位で見れば、量子化誤差が無い。
【００６５】
このように、量子化誤差が無く、しかも階調画像データの濃度分布に対応した量子化が可能である。よって、誤差拡散法における、誤差拡散後の各画素のデータ（濃度）が、誤差拡散前の各画素の近傍のデータ（濃度）の分布に対応していないことによるワーム等の問題が解消される。
【００６６】
また、量子化済み画素群５６ａにおける戻しデータは重心５６ｄの決定の際に無視して画素に戻すので、量子化済み画素群５６ａにおける各画素の階調画像データの総和が閾値を超えても量子化誤差を起さなくてすむ。
【００６７】
ここで、戻しデータは元の画素に戻し、その画素を量子化済み画素群５６ａに組み込まれないようにし、初期画素から再度量子化中画素群５６ｃに組み込まれるようにしているため、入力階調値に忠実なドット分布を形成することができる。
【００６８】
さらに、黒の濃度が大きい場合は、白濃度を使用することにより（図６参照）、量子化済み画素群５６ａに組み入れられる画素の個数が激減することを防ぐことができる。
【００６９】
また、量子化中画素群５６ｃの重心の最も近い画素が複数ある場合は、通常走査対象画素５６ｅをどれにするかはランダムに決定するため、量子化後の画像の画質が向上する。
【００７０】
なお、本発明の実施形態には色々な変形例が考えられる。
【００７１】
例えば、主走査方向が左から右へという場合は、階調画素データ５６の右端付近において量子化中画素群５６ｃを生成していると、各画素の階調画像データ値の総和が閾値に達する前に、これ以上の画素を量子化中画素群５６ｃに組み入れられなくなることがある。この場合は、各画素の階調画像データ値の総和に最も近い量子化画像データを量子化中画素群５６ｃの重心に付与する。量子化画像データは２５６階調もの多階調にすることができないので、量子化画像データと総和との誤差が生ずることがあるが、考えないことにする。
【００７２】
図１０を参照して、通常走査対象画素５６ｅの選択法の変形例を説明する。図１０（ａ）に示すように、量子化中画素群５６ｃが画素（ｍ、ｎ）、（ｍ、ｎ＋１）（いずれも階調画素データ値＝５０）により構成されている場合、重心５６ｄは、画素（ｍ、ｎ）および画素（ｍ、ｎ＋１）の境界線の中点にある。すると、重心５６ｄから最も近い画素は画素（ｍ＋１、ｎ）および画素（ｍ＋１、ｎ＋１）である。この変形例では、ランダムに通常走査対象画素５６ｅを選択せずに、階調画素データ値が小さい方の画素を通常走査対象画素５６ｅとして選択する。図１０において、画素（ｍ＋１、ｎ）の階調画素データ値＝５０であり、画素（ｍ＋１、ｎ＋１）の階調画素データ値＝８０である。よって、画素（ｍ＋１、ｎ）の階調画素データ値の方が小さいため、画素（ｍ＋１、ｎ）を通常走査対象画素５６ｅとして選択する（図１０（ｂ）参照）。このようにすれば、量子化画像におけるエッジの再現性が向上する。すなわち、色変化が激しいエッジの部分では、階調値が高い画素ではなく低い画素を選択して、量子化中画素群５６ｃに組み込み、階調値の高い画素は組み入れないようにしているため、突然階調値の合計が閾値を超えてドットを生成させることなく、入力階調値に忠実にドットを生成することができるのである。
【００７３】
なお、図１０における各画素の濃度が白濃度であってもよい。図１０における各画素の濃度が白濃度である場合は、白濃度が低い方の画素を選択することになる。よって、黒濃度が高い方の画素を選択することになる。白濃度を使用するのは、初期走査対象画素５６ｂの黒の濃度が１２７を超える場合である。よって、初期走査対象画素５６ｂの黒の濃度が１２７を超える場合は、黒濃度が高い方の画素を通常走査対象画素５６ｅとして選択することになる。
【００７４】
図１１を参照して、閾値に関する変形例を説明する。階調画像データ５６が図１１（ａ）に示すようなものである場合、量子化中画素群５６ｃの画素の個数を増やしても閾値に到達しにくい。図１１（ａ）に示すような階調画像データ５６の場合、画素全部の階調画像データ値を合計しても１０×１２＝１２０であり、閾値（＝２５５）に達しない。そこで、閾値を変更する。例えば、閾値＝５０とする。すると、量子化中画素群５６ｃが、図１１（ｂ）に示すように、画素（ｍ、ｎ）、（ｍ、ｎ＋１）、（ｍ＋１、ｎ）、（ｍ＋１、ｎ＋１）、（ｍ＋２、ｎ＋１）により構成される場合、階調画像データ値の総和が閾値（＝５０）に達する。この場合、重心５６ｄの位置する画素（ｍ＋１、ｎ＋１）に量子化画像データ”５０”が付与される（図１１（ｃ）参照）。これは、画素（ｍ＋１、ｎ＋１）に量子化画像データ”２５５”の場合に比べて、およそ２０％（５０／２５５）のサイズのドットを印刷することを意味する。
【００７５】
閾値の変更法としては、下記のようなものがある。ます、閾値記録部１６に閾値の候補を複数記録しておく。例えば、閾値の候補を、２５５および５０としておく。ここで、閾値の候補のうち、最高のもの（例えば、２５５）を閾値として使用する。そして、量子化中画素群５６ｃの画素の個数が所定値（例えば、１２個）に達しても、なお階調画像データ値の総和が閾値に達しない場合は、最高値の次に高い閾値の候補を閾値比較部１８が閾値として閾値記録部１６から読み出して使用する。なおも、量子化中画素群５６ｃの画素の個数が所定値に達しながら、階調画像データ値の総和が閾値に達しない場合は、その次に高い閾値の候補を閾値比較部１８が閾値として閾値記録部１６から読み出して使用する。このようにして、使用する閾値を次第に低くしていく。例えば、量子化中画素群５６ｃの画素の個数が１２個になっても、階調画像データ値の総和が２５５に達しない場合は、次に高い閾値の候補（＝５０）を閾値比較部１８が閾値として、閾値記録部１６から読み出して使用する。
【００７６】
このように、階調画像データ値の総和の低下に応じて閾値を低くしていけば、階調画像データ値が低い部分にも、ある程度の密度で黒色のドットが印刷できる。よって、階調画像データ５６において、階調画像データ値が低い部分があったとしても、その部分に黒色のドットがほとんど印刷されないということが防止できる。これは、印刷されるドットの間隔がほぼ一定となることを意味する。よって、ドットの分散性が向上する。これにより、低周波ノイズの発生が抑えられる。
【００７７】
また、入力画像の階調値が中間値で連続している領域では、（例えば階調値“１２０”が連続する場合など）閾値を一定にすると、量子化済み画像群５６ａはほぼ２画素で構成されることになる。量子化済み画素群５６ａに含まれる画素数が少ないと（量子化済み画素群５６ａの大きさが小さいと）、印刷されるドットの数が多くなり、それだけドットが目立つことになる。そこで、上述したように閾値を変更して、量子化済み画素群５６ａの大きさを一定に保つことで、ドットが一定の密度で生成されることになる。また、このように生成した量子化済み画素群５６ａでドットが生成される位置は、この画素群５６ａの重心位置である。したがって、入力画像の入力分布に忠実な出力ドットを得ることが可能となり、快適な印刷出力を得ることができるのである。
【００７８】
図１２を参照して、一つの量子化済み画素群５６ａについて、複数の画素に量子化データを付与する変形例を説明する。図１２（ａ）を参照して、量子化中画素群５６ｃが画素（ｍ、ｎ）、（ｍ、ｎ＋１）、（ｍ＋１、ｎ）、（ｍ＋１、ｎ＋１）、（ｍ＋２、ｎ＋１）により構成されている。ここで、量子化中画素群５６ｃの各画素の階調画像データ値の総和は２５５であり、閾値（＝２５５）に達する。そこで、これまで説明してきた実施形態によれば量子化中画素群５６ｃの重心５６ｄが位置する画素（ｍ＋１、ｎ＋１）に量子化画像データ”２５５”が付与される（図１２（ｂ）参照）。しかし、この変形例では、図１２（ｃ）に示すように、８５＝２５５／３の量子化画像データを、画素（ｍ、ｎ＋１）、（ｍ＋１、ｎ）、（ｍ＋２、ｎ＋１）に付与する。この場合、これらの量子化画像データが付与された画素全体の重心は、画素（ｍ、ｎ＋１）の中心、画素（ｍ＋１、ｎ）の中心および画素（ｍ＋２、ｎ＋１）の中心を頂点とする直角二等辺三角形の重心であり、画素（ｍ＋１、ｎ＋１）に位置する。しかも、これらの量子化画像データが付与された画素の量子化画素データの総和＝８５×３＝２５５である。
【００７９】
このような変形例によっても、量子化画像データが付与された画素全体で見れば、量子化済み画素群５６ａの階調画像データの濃度分布に対応し、量子化誤差も無い。なお、このように複数の画素に量子化データを付与しても、パルス幅変調部６８を使用することにより印刷が可能である。
【００８０】
また、既に量子化済み画素群５６ａで決定した重心と、現在量子化済み画素群５６ａで決定した重心とに位置する画素が一致する場合も考えられる。図１３にその例を示す。図１３に示すように、（ｍ＋１、ｎ＋２）、（ｍ＋２、ｎ＋１）、（ｍ＋２、ｎ＋２）、（ｍ＋２、ｎ＋３）及び（ｍ＋３、ｎ＋２）の５つの画素以外のまわりの２０個の画素で量子化済み画素群５６ａが構成され、その画素群５６ａの重心に位置する画素（ｍ＋２、ｎ＋２）は、その５つの画素から構成される量子化済み画素群５６ａの重心に位置する画素（ｍ＋２、ｎ＋２）と一致している。これは、量子化済み画素群５６ａを構成する段階で、例えば最終的に残った画素から量子化済み画素群５６ａを構成すると（図１３の例では、まわりの２０個の画素から構成される画素群）、既に重心を演算した量子化済み画素群（図１３の例では、ほぼ中心に位置する５つの画素群）の重心と一致することがあるからである。かかる場合に、既にドットが形成された画素の位置に最も近い位置で、未だドットが形成されていない画素にドットを形成させるようにする。図１３の例では、中心付近にある５つの画素によって（ｍ＋２、ｎ＋２）の位置にドットが形成されるので、まわりにある２０個の画素による重心位置（ｍ＋２、ｎ＋２）で、その位置から最も近い位置であって未だドットが形成されない位置、例えばその隣の（ｍ＋２、ｎ＋３）や、（ｍ＋１、ｎ＋２）、（ｍ＋２、ｎ＋１）、又は（ｍ＋３、ｎ＋２）に“２５５”を与える。全くドットを形成させないようにすることも考えられるが、入力階調値に忠実なドット分布を得るようにするためには、このようにドットを形成させることが望ましい。
【００８１】
なお、これまで、本発明による画像出力システムをモノクロ入力画像に適用したものを前提として本発明の実施形態を説明してきた。しかし、本発明による画像出力システムをカラー入力画像に適用することもできる。図１４は、本発明による画像出力システムをカラー入力画像に適用したものの構成図である。
【００８２】
この例では、ホストコンピュータ５０において、ＲＧＢカラー画像データ５５が生成され、ページプリンタなどの画像出力装置６０に与えられる。ページプリンタなどの画像出力装置６０は、供給されたＲＧＢカラー画像データ５５に基づきカラー画像を再現する。画像出力装置６０は、画像処理を行ってエンジン７０にレーザ駆動用データ６９を供給するコントローラ６２と、前記駆動用データ６９に従って画像の再生を行うエンジン７０とを有する。
【００８３】
ホストコンピュータ５０は、ワードプロセッサや図形ツールなどのアプリケーションプログラム５２により、文字データ、図形データ及びビットマップデータ等を生成する。これらのアプリケーションプログラム５２により生成されたそれぞれのデータは、ホストコンピュータ５０にインストールされている画像出力装置用のドライバ５４により、ラスタライズされ、画素またはドット毎のＲＧＢデータからなるＲＧＢカラー画像データ５５に変換される。ＲＧＢカラー画像データ５５は、例えば、各画素における各色（赤：ＲＥＤ、緑：ＧＲＥＥＮ、青：ＢＬＵＥ）をそれぞれ８ビットすなわち０〜２５５までの値で示したＲＧＢデータの集合体である。
【００８４】
画像出力装置６０も、図示しないマイクロプロセッサを備え、そのマイクロプロセッサとインストールされている制御プログラムにより、色変換部６４、ハーフトーン処理部６６及びパルス幅変調部６８を有するコントローラ６２が構成される。
【００８５】
色変換部６４は、ＲＧＢカラー画像データ５５を受けて、Ｃ（シアン）、Ｍ（マゼンタ）、Ｙ（イエロー）、Ｋ（ブラック）の四色をそれぞれ８ビットで表現した合計８×４＝３２ビットの階調画像データ５６を生成する。階調画像データ５６は、例えば図３などに示したものと同様である。ただし、各画素には黒の濃度のかわりに、Ｃ（シアン）、Ｍ（マゼンタ）、Ｙ（イエロー）、Ｋ（ブラック）のうちのいずれか一つの色の濃度が記録されている。また、シアンなどの濃度が高すぎる場合に、白濃度に変換することもモノクロ画像の場合と同様である。
【００８６】
ハーフトーン処理部６６は、階調画像データ５６を受けて、量子化画像データ３０を生成する。ハーフトーン処理部６６（図２に示す画像処理装置に相当）の構成は前に説明した通りである。量子化画像データ３０はパルス幅変調部６８に与えられる。パルス幅変調部６８は、ドット毎にレーザ駆動パルス有りと無しからなる駆動データ６９を生成する。
【００８７】
エンジン７０内のレーザドライバ７２が、駆動用データ６９に基づいて、画像描画用のレーザダイオード７４を駆動する。エンジン７０には、感光ドラムや転写ベルト等とその駆動部が含まれるが、図１４では省略されている。
【００８８】
なお、ハーフトーン処理部６６（図２に示す画像処理装置に相当）は、ハーフトーン処理プログラムが画像出力装置６０によって実行されることによって構成されるようにしてもよい。このハーフトーン処理プログラムは、通常、画像出力装置６０が読取可能な形態でフロッピー（登録商標）ディスク、ＣＤ−ＲＯＭなどの記録媒体に記録されて流通する。当該プログラムは、メディア読取装置（ＣＤ−ＲＯＭドライブ、フロッピー（登録商標）ディスクドライブなど）によって読み取られてハードディスクにインストールされる。そして、ＣＰＵが所望のプログラムを適宜ハードディスクから読み出して所望の処理を実行するように構成されている。あるいは、画像出力装置６０がＲＯＭなどの記録媒体を有しており、ハーフトーン処理プログラムがこのＲＯＭに記録されるようにしてもよい。
［第２の実施例］
次に本願発明の第２の実施例について、図１５から図２６を参照して説明する。
【００８９】
図１５は、本願発明が適用される画像出力装置６０のハード構成図を示す図である。画像出力装置６０は、全体としてＣＰＵ６１、入力インターフェース（入力Ｉ／Ｆ）６３、ＲＯＭ６５、ＲＡＭ６７、及び印刷エンジン７０とから構成されている。ここで、図１との対応関係は、ハーフトーン処理部６６が、ＣＰＵ６１、入力Ｉ／Ｆ６３、ＲＯＭ６５、及びＲＡＭ６７とから構成され、パルス変調６８がＣＰＵ６１、ＲＯＭ６５、及びＲＡＭ６７とから構成されることになる。また、エンジン７０は、印刷エンジン７０に対応している。
【００９０】
ＣＰＵ６１は、内部バスを介して、入力Ｉ／Ｆ６３、ＲＯＭ６５、ＲＡＭ６７、印刷エンジン７０と互いにに接続され、重心位置の演算や、未処理画素の選択等、各種処理を実行するためのものである。詳細は後述する。
【００９１】
入力Ｉ／Ｆ６３は、ホストコンピュータ５０と画像出力装置６０とのインターフェースとしての役割を果たし、本実施例では、ホストコンピュータ５０から出力される、ラスタライズされた各画素ごとに所定の階調値を有する入力画像データが入力される。入力された画像データはＣＰＵ６１の制御により一旦ＲＡＭ６７に格納される。
【００９２】
ＲＯＭ６５は、各種プログラムが格納される。ＣＰＵ６１の制御によりプログラムが読み出されて、各種処理が実行されることになる。
【００９３】
ＲＡＭ６７は、ＣＰＵ６１が処理を実行する際のワーキングメモリとしての役割を果たし、実行データ等が一時格納される。
【００９４】
印刷エンジン７０は、図１のエンジン７０と同様の構成で、レーザドライバ７２及びＬＤ７４とから構成される。
【００９５】
次に、入力された画像データからドットを形成するまでの、画像出力装置６０の動作について図１６から図２６を参照して説明する。
【００９６】
まず、ＣＰＵ６１は、ＲＯＭ６５に格納されたプログラムを読み出して、処理が開始される（ステップＳ４０）。このとき、すでに入力画像データは入力Ｉ／Ｆ６３を介してＲＡＭ６７に格納されているものとする。もちろん、この処理の開始をトリガにしてホストコンピュータ５０から入力画像データを入力Ｉ／Ｆ６３を介してＲＡＭ６７に取り込まれるようにしてもよい。このとき、入力画像データは、ＲＡＭ６７の所定領域である入力バッファ領域に格納される。この例を図１８（ａ）に示す。
【００９７】
ＲＡＭ６７は、図１８（ａ）に示すように、入力バッファ領域６７１と、ワーキングメモリ領域６７２と、出力バッファ領域６７３とから構成される。この入力バッファ領域６７１は、２次元構造を有しており、例えば上述の入力画素（ｎ、ｍ）に位置する画素は、入力バッファ領域の（ｎ、ｍ）のアドレスに格納される。入力画素の位置に対応するように入力バッファ領域６７１が構成される。実際には、このアドレスには入力画像データの階調値が格納されることになる。図５（ａ）や図８（ａ）に示す入力画素が入力されると、図１８（ｂ）に示すように入力バッファ６７１に各階調値が格納される。ワーキングメモリ領域６７２は、重心位置の演算結果と階調値の演算結果が格納され、出力バッファ領域６７３は入力バッファ６７１と同様に入力画素に対応するように構成される。詳細は後述する。
【００９８】
次いで、ＣＰＵ６１は、初期画素を決定して、初期濃度重心を演算する（ステップＳ４１）。初期画素の決定は、ＲＡＭ６７の入力バッファ６７１に格納された入力画像データのうち、第１の実施例と同様に入力画素の位置で最も上の左側に位置する画素をＣＰＵ６１が選択する。すなわち、図１８（ｂ）に示す例では、（ｎ、ｍ）に対応する位置に位置する画素を初期画素としてＣＰＵ６１は判断する。そして、ＣＰＵ６１は初期画素の位置する画素の階調値と、そのアドレス位置とを読み出し、重心を演算する。以下、説明を簡単にするため、（ｎ、ｍ）＝（０，０）として説明する。ＣＰＵ６１が演算する重心は具体的には、以下の演算式を用いる。
【００９９】
2004266791.tif 000003
この演算式はＲＯＭ６５に格納され、ステップＳ４１にてＣＰＵ６１が読み出して演算を行うことになる。ちなみに、初期画素の場合は、量子化中画素群のｘ、ｙ座標、及び量子化中画素群の重心の階調値はともに０として演算される。（式１）にこれらの値と、読み出した初期画素の位置と階調値とを代入して演算すると、重心位置は（ｘ重心、ｙ重心）は（０，０）となる。なお、ＣＰＵ６１は、演算した重心位置と、初期画素の階調値とを上述した、ワーキングメモリ領域６７２に格納する（図１８（ｃ）参照）。その後の演算処理をスムーズに行うためである。
【０１００】
また、ＣＰＵ６１は、選択した初期画素に対応する入力バッファ６７１に“−１”を格納する。後述する未処理画素の選択で、すでに選択された画素の選択を回避するためである。さらに、ＣＰＵ６１は、ステップＳ４２で初期画素が低濃度と判断された場合は、その時点で初期画素に対応する出力バッファ２７３に“０”を格納し、ステップＳ４２で初期画素が高濃度と判断された場合は、その時点で初期画素に対応する出力バッファ２７３に“２５５”を格納する。初期画素に（黒又は白）ドットが打たれなかった場合に、正しい出力を行うためである。なお、入力バッファ６７１に“−１”を格納されているが、これに拘泥せず、他の負の値を格納させてもよい。さらに、入力バッファ６７１と同様のメモリ構成で選択した画素の対応する位置にフラグを立てて、選択した画素が処理済み否かを判断するようにしてもよい。
【０１０１】
次いで、ＣＰＵ６１は、決定した画素が低濃度か否か判断する（ステップＳ４２）。具体的には、ＲＯＭ６５に格納された閾値“１２７”を読出し、ＲＡＭ６７の入力バッファ６７１から読み出した初期画素の階調値と比較し、閾値よりも低い場合はステップＳ４３に移行し、閾値と同じか大きいときはステップＳ５３に移行する。ここで、低濃度と判断される場合（ステップＳ４２で“ＹＥＳ”の場合）とは、選択した画素が黒成分が少なく白成分が多い場合である。その後の処理で黒ドットを形成させる処理に移行させるためである。一方、低濃度ではないと判断された場合（ステップＳ４２で“ＮＯ”の場合）は、選択した画素が黒成分が多く白成分が少ない場合で、その後の処理で白ドットを形成させる処理（ステップＳ５３）に移行することになる。
【０１０２】
ステップＳ４２で低濃度と判断された場合（ステップＳ４２で“ＹＥＳ”の場合）、ＣＰＵ６１は、未処理画素の選択を行う（ステップＳ４３）。ここで未処理画素の選択は、第１の実施例で説明したように、重心を利用して画素の選択を行う。上述したように重心を利用して画素の選択を行うため、最終的に生成される量子化済み画素群の形状は、円状となり、その重心にドットを形成させることで、ドット間距離が均一となり、視覚的に快適な印刷出力を得ることができる。ここで、未処理画素の選択は、ステップＳ４１で演算した重心から最も近い距離にある画素が選択されるが、入力画像データはＲＡＭ６７の入力バッファの所定位置に格納されているので、アドレス（１、０）にある画像データか、アドレス（０，１）にある画像データが選択される。２つの画素ともアドレス（０，０）から等距離にあるからである。ここで、いずれかの画素を選択する必要があるが、第１の実施例と同様にランダムにＣＰＵ６１が選択するものとする。上述したようにランダムではなく固定順に選択すると量子化済み画素群の形状が規則的に並び重心位置にドットを形成すると図４（ｂ）に示すように周期パターンが発生するからである。ランダムに選択することで視覚的に快適な印刷出力を得ることができる。ここでは、例えば（１，０）の画素をＣＰＵ６１が選択するとすると、図８（ｂ）に示すように選択した隣の画素が量子化中画素群５６ｃとして初期画素とともに組み込まれることになる。
【０１０３】
ここで、重心位置は上述の（式１）で示されているように必ずしも整数値になるとは限らない。重心に最も近い画素を選択する場合のほかに、重心が位置する画素に最も近い画素を選択する場合でもよい。このようにすることで、重心位置は整数値として演算でき、ＣＰＵ６１の処理する計算量が減ることが期待できる。ただし、演算した重心位置が小数点を含む場合があるので、演算した重心位置のｘ、ｙ座標のそれぞれに０．５を足して、その位置に重心が位置する画素として、画素を選択することも可能である。
【０１０４】
なお、選択した画素は、図１８（ｃ）や図１９（ａ）に示すように選択した画素に対応するＲＡＭ６７の出力バッファ６７３に“０”がＣＰＵ２１によって格納されることになる。
【０１０５】
次いで、ＣＰＵ６１は、閾値制御処理を行う（ステップＳ４４）。後述する閾値が一定の場合では、入力画像データの階調値が低い領域では出力ドットの密度は低くなり、また階調値が中間値（例えば“１２０”など）の領域では出力ドットの密度が高くなり、印刷出力全体としてのドットの分布密度が一定とならない。印刷出力のうち、ある領域では多くドットが打たれ、ある領域ではドットが少ないため全体として快適な印刷出力を得ることができない。そこで、閾値を変更することで、量子化済み画素群５６ａの大きさ、すなわち量子化済み画素群５６ａを構成する画素数が一定となり、一定密度のドット分布を得ることができる。上述の例では、（０、０）の画素と（１，０）の画素の２つの画素のみしか選択されていないので、閾値の変更は行われず、ＣＰＵ６１は、次の処理に移行する。閾値変更する場合の処理は後述する。
【０１０６】
次いで、ＣＰＵ６１は、濃度の合計が閾値に達したか否か判断する（ステップＳ４５）。すなわち、選択した未処理画素の階調値を含めた濃度の合計（階調値の合計）が閾値“２５５”に達したか否か判断される。具体的には、ＣＰＵ６１は、ＲＡＭ６７のワーキングメモリ６７２に書き込んだ画素の階調値と、ステップＳ４３で選択した画素の入力バッファ６７１に格納された階調値とを読出し、その合計を演算して、ＲＯＭ６５に格納された閾値（ここでは“２５５”の値）とを比較する。例えば図１８（ｃ）の例では、ワーキングメモリ６７２には階調値“５０”、アドレス（１，０）格納されている階調値は“５０”であるので、その合計は“１００”となる。よって合計値は閾値に達しないことになる。
【０１０７】
階調値の合計が閾値を超えない場合（ステップＳ４５で“ＮＯ”の場合）、ＣＰＵ６１は、選択した未処理画素を含めた重心の演算を行う（ステップＳ４６）。具体的なＣＰＵ６１の演算は、上述した式（１）の演算式を用いて行うことになる。これまで求めた重心のｘ、ｙ座標は、（０，０）で重心の階調値は“５０”、未処理画素のｘ、ｙ座標は（１，０）で、その階調値は“５０”とすると、演算される重心位置は（０．５，０）となる。このステップＳ４６で演算した重心位置は、ＣＰＵ６１の制御によってＲＡＭ６７のワーキングメモリ６７２に格納される。ステップＳ４１でワーキングメモリ６７２には初期画素の重心位置が格納されていたが、ここではその位置に上書きして格納する。その格納後の例を図１９（ａ）に示す。
【０１０８】
次いで、ＣＰＵ６１は、階調値の演算を行う（ステップＳ４７）。ここでの演算は、ＲＡＭ６７のワーキングメモリ６７２に書き込まれた階調値とステップＳ４３で選択した画素の階調値との合計を演算する。演算した結果は、再びＲＡＭ６７のワーキングメモリ６７２に上書きして書き込む。この例を図１９（ｂ）に示す。ここで、ＣＰＵ６１は、未処理画素の選択（ステップＳ４３）で選択した画素に対応する入力バッファ６７１に“−１”を格納する。再度未処理画素の選択で選択されないようにするためである。この階調値の演算でかかる処理を行うのは、入力バッファ６７１に格納された階調値はその合計値としてワーキングメモリ６７２に格納され、以後の処理で必要とされないからである。
【０１０９】
次いで、ＣＰＵ６１は、ステップＳ４６で演算した階調値の合計が、閾値と等しいか否か判断する（ステップＳ４８）。具体的には、ステップＳ４７でＲＡＭ６７のワーキングメモリ６７２に格納された階調値と、ＲＯＭ６５に格納された閾値とをＣＰＵ６１が読み出して、両者を比較することで実行される。図１９（ｂ）の場合は、まだ閾値に達していない（ステップＳ４８で“ＮＯ”の場合）ので、第１の実施例と同様に未処理画素を量子化中画素群５６ｃに次々を組み込み、その合計値が閾値（ここでは“２５５”）に達するまで処理が繰り返されることになる。すなわち、これまで量子化中画素群５６ｃに組み込まれた画素の階調値の合計は、ＲＡＭ６７のワーキングメモリ６７２に格納されているので、その値と閾値とを比較することで、閾値に達するまで量子化中画素群５６ｃを構成していくことができる。上述したようにＣＰＵ２１は、選択した未処理画素に対応する出力バッファ６７３の位置に“０”を格納する。
【０１１０】
そして、閾値と等しいとＣＰＵ６１が判断した場合（ステップＳ４８で“ＹＥＳ”の場合）、処理はステップＳ４９に移行し、すでに演算した重心位置に位置する画素に黒ドットを形成する処理を行う。具体的には、ＲＡＭ６７の出力バッファ６７３の入力画素の位置に対応するアドレス位置に“２５５”を書き込む。出力バッファの構造も入力バッファと同様に２次元構造で、入力画素の位置に対応するアドレス空間を有している。重心が位置するアドレスに“２５５”を書き込むことで、その後、実際にその位置に対応する位置にドットをうつことができる。
【０１１１】
次いで、ＣＰＵ６１は、未処理画素があるか否か判断する（ステップＳ５１）。すなわち、上述した処理をＲＡＭ６７の入力バッファ６７１に書き込まれたすべての階調値に対して行ったか否かで判断し、未処理画素があれば（“ＹＥＳ”の場合）再び処理はステップＳ４１に移行し、上述の処理を繰り返し、すべての画素に対して処理が終了すれば（“ＮＯ”）、ＣＰＵ６１はステップＳ５２に移行し、処理が終了することになる（ステップＳ５２）。
【０１１２】
一方、ステップＳ４５で濃度の合計が閾値を超える場合（“ＮＯ”の場合）、処理はステップＳ５５に移行し、閾値超えた場合の重心演算処理を行う（ステップＳ５５）。これは、図１９（ｃ）に示すように、最終的に選択された画素が（１、２）に位置する画素であるとき、すなわちステップＳ４３で選択した画素がこの画素であるとき、量子化中画素群の階調値の合計を演算するとすると“２６５”になり、閾値“２５５”を超えることになる。したがって、このような場合はステップＳ４５で“ＹＥＳ”が選択されてステップＳ５５に移行することになる。図２１は、閾値を超えた場合の重心演算処理の動作を示す。
【０１１３】
まず、ＣＰＵ６１は、閾値から濃度の合計、すなわち閾値からこれまでステップＳ４６で演算した階調値の合計値を引く演算を行う（ステップＳ５５０）。例えば図５（ｂ）に示す例では、閾値は“２５５”、ステップＳ４６でこれまで演算した階調値の合計は“２００”であるので、２５５−２００＝５５の値を演算する。上述したようにこれまで選択した画素の階調値の合計は、ＲＡＭ６７のワーキングメモリ６７２に格納され、閾値はＲＯＭ６５に格納されているのでＣＰＵ６１がこれらを読み出して演算することができる。
【０１１４】
そして、ＣＰＵ６１は、この“５５”の値を画素（１、２）の階調値として重心の演算を行う（ステップＳ５５１）。重心の演算は具体的には、以下の演算式を用いる。
【０１１５】
2004266791.tif 000004
（式１）との違いは、選択した未処理画素の階調値をそのまま用いるのではなく、量子化画素群５６ｃの合計が閾値と同じになるような階調値を用いる点が異なる。この演算式は、（式１）の場合と同様に予めＲＯＭ６５に格納されており、ＣＰＵ６１が本ステップを実行する際にＲＯＭ６５から読み出すことで実行される。ここでは、最終的にステップＳ４３で選択した画素の階調値は、これまで演算した階調値の合計との和をとることで閾値と等しくなるように演算して、それをもとに重心位置を求めることになる。そしてＣＰＵ６１は、演算した重心位置を再びＲＡＭ６７のワーキングメモリ６７２に値を書き込む（図２０（ａ）のワーキングメモリ６７２参照）。また、ＣＰＵ６１は、最終的に選択した画素の元の階調値からステップＳ５５０で演算した演算結果を引いた値を演算して、その値を再びその選択した画素の入力バッファに書き込む（ステップＳ５０）。これにより、当該画素の階調値が、戻しデータとして格納される。図２０（ａ）に示す例では、ステップＳ５５０で演算した“５５”を最終的に選択した（１、２）の画素の階調値“６５”から引いて“１０”の値を求め、これをＲＡＭ６７の入力バッファ６７１のアドレス（１、２）に再び書き込む（図２０（ａ）の入力バッファ６７１参照）。そして、この画素は量子化済み画素群５６ａに組み込まれず、初期走査において量子化中画素群に組み入れられ重心位置の演算に利用されることになる。上述したように、戻しデータを量子化済み画素群５６ａ以外の画素に戻すのではなく、戻しデータが発生した画素に再び格納させることで、入力階調値に忠実なドット分布を形成することができる。そして、ＣＰＵ６１は、式２で求めた重心位置に黒ドットを形成する処理を行う。これは上述したように出力バッファの入力画素位置に対応するアドレスに“２５５”を書き込むことで処理が行われる。その後、処理はステップＳ５１へ移行し、上述した処理が繰り返されることになる。そして、重心位置の存在する画素に対応する出力バッファ６７３に“２５５”を格納させる。これによりＣＰＵ６１は、その後の処理で重心位置の存在する画素にドットをうつことができる。その例を図２０（ａ）に示す。
【０１１６】
一方、ステップＳ４２で、決定した画素が低濃度でない場合（“ＮＯ”の場合）、処理は白濃度処理へと移行する（ステップＳ５３）。この処理の詳細を図２２に示す。本処理は、画素の階調値が白成分よりも黒成分の方が多いため、白ドットを生成するための処理である。なお、入力画素のデータは図６に示すデータが入力されるものとして以下説明する。ここでは、初期画素は、図６（ａ）の（ｎ、ｍ）に位置する画素であるものとし、図６（ａ）に示す階調値がそれぞれＲＡＭ６７の入力バッファ６７１に格納されているものとする（図２３（ａ）参照）。黒濃度の処理と同様に位置座標も入力バッファのアドレスに対応しているものとする。なお、白濃度前段の処理であるステップＳ４１により初期画素は（ｎ、ｍ）で、その重心位置は式１により（ｎ、ｍ）が演算され、その位置座標がＲＡＭ６７のワーキングメモリ６７２に既に格納され、その階調値“２０５”もメモリ６７２に格納されているとする。また、初期画素の位置に対応する入力バッファ６７１も同様に“−１”が格納される。
【０１１７】
まず、白濃度処理に移行すると、ＣＰＵ６１は、未処理画素の選択を行う（ステップＳ５３０）。ここでの未処理画素の選択も上述したステップＳ４３と同様に重心を利用して選択する。ドット間距離を均一に保つためである。初期画素は、（ｎ、ｍ）であるので、重心を利用すると最も近い画素は（ｎ＋１、ｍ）と（ｎ、ｍ＋１）の２つの画素がある。ＣＰＵ６１は、ステップＳ４３と同様にランダムに選択する。ドットの周期パターンの発生を抑えるためである。ここでは、（ｎ＋１、ｍ）の画素を選択するとする。上述したように重心利用する場合に重心位置そのものを利用する以外にも、重心が位置する画素に最も近い画素を選択する場合でもよい。
【０１１８】
次いで、ＣＰＵ６１は、入力階調値の最大値から、初期画素も含めステップＳ５３０で選択した未処理画素の階調値を減算する（ステップＳ５３１）。図６（ａ）に示す例では、（ｎ、ｍ）に位置する初期画素の階調値は、“２０５”なので、入力階調値の最大値である“２５５”から減算すると、“５０”となる。また、ステップＳ５３０で選択した未処理画素は（ｎ＋１、ｍ）であるとすると、その階調値“２０５”を最大値“２５５”から減算すると“５０”を得る。この入力画素の階調値の最大値は、ＲＯＭ６５に格納されており、また、選択した画素の階調値は上述したようにＲＡＭ６７の入力バッファ６７１に格納されているので、ＣＰＵ６１がこれらの値を読み出すことで、演算することができる。演算した結果はＣＰＵ６１の制御によりＲＡＭ６７のワーキングメモリ領域６７２に格納される（図２３（ｂ）参照）。
【０１１９】
なお、図１６に示す処理のうちステップＳ４２において画素が低濃度か否かを判定せず、黒成分が多く白成分が少ない画素群に対しても低濃度の場合と同様の処理（ステップＳ４３からステップＳ４９）を行うと以下のような問題が生じる。すなわち、もともと黒成分が多い画素が多数存在するため、初期画素から閾値に達するまで量子化中画素群から重心位置を決定すると、量子化中画素群はすぐに閾値に達してしまう。例えば図６（ａ）の場合では、２つの画素（（ｎ、ｍ）と（ｎ＋１、ｍ））で閾値に達することになる。かかる場合に重心位置から黒ドットをうつべき画素は、２つの画素のいずれか（例えば（ｎ、ｍ））である。そして、余った戻りデータを、例えば（ｎ＋１、ｍ）に戻して、再びこの画素を含めた量子化中画素群を初期画素（例えばこの（ｎ＋１、ｍ））から探索すると、重心利用して選択される画素は例えば（ｎ＋１、ｍ）となる。これに初期画素の階調値を加えるとこの２つの画素で量子化済み画素群を形成して重心位置からいずれか１の画素に黒ドットを形成する。これを繰り返すことで、ほとんど黒ドットをうつことになり、白ドットは余りの戻しデータが少なくなるとようやく何もうたない白ドットを形成することになる。これでは、黒成分が多く白成分が少ない画素群に対して構成した白ドットは、誤差拡散法で問題となるワーム状で配置され視覚的に不快な出力結果となる。かかる理由により、白濃度と黒濃度とでステップＳ４２を境に異なる処理を行うようにしている。
【０１２０】
次いで、ＣＰＵ６１は、黒ドットの生成を行う（ステップＳ５３２）。これは、ステップＳ５３０で選択された画素が黒成分が多く白成分が少ないためであり、最終的に印刷エンジン７０では、入力画像データに対して黒成分が多い画素にはドットをうつ処理を行うためだからである。そして、後述する白ドット生成処理（ステップＳ５３７）で、重心位置にある画素に対してドットをうたないようにして印刷を行うのである。ＣＰＵ６１は、ステップＳ５３０で選択した画素に対して、上述したＲＡＭ６７の出力バッファ６７３の対応するアドレス位置に入力階調値の最大値（図６（ａ）の場合は“２５５”）を格納することで処理が行われる（図２３（ｂ）及び（ｃ）参照）。
【０１２１】
次いで、ＣＰＵ６１は、閾値制御処理を行う（ステップＳ５３３）。上述したステップＳ４４と同様に選択した未処理画素（ステップＳ５３０）を含めた入力階調値が低い領域などで、閾値を変更することで量子化済み画素群５６ａの大きさを一定として生成される白ドットが印刷出力全体として一定密度で分布することになる。上述した例では、この段階ではまだ（ｎ、ｍ）と（ｎ＋１、ｍ）に位置する画素しか選択されていないので、閾値の変更は行われない。閾値制御処理の詳細は後述する。
【０１２２】
次いで、ＣＰＵ６１は、階調値の合計が閾値を越えるか否か判断する（ステップＳ５３４）。ここでは、すでにワーキングメモリ６７２にこれまで選択した画素の階調値の合計が格納されているので、その値をメモリ６７２からＣＰＵ６１が読み出し、閾値はＲＯＭ６５に格納されているので、この読み出した閾値と比較して判断する。図２３（ｂ）の例では、メモリ６７２に“５０”が格納されているので、最大値“２５５”と比較すると、まだ閾値に達していないと判断される。
【０１２３】
超えない場合（ステップＳ５３４で“ＮＯ”の場合）は、処理はステップＳ５３５に移行して、ＣＰＵ６１は、未処理画素を含めた重心位置を演算する。重心の演算は、上述した式（１）と同様である。演算した重心位置は、ワーキングメモリ６７２にＣＰＵ６１の制御により格納される。初期画素（ｎ、ｍ）と、選択画素（ｎ＋１、ｍ）との重心位置を演算すると、式１により（ｎ＋０．５、ｍ）となる。これを黒処理と同様にワーキングメモリ６７２にＣＰＵ６１の制御により格納する。図２４（ａ）に例を示す。
【０１２４】
次いで、ＣＰＵ６１は、階調値の合計を演算する（ステップＳ５３６）。選択した画素の入力バッファ６７１に書き込まれた階調値とワーキングメモリ６７２に書き込まれた階調値の合計を演算する。演算した結果は、ワーキングメモリ６７２にＣＰＵ６１の制御により格納される。また、ＣＰＵ６１は、上述した黒濃度の処理と同様に、選択した未処理画素の対応する入力バッファ６７１に“−１”を格納する。以後の処理で当該画素が選択されないようにするためである（図２４（ａ）参照）。
【０１２５】
次いで、ＣＰＵ６１は、演算した階調値の合計が閾値と等しいか否か判断し（ステップＳ５３７）、等しいを判断すると（“ＹＥＳ”の場合）、ステップＳ５３５で演算した重心位置に位置する画素に白ドットを生成する処理を行う（ステップＳ５３８）。具体的には、ＣＰＵ６１は、重心位置に位置する出力バッファの所定のアドレスに“０”を格納する。上述したようにこの時点で、出力バッファには、量子化済み画素群のうち重心位置にある画素以外は、入力階調値の最大値（“２５５”）が格納されており、重心位置にある画素にはドットをうたないことを示す“０”を格納することになる。これらは、量子化中画素群５６ｃの階調値から最大値を引いた値の合計が閾値に達するまで処理が繰り返されることになる（ステップＳ５３７で“ＮＯ”の場合）。
【０１２６】
次いで、未処理画素があるか否か判断され（ステップＳ５３９）、未処理画素があればステップＳ４１に再び移行して（“ＹＥＳ”の場合）、未処理画素がなくなるまで処理が繰り返される。未処理画素がなくなると（“ＮＯ”の場合）、処理が終了（ステップＳ５３９）することになる。
【０１２７】
一方、ステップＳ５３４で階調値の合計が閾値を超える場合（“ＹＥＳ”の場合）、処理はステップＳ５４１に移行し、ＣＰＵ６１は、閾値を超えた場合の重心演算処理を行う。ここでの重心演算処理は、図２１に示すように、上述したステップＳ５５での演算処理と同様である。すなわち、ＣＰＵ６１は、ＲＯＭ６５から閾値（ここでは“２５５”）を読出し、ステップＳ５３４で演算してＲＡＭ６７のワーキングメモリ６７２に格納された階調値の合計から引いて（ステップＳ５５０）、その値をもとに式２に示す重心の演算を行う（ステップＳ５５１）。図２４に示す例では、最終的にステップＳ５５０で（ｎ＋１、ｍ＋２）が選択されると、これまで選択した画素の階調値の合計は、メモリ６７２に格納された“２００”、選択画素の階調値は“１９０”で最大値“２５５”から引いた値が“６５”、であるから階調値の合計は“２６５”となる。この値は閾値“２５５”を超えているので、ステップＳ５３４で“ＹＥＳ”が選択され、ステップＳ５４１に移行する。そして、（閾値）―（濃度の合計）、すなわち２５５−２００で“５５”を得る。この値を選択画素（ｎ＋１、ｍ＋２）の階調値としてステップＳ５５１で重心位置を演算することになる。
【０１２８】
演算した重心位置は再びＲＡＭ６７のワーキングメモリ領域６７２に格納させ（図２４（ｃ）のワーキングメモリ６７２参照）、戻しデータを演算してその値をＲＡＭ６７の当該画素の入力バッファ６７１に上書きして格納する（図２４（ｃ）のワーキングメモリ６７２参照）。量子化済み画素群に組み込まれないようにするためである。これにより入力階調値に忠実な白ドットを形成することができる。そして、演算した重心位置に白ドットを形成すべく、出力バッファの対応位置に“０”を格納する（ステップＳ５４２、図２４（ｃ）の出力バッファ参照）。その後処理は再びステップＳ５３９に移行し、上述の処理が繰り返されることになる。
【０１２９】
次に、ステップＳ４４、及びステップＳ５３３の閾値制御処理について図２５のフローチャートを参照して説明する。
【０１３０】
上述したように、初期画素や未処理画素を含め選択した画素（ステップＳ４３、ステップＳ５３０）の入力階調値が低い値や中間階調値が連続すると、量子化済み画素群５６ａの大きさは一定とならず、生成される黒ドットや白ドットの密度が一定とならない。かかる場合に、印刷出力のドット分布が一定とならずにある領域ではドットが目立ち、ある領域ではドットが少なく、快適な印刷出力を得ることができない。そこで、量子化中画素群４５ｃの画素数により閾値を変更して一定の大きさの量子化済み画素群５６ａを構成し、ドット密度を一定にさせるようにする。
【０１３１】
図２５に示すように、閾値制御処理に移行すると（ステップＳ４４、ステップＳ５３３）、閾値を変更する（ステップＳ４４１）処理を行う。ここでは、毎回選択した未処理画素を含む画素数と、量子化中画素群５６ｃの階調値の合計とから、ステップＳ４５、Ｓ５３４で使用する閾値を変更する。そして、この変更した閾値を用いてステップＳ４５やステップＳ５３４で階調値の合計が閾値を超えるか否かを判断するのである。具体的には、ＲＡＭ６７のワーキングメモリに格納された量子化中画素群５６ｃの画素数と、階調値の合計とから変更閾値を演算により求めることにする。この演算式は所定の関数により表現されており、ＣＰＵ６１がＲＯＭ６５に格納されたこの関数を読出し、ワーキングメモリ６７２の画素数と階調値の合計をこの関数に入力させることにより、閾値を求めることができる。また、変更閾値を最初からＲＯＭ６５に格納させておきこの閾値変更の処理（ステップＳ４４１）でＣＰＵ６１が読み出して処理を行うようにしてもよい。
【０１３２】
図２６に示す例で具体的に説明する。入力画像の階調値が図１１（ａ）に示すように入力された場合、ＲＡＭ６７の入力バッファ６７１には図２６（ａ）に示すように格納される。そして、ステップＳ４１で初期画素として（ｎ、ｍ）に位置する画素が選択されて、その重心を演算すると（ｎ、ｍ）となるため、その重心位置と階調値が図２６（ｂ）に示すワーキングメモリ６７２にＣＰＵ６１によって格納される。さらに、ワーキングメモリ６７２には選択した画素の個数を格納する領域６７２ａを設けている。このステップＳ４１で初期画素（ｎ、ｍ）のみしか選択されていないため、この領域６７２ａには“１”がＣＰＵ６１によって格納される（図２６（ｂ）参照）。
【０１３３】
次いで、ステップＳ４３で未処理画素（ｎ＋１、ｍ）が選択されると、ワーキングメモリ６７２の個数格納領域６７２ａには、初期画素を含めた選択画素の個数の合計である“２”が格納される。そして、ステップＳ４６、Ｓ４７で無処理画素を含めた重心位置及び階調値の合計が演算されて、ワーキングメモリ６７２は図２６（ｃ）に示すように値が格納されることになる。
【０１３４】
そして、ステップＳ４３からステップＳ４８を繰り返し、４つの画素（（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ＋１、ｍ）、及び（ｎ＋１、ｍ＋１））が量子化中画素群５６ｃに組み込まれるとする。そして、再びステップＳ４３で未処理画素（ｎ＋１、ｍ＋２）が選択されると、個数格納領域６７２ａにはこれまで、５個の画素を選択したため“５”が格納される（図２７（ａ）参照）。ここで、ステップＳ４４１のＲＯＭ６４に記憶された所定の画素数を４個とすると、量子化中画素群５６ｃの画素数（５個）が所定の画素数（４個）を超えたため、閾値変更処理（ステップＳ４４１）により、閾値変更をＣＰＵ６１が演算することになる。
【０１３５】
ステップＳ４４２でＣＰＵ６１は、量子化中画素数“５”と、これまでの階調値の合計値“４０”とから、ＲＯＭ６５に記憶された関数を読出し、変更された閾値を演算する。その結果、例えば閾値を“２５５”から“５０”に変更する。そして、これまでの階調値の合計“４０”が閾値“５０”を超えないので、ステップＳ４６、Ｓ４７に移行し、最終的に選択された画素（ｎ＋１、ｍ＋２）を含めた重心位置と階調値の合計を演算する。演算結果は、上述したようにワーキングメモリ６７２に格納され、ステップＳ４８で階調値の合計“５０”が閾値“５０”と等しいため、ステップＳ４９以降への移行して、図２７（ｂ）に示すように出力バッファに“２５５”を格納させて、この画素にドットを生成させるようにして一連の処理が終了することになる。なお、白濃度処理Ｓ５３における閾値制御処理Ｓ５７３も同様の処理を行う。
【０１３６】
この例では、閾値を低くした場合を説明したが、入力階調値が中間階調値で連続する場合は、閾値が高くなるように演算される。
【０１３７】
このように、閾値を量子化画素群５６ｃの個数と階調値で変化させているため、量子化済み画素群５６ａの大きさは、ほぼ一定であり、ドットが一定の密度で生成されることになる。しかも、重心を利用してドットのＯＮ／ＯＦＦを行うようにしているので、入力画像の階調値の分布に忠実なドットを分布を生成することができる。
【０１３８】
上述した一連の処理が終了するとＣＰＵ６１は、ＲＡＭ６７の出力バッファ６７３に書き込まれた“２５５”（黒ドット生成する場合）や“０”（白ドット生成する場合）を読出し、印刷エンジン７０に当該データを出力させて、所定の印刷出力を得ることができる。
【０１３９】
以上説明してきたように本発明によれば、誤差拡散法で問題となる、ワームや、ドット生成の遅延、及び領域外のデータを歪み、を発生させることなく高画質の出力ドットを得ることができる。さらに、本発明によれば、画素の画像データを量子化する際に、画像のデータ分布に対応するようにすることが可能となる。さらに、本発明によれば、ドットの分散性を向上させて視覚的に快適な印刷出力を得ることができる。さらに、本発明によれば、黒濃度を有する画素群に対しても白ドットの分散性を向上させて視覚的に快適な印刷出力を得ることができる。
【図面の簡単な説明】
【図１】本発明による画像出力システムをモノクロ入力画像に適用したものの構成図である。
【図２】本発明の実施形態にかかる画像処理装置の構成を示すブロック図である。
【図３】階調画像データ５６の走査法を説明するための図であり、階調画像データ５６（図３（ａ））、初期走査（図３（ｂ））、通常走査（図３（ｃ））を示す図である。
【図４】ランダムに画素を選択した場合の印刷出力の例（図４（ａ））と、固定順で画素を選択した場合の印刷出力の例（図４（ｂ））を示す図である。
【図５】重心５６ｄの位置の決定法を説明するための図であり、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値未満である場合の重心５６ｄの位置の決定法（図５（ａ））、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上である場合の重心５６ｄの位置の決定法（図５（ｂ）〜（ｄ））を示す。
【図６】白濃度を階調画像データとして使用する例を説明するための図であり、黒濃度を示す図（図６（ａ））、白濃度への変換を示す図（図６（ｂ））、量子化画像データ付与後に黒濃度の階調画像データに戻したものを示す図（図６（ｃ））である。
【図７】本発明の実施形態の動作を示すフローチャートである。
【図８】初期走査（図８（ａ））、通常走査（図８（ｂ））、重心６５ｄの決定（図８（ｃ））を説明するための図である。
【図９】最後の通常走査（図９（ａ））、量子化中画素群５６ｃ（図９（ｂ））、戻しデータの決定（図９（ｃ））、重心６５ｄの決定および量子化画像データの付与（図９（ｄ））を説明するための図である。
【図１０】通常走査対象画素５６ｅの選択法の変形例を説明するための図であり、通常走査前（図１０（ａ））、通常走査後（図１０（ｂ））を示す。
【図１１】閾値に関する変形例を説明するための図であり、階調画像データ５６の一例（図１１（ａ））、閾値変更後の量子化中画素群５６ｃ（図１１（ｂ））、閾値変更後の量子化画像データの付与（図１１（ｃ））を示す。
【図１２】一つの量子化済み画素群５６ａについて、複数の画素に量子化データを付与する変形例を説明するための図であり、量子化中画素群５６ｃ（図１２（ａ））、本実施形態における量子化画像データの付与（図１２（ｂ））、複数の画素への量子化データの付与（図１２（ｃ））を示す。
【図１３】２つの量子化済み画素群の重心が一致するときの例を示す図である。
【図１４】本発明による画像出力システムをカラー入力画像に適用したものの構成図である。
【図１５】本発明が適用される画像出力装置の構成図の例を示す図である。
【図１６】本発明の実施形態の動作を示すフローチャートである。
【図１７】本発明の実施形態の動作を示すフローチャートである。
【図１８】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図１９】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２０】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２１】閾値を超えた場合の重心演算処理の動作を示すフローチャートである。
【図２２】白濃度演算処理の動作を示すフローチャートである。
【図２３】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２４】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２５】閾値制御処理の動作を示すフローチャートである。
【図２６】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２７】ＲＡＭ６７の構成と格納される値の例を示す図である。
【符号の説明】
１０  階調画像データ記録部  １２  画像データ走査部（画素群生成手段）１４画像データ累計部  １６  閾値記録部  １８  閾値比較部  ２０  画素群重心決定部  ２２  量子化画像データ付与部  ２４  量子化画像データ記録部  ５６階調画像データ  ５６ａ  量子化済み画素群  ５６ｂ  初期走査対象画素  ５６ｃ  量子化中画素群  ５６ｄ  重心  ５６ｅ  通常走査対象画素  ６０  画像出力装置  ６１  ＣＰＵ  ６５  ＲＯＭ  ６６  ハーフトーン処理部  ６７  ＲＡＭ  ６７１  入力バッファ  ６７２  ワーキングメモリ  ６７２ａ  画素数格納領域  ６７３  出力バッファ
【図１】
2004266791.tif 000005
【図２】
2004266791.tif 000006
【図３】
2004266791.tif 000007
【図４】
2004266791.tif 000008
【図５】
2004266791.tif 000009
【図６】
2004266791.tif 000010
【図７】
2004266791.tif 000011
【図８】
2004266791.tif 000012
【図９】
2004266791.tif 000013
【図１０】
2004266791.tif 000014
【図１１】
2004266791.tif 000015
【図１２】
2004266791.tif 000016
【図１３】
2004266791.tif 000017
【図１４】
2004266791.tif 000018
【図１５】
2004266791.tif 000019
【図１６】
2004266791.tif 000020
【図１７】
2004266791.tif 000021
【図１８】
2004266791.tif 000022
【図１９】
2004266791.tif 000023
【図２０】
2004266791.tif 000024
【図２１】
2004266791.tif 000025
【図２２】
2004266791.tif 000026
【図２３】
2004266791.tif 000027
【図２４】
2004266791.tif 000028
【図２５】
2004266791.tif 000029
【図２６】
2004266791.tif 000030
【図２７】
2004266791.tif 000031