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