(57)【要約】      （修正有）【課題】ハーフトーン処理で用いられるテーブルのサイズを削減する。【解決手段】プリンタの画像処理ＡＳＩＣ１５５は、ＲＡＭ１５２に記憶されたエンコードテーブルＥＴとプレデコードテーブルＤＴ１とポストデコードテーブルＤＴ２と順序値テーブルＳＴとを順次参照することで、画像データを構成する各画素についてハーフトーン処理を行い、印刷媒体上に形成されるドットの配置を決定する。このうち、エンコードテーブルＥＴには、ブロック番号毎に、エンコード値と階調値とが対応付けて記憶されており、各階調値は、隣接する階調値との差分によって表されている。【選択図】図３
2008092397.tif 000002
【特許請求の範囲】
【請求項１】
画像データの階調値に応じてドットの発生の有無を決定するための閾値が記録されたディザマトリックスに基づいて、画像データの印刷時に印刷媒体上に形成するドットの配置を決定する画像処理装置であって、
前記ディザマトリックスを、所定の個数の閾値のまとまりからなるブロックに分割し、該各ブロックに固有に割り当てたブロック識別子毎に、前記階調値を、当該階調値が取り得る範囲において前記閾値と順次比較して得られた前記ブロック内のドットの配置を表す各エンコード値に、該各エンコード値を生じる前記階調値を対応付けて記録したエンコードテーブルを記憶するエンコードテーブル記憶手段と、
前記画像データを入力する画像データ入力手段と、
前記入力した画像データを構成する各画素の位置と前記ディザマトリックス内に存在する各ブロックの位置とに基づき、該各画素に対応する前記ブロック識別子を弁別し、該ブロック識別子と前記各画素の階調値とに基づき前記エンコードテーブルを参照して、該各画素の階調値に対応する前記エンコード値を求めるエンコード手段と、
前記エンコード手段によって求めたエンコード値と、前記弁別されたブロック識別子とに応じて、前記各画素の位置に対応するブロック内に発生するドットの配置を決定するデコード手段とを備え、
前記エンコードテーブル記憶手段は、前記エンコードテーブル内の各エンコード値に対応する階調値を、同一ブロックに属する他の階調値との隔たりによって表して記憶している
画像処理装置。
【請求項２】
請求項１に記載の画像処理装置であって、
前記エンコードテーブル記憶手段は、前記階調値間の隔たりを、隣接する他の階調値との差分値によって表し、該差分値が、予め定めた所定のビット数で表現可能な最大値を超える場合に、該差分値を、前記最大値と、該最大値を除数とした除算における剰余とを含む複数の数値によって表す
画像処理装置。
【請求項３】
請求項２に記載の画像処理装置であって、
前記エンコードテーブル記憶手段は、前記除算において前記剰余の数がゼロの場合には、該ゼロの値を含めて前記複数の数値によって前記差分値を表し、
前記エンコード手段は、前記エンコードテーブルから前記差分値を順次読み込んで累積していき、該累積の度に、該累積値と、前記画素の階調値との比較を行って前記エンコード値を求めるものであり、前記読み込んだ値が、前記予め定めた所定のビット数で表現可能な最大値である場合には、前記比較を行う前に、前記剰余が読み込まれるまで前記累積を行う
画像処理装置。
【請求項４】
請求項２に記載の画像処理装置であって、
更に、前記ブロック識別子毎に、前記各エンコード値に対して、該エンコード値に応じて該ブロック内に発生する前記ドットの配置を対応付けて記録したデコードテーブルを記憶するデコードテーブル記憶手段を備え、
前記デコード手段は、前記デコードテーブルを参照して、前記エンコード手段によって求めたエンコード値と前記弁別されたブロック識別子とに基づき、前記ドットの配置を決定する
画像処理装置。
【請求項５】
請求項４に記載の画像処理装置であって、
前記エンコードテーブル記憶手段は、前記エンコードテーブル内のエンコード値の範囲を、前記複数の数値の個数に応じて拡張することで、前記差分値および複数の数値に対してそれぞれ固有のエンコード値を割り当て、
前記デコードテーブル記憶手段は、前記デコードテーブルに記録されたエンコード値の範囲を、前記拡張されたエンコード値の範囲に応じて拡張するとともに、該デコードテーブルの前記複数の数値に対応する各エンコード値に対しては、前記拡張前に該複数の数値によって表された差分値に該当するエンコード値に対応付けられていたドットの配置をそれぞれ対応付ける
画像処理装置。
【請求項６】
請求項２ないし請求項５のいずれかに記載の画像処理装置であって、
前記エンコード手段は、前記画像データを構成する画素をライン毎に入力し、該ライン内の画素に対応する前記ブロック識別子の範囲を前記エンコードテーブルから部分的に入力して一時的に記憶する一時記憶手段を備え、
前記エンコード手段は、前記一時記憶手段に保持された部分的なエンコードテーブルを用いて前記エンコード値を求める
画像処理装置。
【請求項７】
請求項６に記載の画像処理装置であって、
前記エンコード手段は、前記エンコードテーブル内の差分値に基づき元の階調値を求めた上で、前記部分的なエンコードテーブルを前記一時記憶手段に入力する
画像処理装置。
【請求項８】
請求項６に記載の画像処理装置であって、
前記エンコード手段は、前記エンコードテーブル内の差分値から元の階調値を求めることなく、前記部分的なエンコードテーブルを前記一時記憶手段に入力する
画像処理装置。
【請求項９】
請求項２ないし請求項８のいずれかに記載の画像処理装置であって、
前記エンコード値は、所定のビット数で表される値であり、
前記エンコードテーブル記憶手段は、前記エンコードテーブルを、前記差分値が記録される複数の要素の集合として記憶しており、前記ビット数で表現可能な前記エンコード値の最大値まで前記いずれのブロックについても前記差分値が実質的に記録されていない場合に、該エンコードテーブル内の、前記差分値が実質的に記録されていない要素の少なくとも一部を予め削除することにより、前記エンコードテーブルを記憶している
画像処理装置。
【請求項１０】
請求項９に記載の画像処理装置であって、
前記エンコードテーブル記憶手段は、前記各ブロック識別子が表すブロックの中で、最も多くの差分値が対応付けられたブロックについての前記差分値が実質的に対応付けられていない要素とともに、該要素に対応する他のブロックの要素を前記エンコードテーブルから予め削除して、該エンコードテーブルを記憶している
画像処理装置。
【請求項１１】
請求項９に記載の画像処理装置であって、
前記エンコードテーブル記憶手段は、前記差分値が実質的に対応付けられていない要素の全てを前記エンコードテーブルから予め削除して、該エンコードテーブルを記憶している
画像処理装置。
【請求項１２】
請求項１１に記載の画像処理装置であって、
前記エンコードテーブル記憶手段は、前記差分値が実質的に対応付けられていない前記要素の全てが削除された前記エンコードテーブルを、連続したアドレス空間に前記ブロック識別子と前記エンコード値と前記差分値とを対応付けた形式で記憶している
画像処理装置。
【請求項１３】
請求項１２に記載の画像処理装置であって、
前記エンコードテーブル記憶手段は、前記アドレス空間において、前記各ブロック識別士に対応するアドレスを示すアドレステーブルを別途記憶している
画像処理装置。
【請求項１４】
請求項４または請求項５に記載の画像処理装置であって、
前記デコードテーブルは、
前記ブロック識別子毎に、前記エンコード値と、該ブロック内に発生するドットの数を表すインデックス値との対応関係を表すプレデコードテーブルと、
前記インデックス値と、前記ブロック内に発生するドットの数との対応関係を表すポストデコードテーブルと、
前記ドットの数と、前記ブロック内に発生させるドットの位置および順序との対応関係を表す順序値テーブルとからなり、
前記デコード手段は、前記プレデコードテーブルと前記ポストデコードテーブルと前記順序値テーブルとを順次参照することにより、前記エンコード値と前記ブロック識別子とに応じて、前記ドットの配置を決定する
画像処理装置。
【請求項１５】
画像データの階調値に応じてドットの発生の有無を決定するための閾値が記録されたディザマトリックスに基づいて、画像データの印刷時に印刷媒体上に形成するドットの配置を決定する画像処理方法であって、
前記ディザマトリックスを、所定の個数の閾値のまとまりからなるブロックに分割し、該各ブロックに固有に割り当てたブロック識別子毎に、前記階調値を、当該階調値が取り得る範囲において前記閾値と順次比較して得られた前記ブロック内のドットの配置を表す各エンコード値に、該各エンコード値を生じる前記階調値を対応付けて記録したエンコードテーブルを記憶するエンコードテーブル記憶工程と、
前記画像データを入力する画像データ入力工程と、
前記入力した画像データを構成する各画素の位置と前記ディザマトリックス内に存在する各ブロックの位置とに基づき、該各画素に対応する前記ブロック識別子を弁別し、該ブロック識別子と前記各画素の階調値とに基づき前記エンコードテーブルを参照して、該各画素の階調値に対応する前記エンコード値を求めるエンコード工程と、
前記エンコード手段によって求めたエンコード値と、前記弁別されたブロック識別子とに応じて、前記各画素の位置に対応するブロック内に発生するドットの配置を決定するデコード工程とを有しており、
前記エンコードテーブル記憶工程は、前記エンコードテーブル内の各エンコード値に対応する階調値を、同一ブロックに属する他の階調値との隔たりによって表して記憶する
画像処理方法。
【請求項１６】
画像データの階調値に応じてドットの発生の有無を決定するための閾値が記録されたディザマトリックスに基づいて、印刷媒体上に形成するドットの配置を決定して印刷を行う印刷装置であって、
前記ディザマトリックスを、所定の個数の閾値のまとまりからなるブロックに分割し、該各ブロックに固有に割り当てたブロック識別子毎に、前記階調値を、当該階調値が取り得る範囲において前記閾値と順次比較して得られた前記ブロック内のドットの配置を表す各エンコード値に、該各エンコード値を生じる前記階調値を対応付けて記録したエンコードテーブルを記憶するエンコードテーブル記憶手段と、
前記画像データを入力する画像データ入力手段と、
前記入力した画像データを構成する各画素の位置と前記ディザマトリックス内に存在する各ブロックの位置とに基づき、該各画素に対応する前記ブロック識別子を弁別し、該ブロック識別子と前記各画素の階調値とに基づき前記エンコードテーブルを参照して、該各画素の階調値に対応する前記エンコード値を求めるエンコード手段と、
前記エンコード手段によって求めたエンコード値と、前記弁別されたブロック識別子とに応じて、前記各画素の位置に対応するブロック内に発生するドットの配置を決定するデコード手段と、
前記決定したドットの配置に基づいて前記印刷媒体に該ドットの形成を行うドット形成手段とを備え、
前記エンコードテーブル記憶手段は、前記エンコードテーブル内の各エンコード値に対応する階調値を、同一ブロックに属する他の階調値との隔たりによって表して記憶している
印刷装置。
【請求項１７】
画像データの階調値に応じてドットの発生の有無を決定するための閾値が記録されたディザマトリックスに基づいて、画像データの印刷時に印刷媒体上に形成するドットの配置を決定するコンピュータプログラムであって、
前記ディザマトリックスを、所定の個数の閾値のまとまりからなるブロックに分割し、該各ブロックに固有に割り当てたブロック識別子毎に、前記階調値を、当該階調値が取り得る範囲において前記閾値と順次比較して得られた前記ブロック内のドットの配置を表す各エンコード値に、該各エンコード値を生じる前記階調値を対応付けて記録したエンコードテーブルを記憶するエンコードテーブル記憶機能と、
前記画像データを入力する画像データ入力機能と、
前記入力した画像データを構成する各画素の位置と前記ディザマトリックス内に存在する各ブロックの位置とに基づき、該各画素に対応する前記ブロック識別子を弁別し、該ブロック識別子と前記各画素の階調値とに基づき前記エンコードテーブルを参照して、該各画素の階調値に対応する前記エンコード値を求めるエンコード機能と、
前記エンコード手段によって求めたエンコード値と、前記弁別されたブロック識別子とに応じて、前記各画素の位置に対応するブロック内に発生するドットの配置を決定するデコード機能と
をコンピュータに実現させるコンピュータプログラムであり、
前記エンコードテーブル記憶機能は、前記エンコードテーブル内の各エンコード値に対応する階調値を、同一ブロックに属する他の階調値との隔たりによって表して記憶する
コンピュータプログラム。
【請求項１８】
請求項１７に記載のコンピュータプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷媒体上にドットを形成して画像を印刷する技術に関する。
【背景技術】
【０００２】
コンピュータで作成した画像や、デジタルカメラで撮影した画像などを出力する装置として、印刷媒体上にドットを形成して画像を印刷する印刷装置が広く利用されている。このような印刷装置において、組織的ディザ法や濃度パターン法、サイズの異なる複数種類のドットを配置する手法（特許第３２９２１０４号）等の技術を発展させて極めて高速に高画質な印刷を行うことができる技術が本願の出願人によって提案されている（例えば、特許文献１参照）。
【０００３】
【特許文献１】特開２００６−１４０３６号公報
【０００４】
上記特許文献１に記載の画像処理技術では、大域的なディザマトリックスを４×２個の閾値を有するブロックに分割し、入力画像の各画素が、このディザマトリックス内のどのブロックに該当するかに基づき、特許文献１の図３４に記載された多値化用テーブルや、図３８の中間データ用の変換テーブル、図３９の順序値マトリックス等の種々のテーブルを順次参照していくことで、入力画像に対するハーフトーン処理を行っている。
【０００５】
このような従来技術において処理の高速化を図るためには、上述した種々のテーブルをＲＯＭ等の記憶手段からＲＡＭに予め展開して記憶しておく必要がある。一般的にＲＯＭよりもＲＡＭの方がアクセス速度が速いからである。しかし、例えば、上述したハーフトーン処理を印刷装置単体で実現しようとすると、搭載しているＲＡＭが低容量であることが多く、このような場合には、全てのテーブルをＲＡＭに展開すること困難となり、高速化を図ることができないという問題が生じていた。こうした問題に対して、ＲＡＭの搭載容量を増加させることも考えられるが、コストアップの要因となり、合理的であるとは言えなかった。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
種々のテーブルを参照してハーフトーン処理を行う際に生じる上記のような問題を考慮し、本発明が解決しようとする課題は、ハーフトーン処理で用いられるテーブルのサイズを削減することにある。
【課題を解決するための手段】
【０００７】
上記課題を踏まえ、本発明の画像処理装置を次のように構成した。すなわち、
画像データの階調値に応じてドットの発生の有無を決定するための閾値が記録されたディザマトリックスに基づいて、画像データの印刷時に印刷媒体上に形成するドットの配置を決定する画像処理装置であって、
前記ディザマトリックスを、所定の個数の閾値のまとまりからなるブロックに分割し、該各ブロックに固有に割り当てたブロック識別子毎に、前記階調値を、当該階調値が取り得る範囲において前記閾値と順次比較して得られた前記ブロック内のドットの配置を表す各エンコード値に、該各エンコード値を生じる前記階調値を対応付けて記録したエンコードテーブルを記憶するエンコードテーブル記憶手段と、
前記画像データを入力する画像データ入力手段と、
前記入力した画像データを構成する各画素の位置と前記ディザマトリックス内に存在する各ブロックの位置とに基づき、該各画素に対応する前記ブロック識別子を弁別し、該ブロック識別子と前記各画素の階調値とに基づき前記エンコードテーブルを参照して、該各画素の階調値に対応する前記エンコード値を求めるエンコード手段と、
前記エンコード手段によって求めたエンコード値と、前記弁別されたブロック識別子とに応じて、前記各画素の位置に対応するブロック内に発生するドットの配置を決定するデコード手段とを備え、
前記エンコードテーブル記憶手段は、前記エンコードテーブル内の各エンコード値に対応する階調値を、同一ブロックに属する他の階調値との隔たりによって表して記憶していることを要旨とする。
【０００８】
本発明の画像処理装置では、エンコードテーブル記憶手段に記憶されたエンコードテーブルを参照することにより、画像の階調値をエンコード値に変換し、このエンコード値に基づきドットの配置を決定することで、画像データを構成する各画素についてハーフトーン処理を行う。このハーフトーン処理で用いられるエンコードテーブルには、ブロック識別子毎に、エンコード値と階調値とが対応付けて記憶されている。本発明では、このエンコードテーブル内の各階調値を、同一ブロックに属する他の階調値との隔たりによって表すものとした。従って、階調値をそのまま記録するよりも、小さな値でエンコードテーブルを構成することができ、エンコードテーブルのデータ容量を削減することが可能になる。
【０００９】
上記構成の画像処理装置において、
前記エンコードテーブル記憶手段は、前記階調値間の隔たりを、隣接する他の階調値との差分値によって表し、該差分値が、予め定めた所定のビット数で表現可能な最大値を超える場合に、該差分値を、前記最大値と、該最大値を除数とした除算における剰余とを含む複数の数値によって表すものとしてもよい。
【００１０】
このような構成であれば、所定のビット数で表現可能な最大値を超える差分値を、そのビット数の範囲内の複数の数値で表すことが可能になる。そのため、エンコードテーブル内の一部の差分値が所定のビット数で表現可能な最大値を超える場合であっても、差分値全体のビット数を増加させる必要がないので、エンコードテーブルのデータ容量が増大することを抑制することが可能になる。
【００１１】
上記構成の画像処理装置において、
前記エンコードテーブル記憶手段は、前記除算において前記剰余の数がゼロの場合には、該ゼロの値を含めて前記複数の数値によって前記差分値を表し、
前記エンコード手段は、前記エンコードテーブルから前記差分値を順次読み込んで累積していき、該累積の度に、該累積値と、前記画素の階調値との比較を行って前記エンコード値を求めるものであり、前記読み込んだ値が、前記予め定めた所定のビット数で表現可能な最大値である場合には、前記比較を行う前に、前記剰余が読み込まれるまで前記累積を行うものとしてもよい。
【００１２】
このような構成であれば、エンコード手段によってエンコードテーブルから読み込まれた値が、予め定めた所定のビット数で表現可能な最大値であれば、これを特殊なコードとして取り扱い、剰余が読み込まれるまで各数値を累積するので、階調値との比較の前に、複数の値から元の差分値を予め求めることができる。そのため、デコードテーブルの形式を変更することなく、階調値からエンコード値への変換、およびドットの配置の決定を行うことが可能になる。
【００１３】
上記構成の画像処理装置において、
更に、前記ブロック識別子毎に、前記各エンコード値に対して、該エンコード値に応じて該ブロック内に発生する前記ドットの配置を対応付けて記録したデコードテーブルを記憶するデコードテーブル記憶手段を備え、
前記デコード手段は、前記デコードテーブルを参照して、前記エンコード手段によって求めたエンコード値と前記弁別されたブロック識別子とに基づき、前記ドットの配置を決定するものとしてもよい。
【００１４】
このような構成であれば、デコードテーブル記憶手段に予め記憶されたデコードテーブルを参照することで、エンコード値とブロック識別子とから容易にドットの配置を決定することができる。
【００１５】
上記構成の画像処理装置において、
前記エンコードテーブル記憶手段は、前記エンコードテーブル内のエンコード値の範囲を、前記複数の数値の個数に応じて拡張することで、前記差分値および複数の数値に対してそれぞれ固有のエンコード値を割り当て、
前記デコードテーブル記憶手段は、前記デコードテーブルに記録されたエンコード値の範囲を、前記拡張されたエンコード値の範囲に応じて拡張するとともに、該デコードテーブルの前記複数の数値に対応する各エンコード値に対しては、前記拡張前に該複数の数値によって表された差分値に該当するエンコード値に対応付けられていたドットの配置をそれぞれ対応付けるものとしてもよい。
【００１６】
このような構成であれば、１つの差分値を複数の数値で表した場合であっても、エンコードテーブルとデコードテーブルの両者についてエンコード値の範囲を拡張することで、特別な処理を追加することなく、階調値からエンコード値への変換、およびドットの配置の決定を容易に行うことが可能になる。
【００１７】
上記構成の画像処理装置において、
前記エンコード手段は、前記画像データを構成する画素をライン毎に入力し、該ライン内の画素に対応する前記ブロック識別子の範囲を前記エンコードテーブルから部分的に入力して一時的に記憶する一時記憶手段を備え、
前記エンコード手段は、前記一時記憶手段に保持された部分的なエンコードテーブルを用いて前記エンコード値を求めるものとしてもよい。
【００１８】
このような構成であれば、一時記憶手段に記憶された部分的なエンコードテーブルを参照することで、ライン毎に効率的にエンコード処理を行うことが可能になる。
【００１９】
上記構成の画像処理装置において、
前記エンコード手段は、前記エンコードテーブル内の差分値に基づき元の階調値を求めた上で、前記部分的なエンコードテーブルを前記一時記憶手段に入力するものとしてもよい。
【００２０】
このような構成であれば、差分値から階調値を求めた上で、一時記憶手段に部分的なエンコードテーブルを入力するので、エンコード手段は、エンコード値を容易に求めることが可能になる。
【００２１】
上記構成の画像処理装置において、
前記エンコード手段は、前記エンコードテーブル内の差分値から元の階調値を求めることなく、前記部分的なエンコードテーブルを前記一時記憶手段に入力するものとしてもよい。
【００２２】
このような構成であれば、一時記憶手段に対して、階調値ではなく差分値を入力するので、一時記憶手段の記憶容量を削減することが可能になる。
【００２３】
上記構成の画像処理装置において、
前記エンコード値は、所定のビット数で表される値であり、
前記エンコードテーブル記憶手段は、前記エンコードテーブルを、前記差分値が記録される複数の要素の集合として記憶しており、前記ビット数で表現可能な前記エンコード値の最大値まで前記いずれのブロックについても前記差分値が実質的に記録されていない場合に、該エンコードテーブル内の、前記差分値が実質的に記録されていない要素の少なくとも一部を予め削除することにより、前記エンコードテーブルを記憶しているものとしてもよい。
【００２４】
このような構成であれば、所定のビット数で表現可能なエンコード値の最大値までいずれのブロックについても差分値が実質的に記録されていない場合に、差分値が実質的に対応付けられていない要素の少なくとも一部を削除するため、エンコードテーブル自体のサイズを縮小することができる。なお、「差分値が実質的に記録されていない要素」とは、「０」や「ＮＵＬＬ」など、階調値としての意味のない値が対応付けられている要素のことをいう。ただし、「０」の中には、差分値としての意味をもつものもあるため、そのような差分値については、「差分値が実質的に記録されていない要素」に含まれることはない。
【００２５】
上記構成の画像処理装置において、
前記エンコードテーブル記憶手段は、前記各ブロック識別子が表すブロックの中で、最も多くの差分値が対応付けられたブロックについての前記差分値が実質的に対応付けられていない要素とともに、該要素に対応する他のブロックの要素を前記エンコードテーブルから予め削除して、該エンコードテーブルを記憶しているものとしてもよい。
【００２６】
このような構成であれば、最も多くの差分値が対応付けられたブロックが必要とするデータ容量に合わせて、他のブロックのデータ容量を削減することができる。そのため、容易にエンコードテーブル自体のサイズを減縮することが可能になる。
【００２７】
上記構成の画像処理装置において、
前記エンコードテーブル記憶手段は、前記差分値が実質的に対応付けられていない要素の全てを前記エンコードテーブルから予め削除して、該エンコードテーブルを記憶しているものとしてもよい。
【００２８】
このような構成であれば、階調値が実質的に対応付けられていない要素を全て削除するため、エンコードテーブルのデータ容量をより削減することが可能になる。
【００２９】
上記構成の画像処理装置において、
前記エンコードテーブル記憶手段は、前記差分値が実質的に対応付けられていない前記要素の全てが削除された前記エンコードテーブルを、連続したアドレス空間に前記ブロック識別子と前記エンコード値と前記差分値とを対応付けた形式で記憶しているものとしてもよい。
【００３０】
このような構成であれば、差分値が実質的に対応付けられていない要素を全て削除した上で、連続したアドレス空間にすべてのデータを記憶するため、エンコードテーブルを効率的に記憶することが可能になる。
【００３１】
上記構成の画像処理装置において、
前記エンコードテーブル記憶手段は、前記アドレス空間において、前記各ブロック識別士に対応するアドレスを示すアドレステーブルを別途記憶しているものとしてもよい
【００３２】
このような構成であれば、アドレステーブルを参照することで、各ブロックに対応したデータをエンコードテーブルから容易に読み出すことが可能になる。
【００３３】
上記構成の画像処理装置において、
前記デコードテーブルは、
前記ブロック識別子毎に、前記エンコード値と、該ブロック内に発生するドットの数を表すインデックス値との対応関係を表すプレデコードテーブルと、
前記インデックス値と、前記ブロック内に発生するドットの数との対応関係を表すポストデコードテーブルと、
前記ドットの数と、前記ブロック内に発生させるドットの位置および順序との対応関係を表す順序値テーブルとからなり、
前記デコード手段は、前記プレデコードテーブルと前記ポストデコードテーブルと前記順序値テーブルとを順次参照することにより、前記エンコード値と前記ブロック識別子とに応じて、前記ドットの配置を決定するものとしてもよい。
【００３４】
このような構成であれば、デコードテーブル内の各エンコード値にドットの配置を一対一に対応付ける必要がないので、デコードテーブルの記憶容量を削減することができる。なお、デコード手段は、順序値テーブルを用いる代わりに、エンコードテーブルやデコードテーブルの生成元となったディザマトリックスを直接参照することで、デコード処理の都度、ブロック内に発生させるドットの位置および順序を求めるものとしてもよい
【００３５】
なお、本発明は、上述した画像処理装置としての構成のほか、画像処理方法や、印刷装置、コンピュータプログラムとしても構成することができる。かかるコンピュータプログラムは、コンピュータが読取可能な記録媒体に記録されていてもよい。記録媒体としては、例えば、フレキシブルディスクやＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、光磁気ディスク、メモリカード、ハードディスク等の種々の媒体を利用することができる。
【発明を実施するための最良の形態】
【００３６】
以下、上述した本発明の作用・効果を一層明らかにするため、本発明の実施の形態を実施例に基づき次の順序で説明する。
（Ａ）プリンタの構成：
（Ｂ）印刷処理：
（Ｃ）初期化処理：
（Ｃ−１）エンコードテーブル及びプレデコードテーブル生成処理：
（Ｃ−２）データ量削減処理：
（Ｄ）ハーフトーン処理：
（Ｄ−１）エンコード処理：
（Ｄ−２）デコード処理：
（Ｅ）差分エンコードテーブル及びその生成方法：
（Ｆ）差分エンコードテーブルを用いたエンコード処理：
（Ｇ）差分エンコードテーブルの他の生成方法：
（Ｈ）差分エンコードテーブルの他の態様：
（Ｉ）変形例：
【００３７】
（Ａ）プリンタの構成：
図１は、本発明の実施例としてのプリンタ１００を示す説明図である。プリンタ１００は、いわゆる複合機タイプのプリンタであり、光学的に画像を読み込むスキャナ１１０や、画像データの記録されたメモリカードＭＣを挿入するためのメモリカードスロット１２０、デジタルカメラ等の機器を接続するＵＳＢインタフェース１３０等を備えている。プリンタ１００は、スキャナ１１０によって取り込んだ画像や、メモリカードＭＣから読み込んだ画像、ＵＳＢインタフェース１３０を介してデジタルカメラから読み込んだ画像等を印刷用紙Ｐに印刷することができる。また、プリンタケーブル等によって接続された図示していないパーソナルコンピュータから入力した画像の印刷も行うことができる。
【００３８】
プリンタ１００は、印刷対象の画像の選択や、印刷用紙の種類、用紙サイズの設定など、印刷に関する種々の設定操作を行うための操作パネル１４０を備えている。操作パネル１４０の中央部には、液晶モニタ１４５が備えられている。液晶モニタ１４５には、メモリカードＭＣ等から入力した画像の一覧や種々のグラフィカルインタフェース（ＧＵＩ）が表示される。
【００３９】
図２は、プリンタ１００の内部構成を示す説明図である。図示するように、プリンタ１００は、印刷用紙Ｐに印刷を行う機構として、インクカートリッジ２１２を搭載したキャリッジ２１０や、キャリッジ２１０を主走査方向に駆動するキャリッジモータ２２０、印刷用紙Ｐを副走査方向に搬送する紙送りモータ２３０等を備えている。
【００４０】
キャリッジ２１０には、シアン（Ｃ）、ライトシアン（Ｌｃ）、マゼンタ（Ｍ）、ライトマゼンタ（Ｌｍ）、イエロ（Ｙ）、ブラック（Ｋ）、の各インクが収容されたインクカートリッジ２１２が搭載されている。キャリッジ２１０は、これらの色に対応して計６種類のインクヘッド２１１を備えている。インクカートリッジ２１２からインクヘッド２１１に供給されたインクは、図示しないピエゾ素子を駆動することで印刷用紙Ｐに吐出される。
【００４１】
本実施例のプリンタ１００は、制御ユニット１５０によってインクヘッド２１１のピエゾ素子に印加する電圧波形を制御することにより、印刷用紙Ｐに４種類のサイズのドットを形成することができる。以下では、４種類のサイズのドットを、ドットの形成されない場合も含め、サイズの小さい順に、「ドット無し」、「Ｓドット」、「Ｍドット」、「Ｌドット」というものとする。各サイズのドットは、１ドット当たり、それぞれ、１．５ｐｌ（ピコリットル）、３ｐｌ、７ｐｌのインク量によって表現される。なお、本実施例では、４種類のドットを形成可能であるものとしたが、２種類や３種類、あるいは５種類以上のドットを形成可能としてもよい。
【００４２】
キャリッジ２１０は、プラテン２７０の軸方向と並行に設置された摺動軸２８０に移動自在に保持されている。キャリッジモータ２２０は、制御ユニット１５０からの指令に応じて駆動ベルト２６０を回転させることで、プラテン２７０の軸方向と平行に、すなわち、主走査方向にキャリッジ２１０を往復運動させる。紙送りモータ２３０は、制御ユニット１５０からの指令に応じてプラテン２７０を回転させることで、プラテン２７０の軸方向と垂直に印刷用紙Ｐを搬送する。つまり、紙送りモータ２３０は、キャリッジ２１０を相対的に副走査方向に移動させることができる。
【００４３】
プリンタ１００は、上述したインクヘッド２１１やキャリッジモータ２２０、紙送りモータ２３０の動作を制御するための制御ユニット１５０を備えている。制御ユニット１５０には、図１に示したスキャナ１１０やメモリカードスロット１２０、ＵＳＢインタフェース１３０、操作パネル１４０、液晶モニタ１４５が接続されている。
【００４４】
制御ユニット１５０は、ＣＰＵ１５１とＲＡＭ１５２とＲＯＭ１５３と画像処理ＡＳＩＣ１５５とによって構成されている。
【００４５】
ＲＯＭ１５３には、プリンタ１００の動作を全般的に制御するための制御プログラムが記憶されている。ＣＰＵ１５１はプリンタ１００の電源投入時に、この制御プログラムをＲＡＭ１５２に読み出して実行する。ＣＰＵ１５１は、この制御プログラムの実行により、後述する印刷処理や初期化処理等を行う。
【００４６】
ＲＯＭ１５３には、制御プログラムの他、後述する初期化処理時に使用されるディザマトリックスデータＤＭやドット発生量テーブルＤＧＴが記憶されている。ＲＡＭ１５２には、この初期化処理によって生成される種々のテーブルが記憶される。
【００４７】
画像処理ＡＳＩＣ１５５は、メモリカードＭＣ等から入力した画像データに対して、色変換処理やハーフトーン処理を施し、印刷機構（インクヘッド２１１、キャリッジモータ２２０、紙送りモータ２３０）を制御して印刷を行うための集積回路である。画像処理ＡＳＩＣ１５５内の論理回路は、以下で説明する機能を実現するためのプログラムが所定のハードウェア記述言語によって記述されることで設計されている。
【００４８】
図３は、画像処理ＡＳＩＣ１５５の詳細な構成を示す説明図である。図示するように、本実施例の画像処理ＡＳＩＣ１５５は、色変換ユニット３００と、ハーフトーン処理ユニット４００と、インク吐出制御ユニット５００とを備えている。
【００４９】
色変換ユニット３００は、Ｒ，Ｇ，Ｂの階調値の組み合わせによって表現されている画像データの色を、キャリッジ２１０に備えられたインクの各色についての階調値の組み合わせによって表現された色に変換する回路である。前述したように、プリンタ１００は、Ｃ，Ｍ，Ｙ，Ｋ，Ｌｃ，Ｌｍの最大６色のインクを用いて画像を印刷する。そこで、色変換ユニット３００は、ＲＧＢ各色によって表現された画像データを、これら６色の階調値によって表現された画像データに変換する。
【００５０】
色変換ユニット３００は、ＲＡＭ１５２に記憶された色変換テーブルＬＵＴと呼ばれるテーブルを参照することで前述した色変換を行う。この色変換テーブルＬＵＴには、ＲＧＢの階調値とＣＭＹＫＬｃＬｍの階調値とが予め対応付けて記憶されている。色変換ユニット３００は、この色変換テーブルＬＵＴを参照することにより、ＲＧＢ形式によって表された画像データを、迅速にＣＭＹＫＬｃＬｍ形式（以下、「ＣＭＹ形式」という）の画像データに変換することができる。色変換後の画像データは、各色、２５６段階（０〜２５５）の階調値を有するものとする。
【００５１】
ハーフトーン処理ユニット４００は、色変換ユニット３００によって色変換されたＣＭＹ形式の画像データを入力し、この画像データを、印刷媒体上に形成されるドットの配置表すドット配置データに変換する回路である。
【００５２】
プリンタ１００は、吐出するインク滴のサイズを最大４段階に調整することができるにすぎず、各色２５６階調のＣＭＹ形式のデータをそのまま用いることはできない。そのため、プリンタ１００は、ハーフトーン処理ユニット４００によって、ＣＭＹ形式の階調値を、単位面積あたりのドットの粗密を表すドット配置データに変換することで中間調の色を表現する。
【００５３】
図４は、ドット配置データの一例を示す説明図である。この図では、ＣＭＹ形式の画像データの最も左上の画素（１，１）の色（例えばシアン）の階調値が「５２」の場合に、これをドット配置データに変換した例を図の左下に示した。このように、本実施例では、１つの画素の階調値が入力されると、４×２ドットのドット群の中で、ＳドットやＭドット、Ｌドットなどを配置してその階調値が表す色を印刷用紙上に表現する。なお、前述したドット群のことを、以下では「ブロック」と呼ぶことがある。
【００５４】
ここで、ドット配置データの生成方法を簡単に説明する。ドット配置データ内の各ドットの配置は、大域的なディザマトリックスデータＤＭ（図７（ａ）参照）からハーフトーン処理対象の画素の位置に応じて切り出された局所的な閾値群（図７（ｂ）参照）と、その画素の階調値ＴＤに対応する各サイズのドットの発生量（図９参照）との関係から決定される。つまり、図９に示したドット発生量テーブルＤＧＴによって、入力階調値ＴＤに応じた各サイズのドットの発生量を求め、その各ドットの発生量と閾値群内の閾値とを比較していき、１ブロック内に配置する各サイズのドットの個数を求める。そして、その個数分のドットを大きなサイズのドットから閾値群内の閾値の低い場所に配置していくことでドット配置データが生成される。本実施例では、このような一連の処理を行うために、エンコードテーブルＥＴや、プレデコードテーブルＤＴ１、ポストデコードテーブルＤＴ２、順序値テーブルＳＴと呼ばれる種々のテーブルを予め生成しておき、これらのテーブルを順次参照することで、ドット配置データの生成を効率的に行う。ドット配置データを生成するための詳細な処理内容については後で説明する。
【００５５】
本実施例では、ＣＭＹ画像中の画素の階調値が同一の場合であっても、その画素の位置が異なれば、図７（ａ）に示したディザマトリックスデータＤＭ内で参照される閾値群が異なるため、異なるドット配置データが生成される。例えば、図４において、ＣＭＹ画像の最も左上の画素以外に、もう一つ、「５２」の階調値を有する画素（ｊ，１）を示している。この画素に対応するドット配置データの例を図の右下に示したが、かかるドット配置データは、先に示したドット配置データとは異なるドット配置を有している。つまり、本実施例では、階調値の値が同じであっても、ハーフトーン処理対象となる画素の位置に応じて生成するドット配置データを変化させるので、従来の組織的ディザ法や濃度パターン法等よりも高画質な画像の出力を行うことが可能になる。
【００５６】
上述したように、本実施例では、出力画像のドット群の単位を４×２としたため、例えば、入力画像の解像度が、３６０ｄｐｉ×３６０ｄｐｉであれば、印刷用紙に出力される出力解像度は、１４４０ｄｐｉ×７２０ｄｐｉとなる。ドット群の横方向の解像度が縦方向の解像度よりも高いものとしたのは、階調変化に対する人間の目の追従性が縦方向よりも横方向に敏感であるためである。また、印刷用紙Ｐを副走査方向に移動させる制御よりも、キャリッジ２１０を主走査方向に移動させる制御の方が比較的容易であるため、横方向の解像度を縦方向の解像度よりも高くしている。しかし、もちろん、ドット群のサイズは、４×２以外にも、縦横比が同一となる４×４や２×２などとすることも可能である。なお、本実施例では、ＲＧＢ形式あるいはＣＭＹ形式の画像の構成要素の最小単位を「画素」といい、印刷用紙Ｐに形成される出力画像の構成要素の最小単位を「ドット」というものとする。ここで、ＲＧＢ形式あるいはＣＭＹ形式の入力画像を、例えば、３６０ｄｐｉ×３６０ｄｐｉから１４４０ｄｐｉ×７２０ｄｐｉに高解像度化した上で、その中の複数の画素を４×２や２×２のブロックとしてまとめ、その複数の画素を代表する画素（例えば、ブロック内の画素の階調値を平均化したもの）を１つの「画素」として扱うものとしてもよい。
【００５７】
説明を図３に戻す。ハーフトーン処理ユニット４００は、エンコードユニット４１０とデコードユニット４２０とを備えている。
【００５８】
ハーフトーン処理ユニット４００は、色変換ユニット３００からＣＭＹ形式の画像データを入力すると、この画像データをエンコードユニット４１０に入力する。エンコードユニット４１０は、このとき、ＣＭＹ画像を１ライン単位で入力する。
【００５９】
エンコードユニット４１０は、入力された画像データを構成する各画素の階調値（８ビット）を、ＲＡＭ１５２に記憶されたエンコードテーブルＥＴ（図１０参照）を参照して、各色５ビットのデータで表されるエンコード値ＥＶに変換する。かかる変換処理を、以下、「エンコード処理」という。エンコード処理によって得られるエンコード値ＥＶは、印刷用紙上に、どのようなドット配置データ（図４参照）を形成するかを間接的に指し示す値である。「間接的」というのは、このエンコード値ＥＶを後述するデコード処理によって、対応するデコードテーブルに基づき変換した結果、最終的にドット配置データに変換されるからである。こうしたエンコード処理の過程で参照されるエンコードテーブルＥＴの生成方法や、エンコード処理の詳細な方法については後で説明する。
【００６０】
なお、上述したエンコード処理時に参照するエンコードテーブルＥＴは、後述するデータ量削減処理によって、そのデータ量が、５ビットのエンコード値ＥＶが取り得る最大値である「３１」未満のエンコード値とブロックの総数との積に応じたデータ容量以下の容量まで削減されてＲＡＭ１５２に記憶されている。このように、本実施例では、比較的サイズの大きなエンコードテーブルＥＴのデータ容量を予め削減することで、ＲＡＭ１５２の使用量を削減している。
【００６１】
画像処理ＡＳＩＣ１５５は、その内部に、図２に示したＲＡＭ１５２よりも高速に読み書きを行うことのできるＳＲＡＭ１５６を備えている。エンコードユニット４１０は、１ライン分のＣＭＹ画像をエンコード値ＥＶに変換するにあたり、ＲＡＭ１５２内のエンコードテーブルＥＴからその１ライン分のエンコード処理に必要なデータのみをこのＳＲＡＭ１５６に一時的に入力し、この部分的なエンコードテーブルＥＴを参照することでエンコード処理を行う。詳細は後述するが、例えば、ＣＭＹ画像の最上部のラインをエンコード処理する場合には、図１０に示したエンコードテーブルＥＴのブロック番号０から１２７（ブロック番号の最大値は、「８１９１」）までのデータが入力される（図２０参照）。１ライン分のエンコード処理においては、エンコードテーブルＥＴ内の一部のブロックが繰り返し使用されることになるため、画像処理ＡＳＩＣ１５５内のＳＲＡＭ１５６に予め必要なデータだけを入力することで、効率的にエンコード処理を行うことが可能になる。なお、本実施例では、エンコードユニット４１０は、１ライン単位でエンコード処理を行うものとするが、２ライン単位やそれ以上の単位、あるいは、画像全体について一括してエンコード処理を行うものとしてもよい。
【００６２】
エンコードユニット４１０は、８ビットで表されるＣＭＹ階調値を５ビットのエンコード値ＥＶに変換すると、このエンコード値ＥＶを、ＲＡＭ１５２の所定領域に確保した中間バッファＢＦに格納する。このように、本実施例では、メモリカードＭＣ等から入力した画像データを、８ビットのデータから５ビットのデータに変換してＲＡＭ１５２に記憶することができるので、ＲＡＭ１５２の使用容量が削減され、コストダウンを図ることが可能になる。
【００６３】
デコードユニット４２０は、中間バッファＢＦからエンコード値ＥＶを読み込み、ＲＡＭ１５２に記憶されたプレデコードテーブルＤＴ１（図１２参照）、ポストデコードテーブルＤＴ２（図８参照）、および、順序値テーブルＳＴ（図７（ｄ）参照）を順次参照することで、このエンコード値ＥＶを、図４に示したような４×２ドットのドット配置データに変換する。かかる変換処理のことを、「デコード処理」という。デコード処理の過程で参照される上述した各テーブルの生成方法や、デコード処理の詳細については後で説明する。なお、かかるデコード処理もエンコード処理と同様、１ライン単位で行われるため、プレデコードテーブルＤＴ１や順序値テーブルＳＴ内の必要なデータのみが、ＳＲＡＭ１５６に入力される。
【００６４】
デコードユニット４２０は、エンコード値ＥＶをドット配置データに変換すると、そのドット配置データをインク吐出制御ユニット５００に出力する。
【００６５】
インク吐出制御ユニット５００は、インクヘッド２１１、キャリッジモータ２２０、紙送りモータ２３０を制御して、ハーフトーン処理ユニット４００から入力したドット配置データに基づき印刷用紙上にインク滴を吐出してドットを形成する。ドット配置データには、各サイズのドットの大きさを、それぞれ、「００（ドット無し）」、「０１（Ｓドット）」、「１０（Ｍドット）」、「１１（Ｌドット）」という２ビットのデータによって表した値（以下、「ドットサイズ値」という）が設定されている。従って、インク吐出制御ユニット５００は、このドットサイズ値に応じて、インクヘッド２１１内のピエゾ素子に印加する電圧波形を調整することで、サイズの異なるドットの打ち分けを行う。こうすることで、本実施例のプリンタ１００は、印刷用紙に対してカラー印刷を行う。
【００６６】
（Ｂ）印刷処理：
図５は、プリンタ１００が実行する印刷処理のフローチャートである。この印刷処理は、ユーザによる操作パネル１４０の操作によって所定の印刷操作がなされた場合に、ＣＰＵ１５１によって実行される処理である。
【００６７】
この印刷処理が実行されると、ＣＰＵ１５１は、まず、図３に示したエンコードテーブルＥＴやプレデコードテーブルＤＴ１、ポストデコードテーブルＤＴ２、順序値テーブルＳＴを生成するための初期化処理を行う（ステップＳ１０）。かかる初期化処理の詳細な説明は後述する。
【００６８】
初期化処理が完了すると、ＣＰＵ１５１は、ユーザによって指定された画像データをメモリカードＭＣ等から入力する（ステップＳ２０）。そして、入力した画像データを、画像処理ＡＳＩＣ１５５に出力する。すると、画像処理ＡＳＩＣ１５５では、色変換ユニット３００による色変換処理（ステップＳ３０）、および、ハーフトーン処理ユニット４００によるハーフトーン処理（ステップＳ４０）が行われ、入力画像の画素毎にドット配置データが生成される。
【００６９】
ハーフトーン処理ユニット４００によってドット配置データが生成されると、インク吐出制御ユニット５００によってインクの吐出制御が行われる（ステップＳ５０）。この結果、印刷用紙に対してカラー画像が印刷される。画像処理ＡＳＩＣ１５５が行うハーフトーン処理の詳細な説明は後述する。
【００７０】
（Ｃ）初期化処理：
図６は、上述した印刷処理のステップＳ１０で実行される初期化処理の詳細を示すフローチャートである。上述したように、この初期化処理は、ハーフトーン処理ユニット４００がハーフトーン処理時に参照する種々のテーブルを生成するための処理である。
【００７１】
この初期化処理が実行されると、まず、ＣＰＵ１５１は、ＲＯＭ１５３から、ディザマトリックスデータＤＭをＲＡＭ１５２に入力し（ステップＳ１００）、このディザマトリックスデータＤＭに基づき、順序値テーブルＳＴの生成を行う（ステップＳ１１０）。順序値テーブルＳＴは、後述するデコード処理において、４×２個の要素を有するブロック内に、各サイズのドットを配置する順序を決定するためのテーブルである。
【００７２】
図７は、ディザマトリックスデータＤＭのデータ構造および順序値テーブルＳＴの生成方法を示す説明図である。図７（ａ）には、ディザマトリックスデータＤＭのデータ構造を示している。本実施例のディザマトリックスデータＤＭには、横５１２×縦１２８の配列内に０から６５５３５までの計６５５３６個の閾値が万遍なく記録されている（各閾値の図示は省略）。このディザマトリックスデータＤＭは、従来のハーフトーン技術として知られた組織的ディザ法で用いられるディザマトリックスと同種のテーブルである。そのため図示したディザマトリックスデータＤＭにおいても、画像データが０から６５５３５までの階調値を有すると仮定した場合において、この画像データを２値化する際に、白黒ドットの分散性が高まるように各閾値が配置されている。このようなディザマトリクスデータＤＭとしては、例えば、ブルーノイズ特性を有するマトリックスを採用することができる。なお、本実施例では、ディザマトリックスデータＤＭのサイズを、５１２×１２８としたが、１２８×３２や１０２４×２５６など、種々のサイズを適用することができる。
【００７３】
上記ステップＳ１１０では、このディザマトリックスデータＤＭから、順序値テーブルＳＴの生成を行う。まず、ＣＰＵ１５１は、ディザマトリックスデータＤＭを、４×２個の閾値を１つのブロックとして、計８１９２（＝（５１２／４）×（１２８／２））個のブロックに分割し、各ブロックに対してブロック番号を与える。本実施例では、図７（ａ）に示すように、ディザマトリックスデータＤＭの最も左上に位置するブロックにブロック番号「０」を与え、その右隣に位置するブロックにブロック番号「１」、以下、右下端のブロックにかけて、順にブロック番号を与える。
【００７４】
図７（ｂ）には、ブロック番号「０」のブロックに記録された各閾値を閾値群として示している。図７（ｃ）には、この閾値群を元に生成される順序値データを示している。ＣＰＵ１５１は、図７（ｂ）に示した閾値群内のすべての要素について同時に、階調値を０から６５５３５まで上げていき、その階調値が、閾値を上回った順序を０から７までの値によって記録することで、図７（ｃ）の順序値データを生成する。図７（ｂ）の場合には、２３，４７２，１０１０，１３２２、…、の順に、階調値が閾値を超えることになるため、ブロック番号「０」に対応する順序値データは、図７（ｃ）のようになる。
【００７５】
ＣＰＵ１５１は、すべてのブロックについて順序値データを生成すると、これを、ブロック番号毎に記録して順序値テーブルＳＴを生成する。図７（ｄ）には、最終的に生成された順序値テーブルＳＴの一例を示している。ＣＰＵ１５１は、こうして生成した順序値テーブルＳＴをＲＡＭ１５２に記憶する。
【００７６】
説明を図６に戻す。ＣＰＵ１５１は、順序値テーブルＳＴを生成すると、次に、後述するデコード処理において用いられるポストデコードテーブルＤＴ２の生成を行う（ステップＳ１２０）。
【００７７】
図８は、ポストデコードテーブルＤＴ２の一例を示す説明図である。図示するように、このポストデコードテーブルＤＴ２には、０から１６４までのインデックス値に対応付けて、１６ビットのドット数データが記録されている。ドット数データは、２ビットのドットサイズ値を、サイズの大きなドットから右詰めに８つ連結させたデータである。この１６５個のドット数データは、１ブロック内に発生する各サイズのドットの数の組み合わせのすべてを表している。
【００７８】
ここで、１つのブロック内に発生する各サイズのドットの組み合わせの数が１６５個に収まる理由を説明する。ブロック内の１つのドットのサイズは、上述したように、「ドット無し」、「Ｓドット」、「Ｍドット」、「Ｌドット」の４つの状態を取り得る。従って、１ブロック内におけるこれらのドットの組合せは、これら４つの状態を、重複を許容して８回選択した時の組合せの数に等しくなるから、重複組み合わせの演算式を表す下記式（１）によってドットの組み合わせの数を求めることができる。このことから、最大でも１６５通り（０〜１６４）の組合せしか出現しないことになる。従って、ドット数データに対応するインデックス値は、０から１６４までの値となる。
【００７９】
4Ｈ8（＝4+8-1Ｃ8）＝１６５  ・・・（１）
（nＨrは、ｎ個の物の中から重複を許してｒ回選択するときの重複組合せ数を求める演算子であり、nＣrは、ｎ個の物の中から重複を許さずにｒ回選択するときの組合せ数を求める演算子である。）
【００８０】
ＣＰＵ１５１は、図８に示したポストデコードテーブルＤＴ２を次のように生成する。すなわち、まず、ＣＰＵ１５１は、１ブロック内に発生するＳドット、Ｍドット、Ｌドットの各サイズのドットの数をすべて「０」とし、これを、インデックス値「０」に対応するドット数データとしてプレデコードテーブルＤＴ１に記録する。この場合、１ブロック内の８つのドットのサイズがすべて「ドット無し（００）」となるから、ドット数データとしては、「００００００００００００００００」となる。
【００８１】
次に、ＣＰＵ１５１は、Ｓドットの数を１から８まで順番に増やし、それぞれの発生個数をドット数データとしてインデックス値１から８までに記録する。つまり、Ｓドットの数が１の場合は、ドット数データは、「０００００００００００００００１」となり、Ｓドットの数が８の場合は、「０１０１０１０１０１０１０１０１」となる。
【００８２】
続いて、ＣＰＵ１５１は、Ｍサイズのドットの数を「１」とし、発生するドットの合計が８個以内になるように、Ｓサイズのドットの数を、０から７まで増加させる。そして、それぞれのドットの発生個数の組み合わせをインデックス値「９」以降に記録する。
【００８３】
更に、ＣＰＵ１５１は、Ｍサイズのドットの数を「２」とし、Ｓサイズのドットの数を０から６まで増加させる。そして、それぞれの発生個数をプレデコードテーブルＤＴ１に記録する。以下、同様にして、Ｌサイズのドットの数が「８」になるまで、各サイズのドットの数を変化させることにより、ポストデコードテーブルＤＴ２の生成を行う。ＣＰＵ１５１は、こうして生成したポストデコードテーブルＤＴ２をＲＡＭ１５２に記憶する。なお、ドット数データには、それぞれ固有のインデックス値が割り当てられていればよく、その対応関係については特に規定はない。
【００８４】
ここで、説明を再び図６に戻す。ＣＰＵ１５１は、ポストデコードテーブルＤＴ２の生成を完了すると、後述するエンコードテーブルＥＴやプレデコードテーブルＤＴ１の生成で用いられるドット発生量テーブルＤＧＴをＲＯＭ１５３からＲＡＭ１５２に入力する（ステップＳ１３０）。
【００８５】
図９は、ドット発生量テーブルＤＧＴの一例を示す説明図である。図示するように、このドット発生量テーブルＤＧＴには、横軸に示した入力階調値ＴＤに応じて、Ｓドット、Ｍドット、Ｌドットの発生量がそれぞれ縦軸に定義されている。この図によれば、入力階調値ＴＤが０から７０程度までは、Ｓドットのみが発生し、その後、入力階調値ＴＤが１２０程度までは、ＳドットとＭドットの両者が発生することがわかる。また、入力階調値ＴＤが１１０程度になると、ＳドットとＭドットに加えて、Ｌドットが発生するようになり、入力階調値ＴＤが概ね１８０以降になると、Ｌドットのみが発生することがわかる。なお、縦軸に示すドット発生量は、図７に示したディザマトリックスデータＤＭ内の各閾値との比較が可能なように、０から６５５３５までの値をとる。
【００８６】
図９には、Ｓドット，Ｍドット，Ｌドットの発生量とともに、これらのドットが印刷媒体に形成される際に吐出されるインクの総重量の変化を示した。図示したインク総重量の変化によれば、入力階調値ＴＤが増加するにつれ、インクの総重量が徐々に増加していくことになる。各サイズのドット発生量は、かかる総重量の変化にあわせて、それぞれの発生量が設定されている。なお、このドット発生量テーブルＤＧＴは、プリンタ１００がサポートしている印刷用紙の種類に応じて複数種類のテーブルがＲＯＭ１５３に記憶されている。印刷用紙は、その材質によってインクの吸収率や光の反射率が異なり、このような特性に応じてインクのドット発生量が設定されているためである。従って、ＣＰＵ１５１は、ユーザによって設定された印刷用紙Ｐの種類に応じて、その種類に応じたドット発生量テーブルＤＧＴをＲＯＭ１５３から入力する。こうすることで、選択された印刷用紙Ｐに適した印刷を行うことが可能になる。
【００８７】
説明を図６に戻す。上記ステップＳ１３０によってドット発生量テーブルＤＧＴを入力すると、ＣＰＵ１５１は、このドット発生量テーブルＤＧＴとステップＳ１００で入力したディザマトリックスデータＤＭとを用いて、エンコードテーブルＥＴとプレデコードテーブルＤＴ１を生成する処理を行う（ステップＳ１４０）。以下では、かかるステップＳ１４０による処理を、単純に「テーブル生成処理」という。
【００８８】
テーブル生成処理は複雑な処理であるため、詳細な説明は後に記述するものとし、ここでは、このテーブル生成処理によって生成されるエンコードテーブルＥＴとプレデコードテーブルＤＴ１のデータ構造について説明する。
【００８９】
図１０は、エンコードテーブルＥＴのデータ構造を示す説明図である。図示するように、このエンコードテーブルＥＴには、０から８１９１までのブロック番号と、０から３１までの５ビットのエンコード値ＥＶとに対応付けて、０から２５５までのいずれかの階調値が記録されている。以下では、エンコードテーブルＥＴに記録されている階調値を、「階調閾値」というものとする。上述したように、このエンコードテーブルＥＴは、図３に示したエンコードユニット４１０が、ＣＭＹ画像の８ビットの階調値を、その画素の位置、すなわち、ブロック番号に応じて、５ビットのエンコード値ＥＶに変換するためのテーブルである。
【００９０】
ここで、このエンコードテーブルＥＴを用いた階調値からエンコード値ＥＶへの変換方法を簡単に説明する。まず、エンコードユニット４１０は、エンコード処理の対象とするＣＭＹ画像中の画素が、ディザマトリックスデータＤＭ中のどのブロックに該当するかを計算する。そして、そのブロック番号に該当するエンコードテーブルＥＴの中の行を参照し、その行の階調閾値とその画素の階調値とを階調閾値の低い方から順に比較していく。この比較の結果、順に参照した階調閾値が、その画素の階調値を初めて超えた場合のその階調閾値に対応するエンコード値ＥＶが、変換後のエンコード値ＥＶとなる。例えば、ブロック番号が「３」で、処理対象の画素の階調値が「１９９」であれば、図１０の場合には、エンコード値ＥＶは、「１６」となる。つまり、このエンコードテーブルＥＴには、各エンコード値に対応付けて、そのエンコード値に対応する階調値の範囲が階調閾値というパラメータにより記録されていることになる。
【００９１】
図１１は、ＣＭＹ画像の階調値に応じてエンコードテーブルＥＴから取得されるエンコード値ＥＶの変化の例を模式的に示す説明図である。図１１には、ブロック番号が「Ｘ１」から「Ｘ５」までの５つのブロックについて、階調値に応じたエンコード値ＥＶの変化の例を示している。図示の便宜のため、エンコード値の変化は、ブロック毎に縦軸をずらして描いている。図示するように、各ブロックとも、階調値が増加すれば、エンコード値ＥＶの値も増加しているが、その増加の態様や変化数（ステップ数）は、ブロック毎に異なっている。各ブロックにおけるエンコード値ＥＶの値は、ドット配置データ（図４参照）を間接的に示す値である。そのため、ＣＭＹ画像の中で、同じ階調値を有する画素があっても、その画素の位置が異なれば、適用するブロック番号も異なり、異なるエンコード値ＥＶが取得される。この結果、それらの画素に対応する印刷媒体上の位置には、異なる配置のドットが形成されることになる。
【００９２】
図１２は、プレデコードテーブルＤＴ１のデータ構造を示す説明図である。図示するように、このプレデコードテーブルＤＴ１には、ブロック番号とエンコード値ＥＶとに対応付けて、図８に示したポストデコードテーブルＤＴ２のインデックス値が記録されている。図３に示したデコードユニット４２０は、そのデコード処理時に、中間バッファＢＦに記憶されたエンコード値ＥＶを読み込み、このポストデコードテーブルＤＴ２を参照することで、エンコード値ＥＶをインデックス値に変換する。
【００９３】
ここでデコード処理の内容を簡単に説明する。デコードユニット４２０は、図１２に示したプレデコードテーブルＤＴ１を参照してエンコード値ＥＶをインデックス値に変換すると、図８のポストデコードテーブルＤＴ２を参照することで、インデックス値に対応するドット数データを取得し、このドット数データと、図７に示した順序値テーブルＳＴとに基づき図４に示したドット配置データを生成する。こうすることで、デコードユニット４２０は、エンコード値ＥＶに基づきドット配置データを生成することができる。このデコード処理についての詳細な説明は後述する。
【００９４】
説明を図６に戻す、ＣＰＵ１５１は、ステップＳ１４０におけるテーブル生成処理を完了すると、次に、図１０に示したエンコードテーブルＥＴのデータ量を削減するデータ量削減処理を実行する（ステップＳ１５０）。上述したように、エンコードテーブルＥＴは、ディザマトリックスデータＤＭやドット発生量テーブルＤＧＴに基づき動的に生成されるテーブルであり、その内容は印刷処理毎に変化する場合がある。ドット発生量テーブルＤＧＴは印刷用紙の種類に応じて異なる内容を有しており、また、ディザマトリックスデータＤＭについても、ファームウェアの更新等によりその内容が変動する場合があるからである。従って、エンコードテーブルＥＴに記録されるエンコード値ＥＶの範囲は変化することがあり、これに伴い、テーブル内に参照されない領域が存在する場合が生じる。例えば、図１０に示したエンコードテーブルＥＴには、エンコード値ＥＶが「０」から「３１」まで用意されているにもかかわらず、実際に階調閾値が記録されているのは、エンコード値ＥＶが２０までである。そのため、エンコード値ＥＶが２１以降の階調閾値はエンコード処理においてどのブロックについても参照されることが無く、エンコード値ＥＶと階調閾値とが実質的に対応しない無駄な領域となる。そこで、本実施例では、上記ステップＳ１５０のデータ量削減処理において、こうした無駄な領域（要素）の少なくとも一部を削除する処理を行う。こうすることで、ＲＡＭ１５２に記憶されるエンコードテーブルＥＴのデータ量を削減することが可能になる。かかるデータ量削減処理の詳細な処理内容については後述する。
【００９５】
以上、本実施例における初期化処理の流れについて説明した。以下では、上述したステップＳ１４０におけるテーブル生成処理と、ステップＳ１５０におけるデータ量削減処理の詳細についてそれぞれ説明する。
【００９６】
（Ｃ−１）エンコードテーブル及びプレデコードテーブル生成処理：
図１３は、図６のステップＳ１４０で実行されるテーブル生成処理（エンコードテーブル及びプレデコードテーブル生成処理）の詳細を示すフローチャートである。この処理が実行されると、ＣＰＵ１５１は、まず、ＲＡＭ１５２に、すべての要素を「０」に設定したエンコードテーブルＥＴとプレデコードテーブルＤＴ１を用意する（ステップＳ２００）。
【００９７】
具体的には、図１０に示したように、エンコードテーブルＥＴには、エンコード値ＥＶが０から３１までの範囲について、各要素に、０から２５５までの８ビットの階調閾値が記録され、それが、ブロック８１９２個分格納される。従って、ＲＡＭ１５２には、これらの積である２５６Ｋバイト（＝３２×８ビット×８１９２個）の容量をエンコードテーブルＥＴのために用意する。一方、プレデコードテーブルＤＴ１については、図１２に示したように、エンコード値が０から３１までの範囲について、各要素に、０から１６４までの８ビットのインデックス値が記録され、それが、ブロック８１９２個分格納される。従って、ＲＡＭ１５２には、エンコードテーブルＥＴと同様に、２５６Ｋバイトの容量をプレデコードテーブルＤＴ１のために用意する。
【００９８】
すべての要素を「０」に設定したエンコードテーブルＥＴとプレデコードテーブルＤＴ１を用意すると、次に、ＣＰＵ１５１は、現在の処理対象とするブロック番号Ｎを「０」とし（ステップＳ２１０）、更に、以降の処理で用いられる変数として、エンコード値ＥＶを「０」とし、現在のブロック内に発生する各サイズ（Ｓドット，Ｍドット，Ｌドット）のドット数をそれぞれ「０」とする（ステップＳ２２０）。そして、更に、現在の入力階調値ＴＤを「０」とする（ステップＳ２３０）。
【００９９】
続いて、ＣＰＵ１５１は、上記ステップＳ２２０で設定した入力階調値ＴＤに基づき、現在のブロック内に発生する各サイズのドット数を決定するドット数カウント処理を実行する（ステップＳ２４０）。
【０１００】
図１４は、上記ステップＳ２４０において実行されるドット数カウント処理の詳細を示すフローチャートである。かかる処理では、まず、ＣＰＵ１５１は、上記ステップＳ２３０で設定された入力階調値ＴＤに対応する各サイズのドット発生量をドット発生量テーブルＤＧＴ（図９参照）から取得する（ステップＳ４００）。
【０１０１】
各サイズのドット発生量を取得すると、ＣＰＵ１５１は、現在のブロック番号Ｎに対応する閾値群をディザマトリックスデータＤＭ（図７参照）から取得する。そして、これからカウントを行う各サイズのドットのカウント数（ｄｏｔＬ，ｄｏｔＭ，ｄｏｔＳ）をそれぞれ「０」とし、すべてのドットの総カウント数ｎを「０」とする（ステップＳ４１０）。
【０１０２】
カウント数および総カウント数を設定すると、ＣＰＵ１５１は、現在の総カウント数ｎに応じて、ｎ番目に低い閾値を閾値群から読み込む。そして、上記ステップＳ４００で取得したＬドットのドット発生量が、この閾値よりも大きいか否かを判断する（ステップＳ４２０）。この判断の結果、Ｌドットの発生量が、ｎ番目に低い閾値よりも大きければ（ステップＳ４２０：Ｙｅｓ）、Ｌドットのカウント数ｄｏｔＬをインクリメントする（ステップＳ４３０）。すなわち、この場合、４×２のドット配置データ内に発生するＬドットの数が１つ増加することになる。
【０１０３】
Ｌドットのカウント数ｄｏｔＬをインクリメントすると、ＣＰＵ１５１は、現在の総カウント数ｎが「７」であるかを判断する（ステップＳ４４０）。その結果、総カウント数ｎが「７」であれば、閾値群内の閾値を全て参照したことになり、ドット数のカウントが終了したと判断できるので、処理を後述するステップＳ５００に進める。一方、ステップＳ４４０において、総カウント数ｎが「７」でなければ、次に低い閾値とドット発生量との比較を続行するため、総カウント数ｎをインクリメントし（ステップＳ４５０）、処理を上記ステップＳ４２０に戻す。
【０１０４】
上記ステップＳ４２０において、Ｌドットの発生量が、ｎ番目に低い閾値以下であれば（ステップＳ４２０：Ｎｏ）、ＣＰＵ１５１は、次に、ドット発生量テーブルＤＧＴから取得したＭサイズとＬサイズのドット発生量の累積値が、ｎ番目に低い閾値を超えたか否かを判断する（ステップＳ４６０）。その結果、ＭサイズとＬサイズのドット発生量の累積値が、ｎ番目に低い閾値よりも大きいと判断した場合には（ステップＳ４６０：Ｙｅｓ）、Ｍドットのカウント数ｄｏｔＭをインクリメントする（ステップＳ４７０）。すなわち、この場合、４×２のドット配置データ内に配置するＭドットの数が１つ増加することになる。
【０１０５】
Ｍドットのカウント数ｄｏｔＭをインクリメントすると、ＣＰＵ１５１は、上述したステップＳ４４０に処理を移行する。こうすることで、総カウント数ｎが「７」に達していない場合には、総カウント数ｎがインクリメントされ（ステップＳ４５０）、上記ステップＳ４２０に処理が戻されることになる。
【０１０６】
上記ステップＳ４６０において、ＭドットとＬドットのドット発生量の累積値が、ｎ番目に低い閾値以下であると判断されれば（ステップＳ４６０：Ｎｏ）、次に、ＣＰＵ１５１は、ドット発生量テーブルＤＧＴから取得したＳドットとＭドットとＬドットのドット発生量の累積値が、ｎ番目に低い閾値を超えたか否かを判断する（ステップＳ４８０）、その結果、かかるドット発生量の累積値が、ｎ番目に低い閾値よりも大きいと判断した場合には（ステップＳ４８０：Ｙｅｓ）、Ｓドットのカウント数ｄｏｔＳをインクリメントする（ステップＳ４９０）。すなわち、この場合、４×２のドット配置データ内に配置するＳドットの数が１つ増加することになる。
【０１０７】
Ｓドットのカウント数をインクリメントすると、ＣＰＵ１５１は、上述したステップＳ４４０に処理を移行する。こうすることで、総カウント数ｎが「７」に達していない場合には、総カウント数ｎが１つインクリメントされ（ステップＳ４５０）、上記ステップＳ４２０に処理が戻されることになる。
【０１０８】
上記ステップＳ４８０において、ＳドットとＭドットとＬドットのドット発生量の累積値が、ｎ番目に低い閾値以下であると判断された場合（ステップＳ４８０：Ｎｏ）、もしくは、上記ステップＳ４４０において、総カウント数が「７」であり、８個の閾値をすべて参照したと判断した場合には（ステップＳ４４０：Ｙｅｓ）、ＣＰＵ１５１は、最後に、各サイズのドットの数を、これまでカウントした値に確定する（ステップＳ５００）。
【０１０９】
図１５は、上述したドット数カウント処理の具体例を示す説明図である。図１５（ａ）に示すように、ここでは、ドット発生量テーブルＤＧＴにおいて、現在の入力階調値ＴＤに対応するＬドットのドット発生量が「４０９」、Ｍドットが「１５５０」、Ｓドットが「１３０４」だとし、現在のブロックに対応する閾値群が、図７（ｂ）に示した閾値群であったとする。
【０１１０】
この場合、まず、図１４のステップＳ４２０では、閾値群内の最も低い閾値「２３」と、Ｌドットのドット発生量「４０９」とが比較される。そうすると、このドット発生量「４０９」の方が、閾値「２３」よりも大きいので、ステップＳ４２０では、「Ｙｅｓ」と判定され、ステップＳ４３０によってＬドットのカウント数がインクリメントされて「１」になる。そうすると、ステップＳ４５０によって、総カウント数ｎがインクリメントされるため、続くステップＳ４２０では、２番目に低い閾値「４７２」とＬドットのドット発生量「４０９」が比較される。この場合、閾値「４７２」よりもドット発生量「４０９」の方が小さくなるので、ステップＳ４２０では、「Ｎｏ」と判定され、処理がステップＳ４６０に進む。この時点で、Ｌドットのカウント数は、図１５（ｂ）に示すように「１」で確定することになる。
【０１１１】
ステップＳ４６０では、Ｌドットのドット発生量とＭドットのドット発生量の累積値「１９５９（＝４０９＋１５５０）」と、２番目に低い閾値「４７２」とが比較される。この結果、ＬドットとＭドットのドット発生量の累積値「１９５９」の方が、閾値「４７２」よりも大きいため、ステップＳ４６０では「Ｙｅｓ」と判断され、ステップＳ４７０によってＭドットのカウント数がインクリメントされ「１」となる。そうすると、更に、次の閾値「１０１０」が参照される。しかし、この場合においても、依然として、閾値「１０１０」より、ドット発生量の累積値「１９５９」の方が大きいため、結局、７番目に低い閾値「２２４０」が参照されるまで、Ｍサイズのカウント数はインクリメントされる。この結果、Ｍサイズのカウント数は、図１５（ｃ）に示すように「５」で確定する。
【０１１２】
７番目に低い閾値「２２４０」が参照されると、ステップＳ４６０では、「Ｎｏ」と判定されるため、次に、ステップＳ４８０において、ＬドットとＭドットとＳドットのドット発生量の累積値「３２６３（＝４０９＋１５５０＋１３０４）」と、７番目に低い閾値「２２４０」とが比較される。この結果、ドット発生量の累積値「３２６３」の方が７番目に低い閾値よりも大きいため、ステップＳ４８０では「Ｙｅｓ」と判定され、ステップＳ４９０によってＳドットのカウント数がインクリメントされて「１」になる。そうすると、次に、最も値の高い閾値「３２６２」が参照される。
【０１１３】
ＬドットとＭドットとＳドットのドット発生量の累積値「３２６３」は、８番目の閾値「３２６２」よりも依然として大きい。そのため、ステップＳ４８０では、再度、「Ｙｅｓ」と判定されて、ステップＳ４９０によってＳサイズのドットのカウント数がインクリメントされ、図１５（ｄ）に示すように「２」となる。すると、現在の総カウント数ｎは「７」であるため、ステップＳ４４０において、「Ｙｅｓ」と判定され、各サイズのドットのカウント数が確定する。すなわち、以上で示した例では、Ｌドットが１個、Ｍドットが５個、Ｓドットが２個となる。
【０１１４】
以上、図１５を用いて説明したように、上述したドット数カウント処理では、最初に、Ｌドットの発生数が決定され、つづいて、Ｍサイズ、Ｓサイズのドットの発生数が決定される。各サイズの発生数を決定する際には、各サイズのドット発生量を加算しつつ閾値との比較を行っていくので、最終的には、図１５（ｄ）に示すように、各サイズのドットの数は、ブロック内に各サイズのドットが重複せずにＬドットから順に配置することが可能な数になる。
【０１１５】
ここで、ドット数カウント処理の他の具体例について検討する。例えば、現在の入力階調値ＴＤに対応するＬドット、Ｍドットのドット発生量がともに「０」であり、Ｓドットのドット発生量が「１５００」とする。また、現在のブロックに対応する閾値群が図７（ｂ）に示した閾値群だとする。そうすると、図１４に示したフローチャートのステップＳ４２０、ステップＳ４６０では、Ｌドットの発生量もＭドットの発生量も「０」であり、最も低い閾値「２３」よりも小さいため、「Ｎｏ」と判断され、ステップＳ４８０に処理が進む。そして、このステップＳ４８０では、ドット発生量「１５００」を超える５番目に低い閾値「１６５９」が参照された時点で、ステップＳ４８０では、「Ｎｏ」と判定され、Ｓドットのカウント数が「５」で確定し、カウント処理が終了する。すなわち、本実施例では、閾値の低い順から比較を行うため、全サイズのドット発生量の累積値を超えた閾値が参照された時点で、次の閾値を参照する必要が無くなる。従って、各サイズのドットのカウント処理が高速化され、ひいては、初期化処理を高速に行うことが可能になる。
【０１１６】
説明を図１３に戻す。図１３のステップＳ２４０、すなわち、図１４に示したドット数カウント処理が実行されて、各サイズのドット数が確定すると、次に、ＣＰＵ１５１は、前回の入力階調値ＴＤにおける各サイズのドット数に対して、今回の入力階調値ＴＤにおける各サイズのドット数のいずれかが変化したかを判定する（ステップＳ２５０）。例えば、前回のカウント処理によって、Ｓドットが２個、Ｍドットが５個、Ｌドットが１個であった場合に、今回のカウント処理によって、Ｓドットが２個、Ｍドットが４個、Ｌドットが２個となれば、ＭドットとＬドットのカウント数が変化していることになるので、上記ステップＳ２５０では、変化あり（Ｙｅｓ）と判定される。
【０１１７】
上記ステップＳ２５０において、変化ありと判定されれば（ステップＳ２５０：Ｙｅｓ）、現在のブロック番号Ｎおよびエンコード値ＥＶに対応する各サイズのドット数を、上記ステップＳ２４０でカウントされた値に更新する（ステップＳ２６０）。そして、ステップＳ２００において用意したエンコードテーブルＥＴの現在のブロック番号Ｎおよびエンコード値ＥＶに対応する要素に、階調閾値として、現在の入力階調値ＴＤをセットする（ステップＳ２７０）。
【０１１８】
エンコードテーブルＥＴに階調閾値をセットすると、続いて、ＣＰＵ１５１は、予め作成しておいたポストデコードテーブルＤＴ２（図８参照）を参照し、上記ステップＳ２６０で更新した各サイズのドットの数と同数のドット数を有するインデックス値を取得する。例えば、上記ステップＳ２６０において、Ｓドットが０個、Ｍドットが２個、Ｌドットが６個であるとされれば、取得されるインデックス値は、図８を参照すると「１６０」になる。こうして、インデックス値を取得すると、ＣＰＵ１５１は、ステップＳ２００において用意したプレデコードテーブルＤＴ１の現在のブロック番号Ｎおよびエンコード値ＥＶに対応する要素に、そのインデックス値をセットする（ステップＳ２８０）。
【０１１９】
エンコードテーブルＥＴへの階調閾値の記録、および、プレデコードテーブルＤＴ１へのインデックス値の記録を完了すると、ＣＰＵ１５１は、現在のエンコード値ＥＶをインクリメントする（ステップＳ２９０）。つまり、このステップＳ２９０では、上記ステップＳ２５０においていずれかのサイズのドットの数が変化したと判断される毎にエンコード値ＥＶが変化していくことになる。換言すれば、１ブロック内に発生するドットの態様が変化する度にエンコード値ＥＶが変化していくことになる。
【０１２０】
上記ステップＳ２９０によって、エンコード値ＥＶをインクリメントした後、もしくは、上記ステップＳ２５０において、いずれのサイズのドット数も変化していないと判断された場合には（ステップＳ２５０：Ｎｏ）、ＣＰＵ１５１は、現在の入力階調値ＴＤが「２５５」を超えたか否かを判断する（ステップＳ３００）。その結果、入力階調値ＴＤが「２５５」を超えていなければ（ステップＳ３００：Ｎｏ）、現在の入力階調値ＴＤをインクリメントした上で（ステップＳ３１０）、処理を上記ステップＳ２４０に戻す。こうすることで、現在のブロックについて入力階調値ＴＤを０から２５５まで変化させながら、入力階調値ＴＤとエンコード値ＥＶの対応関係をエンコードテーブルＥＴに記録することができる。また、これと同時に、エンコード値ＥＶとインデックス値の対応関係をプレデコードテーブルＤＴ１に記録することができる。
【０１２１】
一方、上記ステップＳ３００において、現在の入力階調値ＴＤが「２５５」を超えていれば（ステップＳ３００：Ｙｅｓ）、全てのブロックについて上述した処理が完了したかを判断し（ステップＳ３２０）、完了していなければ（ステップＳ３２０：Ｎｏ）、現在のブロック番号Ｎをインクリメントした上で（ステップＳ３４０）、処理を上記ステップＳ２２０に戻す。こうすることで、全てのブロックについて、入力階調値ＴＤとエンコード値ＥＶの対応関係をエンコードテーブルＥＴに記録し、エンコード値とインデックス値の対応関係をプレデコードテーブルＤＴ１に記録することができる。全てのブロックについて上述した処理が完了していれば（ステップＳ３２０：Ｙｅｓ）、当該テーブル生成処理を終了し、処理を図６のステップＳ１５０（データ量削減処理）に移行する。
【０１２２】
以上、図６のステップＳ１４０に示したテーブル生成処理の詳細について説明した。ＣＰＵ１５１は、このテーブル生成処理を実行することにより、図１０に示したエンコードテーブルＥＴと、図１２に示したプレデコードテーブルＤＴ１とを生成することができる。
【０１２３】
（Ｃ−２）データ量削減処理：
図１６は、図６のステップＳ１５０において実行されるデータ量削減処理のフローチャートである。このデータ量削減処理は、上述したテーブル生成処理によって生成されたエンコードテーブルＥＴのデータ量を削減する処理である。
【０１２４】
この処理が実行されると、ＣＰＵ１５１は、まず、ＲＡＭ１５２に記憶されたエンコードテーブルＥＴ（図１０）を参照し（ステップＳ６００）、最大ステップ数を取得する（ステップＳ６１０）。最大ステップ数とは、すべてのブロックのステップ数（段数）の中で最も大きいステップ数のことをいい、換言すれば、初期値としての「０」を除いて最も多くの階調閾値が対応付けられたブロックが有するエンコード値ＥＶの範囲のことをいう。図１０に示したエンコードテーブルＥＴでは、最大ステップ数は、ブロック番号３の「２１」である。
【０１２５】
最大ステップ数を取得すると、次に、ＣＰＵ１５１は、データ量削減後のエンコードテーブルＥＴ（以下、「圧縮エンコードテーブルＥＴＣ」と記載する）を格納するために必要な記憶領域をＲＡＭ１５２に確保する（ステップＳ６２０）。具体的には、最大ステップ数と、各階調閾値のデータ容量（８ビット）と、ブロックの数とをすべて乗じた値が必要な記憶容量となる。図１０の例では、必要な記憶容量は１６８Ｋバイト（＝８１９２個×２１×８ビット）となる。なお、本願の発明者の実験では、最大ステップ数は、「２４」程度になることが多く、この場合には、必要な記憶容量は、１９２Ｋバイト（＝８１９２個×２４×８ビット）になる。
【０１２６】
必要な記憶容量を確保すると、ＣＰＵ１５１は、既にＲＡＭ１５２に記憶されたデータ量削減前のエンコードテーブルＥＴから、各階調閾値をステップＳ６２０で確保した領域にコピーする（ステップＳ６３０）。そして、最後に、データ量削減前のエンコードテーブルＥＴをＲＡＭ１５２から削除する（ステップＳ６４０）。こうすることで、最大ステップ数を超えるエンコード値に対応する要素が、すべてのブロックについて削除されることになり、エンコードテーブルＥＴのサイズが削減されることになる。
【０１２７】
図１７は、当該データ量削減処理によって生成された圧縮エンコードテーブルＥＴＣの一例を示す説明図である。この圧縮エンコードテーブルＥＴＣと、図１０に示したデータ量削減前のエンコードテーブルＥＴとを比較すれば、各ブロックについて、最大ステップ数以上の要素に記録されていた階調閾値「０」が削除され、明らかに、データ量が削減されていることがわかる。本実施例では、このデータ量削減処理によって、エンコードテーブルＥＴのデータ量を概ね３割程度削減することができる。
【０１２８】
以上、図５のステップＳ１０で実行される初期化処理の全内容を説明した。以下では、この初期化処理によって生成された種々のテーブルを用いて実行されるハーフトーン処理の詳細な処理内容について説明する。
【０１２９】
（Ｄ）ハーフトーン処理：
図１８は、図５に示した印刷処理のステップＳ４０で実行されるハーフトーン処理のフローチャートである。このハーフトーン処理は、上述した初期化処理において生成した各テーブル（エンコードテーブルＥＴ、プレデコードテーブルＤＴ１、ポストデコードテーブルＤＴ２、順序値テーブルＳＴ）を順次参照することで、ＣＭＹ画像の各画素について、それぞれドット配置データを生成する処理である。
【０１３０】
画像処理ＡＳＩＣ１５５は、まず、このハーフトーン処理を実行すると、図３に示したエンコードユニット４１０を用いて、処理対象の画素の各色（Ｃ，Ｍ，Ｙ，Ｋ，Ｌｃ、Ｌｍ）の階調値をそれぞれエンコード値ＥＶに変換するエンコード処理を行う（ステップＳ８００）。
【０１３１】
（Ｄ−１）エンコード処理：
図１９は、エンコード処理の詳細な処理内容を示すフローチャートである。このエンコード処理は、入力画素の階調値を、エンコード値ＥＶに変換するための処理である。
【０１３２】
このエンコード処理が実行されると、エンコードユニット４１０は、まず、ＣＭＹ画像をライン毎に色変換ユニット３００から入力し、その中から１画素ずつＸ方向（右方向）に階調値ＧＶを取得する（ステップＳ８０２）。
【０１３３】
階調値ＧＶを取得すると、エンコードユニット４１０は、その画素が属するブロック番号の計算を行う（ステップＳ８０４）。ここで、本実施例では、図４に示したように、１つの階調値ＧＶを、４×２個のドットで表現するものとした。この４×２個のドットは、図７に示したディザマトリックスＤＭの４×２の要素、すなわち、１ブロックに相当する。従って、ＣＭＹ画像内の処理対象の画素の位置がわかれば、その画素の位置に対応するディザマトリックスＤＭ内のブロックの位置を容易に求めることができる。
【０１３４】
図２０は、ブロック番号の計算方法の概念を示す説明である。図７（ａ）に示したディザマトリックスデータＤＭは、横方向に１２８ブロック、縦方向に６４ブロックの計８１９２個のブロックを有するものとした。そのため、１枚の入力画像データを、１２８画素×６４画素を単位として分割し、かかる単位内の各画素に対して、ブロック番号が０から８１９１まで割り振られるように、ブロック番号の計算を行う。すなわち、図２０のように、１枚の入力画像データのなかに、ディザマトリックスＤＭがタイル状に並べられているものとして、ブロック番号の計算を行うのである。
【０１３５】
具体的には、エンコード処理を行おうとする現在の画素の座標を（Ｘ，Ｙ）とした場合に、現在の画素のＹ座標が「０」であり、Ｘ座標が、「０」から「１２７」までの間は、ブロック番号が「０」から「１２７」まで、順番に割り振られることになる。その後、Ｙ座標が変化せず、現在の画素のＸ座標が、「１２８」になった時点で、ブロック番号は、再び、「０」となる。このように、画像のＸ方向に対して、ブロック番号が「０」から「１２７」まで繰り返して適用された後に、現在の画素の座標が、（０，１）になった時点で、ブロック番号は「１２８」となる。そして、その後、Ｙ座標が「１」の間は、「１２８」から「２５５」までのブロック番号が繰り返して割り振られることになる。つまり、ブロック番号Ｎは、エンコード処理を行う対象画素の座標を（Ｘ，Ｙ）とすると、下記式（２）によって求めることができる。ただし、下記式（２）において、「％」は、剰余を求める演算子であるものとする。
【０１３６】
Ｎ＝（Ｘ％１２８）＋（Ｙ％６４）＊１２８  …（２）
【０１３７】
図２１は、ブロック番号の他の計算方法の概念を示す説明図である。図２０に示したブロック番号の計算例では、１枚の画像データ内に複数のディザマトリックスＤＭがタイル状に等しく並べられることを想定してブロック番号の計算を行っている。これに対して、図２１では、タイル状に配置されたディザマトリックスデータＤＭのうち、偶数行のディザマトリックスデータＤＭを、奇数行のディザマトリックスデータＤＭに対してＸ方向に６４画素ずらして並べている。このように、ディザマトリックスＤＭをずらして画像内に配置するものとすれば、ディザマトリックスＤＭの繰り返しパターンの傾向が出力画像に現れることを抑制できるため、画質を向上させることができる。
【０１３８】
本実施例では、エンコードユニット４１０は、ライン単位でＣＭＹ画像を入力するものとしたため、図２０や図２１を参照すれば、最初のラインについては、ブロック番号が０から１２７が繰り返して適用されることになる。従って、本実施例では、エンコードユニット４１０がエンコード処理を実行するに当たり、入力したラインのＹ座標に応じて予め圧縮エンコードテーブルＥＴＣの必要な部分についてのみＳＲＡＭ１５６に入力しておく。こうすることで、各画素の階調値を取得する度に、ＳＲＡＭ１５６よりもアクセス速度の遅いＲＡＭ１５２にエンコードテーブルＥＴを読みに行く必要が無くなり、処理を高速化することが可能になる。なお、本実施例では、データ容量が削減されたまま、ＳＲＡＭ１５６に、圧縮エンコードテーブルＥＴＣの一部を入力するものとする。こうすることで、ＳＲＡＭ１５６が必要とする記憶容量を削減することができる。
【０１３９】
図１９のステップＳ８０４によって、ブロック番号の計算が完了すると、エンコードユニット４１０は、これから求めようとするエンコード値ＥＶの値を「０」に初期化する（ステップＳ８０６）。そして、図１７に示した圧縮エンコードテーブルＥＴＣ（実際には、ＳＲＡＭ１５６に読み込まれた部分的な圧縮エンコードテーブルＥＴＣ）を参照して、ステップＳ８０４で算出されたブロック番号および現在のエンコード値ＥＶに対応する階調閾値ＧＶｔを取得する（ステップＳ８０８）。
【０１４０】
階調閾値ＧＶｔを取得すると、エンコードユニット４１０は、この階調閾値ＧＶｔと、ステップＳ８０２で入力した処理対象の画素の階調値ＧＶとを比較し、この階調値ＧＶが階調閾値ＧＶｔ以上であるかを判定する（ステップＳ８１０）。この判定の結果、階調値ＧＶが階調閾値ＧＶｔ以上であれば（ステップＳ８１０：Ｙｅｓ）、現在のエンコード値ＥＶに「１」を加算し（ステップＳ８１２）、加算後のエンコード値ＥＶがその最大値ＥＶｍａｘ以上となったかを判定する（ステップＳ８１４）。最大値ＥＶｍａｘは、上述した最大ステップ数から「１」を差し引いた値である（例えば、図１７のエンコードテーブルを参照している場合には「２０」）。エンコード値ＥＶが最大値ＥＶｍａｘ以上となれば（ステップＳ８１４：Ｙｅｓ）、その時点で、エンコード値ＥＶは最大値ＥＶｍａｘに確定する（ステップＳ８１６）。
【０１４１】
上記ステップＳ８１４において、エンコード値ＥＶがその最大値ＥＶｍａｘ未満であると判定されれば（ステップＳ８１４：Ｎｏ）、エンコードユニット４１０は、処理をステップＳ８０８に戻し、加算後のエンコード値ＥＶに対応する階調閾値ＧＶｔを取得して、再び、階調閾値ＧＶｔと階調値ＧＶとの比較を行う。こうして、比較を繰り返した結果、ステップＳ８１０において、初めて階調値ＧＶが、階調閾値ＧＶｔ未満となれば（ステップＳ８１０：Ｎｏ）、そのときのエンコード値ＥＶの値が、エンコード結果のエンコード値ＥＶとして確定する（ステップＳ８１６）。
【０１４２】
以上で説明したエンコード処理によれば、図１７に示したエンコードテーブルＥＴを参照することにより、入力画素の階調値を、その画素が属するブロックに応じて、５ビットのエンコード値に変換することができる。エンコードユニット４１０は、このエンコード処理を、ＣＭＹ画像の全画素について実行する。
【０１４３】
なお、上述したエンコード処理では、ＳＲＡＭ１５６に対して、圧縮エンコードテーブルＥＴＣの一部を、データ量が削減されたまま入力するものとした。これに対して、ＳＲＡＭ１５６に入力するブロックについて、データ量を図１０に示した元の形式まで回復させて入力するものとしてもよい。このような構成であれば、ＳＲＡＭ１５６内に入力されるエンコードテーブルの形式が一律になるため、ＳＲＡＭ１５６のメモリ管理を容易に行うことが可能になる。
【０１４４】
説明を図１８に戻す。上述したエンコード処理によって、エンコードユニット４１０は階調値をエンコード値ＥＶに変換すると、その値を、ＲＡＭ１５２内の中間バッファＢＦにバッファリングする（ステップＳ８２０）。上述したエンコード処理の結果、この中間バッファＢＦには、８ビットの階調値ではなく、５ビットのエンコード値ＥＶが格納されることになるため、ＲＡＭ１５２の記憶容量を大幅に削減することができる。
【０１４５】
エンコードユニット４１０によってエンコード値ＥＶが中間バッファＢＦにバッファリングされると、次に、デコードユニット４２０が、このエンコード値ＥＶに基づき、図４に示したドット配置データを生成するデコード処理を実行する（ステップ８４０）。このデコード処理は、画像データを構成する全ての画素についてエンコード値ＥＶがバッファリングされることを待つことなく、１つでもエンコード値ＥＶがバッファリングされるとデコードユニット４２０によって実行される。つまり、エンコード処理とデコード処理とは、同時並列的に実行されることになる。
【０１４６】
（Ｄ−２）デコード処理：
図２２は、デコード処理の詳細なフローチャートである。このデコード処理が実行されると、デコードユニット４２０は、まず、中間バッファＢＦに蓄積されたエンコード値ＥＶを読み出す（ステップＳ８２２）。このデコード処理においても、１ライン分に相当するエンコード値ＥＶをライン単位で中間バッファＢＦから読み出す。
【０１４７】
エンコード値ＥＶを読み出した後、デコードユニット４２０は、処理対象のエンコード値ＥＶの生成元である画素が属するブロック番号の計算を行う（ステップＳ８２４）。エンコード値ＥＶは、エンコード処理された順序で中間バッファＢＦにバッファリングされているため、この順序通りにエンコード値ＥＶを読み出せば、そのエンコード値ＥＶに対応するブロック番号も上述した計算方法によって自ずと算出することができる。なお、デコード処理においても、ＲＡＭ１５２に記憶されたプレデコードテーブルＤＴ１および順序値テーブルＳＴの中から、デコード処理に必要なブロック番号に該当する部分のみを予めＳＲＡＭ１５６に入力しておくものとする。
【０１４８】
ブロック番号の計算を行うと、デコードユニット４２０は、図１２に示したプレデコードテーブルＤＴ１（実際には、ＳＲＡＭ１５６に入力された部分的なプレデコードテーブルＤＴ１）を参照して、ステップＳ８２２において取得したエンコード値ＥＶと、ステップＳ８２４によって求めたブロック番号とに対応したインデックス値を取得する（ステップＳ８２６）。そして、更に、ポストデコードテーブルＤＴ２を参照して、このインデックス値に対応するドット数データを取得する（ステップＳ８２８）。このポストデコードテーブルＤＴ２については、テーブル全体を予めＳＲＡＭ１５６に入力しておくものとする。ポストデコードテーブルＤＴ２は比較的容量が少ないため（１６５×１６ビット＝３３０バイト）、ＳＲＡＭ１５６の容量を圧迫することはないからである。ポストデコードテーブルＤＴ２からドット数データを取得すると、デコードユニット４２０は、各サイズのドットをブロック内に配置するドット配置処理を実行する（ステップＳ８３０）。
【０１４９】
図２３は、ドット配置処理の詳細なフローチャートである。図２４は、このドット配置処理によるドットの配置工程を模式的に示す説明図である。図２３に示すように、このドット配置処理が実行されると、デコードユニット４２０は、まず、現在のブロックに対応する順序値データ（図７（ｃ）参照）を、ＳＲＡＭ１５６に部分的に記憶された順序値テーブルＳＴ（図７（ｄ）参照）から取得する（ステップＳ９００）。そして、これからドットを配置するブロック内の全要素に対して、「ドット無し」を表すドットサイズ値「００」を設定して初期化し（ステップＳ９１０）、これからドットを配置しようとするブロック内の位置を、図２４（ａ）に示す「ａ」の位置（最も左上の位置）に設定する（ステップＳ９２０）。
【０１５０】
ドットを配置しようとする位置を設定すると、デコードユニット４２０は、現在のドット位置に対応する順序値を順序値データから取得する（ステップＳ９３０）。図２４（ｂ）には、順序値テーブルＳＴから入力した順序値データの一例を示している。図示した例では、現在の位置「ａ」に対応する順序値は、「５」となるため、上記ステップＳ９３０では、この値「５」が取得される。
【０１５１】
次に、デコードユニット４２０は、ポストデコードテーブルＤＴ２から取得したドット数データから、ステップＳ９３０で取得した順序値に対応するドットサイズ値を取得する（ステップＳ９４０）。具体的には、ドット数データの下位ビット側から２ビット毎に、ステップＳ９３０で取得した順序値の値分だけ数え、その位置に記録されたドットサイズ値を取得する。図２４（ｃ）には、ポストデコードテーブルＤＴ２から取得したドット数データの一例を示している。かかる図において、順序値「５」に対応するドットサイズ値は、ドットサイズデータの下位ビットから数えて６つめのドットサイズ値「０１」である。ドットサイズ値「０１」は、Ｓサイズのドットであることを表す。
【０１５２】
ドットサイズ値を取得すると、ＣＰＵ１５１は、取得したドットサイズ値を、ブロック内の現在の位置に設定する（ステップＳ９５０）。つまり、図２４（ｄ）に示すように、現在の位置が「ａ」の位置であれば、かかる位置に、図２４（ｃ）のドット数データから取得されたドットサイズ値「０１」を設定する。
【０１５３】
現在の位置にドットサイズ値を設定すると、ＣＰＵ１５１は、全ての位置についてドットサイズ値の設定が終了したか否かを判断する（ステップＳ９６０）。その結果、全ての位置についてドットサイズ値の設定が終了していれば（ステップＳ９６０：Ｙｅｓ）、当該ドット配置処理を終了する。一方、終了していなければ、ブロック内の現在の位置をａ，ｂ，ｃ，ｄ，・・・の順（図２４（ａ）参照）に移動し（ステップＳ９７０）、処理を上記ステップＳ９３０に戻すことで、他の位置についてドットサイズ値の設定を行う。
【０１５４】
以上で説明したドット配置処理が、中間バッファＢＦにバッファリングされたすべてのエンコード値ＥＶについて完了すれば、デコードユニット４２０によるデコード処理が完了する。このデコード処理によって生成された各ドット配置データは、その生成の都度、インク吐出制御ユニット５００に引き渡され、インクヘッド２１１によるドットの形成に供されることになる。なお、本実施例では、順序値テーブルを参照することで、ドットの配置を行うものとしたが、ディザマトリックスデータＤＭ内の該当するブロックを直接参照し、閾値の低い要素から順にドットを発生させることで、ドットの配置を行うものとしてもよい。
【０１５５】
以上で説明した本実施例のハーフトーン処理によれば、次のような効果が生じる。すなわち、図２４（ｄ）に示したドット配置データの生成結果と、図２４（ｂ）に示した４×２の順序値データとを対比してみると、サイズの大きなドットから順に、ドットが重複無く順序値の低い位置に配置されていることがわかる。順序値が低いということは、その順序値に対応する閾値の値が低いということになる（図７（ｂ）参照）。図７（ａ）に示したディザマトリックスデータＤＭは、組織的ディザ法におけるディザパターンとしての性質上、閾値は、その値が低いほど分散性よく配置されており、その値が高くなるほど、既に配置された閾値の場所を避けるように配置されている。そのため、図２４（ｄ）に示したドット配置データでは、最も大きなサイズのドットから優先的に、低い順序値、すなわち、低い閾値の場所に配置されることになり、大きなサイズのドットほど、分散性がよく配置されることになる。従って、本実施例におけるドットの配置方法によれば、印刷用紙上で目立つことになる大きなドットの分散性を最も高めることができるため、出力画像の画質を大幅に向上させることが可能になる。
【０１５６】
また、本実施例において、ディザマトリックスデータＤＭとしてドットを良好に分散させることのできるブルーノイズ特性を有するマトリックスを用いれば、マトリックス内のどのブロックが何階調になるのか特別な規則性がないことになり、図１１に示したように、ブロック毎にエンコード値の取り得る値が異なることになる。そのため、従来の濃度パターン法などでは、階調値に応じて画一的に多値化を行うため、実質的な階調数が低減してしまう可能性があったが、本実施例では、ハーフトーン処理を４×２ドットのブロック単位で行いながらも、ディザマトリックス内におけるそのブロックの位置に応じて、ドットの発生パターンが様々に変化することになり、従来の多値化手法よりも大幅に出力画像の画質を向上させることができる。
【０１５７】
また、本実施例では、ハーフトーン処理に用いる各種テーブルを、ディザマトリックスデータＤＭとドット発生量テーブルＤＧＴとに基づき生成するものとしたため、ディザマトリックスデータＤＭ内の閾値の配置について適宜最適化を図ることにより、比較的容易に出力画像の画質を向上させることができる。つまり、本実施例のように、ブロック毎にそのブロックの位置に応じたハーフトーン処理を行うことのできるテーブルの構造を用いれば、従来の多値化で用いられていた画一的な変換テーブルよりも柔軟に画質の向上を図ることが可能になる。
【０１５８】
また、本実施例のハーフトーン処理によれば、エンコードテーブルＥＴと、プレデコードテーブルＤＴ１と、ポストデコードテーブルＤＴ２と、順序値テーブルＳＴとを順次参照していくことで、ＣＭＹ画像に対するハーフトーン処理が完了する。従って、誤差拡散法などの他のハーフトーン処理のように、誤差を分散させるような複雑な演算を行うことなく極めて高速なハーフトーン処理を実現することができる。
【０１５９】
また、本実施例では、ハーフトーン処理を、エンコード処理とデコード処理との２段階の処理に分割し、エンコード処理の結果生成されたエンコード値ＥＶを、ＲＡＭ１５２内の中間バッファＢＦに一時的に蓄積するものとした。従って、デコード処理以降に、印刷機構によるドットの形成に時間を要する場合であっても、エンコード処理の結果得られたエンコード値ＥＶを、ＲＡＭ１５２にバッファリングすることで、早期にエンコード処理のみを終了させることができる。この結果、ＣＰＵ１５１を印刷に関する処理から迅速に解放することが可能になる。また、この中間バッファＢＦには、各色８ビット（２５５階調）のデータ容量を有するＣＭＹ画像のデータが、エンコード処理によって、各色５ビットのエンコード値ＥＶに減縮されて記憶されるため、ＲＡＭ１５２の記憶容量を大幅に削減することができ、コストダウンを図ることが可能になる。
【０１６０】
更に、本実施例では、エンコード処理に用いられるエンコードテーブルＥＴ内の階調閾値が実質的に記録されていない要素を予め削除することで、データ量を削減するものとした。従って、ＲＡＭ１５２の記憶容量をより削減することが可能になる。また、こうしてＲＡＭ１５２にはデータ容量の削減されたエンコードテーブルＥＴが記憶されているため、この一部のデータをＳＲＡＭ１５６に転送する際にも、その転送量を削減することができる。従って、データ転送に要する時間が減縮され、ハーフトーン処理の高速化を図ることが可能になる。
【０１６１】
なお、本実施例では、図５に示したように、印刷処理が実行される度に初期化処理を実行するものとして説明したが、初期化処理は、その他のタイミングで実行するものとしてもよい。例えば、プリンタ１００の電源投入時に実行されるものとしてもよいし、ユーザによって、印刷用紙や印刷モードの設定が変更された際に実行されるものとしてもよい。
【０１６２】
（Ｅ）差分エンコードテーブル及びその生成方法：
上述した初期化処理時のデータ量削減処理では、エンコードテーブルＥＴから実質的に階調閾値が対応付けられていない要素を削除することで、エンコードテーブルＥＴのデータ容量を削減するものとした。これに対して、以下では、エンコードテーブルＥＴ内の各階調閾値を差分で表すことにより、データ容量の更なる削減を行う方法について説明する。
【０１６３】
図２５は、階調閾値を差分で表した差分エンコードテーブルＥＴＤの一例を示す説明図である。図２５（ａ）には、図１０に示した通常のエンコードテーブルＥＴの一部を示し、図２５（ｂ）には、このエンコードテーブルＥＴに対応する差分エンコードテーブルＥＴＤの一部を示している。図２５（ｂ）には、ブロック番号「０」のエンコード値「１９」に対応する差分値「２１」を、通常のエンコードテーブルＥＴのエンコード値「１８」，「１９」に対応する２つの階調閾値「２３４」，「２５５」から求めた例を示している。図示するように、差分エンコードテーブルＥＴＤ内の各差分値は、エンコードテーブルＥＴの隣接した２つの階調閾値の差によって求めることができる。
【０１６４】
図２６は、通常のエンコードテーブルＥＴから差分エンコードテーブルＥＴＤへの変換を行うテーブル変換処理のフローチャートである。この処理は、図６に示した初期化処理中のテーブル生成処理（ステップＳ１４０）の実行後に、データ量削減処理（ステップＳ１５０）の実行に先立って行われる処理である。
【０１６５】
この処理が実行されると、ＣＰＵ１５１は、まず、変換を行うブロック番号Ｎを「０」に設定する（ステップＳ１１００）。そして、現在のブロック番号およびエンコード値「０」に対応する要素に記録された階調閾値をエンコードテーブルＥＴから読み込み、これを、差分エンコードテーブルＥＴＤの同じ要素にコピーする（ステップＳ１１１０）。エンコード値が「０」に対応する階調閾値は、差分演算を行う上での初期値になるからである。
【０１６６】
続いて、ＣＰＵ１５１は、エンコード値ＥＶを「１」に設定し（ステップＳ１１２０）、エンコードテーブルＥＴから隣接する２つの階調閾値、すなわち、ブロック番号「Ｎ」およびエンコード値「ＥＶ」に対応する第１の階調閾値ＴＤＧ１と、ブロック番号「Ｎ」およびエンコード値「ＥＶ−１」に対応する第２の階調閾値ＴＤＧ２とを読み込む（ステップＳ１１３０）。
【０１６７】
ＣＰＵ１５１は、上記ステップＳ１１３０において読み込んだ第２の階調閾値ＴＤＧ２が「２５５」であるかを判断し（ステップＳ１１４０）、「２５５」でなければ（ステップＳ１１４０：Ｙｅｓ）、差分エンコードテーブルＥＴＤに、第１の階調閾値ＴＤＧ１と第２の階調閾値ＴＤＧ２との差分をセットする（ステップＳ１１５０）。こうして、差分値をセットするとＣＰＵ１５１は、エンコード値ＥＶの値を１つ加算し（ステップＳ１１６０）、その加算されたエンコード値ＥＶが、５ビットで表現可能な最大値である「３１」を超えたか否かを判断する（ステップＳ１１７０）。この判断の結果、エンコード値ＥＶが「３１」を超えない場合、すなわち、エンコード値ＥＶが、「３１」以下の場合は、処理を上記ステップＳ１１３０に戻して、上述した一連の処理を繰り返す。こうすることにより、各エンコード値ＥＶに対応する階調閾値の差分が算出され、これが、差分エンコードテーブルＥＴＤにセットされることになる。なお、上記ステップＳ１１４０において、第２の階調閾値ＴＤＧ２が「２５５」であると判断された場合には（ステップＳ１１４０：Ｎｏ）、図２５（ａ）を参照すればわかるように、この階調閾値「２５５」は、そのブロック番号について、最大のエンコード値ＥＶに対応する階調閾値となる。従って、以降の階調閾値はすべて初期値としての「０」が記録されていることになるため、残りの差分の演算を行うことなく、処理をステップＳ１１８０に進める。
【０１６８】
上記ステップＳ１１７０で、エンコード値ＥＶが「３１」を超えたと判断された場合（ステップＳ１１７０：Ｙｅｓ）、もしくは、上記ステップＳ１１４０で、第２の階調閾値ＴＤＧ２が「２５５」であると判断された場合（ステップＳ１１４０：Ｎｏ）には、現在のブロックについて全ての差分を算出したことになるので、ＣＰＵ１５１は、ブロック番号Ｎを１つ加算する（ステップＳ１１８０）。そして、この加算後のブロック番号Ｎの値が、ブロック番号の最大値Ｎｍａｘ（本実施例では、「８１９１」）を超えか否かを判断する（ステップＳ１１９０）。この結果、ブロック番号Ｎの値が、ブロック番号の最大値Ｎｍａｘを超えると判断されれば（ステップＳ１１９０：Ｙｅｓ）すべてのブロックについて、差分を求めたことになるので、当該テーブル変換処理を終了する。これに対して、ブロック番号Ｎの値が、ブロック番号の最大値Ｎｍａｘを超えないと判断されれば（ステップＳ１１９０：Ｎｏ）、処理をステップＳ１１１０に戻すことで、次のブロックについて差分の演算を行う。
【０１６９】
以上のようにして生成された差分エンコードテーブルＥＴＤに含まれる差分値は、大きくとも「３０」を超えることはない（図２５（ｂ）参照）。つまり、通常のエンコードテーブルＥＴでは、各階調閾値が８ビット（０〜２５５）の値で表されていたが、差分エンコードテーブルＥＴＤでは、差分値を５ビット（０〜３１）の値で表すことが可能になる。そのため、図１０のエンコードテーブルＥＴでは、２５６Ｋバイト（＝エンコード値３２個×８ビット×ブロック８１９２個）のデータ容量が必要であったが、本実施例の差分エンコードテーブルＥＴＤでは、そのデータ容量が、１６０Ｋバイト（＝エンコード値３２個×５ビット×ブロック８１９２個）まで削減されることになる。すなわち、本実施例によれば、エンコードテーブルＥＴのデータ容量を、４割程度削減することが可能になる。
【０１７０】
これに加え、本実施例では、上述したテーブル変換処理によって差分エンコードテーブルＥＴＤを生成した後に、図６に示した初期化処理のステップＳ１５０において、データ量削減処理を行う。そのため、差分値が実質的に対応付けられていない要素が、このデータ量削減処理によって削除されることになり、差分エンコードテーブルＥＴＤのデータ容量を更に削減することが可能になる。例えば、データ量削減処理によって、エンコード値のステップ数が「３２」から「２４」まで削減されれば、１６０Ｋバイトまで削減された差分エンコードテーブルＥＴＤの容量が、更に、１２０Ｋバイト（＝エンコード値２４個×５ビット×ブロック８１９２個）まで削減されることになり、元のエンコードテーブルＥＴの半分以下までデータ容量が削減されることになる。
【０１７１】
なお、上述の説明では、エンコードテーブルＥＴから差分エンコードテーブルＥＴＤへのテーブル変換処理を、図６に示した初期化処理中のテーブル生成処理とデータ量削減処理との間に実行するものとしたが、テーブル生成処理およびデータ量削減処理の両者を実行した後に実行するものとしてもよい。
【０１７２】
（Ｆ）差分エンコードテーブルを用いたエンコード処理：
図２７は、差分エンコードテーブルＥＴＤを用いたエンコード処理のフローチャートである。この処理は、図１９に示したエンコード処理に代わって実行される処理である。本処理は、図１９に示したエンコード処理とは大部分が同じ処理であるため、以下では異なる部分を重点に説明する。なお、図２７には、図１９と異なる処理内容について、そのステップ番号の末尾に「ｂ」と符号を付加して表している。
【０１７３】
このエンコード処理が実行されると、図３に示したエンコードユニット４１０は、まず、ＣＭＹ画像をライン毎に色変換ユニット３００から入力し、その中から１画素ずつＸ方向（右方向）に階調値ＧＶを取得する（ステップＳ８０２）。
【０１７４】
階調値ＧＶを取得すると、エンコードユニット４１０は、その画素が属するブロック番号の計算を行う（ステップＳ８０４）。かかる計算方法は既に説明した通りである。
【０１７５】
ブロック番号を計算すると、エンコードユニット４１０は、これから求めようとするエンコード値ＥＶの値および階調閾値ＧＶｔの値を「０」に初期化する（ステップＳ８０６ｂ）。そして、図２５に示した差分エンコードテーブルＥＴＤ（実際には、ＳＲＡＭ１５６に読み込まれた部分的な差分エンコードテーブルＥＴＤ）を参照して、ステップＳ８０４で算出されたブロック番号および現在のエンコード値ＥＶに対応する差分値ＤＶを入力する（ステップＳ８０８）。
【０１７６】
差分値ＤＶを入力すると、エンコードユニット４１０は、この差分値ＤＶを階調閾値ＧＶｔに加算し、新たな階調閾値ＧＶｔを求める（ステップＳ８０９ｂ）。こうすることで、差分値を順次累積していくことができる。新たな階調閾値ＧＶｔを求めると、エンコードユニット４１０は、この階調閾値ＧＶｔと、ステップＳ８０２で入力した処理対象の画素の階調値ＧＶとを比較し、階調値ＧＶが階調閾値ＧＶｔ以上であるかを判定する（ステップＳ８１０）。この判定の結果、階調値ＧＶが階調閾値ＧＶｔ以上であれば（ステップＳ８１０：Ｙｅｓ）、現在のエンコード値ＥＶに「１」を加算し（ステップＳ８１２）、加算後のエンコード値ＥＶがその最大値ＥＶｍａｘ以上となったかを判定する（ステップＳ８１４）。エンコード値ＥＶが最大値ＥＶｍａｘ以上となれば（ステップＳ８１４：Ｙｅｓ）、その時点で、エンコード値ＥＶは最大値ＥＶｍａｘに確定する（ステップＳ８１６）。
【０１７７】
上記ステップＳ８１４において、エンコード値ＥＶがその最大値ＥＶｍａｘ未満であると判定されれば（ステップＳ８１４：Ｎｏ）、エンコードユニット４１０は、処理をステップＳ８０８に戻すことで、次のエンコード値ＥＶに対応する差分値ＤＶを取得して、これを階調閾値ＧＶｔに累積し、再び、階調閾値ＧＶｔと階調値ＧＶとの比較を行う。こうして、比較を繰り返した結果、ステップＳ８１０において、初めて階調値ＧＶが、階調閾値ＧＶｔ未満となれば、そのときのエンコード値ＥＶの値が、エンコード結果のエンコード値ＥＶとして確定する（ステップＳ８１６）。
【０１７８】
以上で説明したエンコード処理によれば、差分エンコードテーブルＥＴＤ内の差分値ＤＶを順次加算して累積することで、通常のエンコードテーブルＥＴを用いたエンコード処理と同等の処理を行うことが可能になる。
【０１７９】
なお、かかるエンコード処理においても、圧縮エンコードテーブルＥＴＣを用いたエンコード処理と同様に、入力した１ライン分の画素に対応する差分エンコードテーブルＥＴＤの一部をＳＲＡＭ１５６に予め入力するものとする。しかし、ＲＡＭ１５２からＳＲＡＭ１５６にテーブルの一部を転送する際に、差分値を通常の階調閾値に戻した上で転送を行うものとしてもよい。こうすることで、図２７に示したエンコード処理ではなく、図１９に示した通常のエンコード処理によってエンコードを行うことができ、処理の複雑化を抑制することが可能になる。差分値を通常の階調閾値に戻すには、エンコード値の低い値に対応する差分値から、順次、差分値を累積していくことで、各エンコード値ＥＶに対応する階調閾値を求めることができる。
【０１８０】
（Ｇ）差分エンコードテーブルの他の生成方法：
上述したテーブル変換処理では、既に生成された通常のエンコードテーブルＥＴから差分値を次々求めていくことで、差分エンコードテーブルＥＴＤを生成するものとした。これに対して、以下では、ディザマトリックスデータＤＭとドット発生量テーブルＤＧＴとから直接、差分エンコードテーブルＥＴＤを生成する方法を説明する。
【０１８１】
図２８は、差分エンコードテーブルＥＴＤおよびプレデコードテーブル生成処理のフローチャートである。この処理は、図６に示した初期化処理のステップＳ１４０において、図１３のテーブル生成処理に代えて実行される処理である。なお、かかる生成処理は、図１３のテーブル生成処理と大部分が同じ処理であるため、以下では異なる部分を重点に説明する。なお、図２８には、図１３と異なる処理内容について、そのステップ番号の末尾に「ｂ」と符号を付加して表している。
【０１８２】
この処理が実行されると、ＣＰＵ１５１は、まず、ＲＡＭ１５２に、すべての要素を「０」に設定した差分エンコードテーブルＥＴＤとプレデコードテーブルＤＴ１を用意する（ステップＳ２００ｂ）。そして、ＣＰＵ１５１は、現在の処理対象とするブロック番号Ｎを「０」とし（ステップＳ２１０）、更に、以降の処理で用いられる変数として、エンコード値ＥＶを「０」とし、現在のブロック内に発生する各サイズ（Ｓドット，Ｍドット，Ｌドット）のドット数をそれぞれ「０」とする（ステップＳ２２０）。そして、更に、現在の入力階調値ＴＤおよび差分値ＤＶを「０」とする（ステップＳ２３０ｂ）。
【０１８３】
続いて、ＣＰＵ１５１は、上記ステップＳ２２０で設定した入力階調値ＴＤに基づき、現在のブロック内に発生する各サイズのドット数を決定するドット数カウント処理を実行する（ステップＳ２４０）。かかるドット数カウント処理の処理内容は、図１４を用いて既に説明したとおりである。
【０１８４】
図１４に示したドット数カウント処理が実行されて、各サイズのドット数が確定すると、ＣＰＵ１５１は、前回の入力階調値ＴＤにおける各サイズのドット数に対して、今回の入力階調値ＴＤにおける各サイズのドット数のいずれかが変化したかを判定する（ステップＳ２５０）。
【０１８５】
上記ステップＳ２５０において、変化ありと判定されれば（ステップＳ２５０：Ｙｅｓ）、現在のブロック番号Ｎおよびエンコード値ＥＶに対応する各サイズのドット数を、上記ステップＳ２４０でカウントされた値に更新する（ステップＳ２６０）。そして、ステップＳ２００において用意した差分エンコードテーブルＥＴＤの現在のブロック番号Ｎおよびエンコード値ＥＶに対応する要素に、差分値ＤＶをセットする（ステップＳ２７０ｂ）。
【０１８６】
差分エンコードテーブルＥＴＤに差分値ＤＶをセットすると、続いて、ＣＰＵ１５１は、予め作成しておいたポストデコードテーブルＤＴ２（図８参照）を参照し、上記ステップＳ２６０で更新した各サイズのドットの数と同数のドット数を有するインデックス値を取得する。こうして、インデックス値を取得すると、ＣＰＵ１５１は、ステップＳ２００において用意したプレデコードテーブルＤＴ１の現在のブロック番号Ｎおよびエンコード値ＥＶに対応する要素に、そのインデックス値をセットする（ステップＳ２８０）。
【０１８７】
差分エンコードテーブルＥＴＤへの差分値ＤＶの記録、および、プレデコードテーブルＤＴ１へのインデックス値の記録を完了すると、ＣＰＵ１５１は、現在のエンコード値ＥＶをインクリメントするとともに、差分値ＤＶを「０」に再設定する（ステップＳ２９０ｂ）。つまり、このステップＳ２９０ｂでは、上記ステップＳ２５０においていずれかのサイズのドットの数が変化したと判断される毎にエンコード値ＥＶが変化していくことになり、この時同時に、差分値ＤＶが「０」に戻されることになる。
【０１８８】
上記ステップＳ２９０ｂによって、エンコード値ＥＶのインクリメントおよび差分値ＤＶのクリアを行った後、もしくは、上記ステップＳ２５０において、いずれのサイズのドット数も変化していないと判断された場合には（ステップＳ２５０：Ｎｏ）、ＣＰＵ１５１は、現在の入力階調値ＴＤが「２５５」を超えたか否かを判断する（ステップＳ３００）。その結果、入力階調値ＴＤが「２５５」を超えていなければ（ステップＳ３００：Ｎｏ）、現在の入力階調値ＴＤおよび差分値ＤＶをインクリメントした上で（ステップＳ３１０）、処理を上記ステップＳ２４０に戻す。
【０１８９】
一方、上記ステップＳ３００において、現在の入力階調値ＴＤが「２５５」を超えていれば（ステップＳ３００：Ｙｅｓ）、全てのブロックについて上述した処理が完了したかを判断し（ステップＳ３２０）、完了していなければ（ステップＳ３２０：Ｎｏ）、現在のブロック番号Ｎをインクリメントした上で（ステップＳ３４０）、処理を上記ステップＳ２２０に戻す。
【０１９０】
以上で説明した差分エンコードテーブルＥＴＤの生成処理によれば、通常のエンコードテーブルＥＴを生成することなく、直接、差分エンコードテーブルＥＴＤを作成することができる。従って、初期化処理、ひいては、印刷処理全体が高速化されることになる。
【０１９１】
（Ｈ）差分エンコードテーブルの他の態様：
（Ｈ−１）差分エンコードテーブルの第１の変形例：
次に、差分エンコードテーブルＥＴＤの他の態様について説明する。上述したように、図２５に示した差分エンコードテーブルＥＴＤは、その差分値ＤＶの最大値は、「３０」程度である。そのため、図２５に示した差分エンコードテーブルＥＴＤは、各差分値を５ビット（０〜３１）のデータで表すことができる。しかし、エンコードテーブルＥＴは、ディザマトリックスデータＤＭとドット発生量テーブルＤＧＴとに基づき動的に生成されるテーブルであるため、差分値ＤＶは、必ずしも５ビットの範囲で収まるとは限らない。そこで、以下では、差分値ＤＶが予め定めたビット数を超える場合の対処方法について説明する。なお、以下では、予め定めた差分値のビット数は、５ビットよりも更に少ない４ビット（０〜１５）であるものとする。
【０１９２】
図２９は、差分エンコードテーブルＥＴＤの第１の変形例を示す説明図である。図２９（ａ）には、図２５（ｂ）に示した通常の差分エンコードテーブルＥＴＤの一部を示し、図２９（ｂ）には、本変形例における差分エンコードテーブルＥＴＤ２の一部を示している。本変形例の差分エンコードテーブルＥＴＤ２は、各要素に、４ビットの差分値、すなわち、０から１５までの差分値を記録可能としている。
【０１９３】
図２９（ａ）に示した差分エンコードテーブルＥＴＤにおいて、エンコード値が「０」，「２」，「３」，「１６」に対応する差分値「２８」，「３０」，「２４」，「１７」は、それぞれ、４ビットで表現可能な差分値「１５」を超えている。そのため、本変形例では、図２９（ｂ）に示すように、「１５」を超える差分値については、その差分値を「１５」で除算することで、除数としての「１５」とその剰余との組み合わせで表している。すなわち、差分値が「２８」の場合には、これを、「１５」と「１３」で表し、差分値が「３０」の場合には、これを「１５」と「１５」で表している。こうすることで、４ビットを超える差分値についても２以上の数値の組み合わせで表現することが可能になる。なお、図中には２つの数値の組み合わせの例を示しているが、例えば、差分値が「３５」の場合は、「１５」と「１５」と「５」との３つの数値によって１つの差分値を表すことになる。
【０１９４】
このように、差分エンコードテーブルＥＴＤ２は、「１５」以上の差分値を２以上の数値で表すため、各差分値に対応するエンコード値の数も増加する。例えば、図２９では、当初、エンコード値の範囲が０から１８までであったものが、０から２２までに拡張されている。従って、本変形例では、このような差分エンコードテーブルＥＴＤ２のエンコード値の拡張に合わせて、デコード処理に用いられるプレデコードテーブルＤＴ１のエンコード値の範囲も、これに従って拡張を行う。
【０１９５】
図３０は、エンコード値の範囲を拡張させたプレデコードテーブルＤＴ１ｂの一例を示す説明図である。図３０（ａ）には、拡張前の通常のプレデコードテーブルＤＴ１の一部を示し、図３０（ｂ）には、拡張後のプレデコードテーブルＤＴ１ｂの一部を示している。図２９では、エンコード値が「０」，「２」，「３」，「１６」に対応する差分値を、それぞれ複数の要素で表すものとしたため、図３０に示したプレデコードテーブルＤＴ１ｂについても、これらのエンコード値に対応するインデックス値を、それぞれ複数の要素で表している。ただし、この複数の要素には、同一のインデックス値を記録するものとしている。例えば、図３０では、通常のプレデコードテーブルＤＴ１において、エンコード値が「２」に対応するインデックス値は「２」である。エンコード値「２」は、図２９を参照すれば、その拡張後のエンコード値は、「３」および「４」に対応することになる。そこで、これらのエンコード値に対応する要素には、それぞれ、エンコード値拡張前のエンコード値に対応付けられていたインデックス値「２」を記録する。
【０１９６】
このようにして、差分エンコードテーブルのエンコード値の拡張に合わせてプレデコードテーブルのエンコード値の範囲も拡張させれば、１つの差分値を複数の数値で表す場合であっても、容易にエンコード処理およびデコード処理を行うことが可能になる。エンコード処理の過程で、差分値を累積していくにあたり、２つの数値で１つの差分値を表す部分については、エンコード値が１つ増加したとしても、プレデコードテーブルＤＴ１ｂでは、同じインデックス値を示すことになり、同一のドット配置を表すことになるからである。そのため、本変形例においても、図２７のエンコード処理と、図２２のデコード処理とをそのまま実行することで、上述した通常の差分エンコードテーブルＥＴＤを用いたハーフトーン処理と同等のハーフトーン処理を実現することができる。
【０１９７】
（Ｈ−２）差分エンコードテーブルの第２の変形例：
図３１は、差分エンコードテーブルＥＴＤの第２の変形例を示す説明図である。図３１（ａ）には、図２５（ｂ）に示した通常の差分エンコードテーブルＥＴＤの一部を示し、図３１（ｂ）には、本変形例における差分エンコードテーブルＥＴＤ３の一部を示している。本変形例の差分エンコードテーブルＥＴＤ３についても、各要素に、４ビットの差分値ＤＶ、すなわち、「０」から「１５」までの差分値ＤＶを記録可能としている。
【０１９８】
かかる第２の変形例においても、第１の変形例と同様に、差分値が「１５」を超える部分について、除数としての「１５」と剰余の数とで、１つの差分値を表すことに相違はない。しかし、本変形例では、予め定めたビット数で表現可能な最大値（本変形例では「１５」）をエスケープシーケンスコード（以下、「ＥＳＣコード」という）として扱い、エンコード処理時に、差分エンコードテーブルＥＴＤ３内の各数値（各差分値）を入力する過程において（図２７のステップＳ８０８）、入力した数値がＥＳＣコードであれば、予め定めたビット数で表現可能な最大値「１５」に対して、次に参照する数値を加算する処理を行うものとする（つまり、剰余が読み込まれるまで、加算を行う）。
【０１９９】
このように、本変形例では、「１５」という数値に対して、上述のように特殊な意味を持たせたため、図３１（ａ）のエンコード値「２」の部分のように、差分値が「３０」の場合には、上述した第１の変形例では、「１５」と「１５」の２つの数値によってこの差分値を表すことになるが、本変形例では、「１５」と「１５」と「０」の３つの数値によってこの差分値を表すことになる。
【０２００】
上述したように、本変形例では、図２７のエンコード処理のステップＳ８０８において差分エンコードテーブルＥＴＤ３から入力した数値がＥＳＣコードである場合に、次々に数値を読み込んでこれらを加算していく処理を行うため、エンコード処理を行えば、その過程で自動的に、図３１（ｂ）に示した本変形例の差分エンコードテーブルＥＴＤ３を、図３１（ａ）に示した元の差分エンコードテーブルＥＴＤに逆変換しながらエンコード処理を行っているといえる。従って、第１の変形例のように、プレデコードテーブルＤＴ１の形式までを変更するまでもなく、ハーフトーン処理を行うことが可能になる。
【０２０１】
なお、本変形例では、予め定めたビット数で表現可能な最大値をＥＳＣコードとして表すものとしたが、他の数値あるいは記号をＥＳＣコードとして扱うものとすることも可能である。
【０２０２】
以上で説明した変形例としての差分エンコードテーブルＥＴＤ２，ＥＴＤ３は、エンコード処理時におけるＳＲＡＭ１５６への入力の際に、そのままの形式でＳＲＡＭ１５６に入力するものとしてもよい。また、元の差分エンコードテーブルＥＴＤの形式に復元した上で入力するものとしてもよい。また、元の差分エンコードテーブルＥＴＤの形式に復元した上で、更に、通常のエンコードテーブルＥＴの形式まで復元させて入力するものとしてもよい。
【０２０３】
（Ｉ）．変形例：
以上、本発明の実施例について説明したが、本発明はこのような実施例に限定されず、その趣旨を逸脱しない範囲で種々の構成を採ることができることはいうまでもない。例えば、画像処理ＡＳＩＣ１５５によってハードウェアによって実現した機能を、ＣＰＵ１５１による所定のプログラムの実行によってソフトウェア的に実現するものとしてもよい。その他、以下のような変形が可能である。
【０２０４】
（Ｉ−１）第１変形例：
上記実施例のデータ量削減処理では、図１６を用いて説明したように、エンコードテーブルＥＴの中から最大ステップ数を求め、この最大ステップ数に応じて必要な領域を２次元テーブルとしてＲＡＭ１５２に確保するものとした。従って、データ量の削減によって生成された圧縮エンコードテーブルＥＴＣは、図１７に示したように、最大ステップ数に該当するブロックについては、過不足無く階調閾値が記録されているが（図１７の例では、ブロック番号４）、他のブロックについては、依然として、「０」となる階調閾値が残存している。図２５（ｂ）に示した差分エンコードテーブルＥＴＤについてもこの点は同様である。そこで、本変形例では、初期値としての「０」が残存しているすべての要素について削減する処理を行う。
【０２０５】
図３２は、後述する本変形例のテーブル生成処理において作成される圧縮エンコードテーブルＥＴＣ２の一例を示す説明図である。この圧縮エンコードテーブルＥＴＣ２は、図示するように、一意のアドレスに対して、ブロック番号とエンコード値と階調閾値とが対応付けられている。この圧縮エンコードテーブルＥＴＣ２は、図１０に示したエンコードテーブルＥＴから、エンコード値が１以上の要素に存在する階調閾値が「０」の部分を取り除き、残存した階調閾値を、そのブロック番号とエンコード値と共に、連続した一意のアドレスに連続的に対応付けたものとなる。このような圧縮エンコードテーブルＥＴＣ２を作成すれば、図１７に示した実施例における圧縮エンコードテーブルＥＴＣよりも、更にデータ量を削減することができる。
【０２０６】
なお、本変形例では、図３２の圧縮エンコードテーブルＥＴＣ２を参照する際に、任意のブロックについてアクセスが容易となるように、各ブロックの先頭アドレスを別テーブルとして用意する。図３３には、このようなアドレステーブルＡＴを示した。図示するように、このアドレステーブルＡＴには、各ブロックのブロック番号に対応付けて、そのブロックの先頭アドレスが記録されている。このアドレステーブルＡＴを参照すれば、上述したエンコード処理において、容易に目的のブロックの階調閾値を取得することができる。
【０２０７】
図３４は、図３２に示した本変形例の圧縮エンコードテーブルＥＴＣと、図３３に示したアドレステーブルＡＴを生成するためのテーブル作成処理のフローチャートである。このテーブル作成処理の大部分は、図１３に示した実施例におけるテーブル生成処理の処理内容と同じであるため、異なる部分を重点に説明する。図３４に示した本変形例のテーブル生成処理において、図１３と異なる処理内容については、ステップ番号の末尾に「ｂ」と付している。
【０２０８】
このテーブル作成処理が実行されると、まず、ＣＰＵ１５１は、ＲＡＭ１５２内に、全ての要素を「０」とした圧縮エンコードテーブルＥＴＣ２と、プレデコードテーブルＤＴ１を用意する（ステップＳ２００ｂ）。かかる処理によって用意する圧縮エンコードテーブルＥＴＣ２の容量は、全てのブロックについてエンコード値が「０」から「３１」まで８ビットの階調閾値を記録可能な最大限の容量とする。
【０２０９】
圧縮エンコードテーブルＥＴＣ２とプレデコードテーブルＤＴ１とを用意すると、ＣＰＵ１５１は、現在の処理対象とするブロック番号Ｎを「０」とするとともに、アドレスカウンタＣを「０」とする（ステップＳ２１０ｂ）。このアドレスカウンタＣは、図２８に示したアドレステーブルＡＴに対して、各ブロックの先頭アドレスを記録するために用いるカウンタである。
【０２１０】
続いて、ＣＰＵ１５１は、アドレステーブルの現在のブロック（すなわち、ブロック番号０）に対応する先頭アドレスとして、現在のアドレスカウンタＣの値をセットする（ステップＳ２１５ｂ）。こうすることで、ブロック番号が「０」のブロックについては、その先頭アドレスは、アドレス「０」に設定される。
【０２１１】
以下、ステップＳ２２０からステップＳ２６０までの処理は、図１３に示した処理と同一の処理である。すなわち、以降の処理で用いられる変数として、エンコード値ＥＶを「０」とし、現在のブロック内に発生する各サイズ（Ｓドット，Ｍドット，Ｌドット）のドット数をそれぞれ「０」とする（ステップＳ２２０）。そして、現在の入力階調値ＴＤを「０」とする（ステップＳ２３０）。更に、ＣＰＵ１５１は、現在の入力階調値ＴＤに基づき、現在のブロック内に発生するドット数を決定するドット数カウント処理を行い（ステップＳ２４０）、各サイズのドット数のいずれかが変化すれば（ステップＳ２５０）、現在のブロック番号Ｎおよびエンコード値ＥＶに対応する各サイズのドット数を、上記ステップＳ２４０でカウントされた値に更新する（ステップＳ２６０）。
【０２１２】
上記実施例では、この後、エンコードテーブルＥＴの現在のブロック番号Ｎおよびエンコード値ＥＶに対応する要素に、階調閾値として、現在の入力階調値ＴＤをセットするものとして。これに対して、本変形例では、圧縮エンコードテーブルＥＴＣ２のアドレスＣに、階調閾値として現在の入力階調値ＴＤをセットするとともに、現在のブロック番号Ｎとエンコード値ＥＶとをセットする（ステップＳ２７０ｂ）。そして、実施例と同じく、プレデコードテーブルＤＴ１にインデックス値をセットする（ステップＳ２８０）。インデックス値をプレデコードテーブルＤＴ１にセットすると、ＣＰＵ１５１は、実施例と同じく、現在のエンコード値ＥＶをインクリメントするが、このとき、本変形例では、同時に、アドレスカウンタＣについてもインクリメントする（ステップＳ２９０ｂ）。
【０２１３】
以下、ステップＳ３００からステップＳ３４０までの処理は、実施例と同じ処理内容のため説明を省略する。以上の処理により、アドレスカウンタＣが１つずつインクリメントされながら、各アドレスに、ブロック番号とエンコード値と階調閾値とが対応付けて記録されることになる。最後に、ＣＰＵ１５１は、予め最大限の容量を確保しておいた圧縮エンコードテーブルＥＴＣ２から、ブロック番号、エンコード値、階調閾値がすべて「０」のまま残存している領域を削除する。こうすることで、図３２に示した本変形例の圧縮エンコードテーブルＥＴＣ２が生成されることになる。なお、本変形例では、図６に示した初期化処理のステップＳ１５０におけるデータ量削減処理は実行しない。上述した本変形例のテーブル作成処理によって、データ量の削減が同時に行われるからである。
【０２１４】
以上で説明した第１変形例によれば、実質的に階調値が対応付けられていないエンコードテーブルＥＴ内の要素をすべて削除することができるため、実施例において生成した圧縮エンコードテーブルＥＴＣよりもさらにデータ容量の少ない圧縮エンコードテーブルＥＴＣ２を生成することが可能になる
【０２１５】
なお、本変形例のテーブル生成処理によって生成された圧縮エンコードテーブルＥＴＣ２において、同じブロックに属する各階調閾値について差分を算出することで、差分エンコードテーブルＥＴＤについても、図３２と同様に、連続したアドレス空間に各差分値を記録した形式とすることができる。図３５には、かかる差分エンコードテーブルＥＴＤ４の例を示している。
【０２１６】
なお、本変形例では、各ブロックの先頭アドレスを示すアドレステーブルＡＴを生成するものとしたが、それ以外にも、例えば、各ラスタの先頭位置に対応するアドレスが分かるテーブルや、ＳＲＡＭ１５６への読み出し単位の先頭アドレスが分かるテーブル、前回の読み出しが終了したアドレスの位置を示すポインタなどを管理することで、圧縮エンコードテーブルＥＴＣ２あるいは差分エンコードテーブルＥＴＤ４から必要なデータを容易に読み込むが可能になる。
【０２１７】
（Ｉ−２）第２変形例：
上記実施例では、エンコードテーブルＥＴについてデータ容量を削減するものとした。これに対して、図１６に示したデータ量削減処理と同じ内容の処理を、図１２に示したプレデコードテーブルＤＴ１について実行することで、エンコードテーブルＥＴだけではなく、プレデコードテーブルについても同様にデータ容量を削減することが可能である。また、上記第２変形例で図２７に示した圧縮エンコードテーブルＥＴＣ２のデータ形式も、プレデコードテーブルＤＴ１のデータ形式に適用することが可能である。
【０２１８】
（Ｉ−３）第３変形例：
上記実施例では、デコード処理時に、プレデコードテーブルＤＴ１と、ポストデコードテーブルＤＴ２と、順序値テーブルＳＴの３つのテーブルを参照することで、エンコード値ＥＶからドット配置データを生成するものとした。しかし、これらのテーブルを１つに統合することで、エンコード値ＥＶを直接ドット配置データに変換することも可能である。
【０２１９】
図３６は、エンコード値ＥＶとブロック番号から、直接、ドット配置データを取得することのできるテーブル（以下、「ダイレクトデコードテーブルＤＤＴ」という）の一例を示す説明図である。このダイレクトデコードテーブルＤＤＴには、エンコード値ＥＶとブロック番号とに対応付けて、図４に示したドット配置データがそれぞれ記憶されている。このダイレクトデコードテーブルＤＤＴの各要素に記憶されているドット配置データは、プレデコードテーブルＤＴ１内に記憶されたインデックス値を、ポストデコードテーブルＤＴ２と順序値テーブルＳＴに基づき、すべてドット配置データに変換したデータに他ならない。つまり、上記実施例によってプレデコードテーブルＤＴ１を作成した後、このプレデコードテーブルＤＴ１内のすべてのインデックス値について、図２２のデコード処理を行えば、図３６に示したダイレクトデコードテーブルＤＤＴを生成することができる。このように、予めダイレクトデコードテーブルＤＤＴを生成するものとすれば、１つのテーブルを参照するだけで、デコード処理が完了するため、より高速にハーフトーン処理を行うことが可能になる。
【０２２０】
（Ｉ−４）第４変形例：
上記実施例では、プリンタ１００は、複合機タイプであるものとし、単体で、画像データの入力からハーフトーン処理、インクの吐出制御まで行うものとした。これに対して、プリンタ１００にコンピュータを接続し、コンピュータにおいて、画像データの入力と、ハーフトーン処理の一部、すなわち、エンコード処理までを実行するものとしてもよい。このような構成では、コンピュータに所定のプログラムをインストールすることで、実施例に記載した初期化処理やハーフトーン処理と同様の処理を実現することができる。プリンタ１００は、コンピュータからプリンタケーブル等を経由してエンコード値ＥＶを受信すると、そのエンコード値ＥＶに応じてデコード処理を行い、印刷機構を制御して、印刷用紙への印刷を行う。
【０２２１】
このように、コンピュータでエンコード処理までを実行するものとすれば、Ｃ，Ｍ，Ｙ，Ｋの各色毎に、８ビット（２５５階調）のデータサイズを有する画像データが、５ビットのエンコード値ＥＶに変換されるため、コンピュータとプリンタ１００間の通信量を削減することができる。この結果、全体として印刷速度を向上させることが可能になる。
【０２２２】
また、データの通信速度よりも、プリンタ１００内における処理速度が問題となるような場合にあっては、エンコード処理だけではなくデコード処理もコンピュータで行わせるものとすることができる。こうすることにより、プリンタ１００の処理負担を軽減させることができるので、全体として印刷速度を向上させることが可能になる。また、このように、コンピュータで、エンコード処理とデコード処理の両者を実行するものとすれば、ハーフトーン処理に要するハードウェアが不要となるため、プリンタ１００の製造コストを削減することが可能になる。
【０２２３】
（Ｉ−５）第５変形例：
上述した実施例では、エンコードテーブルＥＴ内の各階調値の差分を求め、これを差分エンコードテーブルＥＴＤに記録するものとしたが、更に、この差分値についての差分を求め、これを記録するものとしてもよい。つまり、多段階の差分演算を行うことで差分エンコードテーブルを生成するものとしてもよい。かかる場合には、エンコード処理の過程において、複数回の累積加算を行うことで、元の階調値を算出することができる。また、エンコードテーブルＥＴ内の階調値の差分を求め、この差分値の最小値を別途ＲＡＭ１５２に記憶しておき、各差分値とこの最小値との差を、各エンコード値に対応付けるものとしてもよい。こうすることで、差分値をより小さな値で表すことが可能になる。
【図面の簡単な説明】
【０２２４】
【図１】本発明の実施例としてのプリンタ１００を示す説明図である。
【図２】プリンタ１００の内部構成を示す説明図である。
【図３】画像処理ＡＳＩＣ１５５の詳細な構成を示す説明図である。
【図４】ドット配置データの一例を示す説明図である。
【図５】印刷処理のフローチャートである。
【図６】初期化処理の詳細を示すフローチャートである。
【図７】ディザマトリックスデータＤＭのデータ構造および順序値テーブルＳＴの生成方法を示す説明図である。
【図８】ポストデコードテーブルＤＴ２の一例を示す説明図である。
【図９】ドット発生量テーブルＤＧＴの一例を示す説明図である。
【図１０】エンコードテーブルＥＴのデータ構造を示す説明図である。
【図１１】エンコード値ＥＶの変化の例を模式的に示す説明図である。
【図１２】プレデコードテーブルＤＴ１のデータ構造を示す説明図である。
【図１３】テーブル生成処理の詳細を示すフローチャートである。
【図１４】ドット数カウント処理の詳細を示すフローチャートである。
【図１５】ドット数カウント処理の具体例を示す説明図である。
【図１６】データ量削減処理のフローチャートである。
【図１７】圧縮エンコードテーブルＥＴＣの一例を示す説明図である。
【図１８】ハーフトーン処理のフローチャートである。
【図１９】エンコード処理の詳細を表すフローチャートである。
【図２０】ブロック番号の計算方法の概念を示す説明である。
【図２１】ブロック番号の他の計算方法の概念を示す説明図である。
【図２２】デコード処理の詳細なフローチャートである。
【図２３】ドット配置処理の詳細なフローチャートである。
【図２４】ドットの配置工程を模式的に示す説明図である。
【図２５】差分エンコードテーブルＥＴＤの一例を示す説明図である。
【図２６】通常のエンコードテーブルＥＴから差分エンコードテーブルＥＴＤへの変換を行うテーブル変換処理のフローチャートである。
【図２７】差分エンコードテーブルＥＴＤを用いたエンコード処理のフローチャートである。
【図２８】差分エンコードテーブルＥＴＤおよびプレデコードテーブル生成処理のフローチャートである。
【図２９】差分エンコードテーブルＥＴＤの第１の変形例を示す説明図である。
【図３０】エンコード値の範囲を拡張させたプレデコードテーブルＤＴ１ｂの一例を示す説明図である。
【図３１】差分エンコードテーブルＥＴＤの第２の変形例を示す説明図である。
【図３２】第１変形例における圧縮エンコードテーブルＥＴＣ２の一例を示す説明図である。
【図３３】第１変形例におけるアドレステーブルＡＴの一例を示す説明図である。
【図３４】第１変形例におけるテーブル作成処理のフローチャートである。
【図３５】第１変形例における差分エンコードテーブルの例を示す説明図である。
【図３６】ダイレクトデコードテーブルＤＤＴの一例を示す説明図である。
【符号の説明】
【０２２５】
１００…プリンタ
１１０…スキャナ
１２０…メモリカードスロット
１４０…操作パネル
１４５…液晶モニタ
１５０…制御ユニット
１５１…ＣＰＵ
１５２…ＲＡＭ
１５３…ＲＯＭ
１５６…ＳＲＡＭ
２１０…キャリッジ
２１１…インクヘッド
２１２…インクカートリッジ
２２０…キャリッジモータ
２３０…モータ
２６０…駆動ベルト
２７０…プラテン
２８０…摺動軸
３００…色変換ユニット
４００…ハーフトーン処理ユニット
４１０…エンコードユニット
４２０…デコードユニット
５００…インク吐出制御ユニット
ＢＦ…中間バッファ
ＤＭ…ディザマトリックスデータ
ＤＧＴ…ドット発生量テーブル
ＡＴ…アドレステーブル
ＬＵＴ…色変換テーブル
ＥＴ…エンコードテーブル
ＥＴＣ…圧縮エンコードテーブル
ＤＴ１…プレデコードテーブル
ＤＴ２…ポストデコードテーブル
ＳＴ…順序値テーブル
ＤＤＴ…ダイレクトデコードテーブル
【図１】
2008092397.tif 000003
【図２】
2008092397.tif 000004
【図３】
2008092397.tif 000005
【図４】
2008092397.tif 000006
【図５】
2008092397.tif 000007
【図６】
2008092397.tif 000008
【図７】
2008092397.tif 000009
【図８】
2008092397.tif 000010
【図９】
2008092397.tif 000011
【図１０】
2008092397.tif 000012
【図１１】
2008092397.tif 000013
【図１２】
2008092397.tif 000014
【図１３】
2008092397.tif 000015
【図１４】
2008092397.tif 000016
【図１５】
2008092397.tif 000017
【図１６】
2008092397.tif 000018
【図１７】
2008092397.tif 000019
【図１８】
2008092397.tif 000020
【図１９】
2008092397.tif 000021
【図２０】
2008092397.tif 000022
【図２１】
2008092397.tif 000023
【図２２】
2008092397.tif 000024
【図２３】
2008092397.tif 000025
【図２４】
2008092397.tif 000026
【図２５】
2008092397.tif 000027
【図２６】
2008092397.tif 000028
【図２７】
2008092397.tif 000029
【図２８】
2008092397.tif 000030
【図２９】
2008092397.tif 000031
【図３０】
2008092397.tif 000032
【図３１】
2008092397.tif 000033
【図３２】
2008092397.tif 000034
【図３３】
2008092397.tif 000035
【図３４】
2008092397.tif 000036
【図３５】
2008092397.tif 000037
【図３６】
2008092397.tif 000038