A.第1実施例:
A−1.印刷システム:
次に、本発明の実施の形態を実施例に基づき説明する。図1は、第1実施例における印刷システム1000の構成を示すブロック図である。印刷システム1000は、パーソナルコンピュータ100と、プリンタ200とを含んでいる。
パーソナルコンピュータ100は、CPU110と、ROMとRAMとを含む内部記憶装置120と、ハードディスクドライブなどの外部記憶装置130と、プリンタ200などの外部装置との通信のための通信インタフェース140と、タッチパネルなどの操作部150と、液晶ディスプレイなどの表示部160と、を備えている。通信インタフェース140は、例えば、いわゆるUSBインタフェース、または、IEEE802.3に準拠したインタフェースであってよい。内部記憶装置120には、後述する誤差バッファB10が、設けられている。
外部記憶装置130は、種々のプログラムを格納している。格納されたプログラム130Pは、アプリケーションM10の機能のためのプログラム(アプリケーションプログラム)と、プリンタドライバM20の機能のためのプログラムと、を含む。これらの機能は、CPU110が各コンピュータプログラムを実行することによって、実現される。アプリケーションM10は、例えば、文書作成、または、画像生成などの画像データを生成する機能を有する。
プリンタドライバM20は、アプリケーションM10から印刷対象の画像を表す画像データを取得し、取得した画像データを用いて印刷データを生成し、生成した印刷データをプリンタ200に供給する。プリンタドライバM20は、入力画像処理モジュールM22と、データ変換モジュールM24と、印刷データ生成モジュールM26と、を含んでいる。データ変換モジュールM24は、補正モジュールM242と、決定モジュールM244と、を含む。これらの機能モジュールM22、M24(M242、M244)、M26の処理については、後述する。
プリンタ200は、プリンタ200の全体を制御する制御部210と、印刷を行う印刷機構220と、パーソナルコンピュータ100または図示しないストレージ装置などの外部装置との通信のための通信インタフェース230と、を備えている。通信インタフェース230は、パーソナルコンピュータ100から印刷データを受信可能である。制御部210は、図示しないCPUとメモリとを有する周知のコンピュータである。制御部210のメモリには、プリンタ200を制御するための種々のプログラムが格納されている(図示せず)。制御部210は、通信インタフェース230から受信した印刷データに従って印刷機構220を制御することによって、印刷を実行する。
印刷機構220は、着色剤のドットを印刷媒体に形成することによって、印刷を行う。本実施例では、着色剤は、シアンとマゼンタとイエロとブラックの4色のインクである。
なお、図1には、データ変換モジュールM24によって実行される処理の概要も示されている。詳細については、後述する。
A−2.画像処理:
図2は、パーソナルコンピュータ100(図1)のプリンタドライバM20によって実行される印刷処理のフローチャートである。プリンタドライバM20は、外部からの指示に応じて、この印刷処理を実行する。以下では、プリンタドライバM20は、アプリケーションM10からの指示に応じて、印刷処理を開始することとする。
最初のステップS10では、入力画像処理モジュールM22(図1)は、アプリケーションM10から印刷対象の画像データ受信し、受信した画像データを、ビットマップデータに変換する(ラスタライズ処理)。ビットマップデータに含まれる画素データは、例えば、赤と緑と青との3つの要素の階調値(例えば、256階調)で画素の色を表すRGB画素データである。また、ビットマップデータの画素密度は、印刷解像度(ドットの最高密度)と同じである。
ステップS20では、入力画像処理モジュールM22は、ビットマップデータに含まれるRGB画素データを、シアンとマゼンタとイエロとブラックとの4つの要素の階調値(例えば、256階調)で画素の色を表すCMYK画素データに変換する(色変換処理)。色変換処理は、RGB画素データとCMYK画素データとを対応付けるルックアップテーブルを用いて行われる。
続けて、入力画像処理モジュールM22は、色補正処理を行う。色補正処理は、例えば、キャリブレーション処理(ステップS30)と、インク量調整処理(ステップS40)と、を含む。キャリブレーション処理は、CMYK画素データの各要素の値の変化に対して、実際に印刷媒体に印刷される色の濃度がリニアに変化するように、CMYK画素データの各要素の値を補正する処理である。インク量調整処理は、印刷に要するインク量が基準量以下になるように、CMYK画素データの各要素の値を調整する処理である。以下、色補正処理後のCMYK画素データを、補正済CMYK画素データとも呼ぶ。
ステップS50では、データ変換モジュールM24が、補正済CMYK画素データを含むビットマップデータを、各画素毎のドットの形成状態を表すドットデータに変換する(ハーフトーン処理)。この処理の詳細については、後述する。
続けて、印刷データ生成モジュールM26は、ドットデータを印刷データに変換する。この変換の処理は、例えば、インターレース処理(ステップS60)と、プリンタコマンド変換処理(ステップS70)とを含む。インターレース処理は、ドットデータにおけるデータの並び順を、プリンタ200に供給される順番に変換する処理である。プリンタコマンド変換処理は、ドットデータにプリンタ制御コードとデータ識別コードとを付加することによって、プリンタ200によって解釈可能な印刷データを生成する処理である。
印刷データ生成モジュールM26は、生成した印刷データを、プリンタ200に供給する。プリンタ200は、受信した印刷データに従って、印刷を行う。
図3は、図2のステップS50の処理を示すフローチャートである。図3の処理は、1つの画素(「注目画素」と呼ぶ)のドット形成状態を、誤差拡散を用いて決定する(以下「誤差拡散処理」とも呼ぶ)。図3の処理は、画像を表す複数の画素毎に、実行される。本実施例では、複数の画素は、X方向とY方向とにマトリクス状に並んで配置されている。データ変換モジュールM24は、+X方向に沿って1画素ずつ処理を実行することによって、X方向に延びる1つの画素ラインの処理を実行する。1つの画素ラインの処理の完了に応じて、データ変換モジュールM24は、+Y方向に隣接する別の画素ラインの処理を実行する。この結果、処理対象の画素ラインは、+Y方向に向かって1ラインずつ進行する。なお、図3の処理は、印刷に用いられるインクの色毎に、実行される。また、画素の処理順は、他の順であってよい。
最初のステップS200では、補正モジュールM242(図1)は、誤差マトリクスMTXと、誤差バッファB10とを用いて、誤差値Etを取得する。後述するように、誤差バッファB10は、各画素における濃度誤差(階調の誤差値)を格納している。誤差マトリクスMTXは、注目画素の周辺の所定の相対位置に配置された画素に、ゼロより大きい重みを割り当てている(図1の誤差マトリクスMTXでは、記号「+」が注目画素を表し、周辺の画素に重みa〜mが割り当てられている。重みa〜mの合計は1である)。補正モジュールM242は、この重みに従って、周辺の画素の誤差値の重み付き和を、注目画素の誤差値Etとして算出する。なお、誤差マトリクスMTXは、予め、データ変換モジュールM24に組み込まれている。例えば、CPU110(補正モジュールM242)は、内部記憶装置120に展開された誤差マトリクスMTXを参照して、処理を進行する。
次のステップS205では、補正モジュールM242は、誤差値Etと、注目画素の階調値(以下、入力階調値Vinとも呼ぶ)との和を、補正済階調値V1として算出する。
次のステップS210では、決定モジュールM244は、入力階調値Vinがゼロであるか否かを判定する。
入力階調値Vinがゼロでは無い場合には、ステップS215で、決定モジュールM244は、補正済階調値V1を閾値Vthとを比較して、注目画素のドット形成状態を決定する。本実施例では、ドット形成状態は、「ドット有り」と「ドット無し」との2つの状態のいずれかである。補正済階調値V1が閾値Vth以下の場合には、ドット形成状態が「ドット無し」に決定され(S220)、補正済階調値V1が閾値Vthより大きい場合には、ドット形成状態が「ドット有り」に決定される(S225)。なお、本実施例では、閾値Vthは、中間の階調値127である。
次のステップS230では、決定モジュールM244は、決定されたドットの形成状態に対応付けられた階調値(基準階調値Vbと呼ぶ)を取得する。本実施例では、「ドット無し」には、ゼロの基準階調値Vbが対応付けられ、「ドット有り」には、255の基準階調値Vbが対応付けられている。このような対応関係は、基準階調値テーブルとして、決定モジュールM244に組み込まれている。
次のステップS235では、決定モジュールM244は、第1誤差値E1を算出する。第1誤差値E1は、以下の式で表される。
第1誤差値E1=補正済階調値V1−基準階調値Vb
次のステップS240では、決定モジュールM244は、誤差バッファB10に、注目画素の誤差値として、第1誤差値E1を登録する(以下、誤差バッファB10に登録された誤差値を「登録誤差値」とも呼ぶ)。
以上のように、入力階調値Vinがゼロでは無い場合には、注目画素のドット形成状態が、補正済階調値V1に従って、すなわち、周辺の画素で生じた誤差値を考慮して、決定される。この結果、画像の階調を自然に表現するドットの形成状態(ドットのパターン)を、実現することができる。
入力階調値Vinがゼロである場合には(S210:Yes)、決定モジュールM244は、ドット形成状態を「ドット無し」に決定し(ステップS250)、基準階調値Vb(ゼロ)を取得する(ステップS255)。この結果、入力階調値Vinがゼロである画像領域を、適切に表現することができる。。
次のステップS260では、決定モジュールM244は、基準誤差値を算出する。基準誤差値は、上述した第1誤差値E1と同じ演算式で算出される(「基準誤差値E1」とも呼ぶ)。
次のステップS265では、決定モジュールM244は、第2誤差値E2を算出する。第2誤差値E2は、以下の式で表される。
第2誤差値E2=0.9*基準誤差値E1+0.1*乱数RND(記号「*」は乗算を示す。以下、同様)
このように、第2誤差値E2は、基準誤差値E1と乱数RNDとの重み付き和である。決定モジュールM244は、画素毎に乱数RNDを生成する。本実施例では、乱数RNDは、−64から+64までの範囲内の値であり、乱数RNDの平均値はゼロである。
本実施例では、決定モジュールM244は、ステップS265の次に、ステップS285を実行する。なお、図3には、ステップS280、S290を含む処理(「振幅比較処理PA」とも呼ぶ)が示されているが、この振幅比較処理PAは、第1実施例では実行されず、第2実施例で実行される。
ステップS285では、決定モジュールM244は、誤差バッファB10に、注目画素の誤差として、第2誤差値E2を登録する。
データ変換モジュールM24(図1)は、図3の処理を繰り返すことによって、全ての画素のドット形成状態を決定する。そして、データ変換モジュールM24は、ドット形成状態を表すドットデータを生成し、ドットデータを印刷データ生成モジュールM26に供給する。
A−2−1.ドットの遅延について:
次に、入力階調値Vinがゼロである場合に、注目画素の誤差値が、基準誤差値E1と乱数RNDとの重み付き和(第2誤差値E2)である理由について説明する。図4はドットの遅延を示す概略図である。図4(A)は、誤差拡散処理の対象のビットマップデータによって表されるビットマップ画像PIを示している。このビットマップ画像PI中には、第1画像領域IA1、空白領域BA、第2画像領域IA2が、+Y方向に沿ってこの順番に並んでいる。各画像領域IA1、IA2は、それぞれ、画像を表すドットが形成されるべき領域(例えば、写真を表す領域)である。空白領域BAは、ドットが形成されるべきではない領域(最も明るい白い領域(入力階調値Vin=ゼロ))である。
データ変換モジュールM24(図1)は、領域IA1、BA、IA2の順番に、誤差拡散処理(図3)を実行する。この結果、第1画像領域IA1で生じた誤差値は、空白領域BAを伝搬して、第2画像領域IA2に影響を及ぼし得る。
図4(A)の誤差値Errは、第1画像領域IA1における最下の画素(+Y方向側の端の画素)の誤差値を、示している。第1画像領域IA1では、ドットが形成されることによって、負の誤差値が生じる。誤差値Errは、このような負の誤差を示している。
図4(A)の右部分の表は、空白領域BAを伝搬する誤差の変化を示している。表中のライン番号LNは、第1画像領域IA1と空白領域BAとの境界から+Y方向に向かって数えた画素ライン(X方向に延びる画素ライン)の番号である。「番号LN=1」は、第1画像領域IA1と接する画素ラインを示す。第2誤差値E2は、その画素ラインの画素で生じ得る第2誤差値E2の概要を示す。誤差割合Reは、第2誤差値E2における誤差値Errの割合を示す。乱数割合Rrは、第2誤差値E2における乱数RNDの割合を示す。
空白領域BAでは、入力階調値Vinがゼロである。注目画素の第2誤差値E2は、基準誤差値E1と乱数RNDとの重み付き和である(図3:S265)。ここで、説明を簡単にするために、或る画素で生じた誤差が、+Y方向に隣接する画素に、そのまま伝搬すると仮定する。この場合、空白領域BAの1番目の画素ライン(ライン番号LN=1)では、第2誤差値E2は、「0.9*誤差値Err+0.1*乱数RND」となり得る。誤差割合Reは90%であり、乱数割合Rrは10%である。
2番目の画素ライン(ライン番号LN=2)には、1つ目の画素ラインから誤差が伝搬する。第2誤差値E2は、「0.9*伝搬誤差+0.1*乱数RND」となり得る。ここで、伝搬誤差は、1つ目の画素ラインの第2誤差値E2であり、「0.9*誤差値Err+0.1*乱数RND」である。これらの結果、2番目の画素ラインでは、誤差割合Reは、81%であり、乱数割合Rrは19%である。
3番目以降の画素ラインにおいても、同様に、第2誤差値E2は、1つ前の画素ラインの第2誤差値E2(生成誤差DE)と、乱数RNDとの重み付き和である。この結果、空白領域BAにおいて、画素ラインが第1画像領域IA1から遠いほど、誤差割合Reが小さくなり、乱数割合Rrが大きくなる。例えば、22番目以降の画素ラインでは、誤差割合Reが10%よりも小さくなり、乱数割合Rrが90%を超える。
このように、空白領域BAが大きいほど、空白領域BAを伝搬した誤差値における乱数RNDの割合が高くなる。
図4(B)は、第2画像領域IA2におけるドットdtの形成状態を示す概略図である。ここでは、第1画像領域IA1と第2画像領域IA2との間が、22ライン以上離れていると仮定する。この場合、空白領域BAから第2画像領域IA2に伝搬する誤差における乱数RNDの割合が90%以上である。第2画像領域IA2では、第1画像領域IA1で生じた誤差値(特に負の誤差値)の影響が乱数RNDによって緩和される。従って、第1画像領域IA1の影響が抑制されて、適切にドットdtが形成される。
図4(C)は、ドット形成状態の比較例を示す概略図である。この比較例では、入力階調値Vinがゼロである場合にも、入力階調値Vinがゼロでは無い場合と同じ処理(図3:S215〜S240)が行われる。空白領域BAでは、入力階調値Vinがゼロであるので、補正済階調値V1が負(誤差値Err)となる。また、補正済階調値V1が閾値Vthよりも小さいので、ドットは形成されない。注目画素で生じる第1誤差値E1は、注目画素に伝搬した誤差(誤差値Err)と同じである。これらの結果、比較例では、第1画像領域IA1で生じた誤差値Errは、そのまま、第2画像領域IA2に伝搬する。この結果、第2画像領域IA2の−Y方向側の端部IA2uでは、負の誤差値Errに起因して補正済階調値V1が閾値Vthを超えることができないので、ドットが形成されない。第2画像領域IA2の画像の濃度が薄い場合には、ドットの形成されない領域が広くなる(ドットの形成が遅れる)。
本実施例では、第2画像領域IA2の濃度が薄い場合であっても、図4(B)に示すように、乱数RNDによって、端部におけるドット形成の遅れ(「濃度の遅延」とも言える)を抑制できる。以上、誤差の伝搬を簡略化して説明したが、図1の誤差マトリクスMTXに従って誤差が拡散される場合も、同様である。
なお、現実の空白領域BAの大きさは、以下のような大きさであってよい。例えば、プリンタ200の印刷解像度が300dpi(dot per inch)である場合には、22ライン分の距離は、0.0733inch(1.86mm)である。一般には、2つの画像を1枚の用紙に印刷する場合には、2つの画像の間に、数mm〜数cmの空白領域BAが設けられる場合が多い。従って、本実施例は、一方の画像で生じた誤差値が、他方の画像に影響を及ぼす可能性を、効果的に低減できる。
A−2−2.濃度のムラについて:
図5は、濃度のムラを示す概略図である。図5(A)は、誤差拡散処理の対象のビットマップデータによって表されるビットマップ画像PIbを示している。このビットマップ画像PIbは、透かし絵のように薄い第1画像M1と、更に薄いベタ画像M2(第2画像M2)と、を表している(第1画像M1の一部は、第2画像M2の一部と重なっている)。このようなビットマップ画像PIbは、例えば、アプリケーションM10(図1)が、薄いベタ画像を表す下層レイヤに、透かし絵を表す上層レイヤを重ねることによって、画像(画像データ)を生成した場合に、処理され得る。
図5(A)の右部分には、画像の一部分の拡大図Fが示されている。拡大図Fの左部分は、第1画像M1を表し、拡大図Fの右部分は、2つの画像M1、M2が重なった部分(重畳画像M3と呼ぶ)を表している。拡大図F中の小さい四角は、画素Pxを表している。画素Pxに記載された符号Vp、Vq、0(ゼロ)は、階調値を表している。画素Pxに付されたハッチングは、濃さ(階調値)を示している。
第1画像M1を表す領域では、階調値が第1値Vpである画素のブロックと、階調値がゼロである画素のブロックとが、X方向およびY方向に交互に並んでいる(以下、階調値がゼロである画素を「ゼロ画素」とも呼ぶ)。このように、格子状に配置された画素ブロック(階調値がゼロよりも大きい画素ブロック)が、透かし絵のように薄い第1画像M1を表現している。
第2画像M2は、階調値が第2値Vqであるベタ画像である。重畳画像M3を表す領域では、階調値が第1値Vpである画素ブロックと、階調値が第2値Vqである画素のブロックとが、X方向およびY方向に交互に並んでいる。ここで、アプリケーションM10は、下層レイヤ(例えば、第2画像M2)に上層レイヤ(例えば、第1画像M1)を重ねる際に、上層レイヤ内の白を表す画素については、下層レイヤの階調値をそのまま使用し、上層レイヤ内の白ではない色を表す画素については、下層レイヤの階調値の代わりに上層レイヤの階調値を使用したこととしている。この場合、重畳画像M3の領域では、第1画像M1内のゼロでは無い階調値(Vp)が、第2画像M2の階調値(Vq)を上書きする。第1画像M1内の階調値がゼロである画素位置においては、第2画像M2の階調値(Vq)が維持される。なお、第2値Vqは、第1値Vpと比べて十分に小さい。また、いずれの値Vp、Vqも、閾値Vthよりも小さい。また、図5(A)の例では、1つの画素ブロックは、X方向に2画素、Y方向に2画素の4画素で構成されている。
図5(B)は、実施例におけるドットdtの形成状態を示す概略図である。図5(B)の右部分には、拡大図が示されている。図示するように、第1画像M1を表す領域と、重畳画像M3を表す領域との間のドットdtの密度の差は小さい。従って、ドットdtのパターンが不自然に見える可能性は低い(詳細は後述)。
図5(C)は、比較例におけるドットdtの形成状態を示す概略図である。この比較例では、入力階調値Vin(図3)がゼロである場合に、基準誤差値E1と乱数RNDとの重み付き和(第2誤差値E2)の代わりに、乱数RNDがそのまま誤差値として登録される。この比較例では、第1画像M1を表す領域では、重畳画像M3を表す領域と比べて、ドットdtの密度が高い。このようなドット密度(濃度)のムラは、不自然に見える可能性が高い。
図6は、ドット密度(濃度)のムラを説明する説明図である。図6(A)、図6(B)には、左から順番に、第1画像M1の拡大図F1と、重畳画像M3の拡大図F3と、図5(A)と同じ拡大図Fにおけるドットdtの形成状態と、が示されている。
図6(A)は、実施例の誤差伝搬とドット形成を示している。図の中央の拡大図F3は、階調値が第1値Vpである画素Px3にドットが形成された場合の、その画素Px3で生じた誤差ER3の拡散を示している。誤差ER3は、階調値が第2値Vqである画素を介して、階調値が第1値Vpである他の画素に伝搬する。この誤差の伝搬は、図3のステップS215〜S240に従って、行われる。重畳画像M3では、誤差ER3に適した密度で、ドットが形成される(図の右の拡大図F参照)。
図の左の拡大図F1は、階調値が第1値Vpである画素Px1にドットが形成された場合の、その画素Px1で生じた誤差ER1の伝搬を示している。誤差ER1は、ゼロ画素を介して、階調値が第1値Vpである別の画素に伝搬する。ここで、図3で説明したように、ゼロ画素では、基準誤差値E1と乱数RNDとの重み付き和(第2誤差値E2)が、その画素の誤差値として登録される。従って、階調値が第1値Vpである別の画素は、誤差ER1と乱数RNDとの混合値を、誤差として取得する。ただし、図4で説明したように、階調値がゼロである領域が小さい場合には、誤差における乱数割合Rrが小さい。従って、第1画像M1では、乱数RNDの影響が過剰に大きくならずに、誤差拡散処理が進行する。この結果、第1画像M1では、誤差ER1に適した密度で、ドットが形成される(図の右の拡大図F参照)。
以上のように、実施例では、第1画像M1を表す領域と、重畳画像M3を表す領域との間のドットdtの密度の差が小さい。
図6(B)は、図5(C)の比較例における誤差伝搬とドット形成を示している。図の中央の拡大図F3における誤差伝搬とドット形成とは、図6(A)の実施例と同様である。
図の左の拡大図F1は、図6(A)の拡大図F1と同様に、画素Px1で生じた誤差ER1の伝搬を示している。比較例では、入力階調値Vinがゼロである場合に、乱数RNDがそのまま誤差値として登録される。従って、ゼロ画素に隣接する画素は、画素Px1で生じた誤差ER1とは無関係に、乱数RNDを誤差として取得し得る。このように、ゼロ画素に隣接する画素では、負の誤差(誤差ER1)の影響が小さいので、ドットが形成される可能性が実施例と比べて高くなる。ゼロ画素に、階調値がゼロよりも大きい画素が隣接するパターンが、狭い領域内に多数存在する(高密度に存在する)場合には、その領域内におけるドットの密度が過度に高くなり得る。この結果、第1画像M1を表す領域では、重畳画像M3を表す領域と比べて、ドットdtの密度が高くなる(拡大図F参照)。
次に、比較例で濃度ムラが生じ、実施例で濃度ムラが抑制されることを、計算例で示す。図7は、比較例における、誤差伝搬とドット形成との計算例を示す説明図である。図7(A)は、第1画像M1の計算例を示し、図7(B)は、重畳画像M3の計算例を示す。これらの図は、Y方向に複数の画素が並んで形成された画素ラインの計算例を示している。図中には、入力階調値Vinと、補正済階調値V1と、ドット形成状態DSと、生成された乱数RNDと、新たに生じた誤差ERと、が示されている(重畳画像M3では乱数RNDが省略されている)。ここで、第1値Vpは90であり、第2値Vqは5であることとしている。また、説明を簡単にするために、或る画素で生じた誤差が、+Y方向に隣接する画素に、そのまま伝搬すると仮定している。例えば、図7(B)に示すように、上から2番目の画素Pxbの補正済階調値V1は、その画素Pxbの入力階調値Vin(90)と、1つ上の画素Pxaで生じた誤差ER(90)との、和(180)である。
図7(B)に示すように、重畳画像M3では、画素を上から下に(+Y方向に)辿ると、誤差ERに入力階調値Vinが蓄積して、誤差ER(すなわち、補正済階調値V1)が徐々に大きくなる。そして、補正済階調値V1が閾値Vth(127)を超えることによって、ドットdtが形成されて、誤差ERが負値になる。このような変化が、繰り返される。
一方、図7(A)に示す第1画像M1では、ゼロ画素において、乱数RNDが誤差ERをリセットする。従って、ゼロ画素の周辺(下流側)の画素では、入力階調値Vinの蓄積が無くても、乱数RNDの影響によって、補正済階調値V1が閾値Vthを超え得る。このように、ゼロ画素の周辺では、ドットdtが形成され易い。図7(A)の例では、図7(B)の例と比べて、ゼロ画素が維持されているにも拘わらずに、ドットdtの総数は、2つ多い(図7(A)では7個、図7(B)では5個)。
図8は、実施例における、誤差伝搬とドット形成との計算例を示す説明図である。図8(A)は、図7(A)と同じ第1画像M1の計算例を示し、図8(B)は、図7(B)と同じ重畳画像M3の計算例を示す。重畳画像M3の計算例は、比較例の計算例と同じである。第1画像M1では、比較例と同じ乱数RNDが利用されている。しかし、実施例では、比較例とは異なり、ゼロ画素の周辺で、乱数RNDに起因するドットdt形成が抑制されている。これは、図3(S265)で説明したように、誤差値に対する乱数の割合が10%に抑制されているからである。この結果、図8(A)でのドットdtの総数(5)は、図8(B)でのドットdtの総数(5)と、同じである。このように、実施例では、階調値がゼロの画素と階調値がゼロよりも大きい画素とが並ぶパターンが、狭い領域内で繰り返された場合であっても、その領域におけるドットの密度が高くなることを抑制できる。
以上のように、決定モジュールM244(図1)は、入力階調値Vin(図3)がゼロである場合には、乱数RNDを用いて、注目画素の誤差値(第2誤差値E2)を決定する。従って、図4(C)に示すような濃度の遅延(ドット出現の遅延)を抑制することができる。また、決定モジュールM244は、補正済階調値V1に関係する基準誤差値E1と、乱数RNDとを用いて、誤差値(第2誤差値E2)を決定するので、乱数RNDの影響を緩和できる。従って、濃度の遅延を抑制しつつ、ゼロ画素の周辺の画素においてドットが過度に形成される可能性を低減できる(例えば、図5(C)に示すような濃度のムラ(ドット密度のムラ)を抑制できる)。以上により、印刷された画像が不自然に見える可能性を低減できる。
特に、決定モジュールM244は、入力階調値Vinがゼロである場合には、基準誤差値E1と乱数RNDとの重み付き和を、注目画素の誤差値として決定する(図3:S265、S285)。この結果、乱数RNDを最終的な誤差値(第2誤差値E2)に反映させることができるので、図4(C)のような濃度の遅延を適切に抑制できる。また、基準誤差値E1を最終的な誤差値に反映させることができるので、図5(C)のようにドットが過度に形成される可能性を適切に低減できる。また、図4(A)に示すように、空白領域(ゼロ画素の連続する領域)が大きい場合には、空白領域を伝搬した誤差値における乱数割合Rrが大きくなり、空白領域が小さい場合には、空白領域を伝搬した誤差値に対する乱数割合Rrが小さくなる。この結果、本実施例は、大きな空白領域の近傍の濃度遅延と、小さな空白領域の近傍の過剰なドット形成と、のそれぞれを、抑制できる。また、本実施例は、空白領域の大きさを判定する処理を実行しなくても、空白領域の大きさに応じて乱数割合Rrを調整できる。
なお、本実施例においては、ゼロ以外の入力階調値Vinの全体が、本発明における「第1種の値」の例であり、ゼロが「第2種の値」の例である。また、第1誤差値E1が「第1種誤差値」の例であり、第2誤差値E2が「第2種誤差値」の例である。また、入力階調値Vinが第2種の値(ゼロ)であることが、「基準誤差値E1と乱数RNDとの重み付き和(第2誤差値E2)を第2種誤差値として使用するための特定の条件」の例である。
B.第2実施例:
図9は、第2実施例のドット形成の説明図である。第1実施例と第2実施例との間の差異は、第2実施例では、図3の振幅比較処理PA(S280、S290)が有効になる点だけである。他の処理の内容と、印刷システム1000の構成は、第1実施例と同じである。
図3に示すように、第2実施例では、決定モジュールM244は、ステップS265の次のステップS280で、第2誤差値E2の絶対値が、乱数RNDの振幅Arndよりも小さいか否かを判定する。乱数RNDの振幅Arndは、乱数RNDの変動幅の半分を意味している。本実施例では、乱数RNDが−64から+64までの範囲内で変動するので、振幅Arndは、64である。
第2誤差値E2の絶対値が振幅Arnd以上である場合には、決定モジュールM244は、第1実施例と同様に、ステップS285を実行する。
第2誤差値E2の絶対値が振幅Arnd未満である場合には、決定モジュールM244は、ステップS290で、第2誤差値E2の算出に使用した乱数RNDを、そのまま、注目画素の誤差として、誤差バッファB10に登録する。このように、第2誤差値E2の絶対値が小さい場合に、第2誤差値E2の代わりに乱数RNDを誤差として登録する理由は、ゼロ画素が連続する領域において誤差値が均一になることを抑制するためである。
誤差値の均一性(分散)と、ドットパターンとの関係について説明する。図9(A)は、図4(A)と同じビットマップ画像PIを示している。図9(A)の右部分のグラフは、Y方向の画素位置と、登録誤差値の分散(統計学の分散)と、の関係を示している。登録誤差値の分散は、X方向に延びる1本の画素ラインにおける、登録誤差値の分散を示している。グラフ中の白抜きの菱形は、振幅比較処理PAを有効にした場合の分散を示し(「第1分散Vr1」と呼ぶ)、黒丸は振幅比較処理PAを無効にした場合の分散を示している(「第2分散Vr2」と呼ぶ)。
第1画像領域IA1では、入力階調値Vinの変化とドット形成状態とに応じて誤差値が分散する。第1画像領域IA1内では、各画素の階調値がゼロよりも大きいので、第1分散Vr1と第2分散Vr2とは、同じである。
空白領域BAにおいては、図4で説明したように、第1画像領域IA1で生じた誤差が、1よりも小さい係数(ここでは、0.9)によって徐々に減少しながら、+Y方向に伝搬する。従って、画素ラインの位置を+Y方向に辿ると、図3のステップS265で使用される第2誤差値E2の絶対値は、徐々に小さくなる(図示省略)。この結果、第2実施例では、画素ラインの位置を+Y方向に辿ると、ステップS285の代わりにステップS290が実行される画素の割合が徐々に高くなる。
また、空白領域BAにおいては、第1画像領域IA1で生じた誤差は、誤差マトリクスMTX(図1)に従って平滑化されながら、+Y方向に伝搬する。従って、画素ラインの位置を+Y方向に辿ると、登録誤差値の分散は徐々に小さくなる(図9(A))。ただし、空白領域BAでは、登録誤差値は、新たに追加された乱数RNDの成分を含む(図3:S265、S290)。従って、第1分散Vr1と第2分散Vr2とのそれぞれには、新たに追加された乱数RNDの成分の分散が残る。振幅比較処理PAが有効な第2実施例では、乱数RNDがそのまま誤差値として登録されるので(図3:S290)、第1分散Vr1には、乱数RNDの分散Vrndが残る。振幅比較処理PA(図3)が省略される場合には、「0.1*乱数RND」が新たに誤差値に追加されるので(図3:S265)、第2分散Vr2には、乱数RNDの分散Vrndの0.1倍の値Vsrndが残る(Vsrnd<Vrnd)。
図9(B)は、第2画像領域IA2における−Y方向側の端の画素ライン(端画素ラインFLと呼ぶ)におけるドット形成状態DSbと、端画素ラインFLにおける補正済階調値V1の変化を表すグラフと、を示している。ドット形成状態DSbと、グラフとにおいて、白抜きの菱形は、振幅比較処理PAが有効である本実施例を示し、黒丸は、振幅比較処理PAを無効にした場合を示す。
端画素ラインFL上では、誤差拡散処理が+X方向に向かって進行する。従って、画素を+X方向に辿ると、誤差に画素の階調値が蓄積して、補正済階調値V1が徐々に大きくなる。そして、補正済階調値V1が閾値Vthを超えることによって、ドットdt1、dt2が形成されて、誤差値、すなわち、補正済階調値V1が小さくなる。このような変化が繰り返される。
ここで、振幅比較処理PA(図3)が無効である場合には、端画素ラインFLの−Y方向側に隣接する画素ラインにおいて、登録誤差値の分散が小さい(図9(A):第2分散Vr2)。すなわち、端画素ラインFL上の画素位置によらずに、空白領域BAから端画素ラインFLの画素に伝搬する誤差は、おおよそ均一である。従って、第2画像領域IA2がおおよそ均一な薄いベタ画像を表している場合には、画素位置の変化に対する補正済階調値V1(第2補正済階調値V12)の変化は、おおよそ同じパターンを繰り返す(図9(B))。この結果、形成されるドットdt2は、おおよそ、等間隔に並ぶ。この結果、第2画像領域IA2の端部において、おおよそ等間隔に配置されたドットが、不自然に目立つ可能性がある(例えば、ドットがライン状に見える)。
本実施例では、端画素ラインFLの上に隣接する(−Y方向側の)画素ラインにおいて、登録誤差値の分散が大きい(図9(A):第1分散Vr1)。従って、第2画像領域IA2がおおよそ均一な薄いベタ画像を表している場合であっても、画素位置の変化に対する補正済階調値V1(第1補正済階調値V11)の変化のパターンは、画素位置によって異なる(図9(B))。この結果、端画素ラインFLにおいて、ドットdt1が等間隔に並ぶことが抑制され、ドットdt1は、不規則なパターンに見えるように形成される。
以上のように、本実施例では、決定モジュールM244(図1)は、第2誤差値E2の絶対値が乱数RNDの振幅よりも小さい場合には、注目画素の誤差値として、乱数RNDをそのまま使用する(図3:振幅比較処理PA)。従って、決定モジュールM244は、誤差値を適切に分散させることができる。この結果、印刷された画像の端を表現するドットがラインのように見える可能性を低減できる。以上により、画像が不自然に見える可能性を低減できる。
また、本実施例では、決定モジュールM244は、誤差値の分散を算出せずに、第2誤差値E2の絶対値と乱数RNDの振幅Arndとの比較によって、第2誤差値E2と乱数RNDとの間の切り替えを行う。この結果、誤差拡散処理に要する時間が長くなる可能性を低減できる。また、誤差拡散処理に要するメモリ容量が多くなる可能性を低減できる。ただし、誤差値の分散の算出結果に従って、上記切り替えを行ってよい。
また、第2実施例では、振幅比較処理PAを有効にする点以外の処理が、第1実施例と同じであるので、第2実施例は、第1実施例と同じ種々の利点を有する。
なお、本実施例では、図3のステップS285で登録される第2誤差値E2と、ステップS290で登録される乱数RNDとが、本発明における「第2種誤差値」の例である。また、ステップS280で振幅Arndと比較される第2誤差値E2は「候補誤差値」の例でもある。また、入力階調値Vinが第2種の値(ゼロ)であり、かつ、第2誤差値E2の絶対値が乱数RNDの振幅Arnd以上であることが、「基準誤差値E1と乱数RNDとの重み付き和(第2誤差値E2)を第2種誤差値として使用するための特定の条件」の例である。
C.第3実施例:
図10は、図2のステップS50の処理の別の実施例を示すフローチャートである。本実施例では、登録誤差値に対して乱数RNDが寄与する割合が、入力階調値Vinに応じて変化する。図2の他の処理と、印刷システム1000の構成とは、上記各実施例と同じである。
最初のステップS300、S305は、図3のステップS200、S205と、それぞれ同じである。次のステップS310では、決定モジュールM244は、入力階調値Vinがゼロまたは255(最大値)であるか否かを判定する。入力階調値Vinがゼロと255とのいずれでもない場合には、決定モジュールM244は、ステップS315〜S330の処理を実行する。これらのステップS315〜S330は、図3のステップS215〜S230と、それぞれ同じである。
入力階調値Vinがゼロまたは255である場合には、決定モジュールM244は、ステップS340〜S355の処理を実行する。入力階調値Vinがゼロである場合には、ドット形成状態が「ドット無し」に決定される(S340、S345)。入力階調値Vinが255である場合には、ドット形成状態が「ドット有り」に決定される(S340、S350)。決定モジュールM244は、ステップS355で、ドット形成状態に応じた基準階調値Vbを取得する。
次のステップS360では、決定モジュールM244は、基準誤差値E1を算出する(この処理は、図3のステップS260と同じである)。次のステップS365では、決定モジュールM244は、乱数重みC(「初期化割合C」とも呼ぶ)を取得する。図3のステップS265では、乱数RNDの重みが0.1に固定されているが、本実施例では、乱数重みCが入力階調値Vinに応じて変化する。乱数重みCと入力階調値Vinとの対応関係は、予めデータ変換モジュールM24に組み込まれている。例えば、CPU110(決定モジュールM244)は、内部記憶装置120に展開された対応関係(例えば、テーブル)を参照して、乱数重みCを取得する。
図11は、入力階調値Vinと乱数重みCとの関係を示すグラフである。入力階調値Vinがゼロから第1値Veに至るまでの第1範囲R1では、乱数重みCは、ゼロよりも大きい。また、入力階調値Vinの増加に伴って、乱数重みCは、最大値(ここでは、0.1)からゼロまで複数の段階を経て減少する。入力階調値Vinがゼロの場合に乱数重みCが最大である。入力階調値Vinが第2値Vfから255に至るまでの第2範囲R2では、乱数重みCは、ゼロよりも大きい。また、入力階調値Vinの増加に伴って、乱数重みCは、ゼロから最大値(ここでは、0.1)まで、複数の段階を経て増加する。入力階調値Vinが255の場合に乱数重みCが最大である。第1値Veと第2値Vfとは、印刷画像の画質に応じて実験的に決定されてよく、例えば、それぞれ、10、245であってよい。入力階調値Vinが第1値Veから第2値Vfに至る第3範囲R3では、乱数重みCはゼロである。このように、乱数重みCが入力階調値Vinの変化に応じて変化する理由については、後述する。
図10の次のステップS370では、決定モジュールM244(図1)は、第3誤差値E3を算出する。第3誤差値E3は、以下の式で表される。
第3誤差値E3=(1−C)*基準誤差値E1+C*乱数RND
このように、第3誤差値E3は、基準誤差値E1と乱数RNDとの重み付き和である。重みは乱数重みCによって表されている。乱数重みCがゼロである場合には、第3誤差値E3は、基準誤差値E1と同じである。
次に、決定モジュールM244は、ステップS380、S385、S390の処理によって、第3誤差値E3または乱数RNDを、注目画素の誤差として、誤差バッファB10に登録する。これらのステップS380、S385、S390は、図3のステップS280、S285、S290の第2誤差値E2を第3誤差値E3に置換して得られるステップと、それぞれ同じである。
以上のように、第3実施例では、入力階調値Vinがゼロである場合には、乱数重みCが0.1であり、基準誤差値E1の重みが0.9である(図10のS370、図11)。従って、図3、図9に示す第2実施例と同様に、誤差拡散処理が進行する。この結果、第3実施例は、第2実施例と同様の種々の利点を有する。
また、図11に示すように、入力階調値Vinがゼロの近傍(第1範囲R1)にある場合には、乱数重みCが入力階調値Vinに応じて変化する。従って、第3誤差値E3に対する乱数RNDの影響の大きさを入力階調値Vinに応じて調整することができる。この結果、乱数RNDの影響を受けるドット形成状態を、入力階調値Vinに適した状態に決定することができる。また、本実施例では、第1範囲R1において、入力階調値Vinが基準階調値Vb(ゼロ)に近いほど乱数重みCが高い。従って、入力階調値Vinが基準階調値Vb(ゼロ)から徐々に変化する(大きくなる)グラデーション領域を印刷する場合に、入力階調値Vinの増加に伴って乱数重みCが単調に減少する。これにより、入力階調値Vinの増加に伴って乱数重みCが減少と増加とを繰り返す場合と比べて、グラデーション上でドット密度が不自然に変化する可能性を低減できる。特に、本実施例では、乱数重みCは、入力階調値Vinの増加に伴って複数の段階を経て変化(減少)する。従って、上記グラデーション領域を印刷する場合に、乱数重みCが最大値である部分と乱数重みCがゼロである部分との間で、ドット形成状態が急激に変化する可能性を低減できる。この結果、印刷されたグラデーション領域が不自然に見える可能性を低減できる。
また、入力階調値Vinが255の場合には、入力階調値Vinが閾値Vthよりも大きいので、通常は、ドット形成状態は「ドット有り」に決定される。このような画素が連続する領域(以下、「最濃ベタ領域」と呼ぶ)は、図4で説明した空白領域BAと同様に、或る画像領域で生じた誤差値を、他の画像領域に伝搬し得る。従って、最濃ベタ領域も、空白領域BAと同様に、濃度の遅延を引き起こし得る。また、最濃ベタ領域において乱数RNDを誤差値として使用する場合には、小さな最濃ベタ領域の近傍で、過剰なドット形成が生じ得る。このような過剰なドット形成は、図5(C)の比較例のような濃度のムラを引き起こし得る。そこで、本実施例では、最濃ベタ領域(より具体的には、図11の第2範囲R2)においても、空白領域BA(より具体的には、図11の第1範囲R1)と同様に、乱数重みCがゼロよりも大きい。この結果、最濃ベタ領域の近傍で生じ得る不具合を、空白領域BAの近傍で生じ得る不具合と同様に、抑制できる。また、第2範囲R2においても、乱数重みCが入力階調値Vinに応じて変化するので、ドット形成状態を入力階調値Vinに適した状態に決定することができる。
なお、本実施例では、図11の第3範囲R3の値の全体が、本発明における「第1種の値」の例であり、第1範囲R1の値と第2範囲R2の値との全体が「第2種の値」の例である。また、第1範囲R1と第2範囲R2のそれぞれが「乱数適用範囲」の例である。また、乱数重みCがゼロの場合に登録される第3誤差値E3(=基準誤差値E1)が「第1種誤差値」の例であり、乱数重みCがゼロよりも大きい場合に登録される第3誤差値E3が「第2種誤差値」の例である。また、乱数重みCがゼロよりも大きい場合に、図10のステップS390で登録される乱数RNDも「第2種誤差値」の例である。また、ステップS380で振幅Arndと比較される第3誤差値E3は「候補誤差値」の例でもある。また、入力階調値Vinが第2種の値であり、かつ、第3誤差値E3の絶対値が乱数RNDの振幅Arnd以上であることが、「基準誤差値E1と乱数RNDとの重み付き和(第3誤差値E3)を第2種誤差値として使用するための特定の条件」の例である。
D.第4実施例:
図12は、図10のフローで使用される乱数重みCの別の実施例を示す説明図である。第4実施例では、1つの画素のドット形成状態は、「ドット無し」と「小ドット有り」と「中ドット有り」と「大ドット有り」との4つの状態のいずれかに決定される。中ドットは小ドットよりも高い濃度(階調値)を表し、大ドットは中ドットよりも高い濃度(階調値)を表す。
本実施例においても、図10と同様の手順に従って、誤差拡散処理が進行する。ここで、決定モジュールM244(図1)は、補正済階調値V1と、複数の閾値とを比較することによって、ドット形成状態を決定する。3以上のドット形成状態から1つのドット形成状態を選択する方法は、周知の方法であってよい(詳細な説明を省略する)。
図12の下部分のグラフは、入力階調値Vinとドットの記録率との関係を示す。100%のドット記録率は、全画素にドットが記録された状態を意味している。グラフには、小ドットの記録率DR1と、中ドットの記録率DR2と、大ドットの記録率DR3と、が示されている。この記録率は、入力階調値Vinが均一なベタ領域を印刷することによって得られる記録率を示している。
入力階調値Vinがゼロから第1基準階調値T1(例えば、72)に至るまでの第1範囲Raでは、入力階調値Vinの増加に伴って、小ドット記録率DR1が、ゼロ%から100%まで徐々に増加する。入力階調値Vinが第1基準階調値T1から第2基準階調値T2(例えば、153)に至るまでの第2範囲Rbでは、入力階調値Vinの増加に伴って、小ドット記録率DR1は、100%からゼロ%まで徐々に減少し、この代わりに、中ドット記録率DR2が、ゼロ%から100%まで徐々に増加する。入力階調値Vinが第2基準階調値T2から255に至るまでの第3範囲Rcでは、入力階調値Vinの増加に伴って、中ドット記録率DR2は、100%からゼロ%まで徐々に減少し、この代わりに、大ドット記録率DR3が、0%から100%まで徐々に増加する。このように、小ドットは、第1基準階調値T1を表し、中ドットは、第2基準階調値T2を表し、大ドットは、255の階調を表す。すなわち、「小ドット有り」に対応する基準階調値は、第1基準階調値T1であり、「中ドット有り」に対応する基準階調値は、第2基準階調値T2であり、「大ドット有り」に対応する基準階調値は、255である。
図10のドット形成状態を決定する処理部分DPは、上述の4つのドット形成状態に適応するように修正される。例えば、決定モジュールM244(図1)は、ステップS310、S340〜S355の代わりに、以下のように、ドット形成状態を決定する。
(1)Vin= ゼロの場合、ドット形成状態=「ドット無し」
(2)Vin= T1の場合、ドット形成状態=「小ドット有り」
(3)Vin= T2の場合、ドット形成状態=「中ドット有り」
(4)Vin=255の場合、ドット形成状態=「大ドット有り」
これら以外の場合には、決定モジュールM244は、例えば、複数の閾値を用いる周知の方法によってドット形成状態を決定してよい。なお、本実施例では、図10の手順の処理部分DP以外のステップは、第3実施例と同じである。
図12の上部分のグラフは、乱数重みCと入力階調値Vinとの関係を示す。図11と同じ第1範囲R1と第2範囲R2とに加えて、第1基準階調値T1を含む第3範囲R13と、第2基準階調値T2を含む第4範囲R14においても、乱数重みCはゼロよりも大きい。また、第3範囲R13においては、入力階調値Vinが第1基準階調値T1に近いほど乱数重みCが高い。第4範囲R14においては、入力階調値Vinが第2基準階調値T2に近いほど、乱数重みCが高い。各範囲R13、R14においても、乱数重みCの最大値は0.1であり、入力階調値Vinの変化に伴って、乱数重みCが複数の段階を経て変化する。4つの範囲R1、R2、R13、R14を除いた残りの範囲R15、R16、R17では、乱数重みCはゼロである。
次に、図12の第3範囲R13と第4範囲R14とで乱数重みCがゼロよりも大きい理由について説明する。入力階調値Vinが第1基準階調値T1である画素が連続する領域(第1基準ベタ領域と呼ぶ)では、小ドット記録率DR1が100%である。また、入力階調値Vinが第2基準階調値T2である画素が連続する領域(第2基準ベタ領域と呼ぶ)では、中ドット記録率DR2が100%である。このような基準ベタ領域は、図4で説明した空白領域BAと同様に、或る画像領域で生じた誤差値を、他の画像領域に伝搬し得る(濃度遅延(図4(C))が生じ得る)。また、そのような基準ベタ領域において、乱数RNDを誤差値として使用する場合には、小さい基準ベタ領域の近傍の過剰なドット形成、すなわち、濃度のムラ(図5(C))が生じ得る。そこで、本実施例では、基準ベタ領域(より具体的には、図12の第3範囲R13と第4範囲R14)においても、第1範囲R1および第2範囲R2と同様に、乱数重みCがゼロよりも大きい。この結果、基準ベタ領域の近傍で生じ得る不具合を抑制できる。
なお、本実施例では、図12の3つの範囲R15,R16,R17の値の全体が、本発明における「第1種の値」の例であり、4つの範囲R1,R2,R13,R14の値の全体が「第2種の値」の例である。また、4つの範囲R1,R2,R13,R14のそれぞれが「乱数適用範囲」の例である。
E.変形例:
なお、この発明は上記の実施例や実施形態に限られるものではなく、その要旨を逸脱しない範囲において種々の態様において実施することが可能であり、例えば次のような変形も可能である。
(1)上記各実施例において、第2誤差値E2(図3)および第3誤差値E3(図10)の算出に使用される乱数RNDの重みは、それらの誤差値に対して乱数RNDが寄与する割合(乱数寄与率)の大きさを表している。ここで、乱数寄与率は、誤差値の取り得る値の範囲の幅に対する、乱数RNDに起因する誤差値の変動幅の割合によって、特定可能である。なお、乱数寄与率を入力階調値Vinに応じて変化させる方法は、乱数RNDの重み(例えば、乱数重みC)を入力階調値Vinに応じて変化させる方法に限らず、他の種々の方法であってよい。例えば、乱数RNDの振幅が、入力階調値Vinに応じて変化してもよい。この場合、乱数RNDの振幅が大きいほど、乱数寄与率が高いということができる。
上記各実施例で、誤差値の算出に利用される乱数RNDの重み(図3では、0.1。図10では、乱数重みC)は一例であり、他の値であってもよい。一般に、乱数寄与率(例えば、乱数重みC)が高い場合には、空白領域BAが小さくても、その空白領域BAの近傍での濃度の遅延(図4(C))を抑制できる。また、乱数寄与率が低い場合には、空白領域BAが大きくても、その空白領域BAの近傍での過剰なドット形成(図5(C))を抑制できる。これらは、空白領域BAに限らず、前述の最濃ベタ領域と基準ベタ領域とにおいても、同じである。乱数寄与率(例えば、乱数RNDの重みと乱数RNDの振幅)は、濃度の遅延の抑制と、過剰なドット形成の抑制とのバランスを考慮して、実験的に決定されてよい。また、乱数RNDの振幅は、ドットが形成された状態の基準階調値Vb(複数種類のドットが形成され得る場合には、最も小さいドットの基準階調値Vb)よりも小さいことが好ましく、その基準階調値Vbの半分よりも小さいことが特に好ましい。こうすれば、乱数RNDをそのまま誤差として使用する場合に、乱数RNDのパターンが、形成されたドットのパターンに現れる可能性を低減できる。
(2)上記各実施例において、ドット形成状態を決定する処理の手順は、図3、図10に示す手順に限らず、他の種々の手順であってよい。例えば、図10のステップS380、S390は、入力階調値Vinが第2種の値である場合(乱数重みCがゼロよりも大きい場合)にのみ、実行されてもよい。また、図11の第2範囲R2において、乱数重みCがゼロであってもよい。また、重み付き和を算出する際の基準誤差値E1と乱数RNDとのそれぞれの重みの和は1でなくてもよい。また、重み付き和に代えて、基準誤差値E1と乱数RNDとから決まる種々の値が、注目画素の誤差値(または、候補誤差値)であってよい。また、図3のステップS290、図10のステップS390では、第2誤差値E2および第3誤差値E3の算出に使用した乱数RNDとは別に新たに生成した乱数RNDを登録してもよい。また、第1誤差値E1(基準誤差値E1)は、演算式を用いた演算に限らず、任意の導出方法(例えば、ルックアップテーブル)によって導出されてよい。
(3)ドット形成状態の総数は、2または4に限らず、一般にN個(Nは2以上の整数)であってよい。また、プリンタが利用可能な着色剤の種類は、シアンとマゼンタとイエロとブラックとの4種類に限らず、任意の種類であってよい。また、着色剤は、インクに代えて、トナーであってもよい。
(4)図1のプリンタドライバM20の機能は、プリンタ200の制御部210によって実現されてもよい。この場合、プリンタ200は、メモリーカードやデジタルカメラ等の外部装置から直接に画像データを取得し、取得した画像データに従って印刷を実行してもよい。
(5)上記各実施例において、ハードウェアによって実現されていた構成の一部をソフトウェアに置き換えるようにしてもよく、逆に、ソフトウェアによって実現されていた構成の一部あるいは全部をハードウェアに置き換えるようにしてもよい。