(57)【特許請求の範囲】
【請求項１】
画素毎の階調値を示す画像データを受け取り、該画素の列たるラスタに沿って該ラスタを構成する各画素でのドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式に変換する画像処理装置であって、
互いに隣接した所定本数の前記ラスタから成るラスタ群毎に前記画像データを変換するに際して、該ラスタ群の中の最後尾にある最後尾ラスタについては、該最後尾ラスタを構成する各画素のドット形成有無の判断により該各画素に生じる階調誤差を、該画素の周辺にある複数の未判断の画素に拡散して記憶する第１の誤差拡散手段と、
前記最後尾ラスタに隣接するラスタ群の中の先頭ラスタについては、該最後尾ラスタから該先頭ラスタの各画素に拡散されてきた階調誤差を考慮しながら該各画素のドット形成有無を判断することによって、該先頭ラスタをドット形成の有無を表すドット列に変換する先頭ラスタ変換手段と、
前記先頭ラスタを構成する各画素で生じた前記階調誤差を、該画素の周辺にある未判断の画素に拡散して記憶する第２の誤差拡散手段と、
前記ラスタ群から前記先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素から拡散されてきた階調誤差を考慮しながら該残余ラスタの各画素のドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して、該残余ラスタをドット列に変換する残余ラスタ変換手段と
を備え、
前記第１の誤差拡散手段および前記第２の誤差拡散手段は、前記ドット形成の有無を判断した画素とは異なるラスタ群の画素に拡散された誤差については第１の誤差記憶部に記憶し、該ドット形成有無を判断した画素と同じラスタ群の画素に拡散された誤差については第２の誤差記憶部に記憶する手段であり、
前記第１の誤差拡散手段あるいは前記第２の誤差拡散手段の少なくとも一方は、前記階調誤差を該階調誤差が生じた画素から所定値以上遠方の画素に拡散する際には、前記ドット形成有無を判断した画素と異なるラスタ群の画素にのみ拡散して記憶する手段である画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
前記第１の誤差拡散手段あるいは前記第２の誤差拡散手段の少なくとも一方は、前記階調誤差が生じた画素から所定値以上遠方で、且つ、前記ラスタに沿ってドット形成の有無を判断して行く方向とは逆方向の画素に、該階調誤差を拡散する際には、前記ドット形成有無を判断した画素と異なるラスタ群の画素にのみ拡散して記憶する手段である画像処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、画像を構成する複数の画素の階調値で表現された画像データを変換する技術に関し、詳しくは、該画像データを各画素についてのドットの形成有無による表現形式の画像データに変換する技術に関する。
【０００２】
【従来の技術】
印刷媒体や液晶画面といった表示媒体上にドットを形成することで画像を表現する画像表示装置は、各種画像機器の出力装置として広く使用されている。かかる画像表示装置は、局所的にはドットを形成するか否かのいずれかの状態しか表現し得ないが、画像の階調値に応じてドットの形成密度を適切に制御することによって、階調が連続的に変化する画像を表現することが可能となっている。
【０００３】
これら画像表示装置において、画像の階調値に応じて適切な密度でドットが形成されるように、各画素についてドット形成の有無を判断するための手法には、例えば誤差拡散法と呼ばれる手法や、これと数学的に等価な平均誤差最小法と呼ばれる手法などがある。
【０００４】
誤差拡散法と呼ばれる手法は、着目画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を、着目画素周辺の未判断画素に拡散して記憶しておき、未判断画素についてのドット形成有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するようにドット形成有無を判断する手法である。また、平均誤差最小法と呼ばれる手法は、ドット形成有無の判断により生じた階調表現の誤差を周辺画素に拡散することなく着目画素に記憶しておき、その代わりに、未判断画素についてのドット形成有無を判断するに際しては、周辺画素に記憶されている誤差を読み出してこれらの誤差を打ち消すように、着目画素についてのドット形成有無を判断する手法である。
【０００５】
これらいずれの手法においても、画像は多数の画素で構成されているので、全画素についてのドット形成有無の判断を同時に行うことは不可能である。一方、画像データは、原画像を走査して生成される関係上、走査して得られた画素の列（ラスタと呼ばれる）の順序に従って供給される。これらの理由から、ドット形成有無の判断は、画像を構成するラスタに沿って行われる。すなわち、ラスタの端部にある画素から順番にドット形成有無の判断を行い、そのラスタにある全画素の判断が終了したら、隣のラスタの処理を開始する。かかる方法においては、画像上で互いに隣接する画素であっても、異なるラスタに属する画素は連続して処理されるわけではないので、ドット形成判断により生じる階調表現の誤差を誤差バッファに蓄えておき、必要になったときに誤差バッファから読み出して使用する。このようにして、周辺画素で発生した階調表現の誤差を反映させながら、誤差を解消するようにドット形成の有無を判断することにより、画像の階調値に応じた適切な密度でドットを形成することができ、その結果、画像表示装置上に、高画質な画像を表示することが可能となる。
【０００６】
【発明が解決しようとする課題】
しかし、かかる方法では、ドット形成有無の判断を行う度に生じる階調表現の誤差を、誤差バッファに頻繁に読み書きしなければならず、ドット形成有無の判断を迅速に行うことができないという問題があった。すなわち、誤差拡散法においては、周辺画素に拡散すべき拡散誤差をドット形成有無を判断する度に誤差バッファに書き込まなければならず、あるいは平均誤差最小法においては、周辺画素で生じた階調表現の誤差をドット形成有無の判断の度に誤差バッファから読み出さなければならず、いずれの場合も誤差バッファに対して頻繁に読み書きを行う分だけ、ドット形成有無の判断に時間が必要となっていた。ドット形成有無の判断に時間がかかれば、画像を迅速に表示することは困難となる。
【０００７】
この発明は、従来技術における上述の課題を解決するためになされたものであり、画質の悪化を招くことなく、ドット形成有無の判断に要する時間を短縮化することによって、高画質の画像を迅速に表示可能な技術を提供することを目的とする。
【０００８】
【課題を解決するための手段およびその作用・効果】
上述の課題の少なくとも一部を解決するため、本発明の第１の画像処理装置は、次の構成を採用した。すなわち、
画素毎の階調値を示す画像データを受け取り、該画素の列たるラスタに沿って該ラスタを構成する各画素でのドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式に変換する画像処理装置であって、互いに隣接した所定本数の前記ラスタから成るラスタ群毎に前記画像データを変換するに際して、該ラスタ群の中の最後尾にある最後尾ラスタについては、該最後尾ラスタを構成する各画素のドット形成有無の判断により該各画素に生じる階調誤差を、該画素の周辺にある複数の未判断の画素に拡散して記憶する第１の誤差拡散手段と、
前記最後尾ラスタに隣接するラスタ群の中の先頭ラスタについては、該最後尾ラスタから該先頭ラスタの各画素に拡散されてきた階調誤差を考慮しながら該各画素のドット形成有無を判断することによって、該先頭ラスタをドット形成の有無を表すドット列に変換する先頭ラスタ変換手段と、
前記先頭ラスタを構成する各画素で生じた前記階調誤差を、該画素の周辺にある未判断の画素に拡散して記憶する第２の誤差拡散手段と、
前記ラスタ群から前記先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素から拡散されてきた階調誤差を考慮しながら該残余ラスタの各画素のドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して、該残余ラスタをドット列に変換する残余ラスタ変換手段と
を備え、
前記第１の誤差拡散手段および前記第２の誤差拡散手段は、前記ドット形成の有無を判断した画素とは異なるラスタ群の画素に拡散された誤差については第１の誤差記憶部に記憶し、該ドット形成有無を判断した画素と同じラスタ群の画素に拡散された誤差については第２の誤差記憶部に記憶する手段であることを要旨とする。
【０００９】
また、上記の第１の画像処理装置に対応する本発明の第１の画像処理方法は、
画素毎の階調値を示す画像データを受け取り、該画素の列たるラスタに沿って該ラスタを構成する各画素でのドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式に変換する画像処理方法であって、
（Ａ）互いに隣接した所定本数の前記ラスタから成るラスタ群毎に前記画像データを変換するに際して、該ラスタ群の中の最後尾にある最後尾ラスタについては、該最後尾ラスタを構成する各画素のドット形成有無の判断により該各画素に生じる階調誤差を、該画素の周辺にある複数の未判断の画素に拡散して記憶する工程と、
（Ｂ）前記最後尾ラスタに隣接するラスタ群の中の先頭ラスタについては、該最後尾ラスタから該先頭ラスタの各画素に拡散されてきた前記前記誤差を考慮しながら該各画素のドット形成有無を判断することによって、該先頭ラスタをドット形成の有無を表すドット列に変換する工程と、
（Ｃ）前記先頭ラスタを構成する各画素で生じた階調誤差を、該画素の周辺にある未判断の画素に拡散して記憶する工程と、
（Ｄ）前記ラスタ群から前記先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素から拡散されてきた階調誤差を考慮しながら該残余ラスタの各画素のドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して、該残余ラスタをドット列に変換する工程と
を備え、
前記工程（Ａ）および前記工程（Ｃ）は、前記ドット形成の有無を判断した画素と同じラスタ群の画素に拡散された誤差と、異なるラスタ群の画素に拡散された誤差とを区別して記憶する工程であることを要旨とする。
【００１０】
かかる第１の画像処理装置および画像処理方法においては、所定本数の隣接したラスタから成るラスタ群を単位として、該ラスタ群を構成する各ラスタについて、各画素のドット形成有無を判断することにより、各ラスタをドット列に変換する。ここで、ドット形成有無の判断によって生じた階調誤差を周辺の未判断画素に拡散させるに際して、該階調誤差の生じた判断画素と同じラスタ群に属する画素に拡散された誤差と、該判断画素と異なるラスタ群の画素に拡散された誤差とを区別して記憶する。先頭ラスタについては、隣接するラスタ群の画素から拡散されて記憶されている階調誤差を読み出しながらドット形成の有無を判断することにより、該先頭ラスタをドット列に変換する。一方、前記残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素から拡散されて記憶されている階調誤差を考慮しながらドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して、該残余ラスタをドット列に変換する。
【００１１】
このように、前記残余ラスタをドット列に変換する処理を、前記先頭ラスタをドット列に変換する処理と並行して実行することとすれば、ラスタ群の画像データを迅速に変換することができる。また、画像データをラスタ群単位で変換することから、同じラスタ群に属する画素に拡散された誤差は、異なるラスタ群に属する画素に拡散された誤差よりも早い時期に読み出されることになる。従って、同じラスタ群に属する画素に拡散された誤差と、異なるラスタ群に属する画素に拡散された誤差とを区別して記憶しておけば、誤差を迅速に読み出すことができ、延いては、ラスタ群単位で画像データを変換する処理を更に迅速に実行することが可能となる。
【００１２】
こうした画像処理装置においては、同じラスタ群の画素に拡散される誤差を、異なるラスタ群の画素への誤差よりも、データの記憶あるいは読み出しの少なくとも一方を迅速に実行可能に記憶することとしても良い。
【００１３】
画像データをラスタ郡単位で変換する場合、ドット形成有無を判断することによって生じる階調誤差は、異なるラスタ群の画素よりも、同じラスタ群に属する画素に拡散されることが多い。従って、同じラスタ群に属する画素に拡散される誤差を、異なるラスタ群に属する画素に拡散される誤差よりも、データの記憶あるいは読み出しの少なくとも一方を迅速に実行可能に記憶しておけば、誤差を拡散する処理を効果的に迅速化することができるので好ましい。
【００１４】
かかる画像処理装置においては、異なるラスタ群の画素に拡散された誤差については、前記先頭ラスタを構成する画素の数と少なくとも同数以上の画素数分を同時に記憶可能とするとともに、同じラスタ群の画素に拡散された誤差については該先頭ラスタを構成する画素の数より少数の画素数分だけ同時に記憶可能としてもよい。
【００１５】
画像データをラスタ群単位で変換する場合、同じラスタ群の画素に拡散される誤差は、該ラスタ群の画像データを変換中に使用され、それ以降は記憶しておく必要が無くなるので、該誤差を記憶していた記憶部は、該ラスタ群に属する他の画素に拡散される誤差を記憶することが可能となる。従って、同じラスタ群の画素に拡散された誤差については該先頭ラスタを構成する画素の数よりも小数の画素数分だけ記憶可能とすることで、記憶部が効率的に使用されることとなって好ましい。
【００１６】
上述した画像データの変換をコンピュータを用いて行う画像処理装置においては、同じラスタ群の画素に拡散された誤差は、該コンピュータの演算装置がデータの書き込みあるいは読み出しを直接に実行可能な記憶素子に記憶され、異なるラスタ群の画素に拡散された誤差は、該演算装置がデータの書き込みあるいは読み出しを間接的に実行する記憶素子に記憶することとしてもよい。
【００１７】
コンピュータの演算装置からデータを直接に書き込みあるいは読み出し可能な記憶素子は、迅速な書き込みあるいは読み出しが可能であり、従って、このような記憶素子に記憶することで、同じラスタ群の画素に拡散された誤差を迅速に記憶あるいは読み出すことが可能となるので好ましい。尚、かかる記憶素子は、データの書き込みあるいは読み出しのいずれか一方を、前記演算装置から直接に実行可能であることに限られず、書き込みおよび読み出しのいずれも演算装置から直接に実行可能な記憶素子であってもよいことは言うまでもない。
【００１８】
かかる画像処理装置においては、前記最後尾ラスタの各画素で発生した階調誤差を、前記ドット形成の有無を判断した画素の周辺にあって、異なるラスタ群に属する未判断の画素に拡散させるに際して、前記最後尾ラスタに隣接する前記先頭ラスタの画素のみに拡散するようにしてもよい。
【００１９】
こうすれば、異なるラスタ群の画素から階調誤差が拡散されるのは前記先頭ラスタの画素のみとなり、前記残余ラスタの画素に拡散されることはない。このため、前記先頭ラスタの各画素のドット形成有無を判断する際にだけ、前記第１の誤差記憶部に記憶されている誤差を読み出してドット形成有無を判断し、残余ラスタについては、第２の誤差記憶部に記憶されている誤差を読み出してドット形成有無を判断すればよい。その結果、全体としての処理が簡略化されるので、ドット形成有無を判断する処理を迅速に行うことが可能となって好ましい。
【００２０】
更に、かかる画像処理装置においては、ラスタ２本ずつ画像データを前記ドット列に変換することとして、該２本のラスタのうちの前側にある先頭ラスタと、後ろ側にある最後尾ラスタとを次のようにドット列に変換してもよい。すなわち、該最後尾ラスタの各画素についてドット形成の有無を判断することによって生じた階調誤差は、該最後尾ラスタの画素と該最後尾ラスタに隣接するラスタ群の前記先頭ラスタの画素とに拡散する。また、該先頭ラスタの各画素についてドット形成の有無を判断することによって生じた階調誤差は、該先頭ラスタの画素と該先頭ラスタに後続する最後尾ラスタの画素とに拡散する。こうして拡散されてきた階調誤差を考慮しながら、各ラスタ群の最後尾ラスタの各画素についてのドット形成の有無を判断することとしてもよい。
【００２１】
こうしてラスタ２本ずつドット列に変換して行くこととすれば、複数のラスタを並行してドット列に変換する処理を、簡便な処理により行うことができるので好適である。
【００２２】
かかる画像処理装置においては、各画素についてドット形成の有無を判断することによって生じた階調誤差を、該階調誤差が生じた画素から所定値以上遠方にある未判断画素に拡散させるに際しては、該ドット形成の有無を判断したラスタ群と異なるラスタ群の画素にのみ拡散することとしても良い。
【００２３】
ドット形成の有無を判断することによって生じた階調誤差を、遠方の未判断画素に拡散させる場合、拡散させる画素の位置が多少ずれていても画質を大きく損なうことはない。従って、遠方の未判断画素に拡散させる場合は、ドット形成有無を判断したラスタ群とは異なるラスタ群の画素にまとめて拡散させることとすれば、誤差を拡散させる処理を単純にすることができるので好ましい。
【００２４】
また、前述した課題の少なくとも一部を解決するため、本発明の第２の画像処理装置は、次の構成を採用した。すなわち、
画素毎の階調値を示す画像データを受け取り、該画素の列たるラスタに沿って該ラスタを構成する各画素でのドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式に変換する画像処理装置であって、互いに隣接した所定本数の前記ラスタから成るラスタ群毎に前記画像データを変換するに際して、該ラスタ群の中の少なくとも最後尾にある最後尾ラスタについては、該ラスタを構成する各画素のドット形成有無の判断により生じた階調誤差を、該判断を行った各画素に対応付けて第１の記憶部に記憶する第１の階調誤差記憶手段と、
前記最後尾ラスタに隣接するラスタ群の中の先頭ラスタについては、該先頭ラスタを構成する各画素の周辺にあって、ドット形成有無を判断済みの周辺画素に記憶されている前記階調誤差を考慮しながら、該各画素のドット形成有無を判断することによって、該先頭ラスタをドット列に変換する先頭ラスタ変換手段と、前記先頭ラスタを構成する各画素で生じた階調誤差を、前記判断を行った各画素に対応付けて第２の記憶部に記憶する第２の階調誤差記憶手段と、
前記ラスタ群から前記先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素で生じた階調誤差を考慮しながら該残余ラスタの各画素のドット形成有無を判断することにより、前記先頭ラスタを前記ドット列に変換する処理と並行して、該残余ラスタをドット列に変換する残余ラスタ変換手段と
を備えていることを要旨とする。
【００２５】
かかる第２の画像処理装置に対応する本発明の第２の画像処理方法は、
画素毎の階調値を示す画像データを受け取り、該画素の列たるラスタに沿って該ラスタを構成する各画素でのドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式に変換する画像処理方法であって、
（Ａ）互いに隣接した所定本数の前記ラスタから成るラスタ群毎に前記画像データを変換するに際して、該ラスタ群の中の少なくとも最後尾にある最後尾ラスタについては、該ラスタを構成する各画素のドット形成有無の判断により生じた階調誤差を、該判断を行った各画素に対応付けて記憶する工程と、
（Ｂ）前記最後尾ラスタに隣接するラスタ群の中の先頭ラスタについては、該先頭ラスタを構成する各画素の周辺にあって、ドット形成有無を判断済みの周辺画素に記憶されている前記階調誤差を考慮しながら、該各画素のドット形成有無を判断することによって、該先頭ラスタをドット列に変換する工程と、
（Ｃ）前記先頭ラスタを構成する各画素で生じた階調誤差を、前記工程（Ａ）で記憶された階調誤差とは区別しながら、前記判断を行った各画素に対応付けて記憶する工程と、
（Ｄ）前記ラスタ群から前記先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素で生じた階調誤差を考慮しつつ該残余ラスタの各画素のドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して、該残余ラスタをドット列に変換する工程と
を備えることを要旨とする。
【００２６】
かかる第２の画像処理装置および画像処理方法においても、前述の第１の画像処理装置および画像処理方法と同様に、所定本数の隣接したラスタから成るラスタ群を単位として、該ラスタ群を構成する各ラスタについて、各画素のドット形成有無を判断することにより、各ラスタをドット列に変換する。このとき、第２の画像処理装置および画像処理方法においては、前記最後尾ラスタの各画素で発生した階調誤差を該判断を行った各画素に対応付けて記憶しておき、前記先頭ラスタの画素のドット形成有無を判断するに際しては、該画素の周辺の前記最後尾ラスタの各画素に記憶されている階調誤差を読み出してドット形成有無を判断する。こうして先頭ラスタの各画素で生じた階調誤差は、前記最後尾ラスタの各画素で生じた階調誤差とは区別して記憶しておく。前記残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素で生じた階調誤差を考慮しつつドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して、該残余ラスタをドット列に変換する。
【００２７】
こうして、前記先頭ラスタと残余ラスタとを並行してラスタ群単位で画像データをドット列に変換すれば、画像データを迅速に変換することが可能となる。また、画像データをラスタ群単位で変換することから、処理中のラスタ群の前記最後尾ラスタで生じた階調誤差は、他のラスタで生じた階調誤差とは違って、現在のラスタ群の処理が終了してから読み出されるとことになる。従って、ラスタ群の最後尾ラスタで生じた階調誤差と、他のラスタで生じた階調誤差とを区別して記憶しておけば、誤差を迅速に読み出すことができ、延いては、画像データを迅速に変換することが可能となる。
【００２８】
こうした画像処理装置においては、最後尾ラスタ以外のラスタで生じた階調誤差を、最後尾ラスタで生じた階調誤差よりも、データの記憶あるいは読み出しの少なくとも一方を迅速に実行可能に記憶することとしても良い。
【００２９】
画像データをラスタ郡単位で変換する場合、１つのラスタ群に最後尾ラスタは１本しか存在しないが他のラスタは１本以上存在するので、ドット形成有無を判断する際に、最後尾ラスタで生じた階調誤差よりも、最後尾ラスタ以外のラスタで生じた階調誤差の方が頻繁に読み出されることになる。従って、最後尾ラスタ以外のラスタで生じた階調誤差を、最後尾ラスタで生じた階調誤差よりも、データの記憶あるいは読み出しの少なくとも一方を迅速に実行可能に記憶しておけば、ラスタ郡単位で変換する処理を効果的に迅速化することができるので好ましい。
【００３０】
かかる画像処理装置においては、前記最後尾ラスタの各画素で生じた階調誤差については、該最後尾ラスタを構成する画素と少なくとも同数以上の画素数分を同時に記憶可能とするとともに、前記先頭ラスタの各画素で生じた階調誤差については、該先頭ラスタを構成する画素よりも少数の画素数分だけ同時に記憶可能としてもよい。
【００３１】
画像データをラスタ群単位で変換する場合、ドット形成有無の判断によって生じた階調誤差は、同じラスタ群の画素についてのドット形成有無の判断に使用され、それ以降は記憶しておく必要が無くなるので、該階調誤差を記憶していた記憶部は、同じラスタ群に属する他の画素で生じた階調誤差を記憶するために使用することができる。従って、先頭ラスタの各画素で生じた階調誤差については、該先頭ラスタを構成する画素よりも少数の画素数分だけ記憶可能とすることで、記憶部が効率的に使用されることとなって好ましい。
【００３２】
上述した画像データの変換をコンピュータを用いて行う画像処理装置においては、前記先頭ラスタの各画素で生じた階調誤差は、該コンピュータの演算装置がデータの書き込みあるいは読み出しを直接に実行可能な記憶素子に記憶され、前記最後尾ラスタの各画素で生じた階調誤差は、該演算装置がデータの書き込みあるいは読み出しを間接的に実行する記憶素子に記憶することとしてもよい。
【００３３】
コンピュータの演算装置からデータを直接に書き込みあるいは読み出し可能な記憶素子は、迅速な書き込みあるいは読み出しが可能であり、従って、先頭ラスタの画素で生じた階調誤差をこのような記憶素子に記憶すれば、ラスタ群の画像データを迅速に変換することが可能となるので好ましい。尚、かかる記憶素子は、該演算装置からデータの書き込みおよび読み出しのいずれも実行可能な記憶素子であってもよいことは言うまでもない。
【００３４】
かかる第２の画像処理装置においては、前記ラスタ群の中の前記最後尾ラスタについてのみ、該ラスタを構成する各画素で生じた階調誤差を、該各画素毎に記憶しておき、前記先頭ラスタについてのドット形成有無を判断する際に考慮する前記階調誤差として、前記最後尾ラスタの各画素の階調誤差を考慮しながら、前記先頭ラスタを前記ドット列に変換することとしても良い。
【００３５】
こうすれば、前記先頭ラスタの各画素のドット形成有無を判断する際にだけ、異なるラスタ群に属する前記最後尾ラスタの画素で発生した階調誤差を読み出せばよく、残余ラスタの各画素のドット形成有無を判断する際には、異なるラスタ群の画素で生じた階調誤差を読み出さなくてもよいので、ラスタ群の画像データを迅速に変換することができる。
【００３６】
更に、かかる画像処理装置においては、ラスタ２本ずつ画像データを前記ドット列に変換することとして、該２本のラスタのうちの前側にある先頭ラスタと、後ろ側にある最後尾ラスタとを次のようにドット列に変換してもよい。すなわち、最後尾ラスタで生じた階調誤差のみを前記第１の記憶部に記憶しておき、先頭ラスタを構成する各画素のドット形成有無を判断するに際しては、該最後尾ラスタの各画素に記憶されている階調誤差を読み出して判断して、各画素で生じた階調誤差は、前記第２の記憶部に記憶する。該先頭ラスタに後続する最後尾ラスタについては、該先頭ラスタをドット列に変換することに並行して、該先頭ラスタの各画素で生じた階調誤差を考慮しながらドット列に変換する。
【００３７】
こうしてラスタ２本ずつドット列に変換して行くこととすれば、複数のラスタを並行してドット列に変換する処理を、簡便な処理により行うことができるので好適である。
【００３８】
かかる第１の画像処理装置あるいは第２の画像処理装置においては、前記先頭ラスタの各画素で生じた階調誤差を反映させつつ前記残余ラスタをドット列に変換するために、該先頭ラスタから該残余ラスタの各画素に拡散されてきた拡散誤差を考慮しながらドット形成有無を判断することによって、該残余ラスタをドット列に変換することとしても良い。あるいは、該先頭ラスタの各画素で生じた階調誤差を考慮しながらドット形成有無を判断することによって、該残余ラスタをドット列に変換することとしても良い。
【００３９】
これらの方法を用いれば、前記先頭ラスタの各画素で生じた階調誤差を反映させながら、前記残余ラスタをドット列に変換することができるので好適である。
【００４０】
また、印刷媒体上にインクドットを形成して画像を印刷する印刷部に対して、インクドットの形成を制御するための印刷データを出力することで、該印刷部を制御する印刷制御装置においては、本発明の上述した第１の画像処理装置あるいは第２の画像処理装置を好適に利用することができる。
【００４１】
すなわち、上述した第１の画像処理装置あるいは第２の画像処理装置においては、各画素の階調値を示す画像データを受け取り、該画像データをドットの形成有無による画像データに迅速に変換することができる。このため、かかる第１の画像処理装置あるいは第２の画像処理装置を、前記印刷制御装置に適用すれば、画像データを印刷データに迅速に変換することができる。こうして得られた印刷データを、前記印刷部に出力すれば、該印刷部では高画質な画像を迅速に印刷することが可能となるので好適である。
【００４２】
また、本発明は、上述した第１の画像処理方法、あるいは第２の画像処理方法を実現するプログラムをコンピュータに読み込ませ、コンピュータを用いて実現することも可能である。従って、本発明は次のような記録媒体としての態様も含んでいる。すなわち、上述の第１の画像処理方法に対応する記録媒体は、
画素毎の階調値を示す画像データを受け取り、該画素の列たるラスタに沿って該ラスタを構成する各画素でのドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式に変換する方法を実現するプログラムを、コンピュータで読みとり可能に記録した記録媒体であって、
（Ａ）互いに隣接した所定本数の前記ラスタから成るラスタ群毎に前記画像データを変換するに際して、該ラスタ群の中の最後尾にある最後尾ラスタについては、該最後尾ラスタを構成する各画素のドット形成有無の判断により該各画素に生じる階調誤差を、該画素の周辺にある複数の未判断の画素に拡散して記憶する機能と、
（Ｂ）前記最後尾ラスタに隣接するラスタ群の中の先頭ラスタについては、該最後尾ラスタから該先頭ラスタの各画素に拡散されてきた前記前記誤差を考慮しながら該各画素のドット形成有無を判断することによって、該先頭ラスタをドット形成の有無を表すドット列に変換する機能と、
（Ｃ）前記先頭ラスタを構成する各画素で生じた階調誤差を、該画素の周辺にある未判断の画素に拡散して記憶する機能と、
（Ｄ）前記ラスタ群から前記先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素から拡散されてきた階調誤差を考慮しながら該残余ラスタの各画素のドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して、該残余ラスタをドット列に変換する機能と
を実現するプログラムを記録するとともに、
前記機能（Ａ）および前記機能（Ｃ）として、前記ドット形成の有無を判断した画素と同じラスタ群の画素に拡散された誤差と、異なるラスタ群の画素に拡散された誤差とを区別して記憶する機能を実現するプログラムを記録していることを要旨とする。
【００４３】
また、上述の第２の画像処理方法に対応する記録媒体は、
画素毎の階調値を示す画像データを受け取り、該画素の列たるラスタに沿って該ラスタを構成する各画素でのドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式に変換する方法を実現するプログラムを、コンピュータで読みとり可能に記録した記録媒体であって、
（Ａ）互いに隣接した所定本数の前記ラスタから成るラスタ群毎に前記画像データを変換するに際して、該ラスタ群の中の少なくとも最後尾にある最後尾ラスタについては、該ラスタを構成する各画素のドット形成有無の判断により生じた階調誤差を、該判断を行った各画素に対応付けて記憶する機能と、
（Ｂ）前記最後尾ラスタに隣接するラスタ群の中の先頭ラスタについては、該先頭ラスタを構成する各画素の周辺にあって、ドット形成有無を判断済みの周辺画素に記憶されている前記階調誤差を考慮しながら、該各画素のドット形成有無を判断することによって、該先頭ラスタをドット列に変換する機能と、
（Ｃ）前記先頭ラスタを構成する各画素で生じた階調誤差を、前記機能（Ａ）により記憶された階調誤差とは区別しながら、前記判断を行った各画素に対応付けて記憶する機能と、
（Ｄ）前記ラスタ群から前記先頭ラスタを除いた残余ラスタについては、該残余ラスタと同じラスタ群に属し且つドット形成有無を判断済みの画素で生じた階調誤差を考慮しつつ該残余ラスタの各画素のドット形成有無を判断することにより、該先頭ラスタを前記ドット列に変換する処理に並行して、該残余ラスタをドット列に変換する機能と
を実現するプログラムを記録していることを要旨とする。
【００４４】
これら記録媒体に記録されているプログラムをコンピュータに読み込ませ、該コンピュータを用いて上述の各種機能を実現すれば、画素毎の階調値を示す画像データを、ドット形成の有無による表現形式の画像データに迅速に変換することが可能となる。
【００４５】
【発明の実施の形態】
本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って以下に説明する。
Ａ．実施の形態：
Ｂ．第１実施例：
Ｂ−１．装置構成：
Ｂ−２．画像データ変換処理の概要：
Ｂ−３．第１実施例の階調数変換処理：
Ｂ−４．変形例：
Ｃ．第２実施例：
Ｃ−１．第２実施例の階調数変換処理：
Ｃ−２．変形例：
【００４６】
Ａ．実施の形態：
図１を参照しながら、本発明の実施の形態について説明する。図１は、印刷システムを例にとって、本発明の実施の形態を説明するための説明図である。本印刷システムは、画像処理装置としてのコンピュータ１０と、カラープリンタ２０等から構成されている。コンピュータ１０は、デジタルカメラやカラースキャナなどの画像機器からカラー画像の階調画像データを受け取ると、該画像データを、カラープリンタ２０で印刷可能な各色ドットの形成有無により表現された印刷データに変換する。かかる画像データの変換は、プリンタドライバ１２と呼ばれる専用のプログラムを用いて行われる。尚、カラー画像の階調画像データは、各種アプリケーションプログラムを用いてコンピュータ１０で作成することもできる。
【００４７】
プリンタドライバ１２は、解像度変換モジュール，色変換モジュール，階調数変換モジュール，インターレースモジュールといった複数のモジュールから構成されている。階調数変換モジュールは、階調画像データをドット形成の有無による表現形式に変換する処理を行うモジュールである。本実施例の階調数変換モジュールは、着目画素についてのドット形成の有無を判断しようとする際に、周辺画素で発生した階調誤差を考慮して誤差を解消するように着目画素のドット形成有無を判断している。他の各モジュールで行われる処理については後述する。カラープリンタ２０は、これら各モジュールで変換された印刷データに基づいて、印刷媒体上に各色インクドットを形成することによってカラー画像を印刷する。
【００４８】
プリンタドライバ１２に供給される画像データは、図１に概念的に示したように、原稿画像を構成する各画素の階調値を、画像の端から１ラスタ分ずつ順番に出力したようなデータ構造となっている。プリンタドライバ１２内の解像度変換モジュール、色変換モジュールは、供給される画像データのデータ構造に従って、１ラスタずつそれぞれの処理を行うが、本発明の印刷システムにおける階調数変換モジュールでは、後述する方法により、互いに隣接する所定本数のラスタの処理を並行して行う。図１には、一例として３本のラスタを並行して処理している様子を概念的に示している。詳細には後述するが、このように複数本のラスタの処理を並行して行えば、並行して処理を行う複数ラスタ間では、互いのラスタで発生した階調誤差を考慮しながらドット形成判断を行うことができるので、階調誤差あるいは拡散誤差をいちいち誤差バッファに記憶しておく必要がない。すなわち、本実施例の階調数変換モジュールでは、誤差バッファに対して頻繁に読み書きを行う必要がないので、それだけドット形成有無の判断を迅速に行うことが可能となっている。
【００４９】
このように、複数本のラスタ間で発生した階調誤差を考慮しながら、並行してドット形成有無の判断を行う具体的な方法には、種々の態様が存在しており、これら各種の態様について、各種実施例を用いて以下に説明する。
【００５０】
Ｂ．第１実施例：
Ｂ−１．装置構成：
図２は、第１実施例の画像処理装置としてのコンピュータ１００の構成を示す説明図である。コンピュータ１００は、ＣＰＵ１０２を中心に、ＲＯＭ１０４やＲＡＭ１０６などを、バス１１６で互いに接続して構成された周知のコンピュータである。ＣＰＵ１０２は実際に処理を行う演算器と、処理中のデータを一時保持する複数のレジスタとから構成されている。レジスタに保持されているデータは、ＲＡＭ１０６に記憶されているデータよりも遙かに高速に処理することが可能である。
【００５１】
コンピュータ１００には、フレキシブルディスク１２４やコンパクトディスク１２６のデータを読み込むためのディスクコントローラＤＤＣ１０９や、周辺機器とデータの授受を行うための周辺機器インターフェースＰ・Ｉ／Ｆ１０８、ＣＲＴ１１４を駆動するためのビデオインターフェースＶ・Ｉ／Ｆ１１２等が接続されている。Ｐ・Ｉ／Ｆ１０８には、後述するカラープリンタ２００や、ハードディスク１１８等が接続されている。また、デジタルカメラ１２０や、カラースキャナ１２２等をＰ・Ｉ／Ｆ１０８に接続すれば、デジタルカメラ１２０やカラースキャナ１２２で取り込んだ画像を印刷することも可能である。また、ネットワークインターフェースカードＮＩＣ１１０を装着すれば、コンピュータ１００を通信回線３００に接続して、通信回線に接続された記憶装置３１０に記憶されているデータを取得することもできる。
【００５２】
図３は、第１実施例のカラープリンタ２００の概略構成を示す説明図である。カラープリンタ２００はシアン，マゼンタ，イエロ，ブラックの４色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら４色のインクに加えて、染料濃度の低いシアン（淡シアン）インクと染料濃度の低いマゼンタ（淡マゼンタ）インクとを含めた合計６色のインクドットを形成可能なインクジェットプリンタを用いることもできる。更には、明度の低い（暗い）イエロ（ダークイエロ）インクを加えた合計７色のインクドットを形成可能なインクジェットプリンタを用いても良い。尚、以下では場合によって、シアンインク，マゼンタインク，イエロインク，ブラックインク，淡シアンインク，淡マゼンタインク，ダークイエロインクのそれぞれを、Ｃインク，Ｍインク，Ｙインク，Ｋインク，ＬＣインク，ＬＭインク，ＤＹインクと略称するものとする。
【００５３】
カラープリンタ２００は、図示するように、キャリッジ２４０に搭載された印字ヘッド２４１を駆動してインクの吐出およびドット形成を行う機構と、このキャリッジ２４０をキャリッジモータ２３０によってプラテン２３６の軸方向に往復動させる機構と、紙送りモータ２３５によって印刷用紙Ｐを搬送する機構と、ドットの形成やキャリッジ２４０の移動および印刷用紙の搬送を制御する制御回路２６０とから構成されている。
【００５４】
キャリッジ２４０には、Ｋインクを収納するインクカートリッジ２４２と、Ｃインク，Ｍインク，Ｙインクの各種インクを収納するインクカートリッジ２４３とが装着されている。キャリッジ２４０にインクカートリッジ２４２，２４３を装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド２４１の下面に設けられた各色毎のインク吐出用ヘッド２４４ないし２４７に供給される。Ｋインク用のインク吐出ヘッド２４４には、図示するように、複数のノズルＮz が一定のノズルピッチｋで千鳥状に２列に配列されている。他色のインク吐出用ヘッド２４５ないし２４７についても同様に、ノズルピッチｋで千鳥状に並んだノズル列が１組ずつ設けられている。
【００５５】
制御回路２６０は、ＣＰＵ２６１とＲＯＭ２６２とＲＡＭ２６３等から構成されており、キャリッジモータ２３０と紙送りモータ２３５の動作を制御することによってキャリッジ２４０の主走査と副走査とを制御するとともに、コンピュータ１００から供給される印刷データに基づいて、各ノズルから適切なタイミングでインク滴を吐出する。こうして、制御回路２６０の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ２００はカラー画像を印刷することができる。
【００５６】
尚、各色のインク吐出ヘッドからインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインクを吐出する方式や、インク通路に配置したヒータでインク通路内に泡（バブル）を発生させてインク滴を吐出する方法などを用いることができる。また、インクを吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタを使用することも可能である。
【００５７】
更には、インク吐出ヘッドから吐出するインク滴の大きさを制御したり、あるいは微細なインク滴を一度に複数吐出して、吐出するインク滴の数を制御するといった方法を用いて、印刷用紙上に形成されるインクドットの大きさを制御な可能なプリンタ、いわゆるバリアブルドットプリンタを用いることも可能である。
【００５８】
Ｂ−２．画像データ変換処理の概要：
図４は、第１実施例の画像処理装置としてのコンピュータ１００が、受け取った画像データに所定の画像処理を加えることにより、該画像データを印刷データに変換する処理の流れを示すフローチャートである。かかる処理は、コンピュータ１００のオペレーティングシステムがプリンタドライバ１２を起動することによって開始される。以下、図４に従って、第１実施例の画像データ変換処理について簡単に説明する。
【００５９】
プリンタドライバ１２は、画像データ変換処理を開始すると、先ず初めに、変換すべきＲＧＢカラー画像データの読み込みを開始する（ステップＳ１００）。画像データは、Ｒ，Ｇ，Ｂ各色毎に１ラスタずつプリンタドライバ１２に読み込まれる。
【００６０】
次いで、取り込んだ画像データの解像度を、カラープリンタ２００が印刷するための解像度に変換する（ステップＳ１０２）。カラー画像データの解像度が印刷解像度よりも低い場合は、線形補間を行うことで隣接画像データ間に新たなデータを生成し、逆に印刷解像度よりも高い場合は、一定の割合でデータを間引くことによって画像データの解像度を印刷解像度に変換する。
【００６１】
こうして解像度を変換すると、カラー画像データの色変換処理を行う（ステップＳ１０４）。色変換処理とは、Ｒ，Ｇ，Ｂの階調値の組み合わせによって表現されているカラー画像データを、Ｃ，Ｍ，Ｙ，Ｋなどのカラープリンタ２００で使用する各色の階調値の組み合わせによって表現された画像データに変換する処理である。色変換処理は、色変換テーブル（ＬＵＴ）と呼ばれる３次元の数表を参照することで迅速に行うことができる。以上に説明した解像度変換処理（ステップＳ１０２）および色変換処理（ステップＳ１０４）は、１ラスタ毎に行われる。
【００６２】
色変換処理を終了すると、次は階調数変換処理を開始する（ステップＳ１０６）。階調数変換処理とは次のような処理である。色変換処理によって変換された階調データは、各色毎に２５６階調幅を持つデータとして表現されている。これに対し、本実施例のカラープリンタ２００では、「ドットを形成する」，「ドットを形成しない」のいずれかの状態しか採り得ない。すなわち、本実施例のカラープリンタ２００は局所的には２階調しか表現し得ない。そこで、２５６階調を有する画像データを、カラープリンタ２００が表現可能な２階調で表現された画像データに変換する必要がある。このような階調数の変換を行う処理が階調数変換処理である。前述したように、本実施例の階調数変換処理では、複数のラスタのドット形成の有無を並行して判断することにより、迅速な処理が可能となっている。階調数変換処理については、後ほど詳細に説明する。
【００６３】
こうして階調数変換処理を終了したら、プリンタドライバはインターレース処理を開始する（ステップＳ１０８）。インターレース処理は、ドットの形成有無を表す形式に変換された画像データを、ドットの形成順序を考慮しながらカラープリンタ２００に転送すべき順序に並べ替える処理である。プリンタドライバは、インターレース処理を行って最終的に得られた画像データを、印刷データとしてカラープリンタ２００に出力する（ステップＳ１１０）。カラープリンタ２００は、印刷データに従って、各色のインクドットを印刷媒体上に形成する。その結果、画像データに対応したカラー画像が印刷媒体上に印刷される。
【００６４】
以下では、第１実施例の階調数変換処理において、複数のラスタを並行して処理することにより、ドットの形成有無の判断を迅速に行う処理について説明する。
【００６５】
Ｂ−３．第１実施例の階調数変換処理：
（ａ）誤差拡散法による階調数変換処理の概要：
複数ラスタのドット形成有無を並行して実施する方法、および並行して実施することで階調数変換処理に要する時間を短縮化する原理を説明するための準備として、いわゆる誤差拡散法において、ラスタに沿ってドットの形成有無を判断していく方法について簡単に説明する。
【００６６】
図５は、ドット形成の有無を判断しようとする画像の一部を拡大して概念的に示した説明図である。小さなマス目の１つ１つは画素を示しており、画素が横一列に並んでラスタを形成している。説明の便宜上、図５（ａ）に示した一番上のラスタを「ラスタ０」とし、その下のラスタを「ラスタ１」、以降順番に「ラスタ２」，「ラスタ３」と符番する。個々の画素も区別するために、各画素にも「Ｐmn」と符番する。画素Ｐmnは、ラスタｍのｎ番目の画素であることを示している。図４に示した色変換処理後の画像データは、各画素に各色の階調値が対応付けられたようなデータとなっている。
【００６７】
誤差拡散法は、以下に説明するように、ラスタに沿って１画素ずつドット形成の有無を判断していく。図５（ａ）は、画素Ｐ11についてのドット形成有無を判断している様子を概念的に示した説明図である。画素Ｐ11のように、ドット形成の有無を判断しようとしている画素を、本明細書では着目画素と呼ぶ。図では、画素Ｐ11を太線で囲うことにより、着目画素であることを示している。また、図中で斜線を付した領域は、その領域の画素は既にドット形成の有無を判断済みであることを示している。
【００６８】
図５（ａ）に示されるように、着目画素Ｐ11についてドット形成有無を判断すると、その結果として、着目画素Ｐ11には階調誤差Ｅ11が発生する。すなわち、画素Ｐ11にドットを形成するにしても、あるいはドットを形成しないにしても、画素Ｐ11に表現される階調値（以下、このような階調値を結果値と呼ぶ）は、通常は、その画素についての画像データの階調値とは一致しない。従って、画素Ｐ11の結果値と、画素Ｐ11での画像データの階調値との差の分だけ、着目画素には階調誤差が発生することになる。誤差拡散法は、ドット形成有無を判断する度に生じる階調誤差を、着目画素の周辺の未判断画素に所定の重みをつけて拡散させる。周辺の未判断画素に拡散させる際に用いる重み係数は、誤差拡散係数と呼ばれ、着目画素を中心として画素毎に予め定められている。
【００６９】
図６は、誤差拡散係数が定められている様子を例示する説明図である。図６中で斜線が施されている画素が着目画素であり、着目画素からの位置に応じて各画素の誤差拡散係数が定められている。このように、着目画素を中心として周辺画素への誤差拡散係数を設定したマトリックスは、誤差拡散マトリックスと呼ばれる。例えば、図６（ａ）の誤差拡散マトリックスでは、着目画素の右隣の画素には、誤差拡散係数Ｋ01として「１／４」が設定されている。従って、図６（ａ）の誤差拡散マトリックスを使用すると、着目画素で発生した階調誤差の１／４の誤差が右隣の画素に配分されることになる。同様に、着目画素の左下，真下，右下の各画素にも、着目画素で生じた階調誤差の１／４の誤差が配分されることになる。誤差拡散マトリックスは図６に例示するものに限られず、誤差を拡散する範囲や誤差拡散係数などは種々の値を設定することが可能であり、実際の誤差拡散法では良好な画質が得られるように、適宜、適切な誤差拡散マトリックスが使用される。尚、説明の煩雑化を避けるために、以下の説明では、例示した誤差拡散マトリックスの中では最も拡散範囲の狭いマトリックス、すなわち、図６（ａ）の誤差拡散マトリックスを使用するものとして説明する。
【００７０】
誤差拡散マトリックスとして図６（ａ）のマトリックスを使用するものとすれば、図５（ａ）に示すように着目画素Ｐ11で生じた階調誤差Ｅ11は、右隣の画素Ｐ12，左下の画素Ｐ20，真下の画素Ｐ21，右下の画素Ｐ22の合計４つの画素に、それぞれ階調誤差Ｅ00の１／４ずつ配分される。尚、４つの周辺画素のうち、画素Ｐ20，画素Ｐ21，画素Ｐ22の３つの画素は、着目画素Ｐ11とは異なり、ラスタ２に属する画素である。こうして着目画素周辺のそれぞれの画素に拡散された誤差（拡散誤差）は、これら各画素のドット形成判断の際に使用するので、各画素を区別して記憶しておく必要がある。そのため拡散誤差は、多数の画素についての拡散誤差を記憶することの可能な、大容量のＲＡＭ１０６（図２参照）に記憶される。
【００７１】
画素Ｐ11についての階調誤差を周辺画素に拡散したら、今度は右隣の画素Ｐ12について、ドット形成有無の判断を開始する。図５（ｂ）は着目画素Ｐ12についてのドット形成有無を判断する様子を概念的に示す説明図である。ドット形成判断に際しては、先ず、周辺画素から着目画素Ｐ12に配分されて蓄積されている拡散誤差を読み出し、読み出した拡散誤差で着目画素Ｐ12の画像データを補正する。図５（ｂ）に示すように、着目画素Ｐ12には、ドット形成判断済みの周辺画素、すなわち画素Ｐ01，画素Ｐ02 ，画素Ｐ03，画素Ｐ11の４つの画素から、前述の誤差拡散マトリックスに従って拡散されてきた誤差が蓄積されている。この拡散誤差をＲＡＭ１０６から読み出して、着目画素Ｐ12の画像データを補正し、得られた補正値を所定の閾値と比較することでドットの形成有無を判断する。図５（ｃ）は、新たな着目画素Ｐ12について、ドットの形成有無を判断した状態を示している。ドット形成有無を判断した結果、新たな着目画素Ｐ12には階調誤差Ｅ12が発生するので、この階調誤差を、図５（ａ）で説明したのと同様に誤差拡散マトリックスに従って周辺画素に拡散する。
【００７２】
画素Ｐ12で発生した階調誤差を周辺画素に拡散したら、更に右隣にある画素Ｐ13についてのドット形成有無の判断を開始する。新たな着目画素Ｐ13でも階調誤差Ｅ13が発生するので、この誤差を誤差拡散マトリックスに従って周辺画素に拡散させ、更に右隣の画素のドット形成有無の判断を行う。このように、階調誤差を周辺画素に拡散しながら、着目画素を１画素ずつ右に移動させ、画像の右端の画素に達したら、今度は一旦、画像の左端に戻って１つ下にあるラスタの画素（図５に示す例では、画素Ｐ20）についてのドット形成有無の判断を開始する。ラスタ１と同様に、ラスタ２についても画像の右端の画素まで達したら、再び画像の左端に戻ってラスタ３の処理を開始する。
【００７３】
このように誤差拡散法では、着目画素をラスタに沿って１画素ずつ移動させ、周辺画素から拡散されてくる拡散誤差を考慮しながら、ドット形成有無の判断を行う。判断により着目画素に生じた階調誤差は、周辺の未判断画素に拡散して記憶しておき、これら未判断画素のドット形成有無を判断する際に使用される。
【００７４】
ここで、前述したように、周辺画素の中には、着目画素が属するラスタとは異なるラスタ上の画素も含まれている。ドット形成有無の判断はラスタに沿って行われるので、拡散誤差が分配されてきても、その画素の属するラスタの処理が始まるまでは、分配された拡散誤差を記憶しておかなければならない。更に、ラスタには多数の画素が含まれていることから、かなり多数の画素について、分配されてきた拡散誤差を各画素を区別した状態で記憶しておく必要がある。拡散誤差を記憶するために、記憶容量の大きなＲＡＭ１０６が使用されるのは、このような理由によるものである。
【００７５】
また、着目画素についてドット形成有無を判断する度に、発生した階調誤差を周辺の未判断画素に拡散しているために、ＲＡＭ１０６に対して頻繁にデータを読み書きする必要がある。ＲＡＭ１０６に対して頻繁にデータを読み書きすれば、その分だけ読み書きのための時間が増加して、ドット形成有無の判断に要する時間が長くなる。
【００７６】
（ｂ）本実施例の階調数変換処理の概要：
これに対して、本実施例の階調数変換処理では、以下に説明するようにして、複数本のラスタについてのドット形成有無の判断を並行して行う。こうすれば、ＲＡＭ１０６にデータを読み書きする頻度が減少するので、ドット形成有無の判断を迅速に行うことが可能となる。以下、複数ラスタの処理を並行して行うことにより、ドット形成有無の判断を迅速に行う原理について説明する。
【００７７】
図７は、最も簡単な例として、２本のラスタについてのドット形成有無の判断を並行して行う原理を示した説明図である。ここでは、ラスタｉと、その直ぐ下のラスタｊの２本のラスタについて、並行してドット形成有無を判断するものとする。
【００７８】
先ず初めに、ラスタｉの一番左側の画素Ｐi0のドット形成有無を判断する。図７（ａ）は、画素Ｐi0のドット形成有無を判断している様子を概念的に示している。画素Ｐi0には、ラスタｉの真上にあるラスタｈの画素Ｐh0や画素Ｐh1等から誤差が分配されて記憶されている。そこで、画素Ｐi0に記憶されている拡散誤差をコンピュータ１００のＲＡＭ１０６から読み出して、画像データの画素Ｐi0の階調値を補正し、得られた補正値と所定の閾値とを比較することで、画素Ｐi0についてのドット形成の有無を判断する。こうして、画素Ｐi0のドット形成有無を判断すると、画素Ｐi0に階調誤差が発生するので、これを誤差拡散マトリックスに従って周辺画素に拡散させる。ここでは、説明が煩雑化するのを避けるために、図６（ａ）に示した比較的単純な誤差拡散マトリックスを用いるものとして説明する。理解の便宜のために、図６（ａ）の誤差拡散マトリックスと同様のマトリックスを図７（ｂ）にも表示しておく。画素Ｐi0で発生した階調誤差は、図７（ｂ）の誤差拡散マトリックスに従って画素Ｐi1，画素Ｐj0，画素Ｐj1の３つの画素に配分され、それぞれの拡散誤差の値はＣＰＵ１０２に内蔵されているレジスタに記憶される。図７（ａ）では、画素Ｐi0から階調誤差が周辺画素に拡散される様子を太い矢印で概念的に表示している。
【００７９】
尚、本明細書では、並行して処理される複数のラスタ間での拡散誤差（図７では、例えばラスタｉの画素からラスタｊの画素への拡散誤差）はレジスタに記憶し、並行しては処理されないラスタ間での拡散誤差（図７では、例えばラスタｊの画素からラスタｋの画素への拡散誤差）はＲＡＭ１０６に記憶するものとしている。前述したように、レジスタはＲＡＭ１０６より高速に読み書きすることができるので、レジスタを活用することにより、階調数変換処理をより迅速に行うことができる。もっとも、並行に処理するラスタ間の誤差は、必ずレジスタに記憶しなければならないわけではなく、例えばＲＡＭ１０６上に記憶することとしても良い。これら、すぐに使用される拡散誤差は、ＲＡＭ１０６上に記憶することとしておいても、通常はＣＰＵ１０２のキャッシュメモリ内に残っている値を使用することができるので、実際には高速に読み書きすることが可能であり、階調数変換処理を迅速に行うことができる。
【００８０】
画素Ｐi0についてのドット形成有無を判断し、生じた階調誤差を拡散したら、次は右隣の画素Ｐi1のドット形成有無の判断を開始する。画素Ｐi1についても、１つ上にあるラスタｈの画素で生じた階調誤差が、図７（ｂ）の誤差拡散マトリックスに従って拡散されて、予めＲＡＭ１０６に記憶されている。そこで、ラスタｈの画素から拡散されてＲＡＭ１０６に予め記憶されている誤差を読み出し、この拡散誤差と、画素Ｐi0から画素Ｐi1に分配されてレジスタに記憶されている拡散誤差とで、画素Ｐi1の画像データの階調値を補正する。こうすれば、画素Ｐi1の画像データは、ラスタｈにある画素Ｐh0，画素Ｐh1，画素Ｐh2、および画素Ｐi0から拡散されてくる誤差で補正されることになるので、通常の誤差拡散法と等しい補正値を得ることができる。
【００８１】
この補正値と所定の閾値との大小関係を比較して、補正値の方が閾値より大きければ画素Ｐi1にドットを形成すると判断し、そうでなければドットを形成しないと判断する。判断の結果、画素Ｐi1にも階調誤差が生じるので、誤差拡散マトリックスに従って、周辺の４つの画素、画素Ｐi2，画素Ｐj0，画素Ｐj1，画素Ｐj2に分配する。これら４つの画素に分配される拡散誤差の値は、ＣＰＵ１０２のレジスタに画素毎に記憶される。図７（ａ）では、画素Ｐi1で発生した階調誤差が周辺画素に拡散される様子を細い実線の矢印で概念的に表示している。尚、画素Ｐj0に対しては既に画素Ｐi0からの拡散誤差が記憶されているので、この値に画素Ｐi1からの拡散誤差を加算して蓄積する。また、画素Ｐi1でのドット形成有無を判断してしまうと、画素Ｐi1への拡散誤差を記憶するために使用したレジスタは不要となるので、画素Ｐi1から他の画素に分配される拡散誤差を記憶するためにこのレジスタを使用することができる。
【００８２】
ラスタｉにある画素Ｐi0および画素Ｐi1についてのドット形成有無を判断したら、今度はラスタｊの左端にある画素Ｐj0についてのドット形成有無の判断を開始する。つまり、ここでは、ドット形成有無の判断によって生じた階調誤差は、図７（ｂ）の誤差拡散マトリックスに従って周辺画素に拡散されるものとしているから、画素Ｐi0からの拡散誤差と画素Ｐi1からの拡散誤差とが配分されてしまえば、画素Ｐj0については、すべての拡散誤差が配分されたことになる。そこで、これら２つの画素のドット形成判断を行った後に、画素Ｐj0の判断を行うのである。
【００８３】
図７（ｃ）は画素Ｐj0のドット形成有無を判断している様子を概念的に示す説明図である。図７（ｂ）に示した誤差拡散マトリックスによれば、画素Ｐj0には画素Ｐi0および画素Ｐi1から誤差が拡散されるが、上述したように、この誤差の値はＲＡＭ１０６ではなくＣＰＵ１０２のレジスタ内に記憶されている。そこで、この値を用いて、画像データの画素Ｐj0の階調値を補正し、補正値と閾値との大小関係に基づいてドット形成の有無を判断する。判断の結果、画素Ｐj0に発生した階調誤差は、誤差拡散マトリックスに従って、周辺の画素Ｐj1，画素Ｐk0，画素Ｐk1の３つの画素に拡散する。
【００８４】
ここで、図７に示す例では、ラスタｉの画素とラスタｊの画素とについてのドット形成有無の判断を並行して行うものとしている。このことから、画素Ｐk0および画素Ｐk1の２つの画素についてのドット形成有無の判断は、ラスタｉおよびラスタｊの画素の判断が全て終了してから行われることになる。そこで、画素Ｐk0への拡散誤差および画素Ｐk1への拡散誤差の値は、当分の間、使用されることがないと考えられるので、これらの値はＲＡＭ１０６に記憶する。一方、画素Ｐj1への拡散誤差は、ほどなく使用されると考えられるので、ＣＰＵ１０２のレジスタに記憶する。このように、ラスタｉおよびラスタｊの２つのラスタについてのドット形成有無の判断を並行して行うことから、ラスタｉより上のラスタで発生してラスタｉの画素に拡散される誤差は、ＲＡＭ１０６に記憶される。同様に、ラスタｊで発生してラスタｋの画素に拡散される誤差もＲＡＭ１０６に記憶される。これに対して、ラスタｉで発生してラスタｊの画素に拡散される誤差はＣＰＵ１０２のレジスタに記憶される。図７で、ラスタｉおよびラスタｋに斜線が施されているのは、これらラスタの画素に拡散された拡散誤差がＲＡＭ１０６上に記憶されていることを意味している。
【００８５】
また、図７（ｃ）において、画素Ｐj0から画素Ｐk0への矢印、あるいは画素Ｐj0から画素Ｐk1への矢印が、白抜きの矢印となっているのは、これら画素へ配分される拡散誤差がＲＡＭ１０６に記憶されることを示している。逆に、画素Ｐj0から画素Ｐj1への矢印が太線の矢印で表されているのは、画素Ｐj1へ配分される拡散誤差が、ＣＰＵ１０２のレジスタに記憶されることを示している。尚、既に画素Ｐj0のドット形成有無を判断しているので、画素Ｐj0への拡散誤差を記憶していたレジスタを他の目的、例えば、画素Ｐj1への拡散誤差を記憶するといったことに用いることができる。
【００８６】
こうして画素Ｐj0で発生した階調誤差を周辺画素に拡散したら、次はラスタｉの画素Ｐi2のドット形成有無を判断して発生した階調誤差を周辺画素に拡散し、その次にラスタｊの画素Ｐj1のドット形成有無を判断する。図７（ｄ）は、この様子を概念的に示す説明図である。画素Ｐi2のドット形成有無の判断に際しては、ラスタｈの画素から拡散されてＲＡＭ１０６に記憶されている拡散誤差と、画素Ｐi1から拡散されてレジスタに記憶されている拡散誤差とで、画像データの階調値を補正してドット形成有無を判断する。判断により生じた階調誤差は周辺画素に拡散させる。図７（ｄ）に太線の矢印で示されているように、周辺画素への拡散誤差はレジスタに記憶される。続く画素Ｐj1のドット形成有無の判断に際しては、レジスタに記憶されている拡散誤差を用いて画像データの階調値を補正し、所定の閾値との大小関係に基づいてドット形成有無を判断する。判断によって生じる階調誤差は、ラスタｋの画素への拡散誤差はＲＡＭ１０６に記憶し、ラスタｊの画素への拡散誤差はレジスタに記憶する。以上のようにして画素Ｐi2と画素Ｐj1とについての処理が終了したら、同様にして、画素Ｐi3と画素Ｐj2とについての処理を行う。
【００８７】
図７（ｄ）の画素中に丸印とともに付した番号は、ラスタｉの画素およびラスタｊの画素についてドット形成有無を判断する順番を示している。図示するように、ラスタｉの画素と、該画素の左下にあるラスタｊの画素とを、交互にドット形成有無の判断を行う。こうしてラスタｉとラスタｊとを並行して処理していけば、ラスタｊの画素への拡散誤差はレジスタに記憶することができ、ＲＡＭ１０６にはラスタｋの画素への拡散誤差を記憶すればよい。すなわち、ＲＡＭ１０６に対して拡散誤差を、書き込んだり読み出したりする頻度を減少させることができ、それだけドット形成有無の判断を迅速に行うことができるのである。
【００８８】
尚、図７に示したように、ラスタｉの左端の画素、すなわち画素Ｐi0については該画素の左下にラスタｊの画素が存在しないので、変則的に、画素Ｐi0に続いて同じラスタｉにある画素Ｐi1の処理を行っている。もっとも、画素Ｐi0の左下に架空の画素Ｐj-1 を想定し、画素Ｐi0に続いて架空の画素Ｐj-1 の処理を行った後、かかる架空の画素Ｐj-1 については、ドット形成有無の判断結果を使用せずに捨ててしまうこととしても良い。こうすれば、左端の画素についても架空の画素に対して通常の処理を行うことができるので、変則的な処理が不要となって好ましい。
【００８９】
図８は、２本のラスタについてのドット形成有無の判断を並行して行う処理の流れを示すフローチャートである。この処理はコンピュータ１００のＣＰＵ１０２によって行われる。尚、前述したように、本実施例のカラープリンタは、Ｃ，Ｍ，Ｙ，Ｋの４色のインクドットを形成可能なプリンタであり、図８に示す階調数変換処理も各色毎に行っているが、以下では説明の煩雑化を避けるために、インクドットの色を特定せずに説明する。もちろん、上記の４色に加えて、ＬＣインク，ＬＭインクを加えて６色プリンタに適用することも可能である。
【００９０】
また、前述したように本実施例のカラープリンタは、各色毎に大きさの異なるドットを形成可能なバリアブルドットプリンタとすることも可能である。バリアブルドットプリンタを使用する場合、例えば、大ドット，中ドット，小ドットの各種ドットを形成可能なバリアブルドットプリンタを用いる場合には、以下に説明する階調数変換処理は、各種大きさのドット毎に行われる。
【００９１】
このように、使用するインクの色が増加したり、種々の大きさのドットが形成可能となるにつれて階調数変換処理を行う回数が増加するので、それだけ処理に要する時間も長くなる傾向がある。以下に説明する本実施例の階調数変換処理は迅速な処理が可能であるために、このような場合にも好適に適用することができる。
【００９２】
本実施例の階調数変換処理を開始すると、先ず初めに、並行して処理するラスタの１本目のラスタの中から、ドット形成有無を判断しようとする画素の画像データと該画素に拡散されている拡散誤差とを取得する（ステップＳ２００）。ここでは、処理しようとする画素を、ラスタｉのｎ番目の画素Ｐinとする。画像データＣdin および拡散誤差Ｅdin は、いずれもＲＡＭ１０６に記憶されている。
【００９３】
続いて、画素Ｐinの画像データＣdin と拡散誤差Ｅdin とを加算することにより、画素Ｐinの補正データＣxin を算出する（ステップＳ２０２）。こうして得られた補正データＣxin と所定の閾値ｔh とを比較して（ステップＳ２０４）、補正データの方が大きければ画素Ｐinにドットを形成すると判断して、判断結果を示す変数Ｃr にドットを形成することを意味する値「１」書き込む（ステップＳ２０６）。そうでなければ画素Ｐinにはドットを形成しないと判断して、変数Ｃr にドットを形成しないことを意味する値「０」を書き込む（ステップＳ２０８）。
【００９４】
ラスタｉの画素Ｐinについてのドット形成有無を判断したら、該判断に伴って発生する階調誤差を算出する（ステップＳ２１０）。階調誤差Ｅinは、補正データＣxin から、ドットを形成することにより、あるいはドットを形成しないことにより画素Ｐinで表現される階調値（結果値）を減算することで求めることができる。得られた階調誤差に誤差拡散係数を乗算して、周辺画素への拡散誤差を算出する。誤差拡散係数は、誤差拡散マトリックスに画素毎に設定されている。こうして求められたラスタｉの画素への拡散誤差、およびラスタｉの直ぐ下にあるラスタｊの画素への拡散誤差はレジスタに記憶する（ステップＳ２１２）。それ以外の画素への拡散誤差、例えばラスタｋの画素への拡散誤差等があればＲＡＭ１０６に記憶しておく。
【００９５】
こうしてラスタｉの画素についてのドット形成判断および誤差の拡散が終了したら、ラスタｊの画素Ｐjn-1についてのドット形成有無の判断を開始する。すなわち、画素Ｐjn-1の画像データＣdjn-1 をＲＡＭ１０６から読みだし（ステップＳ２１４）、画素Ｐjn-1への拡散誤差Ｅdjn-1 をレジスタから読み込む（ステップＳ２１６）。レジスタから読み込んだ拡散誤差Ｅdjn-1 には、先にドット形成判断を行った画素Ｐinからの拡散誤差も蓄積されている。尚、ラスタｉの画素Ｐinが左端の画素Ｐi0である場合には、架空の画素Ｐj-1 に対してかかる処理を行う。
【００９６】
次いで、画像データＣdjn-1 と拡散誤差Ｅdjn-1 とを加算して補正データＣxjn-1 を算出し（ステップＳ２１８）、得られた補正データＣxjn-1 と所定の閾値ｔｈとを比較して（ステップＳ２２０）、補正データの方が大きければドットを形成すると判断して、判断結果を示す変数Ｃr にドットを形成することを意味する値「１」書き込む（ステップＳ２２２）。そうでなければドットを形成しないことを意味する値「０」を書き込む（ステップＳ２２４）。続いて、該判断にともなって画素Ｐjn-1に発生する階調誤差Ｅjn-1を算出する（ステップＳ２２６）。階調誤差Ｅjn-1は、補正データＣxjn-1 から、画素Ｐjn-1の結果値を減算することで求めることができる。得られた階調誤差に、誤差拡散マトリックスに設定されている誤差拡散係数を乗算して、周辺画素への拡散誤差を算出する。こうして拡散誤差を求めたら、ラスタｊの画素への拡散誤差はレジスタに記憶し、ラスタｋの画素への拡散誤差はＲＡＭ１０６に記憶する（ステップＳ２２８）。
【００９７】
以上のようにして、ラスタｉの画素とラスタｊの画素とについてのドット形成判断および誤差の拡散処理が終了したら、ラスタｉおよびラスタｊの全ての画素の処理を終了したか否かを判断する（ステップＳ２３０）。未処理の画素が残っている場合は、画素の位置を１つ右に移動させ、すなわち「ｎ＋１」の値で「ｎ」を置き換えて（ステップＳ２３２）、ステップＳ２００に戻って続く一連の処理を行う。未処理の画素が残っていない場合は、全てのラスタの処理が終了したか否かを判断し（ステップＳ２３４）、処理していないラスタが残っている場合はラスタ位置をラスタ２本分だけ下に移動させ、すなわち「ｉ＋２」の値で「ｉ」を置き換えて（ステップＳ２３６）、ステップＳ２００に戻って続く一連の処理を行う。未処理のラスタが残っていない場合は、図８に示した階調数変換処理を終了して、図４に示す画像データ変換処理に復帰する。
【００９８】
以上、説明したように、第１実施例の階調数変換処理においては、ラスタｉの画素とラスタｊの画素とを、並行して交互にドット形成有無を判断していく。こうすれば、ラスタｊの画素については、ラスタｉの画素に続いて、あるいは、ほどなくドット形成有無を判断することになる。従って、ラスタｊの画素のドット形成有無については、ラスタｉの画素から周辺画素への拡散誤差を一旦誤差バッファに記憶させずとも、直接判断することができるので、その分だけ、誤差バッファへの書き込み頻度を減らすことが可能となる。誤差バッファへの書き込み頻度を減少させることができれば、その分だけ、ドット形成有無の判断に要する時間を短縮化することができるので、階調数変換処理を迅速に行うことが可能となる。
【００９９】
また、誤差バッファの記憶容量を節約する必要がある場合には、ドット形成の有無を判断するために一旦使用した誤差バッファを、他のラスタについての判断のために再び使用する処理を行う。このような場合でも、上述した第１実施例の階調数変換処理においては、ラスタ２本につき誤差バッファをラスタ１本分ずつ設ければよいので、誤差バッファに記憶される全ラスタ本数を半減することができる。この結果、ドット形成判断に使用した誤差バッファを、他のラスタの判断のために再び使用する処理を行わなくても、誤差バッファの容量を節約することができる。もちろん、２本より多くの複数本のラスタを並行して処理することとすれば、ラスタ該複数本毎に誤差バッファをラスタ１本分ずつ設ければよいので、その分だけ誤差バッファの容量を節約することが可能となる。
【０１００】
Ｂ−４．変形例：
（１）第１の変形例：
以上では、もっとも簡単な例として、２つのラスタについてのドット形成有無の判断を並行して行うものとして説明したが、並行して処理するラスタの数は２つに限らず、３以上のラスタの処理を並行して行っても良い。図９は、３つのラスタについてのドット形成有無の判断を並行して行う場合を概念的に示した説明図である。図９では、ラスタｉとラスタｊとラスタｋの３つのラスタについてのドット形成の有無を並行して判断している。尚、説明が煩雑となることを避けるために、図７における場合と同様に、ここでも図６（ａ）に示した誤差拡散マトリックスを使用するものとする。
【０１０１】
ラスタｉとラスタＬとに斜線が施されているのは、これらラスタの画素に配分される拡散誤差がＲＡＭ１０６に記憶されることを示している。ラスタｉとラスタｊとラスタｋの各画素に付された丸印の中の数字は、各画素のドット形成の有無を判断していく順番を示したものである。図に示されるように、初めの３つの画素については、図７で説明した２つのラスタを並行して処理する場合と同じ順番でドット形成有無を判断する。以降の４つ目の画素からは、ラスタｉとラスタｊとラスタｋの３つの画素を一組として、この順番で並行してドットの形成有無を判断していく。ここでは、ラスタｉないしラスタｋの３つのラスタの処理を並行して行うこととしているので、これら３つのラスタの画素に拡散される誤差は、ほどなく使用されることから、ＣＰＵ１０２のレジスタに記憶される。ラスタＬの画素の拡散される誤差が使用されるのは、ラスタｉないしラスタｋの３つのラスタの処理が終了してからとなることから、ラスタＬの画素に拡散される誤差はＲＡＭ１０６に記憶される。このような処理を繰り返していくことにより、３つのラスタのドット形成有無の判断を並行して行うことができる。
【０１０２】
このようにしてラスタｉないしラスタｋの画素についてのドット形成有無の判断を並行して行うこととすれば、互いに隣接したラスタｉとラスタｊ、あるいはラスタｊとラスタｋとの間で、２ラスタを並行して処理するのと同様の効果を得ることができる。
【０１０３】
更に、ラスタｉないしラスタｋの処理を並行して行うこととすれば、ラスタｋの画素については、ラスタｉの画素に続いて、若しくは、ほどなくドット形成有無が判断されることになる。従って、ラスタｉの画素から周辺画素への拡散誤差を一旦誤差バッファに記憶させずとも、直接、ラスタｋの画素のドット形成有無を判断することが可能であり、その分だけ、誤差バッファへの書き込み頻度を減らして、ドット形成有無の判断に要する時間を短縮化することが可能となる。
【０１０４】
（２）第２の変形例：
以上の各種実施例では、説明が煩雑化することを避けるために、誤差拡散マトリックスは図６（ａ）に示した比較的小さなマトリックスを使用するものとした。もちろん、他の誤差拡散マトリックスを用いる場合でも、同様の方法により、複数ラスタの画素についてのドット形成有無を並行して判断することができる。一例として、図６（ｂ）の誤差拡散マトリックスを用いて、２本のラスタのドット形成有無を並行して判断する処理について、図１０を参照しながら説明する。
【０１０５】
理解の便宜のために、使用する誤差拡散マトリックスを図１０（ａ）に示す。このマトリックスは図６（ｂ）に示したマトリックスと同じものである。かかる誤差拡散マトリックスを使用した場合、斜線を付して表示している着目画素で発生した階調誤差は、着目画素に隣接する画素だけでなく、その隣の画素にまで拡散される。これを図１０（ｂ）にあてはめれば、画素Ｐj2で発生した階調誤差は、ラスタｉについては画素Ｐi3および画素Ｐi4に拡散され、ラスタｊについては画素Ｐj0ないし画素Ｐj4の各画素に拡散される。換言すれば、ラスタｊの画素Ｐj0には、ラスタｉの画素Ｐi0からの拡散誤差と、画素Ｐi1からの拡散誤差に加えて、画素Ｐi2からの拡散誤差が配分されることになる。そこで、ラスタｉに含まれるこれら３つの画素のドット形成有無の判断が終了してから、ラスタｊにある画素Ｐj0のドット形成有無の判断を開始する。つまり、図１０（ａ）に示す誤差拡散マトリックスを使用する場合は、ラスタｉの画素とラスタｊの画素との位置関係は、ラスタｊの画素がラスタｉの画素に対して２画素分遅れる関係となるのである。このように、複数のラスタの処理を並行して行う場合に、各ラスタに含まれるそれぞれの画素の位置関係は、階調誤差を拡散する範囲に応じて定めることができる。このような位置関係を保ったまま、それぞれのラスタの画素のドット形成有無を並行して判断していく。
【０１０６】
図１０（ｂ）は、ラスタｉの画素Ｐi2およびラスタｊの画素Ｐj0についてのドット形成有無の判断を連続して行う様子を示した説明図である。尚、図中に丸印とともに表示した数字は、ラスタｉおよびラスタｊの画素の中で、その画素が何番目にドット形成有無の判断が行われるかを示したものである。また、画素Ｐi2から周辺の画素に向かう太い矢印は、画素Ｐi2で発生した階調誤差が誤差拡散マトリックスに従って周辺画素に拡散される様子を概念的に示したものである。画素Ｐi2の階調誤差を周辺画素に拡散したら、画素Ｐj0のドット形成有無を判断する。画素Ｐj0で生じた階調誤差の中、ラスタｊの画素に配分される拡散誤差はＣＰＵ１０２のレジスタに記憶し、ラスタｋの画素に配分される拡散誤差はＲＡＭ１０６に記憶する。画素Ｐj0から、ラスタｋの画素に向かう白抜きの矢印は、これら画素に配分される拡散誤差がＲＡＭ１０６に記憶されることを示している。丸印の中の数字で示されているように、画素Ｐj0の次は、画素Ｐi3、その次は画素Ｐj1という順番で、ラスタｉの画素とラスタｊの画素とを交互にドット形成有無を判断していく。ラスタｉあるいはラスタｊの画素に配分される拡散誤差はＣＰＵ１０２のレジスタに記憶し、ラスタｋに配分される拡散誤差はＲＡＭ１０６に記憶する。以上の処理を繰り返しながら、ラスタｉおよびラスタｊの全画素についてのドット形成有無を判断したら、処理するラスタの位置を２つ下にずらして、ラスタｋとその下のラスタについて、同様の処理を繰り返していくことにより、図１０（ａ）に示す誤差拡散マトリックスを用いて２つのラスタのドット形成有無の判断を並行して行うことができる。
【０１０７】
このようにしてラスタｉとラスタｊとについてのドット形成有無の判断を並行して行う場合にも、ラスタｊの画素は、ラスタｉの画素に続いて、あるいは、ほどなくドット形成有無が判断される。従って、ラスタｉの画素から周辺画素への拡散誤差を一旦誤差バッファに記憶させずとも、直接、ラスタｊの画素のドット形成有無を判断することができるので、その分だけ、誤差バッファへの書き込み頻度を減らすことが可能となる。その結果、誤差バッファへの書き込み頻度を減少させて、ドット形成有無の判断に要する時間を短縮化することができる。
【０１０８】
（３）第３の変形例：
以上の各種実施例では、着目画素で発生した階調誤差は、着目画素があるラスタの画素と、そのラスタの１つ下のラスタの画素とに拡散されるものとして説明したが、このような場合に限られない。例えば、図６（ｄ）に例示するような誤差拡散マトリックスを用いれば、着目画素で発生した階調誤差は、着目画素のあるラスタから、その２つ下のラスタまでの画素に拡散される。図１１は、一例として、図６（ｄ）に示す誤差拡散マトリックスを用いた場合に、３つのラスタのドット形成有無を並行して判断する処理を概念的に示した説明図である。
【０１０９】
理解の便宜のために、使用する誤差拡散マトリックスを図１１（ａ）に示す。このマトリックスは図６（ｄ）のマトリックスと同じマトリックスである。仮にラスタｉとラスタｊとラスタｋの、３つのラスタについてのドット形成有無を並行して判断するものとする。ラスタｋの画素で発生した階調誤差は、図１１（ａ）の誤差拡散マトリックスに従って、ラスタｋないしラスタｍの３つのラスタの画素に拡散されるが、ラスタＬおよびラスタｍの２つのラスタにある画素については、ラスタｉないしラスタｋの３つのラスタの処理が終了してから、ドット形成有無が判断される。従って、ラスタＬおよびラスタｍに拡散される誤差は、ＲＡＭ１０６に記憶しておく。図１１（ｂ）では、拡散されてくる誤差をＲＡＭ１０６に記憶する画素に斜線を付して示している。このように、図１１（ａ）に示す誤差拡散マトリックスを用いた場合は、拡散されてくる誤差がＣＰＵ１０２のレジスタに記憶されるラスタと、ＲＡＭ１０６に記憶される２本のラスタとが交互に現れることになる。
【０１１０】
（４）第４の変形例：
階調誤差を広い範囲に拡散させる場合は、着目画素から所定以上遠方に拡散させる場合には、誤差バッファに拡散するものとしても良い。例えば、着目画素から３画素以上遠方に拡散する誤差は、誤差バッファの存在する画素に拡散するものとして、図１２（ａ）に示すような誤差拡散マトリックスを使用してもよい。図１２（ａ）で、着目画素から遠方で、２つのラスタにまたがって画素が破線で一体として表示されているのは、これら領域では２つのラスタのうち、誤差バッファが存在する側のラスタに誤差が拡散されることを示している。図１２（ｂ），（ｃ）を参照しながら具体的に説明する。着目画素が、誤差バッファの存在するラスタ上に位置している場合を考える。この場合、誤差バッファは、着目画素のあるラスタ、およびその２つ下のラスタにあるので、結局、図１２（ｂ）に示したマトリックスに従って誤差を拡散するのと同じことになる。次に、着目画素が誤差バッファの存在しないラスタ上に位置しているを考えると、この場合は、誤差バッファは、着目画素のあるラスタを上下に挟んだ２つのラスタにあるので、結局、図１２（ｃ）に示したマトリックスに従って誤差を拡散するのと同じことになる。
【０１１１】
このような図１２（ａ）の誤差拡散マトリックスと、これに対応する図６（ｃ）の誤差拡散マトリックスとを比較すれば明らかなように、図１２（ａ）では着目画素から３画素先にある領域（図中ではＫ 3と表示）には、図６（ｃ）の画素Ｋ03と画素Ｋ13とに拡散される誤差がまとまって拡散される。同様に、図１２（ａ）で着目画素から４画素先にある領域（図中でＫ 4と表示）には、図６（ｃ）の画素Ｋ04と画素Ｋ14とに拡散される誤差がまとまって拡散されている。
【０１１２】
着目画素で発生した誤差を遠方に拡散させる場合、誤差を拡散する画素の位置が多少ずれていても、さほど大きな画質の悪化を生じさせないことが経験上分かっている。そこで、階調誤差を広い範囲に拡散させる場合、遠方の画素については、誤差バッファのある画素に拡散しても画質が悪化することはない。上述した各種の実施例では、誤差を誤差バッファに拡散させない場合はＣＰＵ１０２のレジスタに記憶している。そこで、遠方の画素については誤差バッファに記憶することとすれば、その分だけ、ドット形成有無の判断に使用するレジスタを節約することができる。誤差を記憶しているレジスタ数が少なくなれば、処理を簡素なものにすることができ、更に、節約したレジスタを他の目的に使用すれば、それだけドット形成有無の判断を迅速に行うことが可能となる。
【０１１３】
尚、以上の説明では、誤差を２つのラスタの画素にまたがって拡散させるものとしたが、図１２（ｄ）に示すような誤差拡散マトリックスを用いれば、３つのラスタにまたがって拡散させることもできる。このように、より多数のラスタに拡散させる場合にも、遠方に拡散させる誤差については誤差バッファに拡散させることとすれば、画質の悪化を招くことなく、簡素で迅速な処理とすることができる。
【０１１４】
Ｃ．第２実施例：
以上に第１実施例の階調数変換処理として説明した各種実施例は、着目画素でドット形成有無を判断したことにより発生する階調誤差を、誤差拡散マトリックスに設定されている誤差拡散係数に従って、周辺画素の拡散して記憶した。この意味からは、第１実施例の方法は、いわゆる誤差拡散法と呼ばれる方法に準じた方法と考えることができる。このような方法ではなく、いわゆる平均誤差最小法と呼ばれる方法に準じた方法により、複数ラスタのドット形成有無の判断を並行して行うこともできる。以下では、このような第２実施例の階調数変換処理について説明する。
【０１１５】
Ｃ−１．第２実施例の階調数変換処理：
図１３は、第２実施例の階調数変換処理において複数ラスタの処理を並行して行うことにより、ドット形成有無の判断を迅速に行う原理を概念的に説明する説明図である。尚、第２実施例の階調数変換処理の詳細な説明に入る前に、その準備として、平均誤差最小法と呼ばれる手法について、図１３を流用して簡単に説明しておく。
【０１１６】
平均誤差最小法では、着目画素のドット形成有無を判断する場合、既にドット形成有無を判断済みの周辺画素から、各画素で発生した階調誤差を読み出して、これら階調誤差を考慮しながら着目画素のドット形成有無を判断する。これを、図１３（ａ）に則して説明する。図１３（ａ）は、画素Ｐi0のドット形成有無を判断する様子を示す説明図である。画素Ｐi0のドット形成有無を判断しようとする場合、先ず、画素Ｐi0周辺の画素Ｐh0および画素Ｐh1で発生した階調誤差に所定の重み係数を乗算し、これらを加算した値を算出する。図１３（ａ）で、画素Ｐh0，画素Ｐh1に、Ｅh0，Ｅh1とそれぞれ表示されているのは、各画素で階調誤差Ｅh0，Ｅh1が生じていることを示している。次いで、画素Ｐi0の画像データを算出した値で補正して、得られた補正値と所定の閾値との大小関係に基づいてドット形成の有無を判断する。階調誤差に乗算される重み係数は、着目画素に対する各画素の相対的な位置関係によって画素毎に予め設定されている。図１３（ｂ）は、着目画素を中心として、周辺の各画素に重み係数が設定されている様子を示す説明図である。図中に斜線を付した画素が着目画素である。例えば、着目画素の左隣の画素には、重み係数として「Ｋ0-1 」が設定されている。もっとも、着目画素周辺の各画素への重み係数を設定するマトリックスは、図１３（ｂ）のマトリックスに限定されるものではなく、図１４に例示する各種のマトリックスを使用することができる。
【０１１７】
こうして画素Ｐi0のドット形成有無を判断したら、右隣にある画素Ｐi1についてのドット形成有無を開始する。画素Ｐi1のドット形成有無に際しては、図１３（ｂ）に設定されたマトリックスに従って、画素Ｐh0と画素Ｐh1と画素Ｐh2および画素Ｐi0で発生した階調誤差を考慮しながらドット形成有無を判断する。画素Ｐi1の判断を終了したら、更に右隣にある画素Ｐi2の判断を開始する。このように、ラスタに沿って１画素ずつドット形成有無を判断していく。ドット形成有無の判断の結果として生じた階調誤差は、ＲＡＭ上に設けられた誤差バッファに記憶され、現在処理中のラスタにある全画素のドット形成有無の判断が終了した後、１つ下にあるラスタの処理の中で、再びＲＡＭ上の誤差バッファから読み出されて使用される。
【０１１８】
上述したように、平均誤差最小法を用いてドット形成有無を判断するためには、着目画素についてのドット形成有無を判断する度に、周辺画素の階調誤差をＲＡＭ上に設けられた誤差バッファから読み出さなければならず、また、判断によって着目画素に生じる階調誤差を、他の画素のドット形成判断に使用するため人、誤差バッファに記憶しておく必要がある。このように、誤差バッファに対して階調誤差を頻繁に読み書きするためには、その分だけドット形成有無の判断に時間が必要となる。
【０１１９】
これに対して、以下に説明する第２実施例の階調数変換処理においては、複数ラスタの処理を並行して行うことにより、ドット形成有無の判断を迅速に行うことが可能となる。以下、図１３を参照しつつ、複数ラスタの処理を並行して行うことにより、ドット形成有無の判断を迅速に行う原理について説明する。
【０１２０】
図１３は、最も簡単な例として、２本のラスタについてのドット形成有無の判断を並行して行う原理を示した説明図である。ここでは、ラスタｉと、その直ぐ下のラスタｊの２本のラスタについて、並行してドット形成有無を判断するものとする。
【０１２１】
先ず初めに、ラスタｉの一番左側の画素Ｐi0のドット形成有無を判断する。図１３（ａ）は、画素Ｐi0のドット形成有無を判断している様子を概念的に示している。着目画素Ｐi0についての判断を行うためには、前述した平均誤差拡散法と同様に、画素Ｐh0の階調誤差Ｅh0と画素Ｐh1の階調誤差Ｅh1とを使用する。これら階調誤差は、コンピュータ１００のＲＡＭ１０６上に記憶されている。ＲＡＭ１０６から読み出した各階調誤差に、図１３（ｂ）のマトリックスに設定されている重み係数を乗算して、着目画素Ｐi0の画像データを補正する。こうして得られた補正値に基づいて画素Ｐi0のドット形成有無を判断する。図１３（ａ）において、画素Ｐh0あるいは画素Ｐh1から着目画素Ｐi0に向けて表示された太線の矢印は、着目画素Ｐi0のドット形成有無を判断するために、画素Ｐh0あるいは画素Ｐh1の階調誤差を考慮することを概念的に表現したものである。
【０１２２】
画素Ｐi0についてのドット形成有無を判断したら、発生した階調誤差Ｅi0をＣＰＵ１０２のレジスタに一時記憶した後、画素Ｐi0の右隣にある画素Ｐi1についてのドット形成有無の判断を開始する。図１３（ｂ）に設定されているように、画素Ｐi1のドット形成有無の判断には、画素Ｐh0，画素Ｐh1，画素Ｐh2，および画素Ｐi0の各画素で発生した階調誤差が考慮される。図１３（ａ）では、これら各画素から画素Ｐi1に向けて表示されている細線の矢印は、着目画素Ｐi1のドット形成有無を判断するために、これら画素の階調誤差を考慮することを概念的に示すものである。これら４つの階調誤差の中、画素Ｐh0の階調誤差Ｅh0および画素Ｐh1の階調誤差Ｅh1は、先に画素Ｐh0についてのドット形成判断に使用した値を記憶しておき、この値を用いることができる。また、画素Ｐi0の階調誤差Ｅi0は、先程求めた値を使用することができる。従って、画素Ｐh2についての階調誤差Ｅh2のみをＲＡＭ１０６から読み出せば、画素Ｐi1についてのドット形成有無を判断することが可能である。判断した結果として画素Ｐi1に生じた階調誤差Ｅi1は、ＣＰＵ１０２のレジスタに記憶しておく。
【０１２３】
第２実施例の階調数変換処理では、ラスタｉにある画素Ｐi0および画素Ｐi1のドット形成有無を判断したら、次は、ラスタｊにある画素Ｐj0についてのドット形成有無を判断する。図１３（ｃ）は、画素Ｐj0のドット形成有無を反する様子を概念的に示す説明図である。図１３（ｂ）のマトリックスから明らかなように、画素Ｐj0のドット形成有無は、画素Ｐi0および画素Ｐi1での階調誤差を考慮するだけで判断することができる。前述したように、これら階調誤差Ｅi0およびＥi1は、画素Ｐj0の直前に求められて、ＣＰＵ１０２のレジスタに記憶されている。このことから、画素Ｐj0についてはＲＡＭ１０６から階調誤差を読み出すことなく、ドット形成有無を判断することができる。こうして、画素Ｐj0のドット形成有無を判断したら、画素Ｐj0で生じた階調誤差を、ＣＰＵ１０２のレジスタとＲＡＭ１０６上の誤差バッファとに記憶し、以降は、ラスタｉの画素とラスタｊの画素とについて交互にドット形成有無を判断していく。
【０１２４】
尚、画素Ｐj0の階調誤差Ｅj0をＲＡＭ１０６上の誤差バッファに記憶する理由は、ラスタｉおよびラスタｊの処理を終了後、ラスタｋにある画素のドット形成有無を判断する際に、階調誤差Ｅj0を使用するためである。また、誤差バッファだけでなくＣＰＵ１０２のレジスタにも記憶するのは、隣接する画素Ｐj1のドット形成有無の判断の際に使用するためである。前述した画素Ｐi0あるいは画素Ｐi1のドット形成有無の判断に際しては、こうしてＲＡＭ１０６に記憶されていた階調誤差を読み出して使用している。図１３において、ラスタｈおよびラスタｊの画素に斜線が施されているのは、これら画素の階調誤差が誤差バッファに記憶されていることを示すものである。
【０１２５】
図１３（ｄ）中で、画素に表示した丸印の中の数字は、各画素のドット形成有無を判断する順番を示したものである。図１３（ｄ）に示されているように、画素Ｐj0の次ぎにドット形成有無を判断する画素は、ラスタｉにある画素Ｐi2の画素である。かかる画素のドット形成判断に考慮される階調誤差は、画素Ｐh1，画素Ｐh2，画素Ｐh3、および画素Ｐi1の４つの階調値であるが、前述の画素Ｐi1の場合に使用した階調誤差を記憶しておけば、ＲＡＭ１０６からは、画素Ｐh3で生じた階調誤差のみを読み出すだけでドット形成有無を判断することができる。更に、画素Ｐi2の次は、ラスタｊの画素Ｐj1についてのドット形成有無を判断する。画素Ｐj1のドット形成有無の判断には、画素Ｐi0，画素Ｐi1，画素Ｐi2、および画素Ｐj0の各画素での階調誤差を使用するが、これら各階調誤差は、いずれも直前に求められて、ＣＰＵ１０２のレジスタに記憶されている。従って、画素Ｐj1については、ＲＡＭ１０６から階調誤差を読み出すことなくドット形成有無を判断することができる。こうして画素Ｐj1の階調誤差Ｅj1が求められたら、ＣＰＵ１０２のレジスタと、ＲＡＭ１０６上の誤差バッファとに階調誤差Ｅj1を記憶する。
【０１２６】
以上に説明したように、ラスタｉの画素と、該画素の左下にあるラスタｊの画素とを、交互にドット形成の有無を判断していく。こうして、ラスタｉと隣接するラスタｊの処理を並行して行えば、ラスタｊの画素については、ＲＡＭ１０６から階調誤差を読み出すことなくドット形成有無を判断することができる。すなわち、その分だけ、ＲＡＭ１０６上の誤差バッファに対して読み書きする頻度を減らすことができるので、ドット形成有無の判断を迅速に行うことができるのである。
【０１２７】
尚、図１３に示したように、ラスタｉの左端の画素、すなわち画素Ｐi0については該画素の左下にラスタｊの画素が存在しないので、変則的に、画素Ｐi0に続いて同じラスタｉにある画素Ｐi1の処理を行っている。もっとも、画素Ｐi0の左下に架空の画素Ｐj-1 を想定し、画素Ｐi0に続いて架空の画素Ｐj-1 の処理を行った後、かかる架空の画素Ｐj-1 については、ドット形成有無の判断結果を使用せずに捨ててしまうこととしても良い。こうすれば、左端の画素についても架空の画素に対して通常の処理を行うことができるので、変則的な処理が不要となって好ましい。
【０１２８】
図１５は、２本のラスタについてのドット形成有無の判断を並行して行う処理の流れを示すフローチャートである。この処理はコンピュータ１００のＣＰＵ１０２によって行われる。尚、前述した第１実施例の階調数変換処理と同様に、第２実施例の階調数変換処理も、カラープリンタに備えられた各色毎に行われるが、説明の煩雑化を避けるために、インクドットの色を特定せずに説明する。また、いわゆるバリアブルドットプリンタを使用する場合、第２実施例の階調数変換処理がドットの各種大きさ毎に行われることは、前述した第１実施例の場合と同様である。
【０１２９】
第２実施例の階調数変換処理を開始すると、先ず初めに、並行して処理するラスタの１本目のラスタの中から、ドット形成有無を判断しようとする画素の画像データを取得する（ステップＳ３００）。ここでは、第１実施例に合わせて、処理しようとする画素（着目画素）をラスタｉのｎ番目の画素Ｐinとする。画像データＣdin は、ＲＡＭ１０６に記憶されている。
【０１３０】
次いで、着目画素Ｐinの周辺画素の階調誤差を読み出す（ステップＳ３０２）。周辺画素とは、着目画素から所定領域内にあって、着目画素のドット形成有無の判断に階調誤差が考慮される画素である。着目画素のドット形成有無の判断に際しては、周辺画素として種々の範囲の画素を考慮することができるが、説明が煩雑となることを避けるために、以下では、図１４（ａ）のマトリックスに示した周辺画素を考慮するものとする。尚、ステップＳ３０２において周辺画素の階調誤差を読み出すにあたっては、図１３を用いて説明したように、着目画素Ｐinの左隣にある画素Ｐin-1の判断の際に読み出した各画素の階調誤差をレジスタに記憶しておき、ステップＳ３０２では、レジスタに記憶されていない階調誤差のみを、ＲＡＭ１０６から読み出すようにしても良い。
【０１３１】
こうして読み出した周辺画素の階調誤差と、着目画素Ｐinの画像データＣdin とに基づいて、着目画素Ｐinの補正データＣxin を算出する（ステップＳ３０４）。すなわち、周辺画素の階調誤差と、周辺画素毎に定められた所定の重み係数とを乗算し、これら乗算値と着目画素Ｐinの画像データＣdin との和を求めて、補正データＣxin とするのである。周辺画素の重み係数は、図１４（ａ）のマトリックスに画素毎に定められている。
【０１３２】
こうして得られた補正データＣxin と所定の閾値ｔh とを比較して（ステップＳ３０６）、補正データの方が大きければ画素Ｐinにドットを形成すると判断して、判断結果を示す変数Ｃr にドットを形成することを意味する値「１」書き込む（ステップＳ３０８）。そうでなければ画素Ｐinにはドットを形成しないと判断して、変数Ｃr にドットを形成しないことを意味する値「０」を書き込む（ステップＳ３１０）。
【０１３３】
ラスタｉの画素Ｐinについてのドット形成有無を判断したら、該判断に伴って発生する階調誤差Ｅinを算出してＣＰＵ１０２のレジスタに記憶する（ステップＳ３１２）。階調誤差Ｅinは、第１実施例と同様に、補正データＣxin から着目画素Ｐinの結果値を減算することで求めることができる。
【０１３４】
以上のようにして、ラスタｉにある画素Ｐinのドット形成有無を判断し、階調誤差をＣＰＵ１０２のレジスタに記憶したら、画素Ｐinの左下にあるラスタｊの画素Ｐjn-1について、ドット形成有無を判断するための処理を開始する。先ず、画素Ｐjn-1の画像データＣdjn-1 をＲＡＭ１０６から読み出して（ステップＳ３１４）、周辺にある各画素の階調誤差をＣＰＵ１０２のレジスタから読み出す（ステップＳ３１６）。尚、画素Ｐinがラスタｉの左端にある画素Ｐi0である場合は、架空の画素Ｐj-1 について同様の処理を行う。
【０１３５】
ここで、ステップＳ３１６においては、周辺画素の階調誤差をレジスタから読み出すことが可能であり、ＲＡＭ１０６上の誤差バッファから読み出さなくて良い理由について説明する。前述したように、周辺画素として図１４（ａ）に示す範囲を考慮するとしているから、ラスタｊにある画素のドット形成有無の判断には、同じラスタｉにある画素の階調誤差と、１つ上にあるラスタｊの画素の階調誤差とが考慮される。ここで、ラスタｉの画素とラスタｊの画素は並行してドット形成有無を判断しているから、ラスタｊにある画素のドット形成有無を判断する際に周辺画素となるのは、全て、少し前にドット形成有無を判断した画素ばかりである。従って、ドット形成有無を判断することで生じる階調誤差を、しばらくの間だけＣＰＵ１０２のレジスタに蓄えておけば、ＲＡＭ１０６上の誤差バッファから読み出さずとも、周辺画素の階調誤差を全てレジスタから読み出すことができるのである。
【０１３６】
こうして画素Ｐjn-1について、周辺画素の階調誤差を読み出したら、画素Ｐinの場合と同様にして、ドット形成有無を判断し、該判断に伴って生じる階調誤差Ｅjn-1を算出する。すなわち、周辺画素の階調誤差と、着目画素Ｐjn-1の画像データＣdjn-1 とに基づいて補正データＣxjn-1 を算出し（ステップＳ３１８）、得られた補正データＣxjn-1 と所定の閾値ｔh とを比較し（ステップＳ３２０）、補正データの方が大きければ画素Ｐjn-1にドットを形成すると判断して、判断結果を示す変数Ｃr にドットを形成することを意味する値「１」書き込む（ステップＳ３２２）。そうでなければ画素Ｐjn-1にはドットを形成しないと判断して、変数Ｃr にドットを形成しないことを意味する値「０」を書き込む（ステップＳ３２４）。次いで、補正データＣxjn-1 から着目画素Ｐjn-1の結果値を減算して、着目画素Ｐjn-1で生じる階調誤差Ｅjn-1を算出する。
【０１３７】
以上のようにして、ラスタｊにある画素Ｐjn-1の階調誤差Ｅjn-1を求めたら、該階調誤差Ｅjn-1を、ＣＰＵ１０２のレジスタとＲＡＭ１０６上の誤差バッファとに記憶する（ステップＳ３２８）。ここで、階調誤差をレジスタと誤差バッファとに記憶するのは、次の理由によるものである。画素Ｐjn-1の階調誤差Ｅjn-1は、隣接する画素Ｐjnのドット形成有無の判断と、１つ下のラスタｋにある画素のドット形成有無の判断に使用される。ここでは、ラスタｉおよびラスタｊの処理を並行して行うものとしているから、隣接する画素Ｐjnのドット形成有無の判断はほどなく行われるが、ラスタｋにある画素の判断は、ラスタｉおよびラスタｊの処理が終了した後に行われる。従って、画素Ｐjn-1の階調誤差Ｅjn-1は、画素Ｐjnの判断で使用するためにＣＰＵ１０２のレジスタに記憶するとともに、ラスタｋの画素についての判断に使用するために、ＲＡＭ１０６上の誤差バッファにも記憶しておくのである。
【０１３８】
以上のようにして、ラスタｉの画素とラスタｊの画素とについて、ドット形成有無を判断する処理が終了したら、ラスタｉおよびラスタｊの全ての画素の処理を終了したか否かを判断する（ステップＳ３３０）。未処理の画素が残っている場合は、画素の位置を１つ右に移動させ、すなわち「ｎ＋１」の値で「ｎ」を置き換えて、ステップＳ２００に戻って続く一連の処理を行う。未処理の画素が残っていない場合は、全てのラスタの処理が終了したか否かを判断し（ステップＳ３３２）、処理していないラスタが残っている場合はラスタ位置をラスタ２本分だけ下に移動させ、すなわち「ｉ＋２」の値で「ｉ」を置き換えた後、ステップＳ２００に戻って続く一連の処理を行う。未処理のラスタが残っていない場合は、図１５に示した階調数変換処理を終了して、図４に示す画像データ変換処理に復帰する。
【０１３９】
以上に説明したように、第２実施例の階調数変換処理によれば、ラスタｉの画素とラスタｊの画素とを、並行して交互にドット形成有無を判断していく。こうすれば、ラスタｊの画素は、ラスタｉの画素に続いて、あるいは、ほどなくドット形成有無が判断されることになるので、ラスタｉの画素で発生した階調誤差を誤差バッファに記憶しておかなくとも、ラスタｊの画素のドット形成有無を判断することができる。ラスタｉの画素で発生した階調誤差を誤差バッファに記憶しなくても良くなれば、その分だけ、誤差バッファへの書き込み頻度を減らすことができるので、ドット形成有無の判断を迅速に行うことが可能となる。もちろん、並行して処理するラスタの本数は２本に限られず、より多くのラスタについてのドット形成有無の判断を並行して行うようにしても良い。並行して処理するラスタの本数が多くなるほど、誤差バッファへの書き込み頻度を少なくなり、その分だけドット形成有無の判断を迅速に行うことが可能となって好ましい。
【０１４０】
Ｃ−２．変形例：
上述した第２実施例の階調数変換処理は、いわゆる平均誤差最小法と呼ばれる方法に準じた方法を用いてドット形成有無を判断している。すなわち、着目画素で生じた階調誤差を該着目画素に記憶しておき、新たな画素のドット形成有無の判断に際しては、周辺の画素に記憶されている階調誤差を考慮してドット形成有無を判断している。また、前述の第１実施例の階調数変換処理では、いわゆる誤差拡散法と呼ばれる方法に準じた方法を用いてドット形成有無を判断している。すなわち、着目画素で生じた階調誤差を周辺画素に拡散しておき、新たな画素のドット形成有無を判断する際には、周辺の既判断画素から拡散されて蓄積されている拡散誤差を考慮してドット形成有無を判断している。これらに対して、平均誤差最小法と、誤差拡散法とを併用しながらドット形成有無を判断することも可能である。以下では、このような第２実施例の変形例について簡単に説明する。
【０１４１】
図１６は、第２実施例の変形例の階調数変換処理を概念的に示す説明図である。尚、説明の煩雑化を避けるために、ここではラスタｉとラスタｊとを並行して処理するものとする。また、階調誤差を周辺画素に拡散する際には、図６（ａ）に示す単純な誤差拡散マトリックスに従って拡散するものとし、周辺画素の階調誤差を考慮してドット形成有無を判断する際には、図１４（ａ）に示す単純なマトリックスに従って各画素の階調誤差を考慮するものとする。
【０１４２】
図１６（ａ）は、ラスタｉの左端の画素Ｐi0について、ドット形成有無を判断している様子を示す説明図である。ラスタｉの各画素には、ラスタｈにある画素のドット形成有無を判断した際に、各画素で生じた階調誤差が拡散されて記憶されている。例えば、画素Ｐi0にはラスタｈから拡散されてきた拡散誤差Ｅdi0 が、画素Ｐi1にはラスタｈからの拡散誤差Ｅdi1 が、画素Ｐi2には拡散誤差Ｅdi2 がそれぞれ記憶されている。理解の便宜から、使用する誤差拡散マトリックスを図１６（ｂ）に示しておく。また、図１６（ａ）中で、ラスタｈの画素からラスタｉの画素に向かう矢印は、各画素から誤差が拡散されていることを概念的に示したものである。
【０１４３】
画素Ｐi0についてのドット形成有無を判断したら、判断にともなって生じた階調誤差Ｅi0をＣＰＵ１０２のレジスタに記憶し、続いて、右隣にある画素Ｐi1のドット形成有無の判断を開始する。画素Ｐi1についてのドット形成有無の判断は、図７を用いて説明した第１実施例の階調数変換処理と同様にして行う。すなわち、画素Ｐi1に予め拡散されて蓄積されている拡散誤差Ｅdi1 を読み出して、この拡散誤差Ｅdi1と、先にドット形成有無を判断した画素Ｐi0から拡散されてくる誤差とを考慮しながら、画像データに基づいてドット形成有無を判断するのである。こうして画素Ｐi1のドット形成有無を判断したら、該判断によって発生した階調誤差Ｅi1を、画素Ｐi0の場合と同様に、ＣＰＵ１０２のレジスタに記憶する。
【０１４４】
以上のようにして、ラスタｉにある画素Ｐi0および画素Ｐi1についてのドット形成有無を判断したら、ラスタｊの左端にある画素Ｐj0の判断を行う。図１６（ｃ）は、ラスタｊの画素Ｐj0についてのドット形成有無を判断している様子を示す説明図である。ラスタｊの画素の判断には、平均誤差最小法に準じた方法を用いてドット形成有無を判断する。すなわち、周辺画素で発生した階調誤差に、マトリックスによって画素毎に定められた所定の重みを考慮しながらドット形成有無を判断する。理解の便宜のために、使用しているマトリックスを図１６（ｄ）に示しておく。
【０１４５】
図１６（ｄ）のマトリックスに示されているように、画素Ｐj0についてのドット形成有無の判断には、画素Ｐi0および画素Ｐi1で発生した階調誤差をすればよい。前述したように、これら階調誤差は、既に求められてＣＰＵ１０２のレジスタに記憶されているので、画素Ｐj0についてのドット形成有無を迅速に判断することができる。こうして画素Ｐj0についての判断を行った結果、階調誤差Ｅj0が発生するので、今度は誤差拡散マトリックスに従って、ラスタｋにある周辺画素に拡散誤差を分配する。拡散誤差の分配には、図１６（ｂ）の誤差拡散マトリックスを使用する。尚、ここではラスタｉおよびラスタｊの画素を並行して処理しているので、ラスタｋの画素についてのドット形成有無の判断は、これらラスタの処理を終了した後になる。そこで、ラスタｋの各画素に拡散される拡散誤差は、ＲＡＭ１０６上の誤差バッファに蓄積しておく。図１６（ｃ）で、画素Ｐj0からラスタｋにある画素Ｐk0および画素Ｐk1に向かって表示されている白抜きの矢印は、ＲＡＭ１０６上の誤差バッファに蓄積されることを示している。
【０１４６】
以上に説明したように、ラスタｉの画素については、誤差拡散法に準じてドット形成有無を判断し、ラスタｊの画素については平均誤差最小法に準じてドット形成有無を判断する。ラスタｊの画素で発生した階調誤差は、誤差拡散法に準じて周辺画素に拡散する。このような処理を繰り返すことによって、ラスタｉおよびラスタｊの画素についてのドット形成有無を、交互に判断していくことができる。図１６（ｅ）は、かかる処理の様子を概念的に示した説明図である。図１６（ｅ）中では、ラスタｈから拡散されてきた拡散誤差がラスタｉの画素に記憶されていることを、ラスタｉの画素に斜線を施すことで表示している。同様に、ラスタｊから拡散された拡散誤差がラスタｋの画素に記憶されていることを、ラスタｋの画素に斜線を施すことで表示している。また、図１６（ｅ）の各画素に丸印とともに表示した数字は、画素のドット形成有無の判断を行う順番を表している。図示されているように、ラスタｉの画素とその左下にあるラスタｊの画素とを１組として、処理する組の位置を１画素ずつ右に移動させながらドット形成有無を判断していくことで、ラスタｉおよびラスタｊの処理を並行して行うことが可能となる。
【０１４７】
このように、ラスタｉおよびラスタｊの画素についてのドット形成有無を、並行して交互に判断していけば、ラスタｉの画素で生じた階調誤差を利用して、続くラスタｊの画素のドット形成有無を判断することが可能となり、ラスタｉの画素の階調誤差を誤差バッファに記憶しておく必要がなくなる。その結果、誤差バッファに対して読み書きする頻度を減少させることができ、ドット形成有無の判断を迅速に行うことが可能となる。
【０１４８】
尚、以上の説明においては、ラスタｉの画素のドット形成有無の判断に誤差拡散法に準じた方法を適用し、ラスタｊの画素の判断には平均誤差最小法に準じた方法を適用するものとしたが、もちろん、ラスタｉの画素の判断に平均誤差最小法に準じた方法を適用し、ラスタｊの画素の判断に誤差拡散法を適用しても同様の効果を得ることができる。
【０１４９】
また、以上に説明した第２実施例の変形例においては、ラスタｉおよびラスタｊの２つのラスタの処理を並行して行うものとしたが、もちろん、より多くのラスタの画素についてのドット形成有無の判断を並行して行っても構わない。
【０１５０】
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。例えば、上述の機能を実現するソフトウェアプログラム（アプリケーションプログラム）を、通信回線を介してコンピュータシステムのメインメモリまたは外部記憶装置に供給し実行するものであってもよい。もちろん、ＣＤ−ＲＯＭやフレキシブルディスクに記憶されたソフトウェアプログラムを読み込んで実行するものであっても構わない。
【０１５１】
また、上述した各種実施例では、階調数変換処理を含む画像データ変換処理はコンピュータ内で実行されるものとして説明したが、画像データ変換処理の一部あるいは全部をプリンタ側、あるいは専用の画像処理装置を用いて実行するものであっても構わない。
【０１５２】
更には、画像表示装置は、必ずしも印刷媒体上にインクドットを形成して画像を印刷する印刷装置に限定されるものではなく、例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置であっても構わない。
【図面の簡単な説明】
【図１】本実施例の印刷システムの概略構成図である。
【図２】本実施例の画像処理装置としてのコンピュータの構成を示す説明図である。
【図３】本実施例の画像表示装置としてのプリンタの概略構成図である。
【図４】本実施例の画像処理装置で行われる画像データ変換処理の流れを示すフローチャートである。
【図５】誤差拡散法を用いてドットの形成有無を判断する様子を概念的に示す説明図である。
【図６】画素毎に誤差拡散係数が設定されている様子を例示する説明図である。
【図７】第１実施例の階調数変換処理において、複数のラスタの処理を並行して行うことにより処理時間を短縮化する原理を示す説明図である。
【図８】第１実施例の階調数変換処理の流れを示すフローチャートである。
【図９】第１実施例の階調数変換処理の第１の変形例において、複数のラスタを並行して処理している様子を概念的に示す説明図である。
【図１０】第１実施例の階調数変換処理の第２の変形例において、複数のラスタを並行して処理している様子を概念的に示す説明図である。
【図１１】第１実施例の階調数変換処理の第３の変形例において、複数のラスタを並行して処理している様子を概念的に示す説明図である。
【図１２】第１実施例の階調数変換処理の第４の変形例において、遠方に拡散する誤差については誤差バッファのある画素に拡散する誤差拡散マトリックスを概念的に示す説明図である。
【図１３】第２実施例の階調数変換処理において、複数のラスタの処理を並行して行うことにより処理時間を短縮化する原理を示す説明図である。
【図１４】第２実施例の変形例の階調数変換処理において、重み係数が画素毎に設定されている様子を例示する説明図である。
【図１５】第２実施例の階調数変換処理の流れを示すフローチャートである。
【図１６】第２実施例の階調数変換処理の第１の変形例において、複数のラスタを並行して処理している様子を概念的に示す説明図である。
【符号の説明】
１０…コンピュータ
１２…プリンタドライバ
２０…カラープリンタ
１００…コンピュータ
１０２…ＣＰＵ
１０４…ＲＯＭ
１０６…ＲＡＭ
１０８…周辺機器インターフェースＰ・Ｉ／Ｆ
１１０…ネットワークインターフェースカードＮＩＣ
１１２…ビデオインターフェースＶ・Ｉ／Ｆ
１１４…ＣＲＴ
１１６…バス
１１８…ハードディスク
１２０…デジタルカメラ
１２２…カラースキャナ
１２４…フレキシブルディスク
１２６…コンパクトディスク
２００…カラープリンタ
２３０…キャリッジモータ
２３５…紙送りモータ
２３６…プラテン
２４０…キャリッジ
２４１…印字ヘッド
２４２，２４３…インクカートリッジ
２４４…インク吐出用ヘッド
２６０…制御回路
２６１…ＣＰＵ
２６２…ＲＯＭ
２６３…ＲＡＭ
３００…通信回線
３１０…記憶装置
【図１】
0003661624.tif 000002
【図２】
0003661624.tif 000003
【図３】
0003661624.tif 000004
【図４】
0003661624.tif 000005
【図５】
0003661624.tif 000006
【図６】
0003661624.tif 000007
【図７】
0003661624.tif 000008
【図８】
0003661624.tif 000009
【図９】
0003661624.tif 000010
【図１０】
0003661624.tif 000011
【図１１】
0003661624.tif 000012
【図１２】
0003661624.tif 000013
【図１３】
0003661624.tif 000014
【図１４】
0003661624.tif 000015
【図１５】
0003661624.tif 000016
【図１６】
0003661624.tif 000017