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