(57)【要約】【課題】画質の悪化を招くことなく、画像データを、ドット形成の有無によって表現された印刷データに迅速に変換する。【解決手段】ドット形成有無の判断により該判断画素で発生する階調誤差を、一旦、中間バッファに保持する。所定数の複数画素の判断を行った後、周辺の未判断画素に拡散される拡散誤差を、中間バッファに保持した階調誤差から算出して誤差バッファに拡散させる。こうすれば、階調誤差が発生する度に誤差バッファに拡散する場合に比べて、所定画素数分の階調誤差がまとめて拡散される分だけ、階調誤差を迅速に拡散することが可能となる。平均誤差最小法と数学的に同等な処理を、かかる方法を利用して実現することもできる。【選択図】図１
2007202170.tif 000002
【特許請求の範囲】
【請求項１】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理装置であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持する階調誤差保持手段と、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、該算出した拡散誤差を該未判断画素に対応付けて記憶する拡散誤差記憶手段と、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断するドット形成判断手段と
を備える画像処理装置。
【請求項２】
前記階調誤差保持手段は、前記拡散誤差記憶手段に対して読み書きするよりも、前記階調誤差を迅速に読み書き可能な手段である請求項１記載の画像処理装置。
【請求項３】
請求項１記載の画像処理装置であって、
前記拡散誤差記憶手段は、
前記一時的に保持された階調誤差が前記未判断画素の各々に分配される分配誤差を、該階調誤差毎に算出して該各未判断画素に蓄積する分配誤差蓄積手段と、
前記所定数の複数画素についての前記分配誤差を全て蓄積する度に、前記蓄積されている全ての該分配誤差を、前記拡散誤差として前記未判断画素に対応付けて蓄積する拡散誤差蓄積手段と
を備える画像処理装置。
【請求項４】
請求項１記載の画像処理装置であって、
前記階調誤差保持手段は、前記所定数の複数画素についての前記階調誤差を保持する手段であり、
前記拡散誤差記憶手段は、前記未判断画素の各々に拡散される前記拡散誤差を、前記保持されている所定数の階調誤差に基づいて算出し、該算出した全ての拡散誤差を該各未判断画素に対応付けて蓄積する手段である画像処理装置。
【請求項５】
請求項１記載の画像処理装置であって、
前記拡散誤差記憶手段は、
前記一時的に保持された階調誤差が前記未判断画素の各々に分配される分配誤差を、該階調誤差毎に算出して該各未判断画素に蓄積する分配誤差蓄積手段と、
前記所定数の複数画素分の分配誤差が蓄積された前記各未判断画素の分配誤差を、前記拡散誤差として該未判断画素に対応付けて記憶する分配誤差記憶手段と
を備える画像処理装置。
【請求項６】
請求項１記載の画像処理装置であって、
前記階調誤差保持手段は、前記所定数の複数画素についての前記階調誤差を保持する手段であり、
前記拡散誤差記憶手段は、前記複数の未判断画素中にあって前記保持されている全ての階調誤差が拡散される特定画素への拡散誤差を、該保持されている複数の階調誤差から算出して、該特定画素に対応付けて記憶する手段である画像処理装置。
【請求項７】
請求項１記載の画像処理装置であって、
前記拡散誤差記憶手段は、
前記所定数の複数画素周辺の第１の所定領域内にある第１の未判断画素の各々については、該所定数の複数画素についての前記階調誤差に基づき前記拡散誤差を算出して、該第１の未判断画素に対応付けて記憶する第１の拡散誤差記憶手段と、
前記所定数の複数画素周辺にあって前記第１の所定領域内にはない第２の未判断画素については、前記階調誤差が算出される度に、該階調誤差に基づいて、該第２の未判断画素の各々への前記拡散誤差を算出して、該第２の未判断画素に対応付けて記憶する第２の拡散誤差記憶手段と、
を備える画像処理装置。
【請求項８】
請求項７記載の画像処理装置であって、
前記第２の拡散誤差記憶手段は、前記第１の所定領域を包含する第２の所定領域内の前記第２の未判断画素について、前記拡散誤差を算出して記憶する手段である画像処理装置。
【請求項９】
請求項８記載の画像処理装置であって、
前記ドット形成有無の判断に関わる条件に応じて、前記階調誤差を前記未判断画素に拡散させる範囲を、前記所定数の複数画素周辺の前記第１の所定領域と、前記第２の所定領域とに切り換える拡散範囲切換手段を備える画像処理装置。
【請求項１０】
請求項９記載の画像処理装置であって、
前記拡散範囲切換手段は、前記ドット形成有無の判断にかかわる条件として、前記所定数の複数画素の階調値と、該各画素についてのドット形成有無の判断結果とに基づいて、前記階調誤差を拡散させる範囲を切り換える手段である画像処理装置。
【請求項１１】
請求項１記載の画像処理装置であって、
前記拡散誤差記憶手段は、前記所定数の複数画素の階調誤差として、互いに隣接する画素の階調誤差に基づき前記拡散誤差を算出して、前記未判断画素に対応付けて記憶する手段である画像処理装置。
【請求項１２】
請求項１１記載の画像処理装置であって、
前記ドット形成判断手段は、前記未判断画素に対応付けて記憶された前記拡散誤差と、該未判断画素に隣接する画素からの前記拡散誤差とを考慮して、該未判断画素についてのドット形成有無を判断する手段である画像処理装置。
【請求項１３】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理装置であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出し、該判断画素に対応付けて記憶する階調誤差記憶手段と、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持する階調誤差保持手段と、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断するドット形成判断手段と、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出して、該検出した既判断画素の中で前記階調誤差が一時的に保持されていない既判断画素の階調誤差を前記階調誤差記憶手段から読み出し、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新して、該次着目画素の判断に供する階調誤差更新手段と
を備える画像処理装置。
【請求項１４】
請求項１３記載の画像処理装置であって、
前記着目画素で生じた階調誤差を一時保持する一時保持手段を備え、
前記階調誤差更新手段は、前記一時保持されている階調誤差で、前記次着目画素についての判断に使用しない前記階調誤差を更新する手段である画像処理装置。
【請求項１５】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理方法であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておき、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、
前記算出した拡散誤差を前記未判断画素に対応付けて記憶し、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断する画像処理方法。
【請求項１６】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理方法であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶し、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておき、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断し、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出し、
前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供する画像処理方法。
【請求項１７】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の印刷データに変換し、印刷媒体上にインクドットを形成して画像を印刷する印刷部に対して、該印刷データを出力することで、該印刷部を制御する印刷制御装置であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持する階調誤差保持手段と、
所定数の画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、該算出した拡散誤差を該未判断画素に対応付けて記憶する拡散誤差記憶手段と、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断するドット形成判断手段と、
前記ドット形成有無の判断結果に基づいて前記画像データを前記印刷データに変換し、前記印刷部に出力する印刷データ出力手段と
を備える印刷制御装置。
【請求項１８】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の印刷データに変換し、印刷媒体上にインクドットを形成して画像を印刷する印刷部に対して、該印刷データを出力することで、該印刷部を制御する印刷制御装置であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出し、該判断画素に対応付けて記憶する階調誤差記憶手段と、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持する階調誤差保持手段と、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断するドット形成判断手段と、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出して、該検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を前記階調誤差記憶手段から読み出し、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新して、該次着目画素の判断に供する階調誤差更新手段と
前記ドット形成有無の判断結果に基づいて前記画像データを前記印刷データに変換し、前記印刷部に出力する印刷データ出力手段と
を備える印刷制御装置。
【請求項１９】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を実現するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておく機能と、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出する機能と、
前記算出した拡散誤差を前記未判断画素に対応付けて記憶する機能と、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断する機能と
を実現するプログラムを記録した記録媒体。
【請求項２０】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を実現するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶する機能と、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておく機能と、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データに示された前記着目画素の階調値に基づいて、ドット形成有無を判断する機能と、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出する機能と、
前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供する機能と
を実現するプログラムを記録した記録媒体。
【請求項２１】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を、コンピュータを用いて実現するためのプログラムであって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておく機能と、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出する機能と、
前記算出した拡散誤差を前記未判断画素に対応付けて記憶する機能と、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断する機能と
を実現するためのプログラム。
【請求項２２】
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を、コンピュータを用いて実現するためのプログラムであって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶する機能と、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておく機能と、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データに示された前記着目画素の階調値に基づいて、ドット形成有無を判断する機能と、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出する機能と、
前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供する機能と
を実現するためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、画像を構成する複数の画素の階調値で表現された画像データを変換する技術に関し、詳しくは、該画像データを各画素についてのドットの形成有無による表現形式の画像データに変換する技術に関する。
【背景技術】
【０００２】
印刷媒体や液晶画面といった表示媒体上に、ドットを形成することによって画像を表現する画像表示装置は、各種画像機器の出力装置として広く使用されている。かかる画像表示装置は、局所的にはドットを形成するか否かのいずれかの状態しか表現し得ないが、画像の階調値に応じてドットの形成密度を適切に制御することによって、階調が連続的に変化する画像を表現することが可能となっている。
【０００３】
これら画像表示装置において、画像の階調値に応じて適切な密度でドットが形成されるように、各画素についてドット形成の有無を判断するための代表的な手法としては、誤差拡散法と呼ばれる手法あるいは、これと数学的に等価な平均誤差最小法と呼ばれる手法などがある。
【０００４】
誤差拡散法は、着目画素にドットを形成したこと、あるいはドットを形成しなかったことによって生じる階調表現の誤差を、着目画素周辺の未判断画素に拡散して記憶しておき、未判断画素についてのドット形成有無を判断するにあたっては、周辺画素から拡散されてきた誤差を解消するようにドット形成有無を判断する手法である。また、平均誤差最小法は、ドット形成有無の判断により生じた階調表現の誤差を周辺画素に拡散することなく着目画素に記憶しておき、その代わりに、未判断画素についてのドット形成有無を判断するに際しては、周辺画素に記憶されている誤差を読み出してこれらの誤差を打ち消すように、着目画素についてのドット形成有無を判断する手法である。これらいずれの手法においても、周辺画素で発生した階調表現の誤差を解消するようにドットの形成有無を判断しているので、画像の階調値に応じた適切な密度でドットを形成することができる。そのため、これらの手法を適用してドットの形成有無を判断すれば、高画質な画像を画像表示装置で表示することが可能となる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、誤差拡散法には、着目画素で発生した階調表現の誤差を周辺の未判断画素に拡散しながらドットの形成有無を判断しているために、これら画素に誤差を拡散して記憶させる分だけ、ドット形成有無の判断に時間がかかってしまうという問題があった。また、平均誤差最小法についても同様に、周辺画素から階調表現の誤差を読み出しながらドットの形成有無を判断しているために、周辺画素から誤差を読み出す分だけ、ドット形成有無の判断に時間がかかるという問題があった。いずれの場合にも、ドット形成有無の判断に時間がかかれば、画像を迅速に表示することは困難となる。
【０００６】
この発明は、従来技術における上述の課題を解決するためになされたものであり、誤差拡散法あるいは平均誤差最小法を適用した場合と同等の画質を維持しつつ、ドット形成有無の判断に要する時間を短縮化することによって、高画質の画像を迅速に表示可能な技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述の課題の少なくとも一部を解決するため、本発明の第１の画像処理装置は、次の構成を採用した。すなわち、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理装置であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持する階調誤差保持手段と、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、該算出した拡散誤差を該未判断画素に対応付けて記憶する拡散誤差記憶手段と、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断するドット形成判断手段と
を備えることを要旨とする。
【０００８】
また、上記の第１の画像処理装置に対応する本発明の第１の画像処理方法は、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理方法であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておき、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出し、
前記算出した拡散誤差を前記未判断画素に対応付けて記憶し、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドッ
ット形成有無を判断することを要旨とする。
【０００９】
かかる第１の画像処理装置あるいは画像処理方法においては、ドットの形成有無を判断することにより生じた前記階調誤差を一時的に保持しておき、所定数の複数画素についての階調誤差に基づいて、前記未判断画素への拡散誤差を算出してから記憶させる。こうすれば、所定数の複数画素の階調誤差を周辺の未判断画素にまとめて拡散して記憶させることができるので、各画素で生じた階調誤差を個別に拡散して記憶させる場合に比べて、迅速に記憶させることができる。その結果、ドット形成の有無の判断に要する時間が短縮化され、高画質の画像を迅速に表示させることが可能となる。
【００１０】
かかる第１の画像処理装置においては、前記階調誤差記憶手段は、前記拡散誤差記憶手段に対して読み書きするよりも、前記階調誤差を迅速に読み書き可能な記憶手段としてもよい。
【００１１】
前記所定画素数の階調誤差は、前記階調誤差記憶手段に一旦保持されてから前記拡散誤差記憶手段に記憶されるので、該階調誤差記憶手段は、該拡散誤差記憶手段と同様に頻繁に読み書きされる。従って、該階調誤差記憶手段を、該拡散誤差記憶手段に対して読み書きするよりも迅速に読み書き可能とすれば、該階調誤差が発生してから、最終的に拡散誤差として記憶されるまでの時間が短縮化され、延いては、ドット形成の有無の判断に要する時間を短縮化することができるので好適である。
【００１２】
かかる第１の画像処理装置あるいは変換方法においては、前記拡散誤差を各未判断画素に対応付けて記憶するに際して、次のようにしても良い。すなわち、前記階調誤差が算出される度に、未判断画素の各々に分配される分配誤差を算出して、該算出した分配誤差を各未判断画素毎に蓄積していき、前記所定数の複数画素についての前記分配誤差を全て蓄積したら、各未判断画素毎に蓄積された全ての該分配誤差を、前記拡散誤差として前記未判断画素に対応付けて蓄積することとしてもよい。
【００１３】
こうして階調誤差を求める度に、各未判断画素に分配誤差を蓄積しておけば、前記所定数の前記階調誤差を算出してから、前記拡散誤差を各未判断画素に対応付けて記憶させるまでの処理を迅速に行うことができる。所定数の複数画素分の階調誤差を１回拡散して記憶させただけでは、拡散すべき全ての階調誤差を記憶させることができない未判断画素についても、所定画素数分の拡散誤差を蓄積していくことにより、全ての階調誤差を拡散して記憶させることができる。従って、かかる方法を用いれば、拡散誤差を未判断画素に拡散して記憶させる処理を迅速に行うことができるので、ドット形成有無の判断に要する時間を短縮化することが可能となる。
【００１４】
かかる第１の画像処理装置あるいは変換方法においては、拡散誤差を各未判断画素に対応付けて記憶するに際して、上述の方法に換えて次のようにしても良い。すなわち、所定数の複数画素についての階調誤差を保持しておき、保持されている所定数の階調誤差に基づいて各未判断画素に拡散される拡散誤差を算出して、該算出した全ての拡散誤差を各未判断画素に対応付けて蓄積することとしても良い。
【００１５】
こうして所定数の複数の階調誤差を保持しておけば、各未判断画素へ拡散すべき拡散誤差を算出する処理が簡便となり、延いては、該所定画素数の階調誤差を周辺の未判断画素へまとめて拡散する処理が簡便となるので好適である。また、該未判断画素数に比べれば該所定画素数の方が少ないので、かかる方法を用いれば、階調誤差を算出する度に各未判断画素に分配誤差を蓄積する方法に比べて、記憶容量を節約することができて好ましい。
【００１６】
前述した第１の画像処理装置あるいは変換方法においては、拡散誤差を各未判断画素に対応付けて記憶するに際して、次のようにしても良い。すなわち、前記階調誤差が算出される度に、未判断画素の各々に分配される分配誤差を算出して、該算出した分配誤差を各未判断画素毎に蓄積していき、前記所定数の複数画素分の分配誤差が蓄積された各未判断画素の分配誤差を、前記拡散誤差として前記未判断画素に対応付けて記憶することとしてもよい。
【００１７】
このように、階調誤差を求める度に各未判断画素に分配誤差を蓄積し、所定画素数分の分配誤差が蓄積された未判断画素の分配誤差を、前記拡散誤差として記憶することとすれば、該所定画素数の拡散誤差を、各未判断画素に対応付けて記憶させる処理を迅速に行うことが可能となるので好ましい。
【００１８】
かかる第１の画像処理装置あるいは変換方法においては、拡散誤差を未判断画素に対応付けて記憶するに際して、上述の方法に換えて次のようにしても良い。すなわち、所定数の複数画素についての階調誤差を保持しておき、複数の該未判断画素中にあって該所定数の階調誤差が全て拡散される特定画素への拡散誤差を、該保持している階調誤差から算出して、該特定画素に対応付けて記憶することとしてもよい。
【００１９】
こうして所定画素数の階調誤差を保持しておき、前記特定画素への拡散誤差を算出して前記拡散誤差として記憶すれば、該拡散誤差を未判断画素へ拡散して記憶させる処理が簡便となる。その結果、該所定画素数の階調誤差を拡散して記憶する処理が迅速となり、延いては画像を表示するために要する時間を、短縮化することが可能となるので好ましい。
【００２０】
前述した第１の画像処理装置あるいは変換方法においては、拡散誤差を未判断画素に対応付けて記憶するに際して、次のようにしても良い。すなわち、前記所定数の複数画素周辺の第１の所定領域内にある第１の未判断画素の各々については、該所定数の複数画素についての前記階調誤差に基づき該第１の未判断画素への前記拡散誤差を算出して、該第１の未判断画素に対応付けて記憶する。また、前記所定数の複数画素の周辺にあって前記第１の所定領域内には含まれない第２の未判断画素については、前記階調誤差を算出する度に、該階調誤差から該第２の各未判断画素の各々へ拡散される前記拡散誤差を算出して、該第２の未判断画素に対応付けて記憶する。
【００２１】
こうすれば、前記第１の未判断画素については、所定数の複数画素から分配される分配誤差を各未判断画素にまとめて拡散することができるので、全体としてドット形成の有無を判断するために要する時間が短縮化されて好ましい。
【００２２】
かかる画像処理装置においては、階調誤差を算出する度に拡散誤差が算出されて拡散される前記第２の未判断画素として、前記第１の所定領域を包含した第２の所定領域内にある未判断画素に、前記拡散誤差を算出して記憶することとしても良い。
【００２３】
所定数の複数画素で生じた階調誤差を広い範囲に拡散させようとすれば、階調誤差の拡散範囲には、それだけ多くの未拡散画素が含まれることになるので、所定画素数の階調誤差をまとめて拡散して記憶させるための処理は複雑化する傾向にある。これに対して、階調誤差を拡散させる範囲を、前記所定数の複数画素の周辺の第１の所定領域と該第１の所定領域を包含する第２の所定領域とに分割し、該第１の所定領域にある第１の未判断画素については、所定数の複数画素についての階調誤差に基づいて各画素への拡散誤差を算出して記憶し、該第１の所定領域以外にある第２の未判断画素については階調誤差が算出される度に、該階調誤差からの拡散誤差を算出して、該第２の未判断画素の各々に対応付けて記憶させる。こうすれば、所定画素数の階調誤差をまとめて拡散すべき未判断画素数が減少するので処理を簡素化することが可能となって好適である。尚、第１の所定領域内にある第１の未判断画素に対して、所定数の複数画素についての階調誤差をまとめて拡散して記憶させるに際しては、上述した各種の方法を好適に適用することができるのはもちろんである。
【００２４】
かかる第１の画像処理装置あるいは変換方法においては、前記ドット形成有無の判断に関わる条件に応じて、前記階調誤差を周辺の画素に拡散させる範囲を、前記所定数の複数画素周辺の前記第１の所定領域と、該第１の所定領域を包含する第２の所定領域とに切り換えるようにしてもよい。
【００２５】
画質上の要請などから、ドット形成有無の判断に関わる条件に応じて、誤差を拡散させる範囲の広狭を切り換える技術が使用されることがある。このような場合に、階調誤差を拡散させる範囲を、所定数の複数画素周辺の第１の所定領域と、該第１の所定領域を包含する第２の所定領域とに切り換えるとともに、該第１の所定領域には含まれない遠方の未判断画素については階調誤差を直接拡散させることとすれば、所定画素数の階調誤差をまとめて拡散して記憶させる処理が簡素化するので好適である。
【００２６】
更には、前記所定数の複数画素の階調値と、該各画素についてのドット形成有無の判断結果とに基づいて、前記誤差を拡散させる範囲を、前記第１の所定領域と該第１の所定領域を包含する第２の所定領域とに切り換えることとしても良い。
【００２７】
例えば、表現しようとする画像データの階調値が小さな領域で、たまたまドットが形成された場合には、ドットが形成されたことによる誤差を広い範囲に拡散させれば、ドットの分散性を改善して画質を向上させることができる。あるいは、画像データの階調値が大きな領域で、たまたまドットが形成されなかった場合に、ドットが形成されなかったことによる誤差を広い範囲に拡散させれば、同様にして画質を向上させることができる。このような場合、前記第１の所定領域の未判断画素には前記所定数の複数画素からの拡散誤差をまとめて拡散するとともに、たまたまドットが形成された場合あるいは形成されなかった場合には、該第１の所定領域に含まれない遠方の未判断画素にも、階調誤差を算出する度に誤差を拡散する。こうすれば、遠方の未判断画素に誤差を拡散することは稀なので、実質的には処理速度をほとんど低下させることなく、ドット形成有無を判断する処理を簡素化することができるので好適である。
【００２８】
前述した第１の画像処理装置あるいは変換方法においては、前記所定数の複数画素を互いに隣接する画素として、該所定数の複数画素についての各階調誤差に基づき前記拡散誤差を算出して、前記未判断画素に対応付けて記憶することとしても良い。
【００２９】
階調誤差の発生した複数画素が互いに隣接している場合、互いに隣接していない場合に比べて、各画素で発生した階調誤差を拡散させる範囲の互いに重複する部分が広くなる。従って、各未判断画素への拡散誤差を、所定画素数分の階調誤差から算出して各画素に拡散した場合に、該所定数の複数画素が互いに隣接していれば、複数の階調誤差からの拡散誤差がまとめて拡散される未判断画素が多くなるので、それだけ、階調誤差を迅速に拡散して記憶させることが可能となって好適である。尚、かかる場合においても、所定画素数分の階調誤差から算出した拡散誤差を未判断画素に拡散して記憶させるに際しては、上述した各種の方法を好適に適用可能なことは言うまでもない。
【００３０】
所定数の隣接した複数画素の階調誤差に基づいて拡散誤差を算出する上記の第１の画像処理装置あるいは変換方法においては、未判断画素のドット形成有無を判断するに際して、既に該未判断画素に対応付けて記憶されている拡散誤差に加えて、該未判断画素に隣接する画素からの前記拡散誤差を考慮して、ドット形成有無を判断することとしてもよい。
【００３１】
こうすれば、隣接する画素のドット形成有無が判断された未判断画素についてのドットの形成有無を判断する場合、隣接する画素から拡散されてくる拡散誤差については、該未判断画素に拡散させて記憶させる処理を行うことなくドットの形成有無を判断することができるので、判断を迅速に行うことが可能となって好適である。
【００３２】
また、前述した課題の少なくとも一部を解決するため、本発明の第２の画像処理装置は、次の構成を採用した。すなわち、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理装置であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出し、該判断画素に対応付けて記憶する階調誤差記憶手段と、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持する階調誤差保持手段と、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断するドット形成判断手段と、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出して、該検出した既判断画素の中で前記階調誤差が一時的に保持されていない既判断画素の階調誤差を前記階調誤差記憶手段から読み出し、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新して、該次着目画素の判断に供する階調誤差更新手段と
を備えることを要旨とする。
【００３３】
上記の第２の画像処理装置に対応する本発明の第２の画像処理方法は、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する画像処理方法であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶し、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておき、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データにおける前記着目画素の階調値に基づいて、ドット形成有無を判断し、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出し、
前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供することを要旨とする。
【００３４】
かかる第２の画像処理装置および画像処理方法においては、着目画素のドット形成判断に際しては、前記既判断画素に対応付けて記憶されている階調誤差を保持しておき、該保持されている階調誤差を考慮してドットの形成有無を判断する。次着目画素についてのドット形成有無を判断する際には、先ず初めに、該次着目画素についての既判断画素を検出し、次いで、該着目画素についての既判断画素との異同を調べる。そして、該着目画素のドット形成判断に使用しなかった既判断画素に記憶されている階調誤差を読み出し、読み出した階調誤差で、次着目画素の判断に使用しない階調誤差を更新した後、該次着目画素の判断に供する。
【００３５】
こうすれば、次着目画素のドット形成判断に際しては、該次着目画素についての判断には使用するが、着目画素についてのドット形成判断には使用しない階調誤差のみを読み出せばよい。その結果、ドット形成判断のために読み出さなければならない階調誤差数を減少させることができ、ドットの形成有無を判断するために要する時間を短縮化することが可能となる。
【００３６】
かかる第２の画像処理装置あるいは変換方法においては、前記着目画素で発生した階調誤差を一時保持しておき、該保持した階調誤差で、前記次着目画素についての判断に使用しない前記階調誤差を更新するようにしてもよい。
【００３７】
こうすれば、着目画素に対応付けて記憶されている階調誤差を読み出すことなく、次着目画素のドット形成判断を行うことができるので、迅速にドットの形成有無を判断することが可能となる。
【００３８】
また、印刷媒体上にインクドットを形成して画像を印刷する印刷部に対して、インクドットの形成を制御するための印刷データを出力することで、該印刷部を制御する印刷制御装置においては、本発明の上述した第１の画像処理装置あるいは第２の画像処理装置を好適に利用することができる。すなわち、上述した第１の画像処理装置あるいは第２の画像処理装置においては、各画素の階調値を示す画像データを受け取り、該画像データをドットの形成有無による画像データに迅速に変換することができる。このため、かかる第１の画像処理装置あるいは第２の画像処理装置を、前記印刷制御装置に適用すれば、画像データを印刷データに迅速に変換することができる。こうして得られた印刷データを、前記印刷部に出力すれば、該印刷部では高画質な画像を迅速に印刷することが可能となるので好適である。
【００３９】
また、本発明は、上述した第１の画像処理方法、あるいは第２の画像処理方法を実現するプログラムをコンピュータに読み込ませ、コンピュータを用いて実現することも可能である。従って、本発明は次のような記録媒体としての態様も含んでいる。すなわち、上述の第１の画像処理方法に対応する記録媒体は、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を実現するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して一時的に保持しておく機能と、
所定数の複数画素についての前記一時的に保持された階調誤差に基づいて、該所定数の複数画素の周辺にあってドット形成有無の判断がなされていない未判断画素に拡散される拡散誤差を算出する機能と、
前記算出した拡散誤差を前記未判断画素に対応付けて記憶する機能と、
前記未判断画素に対応付けて記憶された前記拡散誤差を考慮しつつ、前記画像データにおける該未判断画素の階調値に基づいて、該未判断画素についてのドット形成有無を判断する機能と
を実現するプログラムを記録していることを要旨とする。
【００４０】
また、上述の第２の画像処理方法に対応する記録媒体は、
各画素の階調値を示す画像データを受け取り、該画素毎に該階調値に基づきドット形成の有無を判断することによって、該画像データをドット形成の有無による表現形式の画像データに変換する方法を実現するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
前記ドット形成の有無を判断する度に該判断した画素で発生する階調誤差を、該ドット形成有無の判断結果に基づき算出して、該判断画素に対応付けて記憶する機能と、
前記ドット形成の有無を判断しようとする着目画素の周辺にあって該ドット形成有無を判断済みの既判断画素毎に対応付けて記憶されている前記階調誤差を、該既判断画素毎に保持しておく機能と、
前記既判断画素毎に保持されている階調誤差を考慮しつつ、前記画像データに示された前記着目画素の階調値に基づいて、ドット形成有無を判断する機能と、
前記着目画素の次にドット形成有無を判断する次着目画素についての前記既判断画素を検出する機能と、
前記検出した既判断画素の中で前記階調誤差が保持されていない既判断画素の階調誤差を読み出して、該読み出した階調誤差で該次着目画素についての判断に使用しない該階調誤差を更新した後、該次着目画素の判断に供する機能と
を実現するプログラムを記録していることを要旨とする。
【００４１】
これら記録媒体に記録されているプログラムをコンピュータに読み込ませ、該コンピュータを用いて上述の各種機能を実現すれば、画素毎の階調値を示す画像データを、ドット形成の有無による表現形式の画像データに迅速に変換することが可能となる。
【発明を実施するための最良の形態】
【００４２】
本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って以下に説明する。
Ａ．実施の形態：
Ｂ．第１実施例：
Ｂ−１．装置構成：
Ｂ−２．画像データ変換処理の概要：
Ｂ−３．第１実施例の階調数変換処理：
Ｂ−４．変形例：
Ｃ．第２実施例：
Ｃ−１．第２実施例において階調数変換処理の時間を短縮化する原理：
Ｃ−２．第２実施例の階調数変換処理：
Ｃ−３．変形例：
Ｄ．第３実施例：
Ｅ．第４実施例：
Ｅ−１．第４実施例において階調数変換処理の時間を短縮化する原理：
Ｅ−２．第４実施例の階調数変換処理：
【００４３】
Ａ．実施の形態：
図１を参照しながら、本発明の実施の形態について説明する。図１は、印刷システムを例にとって、本発明の実施の形態を説明するための説明図である。本印刷システムは、画像処理装置としてのコンピュータ１０と、カラープリンタ２０等から構成されている。コンピュータ１０は、デジタルカメラやカラースキャナなどの画像機器からカラー画像の階調画像データを受け取ると、該画像データを、カラープリンタ２０で印刷可能な各色ドットの形成有無により表現された印刷データに変換する。かかる画像データの変換は、プリンタドライバ１２と呼ばれる専用のプログラムを用いて行われる。尚、カラー画像の階調画像データは、各種アプリケーションプログラムを用いてコンピュータ１０で作成することもできる。
【００４４】
プリンタドライバ１２は、解像度変換モジュール，色変換モジュール，階調数変換モジュール，インターレースモジュールといった複数のモジュールから構成されている。階調画像データをドットの形成有無による表現形式に変換する処理は、階調数変換モジュールで行われる。他の各モジュールで行われる処理については後述する。カラープリンタ２０は、これら各モジュールで変換された印刷データに基づいて、印刷媒体上に各色インクドットを形成することによってカラー画像を印刷する。
【００４５】
本発明の印刷システムにおける階調数変換モジュールは、図示するように、階調誤差算出部と誤差バッファとの間に中間バッファが設けられた構成となっている。この中間バッファを活用することで、ドット形成有無の判断を迅速に行うことが可能となっている。
【００４６】
すなわち、一般に、階調データをドット形成の有無によって表現しようとすると、おのずから、各画素には階調表現の誤差が発生する。前述した誤差拡散法あるいは平均誤差最小法と呼ばれる手法では、発生した階調誤差を、主記憶領域の一部に用意された大容量の誤差バッファに蓄積しておき、他の画素についてのドット形成有無を判断する際には、該画素に蓄積されている誤差を誤差バッファから読み出して、読み出した誤差の値を考慮しながらドット形成の有無を判断している。このことから明らかなように、ドット形成の有無を判断するためには、誤差バッファに対して頻繁にデータの読み書きを行う必要がある。誤差バッファには大容量のバッファが使用され、データの読み書きにある程度の時間を要するので、頻繁に読み書きすればその分だけ時間がかかってしまう。
【００４７】
これに対して本発明の印刷システムにおける階調数変換モジュールでは、誤差バッファよりも小容量の中間バッファを活用することで、後ほど詳細に説明するように、誤差バッファに対して読み書きする頻度を減少させている。中間バッファは小容量の領域が繰り返して読み書きされるため、誤差バッファよりも高速に読み書きすることが容易である。例えば、主メモリとＣＰＵとの間に、主メモリよりも高速に読み書き可能なキャッシュメモリを有するコンピュータシステムにおいては、中間バッファからデータを読み出そうとすると、ほとんどの場合にキャッシュから読み出されると期待され、特別な配慮をしなくとも自然に中間バッファは誤差バッファよりも高速に読み書きすることが可能である。
【００４８】
また、ＣＰＵのレジスタに余裕がある場合は、中間バッファの少なくとも一部を、キャッシュメモリよりも更に高速で読み書きが可能なレジスタに割り当てることが可能であり、更に高速化を図ることができる。中間バッファの一部をＣＰＵのレジスタに割り当てるには、例えばＣ言語ではregister宣言を用いることで、処理ソフトウェアのソースコードで明示的に指定することが可能である。更に、最適化能力の高いコンパイラの中には、余っているレジスタを使用頻度の高い変数に自動的に割り当てる機能を有するものがあり、このようなコンパイラを用いた場合には、明示的に指定せずとも、中間バッファの一部がＣＰＵのレジスタに割り当てられることになる。
【００４９】
このように、繰り返し読み書きされる小容量の中間バッファは、通常のコンピュータシステムにおいては、特別な配慮を行わなくても高速に読み書き可能となっている。もちろん、ソフトウェアではなくハードウェアなどで処理する場合にも、小容量の中間バッファを用いた方が、高速に読み書き可能な構成を容易に実現することができる。
【００５０】
データの読み書きにある程度の時間を要する誤差バッファへの読み書き頻度が減少すれば、その分だけドット形成有無の判断を迅速に行うことが可能となる。もちろん、中間バッファを用いていても、論理的には誤差拡散法あるいは平均誤差最小法と同等の処理を行うので、これら方法と同等の画質を維持することができる。誤差バッファへ読み書きする頻度を減少させるために中間バッファを活用する具体的な方法には、種々の態様が存在しており、これら各種の態様について、各種実施例を用いて以下に説明する。
【００５１】
Ｂ．第１実施例：
Ｂ−１．装置構成：
図２は、第１実施例の画像処理装置としてのコンピュータ１００の構成を示す説明図である。コンピュータ１００は、ＣＰＵ１０２を中心に、ＲＯＭ１０４やＲＡＭ１０６などを、バス１１６で互いに接続して構成された周知のコンピュータである。ＣＰＵ１０２は実際に処理を行う演算器と、処理中のデータを一時保持する複数のレジスタとから構成されている。レジスタに保持されているデータは、ＲＡＭ１０６に記憶されているデータよりも遙かに高速に処理することが可能である。もちろん、レジスタの代わりに、キャッシュメモリと呼ばれる特殊な記憶素子を活用しても良い。キャッシュメモリは、レジスタほどではないが、ＲＡＭ１０６よりも高速にデータを読み書きすることができる。また、キャッシュメモリを活用すれば、レジスタを使用する場合よりも多量のデータを扱うことが容易となる。
【００５２】
コンピュータ１００には、フレキシブルディスク１２４やコンパクトディスク１２６のデータを読み込むためのディスクコントローラＤＤＣ１０９や、周辺機器とデータの授受を行うための周辺機器インターフェースＰ・Ｉ／Ｆ１０８、ＣＲＴ１１４を駆動するためのビデオインターフェースＶ・Ｉ／Ｆ１１２等が接続されている。Ｐ・Ｉ／Ｆ１０８には、後述するカラープリンタ２００や、ハードディスク１１８等が接続されている。また、デジタルカメラ１２０や、カラースキャナ１２２等をＰ・Ｉ／Ｆ１０８に接続すれば、デジタルカメラ１２０やカラースキャナ１２２で取り込んだ画像を印刷することも可能である。また、ネットワークインターフェースカードＮＩＣ１１０を装着すれば、コンピュータ１００を通信回線３００に接続して、通信回線に接続された記憶装置３１０に記憶されているデータを取得することもできる。
【００５３】
図３は、第１実施例のカラープリンタ２００の概略構成を示す説明図である。カラープリンタ２００はシアン，マゼンタ，イエロ，ブラックの４色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら４色のインクに加えて、染料濃度の低いシアン（淡シアン）インクと染料濃度の低いマゼンタ（淡マゼンタ）インクとを含めた合計６色のインクドットを形成可能なインクジェットプリンタを用いることもできる。尚、以下では場合によって、シアンインク，マゼンタインク，イエロインク，ブラックインクのそれぞれを、Ｃインク，Ｍインク，Ｙインク，Ｋインクと略称するものとする。
【００５４】
カラープリンタ２００は、図示するように、キャリッジ２４０に搭載された印字ヘッド２４１を駆動してインクの吐出およびドット形成を行う機構と、このキャリッジ２４０をキャリッジモータ２３０によってプラテン２３６の軸方向に往復動させる機構と、紙送りモータ２３５によって印刷用紙Ｐを搬送する機構と、ドットの形成やキャリッジ２４０の移動および印刷用紙の搬送を制御する制御回路２６０とから構成されている。
【００５５】
キャリッジ２４０には、Ｋインクを収納するインクカートリッジ２４２と、Ｃインク，Ｍインク，Ｙインクの各種インクを収納するインクカートリッジ２４３とが装着されている。キャリッジ２４０にインクカートリッジ２４２，２４３を装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド２４１の下面に設けられた各色毎のインク吐出用ヘッド２４４ないし２４７に供給される。各色毎のインク吐出用ヘッド２４４ないし２４７には、４８個のノズルＮz が一定のノズルピッチｋで配列されたノズル列が１組ずつ設けられている。
【００５６】
制御回路２６０は、ＣＰＵ２６１とＲＯＭ２６２とＲＡＭ２６３等から構成されており、キャリッジモータ２３０と紙送りモータ２３５の動作を制御することによってキャリッジ２４０の主走査と副走査とを制御するとともに、コンピュータ１００から供給される印刷データに基づいて、各ノズルから適切なタイミングでインク滴を吐出する。こうして、制御回路２６０の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ２００はカラー画像を印刷することができる。
【００５７】
尚、各色のインク吐出ヘッドからインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインクを吐出する方式や、インク通路に配置したヒータでインク通路内に泡（バブル）を発生させてインク滴を吐出する方法などを用いることができる。更には、インクを吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタであっても構わない。
【００５８】
また、インク吐出ヘッドから吐出するインク滴の大きさを制御したり、あるいは微細なインク滴を一度に複数吐出して、吐出するインク滴の数を制御するといった方法を用いて、印刷用紙上に形成されるインクドットの大きさを制御な可能なプリンタ、いわゆるバリアブルドットプリンタを用いることも可能である。
【００５９】
Ｂ−２．画像データ変換処理の概要：
図４は、第１実施例の画像処理装置としてのコンピュータ１００が、受け取った画像データに所定の画像処理を加えることにより、該画像データを印刷データに変換する処理の流れを示すフローチャートである。かかる処理は、コンピュータ１００のオペレーティングシステムがプリンタドライバを起動することによって開始される。以下、図４に従って、第１実施例の画像データ変換処理について簡単に説明する。
【００６０】
プリンタドライバは、画像データ変換処理を開始すると、先ず初めに、変換すべきＲＧＢカラー画像データの読み込みを開始する（ステップＳ１００）。次いで、取り込んだ画像データの解像度を、カラープリンタ２００が印刷するための解像度に変換する（ステップＳ１０２）。カラー画像データの解像度が印刷解像度よりも低い場合は、線形補間を行うことで隣接画像データ間に新たなデータを生成し、逆に印刷解像度よりも高い場合は、一定の割合でデータを間引くことによって画像データの解像度を印刷解像度に変換する。
【００６１】
こうして解像度を変換すると、カラー画像データの色変換処理を行う（ステップＳ１０４）。色変換処理とは、Ｒ，Ｇ，Ｂの階調値の組み合わせによって表現されているカラー画像データを、Ｃ，Ｍ，Ｙ，Ｋなどのカラープリンタ２００で使用する各色の階調値の組み合わせによって表現された画像データに変換する処理である。色変換処理は、色変換テーブル（ＬＵＴ）と呼ばれる３次元の数表を参照することで迅速に行うことができる。
【００６２】
色変換処理に続いて、階調数変換処理を開始する（ステップＳ１０６）。階調数変換処理とは次のような処理である。色変換処理によって変換された階調データは、各色毎に２５６階調幅を持つデータとして表現されている。これに対し、本実施例のカラープリンタ２００では、「ドットを形成する」，「ドットを形成しない」のいずれかの状態しか採り得ない。すなわち、本実施例のカラープリンタ２００は局所的には２階調しか表現し得ない。そこで、２５６階調を有する画像データを、カラープリンタ２００が表現可能な２階調で表現された画像データに変換する必要がある。このような階調数の変換を行う処理が階調数変換処理である。前述したように、本実施例においては中間バッファを活用することにより、ドットの形成有無の判断を迅速に行うことが可能となっている。階調数変換処理については、後ほど詳細に説明する。
【００６３】
こうして階調数変換処理を終了したら、プリンタドライバはインターレース処理を開始する（ステップＳ１０８）。インターレース処理は、ドットの形成有無を表す形式に変換された画像データを、ドットの形成順序を考慮しながらカラープリンタ２００に転送すべき順序に並べ替える処理である。プリンタドライバは、インターレース処理を行って最終的に得られた画像データを、印刷データとしてカラープリンタ２００に出力する（ステップＳ１１０）。カラープリンタ２００は、印刷データに従って、各色のインクドットを印刷媒体上に形成する。その結果、画像データに対応したカラー画像が印刷媒体上に印刷される。
【００６４】
以下では、第１実施例の階調数変換処理において、中間バッファを活用することにより、ドットの形成有無の判断を迅速に行う処理について説明する。
【００６５】
Ｂ−３．第１実施例の階調数変換処理：
中間バッファを活用してドット形成有無の判断に要する時間を短縮化する原理を説明するための準備として、いわゆる誤差拡散法においてドットの形成有無の判断を行う方法について簡単に説明する。
【００６６】
図５は、誤差拡散法において、ドットの形成有無を判断した画素で発生した階調誤差を、周辺画素に拡散させながら、ドットの形成有無を判断していく様子を概念的に示した説明図である。尚、以下では、ドットの形成有無を判断しようと着目した画素を着目画素と呼ぶ。図５（ａ）に示すように、Ｐ00と符合した画素（着目画素）でドット形成有無を判断した結果として、該着目画素の画像データにおける階調値との間に階調誤差Ｅ00が発生したものとする。図中に斜線を施した部分はドット形成有無を判断済みの画素を示している。誤差拡散法では、階調誤差Ｅ00に所定の重み係数（誤差拡散係数）を乗算し、得られた値を、着目画素周辺の未判断画素に拡散する。尚、以下で使用する添え字は次の内容を意味するものとする。例えば、添え字「00」は着目画素を示し、添え字「01」は着目画素の右隣の画素を、添え字「0 -1」は左隣の画素を示す。添え字「10」は着目画素の真下の画素を、添え字「-1 0」は着目画素の真上の画素を示す。また、添え字「11」は添え字「10」と「01」とが組み合わされたものと考えて、着目画素の右斜め下の画素を示しているものとする。
【００６７】
図６は、階調誤差を拡散する際に使用する誤差拡散係数の設定例を示す説明図である。尚、図６で斜線が付されている画素位置は着目画素の位置を示している。このような、着目画素から周辺画素への誤差拡散係数を表示したマトリックスは、誤差拡散マトリックスと呼ばれる。例えば、図６（ａ）の誤差拡散マトリックスでは、着目画素の右隣には誤差拡散係数Ｋ01の値として「１／４」が設定されている。従って、このような誤差拡散マトリックスを使用すると、着目画素で発生した階調誤差の１／４の誤差が右隣の画素に配分されることになる。同様に、着目画素の左下，真下，右下の各画素にも、着目画素で生じた階調誤差の１／４の誤差が配分される。誤差拡散マトリックスは図６に例示するものに限られず、誤差を拡散する範囲や誤差拡散係数などは種々の値を設定することが可能であり、実際の誤差拡散法では良好な画質が得られるように、適宜、適切な誤差拡散マトリックスが使用される。尚、説明の煩雑化を避けるために、以下の説明では、例示した誤差拡散マトリックスの中では最も拡散範囲の狭いマトリックス、すなわち、図６（ａ）の誤差拡散マトリックスを使用するものとして説明する。
【００６８】
誤差拡散マトリックスとして図６（ａ）のマトリックスを使用するものとすれば、図５（ａ）に示すように着目画素Ｐ00で生じた階調誤差Ｅ00は、右隣の画素Ｐ01，左下の画素Ｐ1-1 ，真下の画素Ｐ10，右下の画素Ｐ11の合計４つの画素に、それぞれ階調誤差Ｅ00の１／４ずつ配分される。こうして着目画素周辺のそれぞれの画素に拡散された誤差（拡散誤差）は、画素毎に分離された状態で記憶しておく必要がある。そのため拡散誤差は、多数の画素についての拡散誤差を記憶することの可能な、大容量のＲＡＭ１０６（図２参照）に記憶される。
【００６９】
画素Ｐ00についての階調誤差を周辺画素に拡散したら、今度は右隣の画素Ｐ01について、ドット形成有無の判断を開始する。図５（ｂ）は着目画素Ｐ01についてのドット形成有無を判断する様子を概念的に示す説明図である。ドット形成判断に際しては、先ず、周辺画素から着目画素Ｐ01に配分されて蓄積されている拡散誤差を読み出し、読み出した拡散誤差で着目画素Ｐ01の画像データを補正する。図５（ｂ）に示すように、着目画素Ｐ01には、ドット形成判断済みの周辺画素、すなわち画素Ｐ-10 ，画素Ｐ-11 ，画素Ｐ-12 ，画素Ｐ00の４つの画素から、前述の誤差拡散マトリックスに従って拡散されてきた誤差が蓄積されている。この拡散誤差をＲＡＭ１０６から読み出して、着目画素Ｐ01の画像データを補正し、得られた補正値を所定の閾値と比較することでドットの形成有無を判断する。判断の詳細については後述する。こうして着目画素Ｐ01についてドットの形成有無を判断すると、画素Ｐ01には新たな階調誤差Ｅ01が発生するので、この階調誤差を誤差拡散マトリックスに従って周辺画素に拡散する。このように誤差拡散法では、着目画素で階調誤差が発生する度に、その都度周辺にある複数の画素に拡散しながらドット形成有無を判断している。このため、ＲＡＭ１０６に対してデータを頻繁に読み書きする必要があるので、その分だけ、ドット形成有無の判断に要する時間も長くなる。
【００７０】
これに対して本実施例の階調数変換処理においては、中間バッファを活用することにより、ドット形成有無の判断に要する時間を短縮化する。図７は、中間バッファを活用して、判断に要する時間を短縮化する原理を示す説明図である。本実施例では、ＣＰＵ１０２に内蔵されているレジスタを中間バッファとして使用する。前述したように、レジスタはＲＡＭ１０６に比べて高速に処理することが可能である。もちろん、レジスタではなく、キャッシュメモリを用いて実質的に同等の処理を行っても構わない。以下、図７を参照しながら、第１実施例においてドット形成有無の判断に要する時間を短縮化する原理について説明する。
【００７１】
図７（ａ）は、着目画素Ｐ00についてドット形成有無を判断した様子を示している。該判断を行った結果として、着目画素には階調誤差Ｅ00が発生している。図７（ａ）の右側に表示した６つの矩形は、中間バッファとして使用される６つのレジスタを模式的に表示したものである。説明の便宜上、以下では、各レジスタにＲ01，Ｒ02，Ｒ1-1 ，Ｒ10，Ｒ11，Ｒ12と符合を付して区別する。第１実施例の階調数変換処理においては、着目画素Ｐ00で発生した階調誤差Ｅ00を、直接ＲＡＭ１０６に拡散するのではなく、一旦レジスタに蓄える。すなわち、レジスタＲ01の値を、着目画素の右隣の画素Ｐ01に配分すべき誤差で更新する。画素Ｐ01に配分すべき誤差は、誤差拡散マトリックスに従って、Ｋ01・Ｅ00で求めることができる。同様に、レジスタＲ1-1 の値を、着目画素Ｐ00の左下の画素Ｐ1-1 に配分すべき誤差で更新し、レジスタＲ10の値を真下の画素Ｐ10に配分すべき誤差で、レジスタＲ11の値を右下の画素Ｐ11に配分すべき誤差で、それぞれ更新する。それぞれの誤差は誤差拡散マトリックスに従って、Ｋ1-1 ・Ｅ00，Ｋ10・Ｅ00，Ｋ11・Ｅ00で求めることができる。
【００７２】
こうして周辺の４つの画素に配分すべきそれぞれの拡散誤差で、対応する４つのレジスタの値を更新したら、今度は画素Ｐ00の右隣の画素Ｐ01について、ドットの形成有無を判断する。画素Ｐ01の判断に際しては、新たな着目画素Ｐ01の拡散誤差をＲＡＭ１０６から読み出して、読み出した誤差とレジスタＲ01に記憶されている誤差とを加算した値で、着目画素Ｐ01の階調データを補正する。このように、着目画素Ｐ01の拡散誤差とレジスタＲ01の誤差とを加算した値で補正すれば、通常の誤差拡散法と、実質的にはまったく同じ処理を行うことができる。すなわち、通常の誤差拡散法では、図５を用いて説明したように、階調誤差が発生する度にこれを周辺の画素に拡散しておき、右隣の画素Ｐ01のドット形成有無を判断する際には、画素Ｐ01に配分されている拡散誤差を読み出して画素Ｐ01の階調データを補正し、補正した値に基づいてドットの形成有無を判断している。これに対して、本実施例においては、図７（ａ）に示すように、画素Ｐ01に配分される誤差がレジスタＲ01に記憶されているので、画素Ｐ01の拡散誤差とレジスタＲ01に記憶された誤差とを加算した値で、階調データを補正することで、通常の誤差拡散法と実質的に全く同等の処理を行うことができるのである。こうして新たな着目画素Ｐ01についてドットの形成有無を判断すると、着目画素Ｐ01には、新たな階調誤差Ｅ01が発生する（図７（ｂ）参照）。
【００７３】
画素Ｐ01に発生した階調誤差Ｅ01も、画素Ｐ00の階調誤差Ｅ00と同様に、誤差拡散マトリックスに設定された割合で、それぞれのレジスタに拡散させる。図７（ｂ）を参照しながら具体的に説明する。先ず、画素Ｐ02は着目画素Ｐ01の右隣の画素であるから、対応するレジスタＲ02の値を、誤差拡散マトリックスに設定された誤差拡散係数Ｋ01と階調誤差Ｅ01とを乗算した値で更新する。画素Ｐ10は、着目画素Ｐ02の左下の画素であるから、対応するレジスタＲ10の値  には、誤差拡散係数Ｋ1-1 と階調誤差Ｅ01とを乗算した値Ｋ1-1 ・Ｅ01を加算する。ここで、図７（ｂ）に示すように、レジスタＲ10には、既に画素Ｐ00から拡散されてきた誤差Ｋ10・Ｅ00が記憶されているので、既に拡散されている誤差と新たに拡散されてきた誤差とをレジスタＲ02上で加算するのである。この結果、レジスタＲ02の値は、２つの画素から拡散されてきた誤差の和（Ｋ10・Ｅ00＋Ｋ1-1 ・Ｅ01）に更新される。以下、画素Ｐ11および画素Ｐ12についても同様に、対応するレジスタＲ11の値は拡散誤差（Ｋ11・Ｅ00＋Ｋ10・Ｅ01）で更新され、レジスタＲ12の値はＫ11・Ｅ01で更新される。
【００７４】
以上のような処理を行うことにより、画素Ｐ00で発生した階調誤差Ｅ00と画素Ｐ01での階調誤差Ｅ01とが、それぞれのレジスタに拡散されたことになる。そこで、図７（ｃ）に示すように、各レジスタに記憶されている誤差を周辺画素に対応する誤差バッファ（具体的にはＲＡＭ１０６）に書き込んでいく。すなわち、画素Ｐ02の誤差バッファにはレジスタＲ02に記憶されている値Ｋ01・Ｅ01を加算し、画素Ｐ1-1 の誤差バッファにはレジスタＲ1-1 に記憶されている値Ｋ1-1 ・Ｅ00を、画素Ｐ10にはレジスタＲ10の値（Ｋ10・Ｅ00＋Ｋ1-1 ・Ｅ01）を、画素Ｐ11にはレジスタＲ11の値Ｋ11・Ｅ00＋Ｋ10・Ｅ01を、画素Ｐ12にはレジスタＲ12の値Ｋ11・Ｅ01を、それぞれ加算していく。こうすることにより、通常の誤差拡散法において画素Ｐ00および画素Ｐ01での誤差を拡散した状態（図５（ｃ）参照）と同様の誤差が、周辺の５つの画素の各誤差バッファに拡散されることになる。尚、画素Ｐ01については既にドット形成有無の判断を終了しているため、レジスタＲ01の値をＲＡＭ１０６に加算する必要はない。このように本実施例の方法では、２画素分のドット形成有無を判断して、５画素分の誤差バッファに誤差を拡散しているので、１画素分の判断をする度に２．５画素の割合で誤差バッファへの誤差拡散を行っていることになる。
【００７５】
尚、以上では説明の便宜上、２値化を行った画素周辺の５つの画素に拡散される全ての誤差を、一旦レジスタに記憶し、２つの画素から拡散されてくる誤差をレジスタ上で加算してから誤差バッファに拡散するものとして説明した。もちろん、レジスタ上で誤差の加算を行わない画素、例えば画素Ｐ1-1 ，画素Ｐ02，画素Ｐ12については、誤差バッファに直接、誤差を拡散しても構わない。
【００７６】
図５に示した通常の誤差拡散法では、１画素のドット形成判断を行う度に周辺の４画素に誤差を拡散していた。これに対して、本実施例の方法においては、未だ２値化していない同一の画素に、複数の画素から拡散される誤差を一旦レジスタ上で加算してからまとめて拡散することにより、１画素分の判断をする度に２．５画素分の誤差バッファに誤差を拡散するだけでよい。もちろん、通常の誤差拡散法に対して、誤差をレジスタへ配分する工程が追加されているが、レジスタの値の更新あるいはレジスタ上での加算といった処理はＲＡＭへ誤差を拡散させる処理に比べて遙かに高速に行うことができるので、全体としてドット形成有無の判断に要する時間を短縮化することが可能となる。尚、ここではレジスタに記憶するものとして説明するが、必ずしもレジスタに限られず、誤差バッファとして使用されている記憶手段よりも高速に読み書き可能な記憶手段でありさえすればよい。また、例えば、ＣＰＵとＲＡＭとのデータのやり取りを高速で行うために設けられているキャッシュメモリを活用することにより、実質的に同等な処理を行うものであっても構わない。本実施例で用いる中間バッファは、小容量のメモリ領域を各画素の処理に繰り返して使用するため、通常は設計者が明示的に指定しなくとも、コンパイラやＣＰＵ自体の機能によって自動的にレジスタやキャッシュメモリに割り当てられ、高速に読み書きすることが可能となる。
【００７７】
尚、以上の説明では、２つの画素から拡散されてくる誤差をレジスタ上で直接、加算するものとしたが、それぞれの誤差を別々のレジスタに一旦記憶した後、別のレジスタ上で加算しても構わない。例えば、図７（ｂ）の画素Ｐ10に拡散される誤差を例にとって説明すると、先ずレジスタＲ10の値を画素Ｐ00からの誤差Ｋ10・Ｅ00で更新し、次いでレジスタＲ10上で、画素Ｐ01からの誤差Ｋ1-1 ・Ｅ01を加算している。このような処理に換えて、画素Ｐ00からの誤差と画素Ｐ01〜の誤差とをそれぞれレジスタＲa とレジスタＲb とに記憶しておき、２つのレジスタの値をレジスタＲ10上で加算しても構わないのはもちろんである。
【００７８】
図８は、以上に説明した本実施例の階調数変換処理の流れを示すフローチャートである。この処理はコンピュータ１００のＣＰＵ１０２によって行われる。尚、前述したように、本実施例のカラープリンタは、Ｃ，Ｍ，Ｙ，Ｋの４色のインクドットを形成可能なプリンタであり、図８に示す階調数変換処理も各色毎に行っているが、以下では説明の煩雑化を避けるために、インクドットの色を特定せずに説明する。尚、上記の４色に加えて、ＬＣインク，ＬＭインクを加えて６色プリンタを使用してもよいのはもちろんである。
【００７９】
また、前述したように本実施例のカラープリンタは、各色毎に大きさの異なるドットを形成可能なバリアブルドットプリンタとすることも可能である。バリアブルドットプリンタを使用する場合、例えば、大ドット，中ドット，小ドットの各種ドットを形成可能なバリアブルドットプリンタを用いる場合には、以下に説明する階調数変換処理は、各種大きさのドット毎に行われる。
【００８０】
このように、使用するインクの色が増加したり、種々の大きさのドットが形成可能となるにつれて階調数変換処理を行う回数が増加するので、それだけ処理に要する時間も長くなる傾向がある。以下に説明する本実施例の階調数変換処理は迅速な処理が可能であるために、このような場合にも好適に適用することができる。
【００８１】
本実施例の階調数変換処理を開始すると、先ず初めに、ドット形成有無を判断しようとしている２画素分の画像データＣd1，Ｃd2を読み込む（ステップＳ２００）。尚、ここでは便宜上、左側の画素を第１画素と呼び、右側の画素を第２画素と呼ぶことにする。画像データは、コンピュータ１００に内蔵されているＲＡＭ１０６に記憶されている。次いで、第１画素および第２画素のそれぞれに拡散されて蓄積されている拡散誤差Ｅd1，Ｅd2を誤差バッファから読み出す（ステップＳ２０２）。誤差バッファもＲＡＭ１０６上に設けられている。
【００８２】
続いて、第１画素の画像データＣd1と第１画素の拡散誤差Ｅd1とを加算することにより、第１画素の補正データＣx1を算出する（ステップＳ２０４）。こうして得られた補正データＣx1と所定の閾値ｔh とを比較して（ステップＳ２０６）、補正データの方が大きければ第１画素にドットを形成すると判断して、第１画素についての判断結果を示す変数Ｃr1にドットを形成することを意味する値「１」書き込む（ステップＳ２０８）。そうでなければ第１画素にはドットを形成しないと判断して、変数Ｃr1にドットの形成しないことを意味する値「０」を書き込む（ステップＳ２１０）。
【００８３】
こうして第１画素についてのドット形成有無を判断したら、該判断に伴って第１画素に発生する階調誤差を算出する（ステップＳ２１２）。第１画素で発生する階調誤差Ｅ1 は、第１画素の補正データＣx1から、ドットを形成することにより、あるいはドットを形成しないことにより第１画素で表現される階調値（以下では、このような階調値を結果値という）を減算することで求めることができる。
【００８４】
次いで、第１画素で発生した階調誤差Ｅ1 を中間バッファに拡散する（ステップＳ２１４）。この処理は、図７（ａ）を用いて説明した処理に相当する処理である。すなわち、第１画素の階調誤差Ｅ1 に誤差拡散マトリックスに設定された誤差拡散係数を乗算して、周辺画素に拡散すべき拡散誤差を算出し、得られた拡散誤差をそれぞれの中間バッファに記憶しておく。
【００８５】
第１画素で発生した誤差を中間バッファに拡散したら、第２画素についてのドット形成有無の判断を開始する。第２画素についての判断を行うためには、第２画素の補正データを算出する必要がある。そこで、予め読み出しておいた第２画素の画像データＣd2と、第２画素の拡散誤差Ｅd2と、第１画素から第２画素に配分されてきた誤差とを加算して、第２画素の補正データＣx2を算出する（ステップＳ２１６）。図７を用いて説明したように、第１画素から第２画素に拡散されてきた誤差は、予め定められた中間バッファに記憶されている。尚、図８に示す実施例では、第１画素の画像データおよび拡散誤差を読み出すと同時に、第２画素の画像データおよび拡散誤差も予め読み出しておくものとしたが、もちろん、第２画素については、補正データの算出に必要になってから、画像データと拡散誤差とを読み出すものとしても良い。第１画素および第２画素についての画像データと拡散誤差とを一度に読み出す場合には、メモリ上で連続した位置から読み出すといった方法を採用することによって、これらデータを迅速に読み出すことが可能になる。
【００８６】
尚、第２画素の画像データおよび拡散誤差については、ステップＳ２００およびＳ２０２ではなく、ステップＳ２１６の直前で読み出すようにしても構わない。こうすれば、ＣＰＵ１０２のレジスタ数に限りがある場合に、第２画素の画像データおよび拡散画素を読み出すまでの間は、レジスタを他の目的に使用することが可能となるので好適である。
【００８７】
ステップＳ２１６で第２画素についての補正データＣd2を算出したら、第１画素の場合と同様に、所定の閾値ｔh と比較することによってドットの形成有無を判断する（ステップＳ２１８）。補正データＣd2の方が大きければ第２画素にドットを形成すると判断して、ドットを形成することを意味する値「１」を書き込み（ステップＳ２２０）、そうでなければドットを形成しないことを意味する値「０」を書き込む（ステップＳ２２２）。次いで、第２画素の階調誤差Ｅ2 を算出する（ステップＳ２２４）。第２画素で発生する階調誤差Ｅ2 も第１画素の階調誤差Ｅ1 と同様にして、第２画素の補正データＣx2から、第２画素についての結果値（画素についてのドットの形成有無を判断したことにより、その画素に表現される階調値）を減算することで求めることができる。
【００８８】
続いて、第２画素の階調誤差を中間バッファに拡散する処理を行う（ステップＳ２２６）。この処理は、図７（ｂ）を用いて説明した処理に相当する処理である。すなわち、第２画素の階調誤差Ｅ2 に誤差拡散マトリックスに設定された各画素の誤差拡散係数を乗算して、周辺画素に拡散すべき拡散誤差を算出し、得られた拡散誤差をそれぞれの中間バッファに記憶させる。ここで、中間バッファに第１画素から配分されてきた誤差が既に記憶されている場合には、既に記憶されている誤差に新たに配分した誤差を加算して記憶する。図７（ｂ）に示した例では、レジスタＲ10およびレジスタＲ11の２つのレジスタについては既に配分されている誤差が存在するので、これに新たに配分した誤差を加算して記憶させる。この結果、５つのレジスタには第１画素および第２画素から、周辺の各画素に拡散すべき誤差が蓄積されることになる。そこで、続くステップＳ２２８の処理では、中間バッファに画素毎に記憶されている誤差を、ＲＡＭ上の誤差バッファに加算し（図７（ｃ）参照）、加算し終わったら中間バッファをリセットしておく。
【００８９】
次いで、全画素についてドット形成有無を判断したか否かを判断し（ステップＳ２３０）、未判断の画素が残っていればステップＳ２００に戻って続く一連の処理を行う。こうして全画素について、ドット形成有無の判断を終了するまで、階調誤差を周辺画素に拡散しながら、２画素ずつドットの形成有無を判断し、全画素について判断を終了したら、本実施例の階調数変換処理を終了して、図４の画像データ変換処理に復帰する。
【００９０】
以上に説明した本実施例の階調数変換処理においては、２画素分のドット形成有無を判断する度に、５画素分の誤差バッファに誤差を拡散すればよい。通常の誤差拡散法を用いて同様の処理を行うためには、１画素の判断を行う度に４画素分の誤差バッファに誤差を拡散しなければならないことと比較すれば、本実施例の階調数変換処理を採用することで、誤差バッファへの誤差の拡散に要する時間を大きく短縮することができる。特に、階調数変換処理では、画像を構成する多数の画素についてドット形成有無を判断するとともに、発生した階調誤差を周辺画素に拡散していかなければならないので、誤差バッファへの誤差の拡散に要する時間は階調数変換処理に要する時間の中で比較的大きな割合を占めている。このことから、本実施例の階調数変換処理を採用して誤差の拡散に要する時間を短縮化すれば、階調数変換処理を含めた画像処理全体を迅速に行うことができ、延いては画像を迅速に印刷することが可能となる。
【００９１】
以上の説明では、説明の便宜上、２画素ずつドットの形成有無を判断するものとして説明した。すなわち、２つの画素で生じる階調誤差を中間バッファに蓄えておき、２つの画素から拡散されてきた誤差を中間バッファ上で加算し、まとめて誤差バッファに拡散する。もちろん、より多くの画素についてドット形成有無を判断し、発生した誤差を中間バッファ上で加算するようにしても良い。例えば、３画素ずつドットの形成有無を判断することとした場合は、図９（ａ）に示すように、ドット形成有無を判断する画素（図中で斜線を付して表示）の周辺にある６つの画素の誤差バッファに誤差を拡散すればよい。すなわち、判断を行う画素１つあたり、２画素分の誤差バッファに誤差を拡散すれば足りる。更に、６画素ずつドットの形成有無を判断した場合は、図９（ｂ）に示すように、９画素分の誤差バッファに誤差を拡散すればよいので、判断画素１つあたりでは１．５画素分の誤差バッファに誤差を拡散すればよい。このように、一度にドット形成有無を判断する画素数を多くするほど、判断画素１画素あたりに拡散する誤差バッファの画素数が減少するので、階調数変換処理に要する時間を短縮化させることが可能になる。
【００９２】
Ｂ−４．変形例：
また、以上に説明した第１実施例の階調数変換方法においては、第１画素および第２画素から周辺画素に拡散される拡散誤差を各階調誤差に基づいて算出し、周辺画素毎に蓄積しておくものとして説明したが、次のようにしても良い。すなわち、第１画素および第２画素で発生した階調誤差そのものを中間バッファに記憶しておき、これら記憶している階調誤差から周辺画素に拡散すべき拡散誤差を算出し、各画素に対応する誤差バッファに記憶させるようにしても良い。かかる方法は、中間バッファに記憶される値が蓄積中の拡散誤差であるか、階調誤差であるかの違いがあるものの、誤差バッファには同じ誤差が記憶されることから実質的に同等の処理を行うことができる。以下、このような第１実施例の変形例について説明する。
【００９３】
図１０は、第１実施例の変形例における階調数変換方法の流れを示すフローチャートである。以下、図８に示した第１実施例の階調数変換処理と異なる部分を中心に、変形例の階調数変換方法について、図１０を参照しながら簡単に説明する。
【００９４】
変形例においても第１実施例の階調数変換処理と同様に、処理を開始すると先ず初めに第１画素と第２画素の画像データＣd1，Ｃd2を読み込む（ステップＳ３００）。ここで、第１画素とはドット形成有無を判断しようとしている２つの画素の中の左側の画素を言い、第２画素とは右側の画素を言う。次いで、第１画素および第２画素のそれぞれに拡散されている拡散誤差Ｅd1，Ｅd2を誤差バッファから読み出す（ステップＳ３０２）。誤差バッファは第１実施例の場合と同様にＲＡＭ１０６上に設けられている。次いで、第１画素の画像データと拡散誤差とを加算して、第１画素の補正データＣx1を算出する（ステップＳ３０４）。続いて、補正データＣx1と所定の閾値ｔｈとを比較し（ステップＳ３０６）、補正データの方が大きければ第１画素にドットを形成すると判断して、第１画素についての判断結果を示す変数Ｃr1に、ドットを形成することを意味する値「１」を書き込む（ステップＳ３０８）。そうでなければ、第１画素にはドットを形成しないと判断して、ドット形成しないことを意味する値「０」を変数Ｃr1に書き込む（ステップＳ３１０）。こうして第１画素についてのドット形成の有無を判断したら、該判断に伴って第１画素に発生する階調誤差を算出する（ステップＳ３１２）。階調誤差は、第１実施例の場合と同様に、補正データＣx1から結果値を減算することにより求めることができる。
【００９５】
第１実施例の変形例においては、こうして算出した第１画素の階調誤差Ｅ1 を中間バッファに記憶する（ステップＳ３１４）。すなわち、第１実施例の階調数変換処理においては階調誤差を中間バッファに拡散させたが、変形例の階調数変換処理においては階調誤差を拡散させることなく、そのまま中間バッファに記憶するのである。
【００９６】
第１画素の階調誤差Ｅ1 を中間バッファに記憶したら、第２画素についてのドット形成有無を判断するために、第２画素の補正データＣx2を算出する（ステップＳ３１６）。すなわち、予め読み出しておいた第２画素の画像データＣd2と拡散誤差Ｅd2と、第１画素から拡散されてくる誤差とを加算する。第１画素からの誤差は、中間バッファに記憶されている第１画素の階調誤差Ｅ1 と誤差拡散係数とを乗算することで求められる。第１実施例の場合と同様に、誤差拡散係数の値は誤差拡散マトリックスに設定されている。こうして算出した第２画素の補正データＣx2と所定の閾値ｔｈとを比較して（ステップＳ３１８）、補正データＣx2の方が大きければドットを形成すると判断し、第２画素についての判断結果を示す変数Ｃr2にドットを形成することを意味する値「１」を書き込む（ステップＳ３２０）。そうでなければ、ドットは形成しないと判断して、変数Ｃr2にドットを形成しないことを意味する値「０」を書き込む（ステップＳ３２２）。次いで、第２画素についての階調誤差Ｅ2 を算出し（ステップＳ３２４）、算出した階調誤差Ｅ2 は、周辺画素に拡散させることなく、そのまま中間バッファに一旦記憶する（ステップＳ３２６）。このとき、第２画素の階調誤差Ｅ2 は先に記憶しておいた第１画素の階調誤差Ｅ1 とは別個に記憶しておく。第２画素の階調誤差Ｅ2 は、第１画素の階調誤差Ｅ1 と同様に、第２画素の補正データＣx2から結果値を減算して求めることができる。
【００９７】
こうして、第１画素の階調誤差Ｅ1 と第２画素の階調誤差Ｅ2 とをそれぞれの中間バッファに記憶したら、２つの階調誤差をまとめて誤差バッファに拡散させる。この処理を、図７を利用して説明する。図７では、画素Ｐ00が第１画素に対応し、画素Ｐ01が第２画素に対応している。前述したように、第１画素および第２画素で発生した階調誤差は、これら画素の周辺にある５つの画素に所定の割合で拡散される。例えば、第１画素の左下にある画素Ｐ1-1 には画素Ｐ00からの誤差Ｋ1-1 ・Ｅ00が拡散される。ここで、Ｋ1-1 は、階調誤差を左下の画素へ拡散させる際に使用する誤差拡散係数であり、誤差拡散係数の値は誤差拡散マトリックスに設定されている。また、画素Ｐ10には、第１画素からの誤差Ｋ10・Ｅ00と、第２画素からの誤差Ｋ1-1 ・Ｅ01とを加算した誤差Ｋ10・Ｅ00＋Ｋ1-1 ・Ｅ01が拡散される。他の３つの画素についても同様に、画素Ｐ11にはＫ11・Ｅ00＋Ｋ10・Ｅ01が、画素Ｐ12にはＫ11・Ｅ01が、画素Ｐ02にはＫ01・Ｅ01の値が、それぞれ拡散される。このように、周辺の各画素に拡散される誤差の値は、階調誤差Ｅ1 および階調誤差Ｅ2 が決まれば誤差拡散係数に基づいて算出することができる。そこで、ステップＳ３２８においては、中間バッファに記憶されている第１画素の階調誤差Ｅ1 と第２画素の階調誤差Ｅ2 とを用いて、第１画素と第２画素の周辺の各画素に拡散する誤差を算出し、各画素に対応する誤差バッファに加算していくのである。こうした処理が終了したら、次の画素の処理に使用するために、階調誤差Ｅ1 ，Ｅ2 を記憶している中間バッファをリセットしておく。
【００９８】
次いで、全画素についてドット形成有無を判断した否かを判断し（ステップＳ３３０）、未判断の画素が残っていたらステップＳ３００に戻って続く一連の処理を行う。こうして全画素についてドット形成の有無を判断したら、第１実施例の変形例の階調数変換処理を終了して、図４の画像データ変換処理に復帰する。
【００９９】
以上に説明した変形例の方法によっても、第１実施例の階調数変換処理と実質的に同等の処理を行うことができる。かかる変形例の方法によれば、第１実施例の方法よりも中間バッファの容量を節約することができる。
【０１００】
Ｃ．第２実施例：
Ｃ−１．第２実施例において階調数変換処理の時間を短縮化する原理：
以上に説明した第１実施例の階調数変換処理においては、ドット形成有無を判断して発生した階調誤差を、高速に読み書き可能なレジスタなどの中間バッファに拡散しておき、所定画素数のドット形成有無の判断を終了する度に、中間バッファに拡散されている全ての誤差を誤差バッファに加算していく。これに対して、以下に説明する第２実施例の階調数変換処理においては、ドット形成有無を判断する度に、１画素分ずつ誤差バッファに加算して行く。後述するように、第２実施例の方法によれば、第１実施例の方法よりも少ないレジスタ数で階調数変換処理を実現することができ、更に、レジスタなどの中間バッファから誤差バッファへの書き込み頻度も少なくすることができる。以下、かかる第２実施例について説明する。
【０１０１】
初めに第２実施例の処理原理、すなわち、１画素のドット形成有無を判断する度に１画素分の拡散誤差を誤差バッファに加算して行くことによって通常の誤差拡散法と実質的に同等の処理を行う原理を、図１１を参照しながら説明する。図１１の斜線を付した部分は、ドット形成判断を行った画素の領域を示している。尚、以下でも、説明の便宜のために、第１実施例の場合と同様に誤差拡散マトリックスは図６（ａ）に示したマトリックスを使用するものとする。図１１（ａ）は、画素Ｐ00についてのドット形成有無の判断を行い、生じた階調誤差Ｅ00を周辺画素に拡散している様子を示している。
【０１０２】
ここで、太い破線で囲って示した画素Ｐ11に着目すると、画素Ｐ11には、画素Ｐ00で生じた誤差Ｅ00に加えて、画素Ｐ00の右隣の画素Ｐ01で生じた誤差Ｅ01と、その更に右隣の画素Ｐ02で生じた誤差Ｅ02とが配分されている（図１１（ｂ），（ｃ）参照）。つまり１つの画素には、連続する３つの画素から続けて誤差が配分されていることになる。尚、連続する３つの画素から誤差が配分されるのは、図６（ａ）あるいは図６（ｅ）に示す誤差拡散マトリックスを用いた場合で、他のマトリックス、例えば図６（ｂ）や図６（ｆ）のマトリックスを用いた場合は連続する５つの画素からの誤差が、図６（ｃ）のマトリックスを用いた場合は連続する７つの画素からの誤差が、それぞれ続けて配分されることになる。このように、各画素には連続する画素から続けて誤差が配分されてくるので、配分されてくる誤差を画素毎に中間バッファ上で蓄積し、所定画素数の誤差を蓄積し終わったら、その画素についてはひとまず誤差の拡散が終了したと考えて、中間バッファに蓄積した誤差を誤差バッファに書き込んでいく。こうして、ひとまず誤差の蓄積が終了したと考えられる中間バッファの誤差を、対応する画素の誤差バッファに書き込んでいけば、同じ画素の誤差バッファに何度も誤差を書き込む必要がなくなるので、誤差バッファへ読み書きする頻度を減らすことができる。
【０１０３】
図１２は、上述した原理を、中間バッファを活用して実現している様子を概念的に示した説明図である。図１２（ａ）は、画素Ｐ00でドット形成有無を判断した状態を示している。図１２（ａ）の右側に示した４つの矩形は、それぞれ中間バッファとしてのレジスタを模式的に示したものである。以下では、各レジスタにＲ1 ，Ｒ2 ，Ｒ3 ，Ｒ4 と符号を付して識別する。着目画素Ｐ00で発生した階調誤差Ｅ00は、誤差拡散マトリックスに設定された誤差拡散係数が乗算されて、各レジスタに拡散される。尚、図示が煩雑化することを避けるため、図１２では、画素Ｐ00から左下の画素に拡散される誤差をＥ00＿LDと略して表示する。誤差Ｅ00＿LDの値は、画素Ｐ00の階調誤差Ｅ00に誤差拡散係数Ｋ1-1 を乗算することによって求めることができる。同様に、画素Ｐ00から真下の画素に拡散される誤差をＥ00＿D と略して表示し、画素Ｐ00から右下の画素に拡散される誤差をＥ00＿RDと、画素Ｐ00から右横の画素に拡散される誤差をＥ00＿R と略して表示することとする。他の画素で発生した階調誤差についても同様に、例えば、画素Ｐ01から左下の画素に拡散される誤差はＥ01＿LDと略して表示し、画素Ｐ01から真下の画素に拡散される誤差はＥ01＿D と、右下の画素に拡散される誤差はＥ01＿RDと、右横の画素に拡散される誤差はＥ01＿R とそれぞれ略して表示する。また、各レジスタの右側に付した星印は、所定画素数の誤差を蓄積し終わったレジスタを示している。星印の意味する内容については後述する。
【０１０４】
図１２（ａ）を参照して、着目画素Ｐ00で生じた階調誤差Ｅ00がレジスタＲ1 ないしレジスタＲ4 の４つのレジスタに蓄積される様子を説明する。４つのレジスタの中、レジスタＲ1 は、着目画素から右横の画素に拡散される誤差が上書きされるレジスタである。他の３つのレジスタとは異なり、常に着目画素の右横の画素への誤差が上書きされる。図１２（ａ）ではレジスタＲ1 には、着目画素Ｐ00から右横の画素Ｐ01に拡散される誤差Ｅ00＿R の値が上書きされている。他の３つのレジスタには、着目画素から左下、真下、右下の各画素に拡散されるそれぞれの誤差が加算される。いずれのレジスタにいずれの誤差が加算されるかは、以下に説明するように着目画素の移動に伴って順番に切り替わっていく。
【０１０５】
先ず、着目画素が画素Ｐ00にある場合（図１２（ａ）参照）には、レジスタＲ2 には着目画素から画素Ｐ10への誤差（着目画素から真下の画素に拡散される誤差）が加算される。レジスタＲ3 には着目画素から画素Ｐ1-1 への誤差（着目画素から左下の画素に拡散される誤差）が加算される。レジスタＲ4 には着目画素から画素Ｐ11への誤差（着目画素から右下の画素に拡散される誤差）が加算される。
【０１０６】
次に、着目画素が画素Ｐ01に移動した場合を考える（図１２（ｂ）参照）。着目画素が移動しても、レジスタＲ2 には依然として画素Ｐ10への誤差が加算される。着目画素の移動後は、画素Ｐ10は着目画素の左下の画素となっているから、着目画素との位置関係で言えば、レジスタＲ2 には着目画素から左下の画素への誤差が加算されることになる。換言すれば、着目画素が画素Ｐ00にある時には、レジスタＲ2 には着目画素から真下の画素への誤差が加算されたのに対して、着目画素が画素Ｐ01に移動すると、着目画素から左下の画素への誤差が加算されることになる。
【０１０７】
同様に、レジスタＲ4 には画素Ｐ11への誤差が加算されるので、着目画素が画素Ｐ00にあるときには着目画素から右下の画素への誤差が加算されるが、着目画素が画素Ｐ01に移動すると、着目画素から真下の画素への誤差が加算されることになる。
【０１０８】
レジスタＲ3 については、着目画素が画素Ｐ00にあるときには着目画素の左下の画素Ｐ1-1 への誤差を加算したが、着目画素が画素Ｐ01に移動した後は、もはや画素Ｐ1-1 への誤差の拡散は不要である。そこで、レジスタＲ3 には新たな着目画素Ｐ02から画素Ｐ12への誤差を加算する。結局レジスタＲ3 についても他のレジスタと同様に、着目画素が移動すると、着目画素から見て異なる方向への誤差が加算されることになる。すなわち、着目画素が画素Ｐ00にある時には、レジスタＲ3 には着目画素から左下の画素への誤差が加算されるが、着目画素が画素Ｐ01に移動すると、着目画素から右下の画素への誤差が加算されることになる。
【０１０９】
更に進んで、着目画素が画素Ｐ01から画素Ｐ02に移動した場合にも同様に、レジスタＲ2 ないしレジスタＲ4 の３つのレジスタには、着目画素の移動に伴って、着目画素から見て異なる方向にある画素への誤差が加算されることになる。図１２（ｃ）は、着目画素が画素Ｐ02に移動した時に、着目画素Ｐ02から各レジスタに誤差が拡散されている様子を示している。前述の図１２（ｂ）と図１２（ｃ）とを比較すれば明らかなように、着目画素が画素Ｐ01にある時には、レジスタＲ2 ，レジスタＲ3 ，レジスタＲ4 の各レジスタには着目画素から左下の画素，右下の画素，真下の画素への誤差が加算されるが、着目画素が画素Ｐ02から画素Ｐ03に移動すると、各レジスタにはそれぞれ着目画素から右下の画素，真下の画素，左下の画素への誤差が加算されることになる。
【０１１０】
このように、第２実施例の階調数変換処理においては、着目画素から右下の画素，真下の画素，左下の画素への誤差が、レジスタＲ2 ないしレジスタＲ4 の３つのレジスタに加算されるが、それぞれの誤差がいずれのレジスタに加算されるかは、着目画素の移動に伴って順番に切り替わっていく。こうして着目画素を移動させながら、各レジスタをそれぞれ適切なタイミングでリセットしつつ、順番に誤差を加算していけば、以下に説明するように、連続する３つの着目画素からの誤差が、各レジスタに順番に蓄積されることになる。以下、レジスタＲ4 を例にとって具体的に説明する。
【０１１１】
着目画素が画素Ｐ00にある場合には、図１２（ａ）に示すようにレジスタＲ4 には着目画素Ｐ00から右下の画素への誤差Ｅ00＿RDが加算される。後述するように、誤差Ｅ00＿RDを加算する時点では、レジスタＲ4 は既にリセットされているので、記憶されている誤差はない。着目画素が画素Ｐ01に移動すると、図１２（ｂ）に示すように、レジスタＲ4 には着目画素Ｐ01から真下の画素への誤差Ｅ01＿D が加算される。レジスタＲ4 には、先の着目画素Ｐ00からの誤差Ｅ00＿RDが既に加算されているから、この誤差に加えて、着目画素Ｐ01からの誤差Ｅ01＿D が加算されることになる。着目画素が画素Ｐ02に移動すると、図１２（ｃ）に示すように、レジスタＲ4 には着目画素Ｐ02から左下の画素への誤差Ｅ02＿LDが加算される。レジスタＲ4 には、先の着目画素Ｐ00およびＰ01からの、それぞれの誤差Ｅ00＿RDおよび誤差Ｅ01＿D が既に加算されているから、これらの誤差に加えて着目画素Ｐ02からの誤差Ｅ02＿LDが加算されることになる。その結果、着目画素Ｐ02からの誤差を加算した時点でレジスタＲ4 には、着目画素Ｐ00ないし着目画素Ｐ02の連続する３つの着目画素からの誤差が蓄積されることになる。図１２（ｃ）において、レジスタＲ4 の右横に示された星印は、連続する３つの着目画素の中の最後の着目画素からの誤差が、レジスタＲ4 に蓄積されることを示している。こうして、連続する３つの画素からの誤差をレジスタＲ4 に蓄積し終わったら、蓄積した値を誤差バッファに書き込む。
【０１１２】
上述の説明から明らかなように、レジスタＲ4 には画素Ｐ11に拡散される誤差が蓄積されているから、レジスタＲ4 に蓄積された値は、画素Ｐ11に対応する誤差バッファに書き込まれる。図１２（ｃ）において、レジスタＲ4 から誤差バッファに向かう白抜きの矢印は、レジスタＲ4 に蓄積した誤差を誤差バッファに書き込む様子を模式的に示したものである。また、誤差バッファと画素Ｐ11との結ぶ破線の矢印は、画素Ｐ11に対応する誤差バッファであることを模式的に示したものである。蓄積した値を誤差バッファに書き込んだ後は、レジスタＲ4 の値をリセットする。図１２（ａ）の説明において、着目画素Ｐ00からの誤差を加算する時点では、レジスタＲ4 が既にリセットされていたのは、直前の着目画素Ｐ0-1 からの誤差を加算した時点でレジスタＲ4 に連続する３つの画素からの誤差が蓄積され、レジスタＲ4 がリセットされたからである。
【０１１３】
次に、レジスタＲ3 に着目して説明する。図１２（ａ）に示すように、着目画素Ｐ00からの誤差を加算した時点で、レジスタＲ3 には連続する３つの着目画素Ｐ0-2 ，Ｐ0-1 ，Ｐ00からの誤差が蓄積されている。レジスタＲ3 の右横に示された星印は、着目画素Ｐ00からの誤差を蓄積すれば、連続する３つの着目画素からの誤差が蓄積されることを示している。そこで、着目画素Ｐ00からの誤差を加算した後に、レジスタＲ3 に蓄積された値を誤差バッファに書き込む。レジスタＲ3 に蓄積された誤差は画素Ｐ1-1 への誤差であるので、蓄積された誤差は、画素Ｐ1-1 に対応する誤差バッファに書き込む。こうして、蓄積した誤差を誤差バッファに書き込んだら、レジスタＲ3 の値をリセットしておく。
【０１１４】
ここで、レジスタＲ3 がリセットされるタイミングと、前述のレジスタＲ4 がリセットされるタイミングとを比較すると、レジスタＲ4 は着目画素Ｐ00からの誤差が加算される前、すなわち着目画素Ｐ0-1 からの誤差を加算した後にリセットされるが、レジスタＲ3 は着目画素Ｐ00からの誤差を加算した後にリセットされる。従って、レジスタＲ3 はレジスタＲ4 に対して、着目画素１つ分だけ遅れてリセットされることになる。
【０１１５】
図１２（ｂ）に示すように、着目画素が画素Ｐ00から画素Ｐ01に移動すると、レジスタＲ3 には、それまでの画素Ｐ1-1 に代えて新たな画素Ｐ12が割り振られる。画素Ｐ12は着目画素Ｐ01に対して右下に位置する画素であるから、レジスタＲ3 には、着目画素から右下の画素へ拡散される誤差Ｅ01＿RDが加算されることになる。レジスタＲ3 の値は先にリセットされているので、着目画素Ｐ01からの誤差が加算される時点では、レジスタＲ3 には加算されている誤差はない。着目画素が画素Ｐ02に移動すると、図１２（ｃ）に示すように、レジスタＲ3 には、着目画素から真下の画素に拡散される誤差Ｅ02＿D が、既に加算されている誤差Ｅ01＿RDに加えて加算される。更に、着目画素が次の画素Ｐ03に移動した時点で、レジスタＲ3 には、画素Ｐ01ないし画素Ｐ03の連続する３つの着目画素からの誤差が蓄積されることになり、レジスタＲ3 に蓄積された値が誤差バッファに書き込まれることになる。前述したレジスタＲ4 に蓄積された誤差は、着目画素Ｐ02からの誤差を加算した後に誤差バッファに書き込まれたが、レジスタＲ3 については、画素１つ分だけ遅れて、着目画素Ｐ03からの誤差を加算した後に誤差バッファに書き込まれることになる。
【０１１６】
レジスタＲ2 については、レジスタＲ3 に対して、更に着目画素１つ分だけタイミングが遅れることになる。すなわち、レジスタＲ3 については、図１２（ａ）に示すように、着目画素Ｐ00からの誤差を加算した後に、レジスタに蓄積した値が誤差バッファに書き込まれてレジスタがリセットされたが、レジスタＲ2 については、着目画素Ｐ01からの誤差を加算した後にレジスタに蓄積された値が誤差バッファに書き込まれてレジスタがリセットされることになる。
【０１１７】
このように、レジスタＲ2 ないしレジスタＲ4 の３つのレジスタには、着目画素が移動する度に、連続する３つの着目画素からの誤差が順番に蓄積されて、誤差バッファに順次書き込まれていく。
【０１１８】
以上、説明したように、４つのレジスタのうち、レジスタＲ1 は次の画素のドット形成有無の判断に使用する誤差を記憶し、レジスタＲ2 ないしレジスタＲ4 の３つのレジスタは階調誤差を順次蓄積していくために使用すれば、１画素のドット形成有無を判断する度に、連続する３画素分の誤差の蓄積が終了した画素から、１画素分ずつ誤差バッファに書き込んでいくことができる。
【０１１９】
Ｃ−２．第２実施例の階調数変換処理：
図１３は、以上に説明した第２実施例の階調数変換処理の流れを示すフローチャートである。この処理も第１実施例の階調数変換処理と同様に、コンピュータ１００のＣＰＵ１０２によって行われる。尚、以下の説明では、インクの色あるいはドットの大きさを特定せずに説明するが、各色毎に、あるいは各種大きさのドットについて同様の処理を行う。以下では、図１３のフローチャートに従って、第１実施例の階調数変換処理との相違点を中心に、第２実施例の階調数変換処理について説明する。
【０１２０】
第２実施例の階調数変換処理を開始すると、着目画素についての画像データＣd と拡散誤差Ｅd とをＲＡＭ１０６から読み込み（ステップＳ４００）。続いて、画像データＣd と、拡散誤差Ｅd と、レジスタＲ1 に記憶されている誤差とを加算することにより、補正データＣx を算出する（ステップＳ４０２）。補正データＣx を算出したら、レジスタＲ1 はリセットしておく（ステップＳ４０４）。こうして得られた補正データＣx と所定の閾値ｔh とを比較して（ステップＳ４０６）、補正データの方が大きければドットを形成すると判断して、判断結果を示す変数Ｃr にドットを形成することを意味する値「１」書き込む（ステップＳ４０８）。そうでなければドットを形成しないと判断して、変数Ｃr にドットの形成しないことを意味する値「０」を書き込む（ステップＳ４１０）。
【０１２１】
こうしてドット形成有無を判断したら、これに伴って発生する階調誤差Ｅを算出する（ステップＳ４１２）。階調誤差Ｅは、第１実施例と同様に、補正データＣx から、着目画素での結果値（ドットを形成することにより、あるいはドットを形成しないことにより着目画素で表現される階調値）を減算することで求められる。
【０１２２】
次いで、誤差拡散マトリックスによって画素位置毎に定まる所定の誤差拡散係数とステップＳ４１２で求めた階調誤差Ｅとを乗算し、画素位置毎に求められた誤差を、各レジスタに加算していく。先ず、着目画素から右隣の画素に拡散される誤差をレジスタＲ1 に加算する（ステップＳ４１４）。次いで、レジスタＲ2 ないしレジスタＲ4 の３つのレジスタにそれぞれの誤差を加算していく。これら３つのレジスタの中で、連続する着目画素の３つ目の画素からの誤差が加算されるレジスタ、すなわち図１２の中で星印を付して示したレジスタには、予めフラグを設定しておく。こうしてフラグの設定されているレジスタには、着目画素の左下の画素に拡散する誤差を加算する（ステップＳ４１６）。図６（ａ）の誤差拡散マトリックスに示されるように、着目画素の左下の画素には、階調誤差Ｅと誤差拡散係数Ｋ1-1 とを乗算した値が配分される。誤差を加算していく３つのレジスタのうち、フラグの設定されたレジスタの１つ前のレジスタには、着目画素の直ぐ下の画素に配分すべき誤差を加算する（ステップＳ４１８）。着目画素の真下の画素に配分する誤差は、階調誤差Ｅと誤差拡散係数Ｋ10とを乗算して求められる。ここで、フラグの設定されたレジスタの１つ前のレジスタとは、例えば、図１２（a)に示すように星印がレジスタＲ3 に設定されている場合はレジスタＲ2 、図１２（ｂ）に示すように星印がレジスタＲ2 に設定されている場合はレジスタＲ4 のレジスタを指す。３つのレジスタの中の残りのレジスタには、着目画素の右下の画素に配分すべき誤差、すなわち階調誤差Ｅと誤差拡散係数Ｋ11とを乗算した値を加算する（ステップＳ４２０）。
【０１２３】
こうして階調誤差Ｅに所定の誤差拡散係数を乗算した値を、各レジスタに加算したら、フラグのセットされているレジスタに蓄積されている拡散誤差を、着目画素の左下の画素に対応する誤差バッファに書き込む（ステップＳ４２２）。例えば、図１２（ｃ）に示すように着目画素が画素Ｐ02にある場合は、画素Ｐ11に対応する位置の誤差バッファに誤差を書き込んでやる。フラグのセットされたレジスタＲ4 には画素Ｐ00と画素Ｐ01と画素Ｐ02のそれぞれの画素から配分されてきた誤差が蓄積されており、図５に示した通常の誤差拡散法と比較すれば、第２実施例の処理においても実質的に同等の処理が行われていることが分かる。こうして、蓄積した誤差を誤差バッファに書き込んだら、新たに配分されてくる誤差を蓄積するためにレジスタをリセットしておく（ステップＳ４２４）。
【０１２４】
以上のようにして１つの着目画素についての処理を終了したら、フラグを現在のレジスタの１つ前のレジスタに移動させた後（ステップＳ４２６）、全画素について処理を終了したか否かを判断し（ステップＳ４２８）、未処理の画素が残っていればステップＳ４００に戻って、全画素についての処理が終了するまで続く一連の処理を繰り返す。全画素についての処理が終了したら、第２実施例の階調数変換処理を抜けて、図４の画像データ変換処理に復帰する。
【０１２５】
尚、ステップＳ４１４において、誤差をレジスタＲ1 に加算する代わりに、レジスタＲ1 に上書きすることとしてもよい。こうすれば、ステップＳ４０４においてレジスタＲ1 をリセットする処理を省略することができるので好ましい。同様に、ステップＳ４２０において、残りのレジスタに誤差を加算する処理を上書きする処理に変更すれば、ステップＳ４２４においてレジスタをリセットする処理を省略することが可能となるので好ましい。
【０１２６】
以上、説明した第２実施例の階調数変換処理においては、１つの画素のドット形成有無を判断する度に、１つの画素の拡散誤差を誤差バッファに書き込むだけでよい。従って、通常の誤差拡散法に対して、誤差バッファに誤差を拡散するための時間を大きく短縮化することができる。前述したように、階調数変換処理に通常の誤差拡散法を用いた場合、誤差の拡散に要する時間は階調数変換処理に要する時間の中で比較的大きな割合を占めている。このことから、第２実施例の階調数変換処理を採用すれば処理時間が短縮化され、延いては画像を迅速に印刷することが可能となる。
【０１２７】
尚、前述の第１実施例の階調数変換方法を用いた場合でも、誤差を拡散するために要する時間を短縮化することができるが、第２実施例の方法を採用すれば、誤差の拡散時間を更に効率よく短縮化することができる。すなわち、通常の誤差拡散法と比較した場合、前述の第１実施例の方法を使用した場合、１回のドット形成判断あたりでは２．５画素分の頻度で誤差を誤差バッファに加算するだけで足りていたが、第２実施例の方法を使用すれば、１回のドット形成判断あたりに誤差を書き込む頻度を１画素分にまで減少させることができる。また、図７に示した第１実施例の場合では、中間バッファとして６つのレジスタを使用したが、第２実施例の方法の場合は４つのレジスタを使用しているだけであり、その分だけＣＰＵ１０２のレジスタを他の目的に使用することが可能になる。
【０１２８】
Ｃ−３．変形例：
上述した第２実施例の階調数変換処理においては、着目画素で発生した誤差を４つのレジスタに蓄積しているが、このうちのレジスタＲ1 と、他の３つのレジスタＲ2 ないしレジスタＲ4 とでは、レジスタの使い方が若干異なっている。すなわち、レジスタＲ1 については、着目画素の右隣の画素に配分すべき誤差が常に上書きされるが、他の３つのレジスタについては、着目画素に対する相対位置は一定ではなく、着目画素が移動する度に移動していた。
【０１２９】
これに対して、図１４に示すように、各レジスタの対応する画素位置を着目画素に対して固定することとしてもよい。すなわち、例えば、レジスタＲ1 には着目画素の右隣の画素に配分すべき誤差が常に上書きされ、レジスタＲ2 には着目画素の右下の画素に配分すべき誤差が、レジスタＲ3 には着目画素の真下の画素に配分すべき誤差が、レジスタＲ4 には着目画素の左下の画素に配分すべき画素が常に加算されるようにしてもよい。このように、各レジスタと着目画素との位置関係を固定した上で、後述するように、着目画素の移動に合わせて各レジスタに蓄積されている誤差を、順次となりのレジスタに移し替えていくのである。こうすれば、常に同じレジスタに蓄積されている誤差を誤差バッファに書き込めがよいので、レジスタから誤差バッファに拡散誤差を書き込む処理を簡素化することができる。また、各レジスタで使用される誤差拡散係数も常に同じ値となるので、着目画素で発生した階調誤差から各レジスタに加算する誤差を算出する処理も、簡素化することが可能となる。
【０１３０】
以下、このような第２実施例の変形例としての階調数変換処理について、図１５を参照しながら簡単に説明する。図１５（ａ）は、着目画素Ｐ00についてのドット形成有無を判断した状態を示している。図の右側に示されている４つの矩形は、各レジスタを模式的に示したものである。レジスタＲ1 には、常に着目画素の右側の画素に配分すべき誤差が上書きされる。また、レジスタＲ2 には、常に着目画素の右下の画素に配分すべき誤差が加算され、レジスタＲ3 には着目画素の真下の画素に配分すべき誤差が、レジスタＲ4 には着目画素の左下の画素に配分すべき誤差が加算される。
【０１３１】
このように、各レジスタには、着目画素に対して常に同じ位置の画素に配分すべき誤差が加算されるので、それぞれの誤差拡散係数は常に同じ値となる。すなわち、レジスタＲ1 の誤差拡散係数は、常に着目画素の右側の画素への誤差拡散係数Ｋ01であり、レジスタＲ2 の誤差拡散係数は、常に着目画素の右下の画素への誤差拡散係数Ｋ11である（図６参照）。同様に、レジスタＲ3 の誤差拡散係数は常にＫ10であり、レジスタＲ4 の誤差拡散係数は常にＫ1-1 となる。こうして、各レジスタの誤差拡散係数が常に同じ値となるので、着目画素で発生した階調誤差から、各レジスタに加算すべき誤差の算出を容易に行うことができる。
【０１３２】
着目画素で発生した階調誤差Ｅ00を各レジスタに加算したら、レジスタＲ4 に蓄積されている誤差の値を誤差バッファに書き込む処理を行うと同時に、各レジスタに蓄積されている値を１つずつとなりのレジスタにシフトさせる。すなわち、レジスタＲ3 の値をレジスタＲ4 に移動させ、レジスタＲ2 の値をレジスタＲ3 に移動させる（図１５（ａ）の下方を参照）。
【０１３３】
以上の処理を終了したら、次いで、着目画素を画素Ｐ01に移して、再び同様の処理を行う。着目画素Ｐ01で発生した階調誤差Ｅ01を、所定の誤差拡散係数をかけてそれぞれのレジスタに加算したら、レジスタＲ4 に蓄積されている値を誤差バッファに書き込む処理を行う。先に、各レジスタに記憶されている値を１つずつシフトする処理を行っているので、図１５（ｂ）に示すように各レジスタへ誤差を加算する処理が終了した時点では、レジスタＲ4 には常に３つの画素からの誤差が蓄積されていることになる。従って、第２実施例の変形例においては、常に同じレジスタに蓄積されている誤差を誤差バッファに書き込んでやればよい。このため、レジスタから誤差バッファに拡散誤差を書き込む処理を簡素化することができる。尚、図１５に示した処理では、各レジスタに蓄積されている誤差をとなりのレジスタにシフトさせる処理が新たに加わるが、このようなレジスタ間で値を移動させる処理はたいへん迅速に行うことができるので、そのことによる処理時間の増加は小さなものである。
【０１３４】
上述した第２実施例の階調数変換処理あるいは第２実施例の変形例の階調数変換処理においては、説明が煩雑になるのを避けるために、いずれも誤差拡散マトリックスは誤差の拡散範囲の最も狭い図６（ａ）のマトリックスを使用するものとして説明した。もっとも、使用する誤差拡散マトリックスは図６（ａ）のマトリックスに限定されることなく、他のマトリックスを使用しても良いことはもちろんである。また、第１実施例における場合と同様に、キャッシュメモリを活用することにより、実質的に同様の処理を行っても良いことはもちろんである。
【０１３５】
また、第２実施例の階調数変換方法においても、周辺の画素に拡散すべき中間的な拡散誤差をレジスタに加算しておくのではなく、階調誤差そのものを中間バッファに記憶しておき、新たな階調誤差を記憶する度に、誤差バッファに書き込むべき最終的な拡散誤差を算出するようにしても良い。かかる方法は、レジスタに記憶される値が蓄積中の拡散誤差であるか、階調誤差であるかの違いがあるものの、誤差バッファに書き込まれる誤差は同じ値となるので、実質的に同等の処理を行うことができる。
【０１３６】
Ｄ．第３実施例：
以上に説明した各実施例では、常に同じ誤差拡散マトリックスを使用して誤差を拡散するものとして説明したが、現実の階調数変換処理においては、画質上の要請から、図６（ａ）のような拡散範囲の狭い誤差拡散マトリックスと、図６（ｃ）のような拡散範囲の広いマトリックスとを切り替えて使用する場合がある。
【０１３７】
すなわち、誤差拡散法では、ドットが特定の周期的なパターンで形成されることを防ぐために、複数種類の誤差拡散マトリックスをランダムに切り替えながら使用することがある。また、特開平７−２２６８４１号には、画像データの階調値が十分に小さな所定の閾値よりも小さく、かつドットを形成すると判断されている場合に、拡散範囲の広い誤差拡散マトリックスを用いて誤差を拡散させることによって、ドット密度が疎な領域での、ドットの分散性を改善する技術が開示されている。こうすることで、ドットの分散性を改善可能な理由については説明を省略するが、ここでは、特開平７−２２６８４１号に開示された技術に従って、画像データの階調値が十分に小さな所定の閾値ｔｈｍよりも小さく、かつドットを形成すると判断されている場合には、図６（ｃ）に示した誤差拡散範囲の広いマトリックスを使用し、それ以外の場合には図６（ａ）に示した誤差拡散範囲の狭いマトリックスを使用するものとする。このような場合に、以下に説明する第３実施例の方法を使用すれば、階調数変換処理に要する時間を効果的に短縮化することが可能となる。
【０１３８】
図１６は、２つの誤差拡散マトリックスを切り替えながら階調数変換処理を行う処理の流れを示したフローチャートである。以下、図１６のフローチャートに従って、第３実施例の階調数変換処理について説明する。尚、上述した各実施例の階調数変換処理と同様、説明が煩雑化することを避けるために、ドットの色やドットの大きさを区別せずに説明するが、以下の処理は各色インク毎に、あるいは各種大きさのドット毎に行われる。
【０１３９】
第３実施例の階調数変換処理を開始すると、先ず初めに着目画素の画像データＣd と拡散誤差Ｅd とを読み出す（ステップＳ５００）。画像データＣd と拡散誤差Ｅd とはＲＡＭ１０６に記憶されている。レジスタＲ1 に記憶されている左隣の画素からの誤差と、画像データＣd および拡散誤差Ｅd とを加算して補正データＣx を算出する（ステップＳ５０２）。求めた補正データＣx と所定の閾値ｔｈとを比較して（ステップＳ５０４）、補正データＣx の方が大きければ着目画素にドットを形成すると判断し（ステップＳ５０４：ｙｅｓ）、ドット形成判断の結果を表す変数Ｃr にドットを形成することを意味する値「１」を書き込んだ後（ステップＳ５０６）、ドットを形成したことにより着目画素に生じる階調誤差を算出する（ステップＳ５０８）。補正データＣx が所定の閾値ｔｈよりも小さければ（ステップＳ５０４：ｎｏ）、変数Ｃr にドットを形成しないことを意味する値「０」を書き込んで（ステップＳ５１０）、そのことにより着目画素に生じる階調誤差を算出する（ステップＳ５１２）。
【０１４０】
着目画素にドットを形成している場合には、着目画素の画像データＣd と誤差拡散マトリックスを切り替えるための所定の閾値ｔｈｍとを比較する（ステップＳ５１４）。画像データＣd が閾値ｔｈｍよりも小さい場合は（ステップＳ５１４：ｎｏ）、小さな画像データの領域にたまたまドットが形成されたものと考えられるので、誤差拡散範囲の広い誤差拡散マトリックス（ここでは、図６（ｃ）に示したマトリックス）に従って、それぞれの誤差拡散係数を設定する（ステップＳ５１６）。すなわち図６（ｃ）に示すように、着目画素の真下の画素の誤差拡散係数Ｋ10には１／４を設定し、着目画素の右隣の画素、右下の画素、および左下の画素のそれぞれの誤差拡散係数Ｋ01、Ｋ11、Ｋ1-1 には１／８を設定する。着目画素から更に遠くにある画素の誤差拡散係数Ｋ02、Ｋ03、Ｋ12、Ｋ13、Ｋ1-2 ，Ｋ1-3 には１／１６を設定する。
【０１４１】
次いで、着目画素から遠方にある６つの画素については、階調誤差と各画素の誤差拡散係数とを乗算した値をそれぞれの誤差バッファに直接加算する（ステップＳ５１８）。これを、図１７を用いて説明する。図１７は着目画素Ｐ00についてドット形成有無を判断し、その結果、階調誤差Ｅ00が発生した状態を示している。この階調誤差Ｅ00は、図６（ｃ）に示す誤差拡散マトリックスを用いて広い範囲に拡散する。すなわち、通常は図１７中に太い破線で囲った４つの画素に誤差を拡散させるが、画素Ｐ00の階調誤差Ｅ00は破線の外側にある画素Ｐ02、画素Ｐ03、画素Ｐ12、画素Ｐ13、画素Ｐ1-2 、および画素Ｐ1-3 の６つの画素にも誤差を拡散させる。ステップＳ５１８の処理においては、これら６つの画素について、階調誤差Ｅ00とそれぞれの画素の誤差拡散係数とを乗算した値を、各画素の誤差バッファに直接加算するのである。
【０１４２】
遠方の画素の誤差バッファに誤差を加算したら、破線の内側にある各画素のレジスタに誤差を拡散する（ステップＳ５２２）。すなわち、第３実施例の階調数変換処理においては、着目画素の遠方の画素については誤差バッファに直接誤差を加算するが、着目画素周辺の各画素については前述の第１実施例あるいは第２実施例と同様に中間バッファを利用して誤差を拡散するのである。以下では、第２実施例の変形例の方法に準じて誤差を拡散する場合、すなわち各レジスタには、着目画素に対して常に同じ位置関係にある画素への誤差が加算される場合を例にとって説明する。
【０１４３】
先ず、着目画素の右側の画素への誤差拡散係数Ｋ01と階調誤差Ｅ00とを乗算した値で、レジスタＲ1 の値を更新する。次に、誤差拡散係数Ｋ11と階調誤差Ｅ00とを乗算した値をレジスタＲ2 に加算し、誤差拡散係数Ｋ01と階調誤差Ｅ00とを乗算した値をレジスタＲ3 に加算し、誤差拡散係数Ｋ1-1 と階調誤差Ｅ00とを乗算した値をレジスタＲ4 に加算する（図１５（ａ）を参照）。ステップＳ５２２では以上の処理を行う。続いて、レジスタＲ4 に蓄積されている値を対応する画素の誤差バッファに加算する処理を行う（ステップＳ５２４）。図１７に示すように、ここでは着目画素は画素Ｐ00であるから、画素Ｐ1-1 の誤差バッファにレジスタＲ4 の値を加算すればよい。誤差バッファへ加算する処理が終了したら、レジスタＲ3 に蓄積されている値をレジスタＲ4 に、レジスタＲ2 に蓄積されている値をレジスタＲ3 にシフトさせる（ステップＳ５２６）。各レジスタの値をシフトする処理を行った後、レジスタＲ2 の値をリセットしておく（ステップＳ５２８）。
【０１４４】
一方、着目画素にドットを形成していない場合（ステップＳ５０４：ｎｏ）、あるいは着目画素にドットを形成していても画像データＣd が所定の閾値ｔｈｍより大きい場合（ステップＳ５１４：ｙｅｓ）には、誤差拡散範囲の狭い方のマトリックス（ここでは図６（ａ）に示したマトリックス）に従って、それぞれの誤差拡散係数を設定する（ステップＳ５１８）。すなわち図６（ａ）の誤差拡散マトリックスに従って、着目画素周辺の４つの画素の誤差拡散係数に１／４を設定する。こうして設定された誤差拡散係数を用いて、上述したステップＳ５２２ないしステップＳ５２８の処理を行うことにより、レジスタＲ4 に蓄積された誤差が誤差バッファに加算される。
【０１４５】
以上のようにして着目画素のドット形成有無を判断し、１画素についての拡散誤差を誤差バッファに書き込んだら、すべての画素について処理を終了したか否かを判断する（ステップＳ５３０）。未処理の画素が残っている場合は、再びステップＳ５００に戻って、新たな着目画素についての画像データと拡散誤差とをＲＡＭ１０６から読み込み、これらの値とレジスタＲ1 に記憶されている誤差とを用いて補正データＣx を算出する（ステップＳ５０２）。以降、未処理の画素がなくなるまで以上のような一連の処理を繰り返し、全画素について処理を終了したら、第３実施例の階調数変換処理を抜けて図４に示す画像データ変換処理に復帰する。
【０１４６】
上述した第３実施例の方法を用いて階調数変換処理を行えば、拡散範囲の広い誤差拡散マトリックスと、拡散範囲の狭い誤差拡散マトリックスとを切り替えながら階調数変換処理を行う場合に、処理時間を効率よく短縮化することができる。すなわち、図６（ｃ）に示した拡散範囲の広い誤差拡散マトリックスを使用する場合、すべての誤差をレジスタに蓄積しようとすると、多数のレジスタが必要となる。図１７を参照して説明すると、破線で囲った範囲の内側にある４画素分のレジスタと、破線の外側の６画素分のレジスタとを加えた１０画素分のレジスタを使用する。これらレジスタに誤差を加算するために、フラグを使用する第２実施例の方法を用いるにせよ、レジスタの値をシフトさせる第２実施例の変形例の方法を用いるにせよ、レジスタの数があまりに多くなれば、レジスタの操作に時間が必要となって、全体としての処理時間を増加させる。
【０１４７】
これに対して、上述した第３実施例の方法を用いれば、たとえ非常に広い範囲に誤差を拡散するマトリックスを用いた場合でも、誤差を加算するレジスタの数を増加させずに階調数変換処理を行うことができるので、全体として処理が簡素化され、処理時間が増加することを回避することが可能となる。
【０１４８】
特に、前述したように、拡散範囲の広い誤差拡散マトリックスは、画像データの階調値が十分小さく、かつドットを形成すると判断された場合に使用される。画像データの階調値が十分に小さければ、ドットを形成すると判断される確率は小さいことから、拡散範囲の広い誤差拡散マトリックスは使用頻度の低いマトリックスであると言える。従って、ごく稀に広い範囲に誤差を拡散しなければならない場合には、多少時間がかかっても誤差バッファに直接誤差を加算することとし、それほど広い範囲に拡散させる必要のない通常の場合は、中間バッファを活用して迅速に誤差を拡散させることで、全体として階調数変換処理を迅速に行うことができる。また、広い範囲に拡散する場合には、遠方の画素の誤差バッファには直接誤差を加算することとすれば、それだけ中間バッファとして使用するレジスタの数を節約することができ、浮いたレジスタを他の処理に使用することで、更に処理を効率化することが可能となる。
【０１４９】
尚、上述の第３実施例においては、誤差拡散マトリックスを切り換えることとし、拡散範囲の広い誤差拡散マトリックスが選択されている場合にのみ、遠方の画素の直接誤差を拡散させるものとしたが、必ずしも、マトリックスの切換を行う場合に限定されるものではない。例えば、使用する誤差拡散マトリックスが拡散範囲の広いマトリックスである場合に、遠方の画素には直接誤差を拡散して記憶させ、近傍の画素には、中間バッファを活用することにより、所定画素数の階調誤差に基づき、まとめて誤差を拡散させるようにしても良い。こうすれば、まとめて誤差を拡散して記憶させるために必要な中間バッファを節約することが可能となる。
【０１５０】
また、以上に説明した第３実施例においても、中間バッファを活用することによって、所定画素数の階調誤差から、周辺画素へ拡散誤差をまとめて拡散して記憶させるために方法には、第１実施例ないし第２実施例として説明した各種の方法を好適に適用可能であることは言うまでもない。
【０１５１】
Ｅ．第４実施例：
上述した各種実施例の方法は、最終的には、階調誤差を周辺画素の誤差バッファに配分している。この意味からは、いわゆる誤差拡散法と呼ばれる方法に類似する手法と考えることができる。もちろん、いわゆる平均誤差最小法と呼ばれる方法のように、ドット形成有無の判断によって発生した階調誤差を着目画素に記憶しておき、未判断画素のドット形成有無の判断に際しては、周辺画素から階調誤差を読み出してドット形成判断を行う場合にも、中間バッファを活用することでドット形成判断に要する時間を短縮化することが可能である。以下では、このような方法を用いて階調数変換処理を行う第４実施例について説明する。
【０１５２】
Ｅ−１．第４実施例において階調数変換処理の時間を短縮化する原理：
図１８は、第４実施例の方法において、中間バッファを活用することによってドット形成有無の判断に要する時間を短縮化する原理を示す説明図である。図１８（ａ）は、着目画素Ｐ00についてドットの形成有無を判断している様子を示している。第４実施例の方法を説明する準備として、いわゆる平均誤差最小法と呼ばれる方法を、図１８（ａ）を流用して簡単に説明しておく。
【０１５３】
平均誤差最小法では、ドット形成有無の判断によって生じた階調誤差を、その画素に対応する誤差バッファに記憶しておく。これを、図１８（ａ）に則して説明すると、左側の図中に例えば「Ｅ0-1 」とあるのは画素Ｐ0-1 で発生した階調誤差を示しており、画素Ｐ0-1 の枠内にＥ0-1 と表示することによって、階調誤差Ｅ0-1 が画素Ｐ0-1 の誤差バッファに記憶されていることを模式的に示している。また、図中に斜線が付されているのは、ドット形成判断済みであることを示している。図示されているように、平均誤差最小法では、ドット形成有無の判断済みの画素にそれぞれの階調誤差が記憶されている。未判断の着目画素Ｐ00についてドット形成有無を判断する場合には、周辺の判断済みの画素からそれぞれの階調誤差を読み出して、これらの誤差を考慮しながら着目画素Ｐ00のドット形成有無を判断する。より詳細には、図１９にいくつか例示されているように、周辺画素の着目画素に対する相対位置に応じて所定の重み係数が予め定められており、周辺の各画素から読み出した誤差に所定の重み係数をかけた値で、着目画素の画像データを補正することにより補正データを算出する。尚、図１９では斜線が付されている画素が着目画素であり、各画素に表示されている数値がその画素に設定されている重み係数である。こうして求めた補正データと所定の閾値とを比較することによって、着目画素についてのドット形成有無を判断する。着目画素についてドット形成有無を判断したら、そのことで生じる階調誤差を算出し、算出した階調誤差を着目画素の誤差バッファに記憶する。平均誤差最小法では、以上のような処理を繰り返すことによって、画素毎にドットの形成有無の判断を行う。
【０１５４】
上述したように、平均誤差最小法を用いてドット形成有無を判断するためには、１つの画素についての判断を行う度に、誤差バッファから複数の画素の階調誤差を読み出さなければならず、ドット形成有無の判断するためにある程度の時間が必要となる。
【０１５５】
これに対して、以下に説明する第４実施例の階調数変換処理においては、数学的には上述の平均誤差最小法と等価な処理を行いながらも、中間バッファを活用することによって、ドット形成の有無を迅速に判断することが可能となっている。以下、図１８を参照しつつ、前述の平均誤差最小法と対比することにより、第４実施例の階調数変換処理において処理時間を短縮化する原理について説明する。尚、説明の煩雑化を避けるために、以下では、図１９（ａ）に示した重み係数の設定に従って、周辺画素の階調誤差を考慮するものとする。
【０１５６】
図１８（ａ）は、第４実施例の階調数変換処理において着目画素Ｐ00についてのドット形成有無を判断している様子を示す説明図である。着目画素Ｐ00についてのドット形成有無の判断には、前述した平均誤差最小法と同様に、画素Ｐ-1-1で発生した階調誤差Ｅ-1-1と、画素Ｐ-10 で発生した階調誤差Ｅ-10 と、画素Ｐ-11 で発生した階調誤差Ｅ-11 と、画素Ｐ0-1 で発生した階調誤差Ｅ0-1 とを使用する。図１８（ａ）の右側の４つの矩形は、中間バッファとして使用される４つのレジスタを模式的に示したものである。説明の便宜から、ここでは各レジスタにＲ1 ，Ｒ2 ，Ｒ3 ，Ｒ4 とそれぞれ符合を付して区別することにする。
【０１５７】
各レジスタには、着目画素に対して所定の位置関係にある画素の階調誤差が上書きされる。すなわち、レジスタＲ1 には、常に着目画素の右上にある画素での階調誤差が記憶され、レジスタＲ2 には、着目画素の真上にある画素での階調誤差が記憶され、レジスタＲ3 には、着目画素の左上の画素の階調誤差が、レジスタＲ4 には左隣の画素の階調誤差が記憶される。各レジスタにそれぞれの階調誤差を記憶する処理については後述する。
【０１５８】
第４実施例の階調数変換処理では、これら４つのレジスタに記憶されている各画素での階調誤差と、予め画素毎に設定されている重み係数とを考慮して、着目画素での補正データを算出する。つまり、前述した平均誤差最小法では、各画素での階調誤差を誤差バッファから読み出すのに対して、ここでは各レジスタに予め記憶されているところが大きく異なっている。こうして求めた補正データと所定の閾値とを比較することにより、着目画素についてのドット形成有無を判断する。ドット形成有無を判断したら、続いて着目画素Ｐ00での階調誤差Ｅ00を算出する。階調誤差は、補正データと着目画素での結果値との差を取ることによって求めることができる。
【０１５９】
こうして、着目画素についての階調誤差Ｅ00が求められたら、新たな着目画素についてのドット形成判断を行うために、各レジスタに対して図１８（ｂ）に示す操作を加える。先ず、レジスタＲ4 に記憶されている誤差を誤差バッファに書き込む。図１８（ａ）を用いて説明したように、レジスタＲ4 には、常に着目画素の左隣の画素で生じた階調誤差が記憶されているので、レジスタＲ4 の値は着目画素の左隣の画素の誤差バッファに上書きしてやる。次いで、先程求めた画素Ｐ00についての階調誤差Ｅ00をレジスタＲ4 に上書きし、更にレジスタＲ2 の値をレジスタＲ3 に、レジスタＲ1 の値をレジスタＲ2 にそれぞれ移動させる。すなわち、着目画素が画素Ｐ00から右隣の画素Ｐ01に移動することに対応して、各レジスタの値を移動させるのである。これらの処理は、ＣＰＵ１０２内部のレジスタ間でデータを移動させるだけでよいので、極めて迅速に行うことができる。最後に、新たな着目画素の右上の画素での階調誤差を誤差バッファから読み出して、レジスタＲ1 に記憶させる。
【０１６０】
以上のような操作を加えることにより、各レジスタに記憶されている値は、図１８（ａ）の右側に示した状態から図１８（ｃ）の状態となる。図１８（ａ）と図１８（ｃ）とを比較すれば明らかなように、図１８（ｃ）の各レジスタに記憶されている値は、図１８（ａ）において着目画素を画素Ｐ00から画素Ｐ01に変更したときの各レジスタの値となっている。従って、以上のような処理を繰り返し行えば、次々に新たな画素のドット形成判断を行うことができる。このように、第４実施例の方法では、続けて使用する階調誤差はレジスタに蓄えておくことによって、誤差バッファから階調誤差を読み出す頻度を大きく軽減させることが可能となるのである。
【０１６１】
Ｅ−２．第４実施例の階調数変換処理：
以下、上述した第４実施例の階調数変換処理を、実際に行うための処理の流れについて簡単に説明する。図２０は、第４実施例の階調数変換処理の流れを示したフローチャートである。尚、上述した各種実施例の階調数変換処理と同様に、説明の煩雑化を避けるために、以下ではインクの種類やドットの大きさを特定せずに説明するが、各色毎に、あるいは各種大きさのドット毎に同様の処理が行われる。
【０１６２】
第４実施例の階調数変換処理を開始すると、先ず初めに着目画素の画像データＣd を読み出し（ステップＳ６００）、続いて着目画素の右上の画素の階調誤差を誤差バッファから読み出してレジスタＲ1 に記憶する（ステップＳ６０２）。この結果、図１８を用いて説明したように、各レジスタには着目画素周辺の各画素での階調誤差が記憶される。
【０１６３】
次いで、各レジスタに記憶されている誤差と所定の重み係数とを、レジスタ毎に乗算して、着目画素の補正データＣx を算出する（ステップＳ６０４）。図１９に示したように、着目画素周辺の画素には、画素毎に所定の重み係数が定められているので、これら所定の重み係数と記憶されている誤差とをレジスタ毎に乗算し、得られた各条算値と先に読み出した画像データＣd とを加算することにより、着目画素の補正データＣx を算出するのである。こうして求めた補正データＣx と所定の閾値ｔｈとを比較する（ステップＳ６０６）。補正データＣx の方が大きければ着目画素にドットを形成すると判断して、判断結果を示す変数Ｃr にドットを形成することを意味する値「１」を書き込み（ステップＳ６０８）、そうでなければドットを形成しないことを意味する値「０」を書き込む（ステップＳ６１０）。続いて、かかる判断結果によって着目画素に生じる階調誤差を算出する（ステップＳ６１２）。階調誤差は、前述した各種実施例と同様に、着目画素の補正データから結果値を減算することで求められる。
【０１６４】
以上のようにして着目画素での階調誤差が求められたら、図１８（ｂ）を用いて説明したように、各レジスタに次のような一連の操作を加える。先ず、レジスタＲ4 に記憶されている階調誤差を、誤差バッファに書き込む（ステップＳ６１４）。次ぎに、ステップＳ６１２で求めた階調誤差を、レジスタＲ4 に書き込む（ステップＳ６１６）。続いて、レジスタＲ2 の値をレジスタＲ3 に移動し（ステップＳ６１８）、レジスタＲ1 の値をレジスタＲ2 に移動させる（ステップＳ６２０）。
【０１６５】
以上のようなレジスタの操作が終了したら、全画素についてドット形成判断を終了したか否かを判断し（ステップＳ６２２）、未判断の画素が残っていたら、ステップＳ６００に戻って、すべての画素について処理が終了するまで、続く一連の処理を繰り返す。すべての画素のドット形成有無を判断したら、第４実施例の階調数変換処理を抜けて、図４に示す画像データ変換処理に復帰する。
【０１６６】
以上に説明した第４実施例の階調数変換処理においては、１画素のドット形成有無を判断する度に、誤差バッファから１画素分の階調誤差を読み出すだけでよい。平均誤差最小法を適用する場合には、前述したように、１画素の判断を行う度に誤差バッファから４画素分の拡散誤差を読み出す必要があることと比較して、誤差バッファに対してデータを読み書きする頻度を減らすことができ、その分、階調数変換処理を迅速に行うことができる。もちろん、第４実施例の方法と平均誤差最小法とは、数学的には全く等価な処理を行っており、第４実施例の方法を用いれば、平均誤差最小法を用いた場合と同様に、高画質の画像を得ることができる。
【０１６７】
尚、上述した第４実施例においては、重み係数の設定として、図１９（ａ）に例示する値が設定されているものとして説明した。実際の重み係数は、図１９に例示する設定に限定されることなく、画質の要請に応じて種々の設定とすることができることは言うまでもない。また、上述の第４実施例では、図１９（ａ）に例示した設定を用いていることに対応して、中間バッファとして４つのレジスタを使用したが、使用する重み係数の設定に応じて、より多くのレジスタが必要になる場合があることはもちろんである。
【０１６８】
更に、上述した第４実施例においては、中間バッファとして、ＣＰＵ１０２に内蔵されたレジスタを用いるものとして説明したが、レジスタに限らず、キャッシュメモリなどの高速に読み書き可能な記憶素子を用いても良いことはもちろんである。
【０１６９】
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。
【０１７０】
例えば、上述の各種実施例においては、各画素の補正データと所定の閾値との大小関係に基づいてドットの形成有無を判断するものとして説明した。もちろん、ドット形成の有無を判断する方法は、前述した方法に限らず、周知の各種方法を適用することが可能である。
【０１７１】
また、上述の各種実施例においては、説明の煩雑化を避けるために、形成されるドットの種類は１種類として、各画素にはドットが形成されるか、形成され無いかの２つの状態しか取り得ないものとして説明した。もちろん、ドットの大きさ、あるいはインク濃度の異なる複数種類のドットを形成可能としてもよい。例えば、大・小の２種類のドットを形成可能として、次のようにしてドットの形成有無を判断しても良い。すなわち、２つの閾値ｔｈ１とｔｈ２（ただし、ｔｈ１＞ｔｈ２とする）を設定しておき、画素の補正データが閾値ｔｈ１より大きければ大ドットを形成すると判断し、閾値ｔｈ１より小さくかつ閾値ｔｈ２より大きければ小ドットを形成すると判断し、閾値ｔｈ２より小さい場合はドットを形成しないと判断する。各画素で発生する階調誤差は、その画素の補正データから結果値を減算することによって算出することができる。
【０１７２】
尚、以上の各種実施例においては、誤差バッファは論理的には各画素毎に用意されることになるが、実際上は数ラスタ分の誤差バッファのみを用意して、ドット形成有無が判断された画素の誤差バッファは、他の画素の誤差バッファとして転用される。説明の煩雑化を避ける目的で、上述の各種実施例では、あたかも全画素分の誤差バッファが用意されているかのように説明したが、数ラスタ分の誤差バッファを繰り返し使用しても構わないのはもちろんである。
【０１７３】
また、上述の機能を実現するソフトウェアプログラム（アプリケーションプログラム）を、通信回線を介してコンピュータシステムのメインメモリまたは外部記憶装置に供給し実行するものであってもよい。もちろん、ＣＤ−ＲＯＭやフレキシブルディスクに記憶されたソフトウェアプログラムを読み込んで実行するものであっても構わない。
【０１７４】
また、上述した各種実施例では、階調数変換処理を含む画像データ変換処理はコンピュータ内で実行されるものとして説明したが、画像データ変換処理の一部あるいは全部をプリンタ側、あるいは専用の画像処理装置を用いて実行するものであっても構わない。
【０１７５】
更には、画像表示装置は、必ずしも印刷媒体上にインクドットを形成して画像を印刷する印刷装置に限定されるものではなく、例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置であっても構わない。
【図面の簡単な説明】
【０１７６】
【図１】本実施例の印刷システムの概略構成図である。
【図２】本実施例の画像処理装置としてのコンピュータの構成を示す説明図である。
【図３】本実施例の画像表示装置としてのプリンタの概略構成図である。
【図４】本実施例の画像処理装置で行われる画像データ変換処理の流れを示すフローチャートである。
【図５】誤差拡散法を用いてドットの形成有無を判断する様子を概念的に示す説明図である。
【図６】画素毎に誤差拡散係数が設定されている様子を例示する説明図である。
【図７】第１実施例の階調数変換処理において処理時間を短縮化する原理を示す説明図である。
【図８】第１実施例の階調数変換処理の流れを示すフローチャートである。
【図９】第１実施例の階調数変換処理において１度に多数の画素の誤差を拡散する場合を示す説明図である。
【図１０】第１実施例の変形例の階調数変換処理の流れを示すフローチャートである。
【図１１】第２実施例の階調数変換処理において処理時間を短縮化する原理を示す説明図である。
【図１２】第２実施例の階調数変換処理において中間バッファと誤差バッファとでデータを読み書きする処理の概要を示す説明図である。
【図１３】第２実施例の階調数変換処理の流れを示すフローチャートである。
【図１４】各レジスタの対応する画素位置が着目画素に対して一定とした場合に、各レジスタと着目画素周辺の画素とが対応している様子を例示する説明図である。
【図１５】第２実施例の変形例の階調数変換処理において処理時間を短縮化する原理を示す説明図である。
【図１６】第３実施例の階調数変換処理の流れを示すフローチャートである。
【図１７】第３の実施例の階調数変換処理において拡散範囲の広いマトリックスを使用した場合と、拡散範囲の狭いマトリックスを使用した場合とで、階調誤差が拡散される範囲を比較して示す説明図である。
【図１８】第４実施例の変形例の階調数変換処理において処理時間を短縮化する原理を示す説明図である。
【図１９】第４実施例の変形例の階調数変換処理において、重み係数が画素毎に設定されている様子を例示する説明図である。
【図２０】第４実施例の階調数変換処理の流れを示すフローチャートである。
【符号の説明】
【０１７７】
１０...コンピュータ
１２...プリンタドライバ
２０...カラープリンタ
１００...コンピュータ
１０２...ＣＰＵ
１０４...ＲＯＭ
１０６...ＲＡＭ
１０８...周辺機器インターフェースＰ・Ｉ／Ｆ
１０９...ディスクコントローラＤＤＣ
１１０...ネットワークインターフェースカードＮＩＣ
１１２...ビデオインターフェースＶ・Ｉ／Ｆ
１１４...ＣＲＴ
１１６...バス
１１８...ハードディスク
１２０...デジタルカメラ
１２２...カラースキャナ
１２４...フレキシブルディスク
１２６...コンパクトディスク
２００...カラープリンタ
２３０...キャリッジモータ
２３５...紙送りモータ
２３６...プラテン
２４０...キャリッジ
２４１...印字ヘッド
２４２，２４３...インクカートリッジ
２４４...インク吐出用ヘッド
２６０...制御回路
２６１...ＣＰＵ
２６２...ＲＯＭ
２６３...ＲＡＭ
３００...通信回線
３１０...記憶装置
【図１】
2007202170.tif 000003
【図２】
2007202170.tif 000004
【図３】
2007202170.tif 000005
【図４】
2007202170.tif 000006
【図５】
2007202170.tif 000007
【図６】
2007202170.tif 000008
【図７】
2007202170.tif 000009
【図８】
2007202170.tif 000010
【図９】
2007202170.tif 000011
【図１０】
2007202170.tif 000012
【図１１】
2007202170.tif 000013
【図１２】
2007202170.tif 000014
【図１３】
2007202170.tif 000015
【図１４】
2007202170.tif 000016
【図１５】
2007202170.tif 000017
【図１６】
2007202170.tif 000018
【図１７】
2007202170.tif 000019
【図１８】
2007202170.tif 000020
【図１９】
2007202170.tif 000021
【図２０】
2007202170.tif 000022