(57)【特許請求の範囲】
【請求項１】
画像を構成する各画素についての階調値によって表現された画像データを、該各画素についてのドット形成の有無を表すドットデータに変換する画像処理装置であって、
互いに隣接する前記画素を所定の複数個ずつユニットとしてまとめ、前記画像データを該ユニット単位で前記ドットデータに変換するドットデータ変換手段と、
前記変換されたユニットを構成する少なくとも一部の画素については、該ユニット内での画素位置を識別可能な状態でドット形成の有無を記憶するドット有無記憶手段と
を備え、
前記ドットデータ変換手段は、
前記ユニット内でドット形成の有無を判断しようとする着目画素を順次設定する着目画素設定手段と、
変換しようとするユニット内での前記着目画素位置に基づいて、前記変換済みのユニット内でドット形成の有無が記憶されている画素のうち、所定位置にある画素についてのドット形成有無を検出するドット形成有無検出手段と、
前記着目画素の階調値と前記ドット形成有無の検出結果とに基づいて、該着目画素についてのドット形成の有無を判断するドット形成判断手段と
を有するとともに、
前記ドット形成判断手段は、前記着目画素の階調値が大きくなるほどドット形成有りとなり易いように判断することに加えて前記ドット形成有無の検出結果を前記ユニット内で前記所定位置にある画素に形成されるドットの全ドットに対する割合が所定範囲内に抑制されるように考慮しながら前記着目画素についてのドット形成の有無を判断する画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
前記ドット形成有無検出手段は、前記ドット形成有無を検出する所定位置の画素として、前記ユニット内で前記着目画素と同じ画素位置にある画素について、
ドット形成有無を検出する手段であり、
前記ドット形成判断手段は、前記所定位置の画素に所定数以上のドットが検出された場合には、前記着目画素についてのドット形成を抑制するドット形成抑制手段を備えている画像処理装置。
【請求項３】
請求項１記載の画像処理装置であって、
前記ドット形成有無検出手段は、前記ドット形成有無を検出する所定位置の画素として、前記ユニット内で前記着目画素とは異なった所定の画素位置にある画素について、ドット形成有無を検出する手段であり、
前記ドット形成判断手段は、前記所定位置の画素に所定数以上のドットが検出された場合には、前記着目画素についてのドット形成を促進するドット形成促進手段を備えている画像処理装置。
【請求項４】
請求項１記載の画像処理装置であって、
前記ドット形成判断手段は、誤差拡散法を用いてドット形成の有無を判断するとともに、該判断に際して参照される該誤差拡散法の閾値を、前記ドット形成有無の検出結果に基づいて変更しながら判断する手段である画像処理装置。
【請求項５】
請求項１ないし請求項４のいずれかに記載の画像処理装置であって、
前記ドットデータ変換手段は、互いに隣接する４画素ずつを前記ユニットとしてまとめて、前記画像データを前記ドットデータに変換する手段であり、
前記ドット形成判断手段は、前記ユニット内で前記着目画素と同じ画素位置に形成されるドットの全ドットに対する割合が１０％〜４０％に抑制された状態で、ドット形成の有無を判断する手段である画像処理装置。
【請求項６】
画像を構成する各画素についての階調値によって表現された画像データを受け取り、該画像データに基づいて印刷媒体上にドットを形成することによって該画像を印刷する印刷装置であって、
互いに隣接する前記画素を所定の複数個ずつユニットとしてまとめるユニット生成手段と、
前記ユニットを構成する各画素についての画像データを該ユニット単位で変換することにより、該画素の各々についてのドット形成の有無を表すドットデータに変換するドットデータ変換手段と、
前記得られたドットデータに基づいて前記画素の各々にドットを形成するドット形成手段と、
前記変換されたユニットを構成する少なくとも一部の画素については、該ユニット内での画素位置を識別可能な状態でドット形成の有無を記憶するドット有無記憶手段と
を備え、
前記ドットデータ変換手段は、
前記ユニット内でドット形成の有無を判断しようとする着目画素を順次設定する着目画素設定手段と、
変換しようとするユニット内での前記着目画素位置に基づいて、前記変換済みのユニット内でドット形成の有無が記憶されている画素のうち、所定位置にある画素についてのドット形成有無を検出するドット形成有無検出手段と、
前記着目画素の階調値と前記ドット形成有無の検出結果とに基づいて、該着目画素についてのドット形成の有無を判断するドット形成判断手段と
を有するとともに、
前記ドット形成判断手段は、前記着目画素の階調値が大きくなるほどドット形成有りとなり易いように判断することに加えて前記ドット形成有無の検出結果を前記ユニット内で前記所定位置にある画素に形成されるドットの全ドットに対する割合が所定範囲内に抑制されるように考慮しながら前記着目画素についてのドット形成の有無を判断する印刷装置。
【請求項７】
画像を構成する各画素についての階調値によって表現された画像データを、該各画素についてのドット形成の有無を表すドットデータに変換する画像処理方法であって、
互いに隣接する前記画素を所定の複数個ずつユニットとしてまとめ、前記画像データを該ユニット単位で前記ドットデータに変換する工程（Ａ）と、
前記変換されたユニットを構成する少なくとも一部の画素については、該ユニット内での画素位置を識別可能な状態でドット形成の有無を記憶する工程（Ｂ）と
を備え、
前記工程（Ａ）は、更に、
前記ユニット内でドット形成の有無を判断しようとする着目画素を順次設定する下位工程（Ａ−１）と、
変換しようとするユニット内での前記着目画素位置に基づいて、前記変換済みのユニット内でドット形成の有無が記憶されている画素のうち、所定位置にある画素についてのドット形成有無を検出する下位工程（Ａ−２）と、
前記着目画素の階調値と前記ドット形成有無の検出結果とに基づいて、該着目画素についてのドット形成の有無を判断する下位工程（Ａ−３）と
を有するとともに、
前記下位工程（Ａ−３）は、前記着目画素の階調値が大きくなるほどドット形成有りとなり易いように判断することに加えて前記ドット形成有無の検出結果を前記ユニット内で前記所定位置にある画素に形成されるドットの全ドットに対する割合が所定範囲内に抑制されるように考慮しながら前記着目画素についてのドット形成の有無を判断する画像処理方法。
【請求項８】
画像を構成する各画素についての階調値によって表現された画像データを、該各画素についてのドット形成の有無を表すドットデータに変換する画像処理方法を、コンピュータを用いて実現するためのプログラムであって、
互いに隣接する前記画素を所定の複数個ずつユニットとしてまとめ、前記画像データを該ユニット単位で前記ドットデータに変換する機能（Ａ）と、
前記変換されたユニットを構成する少なくとも一部の画素については、該ユニット内での画素位置を識別可能な状態でドット形成の有無を記憶する機能（Ｂ）と
を実現するとともに、
前記機能（Ａ）は、更に、
前記ユニット内でドット形成の有無を判断しようとする着目画素を順次設定する機能（Ａ−１）と、
変換しようとするユニット内での前記着目画素位置に基づいて、前記変換済みのユニット内でドット形成の有無が記憶されている画素のうち、所定位置にある画素についてのドット形成有無を検出する機能（Ａ−２）と、
前記着目画素の階調値と前記ドット形成有無の検出結果とに基づいて、該着目画素についてのドット形成の有無を判断する機能（Ａ−３）と
を有しており、
前記機能（Ａ−３）は、前記着目画素の階調値が大きくなるほどドット形成有りとなり易いように判断することに加えて前記ドット形成有無の検出結果を前記ユニット内で前記所定位置にある画素に形成されるドットの全ドットに対する割合が所定範囲内に抑制されるように考慮しながら前記着目画素についてのドット形成の有無を判断することを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、階調画像データを、ドット形成の有無によって表現されたドットデータに変換する技術に関し、詳しくは、所定数の隣接する画素をユニットにまとめて処理することで画像データを迅速に変換しながら、画質の悪化を回避する技術に関する。
【０００２】
【従来の技術】
印刷媒体や液晶画面といった表示媒体上に、ドットを形成することによって画像を表現する画像表示装置は、各種画像機器の出力装置として広く使用されている。かかる画像表示装置は、局所的にはドットを形成するか否かのいずれかの状態しか表現し得ないが、画像の階調値に応じてドットの形成密度を適切に制御することによって、階調が連続的に変化する画像を表現することが可能となっている。
【０００３】
これら画像表示装置において画像の階調値に応じて適切な密度でドットが形成されるように、各画素についてのドット形成の有無を判断するための手法としては、誤差拡散法と呼ばれる手法が広く使用されている。誤差拡散法は、着目画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を、該着目画素周辺の未判断画素に拡散して記憶しておき、未判断画素についてのドット形成の有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するようにドット形成の有無を判断する手法である。誤差拡散法を用いれば、このように周辺画素で発生した階調表現の誤差を解消するようにドットの形成有無を判断することができるので、画像の階調値に応じた適切な密度となるようにドット形成の有無を判断することが可能である。
【０００４】
誤差拡散法を用いれば、画像に応じて適切な密度でドットを形成することで高画質な画像を表示することができるものの、一方では、ドット形成の有無を判断する度に階調誤差を周辺画素に拡散しなければならならず、画像を構成する画素数が多くなると処理に時間がかかって迅速に画像を表現することが困難となる。このような問題を解決するために、本願の発明者は、所定数ずつの隣接する画素をユニットにまとめて、ユニット単位で誤差を拡散しながらドット形成の有無を判断する技術を開発済みである（特許文献１）。
【０００５】
【特許文献１】
特開２００１−１８５７８９号公報
【０００６】
【発明が解決しようとする課題】
しかし、ドット形成有無の判断をユニット単位で行う場合、それぞれのユニットについては同じような処理が繰り返されることになる。このため、複数のユニットに亘って、ユニット内の同じ位置の画素にドットが形成されて、これが周期的なパターンとして視認されることとなり、画質を悪化させるおそれがある。また、ユニット内で各画素にドットが均等に形成されず、特定の画素位置に偏って形成されると、周期的なパターンの発生には至らずとも、例えばドットを形成する印字パスが特定のパスに偏ってしまい色ムラが発生するといったことにより、画質が悪化してしまう場合がある。更に、ドット形成の有無をユニット単位で判断した場合に、こうした画質の悪化が懸念されるという問題は、誤差拡散法に限らず他の周知な方法を用いた場合にも同様に生じ得る。
【０００７】
この発明は、従来技術における上述の課題を解決するためになされたものであり、ドット形成の有無をユニット単位で判断することにより迅速な判断を可能としながら、画質の悪化を回避して高画質な画像を表示可能な技術の提供を目的とする。
【０００８】
【課題を解決するための手段およびその作用・効果】
上述の課題の少なくとも一部を解決するため、本発明の画像処理装置は、次の構成を採用した。すなわち、
画像を構成する各画素についての階調値によって表現された画像データを、該各画素についてのドット形成の有無を表すドットデータに変換する画像処理装置であって、
互いに隣接する前記画素を所定の複数個ずつユニットとしてまとめ、前記画像データを該ユニット単位で前記ドットデータに変換するドットデータ変換手段と、
前記変換されたユニットを構成する少なくとも一部の画素については、該ユニット内での画素位置を識別可能な状態でドット形成の有無を記憶するドット有無記憶手段と
を備え、
前記ドットデータ変換手段は、
前記ユニット内でドット形成の有無を判断しようとする着目画素を順次設定する着目画素設定手段と、
前記変換済みのユニット内でドット形成の有無が記憶されている画素の中から、前記着目画素の画素位置に対して所定位置にある画素についてのドット形成有無を検出するドット形成有無検出手段と、
前記着目画素の階調値に基づいて、該着目画素についてのドット形成の有無を判断するドット形成判断手段と
を有するとともに、
前記ドット形成判断手段は、前記階調値に加えて前記ドット形成有無の検出結果も考慮しながら前記着目画素についてのドット形成の有無を判断することにより、前記ユニット内で前記所定位置にある画素に形成されるドットの全ドットに対する割合が所定範囲内に抑制された状態で、ドット形成の有無を判断する手段であることを特徴とする。
【０００９】
また、上記の画像処理装置に対応する本発明の画像処理方法は、
画像を構成する各画素についての階調値によって表現された画像データを、該各画素についてのドット形成の有無を表すドットデータに変換する画像処理方法であって、
互いに隣接する前記画素を所定の複数個ずつユニットとしてまとめ、前記画像データを該ユニット単位で前記ドットデータに変換する工程（Ａ）と、
前記変換されたユニットを構成する少なくとも一部の画素については、該ユニット内での画素位置を識別可能な状態でドット形成の有無を記憶する工程（Ｂ）と
を備え、
前記工程（Ａ）は、更に、
前記ユニット内でドット形成の有無を判断しようとする着目画素を順次設定する下位工程（Ａ−１）と、
前記変換済みのユニット内でドット形成の有無が記憶されている画素の中から、前記着目画素の画素位置に対して所定位置にある画素についてのドット形成有無を検出する下位工程（Ａ−２）と、
前記着目画素の階調値に基づいて、該着目画素についてのドット形成の有無を判断する下位工程（Ａ−３）と
を有するとともに、
前記下位工程（Ａ−３）は、前記階調値に加えて前記ドット形成有無の検出結果も考慮しながら前記着目画素についてのドット形成の有無を判断することにより、前記ユニット内で前記所定位置にある画素に形成されるドットの全ドットに対する割合が所定範囲内に抑制された状態で、ドット形成の有無を判断する工程であることを特徴とする。
【００１０】
かかる画像処理装置および画像処理方法においては、画素を所定の複数個ずつユニットとしてまとめ、画像データをユニット単位でドットデータに変換するに際して、既に変換したユニット内でのドットの形成状況を検出し、検出結果を考慮しながらドットの形成有無を判断する。変換済みのユニット内でのドット形成状況は、次のようにして検出する。先ず、変換されたユニットを構成する少なくとも一部の画素について、該ユニット内での画素位置を識別可能な状態でドット形成の有無を記憶しておく。次いで、ユニット内でドット形成有無を判断しようとする着目画素を設定し、ドット形成有無を記憶しておいた画素の中から、該着目画素の画素位置に対して所定位置にある画素についてのドット形成有無を検出する。ドット形成の有無を検出する画素は、着目画素に対して所定位置にあればよい。従って、複数の画素について検出することとしてもよく、また、検出する画素位置は、着目画素の画素位置に応じて異なった画素位置とすることも可能である。
【００１１】
こうして、着目画素についてのドット形成有無を判断するに際しては、既に変換したユニット内でのドット形成状況を検出し、検出結果を考慮することにより、ユニット内で着目画素に対して所定位置にある画素に形成されるドットの、全ドットに対する割合が所定範囲内に抑制された状態で、ドットの形成有無を判断する。
【００１２】
こうすれば、画像データをユニット単位でドットデータに変換した場合でも、複数のユニットに亘ってドットが一定のパターンで形成され、その結果、周期的なパターンが視認されて画質が悪化することを確実に防止することが可能となる。あるいは、ユニット内でドットが形成される画素位置が偏る結果、ドットを形成する印字パスが特定のパスに偏って、画質が悪化することを確実に回避することが可能となる。
【００１３】
こうした画像処理装置では、ユニット内で着目画素と同じ画素位置にある画素についてのドット形成有無を検出することとして、これらの画素に所定数以上のドットが形成されている場合には、着目画素についてのドット形成を抑制することとしても良い。
【００１４】
こうすれば、ユニット内で着目画素と同じ画素位置にドットが偏って形成されることを回避することができる。その結果、複数ユニットに亘ってドットが一定のパターンで形成されたり、あるいはユニット内で特定の画素位置にドットが偏って形成されることに起因して、画質が悪化することを回避することが可能となる。
【００１５】
あるいは、ユニット内で着目画素とは異なった所定の画素位置にある画素についてのドット形成有無を検出することとして、これらの画素に所定数以上のドットが形成されている場合には、着目画素についてのドット形成を促進することとしても良い。
【００１６】
着目画素とは異なった所定の画素位置に所定数以上のドットが形成された場合、着目画素にドットを形成してやれば、その反射の作用として、所定の画素位置にはドットが形成され難くなる。従って、このようにしても、複数ユニットに亘ってドットが一定のパターンで形成されたり、あるいはユニット内で特定の画素位置にドットが偏って形成されることに起因して、画質が悪化することを回避することが可能である。
【００１７】
こうした画像処理装置においては、ユニットを構成する各画素についてのドット形成の有無を、いわゆる誤差拡散法を用いて判断することとして、かかる判断に際して参照される誤差拡散法の閾値を、前記所定の画素位置についてのドット形成有無の検出結果に応じて変更することとしても良い。
【００１８】
誤差拡散法の閾値を変更すれば、それに応じてドットの形成され易さを制御することができるので、前記所定の画素位置についてのドット形成有無の検出結果に基づいて、ドットの形成割合を容易に制御することが可能である。また、誤差拡散法を用いてドット形成の有無を判断しておけば、着目画素についてのドット形成有無を、所定画素位置での検出結果に応じて制御した場合でも、そのことによる誤差を速やかに解消することができるので好ましい。
【００１９】
こうした画像処理装置においては、互いに隣接する４画素ずつをユニットとしてまとめることとして、ユニット内で着目画素と同じ画素位置に形成されるドットの全ドットに対する割合が１０％〜４０％の範囲内に入る状態で、該着目画素についてのドット形成の有無を判断することとしても良い。
【００２０】
ユニットが４つの画素から構成されている場合、画素位置によらず均等な割合でドットが形成されるものとすれば、それぞれの画素位置に形成されるドットの割合は２５％前後となる。経験上、この割合を１０％〜４０％の範囲に（より好ましくは１５％〜３５％の範囲に）抑制しておけば、画質の悪化を回避することが可能である。
【００２１】
また、上述した画像処理装置は、印刷媒体上にドットを形成して画像を印刷する印刷装置に好適に適用することができる。すなわち、本発明の画像処理装置は、ユニット単位で変換することにより、画像データを迅速にドットデータに変換することができる。しかも、変換済みのユニットにおける所定の画素位置でのドット形成状況を検出することで、ドットが一定のパターンで形成されたり、ユニット内の特定の画素位置に偏って形成されることを回避することができる。従って、こうした画像処理装置を印刷装置に適用すれば、画像データを迅速にドットデータに変換することで、印刷に要する時間を短縮しながら、画質の悪化を回避することが可能となるので好ましい。
【００２２】
また、本発明は、上述した画像処理方法を実現するプログラムをコンピュータに読み込ませることにより、コンピュータを用いて実現することも可能である。従って、本発明は次のようなプログラム、あるいはプログラムを記憶した記録媒体としての態様も含んでいる。すなわち、上述の画像処理方法に対応する本発明のプログラムは、
画像を構成する各画素についての階調値によって表現された画像データを、該各画素についてのドット形成の有無を表すドットデータに変換する画像処理方法を、コンピュータを用いて実現するためのプログラムであって、
互いに隣接する前記画素を所定の複数個ずつユニットとしてまとめ、前記画像データを該ユニット単位で前記ドットデータに変換する機能（Ａ）と、
前記変換されたユニットを構成する少なくとも一部の画素については、該ユニット内での画素位置を識別可能な状態でドット形成の有無を記憶する機能（Ｂ）と
を実現するとともに、
前記機能（Ａ）は、更に、
前記ユニット内でドット形成の有無を判断しようとする着目画素を順次設定する機能（Ａ−１）と、
前記変換済みのユニット内でドット形成の有無が記憶されている画素の中から、前記着目画素の画素位置に対して所定位置にある画素についてのドット形成有無を検出する機能（Ａ−２）と、
前記着目画素の階調値に基づいて、該着目画素についてのドット形成の有無を判断する機能（Ａ−３）と
を有しており、
前記機能（Ａ−３）は、前記階調値に加えて前記ドット形成有無の検出結果も考慮しながら前記着目画素についてのドット形成の有無を判断することにより、前記ユニット内で前記所定位置にある画素に形成されるドットの全ドットに対する割合が所定範囲内に抑制された状態で、ドット形成の有無を判断する機能であることを特徴とする。
【００２３】
また、上述した画像処理方法に対応する本発明の記録媒体は、
画像を構成する各画素についての階調値によって表現された画像データを、該各画素についてのドット形成の有無を表すドットデータに変換する画像処理方法を実現するためのプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
互いに隣接する前記画素を所定の複数個ずつユニットとしてまとめ、前記画像データを該ユニット単位で前記ドットデータに変換する機能（Ａ）と、
前記変換されたユニットを構成する少なくとも一部の画素については、該ユニット内での画素位置を識別可能な状態でドット形成の有無を記憶する機能（Ｂ）と
をコンピュータを用いて実現するとともに、
前記機能（Ａ）は、更に、
前記ユニット内でドット形成の有無を判断しようとする着目画素を順次設定する機能（Ａ−１）と、
前記変換済みのユニット内でドット形成の有無が記憶されている画素の中から、前記着目画素の画素位置に対して所定位置にある画素についてのドット形成有無を検出する機能（Ａ−２）と、
前記着目画素の階調値に基づいて、該着目画素についてのドット形成の有無を判断する機能（Ａ−３）と
を有しており、
前記機能（Ａ−３）は、前記階調値に加えて前記ドット形成有無の検出結果も考慮しながら前記着目画素についてのドット形成の有無を判断することにより、前記ユニット内で前記所定位置にある画素に形成されるドットの全ドットに対する割合が所定範囲内に抑制された状態で、ドット形成の有無を判断する機能であることを特徴とする。
【００２４】
かかるプログラム、あるいは記録媒体に記憶されているプログラムをコンピュータに読み込ませ、上述の各種機能を該コンピュータに実行させれば、画質の悪化を招くことなく、画像データをユニット単位でドットデータに迅速に変換することが可能となる。
【００２５】
【発明の実施の形態】
本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って以下に説明する。
Ａ．実施の形態：
Ｂ．装置構成：
Ｃ．画像データ変換処理の概要：
Ｄ．第１実施例：
Ｄ−１．ユニット単位で行う階調数変換処理：
Ｄ−２．ユニット内多値化処理：
Ｄ−３．第１実施例のユニット内多値化処理：
Ｄ−４．変形例：
Ｅ．第２実施例：
Ｅ−１．第２実施例のユニット内多値化処理：
Ｅ−２．第２実施例の変形例：
【００２６】
Ａ．発明の概要：
実施例の詳細な説明を開始する前に、理解の便宜から、本発明の概要について簡単に説明しておく。図１は、印刷システムを例にとって、本発明の概要を示した説明図である。図１に示した印刷システムは、画像処理装置としてのコンピュータ１０と、カラープリンタ２０等から構成されている。コンピュータ１０は、デジタルカメラやカラースキャナなどの画像機器からＲＧＢ各色の階調値によって表現されたカラー画像データを受け取ると、該画像データを、カラープリンタ２０で印刷可能な各色ドットの形成有無により表現された印刷データに変換する。かかる画像データの変換は、プリンタドライバ１２と呼ばれる専用のプログラムを用いて行われる。尚、ＲＧＢ各色によるカラー画像データは、各種アプリケーションプログラムを用いてコンピュータ１０で作成することもできる。
【００２７】
プリンタドライバ１２は、解像度変換モジュール，色変換モジュール，階調数変換モジュール１４，インターレースモジュールといった複数のモジュールから構成されている。これら各モジュールで行われる処理については後述する。このうち、階調数変換モジュール１４では、画像データをドット形成の有無により表現されたデータに変換する処理を行っている。また、本実施例の階調数変換モジュールでは、処理を迅速化するため、次のようにユニット単位の処理を行っている。すなわち、隣接する複数個の画素をまとめてユニットを生成し、各画素についてのドット形成有無の判断をユニット単位でまとめて行う。ドット形成有無の判断をユニット単位で行う方法については後述する。
【００２８】
図１中で、階調数変換モジュール１４を表す枠の下方に、矢印で示した概念図は、階調数変換モジュール１４において画像データがドットデータに変換されている様子を示したものである。概念図中で破線で示した小さな正方形は画素を模式的に示したものである。これら４つの画素で１つのユニットを構成している。図中で細かい斜線を付して示したユニットは、処理中のユニット、すなわち画像データをドットデータに変換中のユニットを示したものである。また、粗い斜線を付して示した領域は、ドット形成有無が判断されてドットデータに変換された領域を示している。ドット形成有無の判断をユニット単位で行う場合、各ユニットについては同様な処理が行われる。このため、特に画像データの階調値があまり変化しない領域を処理した場合などには、複数のユニットに亘って一定のパターンでドットが形成されるおそれがある。一定のパターンでドットが形成された領域が発生すると、これが視認されて画質の悪化を招くことが懸念される。
【００２９】
図１中の概念図では、ドットが一定のパターンで形成される一例として、連続するユニット内の同じ画素位置にドットが形成される場合を示している。図示されているように、処理中のユニット（細かい斜線を付したユニット）の左側には、左上隅の画素にドットが形成されたユニットが２つ連続している。仮に、処理中のユニットでも左上隅の画素にドットが形成されると、連続して３つのユニットで同じ位置の画素にドットが形成されることになり、これがパターンとして視認されて画質が悪化するおそれがある。もちろん、ドットが一定のパターンで形成される例としては、連続するユニット内の同じ画素位置にドットが形成される場合に限られず、複数のユニットを周期として一定のパターンでドットが形成される場合も起こり得る。
【００３０】
この様な問題の発生を回避するために、図１に示した印刷システムにおける階調数変換モジュール１４では、既に処理したユニットについてドットを形成すると判断した画素を、階調数変換結果記憶部に記憶しておく。ユニット単位でドット形成有無を判断するに際しては、階調数変換結果記憶部から判断結果を読み出して、ドットが一定のパターンで形成されることを回避しながら判断していく。例えば、図１中の概念図に示した例では、連続したユニットで同じ画素位置にドットが形成されているから、同じ位置の画素に連続してドットが形成されないようにしながら、処理ユニットについてのドット形成有無を判断していく。このように、視認され易いパターンでドットが形成されることを回避しながらドット形成の有無を判断する。こうすれば、ユニット単位でドット形成の有無を判断することによって迅速な処理を行いながら、画質を悪化させることなく高画質な画像を印刷することが可能となる。以下では、このような画像処理について、実施例に基づき詳細に説明する。
【００３１】
Ｂ．装置構成：
図２は、本実施例の画像処理装置としてのコンピュータ１００の構成を示す説明図である。コンピュータ１００は、ＣＰＵ１０２を中心に、ＲＯＭ１０４やＲＡＭ１０６などを、バス１１６で互いに接続して構成された周知のコンピュータである。
【００３２】
コンピュータ１００には、フレキシブルディスク１２４やコンパクトディスク１２６のデータを読み込むためのディスクコントローラＤＤＣ１０９や、周辺機器とデータの授受を行うための周辺機器インターフェースＰ／ＩＦ１０８、ＣＲＴ１１４を駆動するためのビデオインターフェースＶ／ＩＦ１１２等が接続されている。Ｐ／ＩＦ１０８には、後述するカラープリンタ２００や、ハードディスク１１８等が接続されている。また、デジタルカメラ１２０やカラースキャナ１２２等をＰ／ＩＦ１０８に接続すれば、デジタルカメラ１２０やカラースキャナ１２２で取り込んだ画像を印刷することも可能である。また、ネットワークインターフェースカードＮＩＣ１１０を装着すれば、コンピュータ１００を通信回線３００に接続して、通信回線に接続された記憶装置３１０に記憶されているデータを取得することもできる。
【００３３】
図３は、第１実施例のカラープリンタ２００の概略構成を示す説明図である。カラープリンタ２００はシアン，マゼンタ，イエロ，ブラックの４色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら４色のインクに加えて、染料濃度の低いシアン（淡シアン）インクと染料濃度の低いマゼンタ（淡マゼンタ）インクとを含めた合計６色のインクドットを形成可能なインクジェットプリンタを用いることもできる。尚、以下では場合によって、シアンインク，マゼンタインク，イエロインク，ブラックインク，淡シアンインク，淡マゼンタインクのそれぞれを、Ｃインク，Ｍインク，Ｙインク，Ｋインク，ＬＣインク，ＬＭインクと略称することがあるものとする。
【００３４】
カラープリンタ２００は、図示するように、キャリッジ２４０に搭載された印字ヘッド２４１を駆動してインクの吐出およびドットの形成を行う機構と、このキャリッジ２４０をキャリッジモータ２３０によってプラテン２３６の軸方向に往復動させる機構と、紙送りモータ２３５によって印刷用紙Ｐを搬送する機構と、ドットの形成やキャリッジ２４０の移動および印刷用紙の搬送を制御する制御回路２６０とから構成されている。
【００３５】
キャリッジ２４０には、Ｋインクを収納するインクカートリッジ２４２と、Ｃインク，Ｍインク，Ｙインクの各種インクを収納するインクカートリッジ２４３とが装着されている。キャリッジ２４０にインクカートリッジ２４２，２４３を装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド２４１の下面に設けられた各色毎のインク吐出用ヘッド２４４ないし２４７に供給される。各色毎のインク吐出用ヘッド２４４ないし２４７には、４８個のノズルＮz が一定のノズルピッチｋで配列されたノズル列が１組ずつ設けられている。
【００３６】
制御回路２６０は、ＣＰＵ２６１と、ＲＯＭ２６２、ＲＡＭ２６３等から構成されている。制御回路２６０は、キャリッジモータ２３０と紙送りモータ２３５とを適切に駆動することを通じて、キャリッジ２４０の主走査と副走査とを制御するとともに、コンピュータ１００から供給される印刷データに基づいて、各ノズルから適切なタイミングでインク滴を吐出する。こうして、制御回路２６０の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ２００はカラー画像を印刷することができる。
【００３７】
尚、各色のインク吐出ヘッドからインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインクを吐出する方式や、インク通路に配置したヒータでインク通路内に泡（バブル）を発生させてインク滴を吐出する方法などを用いることができる。また、インクを吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタを使用することも可能である。
【００３８】
更には、吐出するインク滴の大きさを制御したり、あるいは一度に複数のインク滴を吐出して、吐出するインク滴の数を制御することにより、印刷用紙上に形成されるインクドットの大きさを制御可能な、いわゆるバリアブルドットプリンタを使用することもできる。
【００３９】
以上のようなハードウェア構成を有するカラープリンタ２００は、キャリッジモータ２３０を駆動することによって、各色のインク吐出用ヘッド２４４ないし２４７を印刷用紙Ｐに対して主走査方向に移動させ、また紙送りモータ２３５を駆動することによって、印刷用紙Ｐを副走査方向に移動させる。制御回路２６０は、印刷データに従って、キャリッジ２４０の主走査および副走査を繰り返しながら、適切なタイミングでノズルを駆動してインク滴を吐出することによって、カラープリンタ２００は印刷用紙上にカラー画像を印刷している。
【００４０】
Ｃ．画像データ変換処理の概要：
図４は、本実施例の画像処理装置としてのコンピュータ１００が、受け取った画像データに所定の画像処理を加えることによって、画像データを印刷データに変換する処理の流れを示すフローチャートである。かかる処理は、コンピュータ１００のオペレーティングシステムがプリンタドライバ１２を起動することによって開始される。以下、図４に従って、本実施例の画像データ変換処理について簡単に説明する。
【００４１】
プリンタドライバ１２は、画像データ変換処理を開始すると、先ず初めに、変換すべきＲＧＢカラー画像データの読み込みを開始する（ステップＳ１００）。次いで、取り込んだ画像データの解像度を、カラープリンタ２００が印刷するための解像度に変換する（ステップＳ１０２）。カラー画像データの解像度が印刷解像度よりも低い場合は、線形補間を行うことで隣接する画像データ間に新たなデータを生成し、逆に印刷解像度よりも高い場合は一定の割合でデータを間引くことによって、画像データの解像度を印刷解像度に変換する。
【００４２】
こうして解像度を変換すると、カラー画像データの色変換処理を行う（ステップＳ１０４）。色変換処理とは、Ｒ，Ｇ，Ｂの階調値の組み合わせによって表現されているカラー画像データを、Ｃ，Ｍ，Ｙ，Ｋなどのカラープリンタ２００で使用する各色の階調値の組み合わせによって表現された画像データに変換する処理である。色変換処理は、色変換テーブルと呼ばれる３次元の数表を参照することで迅速に行うことができる。
【００４３】
プリンタドライバ１２は、色変換処理に続いて階調数変換処理を開始する（ステップＳ１０６）。階調数変換処理とは次のような処理である。色変換処理によって、ＲＧＢ画像データはＣ，Ｍ，Ｙ，Ｋ各色の階調データに変換される。これら各色の階調データは、階調値０から２５５の２５６階調を有するデータである。これに対し、本実施例のカラープリンタ２００は、「ドットを形成する」，「ドットを形成しない」のいずれかの状態しか採り得ない。そこで、２５６階調を有する各色の階調データを、カラープリンタ２００が表現可能な２階調で表現された画像データに変換する必要がある。このような階調数の変換を行う処理が階調数変換処理である。後述するように、本実施例のプリンタドライバ１２は、画素を所定数ずつユニットにまとめ、ユニット単位で階調数変換処理を行うことによって迅速な処理を可能としている。また、処理済みのユニットについては、ドットを形成すると判断した画素を記憶しておき、このデータを反映させながら階調数変換を行う。こうすることで、ユニット単位で階調数変換処理を行った場合に懸念される、ドットが一定のパターンで形成される現象が発生することを確実に回避することが可能となっている。階調数変換処理については、後ほど詳細に説明する。
【００４４】
こうして階調数変換処理を終了したら、プリンタドライバはインターレース処理を開始する（ステップＳ１０８）。インターレース処理とは、ドットの形成有無を表す形式に変換された画像データ（ドットデータ）を、ドットの形成順序を考慮しながらカラープリンタ２００に転送すべき順序に並べ替える処理である。プリンタドライバ１２は、インターレース処理を行って最終的に得られた画像データを、印刷データとしてカラープリンタ２００に出力する（ステップＳ１１０）。カラープリンタ２００は、印刷データに従って、各色のインクドットを印刷媒体上に形成する。その結果、画像データに対応したカラー画像が印刷媒体上に印刷される。
【００４５】
Ｄ．第１実施例：
以下、図４に示した画像データ変換処理の中で行われる第１実施例の階調数変換処理について説明する。前述したように、本実施例の階調数変換処理では、複数の画素をユニットにまとめて、階調数変換処理をユニット単位で行っている。そこで、第１実施例の階調数変換処理について説明するための準備として、先ず、階調数変換処理をユニット単位で行う方法について説明し、その後、第１実施例の階調数変換処理において、処理済みのユニットでの判断結果を、ドット形成有無の判断に反映させる処理について説明する。
【００４６】
Ｄ−１．ユニット単位で行う階調数変換処理：
図５は、ユニット単位で行う階調数変換処理の流れを示すフローチャートである。この処理は、コンピュータ１００のＣＰＵ１０２によって行われる。尚、本実施例のカラープリンタ２００は、前述したようにＣ，Ｍ，Ｙ，Ｋの４色のインクドットを形成可能なプリンタであり、図５に示す処理も各色毎に行っている。しかし、以下では説明が煩雑となることを避けるために、色を特定せずに説明することとして、特段の明示がない限り、色を特定せずに説明した場合は、各色について同様な処理が行われることを意味するものとする。
【００４７】
ユニット単位の階調数変換処理を開始すると、先ず初めに、処理するユニットの位置を設定する（ステップＳ２００）。ユニット単位で行う階調数変換処理では、所定の複数個の隣接する画素をユニットとしてまとめ、各画素にドットを形成するか否かの判断をユニット単位で行う。そこで、ユニット単位の階調数変換処理を開始すると、先ず初めに、画像中でドットの形成有無を判断しようとするユニット（処理ユニット）の位置を設定する処理を行う。
【００４８】
図６は、隣接する所定の複数個の画素をまとめて、処理ユニットの位置を設定している様子を概念的に示した説明図である。図６中に、複数表示されている小さな正方形は、画素を模式的に表示したものである。図示されているように、画像は格子状に配列された複数の画素によって構成されている。図６（ａ）に示した例では、縦横２列ずつに並んだ隣接する４つの画素をまとめて処理ユニットを設定している。図６（ａ）中で、４つの画素を囲む太い破線は、これら画素が処理ユニットとして設定されていることを模式的に示したものである。説明の便宜上、ユニットを構成する４つの画素の中で、左上の画素を「Ｐa 」、右上の画素を「Ｐb 」、左下の画素を「Ｐc 」、右下の画素を「Ｐd 」と呼んで区別するものとする。尚、以下では、ユニットは縦横２列に並んだ４つの画素で構成されているものとして説明するが、もちろん、このような構成のユニットに限定されるものではない。例えば、図６（ｂ）に示すような隣接する４つの画素をまとめることによって処理ユニットを設定しても良い。また、処理ユニットとしてまとめる画素の個数も４つに限られるものではなく、例えば、図６（ｃ）、図６（ｄ）に示すように２つの画素を処理ユニットとして設定しても構わない。
【００４９】
処理ユニットを設定したら、続いてユニット内の各画素についての画像データおよび拡散誤差の読み込みを行う（図５のステップＳ２０２）。ここで読み込む画像データは、前述した色変換処理（図４のステップＳ１０４）によって色変換して得られたＣ，Ｍ，Ｙ，Ｋ各色の階調データである。また、拡散誤差とは、階調数を変換することにより生じた階調誤差が、周辺のユニットから処理ユニットの各画素に拡散されてきた誤差である。画像データがＣ，Ｍ，Ｙ，Ｋの各色毎の階調データであることから、階調誤差はこれら各色毎に発生し、従って拡散誤差もこれら各色毎の階調データとなっている。階調数を変換することに伴って階調誤差が発生し、発生した誤差が拡散誤差として周辺の画素に拡散される様子については後述する。
【００５０】
ここでは、図６（ａ）に示すように、処理ユニットは画素Ｐa 、画素Ｐb 、画素Ｐc 、画素Ｐd の４つの画素で構成されているとしているから、図５のステップＳ２０２の処理では、それぞれの画素について、画像データＤＴa 、ＤＴb 、ＤＴc 、ＤＴd および拡散誤差ＥＤa 、ＥＤb 、ＥＤc 、ＥＤd が読み込まれることになる。処理ユニットについて読み込んだこれらのデータは、コンピュータ１００のＲＡＭ１０６に記憶される。
【００５１】
こうして各画素の画像データおよび拡散誤差を読み込んだら、処理ユニットを構成する各画素について、ドット形成の有無を判断する処理を開始する（ステップＳ２０４）。ここでは、図６（ａ）に示したように処理ユニットは４つの画素で構成されているとしているから、ステップＳ２０４の処理ではこれら４つの画素について所定の順序でドット形成の有無を判断していく。尚、本明細書中では、このようにユニット内の各画素についてドット形成の有無を判断する処理を、「ユニット内多値化処理」と呼ぶことがあるものとする。ユニット内多値化処理の詳細な内容については後述する。
【００５２】
処理ユニットを構成する各画素についてのドット形成有無の判断を終了したら、判断に伴って処理ユニット内で生じた階調誤差を、周辺のユニットに拡散する処理を行う（ステップＳ２０６）。処理ユニット内で生じた階調誤差とは、処理ユニット全体で表現すべき画像データの階調値と、該ユニット内の各画素にドットを形成することによって実際に表現された階調値との偏差を表す誤差である。処理ユニットで生じる階調誤差を算出する方法については、ユニット内多値化処理の説明の中で説明する。ステップＳ２０６においては、この偏差を示す階調値を、処理ユニットで生じた階調誤差として周辺の未処理のユニットに拡散させる処理を行う。
【００５３】
図７は、処理ユニットで生じた階調誤差を、周辺の未処理のユニットに拡散させる様子を概念的に示した説明図である。図７中に示した複数の小さな正方形は、それぞれ画素を模式的に表示したものである。また、太い破線で示した大きな正方形は処理ユニットを示しており、細い破線で示した大きな正方形は、処理ユニットに隣接する未処理のユニットを示している。処理ユニットで生じた階調誤差は、周辺の未処理ユニットを構成する画素に所定の割合で拡散する。図７中で処理ユニットから周辺の６つの画素に伸びる黒抜きの矢印は、処理ユニットで生じた階調誤差を、これら６つの画素に所定の割合で拡散していることを模式的に示している。
【００５４】
図８は、処理ユニットで生じた階調誤差を、処理ユニット周辺の未処理のユニットを構成する画素に拡散させる割合が設定されている様子を例示したものである。図８中で、太い実線で示した大きな正方形は処理ユニットを表したものであり、処理ユニットに隣接して細い破線で示した大きな正方形は、処理ユニット周辺の未処理のユニットを示したものである。これら未処理のユニットの中に細い実線で示した複数の小さな正方形は、処理ユニットからの誤差が拡散される画素を表示したものである。
【００５５】
図８（ａ）に示した例では、処理ユニットの右側にある２つの画素には、処理ユニットで生じた階調誤差が１／８の割合でそれぞれ拡散され、処理ユニットの下側にある２つの画素にも同様に、階調誤差が１／８の割合でそれぞれ拡散される。また、処理ユニットの左下の画素あるいは右下の画素には、階調誤差が１／４の割合でそれぞれ拡散される。このような割合で階調誤差を拡散させれば、処理ユニットの周辺のユニットに均等に、それぞれ階調誤差の１／４の割合で拡散されることになる。また、図８（ｂ）に示した例では、処理ユニットで生じた階調誤差が、処理ユニット周辺のユニットを構成するすべての画素に、同じ割合で拡散される。もちろん、同じユニットに拡散する誤差をそのユニットの１つの画素にまとめて拡散するようにしても良い。
【００５６】
図５のステップＳ２０６においては、以上のようにして、処理ユニットで生じた階調誤差を周辺のユニットに拡散させる。処理ユニットについて、上述したすべての処理を終了したら、画像を構成する全てのユニットについて処理を終了したか否かを判断し（ステップＳ２０８）、未処理のユニットが残っていればステップＳ２００に戻って続く一連の処理を繰り返す。こうして、すべてのユニットについての処理を完了したら、ユニット単位の階調数変換処理を終了する。
【００５７】
以上に説明したユニット単位で階調数変換処理を行えば、画素毎に処理した場合に比べて、以下のような利点を得ることができる。すなわち、階調数変換処理を画素毎に行う場合は、１つの画素についてのドット形成有無を判断する度に、その画素に対応付けて記憶されている拡散誤差を読み出さなければならず、また、ドット形成有無の判断によって生じた階調誤差を周辺の未判断画素に誤差を拡散しなければならない。このため、階調数変換処理を画素毎に行うと、処理時間が長くなってしまう傾向にある。これに対して、階調数変換処理をユニット単位で行った場合は、ユニット単位で画像データを読み出し、階調誤差を拡散させた後、拡散誤差をユニット単位でメモリに書き込むことができる。こうしてデータの読み出しおよび書き込みをユニット単位でまとめて行えば、処理に要する時間を短縮化することが可能である。
【００５８】
Ｄ−２．ユニット内多値化処理：
上述したユニット単位の階調数変換処理で行われるユニット内多値化処理（図５のステップＳ２０４）について説明する。図９は、ユニット内多値化処理の流れを示したフローチャートである。以下、フローチャートに従って説明する。
【００５９】
ユニット内多値化処理を開始すると、先ず初めに、処理ユニットを構成する画素の中から、ドット形成の有無を判断する画素（着目画素）を１つ設定する（ステップＳ３００）。前述したようにユニットは複数の画素から構成されているので、これら複数の画素について所定の順序で１画素ずつドット形成の有無を判断することとして、着目画素を１つ選択する。ここでは、図６（ａ）に示したユニットを構成する４つの画素を、左上にある画素から右下の画素に向かって画素Ｐa 、画素Ｐb 、画素Ｐc 、画素Ｐd の順番にドット形成有無を判断することとして、ステップＳ３００では、先ず初めに、左上隅にある画素Ｐa を着目画素として設定する。
【００６０】
次いで、設定した着目画素（ここでは、画素Ｐa ）についての補正データＣx を算出する（ステップＳ３０２）。補正データＣx は、着目画素の画像データと着目画素に拡散されて記憶されている拡散誤差とを加算することによって求めることができる。処理ユニットを構成する各画素についての画像データおよび拡散誤差は、図５に示した階調数変換処理中のステップＳ２０２において既に読み込まれているので、ユニット内多値化処理の数轍鮒Ｓ３０２においては、これらのデータの中から着目画素の画像データと拡散誤差とを加算して補正データＣx を算出する。
【００６１】
着目画素Ｐa の補正データＣx を算出したら、得られた補正データＣx と所定の閾値ｔｈとの大小関係を判断する（ステップＳ３０４）。そして、補正データＣx の方が大きければ着目画素（ここでは画素Ｐa ）にドットを形成すると判断し（ステップＳ３３０６）、そうでなければ、着目画素にはドットを形成しないと判断する（ステップＳ３０８）。判断の結果は、各画素についての判断結果を示す変数に蓄えられる。
【００６２】
こうして着目画素についてのドット形成有無を判断したら、判断に伴って着目画素に生じた階調誤差を算出する（ステップＳ３１０）。階調誤差は、ドットを形成したこと、あるいはドットを形成しなかったことによって着目画素に表現される階調値（以下では、この階調値を結果値と呼ぶ）を、着目画素の補正データＣx から減算することによって算出することができる。
【００６３】
着目画素で生じた階調誤差を算出したら、処理ユニット内の全画素の処理を終了したか否かを判断し（ステップＳ３１２）、未処理の画素が残っている場合は（ステップＳ３１２：ｎｏ）、これら未処理の画素中で着目画素周辺にある画素に誤差を拡散させる処理を行う（ステップＳ３１４）。この処理について、図１０を参照しながら説明する。
【００６４】
図１０は、処理ユニット内の画素から着目画素を１つずつ選択してドット形成の有無を判断することにより、ドット形成の有無をユニット単位で判断している様子を模式的に示した説明図である。図中の４つの正方形は、処理ユニットを構成する画素Ｐa 、画素Ｐb 、画素Ｐc 、画素Ｐd をそれぞれ示している。また、画素Ｐa を示す正方形の中に示したＤＴa およびＥＤa は、画素Ｐa に対応付けて、画像データＤＴa と拡散誤差ＥＤa とがＲＡＭ１０６に読み込まれていることを概念的に示したものである。同様に、画素Ｐb には画像データＤＴb と拡散誤差ＥＤb とが、画素Ｐc には画像データＤＴc と拡散誤差ＥＤc とが、画素Ｐd には画像データＤＴd と拡散誤差ＥＤd とが対応付けられて、それぞれＲＡＭ１０６に記憶されている。
【００６５】
前述したように、着目画素は、先ず初めはこれら４つの画素の中の画素Ｐa に設定されている。画素Ｐa についての画像データと拡散誤差とを読み出して補正データＣx を算出し、閾値ｔｈと比較することによって画素Ｐa についてのドット形成の有無を判断する。画素Ｐa についてドット形成の有無を判断した時点では、図１０（ａ）に示すように、同じユニット内には画素Ｐb と画素Ｐc と画素Ｐd の３つの画素が未判断画素として残っている。そこで、画素Ｐa で生じた階調誤差を、これら３つの画素に１／３ずつ均等に分配して、これら誤差を、各画素毎に記憶されている拡散誤差に加算する処理を行う。例えば画素Ｐb には、図１０（ａ）に示すように、既に拡散誤差ＥＤb が対応付けて記憶されている。画素Ｐa で生じた階調誤差は、その１／３の階調値が画素Ｐb に分配されて、拡散誤差ＥＤb に加算される。その結果、画素Ｐb に対応づけて記憶されていた拡散誤差ＥＤb は、画素Ｐa からの誤差が加算された新たな拡散誤差ＥＤb に更新される。
【００６６】
他の画素Ｐc および画素Ｐd についても同様な処理を行う。簡単に説明すると、画素Ｐa からの誤差が画素Ｐc に拡散されると、画素Ｐc に記憶されていた拡散誤差ＥＤc と画素Ｐa からの誤差とが加算され、新たな拡散誤差ＥＤc として画素Ｐc に対応付けて記憶される。また、画素Ｐd についても同様に、画素Ｐd に記憶されていた拡散誤差ＥＤd と画素Ｐa からの誤差とが加算され、新たな拡散誤差ＥＤd として画素Ｐd に対応付けて記憶される。図１０（ａ）中で画素Ｐa から他の３つ画素に向かって表示されている白抜きの矢印は、画素Ｐa で生じた誤差がこれら３つの画素に拡散されることを模式的に示したものである。尚、階調誤差は、必ずしも周辺の未判断画素に均等に分配する必要はなく、各画素に所定の割合で分配することも可能である。
【００６７】
以上のようにして画素Ｐa で階調誤差をユニット内の周辺画素に拡散したら、図９のステップＳ３００に戻って、新たな着目画素を設定する処理を行う。処理ユニット中の画素Ｐa については、既にドット形成の有無を判断済みであるから、ステップＳ３００では、今度は画素Ｐa の右隣の画素Ｐb を着目画素として設定する。こうして設定した新たな着目画素について、上述した処理とほぼ同様の処理を行う。以下、画素Ｐa における処理との相違点を中心に簡単に説明する。
【００６８】
画素Ｐb についての処理を行う場合にも画素Ｐa における場合と同様に、先ず初めに、補正データＣx を算出する（ステップＳ３０２）。ここで、画素Ｐb に対応付けて記憶されている拡散誤差ＥＤb には、先に画素Ｐa で生じた階調誤差が拡散されて、新たな拡散誤差ＥＤb として更新されている。そこで、画素Ｐb についての画像データＤＴb と、画素Ｐa からの階調誤差が拡散された新たな拡散誤差ＥＤb とを加算することにより、画素Ｐb についての補正データＣx を算出する。こうして算出した補正データＣx と所定の閾値ｔｈとの大小関係を判断し（ステップＳ３０４）、補正データＣx の方が大きければ画素Ｐb にはドットを形成すると判断し（ステップＳ３０６）、そうでなければ画素Ｐb にはドットを形成しないと判断する（ステップＳ３０８）。次いで、画素Ｐb について発生した階調誤差を算出する（ステップＳ３１０）。階調誤差は、画素Ｐa の場合と同様に、画素Ｐb の補正データＣx から結果値を減算することによって算出することができる。
【００６９】
着目画素Ｐb で生じた階調誤差を算出したら、処理ユニット内のすべての画素について処理を終了したか否かを判断し（ステップＳ３１２）、未処理の画素が残っていれば、算出しておいた階調誤差を、これら未処理の画素に拡散させる処理を行う（ステップＳ３１４）。前述したように、ユニット内の画素Ｐa については既に判断を終了しているから、未判断画素として残っているのは画素Ｐc および画素Ｐd の２つの画素である。そこで、画素Ｐb で生じた階調誤差はこれら２つの画素に拡散させることになる。再び、図１０を参照しながら、画素Ｐb からの誤差を拡散させる処理について説明する。
【００７０】
図１０（ｂ）は、画素Ｐb で生じた階調誤差を拡散している様子を概念的に示した説明図である。図中で、画素Ｐa に斜線が施されているのは、画素Ｐa については既にドット形成の有無を判断済みであることを模式的に示したものである。画素Ｐb についてドット形成の有無を判断した時点では、処理ユニット内には未判断画素として画素Ｐc 、画素Ｐd の２つの画素が残っている。そこで、画素Ｐb で生じた階調誤差は、図１０（ｂ）に示したように、これらの画素Ｐc および画素Ｐd にそれぞれ、１／２ずつ拡散されることになる。図中で、画素Ｐb から画素Ｐc および画素Ｐd に向かって伸びる白抜きの矢印は、画素Ｐb で生じた階調誤差がこれら画素に拡散されていることを模式的に示している。こうして誤差が拡散される結果、各画素の拡散誤差は、拡散されてきた誤差が加算された新たな拡散誤差に更新される。尚、ここでは、階調誤差は処理ユニット内の未判断画素に均等に拡散されるものとしているが、もちろん、均等に拡散させるのではなく、所定の割合で誤差を拡散させることとしても構わない。
【００７１】
こうして画素Ｐb で生じた階調誤差を周辺の画素に拡散したら、再び図９のステップＳ３００に戻って、今度は着目画素を画素Ｐc に移動させた後、着目画素Ｐc について同様の処理を行う。以下では、かかる処理について、図１０（ｃ）を参照しながら説明する。画素Ｐc についての処理を開始すると、先ず初めに画素Ｐc の画像データＤＴc と拡散誤差ＥＤc とを加算して補正データＣx を算出する。ここで、画素Ｐc についてのドット形成有無を開始した時点では、画素Ｐc の拡散誤差ＥＤc は、元々記憶されていた拡散誤差に加えて、画素Ｐa からの誤差と画素Ｐb からの誤差とが加算されて、新たな拡散誤差ＥＤc として更新されている。このことから、画素Ｐc の補正データＣx の算出に際しては、画素Ｐc の画像データＤＴc に、新たな拡散誤差ＥＤc が算出されることになる。こうして得られた補正データＣx と、所定の閾値ｔｈとを比較することによって、画素Ｐc についてのドット形成有無を判断する。こうして画素Ｐc についてのドット形成有無を判断した時点では、処理ユニット内に残る未判断画素は、図１０（ｃ）に示すように画素Ｐd のみである。そこで、画素Ｐc で生じた階調誤差は全て画素Ｐd に拡散され、画素Ｐd に元々記憶されていた拡散誤差に加算されて、新たな拡散誤差ＥＤd として更新される。
【００７２】
着目画素Ｐc で生じた階調誤差を拡散したら、図９のステップＳ３００に戻って着目画素を画素Ｐd に移動した後、画素Ｐd についてのドット形成有無の判断を開始する。すなわち、画素Ｐd に対応づけられた新たな拡散誤差ＥＤd と画素Ｐd の画像データＤＴd とを加算して補正データＣx を算出する（ステップＳ３００、ステップＳ３０２）。次いで、補正データＣx と閾値ｔｈとを比較し（ステップＳ３０４）、補正データＣx の方が大きい場合は画素Ｐd にはドットを形成する（ステップＳ３０６）と判断し、そうでない場合は画素Ｐd にはドットを形成しないと判断する（ステップＳ３０８）。
【００７３】
こうして画素Ｐd についてのドット形成の有無を判断したら、画素Ｐd で生じた階調誤差を算出した後（ステップＳ３１０）、処理ユニット内の全画素の処理を終了したか否かを判断する（ステップＳ３１２）。図１０（ｄ）に示したように、画素Ｐd について処理を開始した時点で、もはや処理ユニット内には未判断の画素は残っておらず、画素Ｐd についての判断が終了した後のステップＳ３１２においては、処理ユニット内の全画素についての処理が終了したと判断される。そこで、図９に示したユニット内の多値化処理を終了して、図５を用いて前述したユニット単位で行う階調数変換処理に復帰する。図５に示されているように、ユニット単位の階調数変換処理では、ユニット内多値化処理から復帰すると、処理ユニットで生じた階調誤差を周辺のユニットに拡散する処理を行う（図５のステップＳ２０６）。
【００７４】
ここで、処理ユニットで生じた階調誤差の値としては、ユニット内多値化処理のステップＳ３１０において画素Ｐd について求めた階調誤差の値を用いることができる。これは、着目画素で生じた階調誤差をユニット内の未判断画素に拡散しながらドット形成有無の判断を行っているために、ユニット内で生じた階調誤差が、最後に判断する画素Ｐd に拡散誤差ＥＤd として累積されることによる。以下、図１０を参照して詳しく説明する。
【００７５】
画素Ｐa で生じた階調誤差は処理ユニット内の画素Ｐb 、画素Ｐc 、画素Ｐd の３つの画素に拡散される。画素Ｐb のドット形成有無の判断に際しては、画素Ｐa からの誤差を考慮して、画素Ｐb に拡散されている誤差ができるだけ解消されるようにドット形成の有無が判断される。仮に、画素Ｐb についてドット形成有無を判断することにより、画素Ｐb に拡散されている誤差を解消することができたものとする。この場合は、画素Ｐb では新たな階調誤差は発生せず、また、画素Ｐb から画素Ｐc 、画素Ｐd に拡散される誤差も生じない。他の２つの画素Ｐc 、画素Ｐd についても同様に、ドット形成の有無を判断したことで、それぞれの画素に拡散されている誤差を解消することができたものとすると、これらの画素では階調誤差は生じない。結局、この場合は、画素Ｐa で生じた階調誤差を、周辺の未判断画素Ｐb 、画素Ｐc 、画素Ｐd で解消したこととなって、処理ユニット全体としては階調誤差の発生を避けることができる。
【００７６】
ここでは、画素Ｐb のドット形成有無の判断によって、画素Ｐb での誤差を解消するものとしたが、画素Ｐb で新たな階調誤差が発生した場合には、この誤差は周辺の未判断画素Ｐc および画素Ｐd に拡散されて、その結果、これらの画素には、画素Ｐa で生じた階調誤差と画素Ｐb で生じた階調誤差とが拡散されることになる。しかし、これら画素Ｐc 、画素Ｐd についてドット形成の有無を判断することで、それぞれの画素に拡散された誤差を解消することができれば、依然としてユニット全体としてみれば階調誤差は生じない。
【００７７】
画素Ｐc についてドット形成有無を判断することで、画素Ｐc に拡散されている拡散誤差を解消することができない場合も、全く同様にして、画素Ｐd で誤差を解消することができれば、ユニット全体としては階調誤差が生じることはない。換言すれば、画素Ｐd で解消しきれずに残った誤差が、ユニット全体で生じた階調誤差となる。このように、着目画素で生じた階調誤差をユニット内の未判断画素に拡散しながらドット形成有無を判断していくと、各画素で解消しきれずに残った階調誤差が後続する画素に集約されていくので、ユニット内で最後に判断する画素Ｐd で生じた階調誤差を、処理ユニット全体で生じた階調誤差として用いることが可能となるのである。
【００７８】
尚、以上の説明では、処理ユニット内で最後にドット形成有無を判断する画素Ｐd で生じた階調誤差の値を、処理ユニット全体で生じた階調誤差として用いるものとしたが、もちろん、処理ユニットを構成する各画素毎に階調誤差を算出し、これら階調誤差の総和を処理ユニットの階調誤差としても構わない。
【００７９】
また、図１０に示した例では、着目ユニットを構成する各画素のドット形成有無を判断するに際しては、画素Ｐa 、画素Ｐb 、画素Ｐc 、画素Ｐd の順番で判断を行ったが、必ずしもこの順番で判断する必要はなく、例えば、画素Ｐa 、画素Ｐc 、画素Ｐb 、画素Ｐd の順番でドット形成有無を判断しても構わない。処理ユニット内で着目画素を設定する順番は、良好な画質が得られる順番を選択しておくことができる。
【００８０】
Ｄ−３．第１実施例のユニット内多値化処理：
以上に説明したようにして、ユニット単位で階調数変換処理を行う場合、ユニット毎に同じ処理が繰り返されることになる。このことから、あるユニットでドットを形成すると判断した画素は、後続するユニットでも、同じ位置にドットが形成されると判断され易い傾向がある。あるいは、個々のユニットについてはドットが形成されるユニットとされないユニットが生じるものの、複数のユニットを周期として一定のパターンでドットが形成されることがある。例えば、画像データが一定の領域が続く場合など、複数のユニットを周期としてほとんど同じ処理が繰り返されることになり、ユニット内の同じ位置の画素に周期的にドットが形成されることが起こり得る。もちろん、ドット自体の大きさは視認が困難なほどに小さいが、複数のユニットに亘って周期的なパターンでドットが形成されると、この様な領域の存在が視認されて画質を悪化させるおそれがある。更には、周期的なパターンが視認されるまでには至らずとも、ユニット内の特定の画素位置に偏ってドットが形成されると、ドットを形成する印字パスが特定のパスに偏ってしまい色ムラが発生するなどして、画質が悪化してしまう場合がある。
【００８１】
この様な問題の発生を回避するために、第１実施例では、ユニット内の多値化処理を行い、画像データをユニット単位でドットデータに変換するに際して、既に処理したユニット中でドットが形成された画素位置を検出し、検出結果を反映させながらドット形成の有無を判断している。このように、処理済みのユニット内でドットが形成される画素位置の履歴を考慮しながら、処理ユニット内のドット形成有無を判断すれば、画像データをユニット単位で変換することによって生じ得る画質の悪化を回避することができる。以下では、こうした第１実施例のユニット内多値化処理について説明する。
【００８２】
図１１は、第１実施例のユニット内多値化処理の流れを示すフローチャートである。かかる処理は、図９を用いて前述したユニット内多値化処理に対して、処理済みのユニット内でドットが形成された画素位置を検出し、検出結果を反映させながら階調数変換処理を行っている点が大きく異なっている。以下、前述したユニット内多値化処理との相違点を中心として、第１実施例のユニット内多値化処理について説明する。
【００８３】
第１実施例のユニット内多値化処理においても、処理を開始すると先ず初めに、処理ユニットの中から着目画素を１つ設定し（ステップＳ４００）、設定した着目画素についての補正データＣx を算出する（ステップＳ４０２）。補正データＣx は、着目画素の画像データと着目画素に拡散されて記憶されている拡散誤差とを加算することによって求めることができる。また、処理ユニットを構成する各画素の画像データおよび拡散誤差は、図５に示した階調数変換処理中のステップＳ２０２において既に読み込まれており、これらデータの中から着目画素についてのデータを用いて補正データＣx を算出する。
【００８４】
次いで、第１実施例のユニット内多値化処理においては、処理済みのユニット内でドットが形成される画素位置の履歴を検出し、検出結果に基づいて閾値ｔｈを適切な値に設定する処理を行う（ステップＳ４０４）。この処理（履歴検出・閾値設定処理）について、図１２を参照しながら説明する。
【００８５】
図１２は、履歴検出・閾値設定処理の流れを示すフローチャートである。履歴検出・閾値設定処理を開始すると、先ず初めに、履歴データを読み出す処理を行う（ステップＳ５００）。履歴データとは、処理済みのユニットについてドットを形成すると判断された画素位置を記録したデータであり、ＲＡＭ１０６上の特定の領域に確保された専用のバッファ（履歴検出用バッファ）に記憶されている。
【００８６】
図１３（ａ）は、履歴データの構造を概念的に示した説明図である。図１３（ａ）に示した履歴データは、１２ｂｉｔの長さを有しており、それぞれのｂｉｔが画素位置に対応している。前述したように、ここでは１つのユニットは４つの画素から構成されているとしているから、１２ｂｉｔ分の履歴データには、３つのユニット分の画素が記憶されていることになる。尚、ここでは履歴データには３ユニット分のデータが蓄えられているものとして説明するが、より多数のユニットのデータを蓄えることとしても構わない。以下、図１３（ａ）を参照しながら具体的に説明する。
【００８７】
図示するように、履歴データは連続する４ｂｉｔを１つのブロックとして、３つのブロックに分けて解釈することができる。これら３つのブロックは、下位側（図上では右側）から順番に、処理中のユニットの直前に処理したユニット（「１つ前のユニット」）、その直前に処理したユニット（「２つ前のユニット」）、更にその直前に処理したユニット（「３つ前のユニット」）にそれぞれ対応している。また、各ブロックを構成する４つのｂｉｔは、下位側から、対応するユニット内の右下隅にある画素（画素Ｐd ）、左下隅にある画素（画素Ｐc ）、右上隅にある画素（画素Ｐb ）、左上隅にある画素（画素Ｐa ）にそれぞれ対応している。履歴データ中のあるｂｉｔに値「１」が記録されていることは、そのｂｉｔが対応する画素にドットが形成されることを意味しており、逆にｂｉｔに値「０」が記憶されている場合は、そのｂｉｔが対応する画素にはドットが形成されないことを意味している。
【００８８】
尚、図１３において、４ｂｉｔを１ブロックとして解釈しているのは、ここでは１つのユニットが４つの画素から構成されているとしたことに対応したものである（図６（ａ）参照）。従って、１つのユニットをＮ個の画素から構成されているとした場合は、履歴データは連続するＮｂｉｔを１つのブロックとして解釈される。また、ここでは、履歴データは１２ｂｉｔ分のデータであるとして説明するが、１つのユニットがＮ個の画素から構成されていて、処理ユニットからＭユニット前に処理したユニットまでのドット形成状況を参照する場合には、履歴データは、Ｎ×Ｍｂｉｔの長さを有するデータとすればよい。
【００８９】
一例として、図１３（ｂ）に示すような履歴データを想定する。履歴データの下位側の４つのｂｉｔからなるグループに着目すると、このグループ内の最上位（左端）のｂｉｔおよび最下位（右端）のｂｉｔには値「１」が設定されており、他のｂｉｔについては値「０」が設定されている。これは、処理中のユニットの直前に処理したユニット（「１つ前のユニット」）では、画素Ｐa および画素Ｐd の２つ画素にドットが形成され、その他の画素位置にはドットが形成されないことを意味している。同様に、履歴データの中央にあるグループについては、いずれのｂｉｔにも値「０」が記憶されているから、処理ユニットの２つ前に処理したユニットでは、いずれの画素にもドットが形成されていないことを意味している。履歴データの上位側にあるグループについては、グループ内の最上位のｂｉｔに値「１」が記憶されているから、処理ユニットの３つ前に処理したユニットでは画素Ｐa の画素位置にドットが形成されることを意味している。このようにして履歴データを解釈することにより、図１３（ｂ）で想定した履歴データからは、図１３（ｃ）に示したドットの形成状況を知ることができる。
【００９０】
図１２のステップＳ５００では、ＲＡＭ１０６上の所定の領域に確保された履歴検出用バッファから、このような履歴データを読み出す処理を行う。こうして、履歴データを読み出したら、続いて、履歴検出用データを設定する処理を開始する（ステップＳ５０２）。かかる処理について、図１４を参照して説明する。
【００９１】
図１４は、履歴検出用データを設定する様子を概念的に示した説明図である。一例として、処理ユニット中の画素Ｐa について、ドット形成有無を判断しようとしている場合を考える。図１４（ａ）で、斜線を付して示した破線の大きな正方形は、処理ユニットを示しており、処理ユニット中の黒い正方形は着目画素を示している。前述したようにユニット内多値化処理では、各画素のドット形成有無の判断をユニット単位で行うために、同じ画素位置にドットが形成され易くなる場合がある。この理由について、少し詳しく説明する。
【００９２】
例えば、画像中で処理している領域が、画素３６個につき１画素の割合でドットが形成されるような、比較的低階調の画像データの領域（明るい画像の領域）であるとする。この様な領域では、縦横６画素の合計３６画素から構成される正方形の領域に、ほぼ１つずつの割合でドットが形成されることになる。この様な画像データの領域を、４画素（縦横２画素）を１ユニットとするユニット単位でドット形成有無を判断した場合、３ユニット（６画素分）を周期として同じ処理が繰り返されることになり、３ユニット目の同じ画素位置にドットが形成されてしまうことが起こり得る。こうした一定の周期でドットが形成された場合、これらドットを形成する印字パスが、後述するように特定のパスに偏ってしまい、色ムラが発生して画質を悪化させることが起こり得る。
【００９３】
そこで、図１４（ａ）に示した例では、処理ユニットから３つ前のユニットまでの範囲で、各ユニットの画素Ｐa にドットが形成されているか否かを検出する。図１４（ａ）中で、各ユニットの画素Ｐa に示された「？」は、これらの画素位置でドットの形成状況を検出することを模式的に示したものである。
【００９４】
図１４（ｂ）は、これら画素位置でのドット形成状況を検出するために設定された履歴検出用データを、概念的に示した説明図である。履歴検出用データも、前述した履歴データと同様に１２ｂｉｔの長さを有しており、４ｂｉｔを１グループとして、３つのグループに分けて解釈される。履歴検出用データが３つのグループから構成されているのは、３つのユニットでのドット形成状況を検出することに対応したものである。また、４ｂｉｔで１グループを構成しているのは、本実施例では、４つの画素を１つのユニットとしてまとめて処理していることに対応したものである。履歴検出用データの各グループとユニットとの対応関係、および各ｂｉｔとユニット内の画素位置との対応関係は、図１３に示した履歴データの場合と同様であるため、ここでは説明は省略する。尚、ここでは、履歴検出用データは、図１３に示した履歴データと同じ長さのデータとして説明するが、これに限られるものではない。
【００９５】
図１４（ａ）に示したように、ここでは、各ユニットの画素Ｐa でのドット形成状況を検出しようとしている場合を想定しているから、履歴検出用データは、各ユニットの画素Ｐa に対応するｂｉｔのみ値「１」を設定し、他のｂｉｔには値「０」を設定したデータとすればよい。
【００９６】
また、着目画素が画素Ｐb に設定されている場合は、同様にして、処理ユニットから３つ前のユニットまでの範囲で、各ユニットの画素Ｐb にドットが形成されているか否かを検出すればよい。図１４（ｃ）は、着目画素が画素Ｐb に設定されている場合に、各ユニットでのドット形成状況を検出する画素位置を示す説明図である。図中に「？」を表示した画素が、ドット形成状況を検出する必要のある画素となる。図１４（ｄ）は、この様な画素でのドット形成状況を検出するために設定される履歴検出用データを概念的に示した説明図である。図示されているように、このような場合の履歴検出用データは、各ユニットの画素Ｐb に対応するｂｉｔの値を「１」として、他のｂｉｔは値「０」を設定したデータとすればよい。
【００９７】
図１２のステップＳ５０２では、以上に説明したようにして、着目画素の位置に応じて履歴検出用データを設定する処理を行う。
【００９８】
こうして履歴検出用データを設定したら、ステップＳ５００で読み込んだ履歴データに、設定した履歴検出用データを作用させることによって、検出対象としているドットの形成状況（以下、履歴検出用データを設定して検出しようとしているドットの形成状況を「対象履歴」と呼ぶことがあるものとする）を検出する（ステップＳ５０４）。
【００９９】
図１５（ａ）は、履歴データに履歴検出用データを作用させて、対象履歴を検出する様子を概念的に示した説明図である。図１５（ａ）の上段には、履歴データを示し、履歴データの下段には履歴検出用データを示している。対象履歴の検出に際しては、先ず、履歴データと履歴検出用データとの間で、対応するｂｉｔ同士の論理積を算出する。本明細書中で「履歴データに履歴検出用データを作用させる」とは、このように、履歴データと履歴検出用データとの間で、対応するｂｉｔ同士の論理積を採ることにより中間データを算出することを言う。次いで、こうして得られた中間データの各ｂｉｔの論理和、あるいは算術和を取ることによって対象履歴を検出することができる。図１５（ａ）では、履歴データに履歴検出用データを作用して算出した中間データを、履歴検出用データの下段に示している。前述したように、履歴検出用データには、各ユニット中で検出しようとする画素位置にのみ値「１」が設定され、検出不要の画素位置には値「０」が設定されているから、履歴データと履歴検出用データとでｂｉｔ同士の論理積を算出すると、検出しようとする画素位置にドットが形成されている場合にのみ、その画素位置に対応するｂｉｔの値が「１」に設定される。
【０１００】
上述した処理を、図１５（ａ）中に示した「１つ前のユニット」に着目して、具体的に説明する。履歴データに示されているように、処理ユニットの「１つ前のユニット」には画素Ｐa および画素Ｐd にドットが形成されている。ここで、ドットの形成状況を検出しようとしている画素位置は、履歴検出用データに示されているように画素Ｐa のみであるから、中間データは、図１５（ａ）に示すように、画素Ｐa に対応するｂｉｔのみが値「１」となり、他のｂｉｔは値「０」となる。このように、中間データのいずれかのｂｉｔが値「１」となっていることは、そのユニットには、検出しようとしている画素位置にドットが形成されていることを意味している。次いで、各ユニットの論理和を取って、その値が「１」であれば、検出しようとする画素位置のいずれかにドットが形成されていることになる。また、各ユニットの算術和を取れば、検出しようとする画素位置に何個のドットが形成されているかを検出することが可能となる。
【０１０１】
図１２のステップＳ５０４では、以上のようにして、中間データの各ｂｉｔの論理和（あるいは算術和）を採って検出結果を算出する処理を行う。こうして得られた検出結果に基づいて、対象履歴が検出されたか否かを判断する（ステップＳ５０６）。検出結果の値が「０」である場合は、対象履歴は検出されていないものと判断する。すなわち、検出結果（すなわち中間データの各ｂｉｔの論理和）の値が「０」となったことは、検出対象とするいずれのユニットにおいても、検出しようとしている画素位置にはドットが形成されていないことを意味している。そこで、検出結果の値が「０」であれば、対象履歴は検出されていないものと判断することができる。逆に、検出結果の値が「１」であれば、検出対象としているユニット中のいずれかのユニットにおいて、検出しようとしている画素位置にドットが形成されていることを意味しており、対象履歴が検出されたものと判断することができる。また、中間データの各ｂｉｔの算術和を取った場合は、得られた値が所定値以上であれば対象履歴が検出されたものと判断し、算術和の値が所定値未満であれば対象履歴は検出されていないものと判断すればよい。
【０１０２】
図１５（ａ）に示した中間データには、「１つ前のユニット」および「３つ前のユニット」の中のｂｉｔが値「１」に設定されているので、このような中間データの各ｂｉｔの論理和を採って検出結果を算出すると値「１」が得られる。従って、この場合には対象履歴が検出されることになる。
【０１０３】
参考として、図１５（ａ）の上段に示す履歴データが表しているドットの形成状況を、図１５（ｂ）に示した。図１５（ａ）に示したように、中間データから算出された検出結果は値「１」となり、画素Ｐa にドットが形成されていることを示す結果が得られる。図１５（ｂ）に示されているように、処理ユニットの「１つ前のユニット」および「３つ前のユニット」の画素Ｐa の位置には、確かにドットが形成されている。このことから、履歴データに履歴検出用データを作用させる方法を用いることで、ドットの形成状況を正確に検出可能であることが確認できる。
【０１０４】
図１２の履歴検出・閾値設定処理では、こうして検出した対象履歴に基づいて、閾値ｔｈの値を適切な値に設定する処理を行う。すなわち、ステップＳ５０６において対象履歴が検出されなかった場合には、通常値Ｖn を閾値ｔｈとして設定し（ステップＳ５０８）、逆に、対象履歴が検出された場合には、通常値Ｖn よりも大きな値に設定された割増値Ｖp を、閾値ｔｈとして設定する（ステップＳ５１０）。ここで設定した閾値ｔｈは、ユニット内多値化処理中で着目画素にドットを形成するか否かを判断するために参照される。こうして閾値ｔｈを設定したら、図１２の履歴検出・閾値設定処理を終了して、図１１に示した第１実施例のユニット内多値化処理に復帰する。
【０１０５】
履歴検出・閾値設定処理から復帰すると、ステップＳ４０２において算出しておいた補正データＣx と、閾値ｔｈとの大小関係を判断する（ステップＳ４０６）。この閾値ｔｈは、履歴検出・閾値設定処理中で対象履歴を検出することにより、適切な値に設定されている。そして、補正データＣx の方が大きい場合には（ステップＳ４０６：ｙｅｓ）、着目画素にはドットを形成すると判断し（ステップＳ４０８）、そうでない場合には（ステップＳ４０６：ｎｏ）、着目画素にはドットを形成しないと判断する（ステップＳ４１０）。図１２を用いて説明したように、対象履歴が検出されると閾値ｔｈの値は、通常用いられる値（通常値Ｖn ）よりも大きな所定の割増値（Ｖp ）に変更されることから、結局、対象履歴が検出された場合には着目画素にはドットが形成され難くなることとなる。こうして判断した結果は、各画素についての判断結果を示す変数に蓄えられる。
【０１０６】
以上のようにして着目画素についてのドット形成有無を判断したら、判断に伴って生じる階調誤差を算出する（ステップＳ４１２）。階調誤差の算出方法は、図９に示したユニット内多値化処理と同様であり、ここでは説明を省略する。ついで、処理ユニット内の全画素の処理を終了したか否かを判断する（ステップＳ４１４）。未処理の画素が残っている場合は（ステップＳ４１４：ｎｏ）、ユニット内にあるそれらの周辺画素に誤差を拡散させる処理を行った後（ステップＳ４１６）、ステップＳ４００に戻って着目画素を移動させて、続く一連の処理を繰り返す。ステップＳ４１６において処理ユニット内の画素に誤差を拡散させる処理は、図９、図１０を用いて説明した前述のユニット内多値化処理と同様にして行うことができる。
【０１０７】
一方、ステップＳ４１４において、処理ユニット内の全画素の処理を終了したと判断された場合は（ステップＳ４１４：ｎｏ）、処理ユニット内の各画素についての判断結果を、履歴検出用バッファに書き込む処理を行う（ステップＳ４１８）。かかる処理について、図１６、図１７を参照して説明する。
【０１０８】
図１６は、処理ユニットの各画素についての判断結果を、履歴検出用バッファに書き込む処理の流れを示したフローチャートである。履歴検出用バッファに書き込む処理を開始すると、先ず初めに、バッファに記憶されているデータを、上位方向に１ユニット分だけシフトさせる処理を行う（ステップＳ６００）。図１７は、かかる処理を模式的に示した説明図である。図中に示された小さな正方形の列は、履歴検出用バッファを模式的に示したものであり、図中の上側に示した履歴検出用バッファはデータをシフトする前の状態を、図中の下側に示し履歴検出用バッファはデータをシフトした後の状態を示している。図１６のステップＳ６００においては、図１７に示されているように履歴検出用バッファのデータを１ユニット分だけ上位方向にシフトさせる。このとき、履歴検出用バッファの最上位側のユニットのデータは破棄される。また、シフトさせた後の最下位ユニットの各ｂｉｔには、念のために、いずれのｂｉｔにも値「０」を書き込んでおく。尚、図１７では、履歴検出用バッファは、ユニット３つ分のデータを記憶可能であるとしているが、もちろんより多数のユニットのデータを記憶可能としてもよい。
【０１０９】
こうして１ユニット分のデータを上位方向にシフトさせたら（図１６のステップＳ６００）、次いで、処理ユニット内の各画素の判断結果に応じた４ｂｉｔ長のデータを設定する処理を行う（ステップＳ６０２）。かかるデータのそれぞれのｂｉｔは、処理ユニットを構成する各画素に対応付けられている。具体的には、最上位ｂｉｔは処理ユニットの画素Ｐa に、上位から２番目のｂｉｔは画素Ｐb に、３番目のｂｉｔは画素Ｐc に、最下位ｂｉｔは画素Ｐd にそれぞれ対応付けられている。ステップＳ６０２においては、処理ユニット内でドットが形成される画素に対応するｂｉｔには値「１」を書き込み、ドットが形成されない画素に対応するｂｉｔには値「０」を書き込む処理を行う。例えば、ある処理ユニットでは、画素Ｐb にのみドットが形成され、他の画素にはドットが形成されなかったとすると、ステップＳ６０２の処理では、処理ユニットに対応する４ｂｉｔ長のデータとして「０１００( 2)」が設定されることになる。尚、( 2)は二進数表示されていることを示すものとする。
【０１１０】
続くステップＳ６０４では、こうして設定したデータを、履歴検出用バッファの最下位ユニットの領域に書き込む処理を行う。図１７で、最下位ユニットの各ｂｉｔに向かう白抜きの矢印は、設定されたデータがこれらｂｉｔに書き込まれる様子を模式的に示したものである。
【０１１１】
以上のようにして、処理ユニット内の各画素の判断結果を履歴検出用バッファに書き込む処理を終了したら、図１１に示した第１実施例のユニット内多値化処理を終了して、図５の階調数変換処理に復帰する。
【０１１２】
上述したように、第１実施例のユニット内多値化処理においては、履歴検出・閾値設定処理中で対象履歴の有無を検出し、対象履歴が検出された場合には閾値ｔｈの値を大きくすることによって、着目画素にドットが形成され難くしている。このため、ユニット単位で階調数変換処理を行った場合でも、複数のユニットを周期として同じ画素位置にドットが形成される領域が発生し、この領域が視認されて画質を悪化させることを回避することができる。また、こうして着目画素にドットが形成され難くすれば、その反射的な効果として、ユニット内の他の画素にドットが形成され易くなる。その結果、ユニット内の特定の画素位置に偏ってドットが形成されることを回避することができる。すなわち、ユニット内の各画素位置に形成されるドットの全画素に対する割合が、所定範囲内に抑制することが可能となり、特定の印字パスに偏ってドットが形成されて、画質が悪化してしまうことを回避することが可能となる。これについては、後ほど補足して説明する。
【０１１３】
また、閾値ｔｈの設定値を変更することにより、着目画素でのドット形成の判断を制御したとしても、これによって生じた階調誤差は周辺の未判断画素に拡散されて、これら周辺の画素でドット形成の有無を判断することによって解消される。このため、例えば、対象履歴が検出されたことで、本来はドットが形成されるはずの画素にドットが形成されなくなったとしても、これに起因して画質が悪化することはない。
【０１１４】
以上の説明では、対象履歴が検出された場合には、ドット形成有無の判断に使用する閾値ｔｈの設定値を大きな値に変更して、着目画素にはドットが形成され難くするものとした。もちろん、対象履歴が検出された場合には、着目画素にはドットを形成しないと判断することも可能である。このようにすれば、複数のユニットを周期として同じ画素位置にドットが形成されることを、簡便に回避することができる。
【０１１５】
また、以上の説明では、履歴データに履歴検出用データを作用させて中間データを生成し、中間データの各ｂｉｔの論理和あるいは算術和を取って検出結果を算出した。これに対して、中間データの各ｂｉｔの論理積を取って、この値を検出結果としても良い。この場合は、ドットの形成状況を検出しようとしている全ての画素位置にドットが形成されている場合にのみ、検出結果の値が「１」となる。従って、例えば、ドットがある程度の密度で形成されている状況で、視認されやすい特定のパターン形成されたドットだけを、確実に検出することが可能となる。
【０１１６】
次に、ユニット内の特定の画素位置に偏ってドットが形成された場合、例え特定のパターンが視認されなくとも画質が悪化することがある理由について説明する。前述したように、本実施例のカラープリンタ２００は、印刷媒体上でインク吐出用ヘッドを主走査させながらドットを形成することによって画像を印刷している。こうしたプリンタでは、主に画質上の要請から、たとえ主走査方向に連続した画素にドットを形成する場合でも、これらドットを１回の主走査で形成するのではなく、互いに間隔を空けて飛び飛びの画素にドットを形成しながら、複数回の主走査に分けて形成することが通常行われている。
【０１１７】
図１８は、主走査方向に連続するドット列（以下では、このようなドット列を「ラスタ」と呼ぶことがあるものとする）を２回の主走査に分けて形成する様子を示した説明図である。図中の上段に示した小さな正方形は画素を表している。また、各画素の内部に表示された数字は、それぞれの画素を識別するために付された通し番号である。１本のラスタを２回の主走査に分けて形成する場合は、ある主走査では奇数番目の画素にドットを形成し、次の主走査では偶数番目の画素にドットを形成する。ここでは、奇数番目の画素にドットを形成しながら行う主走査を「パスＡ」と呼び、偶数番目の画素にドットを形成しながら行う主走査を「パスＢ」と呼ぶことにする。図１８に示した例では、パスＡで形成されるドットは丸印で表示し、パスＢで形成されるドットは三角印で表示している。こうしてパスＡとパスＢとを繰り返すことで１本のラスタが形成される。このように、１本のラスタを複数回のパスに分けて形成する場合、ユニット内の特定の画素位置に偏ってドットが形成されると、例え特定のパターンが視認されなくとも画質が悪化することがある。
【０１１８】
例えば、図６に示したように、ユニットが縦横２個ずつの合計４つの画素から構成されているものとして、Ｐa の画素位置に偏ってドットが形成されているものとする。図１９は、このように画素位置Ｐa にドットが形成されている様子を概念的に示している。図１９では、ドットが一定の周期的なパターンで形成されているものの、こうしたパターンが視認されて画質が悪化するとは限らない。しかし、全てのドットは奇数番目の画素に形成されているので、図１８に示したパスＡに偏って形成されることになる。このように特定のパスに偏ってドットが形成されると、画質が悪化することがある。何故なら、印刷媒体上に形成されたインクドットは、時間とともに滲みやインクの乾きが進行するので、全てのパスで万遍なく形成された場合と、特定のパスに偏って形成された場合とでは、発色の状態が微妙に異なってしまい、これが色ムラとして視認されてしまうことがあるからである。特に、多色のインクを用いるカラー印刷では、こうした色ムラが生じ易い。例えば、ＣドットとＭドットとを形成する場合を例に取ると、Ｃドットが形成された上からＭドットを形成する場合と、これらドットを同じように形成する場合とでは、インク同士の混ざり具合や、後から形成されたドットの滲み具合が異なってくる。その結果、たとえ同じ密度でドットを形成した場合でも印刷媒体上に再現される色は異なってしまい、こうした発色の違いが色ムラとして視認される場合があるのである。
【０１１９】
上述した第１実施例においては、着目画素が画素位置Ｐa にある場合に、同じ画素位置Ｐa についてのドット形成の有無を検出する。そして、画素位置Ｐa に所定数以上のドットが形成されている場合、すなわち対象履歴が検出された場合には、着目画素にドットを形成され難くする。こうすれば、そのユニットでは、画素位置Ｐa 以外の画素にドットが形成され易くなる。その結果、特定の画素位置にドットが偏って形成されることを回避することができ、延いては、ドットが特定のパスで偏って形成されて色ムラなどが生じることを回避することが可能となる。
【０１２０】
あるいは、着目画素が画素位置Ｐa にある時に、他の画素位置（例えばＰb ）についてのドット形成の有無を検出し、画素位置Ｐb に所定数以上のドットが形成されている場合は、着目画素にドットを形成され易くすることとしてもよい。こうして画素位置Ｐa にある着目画素にドットを形成してしまえば、そのユニットでは、画素位置Ｐb の画素にはドットが形成され難くなるので、特定の画素位置にドットが偏って形成されることを回避することが可能となる。
【０１２１】
Ｄ−４．変形例：
上述した第１実施例の履歴検出・閾値設定処理には、種々の変形例が存在している。以下、これらの各種変形例について説明する。
【０１２２】
（１）第１の変形例：
上述した第１実施例の履歴検出・閾値設定処理では、常に３ユニット分だけ遡ってドットの形成状況を検出するものとして説明したが、遡るユニット数を可変とすることもできる。以下では、こうした第１の変形例について説明する。
【０１２３】
図２０は、第１の変形例の履歴検出・閾値設定処理の流れを示すフローチャートである。かかる処理は前述した第１実施例の処理に対して、処理ユニット内の画像データに応じて、遡るユニット数を変更可能な点が大きく異なっている。以下、相違点を中心として、フローチャートに従って説明する。
【０１２４】
第１の変形例の履歴検出・閾値設定処理を開始すると、先ず初めに処理ユニットを構成する各画素についての画像データの総和値を算出する（ステップＳ７００）。処理ユニットを構成する各画素の画像データは、図５に示した階調数変換処理中のステップＳ２０２において予め読み込まれており、各画素の画像データの総和値は容易に算出することができる。
【０１２５】
第１の変形例においては、ドットの形成状況を何ユニット前まで遡って調べるかを、処理ユニットの画像データの総和値に基づいて設定する。これは次のような理由による。総和値が小さい場合は、画像データの階調値が小さな領域（すなわち明るい画像の領域）を処理していると考えられる。この様な領域では、ドットはまばらに形成されることになるので、ユニット単位で処理したことによってドットの形成にパターンが生じた場合にも、長い周期のパターンになるものと考えられる。このことから、画像データの階調値が小さな領域では長い周期のパターンも検出可能とすべく、遡るユニット数を大きな値に設定するのである。具体的に遡るユニット数は、総和値の値に応じて、段階的にいくつかの適切な数値が予め設定されている。ステップＳ７０２においては、総和値に応じて遡るユニット数を設定した後、前述した履歴検出用バッファから、ユニット数に相当するｂｉｔ長のデータを読み出す処理を行う。
【０１２６】
こうして履歴検出用バッファから履歴データを読み出したら、続いて履歴検出用データを設定する（ステップＳ７０４）。かかる処理は、図１２を用いて前述した第１実施例の履歴検出・閾値設定処理とほぼ同様であるが、処理ユニットによって履歴検出用データのｂｉｔ長が変わることのみ異なっている。すなわち、第１の変形例においては、処理ユニットを構成する各画素の画像データの総和値を算出し、総和値に応じたユニット数だけ遡ってドットの形成状況を検出することとしているので、これに対応して履歴検出用データも総和値に応じた長さのデータに設定されるのである。
【０１２７】
次いで、履歴データに履歴検出用データを作用させて、対象履歴（検出しようとしているドットの形成状況）の有無を検出し、対象履歴が検出された場合には閾値ｔｈの値を大きな値（Ｖp ）に変更し、対象履歴が検出されなかった場合には閾値ｔｈの値を通常値Ｖn に設定する（ステップＳ７０６ないしステップＳ７１２）。以上の処理を終了したら、第１の変形例の履歴検出・閾値設定処理を抜けて、図１１に示したユニット内多値化処理に復帰する。
【０１２８】
以上に説明した第１の変形例の履歴検出・閾値設定処理によれば、処理中の画像データの階調値に応じて、適切なユニット数だけ遡ってドットの形成状況を検出することができる。このため、画質の悪化をより確実に防止することが可能となる。尚、上述した第１の変形例においては、処理ユニット内の各画素についての総和値を算出し、総和値が小さければ、明るい画像領域（画像データの階調値が小さな領域）を処理中であると判断するものとして説明した。もちろん、処理中の領域が明るい画像領域であることを異なる方法を用いて検出することとしても良い。例えば、周辺の領域の画像データの平均値を利用して検出することも可能である。また、上述した第１の変形例の履歴検出・閾値設定処理では、ドット形成有無を遡って検出するユニット数は、処理ユニット内の各画素の総和値に応じて設定されているものとして説明したが、これに限らず、各画素の階調値に応じて、遡るユニット数あるいはユニット内の画素位置を設定するものとしてもよい。こうすれば、遡るユニット数をよりきめ細かく適切な値とすることが可能となるので好ましい。
【０１２９】
（２）第２の変形例：
上述した各種実施例においては、処理済みのユニットの中でドットの形成有無を検出しようとする画素位置が、処理中のユニットの着目画素と同じ画素位置である場合を中心として説明した。もちろん、処理済みのユニット中でドットの形成状況を検出する画素位置は、前述した履歴検出用データを適切に設定することにより、必要に応じて自由に設定することができる。以下では、こうした第２の変形例について説明する。
【０１３０】
図２１は、こうした第２の変形例において、履歴検出用データを設定する様子を例示した説明図である。例えば、処理ユニットの画素Ｐa についてのドット形成有無を判断するに際して、図２１（ａ）に示すように、処理ユニットの「１つ前のユニット」については画素Ｐa のドット形成状況を検出し、「２つ前のユニット」および「３つ前のユニット」については、いずれも画素Ｐc のドット形成状況を検出するものとする。図中に示した「？」印は、該当する画素についてのドット形成状況を検出することを模式的に示したものである。ドットの形成状況を検出する画素位置をこの様に設定しておけば、４ユニットを周期として、「左下の画素」、「左下の画素」、「左上の画素」、「左上の画素」のパターンで周期的にドットが形成されることを回避することができる。
【０１３１】
図２１（ｂ）には、図２１（ａ）で「？」印を示した画素位置を検出するために設定される履歴検出用データを示している。前述したように、履歴検出用データは、隣接する４ｂｉｔをひとまとまりとする３つのグループから構成されており、図２１（ｂ）に示すように、それぞれのグループが図２１（ａ）に示した３つのユニットに対応している。また、各グループを構成する４つのｂｉｔは、上位側（図上では左側）から順に、画素Ｐa ，画素Ｐb ，画素Ｐc ，画素Ｐd にそれぞれ対応している。履歴検出用データは、検出しようとする画素位置に対応するｂｉｔには値「１」を設定し、その他のｂｉｔには値「０」を設定することによって得ることができる。尚、図２１（ｃ）は、こうして得られた履歴検出用データを１６進数表示したものである。前述したように、履歴検出用データは４ｂｉｔで１つのユニットを表しているから、４ｂｉｔをまとめて１６進数表示すれば履歴検出用データを簡便に表記することができる。図２１（ｂ）に示した履歴検出用データは、１６進数表示することにより「０ｘ２２８」と表すことができる。尚、「０ｘ」は１６進数表示していることを意味している。
【０１３２】
尚、上述した実施例では、ドットの形成状況を検出する画素は、各ユニットに１画素ずつであるものとしたが、もちろんユニット当たり複数の画素位置について、ドットの形成状況を検出することとしても良い。図２２は、複数の画素位置でドット形成状況を検出する様子を示す説明図である。ここでは、図２２（ａ）に示すように、処理ユニットの「１つ前のユニット」については３つの画素位置でドット形成状況を検出するものとしている。図２２（ｂ）は、この様な画素位置でのドット形成状況を検出するために設定される履歴検出用データを示した説明図である。図示されているように、「１つ前のユニット」については、画素Ｐa に加えて、画素Ｐb および画素Ｐd の２つの画素位置についても、ドットの形成状況を検出するものとしている。このことに対応して、履歴検出用データの下位側の４ｂｉｔの中で、画素Ｐa 、画素Ｐb 、画素Ｐd にそれぞれ対応する３つのｂｉｔには値「１」が設定される。すなわち、１６進数表示で「Ｄ」が設定される。また、「２つ前のユニット」および「３つ前のユニット」については、図２１の場合と同様に、画素Ｐa のドット形成状況を検出することとしているから、これらユニットについては１６進数表示で「８」が設定され、結局、履歴検出用データとしては、図２２（ｃ）に示すように「０ｘ８８Ｄ」のデータが設定されることになる。
【０１３３】
以上に説明したように、履歴検出用データを適切に設定することで、処理済みのユニットの中でドットの形成状況を検出する画素位置を自由に設定することが可能である。従って、複数のユニットに亘って特定のパターンでドットが形成される易くなっている場合でも、この様なパターンの発生を確実に回避することができる。もちろん、特定の画素位置にドットが偏って形成され難くなる結果として、全ての画素位置にほぼ均等な割合でドットが形成されることになる。また、図２２に示したように、処理ユニットの近傍の画素位置についてのドット形成状況を検出しておけば、着目画素の近傍にドットが形成されることを回避することができる。このため、ドットの分散性を向上させて、画質をより改善することが可能となる。
【０１３４】
（３）第３の変形例：
ドットの形成状況を検出しようとする画素位置を、乱数を用いて設定することも可能である。例えば、先ず初めに、遡ってドット形成状況を検出しようとするユニット数を乱数を用いて設定し、次いで、各ユニットについて検出しようとする画素位置を乱数を用いて設定することとしても良い。こうすれば、ドットの形成状況を検出する画素位置の設定にも規則性が無くなるので、複数ユニットに亘って周期的なパターンが発生することを確実に回避することが可能となる。
【０１３５】
Ｅ．第２実施例：
上述した第１実施例のユニット内多値化処理中で行われる履歴検出・閾値設定処理においては、処理済みのユニットのドット形成状況を表す履歴データが、１つの履歴検出用バッファに記憶されているものとして説明した。ユニットには複数の画素が含まれているから、第１実施例においては、各画素についてのドット形成有無を表すデータが履歴検出用バッファ上で混在して記憶されていることになる。これに対して、ユニットを構成する画素の数だけバッファを設けておき、各画素のドット形成有無を判断したら、ユニット内の画素位置に対応付けて異なるバッファに判断結果を記憶することとしても良い。以下、このように画素位置毎に専用のバッファを用いた第２実施例について説明する。
【０１３６】
Ｅ−１．第２実施例のユニット内多値化処理：
図２３は、第２実施例のユニット内多値化処理の流れを示すフローチャートである。かかる処理は、図１１を用いて前述した第１実施例のユニット内多値化処理に対して、履歴検出用バッファが画素位置毎に設けられている点が大きく異なっている。また、この様な相違点から派生して、着目画素についてのドット形成有無を判断するたびに、判断結果を対応する履歴検出用バッファに書き込んでいる点でも、第１実施例とは異なっている。以下では、これら、第１実施例との相違点を中心として、第２実施例のユニット内多値化処理について説明する。
【０１３７】
処理を開始すると、先ず初めに、処理ユニットを構成する複数の画素の中から、ドットの形成有無を判断しようとする着目画素を検出し（ステップＳ８００）、着目画素の画像データと拡散誤差とを加算して補正データＣx を算出する（ステップＳ８０２）。処理ユニットを構成する各画素についての画像データおよび拡散誤差は、図５に示した階調数変換処理中で既に読み込まれているデータを使用する。
【０１３８】
こうして着目画素についての補正データＣx を算出したら、第２実施例の履歴検出・閾値設定処理を開始する（ステップＳ８０４）。前述したように第２実施例においては、ユニット内の画素位置に応じて設けられた専用の履歴検出用バッファを使用する。そこで、かかる処理の内容について説明する前に、第２実施例の履歴検出・閾値設定処理で用いられる履歴検出用バッファについて説明しておく。
【０１３９】
図２４は、ユニット内の画素位置に対応付けて設けられた履歴検出用バッファを模式的に示した説明図である。図中に示した「履歴検出用バッファＡ」は、ユニット内の画素Ｐa に対応付けられているバッファである。このバッファには、画素Ｐa ついてのドット形成判断結果が記憶される。また、「履歴検出用バッファＢ」は、ユニット内の画素Ｐb に対応付けられて、画素Ｐb についての判断結果が記憶されるバッファである。同様に、「履歴検出用バッファＣ」にはユニット内の画素Ｐc についての判断結果が記録され、「履歴検出用バッファＤ」には画素Ｐd についての判断結果が記憶される。このように第２実施例においては、ユニット内の画素位置に対応付けられた専用のバッファが設けられており、それぞれのバッファに履歴データが記憶されている。
【０１４０】
次に、「履歴検出用バッファＡ」を例にとって、記憶されている履歴データのデータ構造について説明する。履歴検出用バッファＡの各ｂｉｔは、下位側（図２４では右側）から順番に、処理ユニットから１つずつ前のユニットに対応付けられている。すなわち、最下位ｂｉｔ（図上では右端のｂｉｔ）は処理ユニットの「１つ前のユニット」に対応付けられており、下位から２つめのｂｉｔは「２つ前のユニット」に、下位から３つめのｂｉｔは「３つ前のユニット」に、というように、各ｂｉｔがそれぞれのユニットに順番に対応付けられている。これらのｂｉｔに値「１」が設定されていることは、対応するユニットの画素Ｐa にドットが形成されることを表しており、逆に値「０」が設定されていることは、対応するユニットの画素Ｐa にはドットが形成されないことを表している。
【０１４１】
以上の説明から明らかなように、履歴検出用バッファＡに記憶されている図２４に例示の履歴データは、処理ユニットから１つ前、３つ前、５つ前、８つ前にの各ユニットについては、画素Ｐa にドットが形成されており、他のユニットについては画素Ｐa にドットが形成されていないことを表している。尚、図２４では、それぞれの履歴検出用バッファは、８ｂｉｔ分のデータ長を有するものとしたが、より多いｂｉｔ数のデータとしても構わない。
【０１４２】
こうした履歴検出用データを用いて行われる第２実施例の履歴検出・閾値設定処理について、以下に説明する。第２実施例の履歴検出・閾値設定処理は、前述した第１実施例の処理に対して、画素位置毎に履歴検出用バッファが設けられている点が異なっており、他の処理はほぼ同様である。そこで以下では、第１実施例の履歴検出・閾値設定処理について説明した図１２のフローチャートを流用しながら説明する。尚、かかる処理は、図２３のユニット内多値化処理において着目画素が設定された後（ステップＳ８００）、かかる着目画素に対してステップＳ８０４で実行される処理である。
【０１４３】
第２実施例の履歴検出・閾値設定処理を開始すると、先ず初めに、履歴検出用バッファから履歴データを読み出す処理を行う（図１２のステップＳ５００相当）。図２４を用いて説明したように、第２実施例では画素位置に応じて履歴検出用バッファが設けられており、かかる処理では、着目画素と同じ画素位置に対応するバッファから、必要なデータ量の履歴データを読み出す。例えば、着目画素が画素Ｐa にあるとして、５ユニット分だけ遡ってドットの形成状況を検出するものとすれば、「履歴検出用バッファＡ」の下位側から５ｂｉｔ分のデータを読み出すことになる。この結果、図２４に示した例では、履歴データとして「１０１０１ (2)」が読み出される。ここで、(2) は２進数表示されていることを示している。尚、着目画素が画素Ｐb ，画素Ｐc ，画素Ｐd に設定されている場合は、履歴検出用バッファＢ，履歴検出用バッファＣ，履歴検出用バッファＤにそれぞれ記録されている履歴データを読み出せばよい。
【０１４４】
こうして履歴データを読み出したら、続いて、履歴検出用データを設定する処理を行う（図１２のステップＳ５０２相当）。かかる処理について、図２５を参照しながら説明する。例えば、処理ユニットから５つ前のユニットまで遡って、ドットの形成状況を検出するものとする。図２５（ａ）は、ドットの形成状況を検出しようとしている画素位置の分布を概念的に示した説明図である。図中の小さな正方形はそれぞれ画素を模式的に示したものである。また、太い破線で示した大きな正方形は処理中のユニットを模式的に示したものであり、細い破線で示した大きな正方形は、既に処理済みのユニットを模式的に示したものである。処理ユニット中で斜線を付した画素は着目画素を示しており、処理済みのユニット中で図中で「？」を付した画素は、ドットの形成状況を検出しようとしている画素を示している。
【０１４５】
図２５（ｂ）は、このような画素についてのドット形成状況を検出するために用いられる履歴検出用データを示したものである。ここでは、処理ユニットから５つ前のユニットまで遡って検出するとしているから、履歴検出用データは、最下位ｂｉｔから５ｂｉｔまでのｂｉｔに値「１」が設定され、６ｂｉｔより上位側のｂｉｔには値「０」が設定されている。このように、検出しようとするユニットに対応するｂｉｔに値「１」を設定し、他のｂｉｔには値「０」を設定することによって、履歴検出用データを設定することができる。図２５（ｃ）はこうして設定された履歴検出用データを１６進数表示したものである。
【０１４６】
こうして履歴検出用データを設定したら、設定した履歴検出用データを先に読み出した履歴データに作用させることによって、対象履歴（検出しようとしている画素位置でのドットの形成状況）を検出する（図１２のステップＳ５０４相当）。対象履歴の検出は、第１実施例と同様にして行う。すなわち、履歴データと履歴検出用データとの間で、対応するｂｉｔ同士の論理積を採ることにより中間データを算出し、得られた中間データの各ｂｉｔの論理和（あるいは算術和）を採って検出結果を算出する。得られた検出結果が値「１」であれば対象履歴が検出されたものと判断して、閾値ｔｈに割増値Ｖp を設定する。検出結果が値「０」であれば、対象履歴は検出されなかったものと判断して、閾値ｔｈに通常値Ｖn を設定する。以上のようにして閾値ｔｈを適切な値に設定したら、第２実施例の履歴検出・閾値設定処理を終了して、図２３に示すユニット内多値化処理に復帰する。尚、ここでは、中間データの各ｂｉｔの論理和（あるいは算術和）を採って検出結果を算出するものとしたが、中間データの各ｂｉｔの論理積を採って検出結果を算出するものとしてもよい。
【０１４７】
以上のようにして閾値ｔｈを設定して、図２３に示す第２実施例のユニット内多値化処理に復帰したら、続いて、着目画素の補正データＣx と閾値ｔｈとの大小関係を判断する（図２３のステップＳ８０６）。補正データＣx の方が大きい場合には着目画素にドットを形成すると判断し（ステップＳ８０８）、そうでなければドットを形成しないと判断する（ステップＳ８１０）。次いで、ドットの形成有無を判断したことで生じる階調誤差を算出した後（ステップＳ８１２）、着目画素についての判断結果を対応する履歴検出用バッファに書き込む処理を開始する（ステップＳ８１４）。かかる処理について、図２６を用いて説明する。
【０１４８】
図２６は、第２実施例のユニット内多値化処理において、着目画素についての判断結果を履歴検出用バッファに書き込む様子を概念的に示した説明図である。今、着目画素が画素Ｐa に設定されているものとすると、ドット形成有無の判断結果は、履歴検出用バッファＡに書き込まれることになる。判断結果を書き込むにあたっては、先ず、履歴検出用バッファＡに記憶されている履歴データを、１ｂｉｔ分だけ上位側（図上では左側）にシフトさせる。図２６の上段はシフトする前の履歴検出用バッファＡに記憶されている履歴データを示しており、下段はシフトした後のバッファに記憶されている履歴データを示している。履歴データをシフトさせることに伴って、最上位ｂｉｔに記憶されたデータは破棄される。次いで、着目画素についての判断結果に対応する値を、最下位のｂｉｔに書き込む処理を行う。着目画素にドットを形成すると判断された場合は、最下位のｂｉｔには値「１」が書き込まれ、着目画素にドットを形成しないと判断された場合は、値「０」が書き込まれる。以上の説明では、着目画素が画素Ｐa に設定されているものとして説明したが、着目画素が他の画素位置に設定されている場合も同様にして、着目画素の画素位置に対応する履歴検出用バッファに判断結果に応じた値を書き込んでやればよい。図２３のステップＳ８１４では、こうして着目画素についての判断結果を、着目画素に対応する履歴検出用バッファに書き込む処理を行う。
【０１４９】
こうして着目画素の判断結果を書き込む処理を終了したら（図２３のステップＳ８１４）、処理ユニット内の全ての画素についての処理を終了したか否かを判断し（ステップＳ８１６）、未処理の画素が残っていればステップＳ８００に戻って上述した一連の処理を繰り返す。全ての画素についての処理を終了したら、ユニット内多値化処理を抜けて、図５に示した階調数変換処理に復帰する。
【０１５０】
以上に説明した第２実施例のユニット内多値化処理においては、履歴検出用バッファのそれぞれのｂｉｔが、処理済みのユニット１つ１つに対応付けられている。従って、ドットの形成状況を遡って調べるユニット数が多くなった場合でも、ユニット数と同じｂｉｔ長のデータを読み込むだけでよい。例えば、処理中のユニットから８ユニット分だけ遡ってドットの形成状況を検出する場合、１ユニットが４つの画素で構成されているとして、前述した第１実施例においては３２ｂｉｔの履歴データを読み込む必要があるが、第２実施例では８ｂｉｔのデータを読み込むだけで足りる。このため、第２実施例においては、遡るユニット数が多い場合であっても、迅速な処理を行うことができる。
【０１５１】
Ｅ−２．第２実施例の変形例：
上述した第２実施例では、ドット形成状況を検出する画素位置は、着目画素と同じ画素であるものとして説明した。しかし、第１実施例において、ドットの形成状況を検出しようとする画素位置を自由に設定可能であったのと同様に、第２実施例においても、ドットの形成状況を検出する画素を、ユニット毎に任意の画素位置に設定することが可能である。以下では、こうした第２の実施例の変形例について説明する。
【０１５２】
図２７は、第２実施例において、任意の画素位置でのドットの形成状況を検出する方法を示した説明図である。図２７（ａ）は、検出しようとする画素位置の分布を例示した説明図である。図中に示した小さな正方形は画素を模式的に示したものであり、破線で示した大きな正方形はユニットを示している。ドットの形成状況を検出しようとする画素位置は、画素中に「？」印を付して示している。検出しようとする画素位置および画素数は任意に設定することができるが、以下では、図２７（ａ）に示した画素位置でのドット形成状況を検出するものとして説明する。
【０１５３】
図２７（ｂ）は、第２実施例において、任意の画素位置でのドット形成状況を検出する方法を示す説明図である。第２実施例では、前述したように、ドット形成有無の判断結果を各ユニットの画素位置毎に記憶していることから、任意の画素位置でのドット形成状況を検出しようとする場合でも、各ユニットの画素位置に着目した方法で検出する。すなわち、図２７（ａ）に示した例では、画素Ｐa の画素位置について、ドット形成状況を検出しようとしているのは、処理ユニットの「１つ前のユニット」、「２つ前のユニット」、「３つ前のユニット」の３つのユニットである。また、画素Ｐb の画素位置については、処理ユニットの「１つ前のユニット」と、「２つ前のユニット」の２つのユニットである。更に、画素Ｐc あるいは画素Ｐd の画素位置については、いずれも処理ユニットの「１つ前のユニット」でのみドットの形成状況を検出している。このように、画素位置毎に、ドット形成状況を検出しようとするユニット位置を検出した後、検出したユニットにドットが形成されているか否かを画素位置毎に判断すれば、任意の画素位置でのドット形成状況を検出することが可能となる。以下、図２７（ａ）に示した場合に即して具体的に説明する。
【０１５４】
初めに画素Ｐa のドット形成状況を検出する場合について説明する。図２７（ｂ）には、こうして画素Ｐa の画素位置でのドット形成状況を検出する様子が模式的に示されている。先ず初めに、画素Ｐa でのドット形成判断結果を記憶したバッファ（履歴検出用バッファＡ）から３ユニット分の履歴データ（最下位から３ｂｉｔ分のデータ）を読み出す。もちろん、より多数のユニットを遡って検出する場合は、それに応じて読み出すデータ長を長くすればよい。
【０１５５】
次いで、この履歴データに履歴検出用データを作用させる。履歴検出用データは、画素Ｐa でのドット形成状況を検出しようとしているユニットに応じて設定される。図２７（ａ）に示すように、画素Ｐa については処理ユニットの「１つ前のユニット」、「２つ前のユニット」、「３つ前のユニット」の３つのユニットでドット形成状況を検出しようとしているから、これに対応して履歴検出用データは、最下位ｂｉｔから３つのｂｉｔに値「１」を設定する。こうして設定した履歴検出用データ（２進数表示で「１１１ (2)」）を、読み出した履歴データに作用させて中間データを算出する。「履歴検出用データを履歴データに作用させる」とは、前述したように、２つのデータの対応するｂｉｔ間で、論理積を採ることである。こうして中間データが得られたら、中間データの各ｂｉｔ間の論理和（あるいは算術和）を算出することにより、画素Ｐa についての検出結果を得ることができる。
【０１５６】
こうして画素Ｐa について得られた検出結果は、次のことを意味している。すなわち、検出結果が値「０」であることは、検出しようとしているユニットのいずれにも画素Ｐa にはドットが形成されていないことを意味している。逆に、検出結果としての論理和が「１」であることは、検出しようとしているユニットのいずれかには、画素Ｐa にドットが形成されていることを意味している。また、算術和を取ることによって検出結果を得た場合は、得られた数値は形成されているドットの個数を表している。もちろん、中間データの各ｂｉｔの論理和（あるいは算術和）を採る代わりに、論理積を採ることとしても良い。中間データの各ｂｉｔの論理積を採った場合、検出結果の値が「１」であることは、検出しようとしている全てのユニットの画素Ｐa に、ドットが形成されていることを意味することになる。
【０１５７】
同様の方法により、画素Ｐb についての検出結果を得ることができる。図２７（ｃ）には、画素Ｐb についてのドット形成状況を検出している様子を模式的に示している。図２７（ｂ）を参照して簡単に説明すると、先ず、画素Ｐb についてのドット形成有無を記録したバッファ（履歴検出用バッファＢ）から３ユニット分の履歴データを読み出す。次いで、このデータに履歴検出用データを作用させて中間データを算出する。画素Ｐb については、処理ユニットの「１つ前のユニット」、および「２つ前のユニット」でのドット形成状況を検出しようとしているから、これに対応して履歴検出用データは、最下位ｂｉｔから２つのｂｉｔが値「１」に設定されたデータ（２進数表示で「０１１ (2)」）を使用する。こうして、得られた中間データの各ｂｉｔ間の論理和（あるいは算術和）を求めることにより、画素Ｐb についての検出結果を得ることができる。
【０１５８】
画素Ｐc 、画素Ｐd についても同様にして、それぞれの画素についての検出結果を算出することができる。これら画素については、ドット形成状況を検出しようとしているユニットは、処理ユニットの「１つ前のユニット」のみであるから、これら画素については、履歴検出用データとして最下位ｂｉｔにのみ値「１」が設定されたデータ（２進数表示で「００１ (2)」）を使用すればよい。画素Ｐc についての検出結果を算出する様子を図２７（ｄ）に、また、画素Ｐd についての検出結果を算出する様子を図２７（ｅ）にそれぞれ示した。
【０１５９】
こうして各画素についての検出結果が得られたら、これら検出結果の論理和を算出することによって、最終的な検出結果を得ることができる。すなわち、図２７（ａ）に「？」印で示した画素のいずれかにドットが形成されていれば、検出結果として値「１」が得られ、逆にいずれの画素にもドットが形成されていない場合は検出結果として値「０」が得られることになる。もちろん、各画素についての検出結果の論理積を採ることによって、最終的な検出結果を算出することとしても良い。こうした場合は、図２７（ａ）に「？」印で示した全ての画素にドットが形成されている場合に、最終的な検出結果の値が「１」得られることになる。
【０１６０】
以上に説明した方法を用いれば、ドットの形成状況を検出しようとする画素位置を、既に処理済みのユニットの中から自由に設定することが可能である。従って、ユニット単位でドットの形成有無を判断する場合であっても、所定の画素位置でのドット形成状況を検出し、検出結果を踏まえてドットの形成有無を判断することにより、複数のユニットに亘って所定のパターンでドットが形成されることを効果的に回避することが可能となる。
【０１６１】
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。
【０１６２】
例えば、上述した各種実施例では、ユニットを構成する各画素についてのドット形成有無を判断する手法として、いわゆる誤差拡散法を用いているが、これに限らず、例えばディザ法などの周知な他の手法を適用することもできる。
【０１６３】
また、上述した各種実施例においては、処理済みのユニットの中で、所定の画素位置にドットが形成されていることが検出された場合には、着目画素についてドットが形成され難くするものとして説明した。これに対して、所定の画素位置にドットが形成されていない場合には、着目画素にドットが形成され易くする様にしても良い。こうすれば、例えば、ドットが高い密度で形成されるような領域では、ドットが形成されない画素が複数のユニットに亘って周期的に発生する場合に、画質の悪化を効果的に回避することができる。
【０１６４】
上述した機能を実現するソフトウェアプログラム（アプリケーションプログラム）を、通信回線を介してコンピュータシステムのメインメモリまたは外部記憶装置に供給し実行するものであってもよい。もちろん、ＣＤ−ＲＯＭやフレキシブルディスクに記憶されたソフトウェアプログラムを読み込んで実行するものであっても構わない。
【０１６５】
上述した各種実施例では、階調数変換処理を含む画像データ変換処理はコンピュータ内で実行されるものとして説明したが、画像データ変換処理の一部あるいは全部をプリンタ側、あるいは専用の画像処理装置を用いて実行するものであっても構わない。
【０１６６】
更には、画像表示装置は、必ずしも印刷媒体上にインクドットを形成して画像を印刷する印刷装置に限定されるものではなく、例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置であっても構わない。
【図面の簡単な説明】
【図１】  本発明の概要を例示した印刷システムの概略構成図である。
【図２】  本実施例の画像処理装置としてのコンピュータの構成を示す説明図である。
【図３】  本実施例の画像表示装置としてのプリンタの概略構成図である。
【図４】  本実施例の画像処理装置で行われる画像データ変換処理の流れを示すフローチャートである。
【図５】  ユニット単位で行われる階調数変換処理の流れを示すフローチャートである。
【図６】  複数個の画素をまとめて処理ユニットを設定している様子を示す説明図である。
【図７】  処理ユニットで発生した階調誤差を周辺の未判断画素に拡散させる様子を例示した説明図である。
【図８】  処理ユニットで発生した階調誤差を周辺の未判断画素に拡散させる割合を例示した説明図である。
【図９】  ユニットを構成する各画素についてドット形成の有無を判断することによりユニット内を多値化する処理の流れを示すフローチャートである。
【図１０】  ユニット内の各画素に誤差を拡散させながら、画素毎にドット形成の有無を判断する方法を概念的に示した説明図である。
【図１１】  第１実施例において、ユニット内の各画素についてドット形成の有無を判断することによりユニット内を多値化する処理の流れを示すフローチャートである。
【図１２】  第１実施例においてドットの形成状況を検出し、閾値の値を設定する処理の流れを示すフローチャートである。
【図１３】  第１実施例の履歴検出・閾値設定処理において読み出される履歴データの構造を概念的に示した説明図である。
【図１４】  第１実施例の履歴検出・閾値設定処理において履歴を検出するために設定される履歴検出用データの構造を概念的に示した説明図である。
【図１５】  第１実施例の履歴検出・閾値設定処理において履歴データに履歴検出用データを作用させて対象履歴を検出する様子を概念的に示した説明図である。
【図１６】  第１実施例において、履歴データを格納している履歴検出用バッファに、ユニット内各画素についての判断結果を書き込む処理の流れを示したフローチャートである。
【図１７】  第１実施例において、履歴データを格納している履歴検出用バッファに、ユニット内各画素についての判断結果を書き込んでいる様子を概念的に示した説明図である。
【図１８】  主走査方向に連続するドット列を２回の主走査に分けて形成する様子を示した説明図である。
【図１９】  ドットが一定の周期的なパターンで形成されているものの、こうしたパターンが視認されて画質が悪化するとは限らない場合を例示した説明図である。
【図２０】  第１実施例の第１の変形例においてドットの形成状況を検出し、閾値の値を設定する処理の流れを示すフローチャートである。
【図２１】  第１実施例の第２の変形例において履歴検出用データを設定している様子を概念的に示した説明図である。
【図２２】  第１実施例の第２の変形例において、異なる履歴検出用データを設定している様子を概念的に示した説明図である。
【図２３】  第２実施例において、ユニット内の各画素についてドット形成の有無を判断することによりユニット内を多値化する処理の流れを示すフローチャートである。
【図２４】  第２実施例において、ユニット内の画素位置に対応付けて設けられた履歴検出用バッファを概念的に示す説明図である。
【図２５】  第２実施例において、ドット形成状況を検出しようとする画素位置に応じて履歴検出用データを設定する方法を概念的に示した説明図である。
【図２６】  第２実施例において、ドット形成有無の判断結果を履歴検出用バッファに書き込む方法を概念的に示した説明図である。
【図２７】  第２実施例において、履歴データに履歴検出用データを作用させることにより、任意の画素位置でのドット形成状況を検出する方法を概念的に示した説明図である。
【符号の説明】
１０…コンピュータ
１２…プリンタドライバ
１４…階調数変換モジュール
２０…カラープリンタ
１００…コンピュータ
１０２…ＣＰＵ
１０４…ＲＯＭ
１０６…ＲＡＭ
１０８…周辺機器インターフェースＰ／ＩＦ
１０９…ディスクコントローラＤＤＣ
１１０…ネットワークインターフェースカードＮＩＣ
１１２…ビデオインターフェースＶ／ＩＦ
１１４…ＣＲＴ
１１６…バス
１１８…ハードディスク
１２０…デジタルカメラ
１２２…カラースキャナ
１２４…フレキシブルディスク
１２６…コンパクトディスク
２００…カラープリンタ
２３０…キャリッジモータ
２３５…紙送りモータ
２３６…プラテン
２４０…キャリッジ
２４１…印字ヘッド
２４２，２４３…インクカートリッジ
２４４…インク吐出用ヘッド
２６０…制御回路
２６１…ＣＰＵ
２６２…ＲＯＭ
２６３…ＲＡＭ
３００…通信回線
３１０…記憶装置
【図１】
0003972875.tif 000002
【図２】
0003972875.tif 000003
【図３】
0003972875.tif 000004
【図４】
0003972875.tif 000005
【図５】
0003972875.tif 000006
【図６】
0003972875.tif 000007
【図７】
0003972875.tif 000008
【図８】
0003972875.tif 000009
【図９】
0003972875.tif 000010
【図１０】
0003972875.tif 000011
【図１１】
0003972875.tif 000012
【図１２】
0003972875.tif 000013
【図１３】
0003972875.tif 000014
【図１４】
0003972875.tif 000015
【図１５】
0003972875.tif 000016
【図１６】
0003972875.tif 000017
【図１７】
0003972875.tif 000018
【図１８】
0003972875.tif 000019
【図１９】
0003972875.tif 000020
【図２０】
0003972875.tif 000021
【図２１】
0003972875.tif 000022
【図２２】
0003972875.tif 000023
【図２３】
0003972875.tif 000024
【図２４】
0003972875.tif 000025
【図２５】
0003972875.tif 000026
【図２６】
0003972875.tif 000027
【図２７】
0003972875.tif 000028