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