(57)【要約】【課題】良好な画質を好適に維持しつつ、誤差拡散処理を効率良く行うことのできる画像処理装置、印刷装置、画像処理方法およびプログラムを提供する。【解決手段】２値化処理部は、複数の画素をまとめて形成した着目ブロックＢＬ内の画素毎にドット形成の有無を判断し、この判断によって画素に生じた階調表現の誤差を該着目ブロックＢＬ内の周辺の未判断画素に拡散させる。次いで、２値化処理部は、該着目ブロックＢＬ内の各画素についてドット形成の有無を判断したことにより生じた該着目ブロックＢＬ全体の階調表現の誤差Ｅｂを該着目ブロックＢＬ外の周辺の未判断画素に拡散させる。この際、２値化処理部は、該着目ブロックＢＬ外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第１のメモリ（内部ＲＡＭ２１ｃ）と第２のメモリ（内部ＲＡＭ２１ｄ）とに分けて格納する。【選択図】      図７
2005269577.tif 000002
【特許請求の範囲】
【請求項１】
画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する２値化処理部を備える画像処理装置において、
前記２値化処理部は、
複数の画素をまとめてブロックを形成するブロック形成部と、
ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させるブロック内誤差拡散部と、
前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させるブロック外誤差拡散部と、を備えており、
前記ブロック外誤差拡散部によって拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第１のメモリと第２のメモリとに分けて格納する、
ことを特徴とする画像処理装置。
【請求項２】
前記２値化処理部は、前記第１のメモリおよび前記第２のメモリをアクセス可能な制御部を有しており、
前記制御部は、
前記第１のメモリからのデータの読み出しに必要なアドレスを生成する第１アドレス生成部と、
前記第２のメモリからのデータの読み出しに必要なアドレスを生成する第２アドレス生成部と、
前記第１のメモリへのデータの書き込みおよび前記第２のメモリへのデータの書き込みに必要なアドレスを生成する第３アドレス生成部と、
前記第１のメモリへのアクセスに使用する第１のバスと、
前記第２のメモリへのアクセスに使用する第２のバスと、
を含む、
請求項１記載の画像処理装置。
【請求項３】
前記第１のメモリおよび前記第２のメモリのうちいずれか一方は、前記制御部の内部に設けられるメモリであり、他方は、前記制御部の外部バスを通じて同制御部の外部に設けられるメモリである、
請求項２記載の画像処理装置。
【請求項４】
前記第１のメモリおよび前記第２のメモリは、前記制御部の内部にそれぞれ設けられるメモリである、
請求項２記載の画像処理装置。
【請求項５】
前記ブロック形成部は、画素の列たるラスタのうち、隣接する２つのラスタに含まれる縦横２列に並んだ４つの画素をまとめてブロックを形成するものであり、
前記第１のメモリは、前記ブロックの形成時に該ブロック内で上位列側のラスタに含まれることとなる画素に拡散させる前記誤差を格納するメモリであり、
前記第２のメモリは、前記ブロックの形成時に該ブロック内で下位列側のラスタに含まれることとなる画素に拡散させる前記誤差を格納するメモリである、
請求項１乃至４のいずれか一項記載の画像処理装置。
【請求項６】
請求項１乃至５のいずれか一項記載の２値化処理部を搭載した印刷装置。
【請求項７】
画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する画像処理方法において、
複数の画素をまとめてブロックを形成する第１のステップと、
ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させる第２のステップと、
前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させる第３のステップと、
前記着目ブロック外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第１のメモリと第２のメモリとに分けて格納する第４のステップと、
を備える画像処理方法。
【請求項８】
前記第１のステップは、画素の列たるラスタのうち、隣接する２つのラスタに含まれる縦横２列に並んだ４つの画素をまとめてブロックを形成するものであり、
前記第４のステップは、
前記ブロックの形成時に該ブロック内で上位列側のラスタに含まれることとなる画素に拡散させる前記誤差を前記第１のメモリに格納するステップと、
前記ブロックの形成時に該ブロック内で下位列側のラスタに含まれることとなる画素に拡散させる前記誤差を前記第２のメモリに格納するステップと、
を含む、
請求項７記載の画像処理方法。
【請求項９】
画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する処理を制御部が実行するためのプログラムであって、
前記制御部が、
複数の画素をまとめてブロックを形成する処理と、
ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させる処理と、
前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させる処理と、
前記着目ブロック外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第１のメモリと第２のメモリとに分けて格納する処理と、
を実行するためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、画像処理装置、印刷装置、画像処理方法およびプログラムにかかり、詳しくは、多階調で表現された画像データをドット形成の有無により表現された画像データに変換する技術に関するものである。
【背景技術】
【０００２】
従来、記録紙等の印刷媒体上に画像を印刷する印刷装置の一つとして、例えばインクジェットプリンタが知られている。インクジェットプリンタは、局所的にはドットを形成するか否かのいずれかの状態しか表現し得ないが、画像の階調値に応じてドットの形成密度を適切に制御することによって、階調が連続的に変化する多階調の画像を表現することが可能となっている。かかるプリンタにおいて、画像の階調値に応じた適切なドットの形成密度が得られるように、各画素についてのドットの形成有無を判断するための手法としては、誤差拡散法と呼ばれる手法が広く使用されている。
【０００３】
誤差拡散法は、画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を周辺の未判断画素に拡散し、該未判断画素についてドット形成の有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するようにドット形成の有無を判断する手法である。誤差拡散法では、このように階調表現の誤差を解消するようにドット形成の有無を判断するので、多階調画像とそれを２値化して得られる２値化画像との間に生じる誤差を平均的に最小にすることができ、優れた画質の画像を形成することができる。このような誤差拡散法に関連する先行技術は、例えば特許文献１に開示されている。
【特許文献１】特開２００２−１８５７９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
誤差拡散法では、上記したようにドット形成の有無を１画素ごとに判断し、該判断によって生じた階調表現の誤差を周辺の未判断画素に広範囲にわたり拡散させて該階調表現の誤差を最小とするよう調整することで、優れた画質の画像を得ることができる。しかしながら、ドット形成の有無を判断する度に誤差を周辺に拡散しなければならないので、画像を構成する画素数が多くなると処理を効率良く行うことができないという問題があった。
【０００５】
この発明は、こうした従来の実情に鑑みてなされたものであり、その目的は、良好な画質を好適に維持しつつ、誤差拡散処理を効率良く行うことのできる画像処理装置、印刷装置、画像処理方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明の第１の態様は、画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する２値化処理部を備える画像処理装置において、前記２値化処理部は、複数の画素をまとめてブロックを形成するブロック形成部と、ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させるブロック内誤差拡散部と、前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させるブロック外誤差拡散部と、を備えており、前記ブロック外誤差拡散部によって拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第１のメモリと第２のメモリとに分けて格納する、ことをその要旨としている。
【０００７】
この構成によれば、２値化処理部は、複数の画素をまとめて処理対象の着目ブロックを形成し、この着目ブロックを構成する画素毎に該着目ブロック内で誤差拡散を実施した後に、該着目ブロック全体の誤差を周辺の未判断画素に拡散させる、といった誤差拡散処理を行う。このような誤差拡散処理では、拡散範囲は狭い範囲となるも着目ブロック内での誤差拡散を画素毎に行う処理と、該着目ブロック全体の誤差を該着目ブロック外へ拡散させる処理とを併用して、画素の階調値に応じた適切な密度でのドットの形成を行って良好な画質を好適に維持しつつ、誤差拡散を１画素ずつ行うことによる処理の非効率化を改善して全体として誤差拡散処理を高速に行うことができる。また本構成では、上記着目ブロック全体の誤差を着目ブロック外へ拡散させる際には、この拡散させる誤差を各々独立したバスを通じて個別にアクセス可能な第１のメモリと第２のメモリとにそれぞれ分けて格納することとしている。こうした構成では、先の着目ブロック内での誤差拡散処理を行うにあたって、各画素についてのドット形成の有無を判断するに必要な周辺からの拡散誤差を各々独立したバスを通じてそれら各メモリから個別に読み出すことができるようになるため、メモリアクセスのためのウェイトが生ずることを抑制することができる。したがって、誤差拡散処理を高速に行うことが可能となる。
【０００８】
上述した画像処理装置において、前記２値化処理部は、前記第１のメモリおよび前記第２のメモリをアクセス可能な制御部を有しており、前記制御部は、前記第１のメモリからのデータの読み出しに必要なアドレスを生成する第１アドレス生成部と、前記第２のメモリからのデータの読み出しに必要なアドレスを生成する第２アドレス生成部と、前記第１のメモリへのデータの書き込みおよび前記第２のメモリへのデータの書き込みに必要なアドレスを生成する第３アドレス生成部と、前記第１のメモリへのアクセスに使用する第１のバスと、前記第２のメモリへのアクセスに使用する第２のバスと、を含む、ことを要旨としている。
【０００９】
これによれば、第１のメモリに格納されている誤差の読み出しは、第１アドレス生成部によって生成されたアドレスをもとに、それに対応するデータを第１のバスを通じて第１のメモリから読み出すことによってなされる。また、第２のメモリに格納されている誤差の読み出しは、第２アドレス生成部によって生成されたアドレスをもとに、それに対応するデータを第２のバスを通じて第２のメモリから読み出すことによってなされる。このように各々独立したバスを通じて各メモリを個別にアクセス可能としたことで、上述したウェイトを極力抑えて処理を高速に進めることができるようになる。
【００１０】
ここで、上記制御部がアクセス可能な第１および第２のメモリの構成としては例えば、
上述した画像処理装置において、前記第１のメモリおよび前記第２のメモリのうちいずれか一方を前記制御部の内部に設け、他方を前記制御部の外部バスを通じて同制御部の外部に設ける、といった構成を採用することや、或いは、
上述した画像処理装置において、前記第１のメモリおよび前記第２のメモリを前記制御部の内部にそれぞれ設ける、といった構成を採用することができる。
【００１１】
誤差を読み書きする第１および第２のメモリをそれぞれ制御部の内部に設ける構成とすれば、メモリアクセスを高速化し、したがって処理を高速に進めることが可能となる。また、第１および第２のメモリのうちいずれか一方のみを制御部の内部に設ける構成とした場合には、他方を外部メモリを利用して構成するようにすればコスト上昇も抑えられるので好適である。
【００１２】
上述した画像処理装置において、前記ブロック形成部は、画素の列たるラスタのうち、隣接する２つのラスタに含まれる縦横２列に並んだ４つの画素をまとめてブロックを形成するものであり、前記第１のメモリは、前記ブロックの形成時に該ブロック内で上位列側のラスタに含まれることとなる画素に拡散させる前記誤差を格納するメモリであり、前記第２のメモリは、前記ブロックの形成時に該ブロック内で下位列側のラスタに含まれることとなる画素に拡散させる前記誤差を格納するメモリである、ことを要旨としている。
【００１３】
このように、縦横２列に並んだ４つの画素をまとめて形成したブロック（着目ブロック）を処理の対象として、先のブロック内誤差拡散部による処理と、ブロック外誤差拡散部による処理とを行えば、処理を効率良く進めることができるので好適である。また、このようにブロックを形成する場合は、該ブロックの形成に用いる２つのラスタの位置にそれぞれ第１のメモリと第２のメモリとを対応させて誤差の格納を行うようにすれば、それら誤差の読み出しを効率的に行うことができるので好適である。
【００１４】
本発明の第２の態様は、上述した画像処理装置の２値化処理部を印刷装置に搭載したことをその要旨としている。
こうすれば、良好な画質を好適に維持しつつ、且つ、効率良く誤差拡散処理を行うことのできる２値化処理部を搭載した印刷装置を提供することができる。
【００１５】
本発明の第３の態様は、画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する画像処理方法において、複数の画素をまとめてブロックを形成する第１のステップと、ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させる第２のステップと、前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させる第３のステップと、前記着目ブロック外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第１のメモリと第２のメモリとに分けて格納する第４のステップと、を備えることをその要旨としている。
【００１６】
この方法によれば、拡散範囲は狭い範囲となるも着目ブロック内での誤差拡散を画素毎に行う処理と、該着目ブロック全体の誤差を該着目ブロック外へ拡散させる処理とを併用して、画素の階調値に応じた適切な密度でのドット形成を行い、良好な画質を好適に維持しつつ、誤差拡散を１画素ずつ行うことによる処理の非効率化を改善して全体として誤差拡散処理を高速に行うことができる。また、本方法では、各画素に拡散させる誤差を各々独立したバスを通じて個別にアクセス可能な第１のメモリと第２のメモリとにそれぞれ分けて格納することとしたため、誤差をそれら各メモリから読み出す際に、該読み出し処理に起因して次の処理の実行にウェイトが生ずることを抑制して誤差拡散処理を高速に行うことが可能となる。
【００１７】
上述した画像処理方法において、前記第１のステップは、画素の列たるラスタのうち、隣接する２つのラスタに含まれる縦横２列に並んだ４つの画素をまとめてブロックを形成するものであり、前記第４のステップは、前記ブロックの形成時に該ブロック内で上位列側のラスタに含まれることとなる画素に拡散させる前記誤差を前記第１のメモリに格納するステップと、前記ブロックの形成時に該ブロック内で下位列側のラスタに含まれることとなる画素に拡散させる前記誤差を前記第２のメモリに格納するステップと、を含む、ことを要旨としている。
【００１８】
このように、縦横２列に並んだ４つの画素をまとめて形成したブロック（着目ブロック）を処理の対象として、先のブロック内誤差拡散部による処理と、ブロック外誤差拡散部による処理とを行えば、処理を効率良く進めることができるので好適である。また、このようにブロックを形成する場合には、該ブロックの形成に用いる２つのラスタの位置にそれぞれ第１のメモリと第２のメモリとを対応させて誤差の格納を行うようにすれば、それら誤差の読み出しを効率的に行うことができるので好適である。
【００１９】
本発明の第４の態様は、画素の階調値により表現された画像データをドット形成の有無により表現された画像データに変換する処理を制御部が実行するためのプログラムであって、前記制御部が、複数の画素をまとめてブロックを形成する処理と、ドット形成の有無を判断しようとする画素を含む着目ブロックについて、該着目ブロックを構成する画素毎にドット形成の有無を判断し、該判断によって画素に生じた階調表現の誤差を該着目ブロック内の周辺の未判断画素に拡散させる処理と、前記着目ブロック内の各画素についてドット形成の有無を判断したことで生じた該着目ブロック全体の階調表現の誤差を該着目ブロック外の周辺の未判断画素に拡散させる処理と、前記着目ブロック外の周辺の未判断画素に拡散させる前記誤差を、各々独立したバスを通じて個別にアクセス可能な第１のメモリと第２のメモリとに分けて格納する処理と、を実行するためのプログラムであることをその要旨としている。
【００２０】
こうしたプログラムとすれば、良好な画質を好適に維持しながら、誤差拡散処理を効率良く行うことが可能となる。
【発明を実施するための最良の形態】
【００２１】
以下、この発明を具体化した一実施の形態を図１〜図７に従って説明する。
図１は、本実施の形態にかかる印刷システムを説明するための説明図である。
この印刷システムは、画像処理装置としてのコンピュータ１と、印刷装置としてのプリンタ２とを備えている。コンピュータ１には、ビデオドライバ用プログラムおよびプリンタドライバ用プログラムがインストールされており、これら各プログラムと制御部としてのＣＰＵとにより同コンピュータ１内にはビデオドライバ３およびプリンタドライバ４が構築されている。また、コンピュータ１には、画像処理用のアプリケーションプログラム（以下「アプリケーション」という）５がインストールされており、このアプリケーション５はＣＰＵにより実行されることで画像データを取り扱う各種の処理を行う。例えば、アプリケーション５は、図示しないデジタルカメラや携帯電話機等から画像データを取り込む処理や、画像データの加工等をする処理、画像データをビデオドライバ３に送ってコンピュータ１の図示しない表示装置（ＬＣＤ等）に画像を表示させる処理、プリンタ２で印刷を行うために画像データをプリンタドライバ４に送り出す処理などを司る。
【００２２】
印刷指令等の操作はコンピュータ１の図示しない入力装置（キーボードやマウス等）を用いて行われる。アプリケーション５は、この入力装置を用いて印刷指令の操作がなされると、図示しないビデオバッファ等に格納されている画像データをプリンタドライバ４に送る。そして、この画像データをプリンタ２が印刷可能な各色ドットの形成有無により表現された印刷データに変換して該印刷データをプリンタ２に転送する。
【００２３】
プリンタドライバ４には、このように画像データを印刷データに変換するための複数のモジュールとして、解像度変換処理部１１、色変換処理部１２、２値化処理部１３およびマイクロウィーブ処理部１４等が備えられている。
【００２４】
解像度変換処理部１１は、アプリケーション５から受け取った画像データの解像度を、プリンタ２が印刷するための印刷解像度に変換する。具体的には、画像データの解像度が印刷解像度よりも低い場合は、線形補間を行うことによって画像データの隣接するラスタ間に新たなデータを生成し、逆に印刷解像度よりも高い場合は、一定の割合でデータを間引くことによって、画像データの解像度を印刷解像度に変換する。
【００２５】
色変換処理部１２は、解像度変換処理部１１から画像データを受け取って、Ｒ，Ｇ，Ｂの階調値の組み合わせ（ＲＧＢ表色系）によって表現されている画像データを、Ｃ，Ｍ，Ｙ，Ｋ等のプリンタ２で使用する各色の階調値の組み合わせ（ＣＭＹＫ表色系）によって表現された画像データに変換する色変換処理を行う。色変換処理は、図示しない色変換テーブル（ルックアップテーブルともいう）を参照して行われ、本実施の形態においては、例えば、Ｃ（シアン）、Ｍ（マゼンダ）、Ｙ（イエロー）、Ｋ（ブラック）、ＬＣ（ライトシアン）、ＬＭ（ライトマゼンダ）、ＬＹ（ライトイエロー）の７色の多階調の画像データに変換される。
【００２６】
２値化処理部１３は、色変換処理後のＣＭＹＫ画像データを受け取って、プリンタ２が表現可能な２階調のＣＭＹＫドットデータに変換する２値化処理（ハーフトーン処理ともいう）を行う。詳述すると、色変換処理後のＣＭＹＫ画像データは、各色、例えば階調値０〜２５５の２５６階調で表現されたデータであるのに対し、プリンタ２はドットを形成する、或いはドットを形成しない、のいずれかの状態しか採り得ない。したがって、こうした２５６階調を有する画像データをプリンタ２が表現可能な２階調で表現された画像データに変換する必要があり、この階調数の変換を行う処理が２値化処理である。
【００２７】
本実施の形態では、こうした２値化処理を誤差拡散法を用いて行うようになっている。誤差拡散法とは、画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を周辺の未判断画素に拡散し、該未判断画素についてのドット形成の有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するようにドット形成の有無を判断する手法である。
【００２８】
なお、詳細については後述するが、本実施の形態においては、この誤差拡散法を用いた処理の態様を、「複数の画素をまとめてブロックＢＬを形成し、このブロックＢＬを構成する画素ごとに該ブロックＢＬ内で誤差拡散を実施した後に、該ブロックＢＬ全体の誤差を周辺の未判断画素に拡散させる」、といった態様としている。つまり、ブロックＢＬ内で画素ごとに誤差拡散を行った後には、ブロックＢＬ外へも誤差拡散を行うようにしている。
【００２９】
マイクロウィーブ処理部１４は、誤差拡散処理により各色ドット形成の有無を表す形式に変換された画像データ（ドットデータ）を２値化処理部１３から受け取り、このドットデータを印刷ヘッドのノズル数やノズルピッチ等に基づいてドットの形成順序を考慮しながらプリンタ２に転送すべき順序に並べ替えるマイクロウィーブ処理を行う。マイクロウィーブ処理について詳述すると、印刷ヘッドにおいては、各ノズルが紙送り方向（副走査方向）に印刷解像度よりも低解像度のノズルピッチで配置されているため、連続する番号のラスタを１回の主走査で形成することができない。そこで、毎回の主走査ではノズルピッチ間隔で複数本のラスタを形成しながら、ラスタを形成する度に形成位置を少しずつずらして、ラスタとラスタの間を少しずつラスタで埋めていくようにし、最終的に連続したラスタを形成する処理をマイクロウィーブ処理という。このマイクロウィーブ処理を経たデータは、コマンドが付されて印刷データとしてプリンタ２に出力される。この印刷データはパケット通信によりプリンタ２に転送される。
【００３０】
次に、本印刷システムを構成するコンピュータ１およびプリンタ２の電気的構成について概略を説明する。
図２は、コンピュータ１の電気的構成を示す。コンピュータ１は、制御部としてのＣＰＵ２１、ＲＯＭ２２、ＲＡＭ２３、ディスクコントローラ（以下「ＤＤＣ」という）２４、各種のインタフェース（以下「Ｉ／Ｆ」という）２５，２６等を備えて構成され、これらはバス２７を介して相互に接続されている。
【００３１】
ＲＯＭ２２には、ＣＰＵ２１による処理の実行に必要な各種のプログラム（ドライバ用プログラムやアプリケーションプログラム）やデータ等が格納される。ＣＰＵ２１は、このＲＯＭ２２を利用してプログラムを実行し、上記画像処理に関連する動作等を制御するための各種演算処理を逐次実行する。ＲＡＭ２３は、ＣＰＵ２１のワーキングメモリとして利用され、例えば、ＣＰＵ２１による各種演算処理の実行に必要なデータ等を一時的に読み書きするバッファとして利用される。
【００３２】
ＤＤＣ２４は、図示しないＣＤ−Ｒ等の各種ディスク（記憶媒体）やハードディスク（記憶装置）との間のデータ授受を制御する。本実施の形態にかかるドライバ用プログラムやアプリケーション（アプリケーションプログラム）等は、例えば、これらの記憶媒体や記憶装置からインストールされる。
【００３３】
Ｉ／Ｆ２５は、コンピュータ１の入力装置から制御指令を受け取ったり、プリンタ２に印刷データ等を出力したりするほか、デジタルカメラや携帯電話機等の各種周辺機器との間のデータ授受を制御するインタフェースである。Ｉ／Ｆ２６は、コンピュータ１の表示装置との間に設けられるインタフェース（ビデオインタフェース）である。
【００３４】
なお、このほか、バス２７には、ネットワーク接続用のインタフェースカード（Ｉ／Ｆカード）２８等を接続することもできる。このＩ／Ｆカード２８を装着すれば、コンピュータ１を外部のネットワークに接続して、画像処理に必要なプログラム等を外部からダウンロードすることもできる。
【００３５】
図４は、ＣＰＵ２１の内部構成を説明するための説明図である。ＣＰＵ２１は、ＣＰＵコア２１ａ、バスコントローラ２１ｂ、第１のメモリとしての内部ＲＡＭ２１ｃ、第２のメモリとしての内部ＲＡＭ２１ｄ等を備えて構成されている。このうち内部ＲＡＭ２１ｃは、第１のバスとしての内部バス２１ｅを介してＣＰＵコア２１ａおよびバスコントローラ２１ｂと相互に接続されており、内部ＲＡＭ２１ｄは、第２のバスとしての内部バス２１ｆを介してＣＰＵコア２１ａおよびバスコントローラ２１ｂと相互に接続されている。
【００３６】
即ち、ＣＰＵ２１に設けられる２つの内部ＲＡＭ２１ｃ，２１ｄには各々独立した内部バス２１ｅ，２１ｆが接続されており、ＣＰＵコア２１ａは、内部ＲＡＭ２１ｃへのアクセスには内部バス２１ｅを使用する一方、内部ＲＡＭ２１ｄへのアクセスには内部バス２１ｆを使用するようになっている。なお、図２で説明したように、このＣＰＵ２１には、バス（以下「外部バス」という）２７を介してＲＡＭ（以下「外部ＲＡＭ」という）２３も接続されており、この外部ＲＡＭ２３をＣＰＵコア２１ａがアクセスする際には、上記内部バス２１ｅが使用されるようになっている。
【００３７】
ＣＰＵコア２１ａには、第１〜第３アドレス生成部２１ｇ〜２１ｉと内部レジスタ２１ｊとが備えられている。
第１アドレス生成部２１ｇは、内部ＲＡＭ２１ｃや外部ＲＡＭ２３からのデータの読み出しに必要なアドレスＡＤＲ１を生成する。ＣＰＵコア２１ａは、内部ＲＡＭ２１ｃや外部ＲＡＭ２３からデータを読み出す際には、この第１アドレス生成部２１ｇによって生成されたアドレスＡＤＲ１を内部バス２１ｅ（具体的にはそのうちのアドレスバス）を通じてバスコントローラ２１ｂに送出する。バスコントローラ２１ｂは、このアドレスＡＤＲ１に対応するデータＤＴＲ１を内部ＲＡＭ２１ｃ、あるいは外部ＲＡＭ２３から読み出し、それを内部バス２１ｅ（具体的にはそのうちのデータバス）を通じてＣＰＵコア２１ａに送出する。ＣＰＵコア２１ａは、こうして読み出したデータＤＴＲ１を内部レジスタ２１ｊに格納する。
【００３８】
第２アドレス生成部２１ｈは、内部ＲＡＭ２１ｄからのデータの読み出しに必要なアドレスＡＤＲ２を生成する。ＣＰＵコア２１ａは、内部ＲＡＭ２１ｄからデータを読み出す際には、この第２アドレス生成部２１ｈによって生成されたアドレスＡＤＲ２を内部バス２１ｆ（具体的にはそのうちのアドレスバス）を通じてバスコントローラ２１ｂに送出する。バスコントローラ２１ｂは、このアドレスＡＤＲ２に対応するデータＤＴＲ２を内部ＲＡＭ２１ｄから読み出し、それを内部バス２１ｆ（具体的にはそのうちのデータバス）を通じてＣＰＵコア２１ａに送出する。ＣＰＵコア２１ａは、こうして読み出したデータＤＴＲ２を内部レジスタ２１ｊに格納する。
【００３９】
第３アドレス生成部２１ｉは、本実施の形態においては、内部ＲＡＭ２１ｃや外部ＲＡＭ２３へのデータの書き込みに必要なアドレスＡＤＷ１を生成する機能と、内部ＲＡＭ２１ｄへのデータの書き込みに必要なアドレスＡＤＷ２を生成する機能とを有している。
【００４０】
ＣＰＵコア２１ａは、内部ＲＡＭ２１ｃや外部ＲＡＭ２３へデータを書き込む際には、該書き込みを行うデータＤＴＷ１を内部レジスタ２１ｊから読み出し、このデータＤＴＷ１と上記第３アドレス生成部２１ｉによって生成されたアドレスＡＤＷ１とを内部バス２１ｅ（それぞれデータバスとアドレスバス）を通じてバスコントローラ２１ｂに送出する。バスコントローラ２１ｂは、こうして受け取ったアドレスＡＤＷ１をもとに、指定されたデータＤＴＷ１を内部ＲＡＭ２１ｃ、あるいは外部ＲＡＭ２３へ書き込む。
【００４１】
また、ＣＰＵコア２１ａは、内部ＲＡＭ２１ｄへデータを書き込む際には、該書き込みを行うデータＤＴＷ２を内部レジスタ２１ｊから読み出し、このデータＤＴＷ２と上記第３アドレス生成部２１ｉによって生成されたアドレスＡＤＷ２とを内部バス２１ｆ（それぞれデータバスとアドレスバス）を通じてバスコントローラ２１ｂに送出する。バスコントローラ２１ｂは、こうして受け取ったアドレスＡＤＷ２をもとに、指定されたデータＤＴＷ２を内部ＲＡＭ２１ｄへ書き込む。
【００４２】
ＣＰＵコア２１ａがアクセス可能なこれらの内部ＲＡＭ２１ｃ，２１ｄや外部ＲＡＭ２３は、誤差拡散処理によって生じた誤差データを読み書きするための誤差バッファとして利用することができる。なお、本実施の形態では、後述するように、これらのＲＡＭ２１ｃ，２１ｄ，２３のうち、内部ＲＡＭ２１ｃ，２１ｄをそれぞれ誤差バッファとして利用している。
【００４３】
図３は、プリンタ２の電気的構成を示す。プリンタ２は、回路基板３０上に、ＣＰＵ３１、ＲＯＭ３２、ＲＡＭ３３、ＡＳＩＣ（Application Specific ＩＣ）３４、通信インタフェース３５、パネル制御回路３６等を備えており、これらはバス３７を介して相互に接続されている。
【００４４】
パネル制御回路３６は、電源スイッチ、印刷開始スイッチなどの複数の操作スイッチ（操作キー）や表示画面等を有する操作パネル３８と電気的に接続されている。ＣＰＵ３１は、パネル制御回路３６を介して操作パネル３８からのキー操作信号を入力すると、その操作されたキーに対応した所定の処理を実行する。そして、ＣＰＵ３１は、ＲＯＭ３２に記憶された制御プログラムに従い、ＲＡＭ３３を作業領域として、印刷処理をはじめとする各種の処理を実行する。
【００４５】
ＡＳＩＣ３４は、回路基板３０上に設けられたヘッド駆動回路３９およびモータ駆動回路４０，４１と電気的に接続されている。ＡＳＩＣ３４は、モータ駆動回路４０，４１を介してそれぞれキャリッジモータ４２，紙送りモータ４３を駆動制御しつつ、ヘッド駆動回路３９を介して印刷ヘッド４４を駆動制御する。印刷ヘッド４４は、各色用のノズルを多数個有しており、キャリッジモータ４２の駆動に基づき主走査方向（紙送り方向と垂直方向）に往復移動しながら、各色のインク滴をそれぞれの色に対応するノズルから吐出することにより印刷媒体上に画像を形成する。ＡＳＩＣ３４は、各種センサ４５から入力した検出信号（パルス信号）から把握されるキャリッジ位置および用紙位置に応じたキャリッジ制御・紙送り制御が行われるように各モータ４２，４３を駆動制御する。勿論、これらの各モータ４２，４３を、ＣＰＵ３１が各モータ駆動回路４０，４１を介して制御する構成を採用することもできる。
【００４６】
通信インタフェース３５は、図示しないシリアル又はパラレルの通信ケーブルを介してコンピュータ１（具体的には図２に示すＩ／Ｆ２５）と通信可能に接続されている。上記したように、ユーザがコンピュータ１の入力装置を操作して所定の印刷ジョブの実行を指示すると、プリンタドライバ４にて生成した印刷データがプリンタ２に送信される。
【００４７】
プリンタ２に送信された印刷データは、通信インタフェース３５およびバス３７を通じてＡＳＩＣ３４に入力される。ＡＳＩＣ３４は、印刷データおよびＣＰＵ３１からの制御信号、さらには各種センサ４５からの入力信号に基づいて印刷処理を実行し、各駆動回路３９〜４１を介して印刷ヘッド４４および各モータ４２，４３を駆動制御する。
【００４８】
次に、本実施の形態において、プリンタドライバ４の２値化処理部１３により実行される誤差拡散処理について図５〜図７にしたがって説明する。
図５は、本実施の形態の誤差拡散処理を説明するための概念図である。
【００４９】
上記したように、２値化処理部１３は、色変換処理後のＣＭＹＫ画像データに誤差拡散処理を施すことによって各画素の画素データ（階調値）をプリンタ２が表現可能な各色２階調のドットデータに変換する。なお、本実施の形態のプリンタ２は、ＣＭＹＫＬＣＬＭＬＹの各色毎に大ドット、中ドット、小ドットの３種類のドットを形成可能なプリンタであり、２値化処理部１３は、各色毎に画素データを大ドット、中ドット、小ドットのドット形成有無により表現されたＣＭＹＫドットデータに変換する。
【００５０】
本実施の形態の誤差拡散処理は、画素を所定数ずつまとめてブロックを形成し、該ブロック内で誤差拡散を画素ごとに実行した後に、ブロック全体の誤差をブロック外の周辺の画素に拡散する。
【００５１】
具体的には、図５に示すように２値化処理部１３は、まずブロック形成部として、ＣＭＹＫ画像データの隣接する２つのラスタに含まれる画素のうち、縦横２列（２×２）に並んだ４つの画素をまとめてブロックＢＬを形成する。なお、図５では、画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１を含むブロックＢＬを現在処理する着目ブロックとして示している。
【００５２】
２値化処理部１３は、着目ブロックＢＬを形成したら、次いでブロック内誤差拡散部として、この着目ブロックＢＬを構成する画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１についての誤差拡散処理をそれら画素ごとに行う。
【００５３】
詳述すると、まず２値化処理部１３は、画素Ｄ００の階調値と、この画素Ｄ００に周辺の判断済みブロックから拡散されてきた誤差とに基づいて、画素Ｄ００についてのドット形成の有無を判断し、この判断によって生じた誤差Ｅ００を着目ブロックＢＬ内の未判断画素、即ち画素Ｄ０１，Ｄ１０，Ｄ１１にそれぞれ所定の比率で拡散する。なお、判断済みブロックとは、ドット形成の有無を判断するべく、以前に複数の画素をまとめてブロックとして形成され、このブロックを対象とした一連の誤差拡散処理が既に終了しているブロックのことである。
【００５４】
続いて２値化処理部１３は、画素Ｄ０１の階調値と、この画素Ｄ０１に周辺の判断済みブロックおよび画素Ｄ００から拡散されてきた誤差とに基づいて、画素Ｄ０１についてのドット形成の有無を判断し、この判断によって生じた誤差Ｅ０１を着目ブロックＢＬ内の未判断画素、即ち画素Ｄ１０，Ｄ１１にそれぞれ所定の比率で拡散する。
【００５５】
続いて２値化処理部１３は、画素Ｄ１０の階調値と、この画素Ｄ１０に周辺の判断済みブロックおよび画素Ｄ００，Ｄ０１から拡散されてきた誤差とに基づいて、画素Ｄ１０についてのドット形成の有無を判断し、この判断によって生じた誤差Ｅ１０を着目ブロックＢＬ内の未判断画素、即ち画素Ｄ１１に所定の比率で拡散する。
【００５６】
続いて２値化処理部１３は、画素Ｄ１１の階調値と、この画素Ｄ１１に周辺の判断済みブロックおよび画素Ｄ００，Ｄ０１，Ｄ１０から拡散されてきた誤差とに基づいて、画素Ｄ１１についてのドット形成の有無を判断し、この判断によって生じた画素Ｄ１１の誤差Ｅ１１を算出する。なお、この誤差Ｅ１１については周辺画素への拡散は行わない（この時点で、着目ブロックＢＬ内に未判断画素はないため）。
【００５７】
２値化処理部１３は、こうして着目ブロックＢＬを構成する画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１についての誤差拡散を行ったら、次いでブロック外誤差拡散部として、該着目ブロックＢＬ全体の誤差Ｅｂを算出し、この誤差Ｅｂを該着目ブロックＢＬ外の周辺の未判断画素（図５では、例えば１４個の画素）にそれぞれ所定の比率で拡散する。ここで、着目ブロックＢＬ全体の誤差Ｅｂは、該着目ブロックＢＬをあたかも１つの大きな画素として扱い、各画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１にそれぞれドットを形成したこと、あるいは形成しなかったことによって生じた誤差Ｅ００，Ｅ０１，Ｅ１０，Ｅ１１を総和することによって算出される。
【００５８】
２値化処理部１３は、この着目ブロックＢＬ全体の誤差Ｅｂを周辺の未判断画素に拡散したら、該着目ブロックＢＬに関する一連の処理を終了し、以降は、処理対象とする着目ブロックＢＬ（２×２の４画素）をラスタ方向（画素の処理方向）に順次変更しながら、上記と同様の処理を繰り返すことによって全ての画素について２値化を行う。
【００５９】
図６は、このような誤差拡散処理を実行する２値化処理部１３の処理ステップを示すフローチャートである。また、図７は、誤差拡散処理の実行に用いられる誤差バッファＢｕｆ１，Ｂｕｆ２を示す概念図である。なお、ここでは、上記説明した図５と同一の符号を用いて説明する。
【００６０】
ステップ１００では、２値化処理部１３は、ＣＭＹＫ画像データに変換された２×２の４つの画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１について、それら各画素の画素データを入力し、処理対象とする着目ブロックＢＬを形成する。
【００６１】
ステップ１１０では、２値化処理部１３は、画素Ｄ００，Ｄ０１に周辺の判断済みブロックから拡散されてきた誤差ＥＡ＊００，ＥＡ＊０１を誤差バッファＢｕｆ１から読み出し、それをＣＰＵ２１の内部レジスタ２１ｊ（図４）に格納する。なお、誤差バッファＢｕｆ１は、内部ＲＡＭ２１ｃ（図４）内の一部の領域が確保されて構成されており、この誤差バッファＢｕｆ１には、ブロックＢＬの形成時に上位列側のラスタに含まれることとなる画素についての誤差データが複数格納されている。こうした誤差バッファＢｕｆ１（内部ＲＡＭ２１ｃ）からの誤差ＥＡ＊００，ＥＡ＊０１の読み出しは、先の図４で説明したように、第１アドレス生成部２１ｇによって生成されたアドレスＡＤＲ１をもとに、それに対応するデータＤＴＲ１を内部バス２１ｅを通じて内部ＲＡＭ２１ｃから読み出すことによってなされる。
【００６２】
ステップ１２０では、２値化処理部１３は、画素Ｄ１０，Ｄ１１に周辺の判断済みブロックから拡散されてきた誤差ＥＡ＊１０，ＥＡ＊１１を誤差バッファＢｕｆ２から読み出し、それをＣＰＵ２１の内部レジスタ２１ｊ（図４）に格納する。なお、誤差バッファＢｕｆ２は、内部ＲＡＭ２１ｄ（図４）内の一部の領域が確保されて構成されており、この誤差バッファＢｕｆ２には、ブロックＢＬの形成時に下位列側のラスタに含まれることとなる画素についての誤差データが複数格納されている。こうした誤差バッファＢｕｆ２（内部ＲＡＭ２１ｄ）からの誤差ＥＡ＊１０，ＥＡ＊１１の読み出しは、先の図４で説明したように、第２アドレス生成部２１ｈによって生成されたアドレスＡＤＲ２をもとに、それに対応するデータＤＴＲ２を内部バス２１ｆを通じて内部ＲＡＭ２１ｄから読み出すことによってなされる。
【００６３】
ステップ１３０では、２値化処理部１３は、上記着目ブロックＢＬを構成する画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１のうち、まず画素Ｄ００に生じる誤差Ｅ００を算出し、この誤差Ｅ００を画素Ｄ０１，Ｄ１０，Ｄ１１に拡散する。
【００６４】
詳しくは、図７に示すように２値化処理部１３は、画素Ｄ００に周辺の判断済みブロックから拡散されてきた誤差ＥＡ＊００と、画素Ｄ００の階調値とに基づいて、まず画素Ｄ００についてのドット形成の有無を判断する。２値化処理部１３は、こうしてドット形成の有無を判断したら、その判断結果に基づいて画素Ｄ００に生ずる誤差Ｅ００を求め、これを画素Ｄ０１，Ｄ１０，Ｄ１１にそれぞれ所定の比率で拡散する。ここで、画素Ｄ００の誤差Ｅ００に基づき画素Ｄ０１，Ｄ１０，Ｄ１１にそれぞれ分配（拡散）させる誤差Ｅ００＊０１，Ｅ００＊１０，Ｅ００＊１１は、具体的にはＣＰＵ２１の内部レジスタ２１ｊ（図４）に一時的に格納される。なお、誤差を分配（拡散）させる比率は、あらかじめＲＯＭ２２等に格納されている図示しない誤差拡散マトリックスと呼ばれる数表にしたがって求められる。
【００６５】
ステップ１４０では、２値化処理部１３は、続いて画素Ｄ０１に生じる誤差Ｅ０１を算出し、この誤差Ｅ０１を画素Ｄ１０，Ｄ１１に拡散する。
詳しくは、図７に示すように２値化処理部１３は、画素Ｄ０１に周辺の判断済みブロックから拡散されてきた誤差ＥＡ＊０１と上記画素Ｄ００から拡散されてきた誤差Ｅ００＊０１とを総和して求めた誤差と、画素Ｄ０１の階調値とに基づいて、まず画素Ｄ０１についてのドット形成の有無を判断する。２値化処理部１３は、こうしてドット形成の有無を判断したら、その判断結果に基づいて画素Ｄ０１に生ずる誤差Ｅ０１を求め、これを画素Ｄ１０，Ｄ１１にそれぞれ所定の比率で拡散する。ここで、画素Ｄ０１の誤差Ｅ０１に基づき画素Ｄ１０，Ｄ１１にそれぞれ拡散（分配）させる誤差Ｅ０１＊１０，Ｅ０１＊１１は、具体的にはＣＰＵ２１の内部レジスタ２１ｊに一時的に格納される。
【００６６】
ステップ１５０では、２値化処理部１３は、続いて画素Ｄ１０に生じる誤差Ｅ１０を算出し、この誤差Ｅ１０を画素Ｄ１１に拡散する。
詳しくは、図７に示すように２値化処理部１３は、画素Ｄ１０に周辺の判断済みブロックから拡散されてきた誤差ＥＡ＊１０と上記画素Ｄ００，Ｄ０１から拡散されてきた誤差Ｅ００＊１０，Ｅ０１＊１０とを総和して求めた誤差と、画素Ｄ１０の階調値とに基づいて、まず画素Ｄ０１についてのドット形成の有無を判断する。２値化処理部１３は、こうしてドット形成の有無を判断したら、その判断結果に基づいて画素Ｄ１０に生ずる誤差Ｅ１０を求め、これを画素Ｄ１１に所定の比率で拡散する。ここで、画素Ｄ１０の誤差Ｅ１０に基づき画素Ｄ１１に拡散（分配）させる誤差Ｅ１０＊１１は、具体的にはＣＰＵ２１の内部レジスタ２１ｊに一時的に格納される。
【００６７】
ステップ１６０では、２値化処理部１３は、続いて画素Ｄ１１に生じる誤差Ｅ１１を算出する。なお、この誤差Ｅ１１のブロックＢＬ内画素への拡散は行わない。
詳しくは、図７に示すように２値化処理部１３は、画素Ｄ１１に周辺の判断済みブロックから拡散されてきた誤差ＥＡ＊１１と上記画素Ｄ００，Ｄ０１，Ｄ１０から拡散されてきた誤差Ｅ００＊１１，Ｅ０１＊１１，Ｅ１０＊１１とを総和して求めた誤差と、画素Ｄ１１の階調値とに基づいて、まず画素Ｄ１１についてのドット形成の有無を判断する。２値化処理部１３は、こうしてドット形成の有無を判断したら、その判断結果に基づいて画素Ｄ１１に生ずる誤差Ｅ１１を求め、この誤差Ｅ１１をＣＰＵ２１の内部レジスタ２１ｊに一時的に格納する。
【００６８】
ステップ１７０では、２値化処理部１３は、次いで着目ブロックＢＬ全体に生じる誤差Ｅｂを算出する。
詳しくは、図７に示すように２値化処理部１３は、着目ブロックＢＬをあたかも１つの大きな画素として扱い、該着目ブロックＢＬ内の画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１にそれぞれ生じた誤差Ｅ００，Ｅ０１，Ｅ１０，Ｅ１１を総和することによって該着目ブロックＢＬ全体に生ずる誤差Ｅｂを算出する。
【００６９】
２値化処理部１３は、次いで、この着目ブロックＢＬ全体の誤差Ｅｂを該着目ブロックＢＬ外の周辺の未判断画素にそれぞれ所定の比率で拡散させる。
具体的には、まずステップ１８０において、これら周辺の未判断画素のうち、ブロックＢＬの形成時に該ブロックＢＬ内で上位列側のラスタに含まれることとなる画素に拡散させる誤差を誤差バッファＢｕｆ１（内部ＲＡＭ２１ｃ）に格納する。なお、本実施の形態においては、先の図５で説明したように、２値化処理部１３は、着目ブロックＢＬ全体の誤差Ｅｂを周辺の１４個の未判断画素に拡散させることとしている。このため、ステップ１８０では、同図５に示すこれら１４個の画素のうち、画素Ｐ１を含むラスタと画素Ｐ３を含むラスタとについてそれら各ラスタに含まれる画素にそれぞれ拡散させる誤差（７画素分）を誤差バッファＢｕｆ１（内部ＲＡＭ２１ｃ）に格納する。こうした誤差バッファＢｕｆ１（内部ＲＡＭ２１ｃ）への誤差の書き込みは、先の図４で説明したように、第３アドレス生成部２１ｉによって生成されたアドレスＡＤＷ１をもとに、それに対応するデータＤＴＷ１を内部バス２１ｅを通じて内部ＲＡＭ２１ｃへ書き込むことによってなされる。
【００７０】
続いて、ステップ１９０において、ブロックＢＬの形成時に該ブロックＢＬ内で下位列側のラスタに含まれることとなる画素、図５においては、画素Ｐ２を含むラスタと画素Ｐ４を含むラスタとについてそれら各ラスタに含まれる画素にそれぞれ拡散させる誤差（７画素分）を誤差バッファＢｕｆ２（内部ＲＡＭ２１ｄ）に格納する。こうした誤差バッファＢｕｆ２（内部ＲＡＭ２１ｄ）への誤差の書き込みは、先の図４で説明したように、第３アドレス生成部２１ｉによって生成されたアドレスＡＤＷ２をもとに、それに対応するデータＤＴＷ２を内部バス２１ｆを通じて内部ＲＡＭ２１ｄへ書き込むことによってなされる。
【００７１】
このように、本実施の形態では、縦横２列（２×２）の４つの画素を一つにまとめてブロックを形成し、画素毎の誤差拡散をブロック内の画素（未判断画素）を拡散範囲としながら行う一方、ブロック全体の誤差を該ブロック外へも拡散させるようにしている。このような誤差拡散処理では、拡散範囲は狭い範囲となるもブロック内での画素毎の誤差拡散と、ブロック外への誤差拡散とを併用して、画素の階調値に応じた適切な密度でのドットの形成を行って良好な画質を好適に維持しつつ、誤差拡散を画素単位（１画素ずつ）のみで行うことによる処理の非効率化を改善して全体として誤差拡散処理を高速に行うことができる。
【００７２】
即ち、従来のように誤差拡散を画素単位のみで行うこととすれば、極めて良好な画質の画像を形成することは可能であるが、この方法ではドット形成の有無を判断する度に誤差を周辺の画素に広範囲にわたって拡散しなければならないので、処理を高速に行うことが困難となる。本実施の形態では、この点に鑑みて、画素毎に誤差拡散を行う場合には誤差の拡散範囲をブロック内とし、１画素あたりの周辺への拡散回数を少なくすることで処理の効率化を図っている。ところが、誤差の拡散範囲を狭い範囲に限り、１画素あたりの周辺への拡散回数を少なくすると、画質の劣化が生じる懸念がある。そこで、本実施の形態では、こうした画質の劣化を極力抑えるべく、画素毎の誤差拡散をブロック内で行った後に、ブロック全体の誤差を該ブロック外の周辺の未判断画素に広範囲に渡って拡散させ、これにより画質の維持と処理の効率化との両立を図るようにしている。
【００７３】
なお、処理を効率化することのみを追求するのであれば、誤差拡散を画素毎に行わずにブロック単位（ブロック全体の誤差を拡散させる）のみで行ったほうがより効率良く処理することができる。しかしながら、この方法は、やはり画質の劣化を招く懸念があり好ましくない。
【００７４】
ちなみに、本実施の形態の誤差拡散の手法を用いて処理を行う場合、１つのブロックに関する処理で周辺の画素に誤差を拡散する回数は、
（ブロック内での誤差拡散回数：６回）＋（ブロック外への誤差拡散回数：１４回）
であり、１ブロックあたり（即ち、２×２の４画素あたり）２０回となる。
【００７５】
これに対し、従来の誤差拡散の手法（画素単位（１画素ずつ）のみでの誤差拡散）を用いて処理を行う場合、本実施の形態の処理によるものと同程度以上の画質の画像を得るのに必要な１画素あたりの誤差の拡散回数はおよそ９回であり、４画素あたりに換算すれば３６回となる。したがって、この例の場合には、従来の手法と比べて誤差の拡散回数は４画素あたり１６回削減されることとなり、その分、誤差拡散処理を高速化することができる。
【００７６】
ところで、「画質の維持と処理の効率化との両立を図る」といった観点に立って考えれば、例えば、着目ブロック内の画素の階調値（例えば平均値）を求め、このブロック内の階調値に基づき、誤差拡散をブロック単位で行うか、或いは画素毎に行うかを判断して、誤差拡散処理のモードを適宜選択可能とする、といった手法も考えられる。
【００７７】
即ち、この手法は、ブロック内の階調値がブロック単位での誤差拡散を行った場合でも画質の劣化を生じることのない階調値であると判断できるときにはブロック単位で処理を行い、そうでないときには画素毎に処理を行うようにする、といった思想である。こうすれば、確かにブロック単位のみで処理することによる画質の劣化を抑えつつ、一方で画素単位で１画素ずつ処理することによる処理の非効率化も改善することができる。
【００７８】
しかしながら、こうした方法では、着目ブロックで実施する上記誤差拡散処理のモードが各色（本例ではＣＭＹＫＬＣＬＭＬＹの７色）の間でいずれか１つでも異なると（同一ブロックであっても当然各色ごとに階調値は異なることから、処理モードが異なる場合がある）、処理効率が低下するという問題が生じる。即ち、この方法では、同一ブロックであっても各色ごとの階調値の条件によっては処理モードが異なる可能性が多分にあるために、同一ブロックで実施する各色ごとの処理（画素単位又はブロック単位）が必ずしも同一とはならない。このため、同様な処理を繰り返し実行する、いわゆるパイプライン処理には適した方法とはならず、条件分岐が多発することによる（即ち、同一ブロックの各色間で実施する処理モードが異なることによる）処理効率の低下を招く懸念がある。
【００７９】
これに対し、本実施の形態では、着目ブロック内での誤差拡散を画素毎に実行した後に、該着目ブロック全体の誤差を周辺の画素に拡散する、といった一連の処理を同一ブロックの各色について、それら各色ごとの階調値の条件に依らずに実行することができる。このため、条件分岐の発生を極力抑えてパイプラインを効率的に利用して処理を進めることができる。よって、誤差拡散処理を全体として高速に行うことが可能となる。
【００８０】
また、本実施の形態は、こうした誤差拡散処理を進めるにあたって誤差を読み書きするための誤差バッファを各々独立したバスを通じて個別にアクセスすることのできる２つのメモリを使用して構成している点にさらに特徴を有している。即ち、本例における４画素単位のブロックＢＬの形成時に該ブロックＢＬ内で上位列側のラスタに含まれることとなる画素（未判断画素）については、その画素に拡散させる誤差を内部バス２１ｅを通じて誤差バッファＢｕｆ１（内部ＲＡＭ２１ｃ）に格納する。また、同ブロックＢＬの形成時に該ブロックＢＬ内で下位列側のラスタに含まれることとなる画素（未判断画素）については、その画素に拡散させる誤差を内部バス２１ｆを通じて誤差バッファＢｕｆ２（内部ＲＡＭ２１ｄ）に格納することとしている。
【００８１】
こうすれば、着目ブロックＢＬ内での誤差拡散を行う際に、該着目ブロックＢＬを構成する画素Ｄ００，Ｄ０１についての誤差拡散に必要な誤差ＥＡ＊００，ＥＡ＊０１を誤差バッファＢｕｆ１から読み出すとほぼ同時に、画素Ｄ１０，Ｄ１１についての誤差拡散に必要な誤差ＥＡ＊１０，ＥＡ＊１１を誤差バッファＢｕｆ２から読み出すことができる。ここで、ほぼ同時に読み出すことができるとは、誤差バッファＢｕｆ１からのデータ読み出しと誤差バッファＢｕｆ２からのデータ読み出しとを並列して処理することができることを意味する。
【００８２】
即ち、誤差を読み書きするための２つの誤差バッファＢｕｆ１，Ｂｕｆ２を１つのメモリ（例えば内部ＲＡＭ２１ｃのみ）を使用して構成した場合、誤差バッファＢｕｆ１からの誤差の読み出しを行っている間は、この読み出しが終了するまで、次の誤差バッファＢｕｆ２からの誤差の読み出しを行うことはできない。また同様に、誤差バッファＢｕｆ２からの誤差の読み出しを行っている間は、この読み出しが終了するまで、内部ＲＡＭ２１ｃを使用した処理（誤差の格納等）を行うことはできない。
【００８３】
これに対し、本実施の形態では、２つの誤差バッファＢｕｆ１，Ｂｕｆ２を２つの内部ＲＡＭ２１ｃ，２１ｄを使用して構成し、それら各内部ＲＡＭ２１ｃ，２１ｄを各々独立した内部バス２１ｅ，２１ｆを使用してアクセスする態様としていることから、こうした処理の待ち時間（即ちウェイト）が生じない。よって、本構成によれば、上述したパイプラインをより効率的に利用して処理を進めることができ、誤差拡散処理を全体として高速に行うことが可能となる。
【００８４】
以上記述したように、本実施の形態によれば、以下の効果を奏する。
（１）２値化処理部１３は、ＣＭＹＫ画像データの隣接する２つのラスタに含まれる４つの画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１をまとめて処理対象の着目ブロックＢＬを形成し、該着目ブロックＢＬを構成する画素毎に、まず着目ブロックＢＬ内で誤差拡散を実施する。そして、着目ブロックＢＬ内で画素毎に誤差拡散を実施したら、次いで、着目ブロックＢＬ全体の誤差Ｅｂを周辺の未判断画素に拡散させる。このような誤差拡散処理とすれば、拡散範囲は狭い範囲となるも着目ブロックＢＬ内での誤差拡散を画素毎に行う処理と、該着目ブロックＢＬ全体の誤差Ｅｂをその周辺へ拡散させる処理とを併用して、画素の階調値に応じた適切な密度でのドットの形成を行って良好な画質を好適に維持しつつ、誤差拡散処理を効率良く行うことが可能となる。
【００８５】
（２）２値化処理部１３は、着目ブロックＢＬ全体の誤差Ｅｂを周辺の未判断画素に拡散させる際には、それら未判断画素に拡散させる誤差を、各々独立した内部バス２１ｅ，２１ｆを通じて個別にアクセス可能な誤差バッファＢｕｆ１（内部ＲＡＭ２１ｃ）と誤差バッファＢｕｆ２（内部ＲＡＭ２１ｄ）とにそれぞれ分けて格納するようにした。こうすれば、先の着目ブロックＢＬ内での誤差拡散処理を行うにあたって、ドット形成の有無を判断するに必要な周辺からの拡散誤差を各々独立した内部バス２１ｅ，２１ｆを通じてそれら各誤差バッファＢｕｆ１，Ｂｕｆ２から個別に読み出すことができるようになるため、メモリアクセスのためのウェイトが生ずることを抑制することができる。具体的には、本例では誤差の読み出し時において、パイプライン（ベクトルパイプライン）命令を使用することによって、メモリアクセスのためのウェイトを好適に抑制することができる。これにより誤差拡散処理を高速に行うことが可能となる。
【００８６】
（３）２値化処理部１３は、着目ブロックＢＬ内でドット形成の有無を最初に判断する画素Ｄ００については、着目ブロックＢＬ外の判断済みブロックから拡散されてきた誤差ＥＡ＊００と、画素Ｄ００の階調値とに基づいてドット形成の有無を判断するようにした。これによれば、周辺（判断済みブロック）から拡散されてきた誤差ＥＡ＊００に基づいて、画素の階調値に応じた適切な密度となるようドット形成の有無を判断することができる。
【００８７】
（４）２値化処理部１３は、着目ブロックＢＬ内の判断済み画素からの誤差が拡散されている画素（本例ではＤ０１，Ｄ１０，Ｄ１１）については、該判断済み画素から拡散されてきた誤差と着目ブロックＢＬ外の判断済みブロックから拡散されてきた誤差とを総和して求めた値と、画素の階調値とに基づいてドット形成の有無を判断するようにした。これによれば、画素の階調値に応じた適切な密度となるようドット形成の有無を判断することができる。
【００８８】
（５）２値化処理部１３は、着目ブロックＢＬ内の各画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１で生じた誤差Ｅ００，Ｅ０１，Ｅ１０，Ｅ１１を総和することで該着目ブロックＢＬ全体の誤差Ｅｂを算出し、この誤差Ｅｂを周辺の未判断画素に拡散させるようにした。このように、着目ブロックＢＬ全体をあたかも１つの大きな画素として扱い、該着目ブロックＢＬ全体で生ずる誤差Ｅｂを周辺の未判断画素に広範囲に渡って拡散することで、良好な画質を好適に維持しつつ、誤差拡散処理を迅速に行うことが可能となる。
【００８９】
（６）２値化処理部１３は、画素の列たるラスタのうち、隣接する２つのラスタに含まれる縦横２列に並んだ４つの画素（本例ではＤ００，Ｄ０１，Ｄ１０，Ｄ１１）をまとめてブロック（着目ブロック）ＢＬを形成するようにした。そして、ブロックＢＬの形成時に該ブロックＢＬ内で上位列側のラスタに含まれることとなる画素については、その画素に拡散させる誤差を誤差バッファＢｕｆ１に格納し、これに対しブロックＢＬ内で下位列側のラスタに含まれることとなる画素については、その画素に拡散させる誤差を誤差バッファＢｕｆ２に格納するようにした。このように、ブロックＢＬの形成に用いる２つのラスタの位置にそれぞれ誤差バッファＢｕｆ１と誤差バッファＢｕｆ２とを対応させて誤差の格納を行うようにすれば、それら誤差の読み出しを効率的に行うことができるので好適である。
【００９０】
（７）２値化処理部１３は、着目ブロックＢＬについての誤差拡散処理を行う際には、画像データを構成する各色（本例ではＣＭＹＫＬＣＬＭＬＹの７色）について、着目ブロックＢＬ内での誤差拡散を画素毎に行う処理と、着目ブロックＢＬ全体の誤差Ｅｂを周辺の未判断画素に拡散させる処理とをそれぞれ行うようにした。こうすれば、パイプラインを効率的に利用して誤差拡散処理を高速化することができる。
【００９１】
なお、上記実施の形態では、以下の態様に変更した変形例を採用してもよい。
（変形例１）上記実施の形態では、第１のメモリを内部ＲＡＭ２１ｃに代えて外部ＲＡＭ２３とし、誤差バッファＢｕｆ１を外部ＲＡＭ２３内の一部の領域を使用して構成するようにしてもよい。
【００９２】
（変形例２）上記実施の形態では、第３アドレス生成部２１ｉは、内部ＲＡＭ２１ｃ（あるいは外部ＲＡＭ２３）の書き込みアドレスＡＤＷ１と、内部ＲＡＭ２１ｄの書き込みアドレスＡＤＷ２とをともに生成可能な構成としたが、これらの各アドレスＡＤＷ１，ＡＤＷ２をそれぞれ別々のアドレス生成部によって生成するようにしてもよい。この構成とすれば、誤差バッファＢｕｆ１，Ｂｕｆ２からの誤差の読み出し時と、それら誤差バッファＢｕｆ１，Ｂｕｆ２への誤差の書き込み時とにそれぞれパイプライン（ベクトルパイプライン）命令を使用することで、メモリアクセスのためのウェイトをより好適に抑制することが可能となる。その結果、誤差拡散処理をより高速に行うことが可能となる。
【００９３】
（変形例３）上記実施の形態では、画像処理装置をコンピュータ１とし、このコンピュータ１の制御部たるＣＰＵ２１と（ＲＯＭ２２に格納される）プリンタドライバ用プログラムとで２値化処理部１３を含むプリンタドライバ４を構築した。これに代えて、プリンタドライバ用プログラムを印刷装置たるプリンタ２のＲＯＭ３２等に格納し、該プリンタ２の制御部たるＣＰＵ３１とプリンタドライバ用プログラムとで上記２値化処理部１３を含むプリンタドライバ４を構築するようにしてもよい。こうすれば、プリンタ２をコンピュータ１と接続しなくとも、該プリンタ２をスタンドアロン機として使用することが可能となる。つまり、ＲＧＢ画像データをＣＭＹＫ画像データに変換して、この画像データに２値化処理（本実施の形態の誤差拡散処理）を施してドット形成の有無による表現形式のデータに変換し、さらにマイクロウィーブ処理を施して印刷データを生成する、といった一連の画像処理をプリンタ２側で行って該プリンタ２単体で印刷処理することが可能となる。なお、この場合には、プリンタ２が画像処理装置となる。要するに、本発明にかかる画像処理装置は、コンピュータ１およびプリンタ２のいずれによっても実現可能である。
【００９４】
（変形例４）上記実施の形態では、２値化処理部１３をプリンタドライバ４の機能として実現したが、この２値化処理部１３による誤差拡散処理の機能を回路化し、ハードウェア上で実現するようにしてもよい。
【００９５】
（変形例５）上記実施の形態において、２値化処理部１３による２値化処理の形態としては、上述した誤差拡散処理のみによるものならず、こうした誤差拡散処理とディザ法（組織的ディザ法）を用いた処理とを併用する形態としてもよい。
【００９６】
（変形例６）上記実施の形態では、ブロックＢＬを構成する複数の画素は４つの画素（Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１）に限らず、例えば、隣接する３つのラスタに含まれる縦横３列に並んだ３×３の９個の画素で構成してもよい。また、必ずしもマトリクス状に隣接する複数の画素をまとめて構成するに限らず、任意の複数の画素としてもよい。
【００９７】
（変形例７）上記実施の形態では、４つの画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１を含むブロックＢＬ内での画素毎に行う誤差拡散の回数を計６回としたが、必ずしもこの回数には限定されない。画質を維持できる程度であれば、これより少ない回数としてもよい。
【００９８】
（変形例８）上記実施の形態では、４つの画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１を含むブロックＢＬ全体の誤差Ｅｂを周辺の未判断画素に拡散させる回数を１４回としたが、必ずしもこの回数には限定されない。画質を維持できる程度であれば、これより少ない回数としてもよいし、また逆に、処理効率の低下が懸念される程度でなければ、これより多い回数としてもよい。
【００９９】
（変形例９）上記実施の形態では、ブロックＢＬ内の各画素Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１に生じる誤差Ｅ００，Ｅ０１，Ｅ１０，Ｅ１１を総和した値を、ブロックＢＬ全体の誤差Ｅｂとしたが、必ずしもこの算出方法に限定されるものではなく、他の算出方法によってブロックＢＬ全体の誤差Ｅｂを求めるようにしてもよい。
【０１００】
（変形例１０）上記実施の形態では、ＣＭＹＫ画像データを構成する各色は、ＣＭＹＫＬＣＬＭＬＹの７色としたが、勿論この７色に限定されるものではない。
次に、上記実施の形態および各変形例から把握できる技術的思想を以下に追記する。
【０１０１】
（技術的思想１）
請求項１乃至５のいずれか一項記載の画像処理装置において、
前記ブロック内誤差拡散部は、前記着目ブロック内の各画素のうちドット形成の有無を最初に判断する画素については、該着目ブロック外の判断済みブロックから拡散されてきた前記誤差と、前記画素の階調値とに基づいてドット形成の有無を判断する、ことを特徴とする。これによれば、画素の階調値に応じた適切な密度となるようドット形成の有無を判断することができる。
【０１０２】
（技術的思想２）
請求項１乃至５、上記技術的思想１のうちいずれか一に記載の画像処理装置において、
前記ブロック内誤差拡散部は、前記着目ブロック内の各画素のうち該着目ブロック内の判断済み画素からの前記誤差が拡散されている画素については、該着目ブロック内の判断済み画素から拡散されてきた前記誤差と、該着目ブロック外の判断済みブロックから拡散されてきた前記誤差と、前記画素の階調値とに基づいてドット形成の有無を判断する、ことを特徴とする。これによれば、画素の階調値に応じた適切な密度となるようドット形成の有無を判断することができる。
【０１０３】
（技術的思想３）
請求項１乃至５、上記技術的思想１、２のうちいずれか一に記載の画像処理装置において、
前記ブロック外誤差拡散部は、前記着目ブロック内の各画素に生じた前記誤差を総和して求めた誤差を該着目ブロック全体に生じた前記誤差とする、ことを特徴とする。こうすれば、着目ブロック全体をあたかも１つの大きな画素として扱い、該着目ブロック全体で生ずる誤差を他の周囲の未判断画素に拡散することで、良好な画質を好適に維持しつつ、誤差拡散処理を迅速に行うことができるようになる。
【０１０４】
（技術的思想４）
請求項１乃至５、上記技術的思想１乃至３のうちいずれか一に記載の画像処理装置において、
前記画素の階調値により表現された画像データは、ＲＧＢ表色系の画像データが色変換処理されて生成されたＣＭＹＫ表色系の画像データであり、
前記２値化処理部は、前記ＣＭＹＫ表色系の画像データを構成する各色について、前記ブロック内誤差拡散部による前記着目ブロック内での誤差拡散処理と前記ブロック外誤差拡散部による前記着目ブロック外への誤差拡散処理とを実施する、ことを特徴とする。このように、着目ブロックにあっては、ＣＭＹＫ表色系の画像データを構成する各色について、ブロック内誤差拡散部による処理とブロック外誤差拡散部による処理とをそれぞれ実施することとすれば、同様な処理を繰り返し実行する、いわゆるパイプラインを効率的に利用して誤差拡散処理を高速化することができる。
【図面の簡単な説明】
【０１０５】
【図１】一実施の形態における印刷システムを説明するための説明図。
【図２】コンピュータの電気的構成を示す概略ブロック図。
【図３】プリンタの電気的構成を示す概略ブロック図。
【図４】ＣＰＵの内部構成を説明するための説明図。
【図５】誤差拡散処理を説明するための概念図。
【図６】２値化処理部による誤差拡散処理の流れを示すフローチャート。
【図７】誤差拡散処理における誤差バッファの使用例を示す概念図。
【符号の説明】
【０１０６】
１…コンピュータ（画像処理装置）、２…プリンタ（印刷装置）、４…プリンタドライバ、５…アプリケーション、１３…２値化処理部（ブロック形成部、ブロック内誤差拡散部、ブロック外誤差拡散部）、２１…ＣＰＵ（制御部）、２１ａ…ＣＰＵコア、２１ｂ…バスコントローラ、２１ｃ…内部ＲＡＭ（第１のメモリ）、２１ｄ…内部ＲＡＭ（第２のメモリ）、２１ｅ…内部バス（第１のバス）、２１ｆ…内部バス（第２のバス）、２１ｇ…第１アドレス生成部、２１ｈ…第２アドレス生成部、２１ｉ…第３アドレス生成部、２１ｊ…内部レジスタ、２２…ＲＯＭ、２３…ＲＡＭ（外部ＲＡＭ）、２７…バス（外部バス）、Ｂｕｆ１…第１のメモリ内に構成される誤差バッファ、Ｂｕｆ２…第２のメモリ内に構成される誤差バッファ、３１…ＣＰＵ、３２…ＲＯＭ、３３…ＲＡＭ、３４…ＡＳＩＣ、Ｄ００，Ｄ０１，Ｄ１０，Ｄ１１…画素、ＢＬ…ブロック（着目ブロック）、Ｐ１〜Ｐ４…ブロック全体の誤差を拡散させる画素（一部のみ）、Ｅ００，Ｅ０１，Ｅ１０，Ｅ１１…画素に生じる誤差、Ｅｂ…ブロック全体の誤差、Ｅ００＊０１，Ｅ００＊１０，Ｅ００＊１１，Ｅ０１＊１０，Ｅ０１＊１１，Ｅ１０＊１１…判断済み画素から拡散される誤差、ＥＡ＊００，ＥＡ＊０１，ＥＡ＊１０，ＥＡ＊１１…判断済みブロックから拡散される誤差、ＡＤＲ１，ＡＤＲ２，ＡＤＷ１，ＡＤＷ２…アドレス、ＤＴＲ１，ＤＴＲ２，ＤＴＷ１，ＤＴＷ２…データ。
【図１】
2005269577.tif 000003
【図２】
2005269577.tif 000004
【図３】
2005269577.tif 000005
【図４】
2005269577.tif 000006
【図５】
2005269577.tif 000007
【図６】
2005269577.tif 000008
【図７】
2005269577.tif 000009