しかしながら、ディザパターンはCMYKそれぞれサイズが異なるものを使うことが多い。これは各色間の色の干渉を避けるために、ディザパターンにはそれぞれ異なる角度を設定していることが多いので、水平方向のディザパターンのサイズが必然的に異なってくるからである。よって実際にCMYKの多値画像をそれぞれ二値化しようとすると、CMYKのディザパターンの周期が異なるため、カウンタを1つずつ用意する必要があった。
このカウンタに対して、比較処理やカウントアップ処理、代入処理などの各種制御処理を行うわけであるが、この1つ1つの作業量は大したものではないが、二値化処理は印刷する画像の全てのデータに対して行う必要があり、A4の用紙を600dpiの解像度で印刷しようとする場合、二値化しなければいけない点は約3200万点にものぼる。二値化はCMYKそれぞれに行う必要があるため、約1億2800万回のカウンタに対する処理が繰り返されることとなり、わずかに処理が増えても大きなスピードの低下へと繋がっていた。
本発明は上述した問題点を解決するためになされたものであり、従来に比較してN値化処理を高速化できる画像処理装置および画像処理プログラムを提供することを目的としている。
この目的を達成するために、請求項1記載の画像処理装置は、複数色のそれぞれについて設定された複数種類のディザパターンを用いて、各色毎の閾値を読み出し、読み出された閾値に基づいて、入力画像データを構成する画素に含まれる複数色の色成分値を各色毎にN値化する(Nは2以上の整数)N値化手段を備えたものにおいて、1つのディザパターンまたは一種類のディザパターンの繰り返しから構成されるディザマトリックスを、前記複数種類のディザパターンのそれぞれについて記憶するディザマトリックス記憶手段と、前記ディザマトリックス記憶手段に記憶された前記複数種類のディザマトリックスの一行における読出位置を特定する値を保持するカウンタと、前記カウンタの値に基づいて、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスのそれぞれから、前記N値化手段に用いる各色毎の閾値を読み出す読出手段とを備え、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスの一行を構成する閾値の個数は、前記複数種類のディザパターンの一行を構成する閾値の個数の公倍数である。
請求項2記載の画像処理装置は、請求項1記載の画像処理装置において、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスの一行を構成する閾値の個数は、前記複数種類のディザパターンの一行を構成する閾値の個数の最小公倍数である。
請求項3記載の画像処理装置は、請求項1または2に記載の画像処理装置において、前記読出手段は、前記カウンタの値が初期値のとき、前記ディザマトリックス記憶手段に記憶された前記複数種類のディザマトリックスの一行における先頭から前記閾値を読み出すものであり、前記読出手段により、前記複数種類のディザマトリックスのそれぞれから前記閾値が読み出されると前記カウンタの値に所定値を加算し、且つ、前記複数種類のディザマトリックスのそれぞれから一行分の閾値が読み出されると前記カウンタの値を前記初期値に戻すカウンタ更新手段を備えるものである。
請求項4記載の画像処理装置は、請求項1から3のいずれかに記載の画像処理装置において、前記ディザマトリックス記憶手段に記憶された前記複数種類のディザマトリックスの各基準位置を特定する基準値を記憶する基準値記憶手段を備え、前記読出手段は、前記基準値記憶手段に記憶された各ディザマトリックスの基準値に、前記カウンタの値を加算した値に基づいて、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスのそれぞれから、前記N値化手段に用いる各色毎の閾値を読み出すものである。
請求項5記載の画像処理装置は、複数色のそれぞれについて設定された複数種類のディザパターンを用いて、各色毎に閾値を読み出し、読み出された閾値に基づいて、入力画像データを構成する画素に含まれる複数色の色成分値を各色毎にN値化するN値化手段を備えたものにおいて、1つのディザパターンまたは一種類のディザパターンの繰り返しから構成されるディザマトリックスであって、一行を構成する閾値の個数がn個(nは整数)であるnディザマトリックスまたは一行を構成する閾値の個数がm個(mは整数)であるmディザマトリックスのいずれかを、前記複数種類のディザパターンのそれぞれについて記憶するディザマトリックス記憶手段と、前記ディザマトリックス記憶手段に記憶された前記nディザマトリックスおよび前記mディザマトリックスの一行における読出位置を特定する値を保持するカウンタと、前記ディザマトリックス記憶手段に記憶された前記nディザマトリックスおよび前記mディザマトリックスの各基準位置を特定する基準値を記憶する基準値記憶手段と、前記基準値記憶手段に記憶された各ディザマトリックスの基準値に、前記カウンタの値を加算した値に基づいて、前記ディザマトリックス記憶手段に記憶された前記nディザマトリックスおよび前記mディザマトリックスのそれぞれから、前記N値化手段に用いる各色毎の閾値を読み出し、且つ、前記カウンタの値が初期値のとき、前記nディザマトリックスの一行における先頭から前記閾値を読み出す読出手段と、前記読出手段により、前記nディザマトリックスおよび前記mディザマトリックスのそれぞれから前記閾値が読み出されると前記カウンタの値に所定値を加算し、且つ、前記nディザマトリックスから一行分の閾値が読み出されると前記カウンタの値を前記初期値に戻すカウンタ更新手段と、前記カウンタ更新手段により前記カウンタの値が前記初期値に戻されると、前記基準値記憶手段に記憶された、前記mディザマトリックスの基準値にnを加算するn加算手段とを備える。
請求項6記載の画像処理装置は、請求項5記載の画像処理装置において、前記読出手段により、前記mディザマトリックスから一行分の閾値が読み出されると、前記基準値記憶手段に記憶されたmディザマトリックスの基準値からmを減算するm減算手段を備える。
請求項7記載の画像処理装置は、請求項6記載の画像処理装置において、前記mディザマトリックスから一行分の閾値が読み出されるまでに前記カウンタ更新手段により前記カウンタが更新される回数に相当する更新回数値を記憶する更新回数記憶手段と、前記更新回数値記憶手段により記憶された更新回数値と前記カウンタの値とに基づいて、前記mディザマトリックスから一行分の閾値が読み出されたかを判断する読出判断手段とを備え、前記m減算手段は、前記読出判断手段により、前記mディザマトリックスから一行分の閾値が読み出されたと判断された場合、前記mディザマトリックスの基準値からmを減算するものである。
請求項8記載の画像処理装置は、請求項7記載の画像処理装置において、前記カウンタ更新手段は、前記読出手段により、前記nディザマトリックスおよび前記mディザマトリックスのそれぞれから前記閾値が読み出されると前記カウンタの値に1を加算するものであって、前記n加算手段により、前記mディザマトリックスの基準値にnが加算されると、前記更新回数値記憶手段に記憶された更新回数値からnを減算し、前記m減算手段により、前記mディザマトリックスの基準値からmが減算されると、前記更新回数記憶手段に記憶された更新回数値にmを加算する更新回数算出手段を備える。
請求項9記載の画像処理プログラムは、複数色のそれぞれについて設定された複数種類のディザパターンを用いて、各色毎の閾値を読み出し、読み出された閾値に基づいて、入力画像データを構成する画素に含まれる複数色の色成分値を各色毎にN値化する(Nは2以上の整数)N値化ステップをコンピュータに実行させるものにおいて、前記コンピュータは、1つのディザパターンまたは一種類のディザパターンの繰り返しから構成されるディザマトリックスを、前記複数種類のディザパターンのそれぞれについて記憶するディザマトリックス記憶手段と、前記ディザマトリックス記憶手段に記憶された前記複数種類のディザマトリックスの一行における読出位置を特定する値を保持するカウンタとを備え、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスの一行を構成する閾値の個数は、前記複数種類のディザパターンの一行を構成する閾値の個数の公倍数であって、前記カウンタの値に基づいて、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスのそれぞれから、前記N値化ステップに用いる各色毎の閾値を読み出す読出ステップを前記コンピュータに実行させるものである。
請求項10記載の画像処理プログラムは、請求項9記載の画像処理プログラムにおいて、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスの一行を構成する閾値の個数は、前記複数種類のディザパターンの一行を構成する閾値の個数の最小公倍数である。
請求項11記載の画像処理プログラムは、請求項9または10に記載の画像処理プログラムにおいて、前記読出ステップは、前記カウンタの値が初期値のとき、前記ディザマトリックス記憶手段に記憶された前記複数種類のディザマトリックスの一行における先頭から前記閾値を読み出すものであり、前記読出ステップにより、前記複数種類のディザマトリックスのそれぞれから前記閾値が読み出されると前記カウンタの値に所定値を加算し、且つ、前記複数種類のディザマトリックスのそれぞれから一行分の閾値が読み出されると前記カウンタの値を前記初期値に戻すカウンタ更新ステップを、前記コンピュータに実行させるものである。
請求項12記載の画像処理プログラムは、請求項9から11のいずれかに記載の画像処理プログラムにおいて、前記コンピュータは、前記ディザマトリックス記憶手段に記憶された前記複数種類のディザマトリックスの各基準位置を特定する基準値を記憶する基準値記憶手段を備え、前記読出ステップは、前記基準値記憶手段に記憶された各ディザマトリックスの基準値に、前記カウンタの値を加算した値に基づいて、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスのそれぞれから、前記N値化ステップに用いる各色毎の閾値を読み出すものである。
請求項13記載の画像処理プログラムは、複数色のそれぞれについて設定された複数種類のディザパターンを用いて、各色毎に閾値を読み出し、読み出された閾値に基づいて、入力画像データを構成する画素に含まれる複数色の色成分値を各色毎にN値化するN値化ステップをコンピュータに実行させるものにおいて、前記コンピュータは、1つのディザパターンまたは一種類のディザパターンの繰り返しから構成されるディザマトリックスであって、一行を構成する閾値の個数がn個(nは整数)であるnディザマトリックスまたは一行を構成する閾値の個数がm個(mは整数)であるmディザマトリックスのいずれかを、前記複数種類のディザパターンのそれぞれについて記憶するディザマトリックス記憶手段と、前記ディザマトリックス記憶手段に記憶された前記nディザマトリックスおよび前記mディザマトリックスの一行における読出位置を特定する値を保持するカウンタと、前記ディザマトリックス記憶手段に記憶された前記nディザマトリックスおよび前記mディザマトリックスの各基準位置を特定する基準値を記憶する基準値記憶手段とを備え、前記基準値記憶手段に記憶された各ディザマトリックスの基準値に、前記カウンタの値を加算した値に基づいて、前記ディザマトリックス記憶手段に記憶された前記nディザマトリックスおよび前記mディザマトリックスのそれぞれから、前記N値化ステップに用いる各色毎の閾値を読み出し、且つ、前記カウンタの値が初期値のとき、前記nディザマトリックスの一行における先頭から前記閾値を読み出す読出ステップと、前記読出ステップにより、前記nディザマトリックスおよび前記mディザマトリックスのそれぞれから前記閾値が読み出されると前記カウンタの値に所定値を加算し、且つ、前記nディザマトリックスから一行分の閾値が読み出されると前記カウンタの値を前記初期値に戻すカウンタ更新ステップと、前記カウンタ更新ステップにより前記カウンタの値が前記初期値に戻されると、前記基準値記憶手段に記憶された、前記mディザマトリックスの基準値にnを加算するn加算ステップを、前記コンピュータに実行させるものである。
請求項14記載の画像処理プログラムは、請求項13記載の画像処理プログラムにおいて、前記読出ステップにより、前記mディザマトリックスから一行分の閾値が読み出されると、前記基準値記憶手段に記憶されたmディザマトリックスの基準値からmを減算するm減算ステップを、前記コンピュータに実行させるものである。
請求項15記載の画像処理プログラムは、請求項14記載の画像処理プログラムにおいて、前記コンピュータは、前記mディザマトリックスから一行分の閾値が読み出されるまでに前記カウンタ更新ステップにより前記カウンタが更新される回数に相当する更新回数値を記憶する更新回数記憶手段を備え、前記更新回数値記憶手段により記憶された更新回数値と前記カウンタの値とに基づいて、前記mディザマトリックスから一行分の閾値が読み出されたかを判断する読出判断ステップを前記コンピュータに実行させるものであり、前記m減算ステップは、前記読出判断ステップにより、前記mディザマトリックスから一行分の閾値が読み出されたと判断された場合、前記mディザマトリックスの基準値からmを減算するものである。
請求項16記載の画像処理プログラムは、請求項15記載の画像処理プログラムにおいて、前記カウンタ更新ステップは、前記読出ステップにより、前記nディザマトリックスおよび前記mディザマトリックスのそれぞれから前記閾値が読み出されると前記カウンタの値に1を加算するものであって、前記n加算ステップにより、前記mディザマトリックスの基準値にnが加算されると、前記更新回数値記憶手段に記憶された更新回数値からnを減算し、前記m減算手段により、前記mディザマトリックスの基準値からmが減算されると、前記更新回数記憶手段に記憶された更新回数値にmを加算する更新回数算出ステップを前記コンピュータに実行させるものである。
請求項1記載の画像処理装置によれば、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスの一行を構成する閾値の個数は、前記複数種類のディザパターンの一行を構成する閾値の個数の公倍数である。すなわち、前記複数種類のディザマトリックスは、一行を構成する閾値の数が等しい。したがって、複数種類のディザパターンの一行を構成する閾値の個数が互いに異なるものであっても、複数種類のディザマトリックスの一行における読み出し位置を特定する値を保持するカウンタを共通化できる。よって、複数種類のディザマトリックスのそれぞれにカウンタを設ける場合に比較して、カウンタの数が減少し、カウンタの制御に要する処理数を全体として減らすことができる。その結果、従来に比較してN値化処理を高速化できるという効果がある。特に、処理対象の画素数が多い場合には、一回のN値化処理がわずかでも高速化することにより、N値化処理全体としてみると、処理速度の大きな向上に繋がる。
請求項2記載の画像処理装置によれば、請求項1記載の画像処理装置の奏する効果に加え、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスの一行を構成する閾値の個数は、前記複数種類のディザパターンの一行を構成する閾値の個数の最小公倍数であるので、複数種類のディザマトリックスのデータ量を可能な限り小さくすることができ、メモリの使用量を抑えることができるという効果がある。
請求項3記載の画像処理装置によれば、請求項1または2に記載の画像処理装置の奏する効果に加え、前記複数種類のディザマトリックスのそれぞれから一行分の閾値が読み出されると(すなわち、一行における後尾の閾値が読み出されると)、カウンタ更新手段により、前記カウンタの値が初期値に戻され、複数種類のディザマトリックスの一行における先頭から再び閾値が読み出される。よって、複数種類のディザマトリックスのそれぞれにカウンタを設けなくても、各ディザマトリックスから所定の周期で閾値を読み出すことができる。すなわち、複数種類のディザマトリックスのそれぞれにカウンタを設けなくてもよいので、N値化処理を高速化できる。
請求項4記載の画像処理装置によれば、請求項1から3のいずれかに記載の画像処理装置の奏する効果に加え、前記基準値記憶手段に記憶された各ディザマトリックスの基準値に、前記カウンタの値を加算した値に基づいて、前記複数種類のディザマトリックスのそれぞれから、N値化手段に用いる各色毎の閾値が読み出される。よって、複数種類のディザマトリックスのそれぞれにカウンタを設けなくても、複数のディザマトリックスのそれぞれから閾値を読み出すことができる。すなわち、複数種類のディザマトリックスのそれぞれにカウンタを設けなくてもよいので、N値化処理を高速化できる。
請求項5記載の画像処理装置によれば、前記基準値記憶手段に記憶されたnディザマトリックスおよびmディザマトリックスの各基準値に、前記カウンタの値を加算した値に基づいて、前記ディザマトリックス記憶手段に記憶されたnディザマトリックスおよびmディザマトリックスのそれぞれから、前記N値化手段に用いる各色毎の閾値が読み出される。
ここで、前記nディザマトリックスから一行分の閾値が読み出されると(すなわち、一行における後尾の閾値が読み出されると)、カウンタ更新手段により、前記カウンタの値が初期値に戻されるので、nディザマトリックスの一行における先頭から再び閾値が読み出される。よって、nディザマトリックスのそれぞれから所定の周期で閾値を読み出すことができる。
一方で、前記カウンタ更新手段により前記カウンタの値が前記初期値に戻されると、n加算手段により、前記基準値記憶手段に記憶された、前記mディザマトリックスの基準値にnが加算される。その結果、mディザマトリックスの一行における先頭からn個目の閾値の位置が読出位置とされる。すなわち、カウンタの値が初期値に戻されても、mディザマトリックスの読出位置は、先頭には戻されない。
よって、nディザマトリックスおよびmディザマトリックスのそれぞれにカウンタを設けなくても、各ディザマトリックスのそれぞれから閾値を読み出すことができる。すなわち、nディザマトリックスおよびmディザマトリックスのカウンタを共通化することができるので、カウンタの数が減少し、カウンタの制御に要する処理数を全体として減らすことができる。その結果、N値化処理を高速化できるという効果がある。特に、処理対象の画素数が多い場合には、一回のN値化処理がわずかでも高速化することにより、N値化処理全体としてみると、処理速度の大きな向上に繋がる。
請求項6記載の画像処理装置によれば、請求項5記載の画像処理装置の奏する効果に加え、前記読出手段により、前記mディザマトリックスから一行分の閾値が読み出されると、m減算手段により、前記基準値記憶手段に記憶されたmディザマトリックスの基準値からmが減算されるので、mディザマトリックスの先頭から再び閾値が読み出される。よって、mディザマトリックスのそれぞれから所定の周期で閾値を読み出すことができる。すなわち、nディザマトリックスおよびmディザマトリックスのカウンタを共通化することができるので、N値化処理を高速化できる。
請求項7記載の画像処理装置によれば、請求項6記載の画像処理装置の奏する効果に加え、前記更新回数値記憶手段により記憶された更新回数値と前記カウンタの値とに基づいて、前記mディザマトリックスから一行分の閾値が読み出されたかを判断することができるので、前記mディザマトリックスから一行分の閾値が読み出されか否かを判断するために、別途カウンタを設ける必要がない。よって、カウンタの制御に必要な処理数が増加してN値化処理が低速化することを抑制できる。
請求項8記載の画像処理装置によれば、請求項7記載の画像処理装置の奏する効果に加え、前記n加算手段により、前記mディザマトリックスの基準値にnが加算されると、前記更新回数値記憶手段に記憶された更新回数値からnが減算され、前記m減算手段により、前記mディザマトリックスの基準値からmが減算されると、前記更新回数記憶手段に記憶された更新回数値にmが加算されるので、簡単な処理で更新回数値を算出することができる。よって、前記mディザマトリックスから一行分の閾値が読み出されか否かを判断するために、別途カウンタを設ける必要がないので、N値化処理が低速化することを抑制できる。
請求項9記載の画像処理プログラムによれば、前記コンピュータの前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスの一行を構成する閾値の個数が、前記複数種類のディザパターンの一行を構成する閾値の個数の公倍数である。すなわち、前記複数種類のディザマトリックスは、一行を構成する閾値の数が等しい。したがって、複数種類のディザパターンの一行を構成する閾値の個数が互いに異なるものであっても、複数種類のディザマトリックスのそれぞれに対応したカウンタを設ける必要がなく、読出ステップにより、共通のカウンタの値に基づいて、複数種類のディザマトリックスのそれぞれから、N値化ステップに用いる各色毎の閾値を読み出すことができる。よって、複数種類のディザマトリックスのそれぞれにカウンタを設ける場合に比較して、カウンタの数が減少し、カウンタの制御に要する処理数を全体として減らすことができる。その結果、N値化処理を高速化できるという効果がある。特に、処理対象の画素数が多い場合には、一回のN値化処理がわずかでも高速化することにより、N値化処理全体としてみると、処理速度の大きな向上に繋がる。
請求項10記載の画像処理プログラムによれば、請求項9記載の画像処理プログラムの奏する効果に加え、前記ディザマトリックス記憶手段に記憶された複数種類のディザマトリックスの一行を構成する閾値の個数は、前記複数種類のディザパターンの一行を構成する閾値の個数の最小公倍数であるので、複数種類のディザマトリックスのデータ量を可能な限り小さくすることができ、メモリの使用量を抑えることができるという効果がある。
請求項11記載の画像処理プログラムによれば、請求項9または10に記載の画像処理プログラムの奏する効果に加え、前記複数種類のディザマトリックスのそれぞれから一行分の閾値が読み出されると(すなわち、一行における後尾の閾値が読み出されると)、カウンタ更新ステップにより、前記カウンタの値が初期値に戻され、複数種類のディザマトリックスの一行における先頭から再び閾値が読み出される。よって、複数種類のディザマトリックスのそれぞれにカウンタを設けなくても、各ディザマトリックスから所定の周期で閾値を読み出すことができる。すなわち、複数種類のディザマトリックスのそれぞれにカウンタを設けなくてもよいので、N値化処理を高速化できる。
請求項12記載の画像処理プログラムによれば、請求項9から11のいずれかに記載の画像処理プログラムの奏する効果に加え、前記基準値記憶手段に記憶された各ディザマトリックスの基準値に、前記カウンタの値を加算した値に基づいて、複数種類のディザマトリックスのそれぞれから、N値化ステップに用いる各色毎の閾値が読み出される。よって、複数種類のディザマトリックスのそれぞれにカウンタを設けなくても、複数のディザマトリックスのそれぞれから閾値を読み出すことができる。すなわち、複数種類のディザマトリックスのそれぞれにカウンタを設けなくてもよいので、N値化処理を高速化できる。
請求項13記載の画像処理プログラムによれば、前記コンピュータの前記基準値記憶手段に記憶されたnディザマトリックスおよびmディザマトリックスの各基準値に、前記カウンタの値を加算した値に基づいて、前記コンピュータの前記ディザマトリックス記憶手段に記憶されたnディザマトリックスおよびmディザマトリックスのそれぞれから、前記N値化ステップに用いる各色毎の閾値が読み出される。
ここで、前記nディザマトリックスから一行分の閾値が読み出されると(すなわち、一行における先頭からn個目の閾値が読み出されると)、カウンタ更新ステップにより、前記カウンタの値が初期値に戻されるので、nディザマトリックスの一行における先頭から再び閾値が読み出される。よって、nディザマトリックスのそれぞれから所定の周期で閾値を読み出すことができる。
一方で、前記カウンタ更新ステップにより前記カウンタの値が前記初期値に戻されると、n加算ステップにより、前記コンピュータの前記基準値記憶手段に記憶された、前記mディザマトリックスの基準値にnが加算される。その結果、mディザマトリックスの一行における先頭よりもn個分後尾側の閾値の位置が読出位置とされる。すなわち、カウンタの値が初期値に戻されても、mディザマトリックスの読出位置は、先頭には戻されない。
よって、nディザマトリックスおよびmディザマトリックスのそれぞれにカウンタを設けなくても、各ディザマトリックスのそれぞれから閾値を読み出すことができる。すなわち、nディザマトリックスおよびmディザマトリックスのカウンタを共通化することができるので、カウンタの数が減少し、カウンタの制御に要する処理数を全体として減らすことができる。その結果、N値化処理を高速化できるという効果がある。特に、処理対象の画素数が多い場合には、一回のN値化処理がわずかでも高速化することにより、N値化処理全体としてみると、処理速度の大きな向上に繋がる。
請求項14記載の画像処理プログラムによれば、請求項13記載の画像処理プログラムの奏する効果に加え、前記読出ステップにより、前記mディザマトリックスから一行分の閾値が読み出されると、m減算ステップにより、前記コンピュータの前記基準値記憶手段に記憶されたmディザマトリックスの基準値からmが減算されるので、mディザマトリックスの先頭から再び閾値が読み出される。よって、mディザマトリックスのそれぞれから所定の周期で閾値を読み出すことができる。すなわち、nディザマトリックスおよびmディザマトリックスのカウンタを共通化することができるので、N値化処理を高速化できる。
請求項15記載の画像処理プログラムによれば、請求項14記載の画像処理プログラムの奏する効果に加え、前記コンピュータの前記更新回数値記憶手段により記憶された更新回数値と前記カウンタの値とに基づいて、前記mディザマトリックスから一行分の閾値が読み出されたかを判断することができるので、前記mディザマトリックスから一行分の閾値が読み出されか否かを判断するために、別途カウンタを設ける必要がない。よって、カウンタの制御に必要な処理数が増加してN値化処理が低速化することを抑制できる。
請求項16記載の画像処理プログラムによれば、請求項15記載の画像処理プログラムの奏する効果に加え、前記n加算ステップにより、前記mディザマトリックスの基準値にnが加算されると、前記コンピュータの前記更新回数値記憶手段に記憶された更新回数値からnが減算され、前記m減算ステップにより、前記mディザマトリックスの基準値からmが減算されると、前記コンピュータの前記更新回数記憶手段に記憶された更新回数値にmが加算されるので、簡単な処理で更新回数値を算出することができる。よって、前記mディザマトリックスから一行分の閾値が読み出されか否かを判断するために、別途カウンタを設ける必要がないので、N値化処理が低速化することを抑制できる。
以下、本発明の好ましい実施例について、添付図面を参照して説明する。図1は、本発明における第1実施例の画像処理装置として機能するパーソナルコンピュータ10(以下、これをPC10と称する。)を含むプリントシステムの全体構成を示すブロック図である。図1に示されるようなプリントシステムは、PC10と、PC10に接続されるプリンタ50とを備えている。
PC10は、文書作成アプリケーションや画像作成アプリケーションなどで作成された文書データや画像データに対し、色変換処理や後述する二値化処理(図5参照)などの各種処理を実行し、プリンタ50において印刷可能な印刷データに変換してプリンタ50に出力する装置である。
PC10は、図1に示すように、CPU(Central Processing unit)11と、ROM(Read Only Memory)12と、RAM(Random Access Memory)13と、HDD(Hard Disk Drive)14と、入力装置15と、表示装置16と、プリンタ50に接続するプリンタ用インターフェース18(I/F18)とを備えている。
CPU11は、このPC10を総括的に制御する中央演算処理であり、図5,図6,図7のフローチャートで示す処理を実行するプリンタドライバ14aなど、各種プログラムを実行する。
ROM12は、CPU11により実行される各種制御プログラムや、それらの制御プログラムをCPU11により実行する上で必要なデータなどを格納した読み出し専用のメモリである。
RAM13は、CPU11により実行される各種処理に必要なデータやプログラムを一時的に記憶するためのメモリである。このRAM13は、入力画像メモリ13aと出力画像メモリ13bと、カウンタ13cと、C基準アドレスメモリ13dと、M基準アドレスメモリ13eと、Y基準アドレスメモリ13fと、K基準アドレスメモリ13gと、C値メモリ13hと、M値メモリ13iと、Y値メモリ13jと、K値メモリ13kとを備えている。入力画像メモリ13aは、後述する二値化処理(図5参照)の対象である入力画像データを格納するメモリである。入力画像データは、各画素が、その色濃度に相当するCMYKの各色成分値(階調値)を含むビットマップデータである。なお、本第1実施例において、入力画像データを構成する各画素に含まれるCMYKの各色成分値は、それぞれ0以上255以下のいずれかの値をとるものとして説明する。
出力画像メモリ13bは、出力画像データを格納するメモリである。入力画像メモリ13aに格納された入力画像データは、後述する二値化処理(図5参照)により、入力画像データを構成する各画素に含まれるCMYKの各色成分値が、それぞれ「0」または「1」に二値化された出力画像データに変換される。
カウンタ13cは、後述するCディザマトリックス20、Mディザマトリックス22、Yディザマトリックス24、Kディザマトリックス26(図2参照)の一行における読み出し位置を特定する値を保持するカウンタである。カウンタ13cの初期値は「0」であって、本第1実施例においては「0〜36」の範囲で1カウントずつ更新される。
C基準アドレスメモリ13dは、後述するディザマトリックスメモリ14b(図3参照)に格納されたCディザマトリックス20のうち、読出対象である一行における閾値の読出開始位置(請求項の基準位置に相当)を特定するアドレスを、C基準アドレス(請求項の基準値に相当)として格納するメモリである。M基準アドレスメモリ13eは、後述するディザマトリックスメモリ14bに格納されたMディザマトリックス22のうち、読出対象である一行における閾値の読出開始位置(請求項の基準位置に相当)を特定するアドレスを、M基準アドレス(請求項の基準値に相当)として格納するメモリである。
Y基準アドレスメモリメモリ13fは、後述するディザマトリックスメモリ14bに格納されたYディザマトリックス24のうち、読出対象である一行における閾値の読出開始位置(請求項の基準位置に相当)を特定するアドレスを、Y基準アドレス(請求項の基準値に相当)として格納するメモリである。K基準アドレスメモリ13gは、後述するディザマトリックスメモリ14bに格納されたKディザマトリックス26のうち、読出対象である一行における閾値の読出開始位置(請求項の基準位置に相当)を特定するアドレスを、K基準アドレス(請求項の基準値に相当)として格納するメモリである。なお、本第1実施例においては、基準アドレスメモリ13d,13e,13f,13gに記憶される各基準アドレスは、読出対象である一行における先頭の閾値のアドレスに相当するアドレスである。
C値メモリ13hは、二値化処理の対象である入力画像データの1画素に含まれるCの色成分値が格納されるメモリである。M値メモリ13iは、二値化処理の対象である入力画像データの1画素に含まれるMの色成分値が格納されるメモリである。Y値メモリ13jは、二値化処理の対象である入力画像データの1画素に含まれるYの色成分値が格納されるメモリである。K値メモリ13kは、二値化処理の対象である入力画像データの1画素に含まれるKの色成分値が格納されるメモリである。なお、C値メモリ13h、M値メモリ13i、Y値メモリ13j、K値メモリ13kに格納されるCMYKの各色成分値は、多値(本第1実施例においては、0〜255)である。
HDD14は、ハードディスクを含むハードディスク読取装置であり、プリンタドライバ14aと、ディザマトリックスメモリ14bと、ディザデータメモリ14cとを備えている。
プリンタドライバ14aは、文書作成アプリケーションや画像作成アプリケーションなど、各種アプリケーションで作成された文書データや画像データを、プリンタ50において処理可能な印刷データに変換し、プリンタ50へ出力するためのプログラムである。PC10は、プリンタドライバ14aに従って、文書データや画像データに含まれる文字や画像に対して描画処理を行い、RGB形式のデータをCMYK形式のデータに変換する色変換処理、図5を参照して後述する二値化処理など各種処理を施すことにより、印刷データに変換する。二値化処理により、PC10は、多値(本第1実施例においては、0〜255)のCMYK各色成分値で構成される入力値を、その入力値に対応する二値(本第1実施例においては、1または0)のCMYKの各値に変換して出力する。
ディザマトリックスメモリ14bは、Cディザマトリックス20、Mディザマトリクス22、Yディザマトリックス24、Kディザマトリックス26を格納するメモリである。なお、ディザマトリックスメモリ14bの構成、およびディザマトリックスメモリ14bに格納されるディザマトリックスについては、図2,図3を参照しつつ後述する。
ディザデータメモリ14cは、ディザマトリックスメモリ14bに格納されたCディザマトリックス20、Mディザマトリクス22、Yディザマトリックス24、Kディザマトリックス26のそれぞれの最先頭アドレスと、周期と、行数とを記憶するメモリである。なお、ディザデータメモリ14cの構成については、図4を参照しつつ後述する。
入力装置15は、PC10へデータ又はコマンドを入力するものであり、キーボード、マウスなどにより構成されている。表示装置16は、プリンタサーバ10で実行される処理内容や入力されたデータなどを視覚的に確認するために、文字や画像などを表示するものであり、例えば、CRTディスプレイや液晶ディスプレイなどにより構成されている。
I/F18は、PC10とプリンタ50とを接続するものであり、PC10は、このI/F18を介することにより、プリントコマンドや、印刷データをプリンタ50に送信し、プリンタ50に記録用紙への印刷を実行させることができる。
図1に示すように、上述したCPU11と、ROM12と、RAM13と、HDD14と、入力装置15と、表示装置16と、I/F18とは、バスライン19を介して互いに接続されている。
また、図1に示すように、PC10に接続されるプリンタ50は、CPU51と、ROM52と、RAM53と、シート搬送モータ54と、キャリッジモータ55と、印字ヘッド58と、PC10に接続するインターフェース57(I/F57)とを備えている。
プリンタ50における上記のような構成において、CPU51は、プリンタ50の動作を制御するものであり、各種プログラムを実行する。ROM52は、プリンタ50の動作を制御するためのプログラムなどが格納されたメモリである。
シート搬送モータ54は、プリンタ50の所定の位置に配置された記録用紙を上流から下流への方向又はその逆方向に搬送するためのステッピングモータであり、その移動はCPU51により制御される。キャリッジモータ55は、印字ヘッド58を装着した非図示のキャリッジを、シート搬送モータ54による搬送方向に対して直交方向に、キャリッジの初期位置である始点と、該始点とは反対側の限界位置である終点との間を往復移動させるべく駆動するためのステッピングモータであり、その移動はCPU51により制御される。
印字ヘッド58は、複数のノズル、アクチュエータ(いずれも非図示)を備えたインクジェットヘッドであり、CPU51により制御されるアクチュエータの駆動によってインクをノズルから噴射して、所定の文字又は模様を印刷するものである。また、I/F57は、プリンタ50とPC10とを接続するものであり、このI/F57を介して、PC10からプリントコマンドや印刷データが入力される。
図1に示すように、上述したCPU51と、ROM52と、RAM53と、シート搬送モータ54と、キャリッジモータ55と、印字ヘッド58と、I/F57とは、バスライン59を介して互いに接続されている。
図2を参照して、ディザマトリックスメモリ14bに格納されるディザテーブルについて説明する。図2は、Cディザマトリックス20、Mディザマトリックス22、Yディザマトリックス24、Kディザマトリックス26の構成を模式的に示す図である。なお、図2においては、Cディザマトリックス20のみ全体図を示し、他のディザマトリックス22,24,26は、一行目のみを図示して他の行の図示は省略する。ここでは、まず、Cディザマトリックス20を例に挙げて説明する。
後述する二値化処理(図5参照)では、これらのディザマトリックス20,22,24,26を用いて二値化処理が行われる。このようなディザマトリックスを用いた二値化処理方法は、ディザ法と称される。ディザ法とは、“所定領域を構成する複数の画素を遠くから見ると、その領域内の全ての画素の色を平均化した色に見える”という原理に基づき、階調数を擬似的に増加させる二値化処理方法である。すなわち、所定領域を構成する複数の画素に対し、1画素毎にそれぞれ異なる閾値を設定し、二値化処理を行う。この所定領域内の画素分の閾値で構成される閾値群をディザパターンと称する。このディザパターンの範囲で、所定領域内の画素に含まれる色成分値を二値化処理をすることにより、所定領域内の画素を平均した色濃度を、所望の色濃度に近似させることができる。
図2に示すように、Cディザマトリックス20は、3個のCディザパターン20aの繰り返しから構成される。各Cディザパターン20aは、一行が12個の閾値で構成される4行の閾値群(すなわち48個の閾値群)であって、且つ、1つのCディザパターン20aは、互いに異なる値である48個の閾値群で構成される。すなわち、一つのCディザパターン20aは、48画素分の画素を平均した色(C)濃度が所望の色濃度と近似するように設定されたディザパターンである。
Cディザマトリックス20は、3個のCディザパターン20aが行方向に繰り返し配列された閾値群である。すなわち、一行が36(=12×3)個の閾値で構成される4行の閾値群である。
図2に示すように、Cディザパターン20a、Mディザパターン22a、Yディザパターン24a、Kディザパターン26aは、一行を構成する閾値の個数がそれぞれ異なる。すなわち、Mディザパターン22aの一行は6個の閾値で構成され、Yディザパターン24aの一行は4個の閾値で構成され、Kディザパターン26aの一行は9個の閾値で構成される。
しかし、Mディザマトリックス22は、6個のMディザパターン22aの繰り返しから構成されるので、一行が36(=6×6)個の閾値で構成される。Yディザマトリックス24は、9個のYディザパターン24aの繰り返しから構成されるので、一行が36(=4×9)個の閾値で構成される。Kディザマトリックス26は、4個のKディザパターン26aの繰り返しから構成されるので、一行が36(=9×4)の閾値で構成される。このように、各ディザパターン20a、22a、24a、26aは、一行を構成する閾値の個数が互いに異なるが、各ディザマトリックス20,22,24,26は、一行を構成する閾値の個数は全て36となるように構成されている。すなわち、各ディザマトリックス20,22,24,26の一行を構成する閾値の個数(本第1実施例では36)が、各ディザパターン20a,22a,24a,26aの一行を構成する閾値の個数(本第1実施例では、12,6,4,9)の最小公倍数となるように、各ディザマトリックス20,22,24,26が構成されている。
図3を参照して、ディザマトリックスメモリ14bの構成について説明する。図3は、ディザマトリックスメモリ14bの構成を模式的に示す図である。ディザマトリックスメモリ14bは、Cディザマトリックス20、Mディザマトリックス22、Yディザマトリックス24、Kディザマトリックス26を記憶するメモリである。なお、図3においては、Cディザマトリックス20における2行分の閾値を図示し、他は図示を省略する。
図3において、図面左側には、ディザマトリックスメモリ14bにおけるアドレスを、16進数表記で示している。後述する色変換処理(図5参照)では、指定されたアドレスに格納された閾値が、ディザマトリックスメモリ14bから読み出され、二値化処理に用いられる。なお、図3においては、Cディザマトリックス20の一行分の閾値を太線で囲んで図示する。
図4を参照して、ディザデータメモリ14cに記憶されるデータの構成について説明する。図4は、ディザデータメモリ14cに記憶されるデータの構成を模式的に示す図である。図4に示すように、ディザデータメモリ14cには、各ディザマトリックス20,22,24,26の最先頭アドレスと、周期と、行数とが記憶されている。最先頭アドレスとは、各ディザマトリックス20,22,24,26の一行一列目の閾値のアドレスである。例えば、Cディザマトリックス20の一行一列目の閾値は、アドレス「0x00001000」で特定されるディザマトリックスメモリ14b上の位置に格納されている(図3参照)。
周期は、各ディザマトリックス20,22,24,26の一行を構成する閾値の個数に相当する。本第1実施例では、全て36が格納される。行数は、各ディザマトリックス20,22,24,26のそれぞれの行数に相当する。例えば、Cディザマトリックス20は4行で構成されるので(図2参照)、行数として4が格納される。
図5を参照して、上記のように構成されるPC10において実行される、二値化処理について説明する。図5は、PC10で実行される二値化処理のフローチャートである。この二値化処理は、入力画像メモリ13aに入力画像データが格納されると起動する処理であり、入力画像データを一ラインずつ、二値化処理するものである。
まず、変数yを「0」とする(S2)。次に、変数yが入力画像データの全体のライン数よりも小さいか否かを判断する(S4)。
変数yが入力画像データの全体のライン数よりも小さい場合(S4:Yes)、次に、入力画像データのyライン目のデータを読み込む(S5)。次に、処理対象であるyライン目のデータを二値化処理するために、Cディザテーブル20の何行目の閾値を参照するべきかに相当する値であるC参照行数を算出する(S6)。具体的には、ディザデータメモリ14cから、Cディザマトリックス20の行数を読み込み、変数yをCのディザテーブルの行数(本第1実施例では4)で割った余りを、C参照行数として算出する。例えば、入力画像データの0ライン目のデータが読み込まれた場合は、0がC参照行数とされる。また入力画像データの1ライン目が読み込まれた場合は、1がC参照行数とされる。また入力画像データの2ライン目が読み込まれた場合は、2がC参照行数とされる。また入力画像データの3ライン目が読み込まれた場合は、3がC参照行数とされる。また入力画像データの4ライン目が読み込まれた場合は、0が参照行数とされる。すなわち、Cディザマトリックス20は、二値化処理対象のライン数に応じて、0行目から3行目までのいずれかが参照され、0行目から3行目まで順次参照されると、再び0行目から参照される。
次に、Cディザマトリックス20の読出対象の一行の先頭の閾値のアドレスに相当する基準アドレスを算出する(S8)。具体的には、ディザデータメモリ14cからCディザマトリックス20の最先頭アドレス(本第1実施例では0x00001000)とCディザマトリックスの周期(本第1実施例では36)とを読み込み、Cディザマトリックスの周期にC参照行数を乗算した乗算結果を、読み込まれた最先頭アドレスに加算することにより、C基準アドレスが算出される。算出されたC基準アドレスは、C基準アドレスメモリ13dに格納される。
次に、処理対象であるyライン目のデータを二値化処理するために、Mディザテーブル22の何行目の閾値を参照するべきかを特定する値であるM参照行数を算出する(S10)。そして、Mディザマトリックス22の参照されるべき一行の先頭の閾値が格納された位置を特定するM基準アドレスを算出し、M基準アドレスメモリ13eに格納する(S12)。
次に、処理対象であるyライン目のデータを二値化処理するために、Yディザテーブル24の何行目の閾値を参照するべきかを特定する値であるY参照行数を算出する(S14)。そして、Yディザマトリックス24の参照されるべき一行の先頭の閾値が格納された位置を特定するY基準アドレスを算出し、Y基準アドレスメモリ13fに格納する(S16)。
次に、処理対象であるyライン目のデータを二値化処理するために、Kディザテーブル26の何行目の閾値を参照するべきかを特定する値であるK参照行数を算出する(S18)。そして、Kディザマトリックス26の参照されるべき一行の先頭の閾値が格納された位置を特定するK基準アドレスを算出し、K基準アドレスメモリ13gに格納する(S20)。
なお、M参照行数、Y参照行数、K参照行数、およびM基準アドレス、Y基準アドレス、K基準アドレスの算出方法については、上述のC参照行数、およびC基準アドレスの算出方法とほぼ同様であるため、図5のフローチャートにのみ示し、詳細は説明は省略する。
このようにして、各ディザマトリックス20,22,24,26の基準アドレスが決定されると、その決定された基準アドレスに基づいて、各ディザマトリックス20,22,24,26から閾値が読み出され、読み出された閾値に基づいて、入力画像データの一ライン分のデータの二値化処理が行われる(S22)。なお、データの二値化処理については下記に記述する。そして、入力画像データの一ライン分のデータに対して二値化処理がされると、変数yに「1」を加算し、S4の処理に戻る(S24)。したがって、入力画像データから次のラインが読み込まれ、処理が繰り返される。入力画像データに含まれる全てのラインについて二値化処理がされ、変数yが入力画像データのライン数に等しくなると(S4:No)、処理を終了する。
さて、図6を参照して、1ライン分の二値化処理(S22)について説明する。図6は、1ライン分の二値化処理を示すフローチャートである。1ライン分の二値化処理では、まず、変数xを「0」とする(S222)。変数xは、入力画像データの一ライン分のデータのうち、先頭から何番目の画素が二値化処理対象であるかを示す変数である。
次に、カウンタ13cの値を初期値「0」にする(S224)。カウンタ13cの値は、後述する1画素分の二値化処理で用いられる値であって、各ディザマトリックス20,22,24,26の一行における読み出し位置を特定する値である。このカウンタ13cの値が初期値「0」である場合、後述する1画素分の二値化処理において、各ディザマトリックス20,22,24,26の一行における先頭の閾値(すなわち基準アドレスで特定される閾値)が読み出される。また、カウンタ13cの値は、複数のディザマトリックス20,22,24,26のそれぞれから閾値が読み出されることにより、後述するS234の処理において、「1」カウントアップされる。
次に、変数xが入力画像データの1ラインを構成する画素数よりも小さいか否かを判断する(S226)。変数xが入力画像データの1ラインを構成する画素数よりも小さい場合(S226:Yes)、入力画像データの1ライン分のデータを構成する先頭の画素からx番目の画素に含まれるCMYKの各色成分値を読み込み、C値メモリ13h、M値メモリ13i、Y値メモリ13j、K値メモリ13kに、それぞれ書き込む(S228)。そしてC値メモリ13h、M値メモリ13i、Y値メモリ13j、K値メモリ13kに書き込まれた値をそれぞれ二値化する1画素分の二値化処理を実行する(S230)。なお、1画素分の二値化処理については下記に記述する。
次に、変数xに「1」を加算し(S232)、カウンタ13cを「1」カウントアップする(S234)。すなわち、1画素分の二値化処理(S230)において、各ディザマトリックス20,22,24,26からそれぞれ閾値が読み出されると、カウンタが1カウントアップされるのである。次に、カウンタ13cの値が各ディザマトリックス20,22,24,26の周期(本第1実施例では36)よりも小さいか否かを判断する。後述するように、カウンタ13cの値は、基準アドレスから何番目の位置にある閾値を読み出すべきであるかを示す値に相当することから、カウンタ13cと各ディザマトリックス20,22,24,26の周期とを比較することにより、各ディザマトリックス20,22,24,26のそれぞれから一行分の閾値が読み出されたか否か(すなわち、一行の後尾の閾値が読み出されたか)を判断することができる。
カウンタ13cの値が周期よりも小さい場合(S236:Yes)、S226から処理を繰り返す。一方、カウンタ13cの値が周期に等しくなったとき(S236:No)、すなわち、カウンタ13cの値が36となり、各ディザマトリックス20,22,24,26のそれぞれから一行分の閾値が読み出されたと判断された場合、S224の処理に戻り、カウンタ13cの値を「0」とする(S224)。
そして、入力画像データの一ライン分のデータを構成する全ての画素について二値化処理がされると、変数xの値が入力画像データの一ライン分の画素数に等しくなるので(S226:No)、1ライン分の二値化処理を終了し、図5のS24の処理に戻る。
さて、図7を参照して、1画素分の二値化処理(S230)について説明する。図7は、1画素分の二値化処理を示すフローチャートである。まず、C基準アドレスメモリ13dに記憶されたC基準アドレスを読み出し、そのC基準アドレスに、カウンタ13cの値を加算する(S2302)。そして、加算結果の値で示されるアドレスの閾値を、ディザマトリックスメモリ14bに記憶されたCディザマトリックス20から読み出す(S2304)。すなわち、C基準アドレスは、参照されるべき一行の先頭の閾値が格納された位置を特定するアドレスであって、カウンタ13cの値は、基準アドレスから何番目の位置にある閾値を読み出すべきであるかを示す値であるので、基準アドレスにカウンタ13cの値を加算することにより、読出位置を特定することができる。例えば、C基準アドレスとして、「0x00001000」(16進数で表記)が記憶されている場合、そのC基準アドレスにカウンタの値3を加算した値で示されるアドレス「0x00001003」で特定される位置の閾値が読み出される。
また、カウンタ13cの値は、上述のように、1画素分の二値化処理が行われると1カウントアップされる。よって、Cディザマトリックス20の参照されるべき一行を構成する閾値を、先頭から順番に読み出すことができる。例えば、アドレス「0x00001003」で特定される位置の閾値が読み出されて1画素分の二値化処理が行われると、次は、アドレス「0x00001004」で特定される位置の閾値が読み出される。
次に、C値メモリ13hに格納されているCの色成分値が、読み出された閾値以上であるかを判断する(S2306)。Cの色成分値が、読み出された閾値以上である場合(S2306:Yes)、「1」をCの出力値として、出力画像メモリ13bに書き込む(S2310)。一方、Cの色成分値が、読み出された閾値よりも小さい場合(S2306:No)、「0」をCの出力値として出力画像メモリ13bに書き込む(S2308)。
次に、M基準アドレスメモリ13eに記憶されたM基準アドレスを読み出し、カウンタ13cの値を加算する(S2312)。そして、加算結果の値で示されるアドレスで特定される位置に格納された閾値を、ディザマトリックスメモリ14bに記憶されたMディザマトリックス22から読み出す(S2314)。
次に、M値メモリ13iに格納されているMの色成分値が、読み出された閾値以上であるかを判断する(S2316)。Mの色成分値が、読み出された閾値以上である場合(S2316:Yes)、「1」をMの出力値として、出力画像メモリ13bに書き込む(S2320)。一方、Mの色成分値が、読み出された閾値よりも小さい場合(S2316:No)、「0」をMの出力値として出力画像メモリ13bに書き込む(S2318)。
次に、Y基準アドレスメモリ13fに記憶されたY基準アドレスを読み出し、カウンタ13cの値を加算する(S2322)。そして、加算結果の値で示されるアドレスで特定される位置に格納された閾値を、ディザマトリックスメモリ14bに記憶されたYディザマトリックス24から読み出す(S2324)。
次に、Y値メモリ13jに格納されているYの色成分値が、読み出された閾値以上であるかを判断する(S2326)。Yの色成分値が、読み出された閾値以上である場合(S2326:Yes)、「1」をYの出力値として、出力画像メモリ13bに書き込む(S2330)。一方、Yの色成分値が、読み出された閾値よりも小さい場合(S2326:No)、「0」をYの出力値として出力画像メモリ13bに書き込む(S2328)。
次に、K基準アドレスメモリ13gに記憶されたK基準アドレスを読み出し、カウンタ13cの値を加算する(S2332)。そして、加算結果の値で示されるアドレスで特定される位置に格納された閾値を、ディザマトリックスメモリ14bに記憶されたKディザマトリックス26から読み出す(S2334)。
次に、K値メモリ13kに格納されているKの色成分値が、読み出された閾値以上であるかを判断する(S2336)。Kの色成分値が、読み出された閾値以上である場合(S2336:Yes)、「1」をKの出力値として、出力画像メモリ13bに書き込む(S2340)。一方、Kの色成分値が、読み出された閾値よりも小さい場合(S2336:No)、「0」をKの出力値として出力画像メモリ13bに書き込む(S2338)。
このようにして、一画素に含まれるCMYKの各色成分値に対し二値化処理がされると、一画素分の二値化処理を終了し、図6のS232の処理に戻る。
本第1実施例によれば、複数種類のディザマトリックス20,22,24,26の一行を構成する閾値の個数は、複数種類のディザパターン20a,22a,24a,26aの一行を構成する閾値の個数の公倍数である。すなわち、各ディザパターン20a,22a,24a,26aの一行を構成する閾値の個数は互いに異なるが、複数種類のディザマトリックス20,22,24,26の一行を構成する閾値の数は全て等しい。したがって、各ディザマトリックス20,22,24,26の一行における読み出し位置を特定する値を保持するカウンタ13cを共通化できる。よって、複数種類のディザマトリックス20,22,24,26のそれぞれにカウンタを設ける場合に比較して、カウンタの数が減少し、カウンタの制御に要する処理数を全体として減らすことができる。その結果、二値化処理を高速化できるという効果がある。特に、処理対象の画素数が多い場合には、一回の(1画素分の)二値化処理がわずかでも高速化することにより、二値化処理全体としてみると、処理速度の大きな向上に繋がる。
また、複数種類のディザマトリックス20,22,24,26の一行を構成する閾値の個数は、複数種類のディザパターン20a,22a,24a,26aの一行を構成する閾値の個数の最小公倍数とされているので、複数種類のディザマトリックス20,22,24,26のデータ量を可能な限り小さくすることができる。
また、カウンタ13cの値が36までカウントアップしたことに基づいて、複数種類のディザマトリックス20,22,24,26のそれぞれから一行分の閾値が読み出されたことが判断されると、カウンタ13cの値が初期値である0に戻され、複数種類のディザマトリックス20,22,24,26の一行における先頭から、再び閾値が読み出される。よって、複数種類のディザマトリックス20,22,24,26のそれぞれにカウンタを設けなくても、各ディザマトリックス20,22,24,26から所定の周期で閾値を読み出すことができる。すなわち、複数種類のディザマトリックス20,22,24,26のそれぞれにカウンタを設けなくてもよいので、二値化処理を高速化できる。
また、C基準アドレスメモリ13d、M基準アドレスメモリ13e、Y基準アドレスメモリ13f、K基準アドレスメモリ13gにそれぞれ記憶された各ディザマトリックス20,22,24,26の基準アドレスに、カウンタ13cの値を加算した値に基づいて、複数種類のディザマトリックス20,22,24,26のそれぞれから、二値化処理に用いる各色毎の閾値が読み出される。よって、複数種類のディザマトリックス20,22,24,26のそれぞれにカウンタを設けなくても、複数のディザマトリックス20,22,24,26のそれぞれから閾値を読み出すことができる。すなわち、複数種類のディザマトリックス20,22,24,26のそれぞれにカウンタを設けなくてもよいので、二値化処理を高速化できる。
次に、図8〜図11を参照して、PC10による二値化処理の第2実施例について説明する。上記した第1実施例では、複数種類のディザマトリックス20,22,24,26の一行を構成する閾値の個数が全て等しくされていたが、第2実施例では、複数種類のディザマトリックス30,32,34,36の一行を構成する閾値の個数が、n個(本第2実施例では18個)またはm個(本第2実施例では28個)のいずれかとなるように、複数種類のディザマトリックス30,32,34,36が構成されている点が、上記第1実施例と異なる。また、本第1実施例においては、基準アドレスメモリ13d,13e,13f,13gに記憶される各基準アドレスは、読出対象である一行における先頭の閾値のアドレスに相当するアドレスであったが、本第2実施例における基準アドレスは、必ずしも一行の先頭の閾値のアドレスに相当するアドレスではない点において、上記第1実施例と異なる。なお、この第2実施例において、上記した第1実施例と同一の部分には同一の符号を付して、その説明を省略する。
図8を参照して、本第2実施例に用いられる複数種類のディザマトリックス30,32,34,36の構成について説明する。図8は、Cディザマトリックス30、Mディザマトリックス32、Yディザマトリックス34、Kディザマトリックス36の構成を模式的に示す図であり、図2に相当する図である。なお、図8においては、各ディザマトリックス30,32,34,36は、それぞれ一行のみを図示して他の行の図示は省略する。
図8に示すように、Cディザマトリックス30は、7個のCディザパターン30aの繰り返しから構成される。各Cディザパターン30aは、一行が7個の閾値で構成される4行の閾値群(すなわち28個の閾値群)であって、且つ、1つのディザパターン30aは、互いに異なる値である28個の閾値群で構成される。すなわち、一つのCディザパターン32aは、28画素分の画素を平均した色(C)濃度が所望の色濃度と近似するように設定されたディザパターンである。
図8に示すように、Cディザパターン30a、Mディザパターン32a、Yディザパターン34a、Kディザパターン36aは、一行を構成する閾値の個数がそれぞれ異なる。すなわち、Mディザパターン32aの一行は6個の閾値で構成され、Yディザパターン34aの一行は4個の閾値で構成され、Kディザパターン36aの一行は9個の閾値で構成される。
しかし、Mディザマトリックス32は、3個のMディザパターン32aの繰り返しから構成されるので、一行が18(=6×3)個の閾値で構成され、Yディザマトリックス34は、7個のYディザパターン34aの繰り返しから構成されるので、一行が28(=4×7)個の閾値で構成され、Kディザマトリックス36は、2個のKディザパターン36aの繰り返しから構成されるので、一行が18(=9×2)の閾値で構成される。このように、各ディザパターン30a、32a、34a、36aは、一行を構成する閾値の個数が互いに異なるが、Cディザマトリックス30とYディザマトリックス34とは、一行を構成する閾値の数が28個となるように構成され、Mディザマトリックス32とKディザマトリックス34とは、一行を構成する閾値の数が18個となるように構成されている。
すなわち、Cディザマトリックス30とYディザマトリックス34とは、一行を構成する閾値の個数が、Cディザパターン30aとYディザパターン34aの一行を構成する閾値の個数の最小公倍数となるように構成されている。また、Mディザマトリックス32とKディザマトリックス36とは、一行を構成する閾値の個数が、Mディザパターン32aとKディザパターン36aの一行を構成する閾値の個数の最小公倍数となるように構成されている。本第2実施例においては、第1実施例において説明した複数種類のディザマトリックス20,22,24,26に代えて、Cディザマトリックス30、Mディザマトリックス32、Yディザマトリックス34、Kディザマトリックス36が、ディザマトリックスメモリ14bに格納されているものとして説明する。
図9を参照して、本第2実施例において、ディザデータメモリ14cに記憶されるデータの構成について説明する。図9は、ディザデータメモリ14cに記憶されるデータの構成を模式的に示す図である。図9に示すように、ディザデータメモリ14cには、第1実施例で説明したのと同様に、各ディザマトリックス30,32,34,36の最先頭アドレスと、周期と、行数とが記憶されている。
図9に示すように、上述した第1実施例では、周期が全て36であったのに対し、本第2実施例では、周期(各ディザマトリックス30,32,34,36の一行を構成する閾値の個数に相当)が、18または28のいずれかである点が異なる。なお、短い周期の値を、以下「周期S」と称し、長い周期の値を、以下、「周期L」と称する。なお、本第2実施例では、18が周囲Sに相当し、28が周期Lに相当する。
図10を参照して、本第2実施例における1ライン分の二値化処理(S32)について説明する。図10は、本第2実施例における1ライン分の二値化処理を示すフローチャートであり、図6に相当するフローチャートである。なお、図10を参照して説明する1ライン分の二値化処理(S32)は、第1実施例の1ライン分の二値化処理(S22、図5参照)に代えて実行される処理である。したがって、第1実施例と同様に、1ライン分の二値化処理(S32)の開始時には、基準アドレスメモリ13d,13e,13f,13gには、読出対象である一行における先頭の閾値のアドレスに相当する基準アドレスが格納されている。
本第2実施例における1ライン分の二値化処理では、まず、変数xを「0」とする(S322)。変数xは、入力画像データの一ライン分のデータのうち、先頭から何番目の画素が二値化処理対象であるかを示す変数である。次に、変数Nextの値を「周期L」とする(S324)。なお、変数Nextは、カウンタ13cの値が初期化(本第2実施例では0)されてから、Cディザマトリックス30およびYディザマトリックス34(共に周期Lを有する)から一行分の閾値が読み出されるまでに、カウンタ13cが更新される回数に相当する更新回数値を示す値である。変数Nextは、RAM13に設けられた所定領域に格納される。本第2実施例において、RAM13が請求項の更新回数記憶手段に相当する。
次に、カウンタ13cの値を初期値「0」にする(S326)。カウンタ13cの値は、後述する1画素分の二値化処理(S230)で用いられる値であって、各ディザマトリックス30,32,34,36の一行における読み出し位置を特定する値である。このカウンタ13cの値が初期値「0」である場合、後述する1画素分の二値化処理(S230)において、Mディザマトリックス32,Kディザマトリックス36(共に周期Sを有する)の一行における先頭の閾値が読み出される。また、カウンタ13cの値は、複数のディザマトリックス30,32,34,36のそれぞれから閾値が読み出されることにより、後述するS334の処理において、「1」カウントアップされる。
次に、変数xが入力画像データの1ラインを構成する画素数よりも小さいか否かを判断する(S328)。変数xが入力画像データの1ラインを構成する画素数よりも小さい場合(S328:Yes)、入力画像データの1ライン分のデータを構成する先頭の画素からx番目の画素に含まれるCMYKの各色成分値を読み込み、C値メモリ13h、M値メモリ13i、Y値メモリ13j、K値メモリ13kに、それぞれ書き込む(S330)。そしてC値メモリ13h、M値メモリ13i、Y値メモリ13j、K値メモリ13kに書き込まれた値をそれぞれ二値化する1画素分の二値化処理を実行する(S230)。なお、1画素分の二値化処理(S230)は、第1実施例と同様の処理が行われるものであるため、同一の符号を付して図示および詳細な説明は省略する。
次に、変数xに「1」を加算し(S332)、カウンタ13cを「1」カウントアップする(S334)。すなわち、1画素分の二値化処理(S230)において、各ディザマトリックス30,32,34,36のそれぞれから閾値が読み出されると、カウンタが1カウントアップされるのである。次に、カウンタ13cの値が周期S(本第2実施例では18)よりも小さいか否かを判断する(S336)。後述するように、カウンタ13cの値は、基準アドレスから何番目の位置にある閾値を読み出すべきであるかを示す値に相当することから、カウンタ13cと周期Sとを比較することにより、Mディザマトリックス32、Kディザマトリックス36(共に周期Sを有する)から、一行分の閾値が読み出されたか否か(すなわち、一行の後尾の閾値が読み出されたか)を判断することができる。
次に、カウンタ13cの値が周期Sを判断する。カウンタ13cの値が周期Sよりも小さい場合(S336:Yes)、カウンタ13cの値が変数Nextよりも小さいか否かを判断する(S344)。カウンタ13cの値が変数Nextよりも小さい間は(S344:Yes)、S328に戻り処理を繰り返す。
ここで、図11を参照して、基準アドレス、カウンタ13cの値、および変数Nextの関係について説明する。図11は、Mディザマトリックス32(周期Sを有する)の一行およびCディザマトリックス30(周期Lを有する)の一行における基準アドレス、カウンタ13cの値、および変数Nextの関係を模式的に示す図である。なお、Yディザマトリックス34(周期Lを有する)の読出位置とカウンタ13cの値との関係は、Cディザマトリックス30とほぼ同様であり、Kディザマトリックス36(周期Sを有する)の読出位置とカウンタ13cの値との関係は、Mディザマトリックス32とほぼ同様であるので、これらについては図示を省略する。
図11(a)は、S334の処理の直後における状態を示す図である。基準アドレスおよび変数Nextを白抜きの三角で示し、基準アドレスにカウンタ13cの値を加算した加算結果のアドレスで特定される位置を塗りつぶした三角で示す。図11(a)に示すように、カウンタ13cの値は0から開始されるので、各ディザマトリックスの一行の先頭の閾値から読み出される。また閾値が読み出されるとカウンタ13cの値が1カウントアップされるので、読み出し位置が1つずつ順次移動する。そして、Mディザマトリックス32の一行分の閾値が読み出されると(すなわち、Mディザマトリックス32の一行の後尾の閾値が読み出されると)、カウンタ13cの値が周期S(本第2実施例では18)に等しくなる。
さて、図10に戻り説明する。カウンタ13cの値が周期Sに等しくなると(S336:No)、カウンタ13cの値を0とし(S338)、Cディザマトリックス30およびYディザマトリックス34(共に周期Lを有する)の基準アドレスに、周期Sを加算する(S340)。そして、変数Nextから、周期Sを減算する(S342)。
ここで、図11(b)を参照して説明する。図11(b)は、S342の処理の直後における状態を示す図である。図11(b)に示すように、Mディザマトリックス32(周期Sを有する)の基準アドレスは変更されず、且つカウンタ13cの値が0なので、Mディザマトリックス32の一行の先頭が読出位置とされる。一方、Cディザマトリックス30(周期Lを有する)の基準アドレスには、周期Sが加算されるので、一行の先頭の閾値よりも周期S分進んだ位置が読出開始位置とされる。また、変数Nextから周期Sが減算される。例えば、1ライン分の二値化処理(S32)の開始時、変数Nextの値は、周期Lとされるので、変数Nextの値は、(周期L−周期S)とされる(本第2実施例では10となる)。変数Nextは、カウンタ13cの値が「0」に初期化されてから、周期Lのディザマトリックス30,34から一行分の閾値が読み出されるまでに、カウンタ13cが更新される回数に相当する更新回数値を示す値である。したがって、カウンタ13cの値が「0」に初期化され(S338)、周期Lのディザマトリックス30,34の基準アドレスが更新されると、変数Nextから周期Sを減算して、変数Nextを更新するのである。
さて、図10に戻り説明する。次に、カウンタ13cの値が変数Nextよりも小さいか否かを判断する(S344)。カウンタ13cの値が変数Nextよりも小さい間は(S344:Yes)、S328の処理に戻り、処理を繰り返す。一方、カウンタ13cの値が変数Nextに等しくなると(S344:No)、Cディザマトリックス30およびYディザマトリックス34(共に周期Lを有する)の基準アドレスから、周期Lを減算する(S346)。そして、変数Nextに、周期Lを加算し(S348)、S328に戻る。そして、入力画像データの一ライン分のデータを構成する全ての画素について二値化処理がされると、変数xの値が入力画像データの一ライン分の画素数に等しくなるので(S328:No)、1ライン分の二値化処理を終了し、図5のS24の処理に戻る。
次に、図11(c),(d)を参照して説明する。図11(c)は、S346の処理の直前における状態を示す図であり、図11(d)は、S348の処理の直後における状態を示す図である。図11(c)に示すように、Cディザマトリックス30の一行分の閾値が読み出されると(すなわち、一行の後尾の閾値が読み出されると)、カウンタ13cの値が変数Next(図11(c)においては10)に等しくなる。
図11(c)に示すように、カウンタ13cの値が変数Nextに等しくなると、図11(d)に示すように、Cディザマトリックス30(周期Lを有する)のC基準アドレスから、周期Lが減算される。一方、Mディザマトリックス32(周期Sを有する)のM基準アドレスは変更されない。また、且つカウンタ13cの値が変数Nextに等しい(図11(d)においては10)ので、Mディザマトリックス32の一行の先頭から10番目の閾値が格納された位置が読出位置とされる。一方、C基準アドレスからは、周期Lが減算されるので、Cディザマトリックス30は、一行の後尾よりも周期L分だけ先頭側が読出位置とされる。よって、Cディザマトリックス30においても、再び一行の先端から閾値が読み出される。また、Cディザマトリックス30において、再び一行の先端から閾値が読み出されると、Cディザマトリックス30から一行分の閾値が読み出されるまでに、カウンタ13cが更新される回数に相当する更新回数値も変化することから、カウンタ13cの更新回数値を示す値である変数Nextに周期Lを加算して、変数Nextを更新する。
本第2実施例によれば、周期Sを有するディザマトリックス32,36から一行分の閾値が読み出されると(すなわち、一行における後尾の閾値が読み出されると)、カウンタ13cの値が初期値「0」に戻されるので、周期Sを有するディザマトリックス32,36の一行における先頭から再び閾値が読み出される。よって、周期Sを有するディザマトリックス32,36のそれぞれから所定の周期で閾値を読み出すことができる。
一方で、カウンタ13cの値が初期値「0」に戻されると、周期Lを有するディザマトリックス30,34の基準アドレスに周期Sが加算される。その結果、周期Lのディザマトリックス30,34の一行における先頭よりも「周期S」個目の閾値の位置が読出位置とされる。すなわち、カウンタ13cの値が初期値「0」に戻されても、周期Lのディザマトリックスの読出位置は、一行の先頭には戻されない(図11(b)参照)。
よって、周期Sのディザマトリックス32,36および周期Lのディザマトリックス30,34のそれぞれにカウンタ13cを設けなくても、各ディザマトリックス30,32,34,36のそれぞれから閾値を読み出すことができる。すなわち、周期Sのディザマトリックス32,35および周期Lのディザマトリックス30,36のカウンタ13cを共通化することができるので、カウンタの数が減少し、カウンタの制御に要する処理数を全体として減らすことができる。その結果、二値化処理を高速化できる。特に、処理対象の画素数が多い場合には、一回(一画素分)の二値化処理がわずかでも高速化することにより、N値化処理全体としてみると、処理速度の大きな向上に繋がる。
また、周期Lのディザマトリックス30,34から一行分の閾値が読み出されると、周期Lのディザマトリックス30,34の基準アドレスから周期Lが減算されるので、周期Lのディザマトリックス30,34の先頭から再び閾値が読み出される。よって、周期Lのディザマトリックス30,34のそれぞれから所定の周期で閾値を読み出すことができる。すなわち、周期Sのディザマトリックス32,36および周期Lのディザマトリックス30,34のカウンタを共通化することができるので、二値化処理を高速化できる。
また、変数Next(更新回数値)とカウンタ13cの値とに基づいて、周期Lのディザマトリック30,34スから一行分の閾値が読み出されたかを判断することができるので、周期Lのディザマトリックス30,34から一行分の閾値が読み出されか否かを判断するために、別途カウンタを設ける必要がない。よって、カウンタの制御に必要な処理数が増加して二値化処理が低速化することを抑制できる。
また、周期Lのディザマトリックス30,34の基準アドレスに周期Sが加算されると、変数Next(更新回数値)から周期Sが減算され、周期Lのディザマトリックス30,34の基準アドレスから周期Lが減算されると、変数Next(更新回数値)に周期Lが加算されるので、簡単な処理で更新回数値を算出することができる。よって、周期Lのディザマトリックス30,34から一行分の閾値が読み出されか否かを判断するために、別途カウンタを設ける必要がないので、二値化処理が低速化することを抑制できる。
以上、実施例に基づき本発明を説明したが、本発明は上述した実施例に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変更が可能であることは容易に推察できるものである。
例えば、第1実施例では、4種類のディザマトリックス20,22,24,26の一行を構成する閾値の個数が全て等しく、カウンタ13cを1つのみ用いる場合について説明したが、少なくとも2種類のディザマトリックスの一行を構成する閾値の個数が等しくされているものであればよい。このようにすれば、少なくとも2種類のディザマトリックスについては、カウンタを共通化できるので、複数種類のディザマトリックスの全てに対しカウンタを設ける場合に比較して、二値化処理を高速化できる。
また、第1実施例および第2実施例では、ディザマトリックスを用いた二値化処理がされていたが、三値化処理および四値化処理する場合にも、本発明は適用できる。
また、第2実施例では、4種類のディザマトリックス30,32,34,36のうち、2つのディザマトリックス30,34の一行を構成する閾値の個数が等しくされ、2つのディザマトリックス32,36の一行を構成する閾値の個数が等しくされていたが、3つの3つのディザマトリックスの一行を構成する閾値の個数が等しく、1つのディザマトリックスの一行を構成する閾値の個数がそれと異なるものであってもよい。