(57)【要約】      （修正有）【課題】色成分毎ハーフトーン処理を違え、画質劣化せず高速化する画像処理装置・方法を提供。又色成分毎の明度に応じ最適ドット間距離を保つように制御し局所的明度偏りを小くし粒状性を改善、視覚的快適な印刷出力の画像処理装置・方法を提供。【解決手段】ＣＭＹＫ各色毎所定の階調値の入力データを入力し、最も目立ちにくい色のＹに分散ディザ処理か多値ディザ処理か誤差拡散処理を行う。この時Ｙからその他の色に対し明度に応じた演算値を加算し、Ｙへのこれら処理でドット生成する周辺画素位置から加算した分減算し、その後各色に対しＣＣ法で処理するが、ドット密度の最も低い色から順次行う。このＣＣ法処理でも、それ以外の処理を行っていない色に対し明度に応じた演算値を加算し、加算した分ドット生成する位置周辺の階調値を減算する。減算後の色に対しＣＣ法で処理し、残りの色に未処理画素がなくなるまで処理を繰り返す。【選択図】図３
2005117642.tif 000002
【特許請求の範囲】
【請求項１】
色毎の階調データを、前記色毎に出力画像を構成するドットに対応する出力画像データに変換するハーフトーン処理方法であって、
少なくとも１つの色の前記階調データについて、各画素の階調値の総和が閾値以上となるまで新たな画素を次々と選択して画素群を形成し、前記画素群のうち、所定の画素に対して前記ドットに対応するデータを付与する第１のハーフトーン処理を行い、
残りの色の階調データについては、前記第１のハーフトーン処理とは異なる第２のハーフトーン処理を行う、
ことを特徴とするハーフトーン処理方法。
【請求項２】
請求項１記載のハーフトーン処理方法において、
前記第２の処理は、ディザ処理もしくは誤差拡散処理であり、
前記第２の処理によって処理される色はイエローである、ことを特徴とするハーフトーン処理方法。
【請求項３】
請求項１記載のハーフトーン処理方法において、
前記第１の処理によって処理される色はブラックである、ことを特徴とするハーフトーン処理方法。
【請求項４】
画素ごとにＮ（Ｎは整数）種類以上のレベル値を有する、それぞれ色相の異なる複数のカラーデータに対して、Ｍ種類（Ｍは整数）のレベル値を有するデータを出力する画像処理装置において、
前記複数のカラーデータの少なくとも１つのカラーデータに対して、画素選択のための第１の基準点に基づいて画素ごとの前記Ｎ種類のレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、前記生成した画素群から第２の基準点を決定し、決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与し、前記画素群を生成する画素は更新された前記第１の基準点に基づいて選択する第１の処理手段と、
前記複数のカラーデータのうち残りのカラーデータに対して、前記Ｍ種類のレベル値を有するデータに変換する第２の処理手段と、
を備えることを特徴とする画像処理装置。
【請求項５】
画素ごとにＮ（Ｎは整数）種類以上のレベル値を有する、それぞれ色相の異なる複数のカラーデータに対して、Ｍ種類（Ｍは整数）のレベル値を有するデータを出力する画像処理方法において、
前記複数のカラーデータの少なくとも１つのカラーデータに対して、画素選択のための第１の基準点に基づいて画素ごとの前記Ｎ種類のレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、前記生成した画素群から第２の基準点を決定し、決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与し、前記画素群を生成する画素の選択は更新された前記第１の基準点に基づいて選択する第１の処理工程と、
前記複数のカラーデータのうち残りのカラーデータに対して、前記Ｍ種類のレベル値を有するデータに変換する第２の処理工程と、
を備えることを特徴とする画像処理方法。
【請求項６】
画素ごとにＮ（Ｎは整数）種類以上のレベル値を有する、それぞれ色相の異なる複数のカラーデータに対して、Ｍ種類（Ｍは整数）のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、
前記複数のカラーデータのうち少なくとも１つのカラーデータに対して、画素選択のための第１の基準点に基づいて画素ごとの前記Ｎ種類のレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、前記生成した画素群から第２の基準点を決定し、決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与し、前記画素群を生成する画素の選択は更新された前記第１の基準点に基づいて選択する第１の処理と、
前記複数のカラーデータのうち残りのカラーデータに対して、前記Ｍ種類のレベル値を有するデータに変換する第２の処理と、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、カラープリンタなどの画像処理装置における階調画像データのハーフトーン処理に関する。詳しくは、カラーを表現する色成分のうち、最も目立ちにくい色成分に対して濃度重心法を利用したハーフトーン処理よりも軽い処理のハーフトーン処理（例えば、ディザ法や誤差拡散法）を用い、それ以外の色成分に対しては濃度重心を利用した方法を用いたハーフトーン処理に関する。
【背景技術】
【０００２】
従来から、プリンタなどの画像出力装置は、画像出力装置の出力する色に対応した各色ごとの多値の階調値を有する階調データに対して、画像出力装置が出力可能なドットの有無を表すデータに変換処理して印刷用紙に印刷を行うようになされている。一般に、この変換処理はハーフトーン処理と称されている。
【０００３】
かかるハーフトーン処理の方法としては、所定の閾値が格納された閾値マトリックスを利用して、入力階調値が閾値よりも大きいか小さいかにより２値化する分散ディザ法や、ハーフトーンパターン（インデックステーブルとガンマテーブル）を用いて各インデックス位置において入力値に対応したパルス幅データを生成する多値ディザ法がある（例えば特許文献１）。同様に閾値を設定しその閾値よりも大きいか小さいかにより２値化するとともにその誤差分をまわりの画素の階調値に加算して処理を進める誤差拡散法もある。
【０００４】
さらに、入力画像の各画素の階調値の合計が所定の閾値になるまでセルを構成する画素を選択し、セルの中心位置にドットを生成させるようにしたハーフトーン処理も知られている（例えば、特許文献２）。
【特許文献１】特開２００１−２４５１６７号公報
【特許文献２】特開平１１−２７５２８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、カラー画像を出力する場合に、異なる色ごとにそれぞれ別々の明度を有しており、各色すべてに対して同じハーフトーン処理を行うと印刷用紙上で目立ち易い色のドットの近傍に他の色のドットが発生する可能性がある。このような場合に、他の色の成分は視覚的に知覚されにくい一方で、目立ち易い色の成分はより目立ち易いものとなっていた。また、互いに異なる色成分が同じ位置にドットが打たれてしまうことで粒状的なドットが発生することもある。かかるドット出力は、画質を劣化させ視覚的に不快な印刷出力となっていた。
【０００６】
また、上述した特開平１１−２７５２８号公報においても、セルを構成する画素の選択を所定のテーブルを用いて行っているが、テーブル内で左側に存在する画素は既に処理済みの場合が多く、結果的に生成されるセルが歪んだ形となってしまう。かかる場合に、セルの中心にドットを生成させるとある部分では隣のドットを重なって形成されてしまうことになる。例えば、ブラックとイエローに対してそれぞれかかる処理を行うと、ある部分ではドットが重なったり近寄ったりするなど、ブラックのドットのみ目立ち視覚的に不快な印刷出力となっていた。さらに、かかる処理は、ドットを生成するためにセルを構成する画素の中心位置を演算する必要があり、このため大量の印刷を行いたい場合に印刷に時間がかかるという問題点があった。
【０００７】
そこで、本発明の目的は、色成分ごとハーフトーン処理を異なるようにすることで、画質の劣化を最小限に抑え高速化を図る画像処理装置や画像処理方法を提供することを目的
とするものである。さらに、本発明の他の目的は、色成分ごとの明度に応じてドット間距離を最適に保つよう制御することで、局所的な明度の偏りを小さくして粒状性を改善し、視覚的に快適な印刷出力を得る画像処理装置や画像処理方法を提供することを目的とするものである。
【課題を解決するための手段】
【０００８】
上記目的を達成するために本発明は、色毎の階調データを、前記色毎に出力画像を構成するドットに対応する出力画像データに変換するハーフトーン処理方法であって、少なくとも１つの色の前記階調データについて、各画素の階調値の総和が閾値以上となるまで新たな画素を次々と選択して画素群を形成し、前記画素群のうち、所定の画素に対して前記ドットに対応するデータを付与する第１のハーフトーン処理を行い、残りの色の階調データについては、前記第１のハーフトーン処理とは異なる第２のハーフトーン処理を行うことを特徴としている。これにより、例えば、画質劣化を最小限に抑え、ハーフトーン処理の高速化を図ることができる。また、ドット間距離が一定に保たれた快適な印刷出力も得ることができる。
【０００９】
さらに、本発明は上記ハーフトーン処理方法において、前記第２の処理が、ディザ処理もしくは誤差拡散処理であり、前記第２の処理によって処理される色はイエローである、ことを特徴としている。これにより、例えば、視覚上最も目立ちにくい色成分であるイエローは、ＣＣ法よりも高速な方法で処理を行い、それ以外の色成分にＣＣ法による処理を行うことで、画質の劣化を最小限に抑え、処理の高速化を図ることができる。
【００１０】
さらに、本発明は上記ハーフトーン処理方法において、第１の処理によって処理されるカラーデータはブラックである、ことを特徴としている。これにより、例えば最も目立つ色成分であるブラックにＣＣ法による処理を行いそれ以外の色成分にＣＣ法とは異なる処理を行うようにしたので、画質劣化を最小限に抑え、その処理の高速化をさらに図ることができる。
【００１１】
また、上記目的を達成するために本発明は、画素ごとにＮ（Ｎは整数）種類以上のレベル値を有する、それぞれ色相の異なる複数のカラーデータに対して、Ｍ種類（Ｍは整数）のレベル値を有するデータを出力する画像処理装置において、前記複数のカラーデータの少なくとも１つのカラーデータに対して、画素選択のための第１の基準点に基づいて画素ごとの前記Ｎ種類のレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、前記生成した画素群から第２の基準点を決定し、決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与し、前記画素群を生成する画素は更新された前記第１の基準点に基づいて選択する第１の処理手段と、前記複数のカラーデータのうち残りのカラーデータに対して、前記Ｍ種類のレベル値を有するデータに変換する第２の処理手段と、を備えることを特徴としている。
【００１２】
これにより、例えば、画質劣化を最小限に抑え、ハーフトーン処理の高速化を図る画像処理装置を提供することができる。また、ドット間距離が最適に保たれた快適な印刷出力を得ることのできる画像処理装置を提供することができる。
【００１３】
さらに、上記目的を達成するために本発明は、画素ごとにＮ（Ｎは整数）種類以上のレベル値を有する、それぞれ色相の異なる複数のカラーデータに対して、Ｍ種類（Ｍは整数）のレベル値を有するデータを出力する画像処理方法において、前記複数のカラーデータの少なくとも１つのカラーデータに対して、画素選択のための第１の基準点に基づいて画素ごとの前記Ｎ種類のレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、前記生成した画素群から第２の基準点を決定し、決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与し、前記画素群を生成する画素の選択は更新された前記第１の基準点に基づいて選択する第１の処理工程と、前記複数のカラーデータのうち残りのカラーデータに対して、前記Ｍ種類のレベル値を有するデータに変換する第２の処理工程と、を備えることを特徴としている。
【００１４】
これにより、例えば、画質劣化を最小限に抑え、ハーフトーン処理の高速化を図る画像処理方法を提供することができる。また、ドット間距離が最適に保たれた快適な印刷出力を得ることのできる画像処理方法を提供することができる。
【００１５】
さらに、上記目的を達成するために本発明は、画素ごとにＮ（Ｎは整数）種類以上のレベル値を有する、それぞれ色相の異なる複数のカラーデータに対して、Ｍ種類（Ｍは整数）のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、前記複数のカラーデータのうち少なくとも１つのカラーデータに対して、画素選択のための第１の基準点に基づいて画素ごとの前記Ｎ種類のレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、前記生成した画素群から第２の基準点を決定し、決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与し、前記画素群を生成する画素の選択は更新された前記第１の基準点に基づいて選択する第１の処理と、前記複数のカラーデータのうち残りのカラーデータに対して、前記Ｍ種類のレベル値を有するデータに変換する第２の処理と、をコンピュータに実行させることを特徴とする。
【００１６】
これにより、例えば、画質劣化を最小限に抑え、ハーフトーン処理の高速化を図るプログラムを提供することができる。また、ドット間距離が最適に保たれた快適な印刷出力を得ることのできるプログラムを提供することができる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明を実施するための最良の形態を説明する。図１は、本発明が適用されるシステム全体の構成を示す図である。全体としてホストコンピュータ１０と、画像出力装置２０とから構成される。
【００１８】
ホストコンピュータ１０は、アプリケーション部１１とラスタライズ部１２とから構成される。アプリケーション部１１では、文字データ、図形データ、ビットマップデータ等の印刷対象のデータが生成される。例えば、ホストコンピュータ１０でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどが生成される。生成されたこれらのデータは、ラスタライズ部１２へ出力される。
【００１９】
ラスタライズ部１２では、アプリケーション部１１から出力された印刷対象のデータを画素ごとに８ビットの階調データに変換する。本実施例では、Ｒ（レッド）、Ｇ（グリーン）、Ｂ（ブルー）の色毎に各画素８ビットの階調データが出力される。したがって、各画素ごと０から２５５までの値（レベル値）を有することになる。ラスタライズ部１２における階調データの生成は、実際にはホストコンピュータ１０に実装されたドライバによって処理が行われる。ラスタライズ部１２から出力される階調データは、画像出力装置２０に出力される。
【００２０】
画像出力装置２０は、全体として画像処理部２１と印刷エンジン２２とから構成される。画像処理部２１では、ホストコンピュータ１０から出力された階調データに対して色変換、ハーフトーン処理等を行い、処理後のデータが印刷エンジン２２に出力され、この印刷エンジン２２にて実際に印刷用紙等の記録媒体への印刷が行われる。
【００２１】
画像処理部２１は、色変換部２１１と、ハーフトーン処理部２１２と、パルス幅変換部２１３とから構成される。色変換部２１１は、ホストコンピュータ１０から出力されるＲＧＢ階調画像データを受け取り、ＲＧＢからＣＭＹＫへの色変換を行う。ここで、Ｃはシアン、Ｍはマゼンダ、Ｙはイエロー、Ｋはブラックを示す。ＣＭＹＫの階調データは、各画素につき、各色８ビットづつの階調データであり、各色ごと最大で２５６階調を有する。
【００２２】
ハーフトーン処理部２１２は、色変換部２１１から出力されるＣＭＹＫの階調データに対して、２値以上の多値の値（レベル値）に変換し、量子化データを出力する。ハーフトーン処理としては、分散ディザ処理、多値ディザ処理、さらに誤差拡散処理、複数の画素からなるセルを構成してその重心にドットを生成させる濃度重心法を利用した処理（Circular Cell法、以下ＣＣ法）がある。本発明による処理は、分散ディザ処理とＣＣ法による処理の組み合わせ、多値ディザ処理とＣＣ法による処理の組み合わせ、さらに誤差拡散処理とＣＣ法による処理の組み合わせ、の３種類の処理を行うものとする。各処理の具体的な内容は後述する。
【００２３】
パルス幅変調部２１３は、ハーフトーン処理部２１２から出力された量子化データが入力され、この量子化データに対してドットごとにレーザ駆動パルス有り又は無し等の駆動データを生成する。生成した駆動データは、印刷エンジン２２に出力される。
【００２４】
印刷エンジン２２は、レーザドライバ２２１とレーザーダイオード（ＬＤ）２２２とから構成される。レーザドライバ２２１は、入力された駆動データから、駆動パルスあり又はなし等を示す制御データを生成し、レーザーダイオード２２２に出力する。レーザーダイオード２２２は、レーザドライバ２２１から出力された制御データに基づいて駆動され、さらに図示しない感光ドラムや転写ベルトが駆動されて、実際に印刷用紙等の記録媒体にホストコンピュータ１０からのデータが印刷されることになる。
【００２５】
次に図２を参照して、画像出力装置２０の具体的構成について説明する。ここで、図１の画像出力装置２０のうち、色変換処理部２１１、ハーフトーン処理部２１２及びパルス幅変調部２１３は、図２におけるＣＰＵ２４、ＲＯＭ２５、及びＲＡＭ２６に対応する。
【００２６】
画像出力装置２０は、全体として、入力インターフェース（Ｉ／Ｆ）２３、ＣＰＵ２４、ＲＯＭ２５、ＲＡＭ２６、印刷エンジン２２とから構成され、バスを介して互いに接続されている。入力Ｉ／Ｆ２３は、ホストコンピュータ１０と画像出力装置２０とのインターフェースの役割を果たす。入力Ｉ／Ｆ２３には、所定の伝送方式により伝送された、ホストコンピュータ２０からのＲＧＢ階調データが入力され、画像出力装置２０で処理できるデータに変換される。ＲＧＢ階調データは、一旦ＲＡＭ２６に格納される。
【００２７】
ＣＰＵ２４は、バスを介して入力Ｉ／Ｆ２３、ＲＯＭ２５、ＲＡＭ２６、印刷エンジン２２と接続され、ＲＯＭ２５に格納されたプログラムを読み出して、色変換、ハーフトー
ン処理等の各種処理を行う。その詳細は、後述する。ＲＡＭ２６は、ＣＰＵ２４で実行される各処理のワーキングメモリとして役割を果たし、処理後の各種データが格納される。そして、印刷エンジン２２のレーザドライバ２２１を駆動させるための駆動データも格納される。ＲＡＭ２６の具体的構成等も後述する。
【００２８】
印刷エンジン２２は、図１の印刷エンジンと同様の構成で、ＲＡＭ２６に格納された駆動データがＣＰＵ２４の制御により入力されて、上述した印刷処理が行われることになる。
【００２９】
次に、以上のように構成された画像出力装置２０における処理の動作について説明する。ホストコンピュータ１０からのＲＧＢ階調データが画像出力装置２０の色変換部２１１にまず入力される。色変換部２１１では、色補正テーブルや演算式などを用いて、ＲＧＢ階調データをＣＭＹＫの階調データに変換する。変換後のデータはハーフトーン処理部２１２に入力されて、２値あるいは多値の量子化データに変換して出力される。ハーフトーン処理部２１２から出力された量子化データは、パルス幅変調部２１３に入力される。パルス幅変調部２１３に入力された量子化データは、レーザ駆動パルスを生成するための駆動データに変換されて印刷エンジン２２に出力される。そして、印刷エンジン２２でこの駆動データをもとに印刷処理が行われる。
【００３０】
上述したように本実施例におけるハーフトーン処理は、ＣＣ法とディザ法とを組み合わせた処理、又はＣＣ法と誤差拡散法とを組み合わせた処理である。ＣＣ法による処理では、一定の大きさのセルを構成してその重心又は中心位置にドットを生成させるようにしているためドットの分散性が向上する。しかし、重心等の演算を行うため処理に時間がかかる。一方、ディザ法や誤差拡散法は、ドットの分散性という点ではＣＣ法に劣り、そのため画質が十分ではない。しかし、閾値やテーブルの比較により量子化データを得るようにしているため、ＣＣ法と比較し高速化を図ることができる。他方、ＣＭＹＫの各色のドットは、色相が異なる（明度が異なる）ため、印刷用紙上で例えばイエローのドットは視覚的に目立ちにくく、ブラックのドットは逆に目立ち易い。
【００３１】
そこで、目立ちにくい色成分に対しては、分散ディザ処理や多値ディザ処理、誤差拡散処理を行いハーフトーン処理の高速化を図り、目立ち易い色成分に対してはＣＣ法による処理を行い画質の向上を図るようにしたのである。
【００３２】
以下、ハーフトーン処理の詳細について説明するが、まず実施例１として分散ディザ法とＣＣ法の組み合わせ、実施例２として多値ディザ法とＣＣ法の組み合わせ、実施例３として誤差拡散法とＣＣ法の組み合わせ、の各処理についてそれぞれ説明することにする。
【実施例１】
【００３３】
［分散ディザ法とＣＣ法とを用いたハーフトーン処理］
まず具体的な処理を説明する前に、ＣＣ法についての概要を説明する。ＣＣ法によるハーフトーン処理は、まず初期画素を選択し、所定の閾値に達するまで初期画素周辺の未処理画素を選択して、複数画素からなるセルを構成する。セルを構成する未処理画素選択の際、それまで構成したセルの重心位置から最も近い画素を選択する。そして、閾値に達するとそのセルの重心位置に位置する画素にドット生成を示す値（例えば"２５５"）を割り当て、それ以外の画素はドットの生成を行わないことを示す値（例えば"０"）を割り当てる。ＣＣ法は、以上の処理を入力画像の全てのデータに対して行うことで、量子化されたデータを得るのである。
【００３４】
上述した特開平１１−２７５２８では、セルに取り込むべき未処理画素の選択にテーブルを利用して予め決められた位置の画素を選択するようにしている。一方、ＣＣ法は重心
位置を利用してセルに取り込むべき未処理画素を選択するようにしているため、特開平１１−２７５２８と比較して、セルが円状に成長し、ドット間距離を一定に保つことができ、ドットの分散性を向上させて視覚的に快適な印刷出力を得ることができる。
【００３５】
以下、分散ディザ法とＣＣ法の組み合わせによる本発明のハーフトーン処理について図面を参照しながら詳細に説明する。ここで図３乃至図７は処理の動作を示すフローチャートであり、図８乃至図１７はＲＡＭ２６に格納された階調データの例を示すものである。以下、フローチャートに沿って説明することにする。
【００３６】
図３は、ＣＣ法と分散ディザ法によるハーフトーン処理全体のフローチャートを示すものである。まず、図３に示すように、ＣＰＵ２４は本処理を実行するためのプログラムをＲＯＭ２５から読み出すことによって、処理が開始されることになる（ステップＳ１０）。次いでＣＰＵ２４は、目立ちにくい色成分であるＹ成分に対して分散ディザ法による処理を行う（ステップＳ１１）。ここで、色変換後のＣ、Ｍ、Ｙ、Ｋのうち、白成分の明度を１００として場合、シアン（Ｃ）の明度は４５．３、マゼンダ（Ｍ）の明度は４４．３、イエロー（Ｙ）の明度は８４．６、ブラック（Ｋ）の明度は２２．０を有していることが知られている。もちろん、これらの値は、使用される画像出力装置２０の種類によって異なる値を有する。このうちイエローが最も明度が高く白成分との差が低く、白い印刷用紙に対して目立ちにくい色成分といえる。一方、ブラックは白成分に対して明度差が大きく、目立ちやすい色成分である。よって、本実施例においては、イエロー成分に対して分散ディザによる処理を行い、それ以外の色成分に対してＣＣ法による処理を行う。画質劣化を最小限に抑え、処理の高速化を図るためである。
【００３７】
分散ディザ法による処理の具体例を図８乃至図１０（ａ）を参照して説明する。上述したように色変換後のＣ、Ｍ、Ｙ、Ｋの各色成分の諧調データはＲＡＭ２６に格納される。ここで図８（ａ）に示すように、ＲＡＭ２６にはシアン入力データ格納領域２６１ａ、マゼンダ入力データ格納領域２６１ｂ、イエロー入力データ格納領域２６１ｃ、ブラック入力データ格納領域２６１ｄを有し、各色成分の階調データが各領域２６１ａ〜２６１ｄにＣＰＵ２４の制御により格納される。図８（ａ）に示す例では、各領域２６１ａ〜２６１ｄは６行６列で構成されているが、これは説明を容易にするためであって、例えば画像１フレーム分のデータを格納できる構成でもよい。また、各座標位置に入力される階調値は、全体画像の画素位置に対応するもので、例えばシアン入力データ格納領域２６１ａで（０，０）の位置は、全体画像の（０，０）に位置する画素に対応するものである。図８（ａ）に示すようにシアンの階調値は各画素位置とも"３５"、マゼンダの階調値は"４０"、イエローは"４５"、ブラックは"３０"となっている。
【００３８】
分散ディザ法による処理は、マトリックス内の各位置に格納された閾値と各色の階調値とを比較し、閾値の方が階調値よりも大きな値のときはドットを生成しないことを示す"０"、逆に階調値の方が大きいとドット生成を示す"２５５"を与えることで量子化データを得る。このマトリックス２５１の例を図８（ｂ）に示す。このマトリックス２５１は、例えばＲＯＭ２５に格納され、処理の際にＣＰＵ２４が適宜ＲＯＭ２５からこのマトリックス２５１内の値を読み出すことで処理が行われることになる。具体的には以下のようになる。
【００３９】
すなわち、図８（ｃ）に示すようにまずイエロー入力データ格納領域２６１ｃの（０，０）の画素位置に格納された階調値と、マトリックス２５１内の（０，０）の位置に格納された閾値とを比較する。階調値は"４５"で、閾値である"２００"より低い値であるから、（０，０）の画素位置は、ドットを生成しないことを示す"０"を割り当てることになる。このドット生成の有無を示す値は、同図に示すようにＲＡＭ２６内に設けられたイエロー出力データ格納領域２６２ｃの（０，０）の位置にＣＰＵ２４の制御により格納
される（図８（ｃ）参照）。この領域２６２ｃも、入力データ格納領域２６１ａ〜ｄと同様に各画素位置がホストコンピュータ１０で生成された画像データの画素位置に対応するものであり、さらに図に示す６行６列の構成のみならず画像１フレーム等それ以外の構成でもよい。なお、後述するが、他の色成分に対してもＲＡＭ２６内に出力データ領域２６２ａ、２６２ｂ、２６２ｄを有し、同様の構成を有する。
【００４０】
次いでＣＰＵ２４は、イエロー入力データ領域２６１ｃの（１，０）の位置にある階調値"４５"とマトリックス２５１内の（１，０）の閾値"２２５"とを比較し、閾値の方が大きい値なので、"０"をイエロー出力データ領域２６２ｃの（１，０）の位置に格納する（図９（ａ）参照）。同様にＣＰＵ２４は、入力データ領域２６１ｃの（２，０）の階調値"４５"と、マトリックス２５１内の当該位置にある閾値"７５"とを比較し、"０"を出力データ領域２６２ｃの当該位置に格納する（図９（ｂ）参照）。
【００４１】
次いでＣＰＵ２４は、入力データ領域２６１ｃの（３，０）の階調値と、マトリックス２５１の（０，０）の閾値"２００"とを比較し、ドットを生成しないことを示す"０"を、出力データ領域２６２ｃの（３，０）の位置に格納する（図９（ｃ）参照）。以下、各階調値と各閾値とを比較し処理を進めることになる。その結果、図８（ａ）に示すＹ成分の各階調値に対して、図１０（ａ）に示すＹ成分の量子化データを得る。この図に示すように、４つの画素位置（（２，１）、（５，１）、（２，４）、（５，４）の位置）で、ドット生成を示す"２５５"が格納され、Ｙドットが生成されることになる。
【００４２】
図３のフローチャートに戻り、次いでＣＰＵ２４はＹ成分に対する分散ディザ処理の結果、Ｙドットが生成されるか否か判断する（ステップＳ１２）。Ｙドットが生成されるか否かは、例えばＣＰＵ２４がＲＡＭ２６内のイエロー出力データ格納領域２６２ｃを探索して、ドット生成を示す"２５５"が格納されているか否かで判断することができる。図１０（ａ）の例では、４つの画素位置でドット生成を示す値が格納されているので、本ステップでは"ＹＥＳ"が選択される。
【００４３】
ステップＳ１２で"ＹＥＳ"が選択されると、ＣＰＵ２４は、Ｙ成分の階調値から演算した明度に応じた演算値をその他の色成分の階調値に加算する処理を行う（ステップＳ１３）。このように明度に応じた演算値を他の色成分に加算しているのは、より目立ちやすい色のドット周囲には、より広い空白領域を設けて、単位面積あたりの明度をできるだけ一定に保ち、かつ粒状性を改善するためである。すなわち、目立ちやすいドットの周辺には他の色のドットが打たれないよう、より大きな値を他の色の階調値に加算し、その後減算処理を行って、より大きな空白領域を設けるようにする必要がある。逆に目立ちにくいドットの周囲にそれ以外の色成分のドットが打たれるよう、より小さな値を加算しその後減算処理を行って、空白領域を狭く設ける必要がある。その結果、単位面積あたりの明度が均一に保たれ、視覚的に快適な印刷出力が得られるのである。したがって、選択されたＹ成分の画素の階調値をそのまま他の色の階調値に加算するのではなく、各色成分の明度を考慮した値を加算する。具体的には、以下の演算式を用いる。
【００４４】
（式１）
加算値＝選択画素の階調値×｛（１００−加算元の色の明度）／（１００−加算
先の色の明度）｝
この（式１）に示すように、明度が小さい色成分（目立ちやすい色）から、明度が大きい色成分（目立ちにくい色）に階調値を加算する場合は、そのまま階調値を加算するよりも大きな値が加算され、逆の場合はより小さな値が加算されることになる。また、明度がほぼ同等な色成分どうしで加算する場合は、加算元の階調値がそのまま加算先に加算されることになる。
【００４５】
ここで、各色成分の明度は、シアンを"４５"、マゼンダを"４５"、イエローを"８０"、ブラックを"２０"として演算を行うものとする。上述にも明度の値の例を示したが、ここでは演算を簡単にするためにこのような値を設定している。図８（ａ）の例では、イエローからシアンに、４５×（１００−８０）／（１００−４５）＝４５×２０／５５＝１６を加算する。マゼンダには、４５×（１００−８０）／（１００−４５）＝１６を加算し、ブラックには、４５×（１００−８０）／（１００−２０）＝１１を加算することになる。加算後のシアン、マゼンダ、ブラックの階調値の例を図１０（ｂ）に示す。
【００４６】
図３に戻り、次いでＣＰＵ２４はＹドット周囲の減算処理を行う（ステップＳ１４）。ステップＳ１３で加算した値を減算する処理をＣＰＵ２４が行うことになるが、加算した値をそのまま均等に減算するのではなく、ドットが発生する位置を中心に減算する処理を行う。このような加算、減算を行うことで、Ｙ成分のドットが発生する位置と重なって他の色成分のドットが生成されることを防ぐことができ、ドットが重なることによる粒状的なドットの生成を抑えることができる。また、加算する際に明度に応じた演算値を他の色成分に加算して、その後減算を行っているため、Ｙ成分のドットとそれ以外の色成分のドットについて単位面積あたりの明度が均一になるという効果を得る。
【００４７】
減算処理の具体的な処理の動作を図４のフローチャートに示し、ＲＡＭ２６に格納された各階調値の例を図１１乃至図１２に示す。図４に示すようにＹドット周囲の減算処理（ステップＳ１４）に移行すると、まずＣＰＵ２４はＹドットが発生する位置すべてに対して減算処理を行ったか否か判断する（ステップＳ１４１）。例えば、ドットが発生する位置をＲＡＭ２６の所定の領域に格納し、処理が終了するごとにフラグを立てたり、出力データ格納領域２６２ｃを（０，０）から順番に探索し、すべての位置を探索したか否かで判断する。図１１（ａ）の例では、まだすべてのドット生成位置で減算処理を行っていないので本ステップで"ＹＥＳ"が選択される。
【００４８】
ステップＳ１４１で"ＹＥＳ"が選択されるとＣＰＵ２４は、Ｙドットに最も近いＸ色の画素を選択する（ステップＳ１４２）。ここでＸは、Ｙ成分以外の色成分の数を示し、初期値として"１"が設定される。図１１（ａ）の例では、１色目（Ｘ＝１）としてシアンが選択される。そして、Ｙドットは（２，１）の位置に発生するので、Ｙドットに最も近い位置としてＹドットが発生する位置（２，１）そのものを選択するものとする（同図シアン入力データ格納領域２６１ａ参照）。最も近い位置を選択するのは、Ｙドット周辺に他の色成分のドットが生成されないようにして（ドットが重ならないようにして）、粒状的なドットの生成を抑え快適な印刷出力を得るためである。
【００４９】
次いでＣＰＵ２４は、選択画素の階調値の合計が加算された総量を超えるか否か判断する（ステップＳ１４３）。ステップＳ１３でイエローから各色成分に対して明度に応じた演算値を加算しているが、シアン、マゼンダに対しては各画素"１６"を加算しているため、全体として１６×３６画素＝５７６の演算値が加算されている。またブラックに対しては１１×３６画素＝３９６の演算値が加算されている。この３６画素で、イエローのドットは４つ存在するので、イエロー１ドットあたり、シアン、マゼンダは、５７６／４＝１４４、ブラックは、３９６／４＝９９の階調値を加算したことになる。よって本ステップでは、ステップＳ１４２で選択した色成分がシアン、マゼンダのときは加算総量として"１４４"、ブラックは"９９"として、選択画素の階調値の合計値と比較することで判断する。なお、ＲＡＭ２６内にはこの階調値の合計値を格納する合計値領域２６３を有し、ＣＰＵ２４の制御により適宜、ステップＳ１４２で選択した画素の階調値の合計値が格納されることになる。図１１（ａ）の例では、選択した色成分はシアンなので加算総量は"１４４"となる。また、選択した画素は、（２，１）のみなので、その合計値は"５１"となる。よって、階調値の合計値は加算総量を超えないので、本ステップで"ＮＯ"が選択され、ステップＳ１４４に移行することになる。
【００５０】
次いでＣＰＵ２４は、ステップＳ１４４においてステップＳ１４２で選択した画素に"０"を格納する。図１１（ｂ）に示すように、シアン入力データ格納領域２６１ｃの画素位置（２，１）に"０"を格納することになる。なお、ＣＰＵ２４は選択した画素の階調値の合計を演算し、その値をワーキングメモリ２７０に格納する。
【００５１】
次いでＣＰＵ２４は、減算対象の画素の階調値の合計が加算された総量に等しいか否か判断する（ステップＳ１４５）。合計値領域２６３に選択画素の階調値の合計が格納されるので、この値と加算総量値とを比較することで処理が行われる。なお、加算総量は、例えばＲＡＭ２６の図示しないメモリ領域に格納されるものとし、ＣＰＵ２４が適宜この値を読み出すことで比較が行われる。図１１（ｂ）の例では、加算総量は"１４４"で、階調値の合計値"５１"であるから、本ステップで"ＮＯ"が選択され、再びステップＳ１４２に移行することになる。
【００５２】
次いでＣＰＵ２４は、再びステップＳ１４２においてＹドットが生成した位置に最も近い１色目（Ｘ＝１）の画素を選択する。最初の画素選択では、Ｙドットが発生する画素位置そのものを選択したので、そのまわりの画素を選択することになる。図１１（ｃ）に示すように、まわりの画素としてＹドットが発生した画素位置の上下左右の４つの画素（（２，０）、（１，１）、（３，１）、（２，２）の画素）を選択するものとする。もちろん、選択の方法は種々の方法が考えられる。例えば、最初のステップＳ１４２でドットが生成する画素の他に、さらにその位置の上下左右の画素を選択するようにしてもよいし、最初にドットが生成する画素位置を選択し、再び本ステップに移行したとき上下左右の４つの画素の他、斜め方向に隣接する４つの計８つの画素を選択することも考えられる。
【００５３】
次いでＣＰＵ２４は、選択画素の階調値の合計値が加算総量を超えるか否か判断する（ステップＳ１４３）。図１１（ｃ）に示す例では、選択した４つの画素とドットが発生する画素の合計値は、５１×４＋５１＝２５５で、加算総量"１４４"を超えることになる。よって本ステップで"ＹＥＳ"が選択され、ステップＳ１４８に移行する。
【００５４】
ＣＰＵ２４は、ステップＳ１４８において減算すべき減算量を演算する。すなわち、選択画素の階調値の合計が加算総量と等しくなるように、直前のステップＳ１４２で選択した画素の階調値を減算する。上述の例では、加算総量は"１４４"で、すでにＹドットが発生する画素位置の階調値を減算したので、加算総量と等しくなるには、"９３"（＝１４４−５１）の階調値を減算すればよいことになる。選択画素数は４つなので等量に減算するよう、２３、２３、２３、２４づつ、選択した４つの画素から減算すればよいことになる。
【００５５】
次いでＣＰＵ２４は、減算後に残った階調値を選択画素に戻す処理を行う（ステップＳ１４９）。上述の例では、減算量を各階調値から減算すると、２８（＝５１−２３）、２８、２８、２７（＝５１−２４）となりこの値を選択した４つの画素に戻すことになる。減算後の例を図１１（ｃ）に示す（シアン入力データ格納領域２６１（ａ）参照）。
【００５６】
これにより、ステップＳ１３で加算した１ドットあたりの演算値と等量の値を減算したことになる。減算すべき画素をＹドットが生成する位置から減算したことにより、イエローのドットとシアンのドットが重なる確率が低くなり、粒状性を改善した画像出力を得ることができる。しかも、イエローとシアンの明度に応じた値を加算、減算したことにより、イエローとシアンの明度が一定に保たれた快適な画像出力を得ることができる。すなわち、イエローの階調値をそのまま加算した場合と比較して、シアンとイエローの明度比を考慮した分より低い値を加算している（イエローの階調値は"４５"、加算値は"１６"）。よって減算後、階調値をそのまま加算した場合よりも低い値を減算したのでイエローのドットの近くにシアンのドットがより近づきやすくなる。よって印刷用紙上の単位面積あたり、目立ちにくいイエローのドットにシアンのドットが近づく分、イエローとシアンとの明度が均一になるのである。一方、後述するがブラックに対する加算値（"１１"）は明度を考慮してシアンに対する加算値（"１６"）より低い値となっている。したがって、イエローのドットの近くにシアンよりもブラックが近づきやすくなる。すなわち、目立ちにくいドットの周辺に目立ち易いドットが近づくようになるため、単位面積あたりの明度が均一に保たれ快適な印刷出力を得ることができるのである。逆に、このような明度を考慮して加算、減算することで目立ちやすいドットの周囲から離れるように目立ち易いドットが配置されることになり、この場合でも単位面積あたりの明度が均一に保たれるようになるのである。また、ドットが異なる色ごとに重ならないことで色域も広がるのである（彩度が向上する）。
【００５７】
図４に戻り、次いでＣＰＵ２４は、Ｘに１を加算する（ステップＳ１４６）。他の色成分（ここでは２色目）に対して減算処理を行うためである。なお、ステップＳ１４５で"ＹＥＳ"の場合も、加算総量分の値を減算したことになるので、本ステップＳ１４６に移行してかかる処理が行われる。次いでＣＰＵ２４は、Ｘの値が"４"であるか否か判断する（ステップＳ１４７）。Ｙ成分以外の３つの色成分すべて処理が終了したか否かを判断するためである。
【００５８】
図１１（ｃ）の例では、Ｘ＝２となるから本ステップで"ＮＯ"が選択され、２色目（Ｘ＝２）の減算処理を行うべく、再びステップＳ１４２に移行する。図１２（ａ）に示すように２色目として、マゼンダを選択する。そして、シアンに対する減算処理と同様に、Ｙドットが発生する画素位置をまず選択し、加算総量を超える（ステップＳ１４３で"ＹＥＳ"）が等しくなるまで（ステップＳ１４５で"ＹＥＳ"）、画素を選択し続ける。画素の選択は、シアンの場合と同様にドット発生位置の次にはドットが発生する画素位置の上下左右の隣接する画素、次は斜め方向に隣接する画素、次はさらにそのまわりにある１６個の画素（又はそのうち適宜選択した画素）、と除々に選択の幅を広げるように選択する。選択画素の階調値の合計が加算総量を超えると、１ドットの加算総量と等しくなるように最後に選択した画素の階調値からできるだけ等量となるように減算する。以上の処理の結果、マゼンダの入力データは図１２（ａ）のマゼンダ入力データ格納領域２６１ｂに示す値を有するものとなる。この場合も、イエローとマゼンダのドットが重なる確率が低くなり、明度が均一で快適な印刷出力を得ることができる。
【００５９】
そしてＣＰＵ２４は、Ｘに１を加算して３色目（Ｘ＝３）の色成分に対する減算処理を行う。上述の例では、３色目としてブラックを選択する。減算処理は、加算総量が"９９"であること以外はシアン、マゼンダと全く同様である。その減算処理の結果を図１２（ｂ）に示す。そして、Ｘに１を加算し（ステップＳ１４６）、Ｘが４となるのでステップＳ１４７で"ＹＥＳ"が選択され、ステップＳ１４１に移行することになる。
【００６０】
これまでの減算処理は、Ｙドットが発生する（２，１）の画素位置で、シアン、マゼンダ、ブラックと減算処理を行ったが、今度はその次にＹドットが発生する（５，１）の画素位置で、シアン、マゼンダ、ブラックと順番に減算処理を行うことになる（図４のステップＳ１４１で"ＹＥＳ"が選択され、ステップＳ１４２からＳ１４９までの処理が行われる）。そして、各色成分の減算処理が終了すると、ステップＳ１４７で"ＹＥＳ"が選択され再びステップＳ１４１に移行し、その次にＹドットが発生する位置で減算処理を行う。これを未処理のＹドットがなくなるまで処理を繰り返すことになる。すべのＹドットが発生する位置で減算処理を行った結果を図１２（ｃ）に示す。
【００６１】
減算処理が終了するとＣＰＵ２４は、図３に戻り、ステップＳ１５に移行して未処理画素の選択を行う（ステップＳ１５）。すなわち、これ以降Ｙ成分以外の残りの色成分に対
してＣＣ法によって処理を行う。その前段階として本ステップにおいて、まず、減算処理後のＣ、Ｍ、Ｋの各データに対してＣＣ法による処理を行っていない未処理画素を探索する。未処理画素の探索は、ラスタ方向（入力データ領域２６１ａ〜ｄ上最も上で最も左側の方向）に探索を行う。セルが横方向に並びやすく、視覚的に快適なドットが生成されるためである。図１２（ｃ）の例では、Ｃ，Ｍ、Ｋの各色成分とも（０，０）の画素に対してＣＣ法による処理を行っていないため、ＣＰＵ２４は、（０，０）の画素を未処理画素として選択する。なお、後述するが、未処理画素の探索は、入力データ領域２６１ａ、２６１ｂ、２６１ｄに"−１"が格納されたか否かで判断することができる。
【００６２】
次いでＣＰＵ２４は、ドット密度が最も疎となるであろう色成分を選択する（ステップＳ１６）。最も疎となる成分から先にＣＣ法による処理を行うことで入力階調値に忠実なドット分布を得るためである。すなわち、ＣＣ法による場合も同様に他の色成分に対して加算、減算処理を行うが、最も密なものから先にＣＣ法による処理を行うと、疎となる色成分に減算処理を行うことになる。このため疎となる色成分の各階調値が分散され、入力階調値に忠実でない階調データとなる。この結果、ドットが発生する確率が低いにも拘わらず、さらに入力階調値に忠実でないドットが生成されてしまうことになる。そのため、先に疎となる成分からドットの位置を決定し、その過程で密成分に加算、減算を行うようにしている。
【００６３】
具体的にはＣＰＵ２４は、選択した画素の階調値をドット生成を示す値（本実施例では"２５５"）で除算した値を比較することにより疎となる色成分を判定する。図１２（ｃ）の例では、Ｃ、Ｍ、Ｋの（０，０）に位置する画素の階調値はそれぞれ、"５１"、"５６"、"４１"、ドット生成を示す値で除算すると、最も低い値を有するのは、ブラックの成分である。よって、３つの色成分のうち最もドット密度が疎となるであろう色成分はブラックと判断するのである。
【００６４】
図３に戻りＣＰＵ２４は、次いで、疎と判定された色のＣＣ法による処理を行う（ステップＳ１７）。ＣＣ法による処理の動作を示すフローチャートを図５乃至図６に示す。本処理に移行するとＣＰＵ２４は、初期画素を決定し、初期濃度重心を演算する（ステップＳ１７１）。ここでの初期画素は、ステップＳ１５で選択した未処理画素となる。また、重心の位置は、以下の演算式を用いて値を求める。
【００６５】
（式２）
ｘ重心＝｛｛（セルの重心のｘ座標）×（セルの階調値の合計）｝
＋｛（選択した未処理画素のｘ座標）×（選択した未処理画素の階調値）｝｝
／（セルの階調値の合計＋選択した未処理画素の階調値）
ｙ重心＝｛｛（セルの重心のｙ座標）×（セルの階調値の合計）｝
＋｛（選択した未処理画素のｙ座標）×（選択した未処理画素の階調値）｝｝
／（セルの階調値の合計＋選択した未処理画素の階調値）
（ｘ重心、ｙ重心は重心位置の座標）
この演算式はＲＯＭ２５に格納され、重心位置の演算のときにＣＰＵ２４がＲＯＭ２５から読み出して演算を行うことになる。ちなみに、初期画素の場合は、セルの重心のｘ、ｙ座標、及びセルの階調値はともに０として演算される。なお、セルとは、上述したように複数の画素から構成される画素群で、上式で"セルの重心"とあるのは、これまで構成したセルの重心のことである。初期濃度の重心を演算すると、ｘ重心＝０、ｙ重心＝０となる。
【００６６】
なお、図１３（ａ）に示すようにＲＡＭ２６には、さらにワーキングメモリ領域２７０を有している。この領域２７０は、重心の位置座標と、これまで選択した画素の階調値の合計値が格納されるよう構成される。重心位置を格納するのは、その位置をもとにセルを
構成する画素を選択したり、最終的なドットの位置を確定させるためである。また、階調値の合計はセルを構成する画素の階調値の合計が閾値となるまで画素の選択を続けるのに必要だからである。
【００６７】
本ステップで演算した重心位置は、ＣＰＵ２４によってワーキングメモリ２７０に格納されることになる。図１３（ａ）の例では、重心位置（０，０）がワーキングメモリ領域２７０に格納される。また、階調値の合計値"４１"も領域２７０に格納される（図１３（ｂ）のメモリ領域２７０参照）。なお、初期画素の場合、選択画素は１つしかないので選択画素の階調値が階調値の合計としてワーキングメモリ２７０に格納されることになる。
【００６８】
さらに、図１３（ａ）に示すようにＲＡＭ２６には、ブラックドット生成の有無を示す値が格納されるブラック出力データ格納領域２６２ｄを備える。上述したようにこの領域２６２ｄも各入力データ領域２６１ａ〜２６１ｄ等と同様に、各画素位置（ｍ，ｎ）はホストコンピュータ１０で生成される全体画像の画素位置に対応するよう構成されている。図１３（ｂ）に示すようにＣＰＵ２４は、処理対象の未処理画素を選択する際に対応する画素位置（ここでは（０，０）の位置）にブラックドットを生成しないことを示す値（本実施例では"０"）を格納する。
【００６９】
また、ＣＰＵ２４はセルを構成する画素を選択すると、以後未処理画素として選択されないようにするために"−１"をその画素位置に格納する。図１３（ｂ）に示すように、ブラックの初期画素として（０，０）を選択したので、この画素位置に"−１"を格納することになる。
【００７０】
ここで、ＣＰＵ２４は他の色成分の対応する画素位置に対して明度に応じた階調値を加算する処理を行う。Ｙ成分の分散ディザ処理において、他の色成分に演算値を加算したときと同様に、目立ちやすい色のドット周囲には、より広い空白領域を設けて、単位面積あたりの明度をできるだけ一定に保ち、かつ粒状性を改善するためである。この場合も、目立ちやすいドットの周辺には他の色のドットが打たれないよう、より大きな値を他の色の階調値に加算し、その後減算処理を行って、より大きな空白領域を設けるようにしている。演算値は上述の(式１)を用いる。図１３（ｂ）に示すように、ブラックの画素位置（０，０）の階調値は"４１"、加算元であるブラックの明度は"２０"、加算先であるシアン、マゼンダの明度はともに"４５"、よって（式１）から、シアン、マゼンダの当該画素位置の階調値に"６０"（＝４１×（１００−２０）／（１００−４５））を加算することになる。加算後の例を図１３（ｂ）のシアン、マゼンダ各入力データ格納領域２６１ａ、２６１ｂに示す。以上が、本ステップＳ１７１でのＣＰＵ２４が行う処理である。
【００７１】
図５に戻り、次いでＣＰＵ２４は、未処理画素の選択を行う（ステップＳ１７２）。未処理画素の選択は、ワーキングメモリ２７０に格納した重心位置の座標をもとに最も近い位置にある画素を選択する。重心を利用してセルを構成する未処理画素を選択するため、上述したようにセルは円状になりやすく、その重心にドットを形成させることで、ドット間距離が一定で快適な印刷出力を得ることができるのである。図１３（ｂ）の例では、ワーキングメモリ領域２７０に重心位置ｘ重心＝０、ｙ重心＝０が格納されているので、この位置から最も近い画素位置を選択することになる。この例の場合に、重心位置に最も近い画素としては、（１，０）と（０，１）に位置する２つの画素が存在する。この場合ＣＰＵ２４は、ランダムにいずれか１つの画素を選択することにする。固定順（例えば次に選択すべき未処理画素は右隣の画素、次に選択すべき画素はその画素の下にある画素など）に選択すると、最終的に構成されるセルが規則的に並びすぎることによって、印刷出力のある領域でドットが周期的に発生する周期パターンが生じることになる。このようなパターンは視覚に入り易く快適な印刷出力を得ることができない。このような理由から、選択すべき画素が複数あれば、ランダムに選択するのである。図１３（ｂ）の例では、ＣＰＵ２４は、（０，１）に位置する画素を未処理画素として選択することにする。選択された例を図１３（ｃ）に示す。
【００７２】
図５に戻り、次いでＣＰＵ２４は、階調値の合計が閾値を超えるか否か判断する（ステップＳ１７３）。セルを構成する画素の選択は、選択画素の階調値の合計が閾値になるまで選択するためである。本実施例において閾値は、"２５５"として以下演算することする。もちろん、これ以外の値を閾値としてもよい。図１３（ｃ）の例では、これまで選択した画素の階調値の合計は"４１"、未処理画素として選択した画素の階調値は"４１"、よって、階調値の合計は"８２"となり閾値である"２５５"を超えない。したがって、本ステップで"ＮＯ"が選択され、処理はステップＳ１７４に移行することになる。なお、この閾値は例えばＲＯＭ２５に格納され、ＣＰＵ２４が処理の際に適宜読み出すことで判断されることになる。
【００７３】
ステップＳ１７４でＣＰＵ２４は、未処理画素を含めたセルの重心を演算する。新たにセルに取り込まれた画素を含めたセル全体の重心位置を求めるためである。重心位置は、（式２）を用いる。図１３（ｃ）に示す例では、２つの画素（０，０）、（０，１）からなるセルの重心を求めることになり、その結果重心位置は、ｘ＝０、ｙ＝０．５となる。演算した重心位置は、ＣＰＵ２４の制御によりワーキングメモリ２７０に格納される（図１３（ｃ）のワーキングメモリ２７０参照）。
【００７４】
次いでＣＰＵ２４は、セルの階調値の合計を演算し、その値をワーキングメモリ２７０に格納する（ステップＳ１７５）。新たにセル内に取り込んだ画素を含めたセル全体の階調値を計算するためである。図１３（ｃ）の例では、セルを構成する２つの画素（（０，０）、（０，１）の画素）の階調値の合計は"８２"、この値をＣＰＵ２４はワーキングメモリ２７０に格納することになる（同図のワーキングメモリ２７０参照）。
【００７５】
次いでＣＰＵ２４は、明度に応じた演算値を他の残りの色成分に加算する（ステップＳ１７６）。この場合も（式１）を用いる。図１３（ｃ）の例では、ブラックの（０，１）の階調値"４１"なので、シアン、マゼンダの当該画素位置にそれぞれ"６０"、"６０"を加算することになる。加算した結果を図１３（ｃ）のシアン入力データ領域２６１ａ、マゼンダ入力データ領域２６１ｂに示す。そして、ＣＰＵ２４はステップＳ１７２で選択した未処理画素の画素位置に"−１"を格納し、出力データ格納領域２６２ｄの対応する画素位置に"０"を格納する（同図のブラック入力データ領域２６１ｄ、ブラック出力データ領域２６２ｄ参照）。
【００７６】
次いでＣＰＵ２４は、ワーキングメモリ２７０に格納した階調値の合計が閾値と等しいか否か判断する（ステップＳ１７７）。図１３（ｃ）の例では、階調値の合計は"８２"で、閾値である"２５５"と等しくはない。よって本ステップで"ＮＯ"が選択され、再びステップＳ１７２に移行し、セルを構成する未処理画素の選択を行うことになる。
【００７７】
以下同様の処理を繰り返すことになる。すなわち、セルを構成する画素の階調値の合計が閾値と等しくなるか（ステップＳ１７７で"ＹＥＳ"）、または閾値を超える（ステップＳ１７３で"ＹＥＳ"）まで画素を選択し続けることになる。図１３（ｃ）の例で、以下説明する。
【００７８】
すなわち、ステップＳ１７２で再び未処理画素の選択を行うが、ワーキングメモリ２７０に格納された重心位置から最も近い画素を選択する。重心位置（０，０．５）にから最も近い未処理画素は、（１，０）と（１，１）の２つあるがランダムに（１，０）を選択する（図１４（ａ）のブラック入力データ２６１ｄ参照）。階調値の合計は、８２＋４１＝１２３で閾値に達しないのでステップＳ１７３で"ＮＯ"が選択される。新たに選択した画素を含めた重心と階調値の合計とを演算し、その結果をワーキングメモリ２７０に格納する（同図のワーキングメモリ２７０参照）。また、明度に応じた演算値を残りの色成分であるシアン、マゼンダの当該画素位置に加算する（同図の各入力データ領域２６１ａ、２６１ｂ参照）。また選択画素の階調値を"−１"、出力データ領域に"０"を格納する。階調値の合計値は閾値に等しくないので、再び未処理画素の選択を行う。
【００７９】
図１４（ｂ）に示すように、次に（１，１）の画素を未処理画素として選択する。その階調値の合計は閾値に達しないので、セルの階調値の合計値と重心を演算して、ワーキングメモリ２７０に格納する（同図メモリ２７０参照）。さらに、シアン、マゼンダに演算値を加算する（同図の各入力データ領域２６１ａ、２６１ｂ参照）。さらに、選択画素の階調値を"−１"、出力データ領域に"０"を格納する。
【００８０】
以下、これを繰り返し、ＣＰＵ２４は、（０，２）、（１，２）を未処理画素として順次セルに取り込み、それぞれ重心位置の演算、加算処理等を行うと図１４（ｃ）、図１５（ａ）に示す状態となる。図１５（ａ）の段階で、セルを構成する画素の階調値の合計は、４１×５＋２７＝２３２となる（同図のワーキングメモリ２７０参照）。まだ、閾値に達しないのでステップＳ１７７で"ＮＯ"が選択されて、再びステップＳ１７２で重心に最も近い未処理画素が選択される。
【００８１】
ここでＣＰＵ２４は、未処理画素として（２，０）に位置する画素を選択するものとする。この画素の階調値を含めた階調値の合計は、２３２＋２７＝２５９となり、閾値である"２５５"を超えることになる。よって、ステップＳ１７３で"ＹＥＳ"が選択され、ステップＳ１７９に移行することになる。
【００８２】
ＣＰＵ２４は、ステップＳ１７９で閾値を超えた場合の重心位置の演算処理を行う。ここでの重心位置も演算式を用いて演算を行なうことになるが、以下の式を用いるものとする。
【００８３】
（式３）
ｘ重心＝｛｛（セルの重心のｘ座標）×（セルの階調値の合計）｝
＋｛（選択した未処理画素のｘ座標）×（閾値までに必要な階調値）｝｝
／（セルの階調値の合計＋閾値まで必要な階調値）
ｙ重心＝｛｛（セルの重心のｙ座標）×（セルの階調値の合計）｝
＋｛（選択した未処理画素のｙ座標）×（閾値までに必要な演算値）｝｝
／（セルの階調値の合計＋閾値まで必要な階調値）
（ｘ重心、ｙ重心は重心位置の座標）
（式２）との違いは、選択した未処理画素の階調値をそのまま用いるのではなく、セルの階調値の合計が閾値と同じになるような値を用いる点が異なる。例えば、図１５（ａ）の例では、これまで選択した画素の階調値の合計が"２３２"であるので、閾値の "２５５"までに必要な値は"２３"となる。そこで、最後の画素（（２，０）の画素）の階調値は"２３"として重心を演算するのである。この演算式は、（式２）の場合と同様に予めＲＯＭ２５に格納されており、ＣＰＵ２４が本ステップを実行する際にＲＯＭ２５から読み出すことで処理される。図１５（ａ）の例で演算すると、重心位置はｘ重心≒０．６、ｙ重心≒０．９となる。演算した重心位置は、ＣＰＵ２４の制御によりワーキングメモリ２７０に格納される（図１５（ｂ）のメモリ２７０参照）。
【００８４】
図５に戻り、次いでＣＰＵ２４は明度に応じた演算値を他の残り２色の階調値に加算する処理を行う（ステップＳ１８０）。加算すべき値の演算式は、上述の（式１）と同様であるが、選択した画素の階調値をそのまま（式１）に代入するのではなく、重心演算と同
様に閾値に達する値を当該画素の階調値として演算する。図１５（ａ）に示す例では、（２，０）に位置する画素の階調値は"２７"ではなく、"２３"として、（式１）を用いて演算することになる。実際に加算する値は、シアン、マゼンダともに"３３"となる。加算した結果を図１５（ｂ）のシアン、マゼンダ各入力データ領域２６１ａ、２６１ｂに示す。
【００８５】
図５に戻り、次いでＣＰＵ２４は残った階調値を選択した未処理画素に戻す処理を行う（ステップＳ１８１）。図１５（ｂ）の例では、最後に選択した画素（２，０）の階調値は"２７"、演算の際に"２３"の階調値として演算したので、減算した"４"を当該画素位置に戻すことになる（同図のブラック入力データ領域２６１ｄ参照）。セルを構成する画素以外の画素に戻すことも考えられるが、それでは入力階調値に忠実なドットを生成させることができない。よって、最後に選択した画素に減算後の値を戻し、以後再び未処理画素として選択できるようにするのである。
【００８６】
そして処理は、図６のステップＳ１７８に移行し、重心位置にドットを生成させる処理を行う。すなわち、ワーキングメモリ２７０にはこれまで構成したセルの重心位置が格納されているのでＣＰＵ２４がこの値を読出し、出力データ領域２６２ａ、２６２ｂ、２６２ｄの重心位置の存在する画素位置に"２５５"を格納することになる。図１５（ｂ）の例では、これまで演算した重心位置ｘ重心＝０．６、ｙ重心＝０．９がメモリ２７０に格納されているので、この位置にある画素（１，１）にドット生成を示す"２５５"を格納することになる（図１５（ｃ）のブラック出力データ領域２６２ｄ参照）。
【００８７】
一方、ステップＳ１７７で閾値と等しい場合（ＹＥＳの場合）も、すでにセルを構成する階調値の合計が閾値に達したことになるので、同様に重心位置にドットを生成する処理を行うことになる。
【００８８】
次いでＣＰＵ２４は、残り２色の減算処理を行う（ステップＳ１８２）。上述の例では、ステップＳ１７６やステップＳ１８０で演算値をシアン、マゼンダの各入力階調値に加算したので、加算した分減算を行うのである。シアン、マゼンダに加算した値は、ともに６０×５＋３７＋３３＝３７０となる。よって、この値が加算総量として以後処理を行うものとする。減算処理の動作を示すフローチャートを図７に示す。
【００８９】
この減算処理の動作も、ステップＳ１４での減算処理とほぼ同様である。すなわち、加算した総量と等しくなるまで残り２色の画素を選択していく。選択の方法は、まずドットが発生する画素を選択し、次いでそのドットが発生する画素位置の隣接する上下左右の画素、次いで隣接する斜め方向の４つの画素、次いで隣接する画素を１つ飛び越えた上下左右の画素と、除々にその範囲を広げるように選択する。
【００９０】
具体的には以下のようになる。すなわち、減算処理（ステップＳ１８２）に移行するとＣＰＵ２４は、まず、生成したドットに最も近いＺ色目の画素を選択する（ステップＳ１８２１）。ブラックのドットが発生する画素位置そのものを選択する。なお、Ｚは残りの色成分の数を示すもので、初期値として"１"が設定されるものとする。上述した例では図１６（ａ）に示すように、１色目（Ｚ＝１）としてシアンが選択され、ブラックドットが生成される（１，１）の画素が選択される。このようにドットに最も近い位置を選択するのは、ドット密度が疎となる色成分のドット発生位置に他の色成分のドットが生成されないようにして、粒状的なドットの生成を抑え快適な印刷出力を得るためである。
【００９１】
次いでＣＰＵ２４は、選択画素の階調値の合計が加算処理で加算された階調値の総量を超えるか否か判断する（ステップＳ１８２２）。図１６（ａ）の例では、シアンの選択画素（２，２）の階調値は"６７"で総量である"３７０"を超えないので、本ステップで
ＮＯが選択されてステップＳ１８２３に移行することになる。なお、加算された階調値の総量もＲＡＭ２６の所定のメモリ領域に格納され、本処理の際に適宜メモリから読み出されることで処理が行われるものとする。
【００９２】
次いでＣＰＵ２４は、選択画素に"０"を格納する（ステップＳ１８２３）。図１６（ａ）の例では、シアンの入力データ格納領域２６２ａの画素位置（１，１）に"０"を格納することになる（図１６（ｂ）のシアン入力データ格納領域２６２ａ参照）。なお、ＣＰＵ２４は選択した画素の階調値の合計を演算し、その値をワーキングメモリ２７０に格納するものとする（同図のワーキングメモリ２７０参照）。
【００９３】
次いでＣＰＵ２４は、減算対象の画素の階調値の合計が加算された総量に等しいか否か判断する（ステップＳ１８２４）。ワーキングメモリ２７０に選択画素の階調値の合計が格納されるので、この値と加算総量の値とを比較することで処理が行われる。なお、加算総量の値は、例えばＲＡＭ２６の図示しないメモリ領域に格納されるものとする。図１６（ｂ）の例では、総量に等しい値ではないので本ステップで"ＮＯ"が選択され、再びステップＳ１８２１に移行することになる。
【００９４】
再びステップＳ１８２１に移行するとＣＰＵ２４は、生成したドットに最も近い１（Ｚ＝１）色目の画素として、ドットが発生する画素位置に隣接する上下左右の４つの画素を選択する。図１６（ｂ）の例では、上下左右の画素として（１，０）、（０，１）、（２，１）、（１，２）の画素を選択する。それ以外の画素を選択してもよいことは、Ｙドットの減算処理の場合（ステップＳ１４２）と同様である。選択された例を図１６（ｃ）のシアン入力データ領域２６１ａに示す。
【００９５】
次いでＣＰＵ２４は、選択画素の階調値の合計が６７＋１１１×３＝４００となり加算総量である"３７０"を超えるので、ステップＳ１８２２で"ＹＥＳ"が選択されてステップＳ１８２７に移行する。
【００９６】
ステップＳ１８２７でＣＰＵ２４は、減算量の演算を行うが、Ｙドットでの減算処理のときと同様に、選択画素の階調値の合計が加算総量と等しくなるように減算量を演算する。図１６（ｃ）の例では、加算総量は"３７０"ですでにドットを生成する画素位置（１，１）の階調値を"０"にしたので、残りは、３０３（＝３７０−６７）となる。よって、加算総量と等しくなるには最後に選択した４つの画素から等量に減算することになる。このとき、（２，１）の画素の階調値は"０"とっているでこれ以上減算することはできず、３つの画素から減算することになる。その結果、３つの画素から"１０１"ずつ減算する。
【００９７】
図７に戻り、次いでＣＰＵ２４は減算後に残った階調値を最後に選択した画素に戻す処理を行う（ステップＳ１８２８）。図１６の例では、３つの画素（（１，０）、（０，１）、（１，２）の画素）から"１０１"ずつ減算したので残った階調値はすべて"１０"となる。これを３つの画素それぞれの階調値として、その画素に戻すことになる（図１６（ｃ）のシアン入力データ領域２６１ａ参照）。
【００９８】
これにより、ブラックドット生成の過程でシアンの入力データに加算した階調値と等量の値を減算したことになる。減算すべき画素をブラックドットが生成する位置から減算したことにより、ブラックのドットとシアンのドットが重なる確率が低くなり、粒状性を改善した画像出力を得ることができる。しかも、ブラックとシアンの明度に応じた値を加算、減算したことにより、明度の小さい（視覚的に知覚されやすい）ブラックのドット周辺にシアンのドットが打たれないことで明度が一定に保たれた快適な画像出力を得ることができるのである。
【００９９】
選択画素に戻す処理（ステップＳ１８２８）が終了すると処理は、ステップＳ１８２５に移行する。一方、ステップＳ１８２４において減算対象の画素の階調値の合計が加算された総量に等しいとき（ＹＥＳのとき）は、加算した量すべで減算したことになるので、このときも処理はステップＳ１８２５に移行する。
【０１００】
ステップＳ１８２５でＣＰＵ２４は、Ｚに１を加算して２色目の色成分に対する減算処理を行うことになる。次いでＣＰＵ２４は、Ｚ＝３か否か判断する（ステップＳ１８２６）。２色目の処理が終了してステップＳ１８２５に移行すると、Ｚに１が加算され本ステップで"ＹＥＳ"が選択され２色すべて減算処理が終了することになるのである。図１６（ｃ）の例では、Ｚ＝２のため本ステップで"ＮＯ"が選択されて、２色目の減算処理を行うべくステップＳ１８２１に再び移行することになる。
【０１０１】
以下の処理は、１色目の処理と全く同様である。すなわち、加算総量と等しいか超えるまで画素を選択する。選択の方法は、まずブラックのドットが発生する画素位置、次にその位置に隣接する上下左右の画素、次に隣接する斜め方向の画素などと選択する。図１６（ｃ）の例では、２色目としてマゼンダが選択され、減算処理の結果を図１７（ａ）に示す。この場合も、ブラックのドット周辺の階調値を減算するようにしたのでブラックのドット周辺にマゼンダのドットが打たれる確率が低くなる。また、明度に応じた演算を加算し減算したので、単位面積あたりのブラック、マゼンダの明度は一定のものとなる。
【０１０２】
図７に戻り、２色目の減算処理が終了してステップＳ１８２５に移行すると、Ｚに１が加算されＺ＝３となるのでステップＳ１８２６で"ＹＥＳ"が選択され、残り２色の減算処理（ステップＳ１８２）が終了し、さらに疎と判定されたＣＣ法の処理（ステップＳ１７）が終了して、図３のステップＳ１８に移行することになる。
【０１０３】
ステップＳ１８においてＣＰＵ２４は、未処理画素があるか否か判断する。ラスター方向、すなわち入力データ領域２６１ａ〜ｄの最も上の最も左から順に、Ｃ、Ｍ、Ｋの未処理画素を探索する。入力データ領域２６１ａ、２６１ｂ、２６１ｄには、ＣＣ法による処理が終了した画素位置に"−１"が格納されるので、ＣＰＵ２４がラスター方向に検索して"−１"が格納されたか否かで判断する。図１７（ａ）の例では、ラスター方向に（０，０）の画素位置にシアンとマゼンダの未処理画素が存在するので、本ステップＳ１８で"ＹＥＳ"が選択されてステップＳ１５に再び移行し、未処理画素としてシアン、マゼンダの（０，０）の画素が選択されることになる。
【０１０４】
次いでＣＰＵ２４は、ドット密度が最も疎な色を判定する（ステップＳ１５）。ドット生成を示す値で各色成分の階調値を除算した値から判断する。図１７（ａ）の例では、（０，０）に位置するシアン、マゼンダのうちシアンの方が、値が低いのでシアンを疎な色として選択する。そして、シアンに対してＣＣ法による処理を行う（ステップＳ１７）。ＣＣ法による処理の内容は、ブラックで説明した上述の内容と全く同様である。
【０１０５】
そして、シアンに対してセルを構成してドットを打つ位置を決定すると再びステップＳ１８に移行し、ラスター方向に未処理画素を探索する。（０，０）の位置で、ブラック、シアンは処理済みであるがマゼンダは未処理なので、今度はマゼンダに対してＣＣ法による処理を行う。これを、３つの色成分について未処理画素がなくなるまで（３つの入力データ領域２６１ａ、２６１ｂ、２６１ｄにすべて"−１"が格納されるまで）、処理を繰り返すことになる。
【０１０６】
ステップＳ１８で処理が終了すると、一連の処理が終了し（ステップＳ１９）、Ｃ、Ｍ、Ｋの各出力データ領域２６２ａ、２６２ｂ、２６２ｄにはドット生成の有無を示す値がすべての画素位置で格納されることになる。この例を図１７（ｂ）に示す。この値が量子化データとしてハーフトーン処理部２１２から出力され、パルス幅変調部２１３、印刷エンジン２２を介して印刷出力を得ることができる。
【０１０７】
以上、Ｙ成分に対しては処理の早い分散ディザ法による処理を行い、それ以外の色成分に対してはＣＣ法による処理を行うようにしたため、画質の劣化を最小限に抑え、かつ高速化を図ることができる。また、各処理の過程で他の色成分に加算、減算処理を組み合わせたことにより、各色のドットが重なる確率が下がり、粒状的なドットの発生を抑え、モアレ縞のような干渉パターンの発生を回避することができる。さらに、各色のドットが重ならないため色の再現範囲が広がる（彩度が向上する）という効果を得ることができる。また、加算処理の際に明度に応じた値を加算しその後減算しているため、印刷用紙上単位面積あたりの明度が一定に保たれ、視覚的に快適な印刷出力を得ることができる。
【０１０８】
さらに、先に分散ディザ処理を行い、後でＣＣ法による処理を行っているのは、入力階調値に忠実にドットを生成させるようにするためである。すなわち、先にＣＣ法による処理を行いその過程での加算、減算により、ドットが発生する位置の周辺の階調値が減算されるが、その後分散ディザ処理を行うと、設定されたマトリックス内の閾値によっては減算した位置にドットが発生し、異なる色どうしでドットが重なる確率が高くなってしまう。これは、ＣＣ法による処理は入力階調値そのものを保持してセルを構成させて処理を行うのに対し、分散ディザ法は閾値より大きいか否かで判断しているため誤差分が発生するとともに閾値の設定の仕方によってドットが連続して発生したりするなどドットのバラつきが生じることが原因とされている。一方、先にディザ処理を行いその後ＣＣ法による処理を行えば、ディザ処理を行いその減算後の階調値に忠実にドットが発生する確率が高まり、従ってディザ処理対象の色成分とドットが重なる確率が少なくなるのである。
【０１０９】
上述の例では、明度に応じた演算値を他の色成分に加算し、その後ドットが生成する位置から減算するように処理を行ったが、加算減算処理を行うことなく、ドットの生成する位置をマーキングし他の色成分でドット生成の位置を確定する際にそのマーキングした位置を避けるように処理を行うことでも、全く同様にドットの重なりを防ぐことができる。以下、マーキングによる処理を説明することにする。
【０１１０】
図１８には全体の処理の動作を示すフローチャート、図１９乃至図２０はマーキングを利用した場合のＣＣ法の処理の動作を示すフローチャート、図２１はＲＡＭ２６内の一例を示すものである。加算、減算の場合の動作と重複している部分が多いので簡単にフローチャートを参照しながら説明することにする。
【０１１１】
図１８に示すように、まずＣＰＵ２４はＲＯＭ２５に格納されたプログラムを読み出すことで処理が開始される（ステップＳ３０）。次いでＣＰＵ２４は、Ｙ成分に対する分散ディザ処理を行う（ステップＳ３１）。図３のステップＳ１１と同様に閾値マトリックスを利用して、閾値と階調値とを比較して処理を行う。処理が終了したときの例を図２１（ａ）のイエロー出力データ量領域２６２ｃに示す。Ｙ成分すべての画素に対して処理を行うと、次いでＣＰＵ２４は、Ｙのドットが生成されたか否か判断する（ステップＳ３２）。イエロー出力データ領域２６２ｃに"２５５"が格納された画素があるか否かで判断する。ドットが生成されている場合は（本ステップで"ＹＥＳ"の場合）、Ｙドットの位置をマーキングする処理を行う（ステップＳ３３）。ＲＡＭ２６内には各色ごとマーク記録用バッファ２６５ａ〜２６５ｄを有し、ＣＰＵ２４の制御により各色のドットの画素位置がバッファ２６５ａ〜２６４ｄに格納される。図２１（ａ）の例では、Ｙ成分の（２，２）の画素位置でＹドットが生成されるので、Ｙ成分マーク記録用バッファ２６５ｃには当該座標位置が格納される。バッファ２６５への記録は、例えばＹ成分に対する分散ディザ処理（ステップＳ３１）の際にドットが生成すればその位置を記録するようにしてもよいし、本ステップでイエロー出力データ格納領域２６２ｃを順次探索して"２５５"が格納された位置をバッファ２６５に記録するようにしてもよい。
【０１１２】
図１８に戻り、次いでＣＰＵ２４はＷに"１"を設定する（ステップＳ３４）。ＷはＹ成分以外の残りの色成分の数を示すものであり、初期値として"１"を設定することで１色目の色成分に対してＣＣ法による処理を行う。次いでＣＰＵ２４は、この１色目に対して実際にＣＣ法による処理を行う（ステップＳ３５）。ただし、加算減算の場合と異なり、ドット密度が疎なる色成分から先に処理を行うことはせずに、各色ごとに独立にＣＣ法による処理が行われる。
【０１１３】
ＣＣ法による処理のフローチャートを図１９乃至図２０に示す。この場合も、加算減算の場合と同様に、セルを構成する未処理画素の階調値の合計が閾値と等しい（ステップＳ３４６で"ＹＥＳ"）か、超える（ステップＳ３４３で"ＹＥＳ"）まで、画素を選択していく。画素の選択は重心を用い、複数の未処理画素があればランダムに選択する。階調値の合計が閾値を超えると、上述した（式３）を用いて重心を演算し（ステップＳ３４８）、閾値を超えた余りの階調値を選択画素に戻し（ステップＳ３４９）、図２０のステップＳ３４７に移行する。この処理の過程で、加算減算処理は行わないので、図５のステップＳ１７６、Ｓ１８０に相当する処理はない。
【０１１４】
図２０のステップＳ３４７でＣＰＵ２４は、重心位置と、マーキングしたドット位置とが重なっているか否か判断する。Ｙドットと他の色成分が重なってドットが打たれる確率を下げるためである。マーキングしたドット位置はマーク記録用バッファ２６５ａ〜２６５ｄに格納されているため、ＣＰＵ２４はこのバッファ２６５ａ〜２６５ｄから値を読出し、１色目のＣＣ法処理で演算した重心位置と同じか否かで判断する。図２１（ａ）に示す例では、１色目としてマゼンダが選択され、ＣＣ法による処理の結果、ＹドットとＭドットとが同じ位置（（２，２）の画素位置）に発生している。この場合、ステップＳ３４７で"ＹＥＳ"が選択されて、ステップＳ３５０に移行することになる。
【０１１５】
ステップＳ３５０でＣＰＵ２４は、重心に最も近い未マーキング画素を選択する。この場合、例えば重心位置の上下左右の未マーキング画素のいずれか１つを選択すればよい。もちろん、これ以外にも重心位置を囲む８つの画素のいずれか１つを選択するようにしてもよい。図２１（ａ）の例では、マゼンダのドットが発生する重心位置（２，２）の上下左右の画素のうち（２，１）の画素を選択するものとする。
【０１１６】
次いでＣＰＵ２４は、選択した未マーキング画素位置にドット生成を示す値を格納する（ステップＳ３５１）。図２１（ａ）に示す例では、マゼンダの出力データ領域２６２ｂの（２，１）の画素位置にドット生成を示す"２５５"が格納される（図２１（ｂ）のマゼンダ出力データ領域２６２ｂ参照）。
【０１１７】
次にＣＰＵ２４は、生成したドット位置をマーキングする処理を行う（ステップＳ３５２）。ＣＰＵ２４は、選択した未マーキング画素の画素位置を、マーク記録バッファ２６２ａ、２６２ｂ、２６２ｄに格納する。図２１（ｂ）の例では、ＣＰＵ２４はマゼンダ用マーク記録バッファ２６５ｂに選択した画素位置（２，１）の座標を記録することになる（同図のマーク記録用バッファ２６５ｂ参照）。
【０１１８】
そして、１色目の各画素に対して未処理画素がなくなるまで処理を繰り返すことになる。すなわち、１色目の入力データ領域に"−１"が格納されていない画素があるとステップＳ３５３で"ＹＥＳ"が選択され、再びステップＳ３４１に移行し処理が繰り返される。１色目の未処理画素がなくなると、ステップＳ３５３で"ＮＯ"が選択され、図１８のステップＳ３６に移行することになる。
【０１１９】
ステップＳ３６に移行するとＣＰＵ２４は、Ｗに１を加算し、２色目の色成分に対して同様にＣＣ法による処理を行うことになる。このとき、イエロー成分と１色目（Ｗ＝１）の色成分に関してバッファ２６５にドット生成位置が記録されている。そして、２色目（Ｗ＝２のとき）のＣＣ法処理の際にステップＳ３４７で、２色目の重心位置と、バッファ２６５に記録されたドット生成位置（Ｙ成分と１色目の色成分のドット生成位置）とが重なると、"ＹＥＳ"が選択され、２色目の色成分の重心に最も近い未マーキング画素を選択することになる（ステップＳ３５０）。これにより、イエローを含めた３色のドットが重ならないことになる。また、ステップＳ３５２で２色目で生成したドット位置をマーク記録用バッファ２６５に記録し、３色目（Ｗ＝３）のＣＣ法処理で同様に他の３色と重ならないようにドット位置が選択される。したがって、４色ともドットが重ならずに視覚的に快適な印刷出力を得ることができるのである。
【０１２０】
なお、図２１（ｃ）に示すように、１色目（Ｗ＝１）としてマゼンダが選択されＣＣ法の処理を行った結果、Ｍドットのまわりの８近傍の画素すべてにＹドットが発生し、未マーキング画素が見つからない場合もある。このような場合は、重なりを許容して、ＣＣ法で確定したドット位置にＭドットを打つように処理を行うことになる。
【０１２１】
これをＹ成分以のすべての色成分に対して処理が終了する（ＣＭＫの３色の処理が終了すると、ステップＳ３６でＷに１が加算され、Ｗ＝４となる）とステップＳ３７で"ＹＥＳ"が選択され、処理が終了することになる（ステップＳ３８）。この段階で各出力データ領域２６２ａ〜ｄにドット生成の有無を示す量子化データが得られ、図１のパルス幅変調部２１３に出力され、印刷エンジン２２において印刷出力を得ることができる。
【０１２２】
このマーキングによる場合も、マーキングによってドットが発生する位置を避けるように他の色成分のドット生成位置を変えるようにしたので、異なる色成分でドットが重ならずに、干渉パターンや粒状的なドットの生成を抑え、色再現範囲が広がる（彩度が向上する）。また上述したものと同様に視覚的に最も目立ちにくい色成分に分散ディザによる処理、それ以外の色成分にＣＣ法による処理を行うようにハーフトーン処理を行ったので、画質の劣化を最小限に抑え、ハーフトーン処理の高速化を図ることができる。
【０１２３】
なお、このマーキングの例の場合で、バッファ２６５ａ〜ｄを用いて未マーキング画素を選択するようにしたが、このようなバッファ２６５ａ〜ｄを使用せず、例えば、ＣＰＵ２４が出力データ領域２６２ａ〜ｄを探索して"２５５"が格納された位置との比較で処理を進めるようにすることもできる。この場合、バッファ２６５ａ〜ｄを用いる必要がないためＲＡＭ２６の規模を小さくし、コストの削減を図ることができる。
【０１２４】
なお、上述の例では、加算減算、マーキング双方とも図８（ｂ）に示す閾値マトリックスを使用して処理を行ったが、これに拘泥せず、例えば図２２に示す閾値マトリックスを使用しても同様の効果を得ることができる。図２２のマトリックスは、図８（ｂ）と同様に各位置に閾値が格納され、各位置の各画素の入力階調値とを比較して処理を進める点では図８（ｂ）に示すマトリックスを利用する場合と同様である。しかし、マトリックスの中心に行くに従って、閾値が低い値となりドットが生成される確率が高いものとなっている。いわゆるドット集中型のマトリックスである。このため、Ｙ成分に対して処理を行うとマトリックスの中心付近でドット生成を示す"２５５"が発生する確率が高く、その後他の色成分に対して減算処理を行うと、この中心付近でより多くの減算を行うことになる。従って、中心からより遠くの位置に減算対象が広がる確率が高くなる。よって、イエローとそれ以外の色成分とが重なる確率が低くなる。かかる点がドット集中型のマトリックスと図８（ｂ）の分散型のマトリックスを利用した場合の相違点である。
【実施例２】
【０１２５】
［多値ディザ法とＣＣ法とを用いたハーフトーン処理］
次に多値ディザ法とＣＣ法とを組み合わせたハーフトーン処理について説明する。この場合も、ＣＭＹＫの色成分のうち最も視覚的に目立ちにくい（明度の高い）Ｙ成分に対して多値ディザによる処理を行い、それ以外の色成分に対してＣＣ法による処理を行う。
【０１２６】
具体的な処理の詳細を説明する前に、まず多値ディザ法の概要について図２４、図２５を参照して説明する。多値ディザ法は、一般的にはＣＭＹＫ各色成分ごとの階調データに対し、その階調データと出力値である量子化データとの対応関係を有するハーフトーンテーブル（ガンマテーブルともいう）を参照して、出力値を得る処理である。この出力値は、各色成分ごと画素内において０から２５５までの値を有し、トナーのビーム付着領域であるドット領域を表現する。分散ディザ法では、０か２５５によってドットの有無を表現したが、多値ディザ法では０から２５５までの値によりドットの有無のみならずドットの大きさを表現する。したがって、多値ディザ法は分散ディザ法に比べてより多くの階調表現（明るさの表現）が可能となる。一般に多値ディザ法は、レーザプリンタで多く使用されている。
【０１２７】
図２４に示すように、各画素位置において所定の階調値Ｐ00、Ｐ01・・・を有する入力データが入力された場合に、各画素位置に対応するパターンマトリックス（図２４（ｂ）参照）を参照する。マトリックス内の各位置には参照すべきテーブル番号が格納されている。そして、各テーブル番号ごとに入力階調値と出力値との対応関係を示すガンマテーブル（図２４（ｃ）参照）から、参照すべきテーブル番号を検索し、そのテーブルから入力階調値に対応する出力値を得るのである。
【０１２８】
例えば（０，０）の位置に格納された階調値Ｐ00に対して、パターンマトリックスの（０，０）の位置に格納された"７"を参照する。この番号は、ガンマテーブルの参照すべきテーブル番号であってガンマテーブルのテーブル番号"７"に対応する。この番号"７"のテーブルを参照して、入力値Ｐ00に対応する出力値を得るのである。
【０１２９】
ガンマテーブルに格納された各テーブルの例を図２５（ａ）に示す。この図に示すようにテーブル１とテーブル２は低い入力階調値において最大出力値"２５５"に達し、逆にテーブル７とテーブル８は低い入力階調値では出力値"０"で、高い入力値に対して最大値"２５５"に達するように変化する。ここで、テーブル１とテーブル２、テーブル３とテーブル４、テーブル５とテーブル６、テーブル７とテーブル８、それぞれ入力値に対して同じ出力値を有するテーブルであるが、例えば奇数番号のテーブル（テーブル１、テーブル３、テーブル５など）はドットが左から成長するような出力値を取り、偶数番号のテーブル（テーブル２、テーブル４など）はドットが右から成長する出力値を取る（図２５（ｂ）、（ｃ）参照）。このため、ハーフトーン処理部２１２からパルス幅変調部２１３へ出力される出力データには、さらに１ビット付加され、ドットが右から成長するのかかそうでないか（左から成長）を示す（あるいは、その逆）ことになる。
【０１３０】
このハーフトーンテーブルによる多値ディザ法とＣＣ法とを組み合わせた処理の詳細について図２３のフローチャートを参照して説明する。なお、図２６乃至図３２はＲＡＭ２６内の一例で適宜この図面を参照しながら説明する。
【０１３１】
まず、ＣＰＵ２４はＲＯＭ２５から本処理を実行するためのプログラムを読み出すことによって処理が開始される（ステップＳ４０）。次いでＣＰＵ２４は、多値ディザ法によるハーフトーン処理を行う（ステップＳ４１）。図２６乃至図２８を参照して具体的に説明する。図２６（ａ）に示すように、分散ディザ処理で説明したものと同様にＲＡＭ２６内に各色成分ごとに入力データ領域２６１ａ〜２６１ｄを有し、各領域に図に示す階調値
が入力される。なお、以下で入力データ領域２６１ａ〜２６１ｄの他に出力データ格納領域２６２ａ〜２６２ｄ、合計値格納領域２６３、ワーキングメモリ２７０を用いて説明するが、これらはすべて実施例１（分散ディザ処理とＣＣ法との組合せ）による処理で説明したものと全く同様の構成を有している。
【０１３２】
図２６（ａ）に示すように各領域２６１ａ〜２６１ｄの画素位置に格納される値は分散ディザ法による処理と同じ値である。また、パターンマトリックス２５２の例を図２６（ｂ）に示す。各位置には、ガンマテーブルで参照すべきテーブル番号が格納される。なお、このマトリックス２５２はＲＯＭ２５に格納され、ＣＰＵ２４が処理の際に適宜読み出すことによって処理が進められるものとする。
【０１３３】
まずＣＰＵ２４は、イエロー入力データ格納領域２６１ｃの画素位置（０，０）から、パターンマトリックス２５２の（０，０）に格納されたテーブル番号を参照する。マトリックス内のこの位置のテーブル番号は"７"なので、ＣＰＵ２４は、ガンマテーブルからこの番号に対応するテーブルを参照する。例えば、このテーブルが図２４（ｃ）や図２５（ａ）に示すものと同じとすると、イエローの（０，０）に格納された入力階調値が"４５"のとき、テーブル７を参照すると出力値は"０"となる。よってＣＰＵ２４は、イエロー出力データ格納領域２６２ｃの（０，０）の画素位置に"０"を格納する（図２６（ｃ）参照）。なお、パターンマトリックス及びガンマテーブルもＲＯＭ２５に格納され、ＣＰＵ２４は適宜ＲＯＭ２５から読み出すことによって処理が進められるものとする。
【０１３４】
次いでＣＰＵ２４は、イエロー入力データ領域の（１，０）に対応するマトリックス２５２の（１，０）の位置を参照する。マトリックス内の番号は"５"、よってＣＰＵ２４は、ガンマテーブルからテーブル番号５のテーブルを参照する。この画素位置での入力階調値は"４５"、５番目のテーブルでこの入力値に対して出力値は"０"（以下、テーブルは図２４（ｃ）、図２５（ａ）に示すものを使用する）、従ってＣＰＵ２４は、イエロー出力データ領域２６２ｃの（１，０）の位置に"０"を格納する（図２７（ａ）参照）。
【０１３５】
さらにＣＰＵ２４は、入力データ領域２６１ｃの（２，０）に対応するテーブル番号はマトリックス２５２から"３"を得る。この番号"３"のテーブルにおいて、入力階調値"４５"のとき出力値は"０"である。よって、ＣＰＵ２４は、出力データ領域２６２ｃの（２，０）の位置に"０"を格納することになる（図２７（ｂ）参照）。
【０１３６】
以下同様の処理を繰り返すことになるが、パターンマトリックス２５２は４行４列構成であるとき、イエロー入力データ領域２６１ｃの（４，０）の画素位置に対して参照すべきマトリックス２５２は（０，０）の位置である。その後、入力データ（５，０）とマトリックス２５２の（１，０）とを比較して処理を進めることになる（図２７（ｃ）参照）。
【０１３７】
そして、イエロー入力データ領域２６１ｃの（２，１）の画素位置で、対応するテーブル番号はマトリックス２５２から"１"、この番号のガンマテーブルから入力階調値"４５"のとき出力値は"１８２"となる。よって、出力データ領域２６２ｃの（２，１）において、ＣＰＵ２４は"１８２"を格納することになる（図２８（ａ）参照）。なお、この値はテーブル番号が奇数であるため、左から１８２／２５５分の大きさのドットが生成されることになる。以下処理を進めると図２８（ｂ）のイエロー出力データ領域２６２ｃに示すＹ成分の量子化データを得る。
【０１３８】
図２３に戻り、次いでＣＰＵ２４はＹドットが生成されたか否か判断する（ステップＳ４２）。Ｙドットが生成されるか否かは、分散ディザ処理の場合と同様に、例えばＣＰＵ
２４がＲＡＭ２６内のイエロー出力データ格納領域２６２ｃを探索して、ドット生成を示す、１以上の値（"０"でない値）"２５５"が格納されているか否かで判断することができる。図２８（ｂ）の例では、９つの画素位置でドット生成を示す値が格納されているので、本ステップでは"ＹＥＳ"が選択される。
【０１３９】
次いでＣＰＵ２４は、明度に応じた演算値を他の色成分であるＣ、Ｍ、Ｋの各階調値に加算する処理を行う（ステップＳ４３）。加算すべき演算値は、分散ディザ処理と同様に（式１）を用いて、各画素位置ごとに行う。加算値は、シアン、マゼンダに対して"１６"、ブラックに対して"１１"となる。その加算後のＣ、Ｍ、Ｋの各入力データを図２８（ｃ）に示す。明度に応じて演算値を加算しその後減算することで単位面積あたりの明度を均一に保つためである。
【０１４０】
図２３に戻り、次いでＣＰＵ２４は、Ｙドット周囲の減算処理を行う（ステップＳ４４）。減算処理は、Ｙドットが生成する位置から階調値の減算を行う。Ｙドットとそれ以外の色成分のドットとが重ならないようにするためである。具体的には、実施例１と同様に図４に示すフローチャートに従って処理が行われる。
【０１４１】
すなわち、Ｙドット周囲の減算処理に移行すると、ＣＰＵ２４はまず、Ｙドットに対する未処理画素があるか否か判断する（ステップＳ１４１）。例えば、ドットが発生する位置をＲＡＭ２６の所定の領域に格納し、処理が終了するごとにフラグを立てすべてのドットに対して処理が終了したか否か、あるいは、出力データ格納領域２６２ｃを（０，０）から順番に探索し、すべての位置を探索したか否かで判断する。図２９（ａ）以降に減算処理のＲＡＭ２６の構成例を示すが、まだすべてのドット生成位置で減算処理を行っていないので本ステップで"ＹＥＳ"が選択される。
【０１４２】
次いで、Ｙのドット位置に最も近い１色目（Ｘ＝１）の画素を選択する（ステップＳ１４２）。図２９（ａ）の例ではシアンを選択する。またＹドットに最も近い画素として、Ｙドットが発生する位置である（１，１）の画素を選択するものとする。Ｙドットと他の色成分のドットとが重なる確率を下げて、粒状的なドット分布を防ぐためである。選択の方法は、実施例１と同様にそれ以外のものであってもよい。
【０１４３】
次いで、選択画素の階調値の合計が加算された総量を超えるか否か判断する（ステップＳ１４３）。シアン、マゼンダに対しては各画素"１６"を加算しているので、全体として１６×３６画素＝５７６の演算値が加算され、ブラックに対しては１１×３６画素＝３９６の演算値が加算される。分散ディザの処理の例では、この３６画素中４個のＹドットが生成されていたが、本例では全部で９個存在する。したがって、シアン、マゼンダの加算総量は、１ドットあたり５７６／９＝６４、ブラックは、３９６／９＝４４となる。なお、ＲＡＭ２６内には実施例１と同様に階調値の合計値を格納する合計値領域２６３を有し、ＣＰＵ２４の制御により適宜、ステップＳ１４２で選択した画素の階調値の合計値が格納されることになる。図２９（ａ）の例では、選択したシアンの画素（１，１）の階調値は"５１"、加算総量"６４"を超えないので本ステップで "ＮＯ"が選択され、ステップＳ１４４に移行することになる。
【０１４４】
次いでＣＰＵ２４は、ステップＳ１４２で選択した選択画素に"０"を格納する（ステップＳ１４４）。すなわち、入力データの領域２６１ａ、２６１ｂ、２６１ｄの当該画素位置に"０"を格納することになる。図２９（ａ）の例では、シアン入力データ領域２６１ａの（１，１）の位置に"０"が格納される（図２９（ｂ）参照）。またＣＰＵ２４は、合計値格納領域２６３に階調値に合計値を格納する（図２９（ｂ）の合計値領域２６３参照）。
【０１４５】
次いでＣＰＵ２４は、合計値領域２６３に格納された値が加算総量に等しいか否か判断する（ステップＳ１４５）。等しいとき（本ステップで"ＹＥＳ"のとき）は、加算した分減算したので１色目の処理が終了することになる。等しくないとき（"ＮＯ"のとき）は、さらに減算すべくステップＳ１４２に移行することになる。図２９（ｂ）の例では、加算総量とこれまで減算した階調値とは等しくないので、本ステップで"ＮＯ"が選択され再びステップＳ１４２に移行する。
【０１４６】
次にＣＰＵ２４は、再びＹドットに最も近い１色目の画素を選択することになるが、実施例１と同様に、最初にＹドットが生成する画素位置そのものを選択した後は、その画素位置に隣接する上下左右の画素を選択する。これ以外の他の選択方法でもよいのは実施例１と同様である。図２９（ｂ）の例では、上下左右の（１，０）、（０，１）、（２，１）、（１，２）の画素を選択するものとする（図２９（ｃ）のシアン入力データ領域２６１ａ参照）。
【０１４７】
次いでＣＰＵ２４は、選択画素の階調値の合計が加算総量を超えるか否か判断する（ステップＳ１４３）。図２９（ｃ）の例では、階調値の合計は５１＋５１×４＝２５５で加算総量"６４"を超えるので、本ステップで"ＹＥＳ"が選択され、ステップＳ１４８に移行する。
【０１４８】
ステップＳ１４８においてＣＰＵ２４は、減算量の演算を行う。この場合も、実施例１と同様に、直前に選択した画素の階調値の合計が加算総量と等しくなるように減算する。すなわち図２９（ｃ）の例では、すでにＹドットが生成する画素位置の階調値"５１"を減算したので、加算総量"６４"と等しくなるには、"１３"を直前に選択した４つの画素から均等に減算すればよいことになる。よって、４つの画素からそれぞれ、３、３、３、４の階調値を減算すればよいことになる。
【０１４９】
次いでＣＰＵ２４は、減算後に残った階調値を選択画素に戻す処理を行う（ステップＳ１４９）。減算後の例を図２９（ｃ）のシアン入力データ領域２６１ａに示す。イエローの１ドット分加算した値をシアンから減算したことになるのでシアンに対する減算処理が終了することになる。これにより、イエローのドット周辺からシアンのドットが打たれる確率が低くなり、イエローとシアンとでモアレ縞のような干渉パターンの発生を回避するとともに粒状的なドットの発生を抑えることができる。さらに、イエローとシアンの明度に応じた演算値を加算しその後減算したことにより、イエローとシアンの単位面積あたりの明度が均一に保たれたドットを生成することができる。
【０１５０】
図４に戻り、次いでＣＰＵ２４は、Ｙドットが発生する位置（１，１）での２色目の色成分に対する減算処理を行うべくＸに１を加算する（ステップＳ１４６）。この段階で他の３色の処理すべて終了していないことになるので、次のステップＳ１４７で"ＮＯ"が選択され再びステップＳ１４２に移行し、２色目の減算処理を行うことになる。
【０１５１】
２色目の色成分に対する処理は、１色目の処理と全く同様である。最初にＹドットが発生する位置の画素を選択し（ステップＳ１４２）、選択画素の階調値の合計が加算総量を超える（ステップＳ１４３で"ＹＥＳ"）か、等しくなる（ステップＳ１４５で"ＹＥＳ"）まで画素を選択し続ける。画素の選択は、Ｙドットが生成する画素位置に隣接する上下左右の画素、次いで隣接する斜め方向の画素、次いで１画素おいた上下左右と、Ｙドットの発生する位置のまわりの画素と順次選択する。それ以外の方法でもよいことは上述の場合と同様である。２色目としてマゼンダ、３色目としてブラックが選択された場合の減算後の例をそれぞれ図３０（ａ）、図３０（ｂ）に示す。
【０１５２】
図４に戻り、３色目まで減算処理が終了するとステップＳ１４６でＸに１が加算されＸ
＝４となり、ステップＳ１４７で"ＹＥＳ"が選択され、ステップＳ１４１に移行することになる。そして、他にＹドットがあればこのステップＳ１４１で"ＹＥＳ"が選択され、上述の減算処理を他の色成分すべてに対して行うことになる。Ｙドットすべてに対して減算処理が終了するとステップＳ１４１で"ＮＯ"が選択されＹドット周囲の減算処理自体は終了し、図２３のステップＳ４５に移行する。すべてのＹドットの減算処理が終了した例を図３０（ｃ）に示す。この図に示すように、シアン、マゼンダ、ブラックともにＹドットが生成する画素位置周辺の階調値が減算されている。これにより、イエローとそれ以外の色成分のドットが重なる確率が低くなる。また、各色成分の明度に応じた演算値を加算後、減算したのでイエローとそれ以外の色成分の明度は単位面積あたり均一に保たれ、快適な印刷出力を得る。すなわち、イエローとの明度差が大きいブラックの加算値は、イエローとの明度差が少ないシアン、マゼンダの加算値と比較して、より低い値となっている。従って、ブラックの階調値の減算値は、シアンやマゼンダと比較して少ない値となっているので、ＹドットとＫドットとはＹドットとＣ、Ｍドットよりも、より近づいてドットが打たれる可能性が高くなる。すなわち、明度の低いＹ成分と明度の高いＫ成分とが近づいてドットが打たれることで、印刷用紙上の単位面積あたりの明度が均一になるのである。
【０１５３】
図２３に戻り、次いでＣＰＵ２４は、ステップＳ４５に移行して未処理画素の探索を行う。この処理以降は、Ｙ成分以外の他の色成分に対してＣＣ法による処理を行うことになる。実施例１と同様である。未処理画素の探索は、ラスター方向（ホストコンピュータ１０で生成した画像上、最も上の最も左）に行う。図３０（ｃ）の例では、Ｃ、Ｍ、Ｋともに（０，０）に位置する画素は未処理画素なので、ＣＰＵ２４はこれを選択することになる。未処理画素か否かは、各入力データ領域２６１ａ、２６１ｂ、２６１ｄの各画素位置に"−１"が格納されたか否かで判断する。
【０１５４】
次いでＣＰＵ２４は、ドット密度が最も疎となる色を判定する（ステップＳ４６）。疎となる色成分から順次ＣＣ法による処理を行うことで、入力階調値に忠実なドットを打つためである。実施例１と同様に、ドット生成を示す値（本実施例においても"２５５"）で各色成分の階調値を除算し、その値を各色成分ごとに比較することにより行う。図３０（ｃ）の場合、シアン、マゼンダ、ブラックのドット密度はそれぞれ、５１／２５５、５６／２５５、４１／２５５で、ブラックが最も疎となる色と判断される。
【０１５５】
次いでＣＰＵ２４は、疎と判定された色のＣＣ法による処理を行う（ステップＳ４７）。ＣＣ法による処理は実施例１と全く同様である。図５にフローチャートを示す。すなわち、まずＣＰＵ２４は、初期画素（ステップＳ４５で選択した未処理画素）を決定し、重心を演算する（ステップＳ１７１）。重心の演算は上述した（式２）を用いる。図３１（ａ）に示すように、演算した結果（この場合ｘ重心＝０、ｙ重心＝０）は、ＲＡＭ２６内のワーキングメモリ２７０に格納される。また、ＣＰＵ２４は、選択した画素位置に対応する出力データ領域２６２ａ〜２６２ｄに"０"を格納する。図３１（ａ）の例では、ブラック出力データ領域２６２ｄの（０，０）の位置に"０"が格納される。さらにＣＰＵ２４は、選択した画素位置に以後未処理画素として選択されないよう"−１"を格納する。図３１（ａ）の例では、ブラック入力データ領域２６１ｄの（０，０）の位置に"−１"が格納される。またＣＰＵ２４は、明度に応じた演算値を残りの２色成分に対して加算する。演算は、実施例１と同様に（式１）を用いる。図３１（ａ）に示すように、ブラックからシアン、マゼンダに対してともに"６０"（＝４１×（１００−２０）／（１００−４５））を加算することになる。単純にブラックの階調値を加算するのではなく、ブラックとシアン、マゼンダの明度に応じた演算値を加算しているので、その後の減算処理により、ブラックとシアン、マゼンダの単位面積あたりの明度は均一に保たれることになる。
【０１５６】
図５に戻り、次いでＣＰＵ２４は、未処理画素の選択を行う（ステップＳ１７２）。選択は、ワーキングメモリ２７０に格納された重心位置に最も近い未処理画素を選択する。セルが円状に成長して、ブラックのドット間距離を一定にするためである。ここで、選択すべき未処理画素が複数あればランダムに選択する。選択画素を予め決めてセルを構成させると、ドットが印刷用紙上一定に並ぶことにより周期パターンを発生させることになる。これを防ぐためである。図３１（ａ）の例では、例えば（０，１）のブラックの画素を選択することになる（もちろん、（１，０）でもよい）。
【０１５７】
次いでＣＰＵ２４は、階調値の合計が閾値を超えるか否か判断する（ステップＳ１７３）。閾値として実施例１と同様に"２５５"を用いる。閾値を超えると（"ＹＥＳ"の場合）ステップＳ１７９以降の処理を行い、超えないと（"ＮＯ"の場合）未処理画素を含めた重心の演算、階調値の合計を演算し（ステップＳ１７４、Ｓ１７５）、ＣＰＵ２４はその値をメモリ領域２７０に格納する。また、明度に応じた演算値を残り２色の対応する画素の階調値に加算する（ステップＳ１７６）。加算すべき演算値は実施例１の（式１）を用いて演算する。
【０１５８】
また、ステップＳ１７９以降も、実施例１と同様に、最後に選択した画素の階調値が、階調値の合計値が閾値と等しくなるような値を持つものとして、まず（式３）を用いて重心の演算を行い（ステップＳ１７９）、加算処理を行い（ステップＳ１８０）、残った階調値を最後に選択した未処理画素に戻す（ステップＳ１８１）。この場合の加算処理でも加算すべき演算値は実施例１の（式１）を用いる。
【０１５９】
セルを構成する画素の階調値の合計が、閾値と等しい（ステップＳ１７７で"ＹＥＳ"）か、閾値を超える（ステップＳ１７３で"ＹＥＳ"）まで、セルを構成する未処理画素の選択を行うことになる。そして、重心位置にドットを生成させるべく、ＣＰＵ２４は出力データ領域２６２ａ〜２６２ｄの重心位置に存在する画素位置に"２５５"を格納する（図６のステップＳ１７８）。図３１（ｂ）のブラック出力データ領域２６２ｄにこの例を示す。（１，１）の画素位置にＫドットが打たれることになる。
【０１６０】
図６に戻り、次いでＣＰＵ２４は残り２色の色成分に対する減算処理を行う（ステップＳ１８２）。減算処理は実施例１と同様に図７のフローチャートに従う。すなわち、本処理（ステップＳ１８２）に移行すると、まずＣＰＵ２４は、生成したドットに最も近い１色目（Ｚ＝１）の画素を選択する（ステップＳ１８２１）。この場合に選択すべき画素は、ドットが発生する画素位置そのものである。図３１（ｃ）の例では、１色目としてシアンが選択され、ブラックのドットが発生する（１，１）の画素位置が選択されることになる。選択方法は、実施例１と同様にそれ以外であってもよい。
【０１６１】
次いでＣＰＵ２４は、選択画素の階調値の合計が加算総量を超えるか否か判断する（ステップＳ１８２２）。図３１（ｃ）の例で加算総量は、ブラックの明度"２０"、シアンの明度"４５"で、ブラックのセルの階調値の合計が"２５５"であるから、２５５×（１００−２０）／（１００−４５）＝３７０となる。マゼンダも加算総量は"３７０"となる。例えば、本ステップでＣＰＵ２４が加算総量の演算を行いその結果をＲＡＭ２６の図示しないメモリ領域に格納し、本ステップでの処理の際にその都度、ＣＰＵ２４が読み出すことによって階調値の合計値が加算総量を超えるか否か判断する。図３１（ｃ）の例では、これまで選択した画素は（１，１）の画素のみで、階調値の合計は"０"である。よって加算総量"３７０"を超えずに本ステップＳ１８２２で"ＮＯ"が選択される。
【０１６２】
次いでＣＰＵ２４は、ステップＳ１８２１で選択した画素に"０"を格納する（ステップＳ１８２３）。図３１（ｃ）の例では、シアン入力データ領域２６１ａの（１，１）に"０"が格納されることになる。なお、実施例１と同様にＣＰＵ２４は選択した画素の階
調値の合計を演算し、その値をワーキングメモリ２７０に格納するものとする。この例では、階調値"０"がメモリ２７０に格納される。
【０１６３】
次いでＣＰＵ２４は、加算された総量と階調値の合計が等しいか否か判定する（ステップＳ１８２４）。ワーキングメモリ２７０に格納された合計値をＣＰＵ２４が読み出して加算総量と比較することで判断する。図３１（ｃ）の例では、等しくないので本ステップで"ＮＯ"が選択され、再びステップＳ１８２１に移行する。
【０１６４】
再びステップＳ１８２１に移行した場合に、ＣＰＵ２４は、生成したドットに最も近い位置としてドットが生成する画素位置に隣接する上下左右の４つの画素を選択する。図３１（ｃ）の例では、（１，０）、（０，１）、（２，１）、（１，２）の４つの画素が選択される（シアン入力データ領域２６１ａ参照）。この場合でも、階調値の合計が全部で"１９９"となり、加算総量"３７０"を超えないのでステップＳ１８２４で"ＮＯ"が選択され再びステップＳ１８２２に移行する。
【０１６５】
ＣＰＵ２４は、今度はドットが生成する画素位置に隣接する斜め方向の４つの画素を選択する（ステップＳ１８２２）。この場合にこれまで選択した画素の階調値の合計は全部で、"５１１"となり加算総量"３７０"を超える。よって、ステップＳ１８２２で"ＹＥＳ"が選択されて、ステップＳ１８２７に移行する。
【０１６６】
ステップＳ１８２７でＣＰＵ２４は、減算量の演算を行う。実施例１と同様に、加算総量に等しくなるように演算を行う。図３１（ｃ）の例では、ドットの生成する画素、及びその上下左右の画素の階調値の合計は"１９９"で加算総量"３７０"と等しくなるには、"１７１"分減算させればよい。最後に選択した画素は４つであるがそのうち（２，２）の画素の階調値は"０"でありこれ以上減算できない。よって、３つの選択画素から均等に減算されるよう、"５７"づつ減算することになる。
【０１６７】
次いでＣＰＵ２４は、減算後に残った階調値を最後に選択した画素に戻す処理を行う（ステップＳ１８２８）。図３１（ｃ）の例では、各画素の階調値から"５７"を減算した値が３つの画素の階調値として各画素に戻すことになる（同図のシアン入力データ領域２６１ａ参照）。
【０１６８】
次いで、２色目（Ｚ＝２）の色成分に対する減算処理を行うべく、Ｚに１を加算する（ステップＳ１８２５）。一方、ステップＳ１８２４で加算総量と選択画素の階調値の合計とが等しければ（"ＹＥＳ"の場合）、ステップＳ１７６やステップＳ１８０で加算した量減算したことになるので、２色目の処理を行うべくステップＳ１８２５に移行することになる。
【０１６９】
以上の処理を繰り返すことで、最後に残った２色目の色成分に対する減算が行われ、再びステップＳ１８２５でＺに１が加算され、ステップＳ１８２６で"ＹＥＳ"が選択され、残り２色の減算処理が終了するとともに、疎と判定された色のＣＣ法の処理（図５、図６参照）が終了して、図２３のステップＳ４８に移行する。この段階での例を図３１（ｃ）のＣ、Ｍ各入力データ領域２６１ａ、２６１ｂに示す。
【０１７０】
図２３のステップＳ４８においてＣＰＵ２４は、未処理画素があるか否か判定する。実施例１と同様に、残り３色の色成分の入力データ領域２６１ａ、２６１ｂ、２６１ｄすべてに"−１"が格納されていれば、未処理画素がないとして"ＮＯ"が選択され処理が終了することになる。図３１（ｃ）の例では、領域２６１ａ、２６１ｂ、２６１ｄをラスター方向に探索すると（０，０）の画素位置でシアン、マゼンダに"−１"が格納されていないので未処理画素あり、と判断され本ステップＳ"ＹＥＳ"が選択され、再びステップ
Ｓ４５に移行することになる。未処理画素がなくなるまで処理を繰り返すことになる。未処理画素がなくなったときの、各出力データ領域２６２ａ〜２６２ｄの例を、図３２（ａ）に示す。各出力データ領域２６２ａ、２６２ｂ、２６２ｄにはＣＣ法による処理の結果が示されている。
【０１７１】
ハーフトーンテーブルによる多値ディザ法とＣＣ法による組み合わせでも、実施例１と同様に、目だにくいＹ成分に対しては処理の早い多値ディザ法による処理を行い、それ以外の色成分に対してはＣＣ法による処理を行うようにしたため、画質の劣化を最小限に抑え、かつ高速化を図ることができる。また、各処理の過程で他の色成分に加算、減算処理を組み合わせたことにより、各色のドットが重なる確率が下がり、粒状的なドットの発生を抑え、モアレ縞のような干渉パターンの発生を回避することができる。さらに、各色のドットが重ならないため色の再現範囲が広がる（彩度が向上する）という効果を得ることができる。また、加算処理の際に明度に応じた値を加算しその後減算しているため、印刷用紙上単位面積あたりの明度が一定に保たれ、視覚的に快適な印刷出力を得ることができる。さらに、先に多値ディザ法による処理を行うことによって実施例１で述べた理由と全く同じ理由により、入力階調値に忠実にドットを生成させることができる。
【０１７２】
上述の例では、加算減算処理を行って異なる色成分のドットが重ならないようにしたが、同じようにドットが生成した位置をマーキングしておき、他の色成分でドット位置を確定するときこのマーキングした位置を回避するように行うことでも同様にドットが重ならない。この場合も、実施例１と同様、先にＹ成分に対して多値ディザ法による処理を行い、そのドット位置をＲＡＭ２６のメモリ領域に記憶しておく。そして、残りの色成分のＣＣ法による処理の際にドット位置がメモリ領域に格納した位置と同じとき、領域に格納された位置のまわりの画素にドットを生成させるようにする。さらに、まわりの画素もメモリ領域にドット位置が格納されていれば、ドットの重なりを許容して当初ＣＣ法で決定した重心位置にドットをうつようにする。そのドットの位置もメモリ領域に格納し、次の色成分のＣＣ法による処理において、メモリ領域に格納した２つの色成分のドット位置を回避するようにまわりの画素にドットを生成させるようにする。以下これを繰り返すことで、異なる色成分でドットが重ならず、粒状的なドット生成を抑え、快適な印刷出力を得ることができる。また、ドットが重ならないので色域が広がり、さらに、画質劣化を抑えハーフトーン処理の高速化を図ることもできる。具体的な処理は実施例１と同様に、図１８乃至図２０に示すフローチャートに従って処理が行われる。その詳細は、図１８のステップＳ３１で分散ディザ処理が多値ディザ処理に置き換わるだけで実施例１と同様なので、ここでは省略することにする。
【実施例３】
【０１７３】
［誤差拡散法とＣＣ法とを用いたハーフトーン処理］
次に誤差拡散法とＣＣ法とを組み合わせたハーフトーン処理について説明する。この場合も、ＣＭＹＫの色成分のうち最も視覚的に目立ちにくい（明度の高い）Ｙ成分に対して誤差拡散法による処理を行い、それ以外の色成分に対してＣＣ法による処理を行う。図３３に全体の処理のフローチャートを示す。
【０１７４】
具体的な処理の詳細を説明する前に、誤差拡散法の概要について説明する。この誤差拡散法も、０から２５５までの２５６階調を有する画素に対して２値化（又は４値など）する場合の手法の一つである。例えば、閾値を"１２７"として、ある入力画素の階調値が"５０"のとき、閾値以下なので２値化すると "０"となる。この場合、量子化値"０"に対して"５０"（＝５０−０）の誤差が生じることになる。そこで、この誤差分をまわりの画素に拡散させて２値化を行う方法が、誤差拡散法である。以後これを繰り返し、閾値より大きいとドット生成を示す量子化データ（例えば"２５５"）を生成し、そうでないとドットなしを示す量子化データ（例えば"０"）を生成する。そして、この量子化
データをもとに印刷用紙等に印刷を行うようにするものである。
【０１７５】
この誤差拡散法とＣＣ法との組合せによる処理でも、最初に４つの色成分ＣＭＹＫのうち最も目立ちにくい（最も明度の高い）Ｙ成分に対して誤差拡散処理を行い、その後３つの色成分に対してＣＣ法による処理を行う。ＣＣ法による処理は、入力階調値を保持したまま２値化を行うので、誤差拡散処理と比較してドット間距離が一定に保たれ画質の劣化が少ない。しかし、重心等の演算を行う分処理に時間がかかる。一方、誤差拡散処理は閾値との比較と誤差分をまわりに拡散するだけなのでＣＣ法と比較して処理時間が短い。そこで、最も目立ちにくいＹ成分に誤差拡散処理を行い、それ以外の色成分にＣＣ法による処理を行うことで、画質劣化を最小限に抑え、ハーフトーン処理の時間を短くするようにしたのである。
【０１７６】
図３３には、この処理全体のフローチャートを示し、図３４乃至図３８にはＲＡＭ２６の具体例を示す。以下、フローチャートに沿って詳細を説明するが、上述した分散ディザ処理や多値ディザ処理と重複する部分は簡単に説明することにする。
【０１７７】
まず、ＣＰＵ２４はＲＯＭ２５から誤差拡散とＣＣ法によるハーフトーン処理のためのプログラムを読み出すことで処理が開始されることになる（ステップＳ７０）。次いで、ＣＰＵ２４はＹ成分に対する誤差拡散処理を行う（ステップＳ７１）。また、誤差拡散処理を先に行いその後ＣＣ法による処理を行っているのは、実施例１、２と同様である。すなわち、ＣＣ法による処理では生成されるドットが入力階調値を保持したまま演算するので、入力階調値に忠実なドットが生成される。一方、誤差拡散処理では上述の演算処理によって低い階調値に設定された画素にも誤差が伝播されていくため、閾値の配置によっては低い階調値に設定された画素にもドットが生成され、ドットの生成にばらつきが生じる確率が高くなってしまう。先にＣＣ法で入力階調値に忠実なドットを生成したにも拘わらず、後で誤差拡散処理を行うと入力階調値に忠実なドットを生成することができなくなってしまう。かかる理由から先に誤差拡散処理を行い、その後ＣＣ法による処理を行うのである。
【０１７８】
誤差拡散処理の具体例を図３４乃至図３６（ｂ）に示す。本処理においても、ＲＡＭ２６内には各色成分の入力データが格納される入力データ格納領域２６１ａ〜２６１ｄを備え、また実施例１、２と同様のときと同様の構成を有する。また、各領域２６１ａ〜２６１ｄに格納されるデータは図８（ａ）と同様とする。最初にＹ成分に対して処理を行うので図３４（ａ）の左図にイエロー入力データ領域２６１ｃを示す。また、ＲＡＭ２６には拡散されるべき誤差値が格納される拡散誤差領域２６４を備える。この領域２６４も入力データ領域２６１ａ〜２６１ｄと同様に各座標位置は、全体画像の画素位置に対応するものである。さらにＲＡＭ２６内には、各色成分の量子化データが格納される出力データ領域２６２ａ〜２６２ｄを備える。この領域２６２ａ〜２６２ｄも実施例１等と同様の構成である。
【０１７９】
Ｙ成分に対する誤差拡散処理（ステップＳ７１）においてＣＰＵ２４は、まず、（０，０）の画素位置から順に処理を行う。本実施例において閾値は "１２８"として演算することにする。閾値より低い階調値のとき、ＣＰＵ２４は、ドットを生成しないことを示す"０"、閾値と同じか高いときはドットを生成することを示す"２５５"を出力データ領域２６２ｃに格納する。また、閾値との比較により誤差が発生したときは図３４（ｂ）に示す閾値マトリックスを用いてまわりの画素にその誤差値を分散させる。図３４（ｂ）のマトリックスで、"Ｘ"とあるのは、処理対象の画素を示す。そして、マトリックス内の値は拡散させるべき誤差値の比率を示す。処理対象の画素の右及び下に隣接する画素と、斜め右下及び左下に隣接する画素に対しては、２：１の比率で拡散させることになる。
【０１８０】
まずＣＰＵ２４は、（０，０）の画素位置に格納された階調値"４５"と、閾値"１２８"とを比較する。入力階調値は閾値より低い値なのでＣＰＵ２４は、対応する出力データ領域２６２ｃ、すなわち（０，０）にドットを生成しないことを示す"０"を格納する。その例を図３４（ｃ）のイエロー出力データ領域２６２ｃに示す。このとき、入力階調値は出力値"０"に対して"４５"の誤差が発生する。よってＣＰＵ２４は、閾値マトリックスを用いて、誤差値"４５"を拡散させることになる。この場合、画素位置（０，０）に対して左斜め下の画素は存在しないので、３つの画素に分散させることになる。すなわち、（０，０）の右隣と下の画素には、４５×２／５＝１８、右斜め下の画素には、４５×１／５＝９の階調値を分散させることになる（図３４（ｃ）の拡散誤差領域２６４参照）。
【０１８１】
次いでＣＰＵ２４は、（１，０）の画素に対して誤差拡散処理を行う（図３４（ｄ）のイエロー入力データ領域２６１ｃ参照）。このとき入力階調値は"４５"、拡散誤差領域２６４には、当該画素位置に対して"１８"の誤差値がある。よって、"６３"（＝４５＋１８）と閾値とを比較することになる。この場合も閾値の方が高い値なので、ＣＰＵ２４は出力データ領域２６２ｃの対応する画素位置に"０"を格納する。また、誤差値"６３"は拡散マトリックスを用いて拡散されることになる（図３４（ｄ）の拡散誤差領域２６４参照）。
【０１８２】
次いでＣＰＵ２４は、（２，０）の画素に対して誤差拡散処理を行う（図３５（ａ）イエロー入力データ領域２６１ｃ参照）。当該画素位置の階調値"４５"と拡散誤差領域２６４の当該画素位置の誤差値"２０"との和"６５"と、閾値"１２８"とを比較することになる。この場合もＣＰＵ２４は、出力データ領域２６２ｃに"０"を格納し、拡散マトリックから拡散すべき誤差値を演算して、図３５（ａ）に示す値を得る。
【０１８３】
以下、同様に（３，０）、（４，０）の画素に対して処理を行うことで図３５（ｂ）、（ｃ）の値を得る。そして１行目の最後の画素として（５，０）の画素に対して処理を行う（図３５（ｄ）参照）。この場合、拡散マトリックスで右隣と右下に画素は存在しないのでそれ以外の２つの画素（下と左斜め下の画素）で誤差値"６５"を拡散させることになる。
【０１８４】
その後、各画素に対して同様に処理を進めるとＣＰＵ２４は、（４，１）の画素位置で入力階調値と誤差値との和が閾値を超えることになる。すなわち、当該画素位置の階調値は"４５"、誤差値は"９１"であるから、その和"１３６"は閾値"１２８"を超えることになる。したがってＣＰＵ２４は、出力データ領域２６２ｃの対応する画素位置（４，１）にドット生成を示す"２５５"を格納することになる。またＣＰＵ２４は、この値"２５５"に対して、−１１９（＝１３６−２５５）の誤差値を有するので拡散マトリックスを利用して誤差を拡散させることになる。この処理の結果を図３６（ａ）に示す。
【０１８５】
このように処理を全画素に対して行った結果、図３６（ｂ）のイエロー出力データ領域２６２ｃに格納された値を得る。
【０１８６】
図３３に戻り、Ｙ成分に対する誤差拡散処理が終了するとＣＰＵ２４は、Ｙ成分に対してドットが生成されたか否か判断する（ステップＳ７２）。ドットが生成された場合に、Ｙドットが発生する位置で他の色成分のドットが打たれないように加算、減算を行うためである。ＣＰＵ２４は、イエロー出力データ領域２６２ｃを各画素探索して"２５５"がこの領域２６２ｃに格納されたか否かで判断できる。図３６（ｂ）の例では、ドットが発生しているので本ステップで"ＹＥＳ"が選択される。
【０１８７】
ステップＳ７２で"ＹＥＳ"が選択されると処理はステップＳ７３に移行し、ＣＰＵ２
４はＹの階調値に対して明度に応じた演算値を他の色成分に加算する処理を行う。処理の内容は、実施例１等と同様である。明度に応じた値を加算して、その後減算するので、Ｙドットと重なって他の色成分のドットが発生する確率が少なくなるとともに、単位面積あたりＹドットとその他の色成分のドットとの明度が均一に保たれることになる。演算値は、実施例１で説明した（式１）を用いる。上述の例で演算した結果を図３６（ｃ）に示す。
【０１８８】
次いでＣＰＵ２４は、Ｙドット周囲の減算処理を行う（ステップＳ７４）。減算処理自体は、実施例１と同様でそのフローチャートを図４に示す。すなわち、まず、Ｙの未処理のドットがあるか否か判断し（ステップＳ１４１）、未処理のドットがあれば、１色目（Ｘ＝１）の色成分でＹドットに最も近い画素を選択する（ステップＳ１４２）。最初の選択は、Ｙドットの画素位置そのもの、次の選択はＹドットが発生する画素位置に隣接する上下左右、その次は隣接する斜め方向、と実施例１等と全く同様である。選択方法もそれ以外であってもよい。そしてその選択した画素の階調値の合計が、加算総量と等しいか（ステップＳ１４５で"ＹＥＳ"）、超えるまで（ステップＳ１４３で"ＹＥＳ"）、選択し続けることになる。
【０１８９】
加算総量も同様に、全画素に対してステップＳ７３（図３３）で加算した加算値の合計を、発生したドットの数で除算した値となる。図３６（ｃ）の例では、シアン、マゼンダともに各画素"１６"を加算したので全部で"５７６"（＝１６×３６画素）を加算したことになり、この画素数でＹドットは６個発生している。よって、１ドットあたり"９６"（＝５７６／６）を加算したことになる。これがシアン、マゼンダに対する加算総量となる。同様にブラックの加算総量は、"６６"となる。
【０１９０】
図４に戻り、選択画素の階調値が加算総量を超えた場合（ステップＳ１４３で"ＹＥＳ"）、選択画素の階調値の合計が加算総量と等しくなるように、最後に選択された画素の階調値を演算することになる（ステップＳ１４８）。そして、残った階調値を最後に選択した画素に戻すことになる（ステップＳ１４９）。図３６（ｄ）に減算前の各入力データ領域２６１ａ、２６１ｂ、２６１ｄの例を示し、１色目としてシアンが選択されて減算された例を図３７（ａ）に示す。この場合も、実施例１等と同様に合計値格納領域２６３をＲＡＭ２６内に備え、ＣＰＵ２４は選択画素の階調値の合計値を格納することになる。
【０１９１】
図４に戻り、その後ステップＳ１４６に移行し２色目（Ｘ＝２）、３色目（Ｘ＝３）の当該Ｙドットが発生する位置で減算処理が行われることになる。２色目としてマゼンダ、３色目としてブラックが選択され減算処理が終了した時点でのマゼンダ、ブラックの各入力データの例を図３７（ｂ）、（ｃ）にそれぞれ示す。そして、他にＹドットが存在するときは、上述の処理を各色成分ごとに繰り返し、Ｙドットが存在しなくなるまで行う。存在しなくなるとステップＳ１４１で"ＮＯ"が選択され、図３３のステップＳ７５に移行することになる。すべてのＹドットに対して減算処理が終了した場合の例を図３８（ａ）に示す。この例に示すようにＹドットが発生する画素位置で他の色成分の階調値が"０"となっている。このため、これらの色成分に対してＣＣ法による処理を行うと当該位置でドット生成を示す値が割り当てられる確率が低くなり、Ｙドットとそれ以外の色成分のドットとが重なる確率が低くなるのである。
【０１９２】
ステップＳ７５でＣＰＵ２４は、Ｙ以外の他の色成分に対して未処理画素の探索を行う。すなわち、ラスター方向に（０，０）の画素から順に探索する。図３８（ａ）の例では、（０，０）の画素位置で３つの色成分とも未処理であるから、この画素が選択されることになる。
【０１９３】
次いでＣＰＵ２４は、ドット密度が最も疎となる色を判定する（ステップＳ７６）。実
施例１等と同様に、疎となる色成分から先にＣＣ法による処理を行うことで、入力階調値に忠実なドットを生成させるためである。ドット密度の判定は、ドット生成を示す値で各色成分の階調値を除算しその値が最も低い色成分が最も疎である色とする。図３８（ａ）の例では、ブラックが最も疎な色と判定されることになる。そして、ＣＰＵ２４は疎と判定された色成分に対してＣＣ法による処理を行うことになる（ステップＳ７７）。
【０１９４】
このＣＣ法による処理も実施例１等と同様である。すなわち、図５に示すフローチャートに従って処理が進められることになる。まず、ステップＳ７５で選択した未処理画素を初期画素としてその重心を決定する（ステップＳ１７１）。重心の演算は上述の（式２）を用いる。演算した重心位置、階調値の合計値はＣＰＵ２４によってワーキングメモリ２７０に格納され、出力データ領域２６２ａ、２６２ｂ、２６２ｄの対応する画素位置に"０"が格納される。また、選択画素が以後未処理画素として選択されないよう"−１"が格納され、さらに明度に応じた演算値が他の残りの２つの色成分に加算される。演算値は（式１）を用いて演算される。
【０１９５】
そして、ＣＰＵ２４はワーキングメモリ２７０に格納された重心位置を読出しその画素位置に最も近い画素を選択する（ステップＳ１７２）。複数あればランダムに選択する。周期パターンの発生を抑えるためである。その後、セルを構成する選択画素の階調値の合計が閾値と等しいか（ステップＳ１７７で"ＹＥＳ"）、閾値を超えるまで（ステップＳ１７３で"ＹＥＳ"）、画素を選択し続ける。ＣＰＵ２４は、選択した画素の明度に応じた演算値を他の２色の色成分に加算する（ステップＳ１７６）。そのまま疎となる色成分の階調値を残りの色成分に加算するのではなく、（式１）に示すように各色の明度に応じた演算値を加算しているので、その後の減算処理により、疎となる色成分と残りの色成分との明度が均一に保たれた画像出力を得ることができるのである。
【０１９６】
またＣＰＵ２４は、セルを構成する選択画素の階調値の合計が閾値を超えた場合（ステップＳ１７３で"ＹＥＳ"）、閾値と等しくなるように最後に選択した画素の階調値を演算して、（式３）を用いて重心の演算を行う（ステップＳ１７９）。実施例１等と全く同様である。図３８（ｂ）のブラック入力データ領域２６１ｄに示すように、最後に（２，０）の画素を選択した場合にこの画素の階調値を、合計値が閾値である"２５５"となるように"２１"として重心の演算を行う（図３８（ｂ）のワーキングメモリ２７０参照）。そして、この値"２１"を元に（式１）を用いて明度に応じた加算値を演算して、他の色成分であるシアン、マゼンダに加算する（ステップＳ１８０）。次いで、ＣＰＵ２４は、ブラックの（２，０）に残った階調値"２０"を戻すことになる（ステップＳ１８１、図３８（ｂ）のブラック入力データ領域２６１ｄ参照）。
【０１９７】
次いでＣＰＵ２４は、図６に示す重心位置にドットを生成するための処理、すなわち重心位置にドット生成を示す"２５５"を格納する（ステップＳ１７８）。図３８（ｂ）の例では、重心位置はｘ重心≒０．８１、ｙ重心≒０．６９となり、この位置に存在する（１，１）の画素位置にドット生成を示す"２５５"を格納することになる（同図のブラック出力データ領域２６２ｄ参照）。なお、図５のステップＳ１７７で閾値と等しい場合（"ＹＥＳ"の場合）、選択画素の階調値の合計が閾値と等しくなるのでセルを構成する画素の選択が終了して、本ステップＳ１７８に移行することになる。
【０１９８】
図６に戻り次いでＣＰＵ２４は、残り２色の減算処理を行う（ステップＳ１８２）。図７にフローチャートを示す。処理の内容は実施例１等と同様である。すなわち、１色目（Ｘ＝１）の色成分においてステップＳ１７８で生成したドット位置をまず選択する。次の選択は、その位置の上下左右の隣接画素、その次は斜め方向に隣接画素と選択していく（ステップＳ１８２１）。選択した画素の階調値が加算総量と等しいか（ステップＳ１８２４で"ＹＥＳ"）、超える（ステップＳ１８２２で"ＹＥＳ"）まで画素を選択する。２色目（Ｘ＝２）についても同様に繰り返すことになる（ステップＳ１８２６で"ＮＯ"）。２色とも減算処理が終了すると（ステップＳ１８２６で"ＹＥＳ"）、減算処理が終了するとともに、疎と判定された色成分のＣＣ法による処理も終了し、処理は図３３に戻りステップＳ７８に移行することになる。
【０１９９】
１色目（Ｘ＝１）としてシアン、２色目（Ｘ＝２）としてマゼンダが選択された場合の減算処理が終了したときの例を図３８（ｂ）の各入力データ領域２６１ａ、２６１ｂに示す。この例に示すように、シアン、マゼンダはＫドットが発生する位置でその階調値がまわりの画素の階調値と比較して少ない値となっている。したがって、Ｋドットが発生する位置でシアン、マゼンダのドットが発生する確率が低くなり、ブラックとシアン、マゼンダのドットとが重なる確率が低くなる。よって、ブラックとシアン、マゼンダとでドットが重なったり近づきすぎたりすることで発生する粒状的なドットを抑え、視覚的に快適な画像出力を得ることができる。また、明度に応じた演算値を加算し、その後減算したのでブラックとシアン、マゼンダとの明度も単位面積あたり均一なものとなる。
【０２００】
図３３に戻り、ＣＰＵ２４はステップＳ７８に移行して他の３つの色成分のうち未処理画素があるか否か判断する。ＣＰＵ２４は、入力データ領域２６１ａ、２６１ｂ、２６１ｄの各画素位置に"−１"が格納されたか否かで判断する。図３８（ｂ）の例では、（０，０）の画素位置でシアン、マゼンダともに"−１"が格納されておらず未処理画素となるので、本ステップＳ７８で"ＹＥＳ"が選択され再びステップＳ７５に移行する。この場合、（０，０）の画素位置でシアン、マゼンダ、疎となる色成分を判定して（ステップＳ７６）、その色成分に対してＣＣ法による処理を行う（ステップＳ７７）。このときも実施例１、２と同様に、セルを構成する画素を選択するときに、他方の色成分に演算値を加算し、ドットが生成する位置で減算を行う。これによりシアン、マゼンダともにドットが重なる確率が低くなる。その結果、Ｃ、Ｍ、Ｙ、Ｋ各成分のドットは互いに重ならず、視覚的に快適な画像出力を得ることができるのである。また明度も均一に保たれ、色域も広がる（彩度が向上する）のである。
【０２０１】
そして、（０，０）の画素位置で残った色成分に対してＣＣ法による処理を行うことになる。この最後に残った色成分に対しては、実施例１、２と同様にすでに他の色成分に対して加算、減算処理を行ったことになるので、ここでは加算、減算は行わない。そして、これを残り３色の入力データ領域２６１ａ、２６１ｂ、２６１ｄすべての画素に"−１"が格納されるまで、すなわち未処理画素がなくなるまで（ステップＳ７８で"ＮＯ"が選択）繰り返すことになる。図３８（ｃ）にその結果、各出力データ領域２６２ａ〜２６２ｄに格納される値の例を示す。
【０２０２】
誤差拡散法とＣＣ法による処理を組み合わせた本実施例においても、実施例１、２と同様に最も目立ちにくい（明度の高い）色成分に対して誤差拡散処理を行い、それ以外の色成分に対してＣＣ法による処理を行うようにしたので、画質劣化を最小限に抑えハーフトーン処理の高速化を図ることができる。また明度に応じた演算値を加算、減算するようにしたので、単位面積あたりの明度が均一に保たれ、粒状性が改善され視覚的に快適な画像出力を得ることができる。この実施例３においても、実施例１、２と同様に、加算減算処理を行わずにドットの生成する位置をマーキングすることによっても同様の効果を得ることができる。このときの処理も図１８乃至図２０に示すフローチャートに沿って処理が進められる。この場合に図１８のステップＳ３１をＹ成分に対する誤差拡散処理と変更するだけで、実施例１で説明したものと同様である。
【０２０３】
以上、本発明が適用される実施例１から実施例３まで説明したが、本発明はこれに拘泥せず、以下のような変形例においても同様の効果を奏する。
【０２０４】
すなわち、実施例１から実施例３において、色変換部２１１と、本発明が適用されるハーフトーン処理部２１２とは画像出力装置２０において処理が行われていたが、それ以外にも図３９に示すように色変換部２１１とハーフトーン処理部２１２とがホストコンピュータ１０内に設けられている場合でも本発明が適用でき、上述したものと全く同様の効果を奏することができる。この場合、ハーフトーン処理２１３から出力される量子化データがホストコンピュータ１０から画像出力装置２０に入力されて、パルス幅変調２１３から印刷エンジン２２にドット生成を示す制御データが出力され印刷が行われることになる。
【０２０５】
また、上述の例でホストコンピュータ１０以外にも例えば携帯電話やＰＤＡ（Personal Digital Assistance）、情報携帯端末において、印刷対象のデータが生成されて画像出力装置２０に出力されるようになされていてもよい。さらには、かかる端末に色変換処理部２１１や本発明が適用されるハーフトーン処理が行われるようにしてもよい。さらには、紙とディスプレイとを組み合わせた、いわゆる電子ペーパーにおいてかかる本発明のハーフトーン処理２１２が設けられ、２値化（又は多値化）された値で文書や画像を表示したり、画像出力装置２０との組み合わせて印刷出力を得ることでも、上述した効果を得ることができる。
【０２０６】
また、ＣＣ法による処理で、セルを構成する画素を選択するとき、演算した重心位置を用いて選択したが、それ以外にも階調値を考慮せず座標位置のみの中心位置から最も近い画素を選択するようにしてもよい。すなわち、（座標位置の和）／（選択画素の数）により演算した（ｘ、ｙ）の座標位置である。例えば、（０，０）と（１，０）の２つの画素をセルを構成する画素として選択した場合、その中心位置は（０．５，０）、この中心位置から最も近い位置にある未処理画素を選択する。さらに（０，１）を加えた３つの画素の場合、その中心位置は（０．５，０．５）、その画素位置から最も近い画素位置を未処理画素として選択するようにする。要するに、セルを構成する未処理画素を選択するときに常にテーブル等を利用して固定して選択するのではなく、画素選択のための基準点の位置が移動すればよい。このように移動することで、セルの形状が固定の場合と比較してより円状に成長する可能性が高まり、ドット間距離が保たれた快適な画像出力を得られるからである。
【０２０７】
さらに上述の例では、画像出力装置２０の印刷エンジン２２はレーザプリンタの例で説明したが、それ以外にも他にもイエロー、マゼンダ、シアン、ブラック等のインクを吐出させて印刷を行うインクジェットプリンタや、さらにバブルジェット（登録商標）プリンタでも本発明は適用され、同様の効果を奏することができる。
【０２０８】
さらに、カラーを表現する色成分としてＣ、Ｍ、Ｙ、Ｋの４色の例で説明したが、それ以外にもライトシアン、ライトマゼンダを含めた６色や、さらにそれ以外の色成分を含めた複数色の場合でも同様の効果を得ることができる。この場合に、各色成分の明度を比較し最も明度の高い色成分に対して、分散ディザや多値ディザのディザ処理や、誤差拡散処理を行い、それ以外の成分に対してＣＣ法による処理を行う。また、このときＣＣ法による処理では、それ以外の色成分のうち最もドット密度の低いものから順番に処理を行うことになる。
【０２０９】
また、ドットサイズの異なる場合でも本発明が適用できる。すなわち、各色の入力データが入力されると、例えばＲＯＭ２５に格納された分版関数を用いて、各色成分ごとにＳドット、Ｌドットの２つの成分（さらにＭドットを加えた３つの成分でもよい）に分版させる。最も目立ちにくい（明度の最も高い）色の２つの成分にディザ処理や誤差拡散処理を行い、それ以外の色成分の各ドット成分にＣＣ法による処理を行う。ＣＭＹＫの４つの色成分のときは、Ｙ成分のＳ、Ｌ２つの成分にディザ処理等を行い、残り３つの色成分の各々２つの成分、合計６つ成分に対してＣＣ法による処理を行うことになる。この６つの
成分のうち最もドット密度が低いものから先にＣＣ法による処理を順次行うことになる。この場合でも、ドット成分ごとに各ドットが重ならずに、ドット間距離が一定に保たれることで粒状性が改善され、局所的な明度の偏りがなくなり視覚的に快適な画像出力を得ることができる。さらに画質の劣化を最小限に抑え、ハーフトーン処理の高速化を図ることができる。
【０２１０】
さらに、最も目立つ色成分（最も明度の高い色成分）に対してＣＣ法による処理を行い、それ以外の色成分に対して分散ディザ処理、多値ディザ処理、又は誤差拡散処理を行う場合も考えられる。最も目立つ色のドットに対して画質を考慮し、それ以外の色のドットは処理の高速化を図るのである。実施例１から実施例３と比較しで若干画質は落ちるがハーフトーン処理自体はより高速化を図ることができる。この場合でも、加算減算処理やマーキングによる処理を行うことでドットが重ならずドット間距離が一定に保たれて粒状性が改善され、明度を考慮して加算減算を行うことで明度が均一で視覚的に快適な印刷出力を得ることが可能となる。
【図面の簡単な説明】
【０２１１】
【図１】本発明が適用されるシステム全体の構成を示す図である。
【図２】画像出力装置の具体的構成を示す図である。
【図３】分散ディザ法とＣＣ法を組み合わせた処理全体の動作を示すフローチャートである。
【図４】Ｙドット周囲の減算処理の動作を示すフローチャートである。
【図５】疎と判定された色のＣＣ法による処理の動作を示すフローチャートである。
【図６】疎と判定された色のＣＣ法による処理の動作を示すフローチャートである。
【図７】残り２色の減算処理の動作を示すフローチャートである。
【図８】ＲＡＭ２６の内部構成の例を示す図である。
【図９】ＲＡＭ２６の内部構成の例を示す図である。
【図１０】ＲＡＭ２６の内部構成の例を示す図である。
【図１１】ＲＡＭ２６の内部構成の例を示す図である。
【図１２】ＲＡＭ２６の内部構成の例を示す図である。
【図１３】ＲＡＭ２６の内部構成の例を示す図である。
【図１４】ＲＡＭ２６の内部構成の例を示す図である。
【図１５】ＲＡＭ２６の内部構成の例を示す図である。
【図１６】ＲＡＭ２６の内部構成の例を示す図である。
【図１７】ＲＡＭ２６の内部構成の例を示す図である。
【図１８】加算、減算処理を行わない場合の処理全体の動作を示すフローチャートである。
【図１９】他の色成分のＣＣ法による処理の動作を示すフローチャートである。
【図２０】他の色成分のＣＣ法による処理の動作を示すフローチャートである。
【図２１】ＲＡＭ２６の内部構成の例を示す図である。
【図２２】ドット集中型の閾値マトリックスの例を示す図である。
【図２３】多値ディザ法とＣＣ法とを組み合わせた処理全体の動作を示すフローチャートである。
【図２４】多値ディザ法の概念を示す図である。
【図２５】多値ディザ法の概念を示す図である。
【図２６】ＲＡＭ２６の内部構成の例を示す図である。
【図２７】ＲＡＭ２６の内部構成の例を示す図である。
【図２８】ＲＡＭ２６の内部構成の例を示す図である。
【図２９】ＲＡＭ２６の内部構成の例を示す図である。
【図３０】ＲＡＭ２６の内部構成の例を示す図である。
【図３１】ＲＡＭ２６の内部構成の例を示す図である。
【図３２】ＲＡＭ２６の内部構成の例を示す図である。
【図３３】誤差拡散法とＣＣ法とを組み合わせた処理全体の動作を示すフローチャートである。
【図３４】ＲＡＭ２６の内部構成の例を示す図である。
【図３５】ＲＡＭ２６の内部構成の例を示す図である。
【図３６】ＲＡＭ２６の内部構成の例を示す図である。
【図３７】ＲＡＭ２６の内部構成の例を示す図である。
【図３８】ＲＡＭ２６の内部構成の例を示す図である。
【図３９】他のシステム全体の構成を示す図である。
【符号の説明】
【０２１２】
１０  ホストコンピュータ    ２０  画像出力装置    ２１  画像処理部    ２１１  色変換部    ２１２  ハーフトーン処理部    ２１３  パルス幅変調部    ２２  印刷エンジン    ２４  ＣＰＵ    ２５  ＲＯＭ    ２６  ＲＡＭ    ２６１ａ  シアン入力データ格納領域    ２６１ｂ  マゼンダ入力データ格納領域  ２６１ｃ  イエロー入力データ格納領域    ２６１ｄ  ブラック入力データ格納領域    ２６２ａ  シアン出力データ格納領域    ２６２ｂ  マゼンダ出力データ格納領域    ２６２ｃ  イエロー出力データ格納領域    ２６２ｄ  ブラック出力データ格納領域    ２６３  合計値格納領域    ２６４  拡散誤差格納領域    ２６５  マーク記録用バッファ    ２７０  ワーキングメモリ領域
【図１】
2005117642.tif 000003
【図２】
2005117642.tif 000004
【図３】
2005117642.tif 000005
【図４】
2005117642.tif 000006
【図５】
2005117642.tif 000007
【図６】
2005117642.tif 000008
【図７】
2005117642.tif 000009
【図８】
2005117642.tif 000010
【図９】
2005117642.tif 000011
【図１０】
2005117642.tif 000012
【図１１】
2005117642.tif 000013
【図１２】
2005117642.tif 000014
【図１３】
2005117642.tif 000015
【図１４】
2005117642.tif 000016
【図１５】
2005117642.tif 000017
【図１６】
2005117642.tif 000018
【図１７】
2005117642.tif 000019
【図１８】
2005117642.tif 000020
【図１９】
2005117642.tif 000021
【図２０】
2005117642.tif 000022
【図２１】
2005117642.tif 000023
【図２２】
2005117642.tif 000024
【図２３】
2005117642.tif 000025
【図２４】
2005117642.tif 000026
【図２５】
2005117642.tif 000027
【図２６】
2005117642.tif 000028
【図２７】
2005117642.tif 000029
【図２８】
2005117642.tif 000030
【図２９】
2005117642.tif 000031
【図３０】
2005117642.tif 000032
【図３１】
2005117642.tif 000033
【図３２】
2005117642.tif 000034
【図３３】
2005117642.tif 000035
【図３４】
2005117642.tif 000036
【図３５】
2005117642.tif 000037
【図３６】
2005117642.tif 000038
【図３７】
2005117642.tif 000039
【図３８】
2005117642.tif 000040
【図３９】
2005117642.tif 000041