(57)【特許請求の範囲】
【請求項１】
画像データに基づいてドットの形成有無を判断し、該判断によって生じた階調誤差を周辺の未判断画素に拡散しながら画素毎にドットの形成有無を判断することにより、各画素の階調値によって表現された画像データをドットの形成有無による表現形式の画像データに変換する画像処理装置であって、
隣接した所定数の画素をまとめてブロックを形成するブロック形成手段と、
ドットの形成有無を判断しようとする画素を含んだ着目ブロックについて、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満たすか否かを判断する処理条件判断手段と、
前記着目ブロックが前記所定の処理条件を満足する場合には、該着目ブロックについての前記画像データの変換をブロック単位で行い、該変換の結果、該ブロック内に生じた前記階調誤差を、周辺の未判断ブロックに拡散する第１の画像データ変換手段と、
前記着目ブロックが前記所定の処理条件を満足しない場合には、該着目ブロックを構成する画素毎に前記画像データの変換を行い、該変換の結果生じた前記階調誤差を、該着目ブロックの内か外かに関わらず、該各画素の周辺の未判断画素に拡散する第２の画像データ変換手段と
を備える画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
前記処理条件判断手段は、前記着目ブロック内の各画素についての階調値の総和値を算出し、該総和値が所定の閾値よりも小さい場合に、前記所定の処理条件を満足すると判断する手段である画像処理装置。
【請求項３】
前記着目ブロック内の各画素についての階調値は、前記階調誤差が拡散された階調値である請求項２記載の画像処理装置。
【請求項４】
請求項１記載の画像処理装置であって、
前記処理条件判断手段は、前記着目ブロック内に、隣接する画素間の前記階調値の差が所定値以上となる画素がある場合に、該着目ブロックは前記所定の処理条件を満足しないと判断する手段である画像処理装置。
【請求項５】
請求項１記載の画像処理装置であって、
前記処理条件判断手段は、前記着目ブロック内で最も大きな階調値と最も小さな階調値との差が所定値以上の場合に、該着目ブロックは前記所定の処理条件を満足しないと判断する手段である画像処理装置。
【請求項６】
請求項１記載の画像処理装置であって、
前記第１の画像データ変換手段は、
前記着目ブロック内の各画素についてのドット形成有無を、該着目ブロック単位で判断する第１のドット形成判断手段と、
前記判断によって各画素に生じた階調誤差を、前記着目ブロックに隣接するブロックの未判断画素に拡散させる第１の誤差拡散手段と
を備える画像処理装置。
【請求項７】
請求項６記載の画像処理装置であって、
前記第１のドット形成判断手段は、前記着目ブロック内の各画素についての階調値の総和値を算出し、該総和値に応じた所定数の画素にドットを形成すると判断する手段である画像処理装置。
【請求項８】
請求項７記載の画像処理装置であって、
前記第１のドット形成判断手段は、前記総和値に応じて、前記着目ブロック内の所定位置の画素にドットを形成すると判断する手段である画像処理装置。
【請求項９】
請求項７記載の画像処理装置であって、
前記第１のドット形成判断手段は、前記着目ブロック内で階調値の大きい画素から順番に、前記所定数の画素にドットを形成すると判断する手段である画像処理装置。
【請求項１０】
請求項７記載の画像処理装置であって、
前記第１のドット形成判断手段は、前記着目ブロック内でドットを形成する画素の位置を毎回選択して、前記所定数の画素にドットを形成すると判断する手段である画像処理装置。
【請求項１１】
請求項７記載の画像処理装置であって、
前記第１のドット形成判断手段は、前記総和値が所定値以下である場合には、該着目ブロック内の画素にはドットを形成しないと判断する手段である画像処理装置。
【請求項１２】
請求項６記載の画像処理装置であって、
前記第１のドット形成判断手段は、前記拡散される階調誤差を考慮せずに前記着目ブロック内の各画素の階調値を加算した総和が、連続した該着目ブロックでいずれも０となる場合には、該連続した着目ブロックの後続する側のブロックに拡散される前記階調誤差を初期化する拡散誤差初期化手段を備える画像処理装置。
【請求項１３】
請求項６記載の画像処理装置であって、
前記第１のドット形成判断手段は、前記着目ブロック内の各画素で生じた前記階調誤差を該着目ブロック内の隣接する未判断画素に拡散させながら、該各画素についてのドットの形成有無を判断する手段である画像処理装置。
【請求項１４】
請求項１記載の画像処理装置であって、
前記第１の画像データ変換手段は、
前記着目ブロック内の各画素について、ドットの形成有無を判断する第２のドット形成判断手段と、
前記判断によって前記着目ブロック内の各画素に生じた階調誤差の総和たるブロック誤差を求め、得られた該ブロック誤差を、該着目ブロックに隣接するブロック内にあってドット形成有無が未判断の画素に拡散する第２の誤差拡散手段と
を備える画像処理装置。
【請求項１５】
請求項１４記載の画像処理装置であって、
前記第２の誤差拡散手段は、前記ブロック誤差を、前記着目ブロック内の各画素についてのドット形成有無の判断結果と、隣接するブロックから拡散された前記階調誤差および該各画素の階調値の総和とに基づいて求め、得られた該ブロック誤差を拡散する手段である画像処理装置。
【請求項１６】
請求項１４記載の画像処理装置であって、
前記第２の誤差拡散手段は、前記ブロック誤差を、前記着目ブロックに隣接するブロック内の各画素に、所定の比率で拡散する手段である画像処理装置。
【請求項１７】
請求項１４記載の画像処理装置であって、
前記第２の誤差拡散手段は、前記ブロック誤差を、前記着目ブロックに隣接するブロック内の所定位置の画素に拡散する手段である画像処理装置。
【請求項１８】
前記ブロック形成手段は、縦横２列に並んだ４つの画素をまとめて前記ブロックを形成する手段である請求項１記載の画像処理装置。
【請求項１９】
画像データに基づいてドットの形成有無を判断し、該判断によって生じた階調誤差を周辺の未判断画素に拡散しながら画素毎にドットの形成有無を判断することにより、各画素の階調値によって表現された画像データをドットの形成有無による表現形式の印刷データに変換し、印刷媒体上にインクドットを形成して画像を印刷する印刷部に対して該印刷データを出力することで、該印刷部を制御する印刷制御装置であって、
隣接した所定数の画素をまとめてブロックを形成するブロック形成手段と、
ドットの形成有無を判断しようとする画素を含んだ着目ブロックについて、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満たすか否かを判断する処理条件判断手段と、
前記着目ブロックが前記所定の処理条件を満足する場合には、該着目ブロックについての前記画像データの変換をブロック単位で行い、該変換の結果、該ブロック内に生じた前記階調誤差を、周辺の未判断ブロックに拡散する第１の画像データ変換手段と、
前記着目ブロックが前記所定の処理条件を満足しない場合には、該着目ブロックを構成する画素毎に前記画像データの変換を行い、該変換の結果生じた前記階調誤差を、該着目ブロックの内か外かに関わらず、該各画素の周辺の未判断画素に拡散する第２の画像データ変換手段と、
前記第１および第２の画像データ変換手段で得られた前記印刷データを、前記印刷部に出力する印刷データ出力手段と
を備える印刷制御装置。
【請求項２０】
請求項１９記載の印刷制御装置であって、
前記処理条件判断手段は、前記着目ブロック内で最も大きな階調値と最も小さな階調値との差が所定値以上の場合に、該着目ブロックは前記所定の処理条件を満足しないと判断する手段である印刷制御装置。
【請求項２１】
請求項１９記載の印刷制御装置であって、
前記第１の画像データ変換手段は、
前記着目ブロック内の各画素について、ドットの形成有無を判断する第２のドット形成判断手段と、
前記判断によって前記着目ブロック内の各画素に生じた階調誤差の総和たるブロック誤差を求め、得られた該ブロック誤差を、該着目ブロックに隣接するブロック内にあってドット形成有無が未判断の画素に拡散する第２の誤差拡散手段と
を備える印刷制御装置。
【請求項２２】
画像データに基づいてドットの形成有無を判断し、該判断によって生じた階調誤差を周辺の未判断画素に拡散しながら画素毎にドットの形成有無を判断することにより、各画素の階調値によって表現された画像データをドットの形成有無による表現形式の画像データに変換する画像処理方法であって、
隣接した所定数の画素をまとめてブロックを形成し、
ドットの形成有無を判断しようとする画素を含んだ着目ブロックについて、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満たすか否かを判断し、
前記着目ブロックが前記所定の処理条件を満足する場合には、該着目ブロックについての前記画像データの変換をブロック単位で行い、該変換の結果、該ブロック内に生じた前記階調誤差を、周辺の未判断ブロックに拡散し、
前記着目ブロックが前記所定の処理条件を満足しない場合には、該着目ブロックを構成する画素毎に前記画像データの変換を行い、該変換の結果生じた前記階調誤差を、該着目ブロックの内か外かに関わらず、該各画素の周辺の未判断画素に拡散する
画像処理方法。
【請求項２３】
請求項２２記載の画像処理方法であって、
前記着目ブロックが所定の処理条件を満たすか否かの判断に際しては、該着目ブロック内で最も大きな階調値と最も小さな階調値との差が所定値以上の場合に、該着目ブロックは前記所定の処理条件を満足しないと判断する画像処理方法。
【請求項２４】
請求項２２記載の画像処理方法であって、
前記着目ブロックが前記所定の処理条件を満足する場合には、
前記着目ブロック内の各画素について、ドットの形成有無を判断するとともに、該判断によって該着目ブロック内の各画素に生じた階調誤差の総和たるブロック誤差を求め、得られた該ブロック誤差を、該着目ブロックに隣接するブロック内にあってドット形成有無が未判断の画素に拡散することによって、前記画像データをブロック単位で変換する画像処理方法。
【請求項２５】
画像データに基づいてドットの形成有無を判断し、該判断によって生じた階調誤差を周辺の未判断画素に拡散しながら画素毎にドットの形成有無を判断することにより、各画素の階調値によって表現された画像データをドットの形成有無による表現形式の画像データに変換する方法を実現させるプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
隣接した所定数の画素をまとめてブロックを形成する機能と、
ドットの形成有無を判断しようとする画素を含んだ着目ブロックについて、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満たすか否かを判断する機能と、
前記着目ブロックが前記所定の処理条件を満足する場合には、該着目ブロックについての前記画像データの変換をブロック単位で行い、該変換の結果、該ブロック内に生じた前記階調誤差を、周辺の未判断ブロックに拡散する機能と、
前記着目ブロックが前記所定の処理条件を満足しない場合には、該着目ブロックを構成する画素毎に前記画像データの変換を行い、該変換の結果生じた前記階調誤差を、該着目ブロックの内か外かに関わらず、該各画素の周辺の未判断画素に拡散する機能と
を実現するプログラムを記録した記録媒体。
【請求項２６】
請求項２５記載の記録媒体であって、
前記所定の処理条件を満足する着目ブロックについて前記画像データをブロック単位で変換する機能として、
前記着目ブロック内の各画素についてのドット形成有無を、該着目ブロック単位で判断する機能と、
前記判断によって各画素に生じた階調誤差を、前記着目ブロックに隣接するブロックの未判断画素に拡散させる機能と
を実現するプログラムを記録した記録媒体。
【請求項２７】
請求項２５記載の記録媒体であって、
前記所定の処理条件を満足する着目ブロックについて前記画像データをブロック単位で変換する機能として、
前記着目ブロック内の各画素について、ドットの形成有無を判断する機能と、
前記判断によって前記着目ブロック内の各画素に生じた階調誤差の総和たるブロック誤差を求め、得られた該ブロック誤差を、該着目ブロックに隣接するブロック内にあってドット形成有無が未判断の画素に拡散する機能と
を実現するプログラムを記録した記録媒体。
【請求項２８】
画像データに基づいてドットの形成有無を判断し、該判断によって生じた階調誤差を周辺の未判断画素に拡散しながら画素毎にドットの形成有無を判断することにより、各画素の階調値によって表現された画像データをドットの形成有無による表現形式の画像データに変換する方法を、コンピュータを用いて実現するプログラムであって、
隣接した所定数の画素をまとめてブロックを形成する機能と、
ドットの形成有無を判断しようとする画素を含んだ着目ブロックについて、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満たすか否かを判断する機能と、
前記着目ブロックが前記所定の処理条件を満足する場合には、該着目ブロックについての前記画像データの変換をブロック単位で行い、該変換の結果、該ブロック内に生じた前記階調誤差を、周辺の未判断ブロックに拡散する機能と、
前記着目ブロックが前記所定の処理条件を満足しない場合には、該着目ブロックを構成する画素毎に前記画像データの変換を行い、該変換の結果生じた前記階調誤差を、該着目ブロックの内か外かに関わらず、該各画素の周辺の未判断画素に拡散する機能と
を実現するプログラム。
【請求項２９】
請求項２８記載のプログラムであって、
前記所定の処理条件を満足する着目ブロックについて前記画像データをブロック単位で変換する機能として、
前記着目ブロック内の各画素についてのドット形成有無を、該着目ブロック単位で判断する機能と、
前記判断によって各画素に生じた階調誤差を、前記着目ブロックに隣接するブロックの未判断画素に拡散させる機能と
をコンピュータを用いて実現するプログラム。
【請求項３０】
請求項２８記載のプログラムであって、
前記所定の処理条件を満足する着目ブロックについて前記画像データをブロック単位で変換する機能として、
前記着目ブロック内の各画素について、ドットの形成有無を判断する機能と、
前記判断によって前記着目ブロック内の各画素に生じた階調誤差の総和たるブロック誤差を求め、得られた該ブロック誤差を、該着目ブロックに隣接するブロック内にあってドット形成有無が未判断の画素に拡散する機能と
をコンピュータを用いて実現するプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、階調画像データを、ドット形成の有無によって表現された画像データに変換する技術に関し、詳しくは、画質を維持したまま画像データを迅速に変換する技術に関する。
【０００２】
【従来の技術】
印刷媒体や液晶画面といった表示媒体上に、ドットを形成することによって画像を表現する画像表示装置は、各種画像機器の出力装置として広く使用されている。かかる画像表示装置は、局所的にはドットを形成するか否かのいずれかの状態しか表現し得ないが、画像の階調値に応じてドットの形成密度を適切に制御することによって、階調が連続的に変化する画像を表現することが可能となっている。
【０００３】
これら画像表示装置において、画像の階調値に応じて適切な密度でドットが形成されるように、各画素についてドット形成の有無を判断するための手法としては、誤差拡散法と呼ばれる手法が広く使用されている。誤差拡散法は、着目画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を、該着目画素周辺の未判断画素に拡散して記憶しておき、未判断画素についてのドット形成の有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するようにドット形成有無を判断する手法である。このように、周辺画素で発生した階調表現の誤差を解消するようにドットの形成有無を判断するので、画像の階調値に応じた適切な密度でドット形成の有無を判断することができる。
【０００４】
かかる誤差拡散法を用いれば、画像に応じて適切な密度でドットを形成することができるので高画質な画像を表示することができるものの、ドット形成の有無を判断する度に階調誤差を周辺画素に拡散しなければならないので、画像を構成する画素数が多くなると処理に時間がかかって迅速に画像を表現することが困難となる。このような問題を解決するために、所定数ずつの隣接する画素をブロックにまとめて、ブロックから隣接するブロックに誤差を拡散しながらドット形成の有無を判断する技術が提案されている（例えば、特開２０００−２２９４４号公報）。このようにブロック単位でドット形成の有無を判断すれば、処理すべき画素数が多くなっても短時間で処理を完了して、迅速に画像を表示することが可能となる。
【０００５】
【発明が解決しようとする課題】
しかし、このような方法を用いた場合、表示される画質の悪化を引き起こし易いという問題がある。これは、画素を所定数ずつまとめたブロック単位でドット形成の有無を判断することは、とりもなおさず、画像の分解能を低下させることに他ならず、分解能が低下する分だけ画質が悪化し易くなっているためと考えられる。
【０００６】
この発明は、従来技術における上述の課題を解決するためになされたものであり、画質を維持したまま、画像をドット形成の有無による表現形式に迅速に変換可能な技術の提供を目的とする。
【０００７】
上述の課題の少なくとも一部を解決するため、本発明の画像処理装置は、次の構成を採用した。すなわち、
画像データに基づいてドットの形成有無を判断し、該判断によって生じた階調誤差を周辺の未判断画素に拡散しながら画素毎にドットの形成有無を判断することにより、各画素の階調値によって表現された画像データをドットの形成有無による表現形式の画像データに変換する画像処理装置であって、
隣接した所定数の画素をまとめてブロックを形成するブロック形成手段と、
ドットの形成有無を判断しようとする画素を含んだ着目ブロックについて、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満たすか否かを判断する処理条件判断手段と、
前記着目ブロックが前記所定の処理条件を満足する場合には、該着目ブロックについての前記画像データの変換をブロック単位で行い、該変換の結果、該ブロック内に生じた前記階調誤差を、周辺の未判断ブロックに拡散する第１の画像データ変換手段と、
前記着目ブロックが前記所定の処理条件を満足しない場合には、該着目ブロックを構成する画素毎に前記画像データの変換を行い、該変換の結果生じた前記階調誤差を、該着目ブロックの内か外かに関わらず、該各画素の周辺の未判断画素に拡散する第２の画像データ変換手段と
を備えることを要旨とする。
【０００８】
また、上記の画像処理装置に対応する本発明の画像処理方法は、
画像データに基づいてドットの形成有無を判断し、該判断によって生じた階調誤差を周辺の未判断画素に拡散しながら画素毎にドットの形成有無を判断することにより、各画素の階調値によって表現された画像データをドットの形成有無による表現形式の画像データに変換する画像処理方法であって、
隣接した所定数の画素をまとめてブロックを形成し、
ドットの形成有無を判断しようとする画素を含んだ着目ブロックについて、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満たすか否かを判断し、
前記着目ブロックが前記所定の処理条件を満足する場合には、該着目ブロックについての前記画像データの変換をブロック単位で行い、該変換の結果、該ブロック内に生じた前記階調誤差を、周辺の未判断ブロックに拡散し、
前記着目ブロックが前記所定の処理条件を満足しない場合には、該着目ブロックを構成する画素毎に前記画像データの変換を行い、該変換の結果生じた前記階調誤差を、該着目ブロックの内か外かに関わらず、該各画素の周辺の未判断画素に拡散することを要旨とする。
【０００９】
かかる画像処理装置および画像処理方法においては、前記着目ブロックを構成する各画素についてのドット形成の有無を判断するに際して、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満足するか否かを判断する。ここで、各画素の階調値としては、周辺画素からの階調誤差が拡散された階調値を検出するが、簡易的には階調誤差が拡散される前の階調値を用いることもできる。こうして所定の処理条件を満足すると判断された着目ブロックについては、画像データをドットの形成有無による表現形式に変換する処理をブロック単位で行う。かかる変換をブロック単位で行えば、その分だけ迅速に変換することが可能となる。また、所定の処理条件を満足しないと判断された着目ブロックについては、画像データをドットの形成有無による表現形式に変換する処理を、該着目ブロックを構成する画素毎に行う。画像データの変換を画素毎に行えば、画質が悪化することを回避することができる。こうして、着目ブロックが所定の処理条件を満たすか否かに応じて適切な方法で画像データを変換すれば、画質を維持したまま迅速にドット形成有無を判断することが可能となる。
【００１０】
かかる画像処理装置においては、前記着目ブロック内の各画素についての階調値の総和値を求め、該総和値が所定の閾値よりも小さい場合に、前記所定の処理条件を満足すると判断してもよい。
【００１１】
総和値が大きな値となるブロックは画質への影響が大きなブロックであると考えられるので、着目ブロックの総和値が所定の閾値より小さい場合には前記所定の処理条件を満足すると判断して、ブロック単位でドットの形成有無を判断すれば、画質を悪化させることなく迅速に画像データを変換することが可能となる。また、着目ブロックについての前記総和値は容易に算出することができるので、該総和値に基づいて判断すれば、該着目ブロックが所定の処理条件を満足するか否かを簡便に判断することができ、延いてはドット形成の有無を迅速に判断することが可能となるので好適である。もちろん、着目ブロック内の各画素についての階調値の総和値に変えて、各画素の階調値の平均値を用いることも可能である。
【００１２】
尚、総和値を求めるための階調値としては、各画素に拡散されてきた階調誤差を考慮した階調値が使用される。通常、ドットの形成有無の判断は、周辺画素から拡散されてきた階調誤差が考慮された階調値に基づいて行われるので、かかる階調値から総和値を求めれば、画像データの変換方法をより適切に使い分けることが可能となる。もっとも、簡易的には階調誤差が拡散されていない階調値を用いることも可能である。
【００１３】
上述の画像処理装置においては、前記着目ブロック内に、隣接する画素間の前記階調値の差が所定値以上となる画素がある場合、該着目ブロックは前記所定の処理条件を満たさないと判断して、画素毎にドットの形成有無を判断することとしてもよい。
【００１４】
あるいは、かかる画像処理装置においては、前記着目ブロック内で最も大きな階調値と最も小さな階調値との差が所定値以上の場合に、該着目ブロックは前記所定の処理条件を満たさないと判断して、画素毎にドットの形成有無を判断することとしてもよい。
【００１５】
画像中で輪郭部分を表示している部分では、画素間の階調値が大きくなる傾向がある。そこで、こうした方法により、着目ブロックが輪郭部分に相当するか否かを判断して、輪郭部分に該当している場合には画素毎にドットの形成有無を判断すれば、輪郭部分の解像度を低下させることなく適切に画像データを変換することができるので好適である。尚、こうした判断に用いられる階調値としては、周辺画素からの階調誤差が拡散された階調値が用いられるが、もちろん簡易的には階調誤差が拡散される前の階調値を用いることもできる。
【００１６】
上述した画像処理装置においては、前記所定の処理条件を満足する前記着目ブロックについては、各画素についてのドット形成有無を着目ブロック単位で判断し、判断によって各画素に生じた階調誤差を、前記着目ブロックに隣接するブロックの未判断画素に拡散させることとしてもよい。
【００１７】
こうして、着目ブロックについてのドット形成有無の判断をブロック単位で行えば、ドットの形成有無の判断を画素毎に行う場合よりも迅速に判断することが可能となって好ましい。
【００１８】
こうした画像処理装置においては、ドット形成有無の判断をブロック単位で行う場合に、前記着目ブロック内の各画素についての階調値の総和値を算出し、該総和値に応じた所定数の画素にドットを形成すると判断することとしてもよい。
【００１９】
こうすれば、該着目ブロックについて迅速にドットの形成有無を判断することが可能となる。しかも、該着目ブロック全体としてみれば、各画素の階調値に応じた適切な密度でドットを形成することができるので好適である。尚、各画素の階調としては、周辺画素からの階調誤差が拡散された階調値を好適に用いることができるが、簡易的には誤差の拡散される前の階調値を用いることも可能である。
【００２０】
更に、かかる画像処理装置においては、ドット形成有無の判断をブロック単位で行う場合に、前記総和値に応じて、前記着目ブロック内の所定位置の画素にドットを形成すると判断してもよい。
【００２１】
こうして、着目ブロックを構成する各画素に所定数のドットを形成する場合に、ドットを形成する画素の位置を予め定めておけば、該着目ブロック内で所定数のドットを形成する処理を迅速に行うことができるので好適である。
【００２２】
あるいは、こうした画像処理装置においては、ドット形成有無の判断をブロック単位で行う場合に、前記着目ブロック内で階調値の大きい画素から順番に、前記所定数の画素にドットを形成すると判断してもよい。
【００２３】
こうして階調値の大きい順にドットを形成することとすれば、着目ブロック内の各画素について迅速にドット形成有無を判断することができ、しかも各画素の階調値に応じた適切な画素にドットを形成することができるので好適である。尚、かかる階調値としては、階調誤差の拡散された階調値を好適に用いることができるが、簡易的には階調誤差が拡散される前の階調値で代用することも可能である。
【００２４】
かかる画像処理装置においては、ドット形成有無の判断をブロック単位で行う場合に、前記着目ブロック内でドットを形成する画素の位置を毎回選択して、前記所定数の画素にドットを形成すると判断してもよい。
【００２５】
こうすれば、前記総和値に応じてドットを所定数づつ形成する着目ブロックが連続する場合でも、ドットが規則的に形成されることによって画質が悪化するおそれがないので好適である。
【００２６】
更には、こうした画像処理装置においては、前記総和値が所定値以下である場合には、該着目ブロック内の画素にはドットを形成しないと判断してもよい。
【００２７】
こうすれば、予め適切な所定値を設定しておくだけで、着目ブロックについてのドット形成有無の判断を迅速に行うことが可能となるので好ましい。
【００２８】
かかる画像処理装置においては、次のようにして、ドット形成有無の判断をブロック単位で行うこととしてもよい。前記着目ブロック内の各画素について、
前記拡散される階調誤差を考慮せずに各階調値の総和を求める。次いで、連続した該着目ブロックの総和が、いずれも０となる場合には、該連続した着目ブロックの後続する側のブロックに拡散される前記階調誤差を初期化する。
【００２９】
着目ブロック内の階調値の総和が連続して０となる場合、かかる部分は表示すべき画像が存在しない部分であると考えられる。従って、着目ブロック内の階調値の総和が連続している場合に、後続する側の着目ブロックに拡散される階調誤差を初期化すれば、拡散されてきた階調誤差に起因して画像の存在しない部分にドットを形成おそれがなくなるので好ましい。
【００３６】
あるいは、上述した画像処理装置においては、前記着目ブロックについてのドット形成有無の判断を、次のようにしてブロック単位で行うこととしてもよい。すなわち、該着目ブロック内の各画素で生じた前記階調誤差を、該着目ブロック内の隣接する未判断画素に拡散させながら、各画素についてのドットの形成有無を判断することによって、前記画像データの変換をブロック単位で行うこととしてもよい。
【００３７】
こうして、各画素で生じた階調誤差を拡散しながらドットの形成有無を判断すれば、誤差を拡散させる分だけ高画質に画像データを変換することができる。また、階調誤差をブロック内に限ることにより、着目ブロック内でのドット形成有無の判断を迅速に行うことができる。結局、着目ブロックについて、画質を悪化させることなく迅速に画像データを変換することが可能となるので好ましい。
【００３８】
上述した本願の画像処理装置および画像処理方法においては、前記着目ブロックについてのドット形成有無の判断を、次のようにしてブロック単位で行うこととしてもよい。すなわち、ドット形成有無の判断によって該着目ブロック内の各画素で生じた階調誤差の総和たるブロック誤差を求め、得られた該ブロック誤差を、該着目ブロックに隣接するブロック内の未判断画素に拡散することとしてもよい。
【００３９】
こうして、着目ブロックに隣接するブロック内の各画素に拡散される階調誤差を、ブロック単位でまとめて拡散することとすれば、隣接するブロック内の各画素に個別に拡散する場合よりも迅速に拡散することができる。その結果、画像データをドット形成有無による表現形式に変換する処理を迅速に行うことが可能となるので好ましい。
【００４０】
かかる画像処理装置においては、前記ブロック誤差を、前記着目ブロック内の各画素についてのドット形成有無の判断結果と、隣接するブロックから拡散された前記階調誤差および該各画素の階調値の総和とに基づいて求めることとしてもよい。
【００４１】
こうすれば、前記着目ブロック内の各画素毎に階調誤差を求める必要がないので、前記ブロック誤差を迅速に求めることが可能であり、延いては、ドット形成有無の判断を迅速に行うことができるので好ましい。
【００４２】
かかる画像処理装置においては、着目ブロック内で生じた階調誤差を、隣接するブロックにブロック単位で拡散させるに際して、前記ブロック誤差を該隣接するブロック内の各画素に所定の比率で拡散することとしてもよい。
【００４３】
こうすれば、着目ブロックで生じたブロック誤差を隣接するブロック内の各画素に迅速に拡散することができるので好ましい。
【００４４】
あるいは、前記ブロック誤差を、隣接するブロック内の所定位置の画素に拡散することとしてもよい。
【００４５】
こうしてブロック誤差を拡散する画素位置を予め固定しておけば、階調誤差を拡散する処理を簡素なものとすることができ、その分だけ、処理を迅速化することが可能となるので好ましい。尚、隣接するブロック内の所定位置の画素としては、単独の画素とすることもできるが、これに限らず、複数の画素に所定比率でブロック誤差を拡散することとしてもよい。
【００４６】
また、上述した本願の画像処理装置においては、縦横２列に並んだ４つの画素をまとめて、前記ブロックとしてもよい。
【００４７】
このように、縦横２列に並んだ４つの画素をまとめてブロックを形成すれば、該ブロック内の画素間で階調誤差を拡散させることなくドット形成の有無を判断することによって、画質をできるだけ悪化させることなく、迅速に判断することができるので好適である。
【００４８】
また、印刷媒体上にインクドットを形成して画像を印刷する印刷部に対して、ドットの形成を制御するための印刷データを出力することにより、該印刷部を制御する印刷制御装置においては、本発明の画像処理装置を好適に適用することができる。すなわち、上述の画像処理装置は、画質を維持したまま画像データをドット形成の有無による表現形式に迅速に変換することができるので、かかる印刷制御装置に上述の画像処理装置を適用すれば高画質の画像を迅速に印刷することが可能となって好適である。
【００４９】
また、本発明は、上述した画像処理方法を実現するプログラムをコンピュータに読み込ませ、コンピュータを用いて実現することも可能である。従って、本発明は次のような記録媒体としての態様も含んでいる。すなわち、上述の画像処理方法に対応する本発明の記録媒体は、
画像データに基づいてドットの形成有無を判断し、該判断によって生じた階調誤差を周辺の未判断画素に拡散しながら画素毎にドットの形成有無を判断することにより、各画素の階調値によって表現された画像データをドットの形成有無による表現形式の画像データに変換する方法を実現させるプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
隣接した所定数の画素をまとめてブロックを形成する機能と、
ドットの形成有無を判断しようとする画素を含んだ着目ブロックについて、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満たすか否かを判断する機能と、
前記着目ブロックが前記所定の処理条件を満足する場合には、該着目ブロックについての前記画像データの変換をブロック単位で行い、該変換の結果、該ブロック内に生じた前記階調誤差を、周辺の未判断ブロックに拡散する機能と、
前記着目ブロックが前記所定の処理条件を満足しない場合には、該着目ブロックを構成する画素毎に前記画像データの変換を行い、該変換の結果生じた前記階調誤差を、該着目ブロックの内か外かに関わらず、該各画素の周辺の未判断画素に拡散する機能と
を実現するプログラムを記録していることを要旨とする。
【００５０】
こうした記録媒体においては、前記着目ブロックが所定の処理条件を満たすか否かの判断にあたって、該着目ブロック内で最も大きな階調値と最も小さな階調値との差が所定値以上の場合に、該着目ブロックは前記所定の処理条件を満足しないと判断する機能を実現するプログラムを記録することとしてもよい。
【００５１】
更には、こうした記録媒体においては、前記所定の処理条件を満足する着目ブロックについて前記画像データをブロック単位で変換する機能として、前記着目ブロック内の各画素についてのドット形成有無を、該着目ブロック単位で判断する機能と、前記判断によって各画素に生じた階調誤差を、前記着目ブロックに隣接するブロックの未判断画素に拡散させる機能とを実現するプログラムを記録しておいてもよい。
【００５２】
あるいは、かかる記録媒体においては、前記所定の処理条件を満足する着目ブロックについて前記画像データをブロック単位で変換する機能として、前記着目ブロック内の各画素について、ドットの形成有無を判断する機能と、前記判断によって前記着目ブロック内の各画素に生じた階調誤差の総和たるブロック誤差を求め、得られた該ブロック誤差を、該着目ブロックに隣接するブロック内にあってドット形成有無が未判断の画素に拡散する機能とを実現するプログラムを記録しておいてもよい。
【００５３】
これら記録媒体に記録されているプログラムをコンピュータに読み込ませ、該コンピュータを用いて上述の各種機能を実現すれば、画質を維持したまま、画像データをドット形成の有無による表現形式に迅速に変換することが可能となる。
【００５４】
更には、本発明は、上述した各種の画像処理方法をコンピュータを用いて実現するプログラムとして把握することも可能である。すなわち、上述の画像処理方法に対応する本願のプログラムは、
画像データに基づいてドットの形成有無を判断し、該判断によって生じた階調誤差を周辺の未判断画素に拡散しながら画素毎にドットの形成有無を判断することにより、各画素の階調値によって表現された画像データをドットの形成有無による表現形式の画像データに変換する方法を、コンピュータを用いて実現するプログラムであって、
隣接した所定数の画素をまとめてブロックを形成する機能と、
ドットの形成有無を判断しようとする画素を含んだ着目ブロックについて、該着目ブロック内の複数の画素に割り当てられた階調値の大小関係に基づいて、該着目ブロックが所定の処理条件を満たすか否かを判断する機能と、
前記着目ブロックが前記所定の処理条件を満足する場合には、該着目ブロックについての前記画像データの変換をブロック単位で行い、該変換の結果、該ブロック内に生じた前記階調誤差を、周辺の未判断ブロックに拡散する機能と、
前記着目ブロックが前記所定の処理条件を満足しない場合には、該着目ブロックを構成する画素毎に前記画像データの変換を行い、該変換の結果生じた前記階調誤差を、該着目ブロックの内か外かに関わらず、該各画素の周辺の未判断画素に拡散する機能と
を実現することを要旨とする。
【００５５】
こうした本願のプログラムにおいては、前記所定の処理条件を満足する着目ブロックについて前記画像データをブロック単位で変換する機能として、前記着目ブロック内の各画素についてのドット形成有無を、該着目ブロック単位で判断する機能と、前記判断によって各画素に生じた階調誤差を、前記着目ブロックに隣接するブロックの未判断画素に拡散させる機能とをコンピュータを用いて実現することとしてもよい。
【００５６】
あるいは本願のプログラムにおいては、前記所定の処理条件を満足する着目ブロックについて前記画像データをブロック単位で変換する機能として、前記着目ブロック内の各画素について、ドットの形成有無を判断する機能と、前記判断によって前記着目ブロック内の各画素に生じた階調誤差の総和たるブロック誤差を求め、得られた該ブロック誤差を、該着目ブロックに隣接するブロック内にあってドット形成有無が未判断の画素に拡散する機能とをコンピュータを用いて実現することとしてもよい。
【００５７】
【発明の実施の形態】
本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って以下に説明する。
Ａ．実施の形態：
Ｂ．装置構成：
Ｃ．画像データ変換処理の概要：
Ｄ．階調数変換処理：
Ｄ−１．ハイライト領域の処理：
Ｄ−２．過渡的なハイライト領域の処理：
Ｄ−３．中間階調以上の領域の処理：
Ｅ．変形例：
Ｅ−１．第１の変形例：
Ｅ−２．第２の変形例：
Ｅ−３．第３の変形例：
【００５８】
Ａ．実施の形態：
図１を参照しながら、本発明の実施の形態について説明する。図１は、印刷システムを例にとって、本発明の実施の形態を説明するための説明図である。本印刷システムは、画像処理装置としてのコンピュータ１０と、カラープリンタ２０等から構成されている。コンピュータ１０は、デジタルカメラやカラースキャナなどの画像機器からＲＧＢカラー画像の階調画像データを受け取ると、該画像データを、カラープリンタ２０で印刷可能な各色ドットの形成有無により表現された印刷データに変換する。かかる画像データの変換は、プリンタドライバ１２と呼ばれる専用のプログラムを用いて行われる。尚、ＲＧＢカラー画像の階調画像データは、各種アプリケーションプログラムを用いてコンピュータ１０で作成することもできる。
【００５９】
プリンタドライバ１２は、解像度変換モジュール，色変換モジュール，階調数変換モジュール，インターレースモジュールといった複数のモジュールから構成されている。階調画像データをドット形成の有無による表現形式に変換する処理は、階調数変換モジュールで行われる。他の各モジュールで行われる処理については後述する。カラープリンタ２０は、これら各モジュールで変換された印刷データに基づいて、印刷媒体上に各色インクドットを形成することによってカラー画像を印刷する。
【００６０】
本発明の印刷システムにおける階調数変換モジュールは、所定数の画素をブロックにまとめてブロック単位でドット形成の有無を判断するが、複数の判断モードを有している。図１の階調数変換モジュールには、代表的な２つの判断モードのみを概念的に表示している。図１の階調数変換モジュール内の左側に示した判断モードは、ブロック内の各画素を区別することなく、着目ブロックをあたかも大きな画素のように扱ってドット形成有無を判断するモードである。また、図１の階調数変換モジュール内の右側に示した判断モードは、ブロック単位で処理しながらも、着目ブロック内の画素間で階調誤差を拡散させながらドット形成有無を判断するモードである。これら各判断モードについては後述する。着目ブロックの処理を開始するにあたって処理条件を判断し、適切な判断モードを用いてドット形成の有無を判断する。判断方法の詳細については後述する。
【００６１】
このように、本発明の階調数変換モジュールは、ドット形成有無の判断を迅速に行うためにブロック単位で処理しながらも、ブロック毎に適切な判断モードを使い分けている。このため、画質を維持したまま、迅速な処理を行うことが可能となっている。以下、このような画像処理方法について、実施例に基づき詳細に説明する。
【００６２】
Ｂ．装置構成：
図２は、本実施例の画像処理装置としてのコンピュータ１００の構成を示す説明図である。コンピュータ１００は、ＣＰＵ１０２を中心に、ＲＯＭ１０４やＲＡＭ１０６などを、バス１１６で互いに接続して構成された周知のコンピュータである。
【００６３】
コンピュータ１００には、フレキシブルディスク１２４やコンパクトディスク１２６のデータを読み込むためのディスクコントローラＤＤＣ１０９や、周辺機器とデータの授受を行うための周辺機器インターフェースＰ・Ｉ／Ｆ１０８、ＣＲＴ１１４を駆動するためのビデオインターフェースＶ・Ｉ／Ｆ１１２等が接続されている。Ｐ・Ｉ／Ｆ１０８には、後述するカラープリンタ２００や、ハードディスク１１８等が接続されている。また、デジタルカメラ１２０や、カラースキャナ１２２等をＰ・Ｉ／Ｆ１０８に接続すれば、デジタルカメラ１２０やカラースキャナ１２２で取り込んだ画像を印刷することも可能である。また、ネットワークインターフェースカードＮＩＣ１１０を装着すれば、コンピュータ１００を通信回線３００に接続して、通信回線に接続された記憶装置３１０に記憶されているデータを取得することもできる。
【００６４】
図３は、第１実施例のカラープリンタ２００の概略構成を示す説明図である。カラープリンタ２００はシアン，マゼンタ，イエロ，ブラックの４色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら４色のインクに加えて、染料濃度の低いシアン（淡シアン）インクと染料濃度の低いマゼンタ（淡マゼンタ）インクとを含めた合計６色のインクドットを形成可能なインクジェットプリンタを用いることもできる。尚、以下では場合によって、シアンインク，マゼンタインク，イエロインク，ブラックインク，淡シアンインク，淡マゼンタインクのそれぞれを、Ｃインク，Ｍインク，Ｙインク，Ｋインク，ＬＣインク，ＬＭインクと略称するものとする。
【００６５】
カラープリンタ２００は、図示するように、キャリッジ２４０に搭載された印字ヘッド２４１を駆動してインクの吐出およびドット形成を行う機構と、このキャリッジ２４０をキャリッジモータ２３０によってプラテン２３６の軸方向に往復動させる機構と、紙送りモータ２３５によって印刷用紙Ｐを搬送する機構と、ドットの形成やキャリッジ２４０の移動および印刷用紙の搬送を制御する制御回路２６０とから構成されている。
【００６６】
キャリッジ２４０には、Ｋインクを収納するインクカートリッジ２４２と、Ｃインク，Ｍインク，Ｙインクの各種インクを収納するインクカートリッジ２４３とが装着されている。キャリッジ２４０にインクカートリッジ２４２，２４３を装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド２４１の下面に設けられた各色毎のインク吐出用ヘッド２４４ないし２４７に供給される。各色毎のインク吐出用ヘッド２４４ないし２４７には、４８個のノズルＮz が一定のノズルピッチｋで配列されたノズル列が１組ずつ設けられている。
【００６７】
制御回路２６０は、ＣＰＵ２６１とＲＯＭ２６２とＲＡＭ２６３等から構成されており、キャリッジモータ２３０と紙送りモータ２３５の動作を制御することによってキャリッジ２４０の主走査と副走査とを制御するとともに、コンピュータ１００から供給される印刷データに基づいて、各ノズルから適切なタイミングでインク滴を吐出する。こうして、制御回路２６０の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ２００はカラー画像を印刷することができる。
【００６８】
尚、各色のインク吐出ヘッドからインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインクを吐出する方式や、インク通路に配置したヒータでインク通路内に泡（バブル）を発生させてインク滴を吐出する方法などを用いることができる。また、インクを吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタを使用することも可能である。
【００６９】
更には、吐出するインク滴の大きさを制御したり、あるいは一度に複数のインク滴を吐出して、吐出するインク滴の数を制御することにより、印刷用紙上に形成されるインクドットの大きさを制御可能な、いわゆるバリアブルドットプリンタを使用することもできる。
【００７０】
以上のようなハードウェア構成を有するカラープリンタ２００は、キャリッジモータ２３０を駆動することによって、各色のインク吐出用ヘッド２４４ないし２４７を印刷用紙Ｐに対して主走査方向に移動させ、また紙送りモータ２３５を駆動することによって、印刷用紙Ｐを副走査方向に移動させる。制御回路２６０は、印刷データに従って、キャリッジ２４０の主走査および副走査を繰り返しながら、適切なタイミングでノズルを駆動してインク滴を吐出することによって、カラープリンタ２００は印刷用紙上にカラー画像を印刷している。
【００７１】
Ｃ．画像データ変換処理の概要：
図４は、本実施例の画像処理装置としてのコンピュータ１００が、受け取った画像データに所定の画像処理を加えることによって、画像データを印刷データに変換する処理の流れを示すフローチャートである。かかる処理は、コンピュータ１００のオペレーティングシステムがプリンタドライバ１２を起動することによって開始される。以下、図４に従って、本実施例の画像データ変換処理について簡単に説明する。
【００７２】
プリンタドライバ１２は、画像データ変換処理を開始すると、先ず初めに、変換すべきＲＧＢカラー画像データの読み込みを開始する（ステップＳ１００）。次いで、取り込んだ画像データの解像度を、カラープリンタ２００が印刷するための解像度に変換する（ステップＳ１０２）。カラー画像データの解像度が印刷解像度よりも低い場合は、線形補間を行うことで隣接する画像データ間に新たなデータを生成し、逆に印刷解像度よりも高い場合は一定の割合でデータを間引くことによって、画像データの解像度を印刷解像度に変換する。
【００７３】
こうして解像度を変換すると、カラー画像データの色変換処理を行う（ステップＳ１０４）。色変換処理とは、Ｒ，Ｇ，Ｂの階調値の組み合わせによって表現されているカラー画像データを、Ｃ，Ｍ，Ｙ，Ｋなどのカラープリンタ２００で使用する各色の階調値の組み合わせによって表現された画像データに変換する処理である。色変換処理は、色変換テーブルと呼ばれる３次元の数表を参照することで迅速に行うことができる。
【００７４】
プリンタドライバ１２は、色変換処理に続いて階調数変換処理を開始する（ステップＳ１０６）。階調数変換処理とは次のような処理である。色変換処理によって、ＲＧＢ画像データはＣ，Ｍ，Ｙ，Ｋ各色の階調データに変換されている。これら各色の階調データは、階調値０から２５５の２５６階調を有するデータである。これに対し、本実施例のカラープリンタ２００は、「ドットを形成する」，「ドットを形成しない」のいずれかの状態しか採り得ない。そこで、２５６階調を有する各色の階調データを、カラープリンタ２００が表現可能な２階調で表現された画像データに変換する必要がある。このような階調数の変換を行う処理が階調数変換処理である。後述するように、本実施例のプリンタドライバ１２は、画素を所定数ずつブロックにまとめ、ブロック単位で階調数変換処理を行うことによって迅速な処理を可能としつつ、ブロック内の各画素の階調データに応じて適切な方法でドット形成有無を判断することによって、画質の維持と高速処理との両立を図っている。
【００７５】
こうして階調数変換処理を終了したら、プリンタドライバはインターレース処理を開始する（ステップＳ１０８）。インターレース処理とは、ドットの形成有無を表す形式に変換された画像データを、ドットの形成順序を考慮しながらカラープリンタ２００に転送すべき順序に並べ替える処理である。プリンタドライバ１２は、インターレース処理を行って最終的に得られた画像データを、印刷データとしてカラープリンタ２００に出力する（ステップＳ１１０）。カラープリンタ２００は、印刷データに従って、各色のインクドットを印刷媒体上に形成する。その結果、画像データに対応したカラー画像が印刷媒体上に印刷される。
【００７６】
Ｄ．本実施例の階調数変換処理：
図５は、本実施例の階調数変換処理の流れを示すフローチャートである。この処理は、コンピュータ１００のＣＰＵ１０２によって行われる。尚、本実施例のカラープリンタ２００は、前述したようにＣ，Ｍ，Ｙ，Ｋの４色のインクドットを形成可能なプリンタであり、図５に示す階調数変換処理も各色毎に行っているが、説明の煩雑化を避けるために、以下では色を特定せずに説明する。
【００７７】
処理を開始すると、先ず初めに、ブロックの位置を設定する（ステップＳ２００）。すなわち、本実施例の階調数変換処理においては、隣接する所定数の画素をブロックにまとめて、ブロック単位で各画素のドット形成有無を判断しているので、先ず初めに、画像中でドットの形成有無を判断しようとする着目ブロックの位置を設定するのである。
【００７８】
図６は、画像中で着目ブロックの位置を設定している様子を概念的に示した説明図である。図６中に、複数表示されている小さな正方形は、画素を概念的に表示したものである。図６に示すように、画像は格子状に配列された複数の画素によって構成されている。４つの画素を囲む太い破線は、ドット形成の有無を判断するために設定された着目ブロックを表している。説明の便宜上、ブロックを構成する４つの画素の中、左上の画素を「Ｐa 」、右上の画素を「Ｐb 」、左下の画素を「Ｐc 」、右下の画素を「Ｐd 」と呼んで区別するものとする。尚、以下では、ブロックは縦横２列に並んだ４つの画素で構成されているものとして説明するが、もちろん、このような構成のブロックに限定されるものではなく、例えば、縦横３列に並んだ９つの画素で構成されているものとしてもよく、更には、横１列に並んだ複数の画素で構成されているものとしても良い。
【００７９】
本実施例の階調数変換処理は、こうして設定された着目ブロック単位で階調数変換処理を行うが、このことにより画質の悪化を招かないように、着目ブロックが画像中でどのような領域であるかを判断し、それによって適切な処理を行っている。すなわち、着目ブロックが画像中で明度の高い（明るい）ハイライト領域にあるのか、それよりもやや明度が低いが、中間階調領域ほどではない過渡的な領域にあるのか、更には中間階調以上の明度の低い領域にあるのかを判断して、領域に応じて適切な処理を行っている。以下では、これら領域毎に説明する。
【００８０】
Ｄ−１．ハイライト領域の処理：
画像中に着目ブロックを設定したら、その着目ブロックを構成する各画素の画像データの読み込みを行う（図５のステップＳ２０２）。ここで読み込まれるのは、色変換されてＲＡＭ１０６に記憶されているＣ，Ｍ，Ｙ，Ｋ各色の階調データである。
【００８１】
次いで、読み込んだ画像データの総和を算出する（ステップＳ２０４）。すなわち、着目ブロックを構成する４つの画素、すなわち画素Ｐa 、画素Ｐb 、画素Ｐc 、画素Ｐd の階調値をそれぞれＤＴa 、ＤＴb 、ＤＴc 、ＤＴd とすると、
Ｓ  ＝  ＤＴa ＋ＤＴb ＋ＤＴc ＋ＤＴd   ・・・（１）
によって、総和Ｓを算出する。より一般的に着目ブロックが、縦横ｎ行ｍ列のマトリックス状に並んだ画素から構成されているものとすれば、総和Ｓは、
Ｓ  ＝  Σ（ＤＴij）
によって算出することができる。ここで、ｉは１〜ｎの整数値、ｊは１〜ｍの整数値である。
【００８２】
こうして得られた総和Ｓの値が「０」か否かを判断する（ステップＳ２０６）。ここで、各画素の階調値は０から２５５の値しか取り得ないから、総和Ｓが「０」となるのは、着目ブロックを構成する画素の階調値がすべて「０」の場合だけである。すなわち、ステップＳ２０６では、着目ブロックが階調値０の画素のみで構成されているか否かを判断している。着目ブロックが階調値０の画素のみで構成されている場合（ステップＳ２０６：ｙｅｓ）は、該着目ブロックを構成する全画素について、ドットを形成しないと判断する（ステップＳ２１２）。
【００８３】
着目ブロックを構成する画素の中に、１つでも階調値が０でない画素が含まれている場合（ステップＳ２０６：ｎｏ）は、着目ブロックについての補正データＢx を算出する（ステップＳ２０８）。着目ブロックの補正データＢx は、先に算出した総和Ｓと、着目ブロックを構成する各画素に周辺から拡散されてきた拡散誤差とを加算して求めることができる。着目ブロックを構成する４つの画素、すなわち画素Ｐa 、画素Ｐb 、画素Ｐc 、画素Ｐd に拡散されてきた拡散誤差をそれぞれＥＤa 、ＥＤb 、ＥＤc 、ＥＤd とすると、着目ブロックの補正データＢx は、
Ｂx ＝  Ｓ＋ＥＴa ＋ＥＴb ＋ＥＴc ＋ＥＴd   ・・・（２）
によって求めることができる。周辺の画素から、いかにして誤差が拡散されてくるかについては後述する。各画素に拡散されてきた拡散誤差は、画素毎にＲＡＭ１０６に記憶されているので、ステップＳ２０８においては、これらの拡散誤差を読み出して補正データＢx を算出するのである。尚、各画素の拡散誤差は、先にステップＳ２０２で各画素の階調値を読み出したときに、同時に読み出しておいても構わない。
【００８４】
次いで、求めた補正データＢx と所定の閾値ｔｈ1 とを比較する（ステップＳ２１０）。そして、補正データＢx の方が閾値ｔｈ1 よりも小さい場合、すなわち、着目ブロックを構成する全画素の階調値が「０」というわけではないが、補正データＢx の値が小さい場合は、その着目ブロックの各画素にはドットを形成しないものと判断する（ステップＳ２１２）。
【００８５】
ステップＳ２１０において、補正データＢx が閾値ｔｈ1 よりも大きい場合は、更に所定の閾値ｔｈ2 との比較を行う（ステップＳ２１４）。ここで、閾値ｔｈ2 と閾値ｔｈ1 とは、ｔｈ1 ＜ｔｈ2 の関係が成り立つように設定されている。補正データＢx の値が閾値ｔｈ2 よりは小さい場合、すなわち、閾値ｔｈ1 よりは大きいが閾値ｔｈ2 よりは小さい場合（ステップＳ２１４：ｎｏ）は、着目ブロックを構成する画素の中の１画素にのみ、ドットを形成すると判断する（ステップＳ２１６）。
【００８６】
図７は、着目ブロックを構成する４つの画素の中の１画素にのみ、ドットを形成している様子を示している。着目ブロック中の１画素のみにドットを形成する場合、ドットの形成位置は、図示するように４つの場合を取り得るが、本実施例では、常に着目ブロックの左上の画素にドットを形成するものとする（図７（ａ）参照）。こうすれば、処理が簡素化されるので、それだけドット形成有無の判断を迅速に行うことができる。もちろん、図７（ａ）ないし図７（ｄ）に示す４つの状態をランダムに選択しても良い。あるいは、着目ブロックを構成する画素の中で、階調値の最も大きな画素にドットを形成するものとしても良い。
【００８７】
尚、本実施例の階調数変換モジュールでは、補正データＢx の値が閾値ｔｈ2 よりも小さい場合には、ブロック中の１画素にのみドットを形成し、閾値ｔｈ2 より大きい場合には、ブロック内で誤差を拡散しながらドット形成の有無を判断するものとした。もっとも、閾値ｔｈ2 よりも大きな閾値ｔｈを設けておき、補正データＢx の値が閾値ｔｈ2 よりは大きいが閾値ｔｈよりも小さい場合には、ブロック内の２画素にドットを形成することとしても良い。図８に一例を示すように、ドットを形成する画素位置は種々の組合せを取りうるが、固定した位置にドットを形成しても、ランダムに変更しても良く、更には階調値の大きな画素から順番にドットを形成するものとしても良い。
【００８８】
着目ブロックの補正データＢx の値が閾値ｔｈ2 より小さい場合には、画像の中でも明度の高い（明るい）部分、すなわちハイライト領域を処理しているものと考えられ、ドットはまばらに形成されるに過ぎない。このような部分では、上述したように、ブロック全体の補正データＢx に基づいてドット形成の有無を判断しても、画質が悪化することはない。また、このようにまばらにドットが形成されていれば、たとえドットが形成される位置が１画素分ずれたとしても、画質が悪化するおそれはない。従って、このようにして処理を簡素化すれば、画質を維持したまま、ドット形成の有無を迅速に判断することが可能となる。
【００８９】
Ｄ−２．過渡的なハイライト領域の処理：
ステップＳ２１４において、着目ブロックの補正データＢx の値が閾値ｔｈ2 よりも大きい場合は、ハイライト領域ではないが、中間階調領域ほどには明度が低く（暗く）ない、過渡的なハイライト領域を処理していると考えられる。このような部分については画質を維持するために、階調誤差を着目ブロック内の他の画素に拡散させながら、画素毎にドット形成の有無を判断する。また、本実施例の階調数変換処理においては画質の更なる向上を図るため、中間階調以上の領域を処理する場合は、過渡的なハイライト領域とは異なる処理を行う。そこで、ステップＳ２１４において補正データＢx の値が閾値ｔｈ2 よりも大きいと判断された場合には、更に所定の閾値ｔｈ3 と大小関係の比較を行う（ステップＳ２１８）。ここで、閾値ｔｈ3 の値は、ｔｈ2 ＜ｔｈ3 の関係が成り立つ適切な値に設定されている。着目ブロックの補正データＢx の値が閾値ｔｈ3 よりは小さいと判断された場合には、着目ブロックは過渡的なハイライト領域にあると考えられるので、次のようにして着目ブロック内で誤差を拡散させながら、画素毎にドット形成の有無を判断する（ステップＳ２２０）。
【００９０】
図９は、着目ブロック内の画素毎にドット形成の有無を判断する方法を概念的に示した説明図である。図９（ａ）に示した４つの正方形は、着目ブロックを構成する４つの画素を示している。また、図１０は処理の流れを示すフローチャートである。以下、図９および図１０を参照しながら、画素毎にドット形成の有無を判断する処理について説明する。
【００９１】
ドット形成有無を判断する処理を開始すると、先ず初めに、処理しようとする画素についての階調値および拡散誤差を読み込む（図１０のステップＳ３００）。画素の階調値とは、色変換処理されてＲＡＭ１０６に記憶されている各色の画像データである。また、拡散誤差とは、周辺の画素から拡散されてきてＲＡＭ１０６に記憶されている誤差である。拡散誤差が、どのようにして周辺の画素から拡散されて来るかについては後述する。図９（ａ）の画素Ｐa を示す正方形の中にＤＴa ，ＥＤa と表示されているのは、階調値ＤＴa と拡散誤差ＥＤa とが画素Ｐa に対応付けられてＲＡＭ１０６に記憶されていることを模式的に示したものである。ここでは、着目ブロックの左上の画素Ｐa から処理を開始するものとして、画素Ｐa の階調値ＤＴa と拡散誤差ＥＤa とを読み出す。
【００９２】
次いで、読み出した階調値と拡散誤差とを加算することによって、画素Ｐa の補正データＣx を算出し（ステップＳ３０２）、算出した補正データＣx と所定の閾値ｔｈとの大小関係を判断する（ステップＳ３０４）。補正データＣx の方が大きければ、画素Ｐa にはドットを形成すると判断し（ステップＳ３０６）、そうでなければ、画素Ｐa にはドットを形成しないと判断する（ステップＳ３０８）。判断の結果は、各画素についての判断結果を示す変数に蓄えておく。
【００９３】
こうして画素Ｐa についてのドット形成有無を判断したら、判断に伴って生じる階調誤差を算出する（ステップＳ３１０）。階調誤差は、ドットを形成したこと、あるいはドットを形成しなかったことによって、その画素に表現される階調値（以下では、この階調値を結果値と呼ぶ）を、その画素の階調値から減算することによって算出することができる。
【００９４】
こうして得られた階調誤差を、同じブロック内にある周辺の未判断画素に拡散させる（ステップＳ３１２）。図９（ａ）を参照すれば明らかなように、画素Ｐa についてドット形成有無を判断すると、同じブロック内には、画素Ｐb と画素Ｐc と画素Ｐd の３つの画素が未判断画素として残っている。そこで、ステップＳ３１２においては、画素Ｐa で生じた階調誤差をこれら３つの画素に１／３ずつ均等に分配して、各画素に記憶されている拡散誤差に加算する。例えば、画素Ｐb には既に拡散誤差ＥＤb がＲＡＭ１０６上に記憶されているので、この値に、画素Ｐa から分配されてきた誤差（画素Ｐa で生じた階調誤差の１／３）を加算して、新たな拡散誤差ＥＤb としてＲＡＭ１０６上に記憶する。他の画素Ｐc および画素Ｐd についても同様な処理を行う。図１０のステップＳ３１２では、以上のような処理を行う。尚、階調誤差は、必ずしも周辺の未判断画素に均等に分配する必要はなく、各画素に所定の割合で分配しても構わない。図９（ａ）中で画素Ｐa から他の３つ画素に向かって表示されている矢印は、画素Ｐa で生じた誤差がこれら３つの画素に拡散されることを概念的に示したものである。
【００９５】
以上のようにして画素Ｐa についてのドット形成有無を判断したら、着目ブロックのすべての画素について判断を終了したか否かを判断し（図１０のステップＳ３１４）、全画素の処理が終了していなければ、次の新たな画素についてのドット形成有無の判断を開始する。
【００９６】
画素Ｐa についてのドット形成有無を判断したら、次は画素Ｐb についての判断を開始する。画素Ｐb についての判断は画素Ｐa についての判断とほぼ同様に行うことができる。図９（ｂ）は、画素Ｐb についてのドット形成有無を判断している様子を概念的に示した説明図である。画素Ｐa に斜線が施されているのは、既にドット形成有無を判断済みであることを示している。画素Ｐb についてのドット形成有無の判断を開始すると、先ず初めに画素Ｐb の階調値と画素Ｐb に拡散されて記憶されている拡散誤差ＥＤb を読み出して、画素Ｐb についての補正データＣxbを算出する。ここで読み出す画素Ｐb の拡散誤差ＥＤb は、画素Ｐb に対応付けて記憶されていた元々の拡散誤差に、画素Ｐa から拡散されてきた誤差を加算して得られた新たな拡散誤差ＥＤb である。画素Ｐb についての補正データＣxbは、階調値ＤＴb と拡散誤差ＥＤb とを加算して求めることができる。こうして得られた補正データＣxbと所定の閾値ｔｈとを比較することにより、画素Ｐb についてのドット形成有無を判断し、判断によって生じる階調誤差を算出する。
【００９７】
以上のようにして得られた画素Ｐb の階調誤差を、着目ブロック内の未判断画素に拡散させる。図９（ｂ）に示しように、画素Ｐa については既にドット形成有無を判断済みであるので、画素Ｐb で生じた階調誤差は画素Ｐc と画素Ｐd の２つの画素に１／２ずつ拡散される。もちろん、所定の割合で誤差を拡散させても構わない。
【００９８】
画素Ｐb についてのドット形成有無を判断したら、次は画素Ｐc についての判断を開始する。図９（ｃ）は画素Ｐc についてのドット形成有無を判断する様子を概念的に示した説明図である。画素Ｐc についてのドット形成有無を開始する時点では、画素Ｐc に対応付けて記憶されている拡散誤差ＥＤc には、元々記憶されていた拡散誤差に加えて、画素Ｐa からの誤差と画素Ｐb からの誤差とが加算されている。画素Ｐc についてのドット形成有無を判断するにあたっては、これらの誤差が加算された拡散誤差ＥＤc と階調値ＤＴc と加算して補正データを算出し、所定の閾値ｔｈと比較することによってドット形成有無を判断する。図９（ｃ）に示すように、画素Ｐc についてのドット形成有無を判断すると、着目ブロック内に残る未判断画素は画素Ｐd のみである。そこで、画素Ｐc で生じた階調誤差は全て画素Ｐd に拡散され、画素Ｐd に元々記憶されていた拡散誤差に加算されて新たな拡散誤差ＥＤd として記憶される。こうして得られた画素Ｐd の拡散誤差ＥＤd と画素Ｐd の階調値ＤＴd とを加算して補正データＣxdを算出し、閾値ｔｈと比較することによって、画素Ｐd についてのドット形成有無を判断する。図５のステップＳ２２０では、以上のようにして、着目ブロック内で誤差を拡散させながら画素毎にドット形成有無を判断する。
【００９９】
尚、図９に示した例では、着目ブロックを構成する各画素のドット形成有無を判断するに際しては、画素Ｐa 、画素Ｐb 、画素Ｐc 、画素Ｐd の順番で判断を行ったが、必ずしもこの順番で判断する必要はなく、例えば図１１に示すように、画素Ｐa 、画素Ｐc 、画素Ｐb 、画素Ｐd の順番でドット形成有無を判断しても良い。両図を比較すれば明らかなように、図９の場合と図１１の場合とではブロック内で誤差を拡散させる方向が異なっており、良好な画質が得られる順番を適宜選択することができる。
【０１００】
以上に説明したようにして、着目ブロック内の画素毎にドット形成有無を判断したら、着目ブロックで生じた誤差を計算する（ステップＳ２２２）。前述したように、着目ブロックのいずれの画素にもドットを形成しないと判断した場合（ステップＳ２１２）や、１画素にのみドットを形成すると判断した場合（ステップＳ２１６）も、そのように判断したことによって着目ブロックで生じた誤差を計算する。
【０１０１】
着目ブロックで生じた誤差は、その着目ブロックの補正データＢx の値から、そのブロックについての結果値の値を減算することで算出することができる。ここで、着目ブロックの補正データＢx は、着目ブロックを構成する各画素についての階調値の総和Ｓと、各画素に記憶されている拡散誤差とを加算して得られるデータである。総和Ｓは（１）式で、着目ブロックの補正データＢx は（２）式で算出される。また、着目ブロックについての結果値とは、そのブロックを構成する各画素についての結果値（ドットが形成されたこと、あるいは形成されなかったことによって、画素に表現される階調値）の総和値である。
【０１０２】
例えば、着目ブロック内のいずれの画素にもドットを形成しない場合（ステップＳ２１２の場合）は、各画素の結果値はいずれも「０」であるから、その着目ブロックの結果値も「０」である。従って、着目ブロックでは、補正データＢx の値がそのまま誤差として発生する。同様に、着目ブロック内の１画素にのみドットが形成される場合（ステップＳ２１６の場合）は、着目ブロックの結果値は、ドットが形成される画素についての結果値となる。従って、その着目ブロックでは、補正データＢx からドットを形成した画素の結果値を減算した値が誤差として発生する。着目ブロック内の画素毎にドット形成有無を判断した場合（ステップＳ２２０の場合）も同様にして、着目ブロックで生じる誤差を求めることができる。もっとも、ステップＳ２２０の処理では、図９を用いて説明したように、各画素で生じた階調誤差を着目ブロック内の未判断画素に拡散させながらドット形成の有無を判断しているので、最後にドット形成有無を判断する画素（図９の例では画素Ｐd ）についての階調誤差と、着目ブロックの誤差とは一致する。従って、画素Ｐd についての階調誤差を算出することによって、着目ブロックで生じる誤差を簡便に求めることもできる。
【０１０３】
こうして、着目ブロックで生じた誤差を算出したら、この誤差を周辺画素に拡散させる（ステップＳ２２４）。図１２は、着目ブロックで生じた誤差を周辺の画素に拡散させる様子を概念的に示した説明図である。図１２中に複数示されている小さな正方形は、それぞれ画素を模式的に表示したものである。また、斜線が施された大きな正方形は着目ブロックを示している。着目ブロック内に破線で示すように、ブロックは４つの画素から構成されているが、個々の画素ではなく、これら画素をまとめた着目ブロック全体で生じた誤差を周辺の画素に拡散させる。図１２では、着目ブロックの誤差が周辺の６つの画素に拡散される様子を、黒い矢印で示している。着目ブロックの左側の画素には誤差が拡散されないのは、これら画素についてはドット形成有無の判断が終了しているからである。
【０１０４】
また、前述したように、着目ブロックの補正データＢx によって単純にドット形成有無を判断する場合（図５のステップＳ２１２あるいはステップＳ２１６）や、着目ブロック内で誤差を拡散させながら画素毎にドット形成有無を判断する場合（図５のステップＳ２２０）は、いずれもブロック単位でドットの形成有無を判断しているので、ブロック内のどの画素に誤差が拡散されるかは大きな問題とならない。このことから、着目ブロックで生じた誤差を、図１３に示しようにして拡散しても良い。すなわち、着目ブロックがハイライト領域にある場合（図５のステップＳ２１２あるいはステップＳ２１６の場合）は、図１２において着目ブロックから右側の２つの画素に拡散される誤差を、図１３に示すようにいずれか一方の画素に拡散させたとしても、同じブロックに拡散されることになるから、ドット形成有無の判断結果は全く同じとなる。着目ブロックが過渡的なハイライト領域にある場合（図５のステップＳ２２０の場合）には、画素毎にドットの形成有無を判断しているので、２つの画素に拡散させる誤差をいずれか一方の画素に拡散させるとドットが形成される画素は異なる。しかし、この場合でもブロック内の画素間で誤差を拡散しながらドット形成有無を判断しているので、ブロック全体としてみれば、なお同様の結果が得られており、ドットの形成される画素位置がブロック内で僅かに異なっているだけである。また、図１２で着目ブロックから下側の２つの画素に拡散される誤差も拡散されることになるので、いずれか一方の画素に拡散させても、ほぼ同様の結果を得ることができる。このことから、図１２の代わりに、図１３に示すようにして誤差を拡散させても良い。各画素に誤差を拡散させる割合は、予め適切な割合を設定しておくことができる。
【０１０５】
図１４は、各画素に誤差を拡散させる割合を設定した一例を例示したものである。図１４で、斜線を施した大きな正方形は着目ブロックを表したものであり、その周辺に複数示した小さな正方形は、着目ブロックからの誤差が拡散される画素を表示したものである。また、破線で示した大きな正方形は、着目ブロックの周辺のブロックを示したものである。
【０１０６】
図１４（ａ）の例では、着目ブロックの右側にある２つの画素には、着目ブロックで生じた誤差のそれぞれ１／８の値が拡散される。着目ブロックの下側にある２つの画素にも同様に、誤差の１／８ずつ拡散される。また、着目ブロックの左下の画素あるいは右下の画素には、それぞれ誤差の１／４ずつ拡散される。このように誤差を拡散させれば、着目ブロックの周辺のブロックに均等に、それぞれ誤差の１／４ずつ拡散されることになる。もちろん、同じブロックに拡散する誤差は１つの画素にまとめて拡散するようにしても良い。例えば、図１４（ｂ）に示すように誤差を拡散しても、図１４（ａ）の場合と、ほぼ同等な結果を得ることができる。このように、同じブロックに拡散される誤差はまとめて拡散することにすれば、誤差を拡散すべき画素数を減らすことができるので、それだけ処理を迅速化することができる。
【０１０７】
図１４（ｃ）に示した例では、各ブロックに拡散される誤差の割合は異なっている。良好な画質が得られるように、誤差を拡散する割合をブロック間で異ならせても構わない。また、着目ブロックの左下のブロックには、ブロック中で最初にドット形成有無を判断する画素に誤差が拡散されている。このように、必ずしも着目ブロックに隣接していない画素に誤差を拡散しても構わない。
【０１０８】
もちろん、図１４（ｄ）に示すように、着目ブロックには隣接していないブロックを含む広い範囲に誤差を拡散しても良い。更には、図１４（ｅ）に示すように、ブロック単位で誤差を拡散しても良い。すなわち、着目ブロックから周辺のブロックに誤差を拡散し、各ブロックに拡散された誤差は該ブロック内の画素に均等に拡散させても構わない。
【０１０９】
図５のステップＳ２２４においては、以上に説明したように、着目ブロック全体で生じた誤差を所定の割合で周辺の画素に拡散させる処理を行う。
【０１１０】
Ｄ−３．中間階調以上の領域の処理：
ステップＳ２１８において、着目ブロックの補正データＢx の値が閾値ｔｈ3 よりも大きい場合は、着目ブロックは画像中の中間階調以上の領域に設定されていると考えられる。このような領域ではブロック単位でドット形成有無を判断しながらも、いわゆる誤差拡散法と同様に各画素で生じた誤差を拡散させながらドット形成の有無を判断する（ステップＳ２２６）。このため、本実施例の階調数変換処理においては、画像中の中間階調値以上の領域でも、画質を維持することができる。
【０１１１】
図１５は、ステップＳ２２６において、各画素の誤差を拡散しながら画素毎にドット形成有無を判断する処理について概念的に示した説明図である。図１５中で、破線で示した大きな正方形は着目ブロックを示し、着目ブロック中に実線で示した正方形は画素を示している。着目ブロック外の画素は、破線の正方形で表示している。着目ブロック内の各画素は、左上の画素を画素Ｐa 、右上の画素を画素Ｐb 、左下の画素を画素Ｐc 、右下の画素を画素Ｐd と呼んでそれぞれの画素を識別する。また、画素Ｐa ，画素Ｐb ，画素Ｐc ，画素Ｐd 内に表示されているＤＴa ，ＤＴb ，ＤＴc ，ＤＴd は、それぞれの画素の階調値を示し、ＥＤa ，ＥＤb ，ＥＤc ，ＥＤd はそれぞれの画素に拡散されて記憶されている拡散誤差を示している。
【０１１２】
ステップＳ２２６において、各画素の誤差を拡散しながら画素毎にドット形成有無を判断する処理は、先に図９および図１０を用いて説明した処理（ステップＳ２２０の処理）とほぼ同様である。前述したステップＳ２２０の処理では各画素で生じた誤差を、着目ブロック内の画素に拡散したのに対して、以下に説明するステップＳ２２６の処理では、着目ブロック外の画素にも誤差を拡散させる点が大きく異なっている。このように、各画素で生じた誤差を着目ブロック外の画素にも拡散させながらドット形成有無を判断しているために、いわゆる誤差拡散法と呼ばれる手法とほぼ等価な処理を行うことができる。その結果、画像中の中間階調以上の領域でも、画質を悪化させることなくドット形成有無を判断することが可能である。以下では、図１５を参照しながら、図１０に示したフローチャートを流用して、図５のステップＳ２２６で行われる処理について説明する。
【０１１３】
ステップＳ２２０で行われる処理と同様に、ステップＳ２２６の処理においても、処理を開始すると先ず初めに、着目ブロックの左上にある画素Ｐa の階調値ＤＴa および拡散誤差ＥＤa を読み込む（図１０のステップＳ３００相当）。各画素の階調値および拡散誤差は、それぞれの画素に対応付けてＲＡＭ１０６上に記憶されている。
【０１１４】
次いで、読み出した階調値と拡散誤差とを加算することによって、画素Ｐa の補正データＣx を算出し（図１０のステップＳ３０２相当）、算出した補正データＣx と所定の閾値ｔｈとの大小関係を判断する（図１０のステップＳ３０４相当）。そして、補正データＣx の方が大きければ、画素Ｐa にはドットを形成すると判断し（図１０のステップＳ３０６相当）、そうでなければ、画素Ｐa にはドットを形成しないと判断する（図１０のステップＳ３０８相当）。判断の結果は、各画素についての判断結果を示す変数に蓄えておく。
【０１１５】
こうして画素Ｐa についてのドット形成有無を判断したら、判断に伴って生じる階調誤差を算出し（図１０のステップＳ３１０相当）、得られた階調誤差を、周辺の未判断画素に所定の割合で拡散させる（図１０のステップＳ３１２相当）。ここで、図５のステップＳ２２６の処理においては、階調誤差が生じた画素が着目ブロック中でどの位置にあるかに応じて、周辺画素に誤差を拡散させる割合が予め定められている。図１６は、階調誤差が生じた画素の位置に応じて、周辺画素に誤差を拡散させる割合が設定されている一例を例示した説明図である。図１６（ａ）は、着目ブロックの左上の画素、すなわち画素Ｐa で生じた階調誤差を周辺画素に拡散させる割合を示している。図中に「＊」と示されているのは階調誤差が発生した画素の位置を示している。画素Ｐa で生じた階調誤差は、画素Ｐb および画素Ｐc にそれぞれ３／８ずつ拡散され、画素Ｐd には階調誤差の１／４が拡散される。もちろん、拡散させる割合はこの割合に限定されるものではなく、処理する画像の特性に応じて種々の割合に設定することができる。
【０１１６】
図１５（ａ）は、画素Ｐa で生じた階調誤差を周辺の未判断画素に拡散させている様子を概念的に示した説明図である。画素に施された斜線は、ドット形成有無の判断が既に行われていることを示している。図示されているように画素Ｐa の左方の画素は既にドット形成有無を判断済みである。また、本実施例の階調数変換処理は、通常の階調数変換処理と同様に上段にあるブロックから順にドット形成有無を判断しているから、画素Ｐa に上方の画素についても既にドット形成有無を判断済みである。このことから、画素Ｐa の周辺の未判断画素は着目ブロック内にある他の３つの画素、すなわち、画素Ｐb ，画素Ｐc ，画素Ｐd となり、画素Ｐa で生じた階調誤差はこれら３つの画素に拡散される。
【０１１７】
一例として各画素に誤差が拡散される割合が図１６（ａ）に示す割合であるとすれば、画素Ｐb には画素Ｐa で生じた階調誤差の３／８の値が拡散されて、画素Ｐb に対応付けて記憶されている拡散誤差ＥＤb と加算されて、画素Ｐb の新たな拡散誤差ＥＤb として記憶される。画素Ｐc についても同様に、拡散誤差ＥＤc の値に画素Ｐa で生じた階調誤差の３／８の値が加算され、画素Ｐc の新たな拡散誤差ＥＤc として記憶される。また、画素Ｐd については、画素Ｐa で生じた階調誤差の１／４の値が加算されて、画素Ｐd の新たな拡散誤差ＥＤd として記憶される。図１５（ａ）において、画素Ｐa から他の３つの画素に向かう白抜きの矢印は、このように画素Ｐa で生じた階調誤差が他の３つの画素に拡散されることを模式的に表したものである。
【０１１８】
こうして画素Ｐa についてのドット形成有無を判断し、画素Ｐa で生じた階調誤差を周辺の未判断画素に拡散したら、着目ブロックのすべての画素について判断を終了したか否かを判断し（図１０のステップＳ３１４相当）、全画素の処理が終了していなければ、次の新たな画素についてのドット形成有無の判断を開始する。
【０１１９】
画素Ｐa についてのドット形成有無を判断したら、次は画素Ｐb についての判断を開始する。画素Ｐb についての判断も画素Ｐa についての判断とほぼ同様に行うことができる。図１５（ｂ）は、画素Ｐb で生じた階調誤差を周辺の未判断画素に拡散させる様子を概念的に示した説明図である。画素Ｐa については既にドット形成有無を判断済みなので、画素Ｐb で生じた階調誤差は、図示されているように、着目ブロック内の２つの画素および着目ブロック外の２つの画素の合計４つの画素に拡散される。図１６（ｂ）は、画素Ｐb から周辺の未判断画素に階調誤差が拡散される割合の一例を示したものである。
【０１２０】
画素Ｐb についてのドット形成有無を判断したら、同様にして画素Ｐc についての判断を行い、判断に伴って生じた階調誤差を周辺の未判断画素に拡散させる。図１５（ｃ）は、画素Ｐc で生じた階調誤差を拡散させる様子を概念的に示した説明図である。図示されているように、着目ブロック内の画素Ｐa および画素Ｐb については既にドット形成有無を判断済みなので、画素Ｐc で生じた階調誤差は着目ブロック内の画素Ｐd および着目ブロック外の３つの画素の合計４つの画素に所定の割合で拡散される。図１６（ｃ）は、画素Ｐc で生じた階調誤差が周辺の画素に拡散される割合を例示した説明図である。こうして画素Ｐc で生じた誤差を所定の割合で周辺の未判断画素に拡散したら、画素Ｐd についての判断を開始する。
【０１２１】
図１５（ｄ）は、画素Ｐd で生じた階調誤差を拡散させる様子を概念的に示した説明図である。図示されているように、画素Ｐd のまわりには５つの未判断画素が存在しているので、これらの画素に階調誤差を拡散させる。図１６（ｄ）は各画素に誤差を拡散させる割合を例示した説明図である。
【０１２２】
こうして、画素Ｐa ，画素Ｐb ，画素Ｐc ，画素Ｐd の４つの画素についての処理を終了後、着目ブロック内の全画素の処理を終了したか否かを判断して（図１０のステップＳ３１４相当）、図５のステップＳ２２６の処理を終了する。
【０１２３】
以上に説明したように図５のステップＳ２２６の処理では、ブロック単位でドット形成有無を判断しながらも、各画素で生じた階調誤差を周辺の未判断画素に拡散しながらドット形成有無を判断しており、いわゆる誤差拡散法と等価な処理を行っている。このため、着目ブロックが画像中の中間階調以上の領域に設定されている場合でも、画質を維持したまま、ドット形成有無を判断することが可能である。
【０１２４】
尚、図１５に示した例では、着目ブロックを構成する各画素のドット形成有無を判断するに際しては、画素Ｐa 、画素Ｐb 、画素Ｐc 、画素Ｐd の順番で判断を行ったが、必ずしもこの順番で判断する必要はなく、例えば図１７に示すように、画素Ｐa 、画素Ｐc 、画素Ｐb 、画素Ｐd の順番でドット形成有無を判断しても良い。両図を比較すれば明らかなように、図１５の場合と図１７の場合とではブロック内で誤差を拡散させる方向が異なっており、良好な画質が得られる順番を適宜選択しても良い。また、図１４に例示するように、階調誤差をより広い範囲の画素に拡散させるものとしても構わない。
【０１２５】
図５のステップＳ２２６あるいはステップＳ２２４の処理を終了したら、ステップＳ２００で設定した着目ブロックについてのドット形成有無の判断および該判断によって生じた階調誤差の拡散が終了したことになるので、次は、全ブロックについての処理を終了したか否かを判断する（ステップＳ２２８）。未処理のブロックが残っていたら、再びステップＳ２００に戻って、１ブロック分だけ着目ブロックを移動させ、続く一連の処理を行う。こうして全ブロックについてドット形成有無を判断したら、階調数変換処理を終了して、図４の画像データ変換処理に復帰する。
【０１２６】
以上、説明したように本実施例の階調数変換処理においては、所定数の複数画素をまとめたブロック単位でドット形成の有無を判断するので、階調数変換処理を迅速に行うことができる。また、着目ブロックのドット形成有無を判断するに際しては、該着目ブロック内の各画素の階調値あるいは補正データの大小関係に基づき、画像中で該着目ブロックが如何なる領域に設定されているかを判断し、適切な方法を用いてドット形成有無を判断する。このため、階調値あるいは補正データに応じた方法でドット形成有無を判断することができるので、ブロック単位でドット形成の有無を判断しているにもかかわらず、画質を維持することができる。更に、ドット形成有無の判断を行う画像中の領域が、中間階調以上の領域である場合には、いわゆる誤差拡散法と等価な方法を用いてドット形成有無を判断しているので、高画質の画像を得ることができる。
【０１２７】
Ｅ．変形例：
上述の階調数変換処理には種々の変形例が存在している。以下、簡単に説明する。
【０１２８】
Ｅ−１．第１の変形例：
上述の階調数変換処理では、着目ブロックの総和Ｓが「０」、すなわち着目ブロックを構成する各画素の階調値がいずれも「０」である場合（図５のステップＳ２０６：ｙｅｓ）は、該ブロック内にはドットを形成しないと判断して、該着目ブロックで生じた誤差を周辺画素に拡散した（図５のステップＳ２１２ないしステップＳ２２４）。
【０１２９】
これに対して、着目ブロックの総和Ｓが続けて「０」となった場合には、該ブロック内の各画素に対応付けて記憶されている拡散誤差の値を「０」としてもよい。すなわち、図５のステップＳ２２４において、図１８に示すような処理を行っても良い。先ず、着目ブロックを構成する各画素の階調値の総和Ｓが「０」か否かを判断し（ステップＳ３００）、総和Ｓの値が「０」でなければフラグＦに「０」をセットして（ステップＳ３０２）、着目ブロックで生じた階調誤差を周辺画素に拡散させる（ステップＳ３０４）。ステップＳ３０４において行われる具体的な処理は、前述したステップＳ２２４の処理と同様である。
【０１３０】
ステップＳ３００において、着目ブロックの総和Ｓが「０」である場合は、フラグＦが「１」か否かを判断する（ステップＳ３０６）。先に判断した着目ブロックの総和Ｓが「０」でない場合は、ステップＳ３０２においてフラグＦには「０」が設定されている。かかる場合（ステップＳ３０６：ｎｏ）には、着目ブロック総和Ｓが「０」であることを示す値「１」をフラグＦに設定した後（ステップＳ３０８）、着目ブロックで生じた階調誤差を周辺画素に拡散させる（ステップＳ３０４）。先に判断した着目ブロックの総和Ｓが「０」であった場合は、ステップＳ３０８でフラグＦには「１」が設定されている。このような場合（ステップＳ３０６：ｙｅｓ）は、着目ブロックで生じた階調誤差を拡散させる代わりに、該着目ブロック内の各画素に記憶されている拡散誤差の値を「０」に初期化する（ステップＳ３１０）。
【０１３１】
着目ブロックの総和Ｓが「０」であるためには、着目ブロックを構成する各画素の階調値が全て「０」でなければならないから、連続して総和Ｓが「０」となるということは、その部分には表現すべき画像が存在していない、すなわち印刷用紙を地色のまま残しておくべき部分であると考えられる。上述の第１の変形例においては、このような部分では、各画素の拡散誤差の値を初期化する。このため、本来は画像の存在しない部分に、周囲から拡散されてきた誤差の影響でドットを形成することなく、より高画質の画像を表現することが可能となる。また、総和Ｓが連続して「０」となる着目ブロックでは、該ブロックで生じた階調誤差を拡散させる処理を省略してしまうので、それだけ処理を迅速に行うことが可能である。
【０１３２】
Ｅ−２．第２の変形例：
上述した階調数変換処理では、着目ブロックの総和Ｓあるいは補正データに基づいて、適切なドット形成判断方法を選択していたが、着目ブロックを構成する各画素の階調値に基づいて適切な方法を選択するものであれば、必ずしも総和あるいは補正データの値に基づいて選択する必要はない。例えば、以下に説明するように、着目ブロックのある位置が画像のエッジ部分か否か、すなわち画像データの階調値が急変する部分か否かに応じて適切な判断方法を選択しても良い。
【０１３３】
図１９は、着目ブロックの総和あるいは補正データの値に加えて、着目ブロックがエッジ部分にあるか否かに応じて、適切な方法を用いてドット形成の有無を判断する処理の流れを示したフローチャートである。図５に示した階調数変換処理に対して、着目ブロックがエッジ位置か否かを判断する処理（ステップＳ４０８）が追加されている部分が大きく異なっている。以下、図１９のフローチャートに従って、第２の変形例の階調数変換処理について、図５の処理に対して異なる部分を中心に簡単に説明する。
【０１３４】
図５を用いて前述した階調数変換処理と同様に、第２の変形例の階調数変換処理においても、先ず初めに着目ブロックを設定し（ステップＳ４００）、ブロック内の画素の階調値および拡散誤差を読み込んで、着目ブロックの総和Ｓを算出する（ステップＳ４０２）。次いで、算出した総和Ｓが「０」であるか否かを判断し（ステップＳ４０４）、総和Ｓが「０」の場合には該着目ブロックを構成する全画素についてドットを形成しないと判断する（ステップＳ４１２）。着目ブロックの総和Ｓが「０」でない場合には、補正データＢx を算出しておく（ステップｓ４０６）。補正データｂX は、図５を用いて前述した階調数変換処理と同様に、（２）式を用いて算出することができる。
【０１３５】
次に、着目ブロックの設定されている位置が、エッジ部分であるか否かを判断する（ステップＳ４０８）。着目ブロックがエッジ部分にあるか否かは、着目ブロック内で隣接する画素同士の階調値を比較することによって判断することができる。例えば、図２０（ａ）に示すように、画素Ｐa を中心として、画素Ｐa と画素Ｐb ，画素Ｐa と画素Ｐc ，および画素Ｐa と画素Ｐd の階調値の差がいずれも所定値以下であれば、着目ブロックはエッジ部分ではないと判断することができる。すなわち、
0003912055.tif 000002
であれば、着目ブロックが設定されている位置は画像中のエッジ部分ではないと判断する。ここで、abs （Ｘ）は、Ｘの絶対値を求める関数である。また、閾値ｔｈe は、予め適切な値に設定されている。図２０（ａ）で、画素Ｐa と、それぞれ画素Ｐb ，画素Ｐc ，画素Ｐd との間に表示されている矢印は、これら画素間の階調値の差に基づいて、エッジか否かを判断することを示している。
【０１３６】
着目ブロックの設定されている位置がエッジ部分であるか否かを、上記の（３）式によって判断する代わりに、次のようにして簡易に判断しても良い。すなわち、図２０（ｂ）に示すように、画素Ｐa と画素Ｐd との間の階調値の差、および画素Ｐb と画素Ｐc との間の階調値の差がいずれも所定値以下の場合に、着目ブロック位置はエッジ部分ではないと判断しても良い。あるいは、着目ブロックを構成する画素の中でもっとも大きな階調値ともっとも小さな階調値の差を求めて、かかる階調値の差が所定の閾値より大きい場合には、該着目ブロックはエッジ部分に設定されていると判断しても良い。
【０１３７】
こうして、着目ブロック位置がエッジ部分ではないと判断された場合（ステップＳ４０８：ｎｏ）は、図５を用いて前述した階調数変換処理と同様の処理を行う。すなわち、着目ブロックの補正データＢx と所定の閾値ｔｈ1 ，ｔｈ2 ，ｔｈ3 とを比較して（ステップＳ４１０、Ｓ４１４、Ｓ４１８）、それぞれ着目ブロックの補正データＢx の値に応じて所定の方法でドット形成有無を判断し（ステップＳ４１２、Ｓ４１６、Ｓ４２０）、着目ブロック全体で生じた階調誤差を周辺画素に拡散させる（ステップＳ４２２、Ｓ４２４）。また、着目ブロックの補正データＢx の値が閾値ｔｈ3 よりも大きい場合には、各画素で生じた階調誤差を周辺の未判断画素に拡散させながら画素毎にドット形成有無を判断する（ステップＳ４２６）。
【０１３８】
着目ブロックが画像中のエッジ部分に位置していると判断した場合（図１９のステップＳ４０８：ｙｅｓ）は、補正データＢx の値に関わらず、各画素の誤差を周辺の未判断画素に拡散させながら画素毎にドット形成有無を判断する（ステップＳ４２６）。こうすれば、画像中のエッジの部分では、必ず画素毎にドット形成有無が判断されるので、画像データの解像度を維持することができる。そのため、画像中の輪郭を不鮮明にすることなく、階調数変換処理を迅速に行うことが可能となるので好適である。
【０１３９】
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。
【０１４０】
例えば、上述した実施例では、説明の煩雑化を避けるために、各画素にはドットが形成されるか、形成され無いかの２つの状態しか取り得ないものとして説明した。もちろん、大きさの異なるドットを形成可能なプリンタや、あるいはインク濃度の異なる複数種類のドットを形成可能なプリンタに適用しても良い。これらプリンタでは、形成可能なドットの種類が増えた分だけ、階調数変換処理が複雑となり、処理時間も長くなる傾向にあるので、上述した各種実施例の階調数変換処理を好適に適用することができる。
【０１４１】
また、上述の機能を実現するソフトウェアプログラム（アプリケーションプログラム）を、通信回線を介してコンピュータシステムのメインメモリまたは外部記憶装置に供給し実行するものであってもよい。もちろん、ＣＤ−ＲＯＭやフレキシブルディスクに記憶されたソフトウェアプログラムを読み込んで実行するものであっても構わない。
【０１４２】
上述した各種実施例では、階調数変換処理を含む画像データ変換処理はコンピュータ内で実行されるものとして説明したが、画像データ変換処理の一部あるいは全部をプリンタ側、あるいは専用の画像処理装置を用いて実行するものであっても構わない。
【０１４３】
更には、画像表示装置は、必ずしも印刷媒体上にインクドットを形成して画像を印刷する印刷装置に限定されるものではなく、例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置であっても構わない。
【図面の簡単な説明】
【図１】本発明の実施の形態を示す印刷システムの概略構成図である。
【図２】本実施例の画像処理装置としてのコンピュータの構成を示す説明図である。
【図３】本実施例の画像表示装置としてのプリンタの概略構成図である。
【図４】本実施例の画像処理装置で行われる画像データ変換処理の流れを示すフローチャートである。
【図５】本実施例の階調数変換処理の流れを示すフローチャートである。
【図６】着目ブロックを設定している様子を示す説明図である。
【図７】着目ブロックを構成する各画素の中の１画素にのみドットを形成する様子を示す説明図である。
【図８】着目ブロックを構成する各画素の中の２つの画素にのみドットを形成する様子を例示する説明図である。
【図９】着目ブロック内の各画素に誤差を拡散させながら、画素毎にドット形成の有無を判断する方法を概念的に示した説明図である。
【図１０】画素毎にドット形成有無を判断する処理の流れを示したフローチャートである。
【図１１】着目ブロック内の各画素に誤差を拡散させながら、画素毎にドット形成の有無を判断する他の方法を概念的に示した説明図である。
【図１２】着目ブロックで生じた階調誤差を周辺の画素に拡散させる様子を概念的に示した説明図である。
【図１３】着目ブロックで生じた階調誤差を周辺の画素に拡散させる変形例を概念的に示した説明図である。
【図１４】着目ブロックで生じた階調誤差を周辺の画素に拡散させる割合が設定されている様子を例示する説明図である。
【図１５】各画素で生じた階調誤差を周辺画素に拡散させながら、ブロック単位でドット形成の有無を判断する様子を概念的に示した説明図である。
【図１６】各画素で生じた階調誤差を周辺画素に拡散させながら、ブロック単位でドット形成の有無を判断する際に、周辺画素へ誤差を拡散する割合を例示した説明図である。
【図１７】各画素で生じた階調誤差を周辺画素に拡散させながら、ブロック単位でドット形成の有無を判断する他の態様を概念的に示した説明図である。
【図１８】本実施例の階調数変換処理の第１の変形例中で行われる処理の流れを示したフローチャートである。
【図１９】本実施例の階調数変換処理の第２の変形例の流れを示したフローチャートである。
【図２０】本実施例の階調数変換処理の第２の変形例において、エッジを検出する方法を概念的に示す説明図である。
【符号の説明】
１０…コンピュータ
１２…プリンタドライバ
２０…カラープリンタ
１００…コンピュータ
１０２…ＣＰＵ
１０４…ＲＯＭ
１０６…ＲＡＭ
１０８…周辺機器インターフェースＰ・Ｉ／Ｆ
１０９…ディスクコントローラＤＤＣ
１１０…ネットワークインターフェースカードＮＩＣ
１１２…ビデオインターフェースＶ・Ｉ／Ｆ
１１４…ＣＲＴ
１１６…バス
１１８…ハードディスク
１２０…デジタルカメラ
１２２…カラースキャナ
１２４…フレキシブルディスク
１２６…コンパクトディスク
２００…カラープリンタ
２３０…キャリッジモータ
２３５…紙送りモータ
２３６…プラテン
２４０…キャリッジ
２４１…印字ヘッド
２４２，２４３…インクカートリッジ
２４４…インク吐出用ヘッド
２６０…制御回路
２６１…ＣＰＵ
２６２…ＲＯＭ
２６３…ＲＡＭ
３００…通信回線
３１０…記憶装置
【図１】
0003912055.tif 000003
【図２】
0003912055.tif 000004
【図３】
0003912055.tif 000005
【図４】
0003912055.tif 000006
【図５】
0003912055.tif 000007
【図６】
0003912055.tif 000008
【図７】
0003912055.tif 000009
【図８】
0003912055.tif 000010
【図９】
0003912055.tif 000011
【図１０】
0003912055.tif 000012
【図１１】
0003912055.tif 000013
【図１２】
0003912055.tif 000014
【図１３】
0003912055.tif 000015
【図１４】
0003912055.tif 000016
【図１５】
0003912055.tif 000017
【図１６】
0003912055.tif 000018
【図１７】
0003912055.tif 000019
【図１８】
0003912055.tif 000020
【図１９】
0003912055.tif 000021
【図２０】
0003912055.tif 000022