以下では、本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って説明する。
A.実施例の概要:
B.装置構成:
C.画像印刷処理の概要:
C−1.多値化結果値生成処理の概要:
C−2.ドット形成有無決定処理の概要:
C−3.ディザ法の概要:
C−4.分類番号を決定するための考え方:
C−5.多値化テーブルの設定方法:
C−6.変換テーブルの設定方法:
C−7.順序値マトリックスの設定方法:
C−8.多値化結果値からドット形成有無を適切に決定可能な原理:
C−9.画素群の位置から分類番号を決定する方法:
D.変形例:
D−1.第1の変形例:
D−2.第2の変形例:
D−3.第3の変形例:
D−4.第4の変形例:
D−5.第5の変形例:
A.実施例の概要 :
実施例の詳細な説明に入る前に、図1を参照しながら、実施例の概要について説明しておく。図1は、印刷システムを例にとって、本発明の概要を説明するための説明図である。本印刷システムは、画像処理装置としてのコンピュータ10と、画像出力装置としてのプリンタ20等から構成されており、コンピュータ10に所定のプログラムがロードされて実行されると、コンピュータ10およびプリンタ20などが全体として、一体の画像出力システムとして機能する。プリンタ20は、印刷媒体上にドットを形成することによって画像を印刷する。コンピュータ10は、印刷しようとする画像の画像データに所定の画像処理を施すことによって、プリンタ20が画素毎にドットの形成を制御するためのデータを生成して、該プリンタ20に供給する。
一般的な印刷システムでは、次のようにして画像を印刷する。先ず、コンピュータで所定の画像処理を施すことにより、画像データを、画素毎にドット形成の有無を表すデータに変換する。次いで、得られたデータをプリンタに供給し、プリンタでは供給されたデータに従ってドットを形成することにより画像を印刷している。ここで、印刷しようとする画像の画素数が多くなると、それに伴って、画像処理に要する時間が増加して、画像を迅速に印刷することが困難となる。また、画素数が多くなるにつれて、画素毎にドット形成の有無を表すデータのデータ量が増加するので、コンピュータからプリンタにデータを出力するために要する時間が長くなり、それだけ印刷に要する時間が増加してしまう。
こうした点に鑑みて、図1に例示した印刷システムでは、次のようにして画像を印刷する。先ず、コンピュータ10の画素群階調値決定モジュールは、画像を構成する画素を、所定の複数個ずつまとめて画素群を生成する。次いで、画像データを受け取ると、各画素群について、画素群を代表する階調値たる画素群階調値を決定した後、多値化モジュールに供給する。多値化モジュールでは、供給された画素群階調値を多値化して多値化結果値に変換する。対応関係記憶モジュールには、画素群階調値と多値化結果値とが画素群毎に関連づけられた対応関係が記憶されており、多値化モジュールはかかる対応関係を参照することによって、画素群階調値を迅速に多値化することが可能である。こうして画素群毎に得られた多値化結果値は制御データ出力モジュールに供給されて、制御データとしてプリンタ20に出力される。
プリンタ20に設けられたドット形成有無決定モジュールは、制御データとして供給されてきた各画素群についての多値化結果値を受け取ると、画素群内の各画素についてドット形成の有無を決定する。画素群毎に供給された多値化結果値から各画素についてのドット形成有無を決定する方法には、後述するような種々の方法、例えば、多値化結果値を画素群内に形成されるドット個数を表すデータに変換した後、それらドットが形成される画素位置を決定する方法や、あるいは、多値化結果値と、画素群内でドットが形成される画素位置とを画素群毎に関連づけて予め記憶しておき、多値化結果値から直ちにドットが形成される画素位置を決定する方法などを用いることができる。このようにして画素群内の各画素についてドット形成有無を示すデータが得られたら、このデータはドット形成モジュールに供給され、ドット形成モジュールがドットを形成することによって画像が印刷される。
このような印刷システムでは、対応関係を参照するという極めて簡単な処理により、画素群階調値を多値化結果値に変換することができる。このため、高度な処理能力を有さない機器においても、迅速に多値化を行うことが可能である。また、画素毎にドット形成の有無を表すデータに比べれば、画素群毎の多値化結果値は遙かに小さなデータ量とすることができる。従って、コンピュータ10から画素毎にドット形成の有無を表したデータをプリンタ20に出力する代わりに、画素毎の多値化結果値を出力してやれば、迅速に制御データを出力することが可能である。
また、多値化に際して参照される対応関係には、画素群毎に画素群階調値と多値化結果値とが関連づけられているが、各画素群について設定されている多値化結果値の個数は、画素群が取り得るドット発生状態の状態数よりも小さな個数に設定されている。ここで、画素群のドット発生状態とは、画素群内では全画素が同じ画素群階調値を有するものとして、画素群内の各画素にディザマトリックスを適用することによって得られたドットの発生状態を言う。周知のようにディザマトリックスには画素毎に閾値が設定されており、画素群階調値と画素毎に設定されている閾値とを比較することにより、画素群内の各画素についてのドット形成有無を決定して、画素群内でのドット発生状態を決定することができる。また、画素群が取り得るドット発生状態の状態数とは、画素群についてのドット発生状態を決定しながら、画素群階調値を最低階調値から最高階調値まで変化させたときに得られるドット発生状態の個数を言う。このように、画素群に設定されている多値化結果値の個数が抑制された対応関係を参照しながら、画素群階調値を多値化してやれば、得られる多値化結果値の種類を少なくすることができる。多値化結果値の種類が少なくなれば、画素群階調値を多値化する処理も迅速に実行することができる。また、多値化結果値の種類が少なくなれば、多値化結果値を表現するためのデータ量も減少する傾向があるので、コンピュータ10で生成した制御データを、より一層迅速にプリンタ20に出力することが可能となる。
加えて、プリンタ20が、表現可能な階調値の異なる3種類のドットを形成可能なプリンタである場合には、各画素群で多値化結果値の取り得る個数を、次の範囲としておけばよい。すなわち、画素群に含まれる画素数をN個とすると、多値化結果値の取り得る個数が、N+2個から2N個の範囲に設定された対応関係としておけばよい。また、プリンタ20が、表現可能な階調値の異なる2種類のドットを形成可能なプリンタである場合には、多値化結果値の取り得る個数をN+1個以下に設定された対応関係としておけばよい。このような対応関係を参照して、画素群階調値を多値化結果値に変換してやれば、良好な画質を保ったまま、コンピュータ10からプリンタ20に制御データを迅速に出力することが可能である。以下では、こうした印刷システムを例に用いることにより、本発明の実施例について詳細に説明する。
B.装置構成 :
図2は、本実施例の画像処理装置としてのコンピュータ100の構成を示す説明図である。コンピュータ100は、CPU102を中心に、ROM104やRAM106などが、バス116で互いに接続して構成された周知のコンピュータである。
コンピュータ100には、フレキシブルディスク124やコンパクトディスク126等のデータを読み込むためのディスクコントローラDDC109や、周辺機器とデータの授受を行うための周辺機器インターフェースPIF108、CRT114を駆動するためのビデオインターフェースVIF112等が接続されている。PIF108には、後述するカラープリンタ200や、ハードディスク118等が接続されている。また、デジタルカメラ120やカラースキャナ122等をPIF108に接続すれば、デジタルカメラ120やカラースキャナ122で取り込んだ画像を印刷することも可能である。また、ネットワークインターフェースカードNIC110を装着すれば、コンピュータ100を通信回線300に接続して、通信回線に接続された記憶装置310に記憶されているデータを取得することもできる。
図3は、本実施例のカラープリンタ200の概略構成を示す説明図である。カラープリンタ200はシアン,マゼンタ,イエロ,ブラックの4色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら4色のインクに加えて、染料または顔料濃度の低いシアン(淡シアン)インクと、染料または顔料濃度の低いマゼンタ(淡マゼンタ)インクとを含めた合計6色のインクドットを形成可能なインクジェットプリンタを用いることもできる。尚、以下では場合によって、シアンインク,マゼンタインク,イエロインク,ブラックインク,淡シアンインク,淡マゼンタインクのそれぞれを、Cインク,Mインク,Yインク,Kインク,LCインク,LMインクと略称することがあるものとする。
カラープリンタ200は、図示するように、キャリッジ240に搭載された印字ヘッド241を駆動してインクの吐出およびドット形成を行う機構と、このキャリッジ240をキャリッジモータ230によってプラテン236の軸方向に往復動させる機構と、紙送りモータ235によって印刷用紙Pを搬送する機構と、ドットの形成やキャリッジ240の移動および印刷用紙の搬送を制御する制御回路260などから構成されている。
キャリッジ240には、Kインクを収納するインクカートリッジ242と、Cインク,Mインク,Yインクの各種インクを収納するインクカートリッジ243とが装着されている。インクカートリッジ242,243をキャリッジ240に装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド241の下面に設けられた各色毎のインク吐出用ヘッド244ないし247に供給される。
図4は、インク吐出用ヘッド244ないし247におけるインクジェットノズルNzの配列を示す説明図である。図示するように、インク吐出用ヘッドの底面には、C,M,Y,Kの各色のインクを吐出する4組のノズル列が形成されており、1組のノズル列あたり48個のノズルNzが、一定のノズルピッチkで配列されている。
制御回路260は、CPUや、ROM、RAM、PIF(周辺機器インターフェース)等がバスで相互に接続されて構成されている。制御回路260は、キャリッジモータ230および紙送りモータ235の動作を制御することによってキャリッジ240の主走査動作および副走査動作を制御するとともに、コンピュータ100から供給される印刷データに基づいて、各ノズルから適切なタイミングでインク滴を吐出する制御を行う。こうして、制御回路260の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ200はカラー画像を印刷することができる。
また、本実施例のカラープリンタ200は、吐出するインク滴の大きさを制御することにより、インクドットの大きさを制御することが可能である。以下、カラープリンタ200が大きさの異なるインクドットを形成する方法について説明するが、その準備として、先ず、各色インクを吐出するノズルの内部構造について説明する。
図5(a)は、インクを吐出するノズルの内部構造を示した説明図である。各色のインク吐出用ヘッド244ないし247には、このようなノズルが複数設けられている。図示するように、各ノズルにはインク通路255と、インク室256と、インク室の上にピエゾ素子PEとが設けられている。キャリッジ240にインクカートリッジ242,243を装着すると、カートリッジ内のインクがインクギャラリ257を経由してインク室256に供給される。ピエゾ素子PEは、周知のように電圧を印加すると結晶構造が歪んで極めて高速に電気−機械エネルギの変換を行う素子である。本実施例では、ピエゾ素子PEの両端に設けられた電極間に所定波形の電圧を印加することで、インク室256の側壁を変形させる。その結果、インク室256の容積が減少し、容積の減少分に相当するインクがインク滴IpとなってノズルNzから吐出される。このインク滴Ipがプラテン236に装着された印刷用紙Pに染み込むことで、印刷用紙上にインクドットが形成される。
図5(b)は、ピエゾ素子PEに印加する電圧波形を制御することで、吐出するインク滴の大きさを変更する原理を示した説明図である。ノズルからインク滴Ipを吐出するためには、ピエゾ素子PEに府の電圧を印加してインクギャラリ257からインク室256内に一旦インクを吸入し、その後、ピエゾ素子PEに正電圧を印加してインク室容積を減少させて、インク滴Ipを吐出させる。ここで、インクの吸引速度が適切であればインク室容積の変化量に相当するインクが吸入されるが、吸引速度が速すぎると、インクギャラリ257とインク室256との間には通路抵抗があるためにインクギャラリ257からのインクの流入が間に合わなくなる。その結果、インク通路255のインクがインク室内に逆流して、ノズル付近のインク界面が大きく後退した状態となる。図5(b)に実践で示した電圧波形aは、適正な速度でインクを吸引する波形を示し、破線で示した電圧波形bは適切速度より大きな速度で吸引する波形の一例を示している。
十分なインクがインク室256内に供給された状態で、ピエゾ素子PEに正電圧を印加すると、インク室256の容積減少に相当する体積のインク滴IpがノズルNzから吐出される。これに対して、インクの供給量が不足してインク界面が大きく後退した状態で正電圧を印加すると、吐出されるインク滴は小さなインク滴となる。このように、本実施例のプリンタ200では、インク滴の吐出前に印加する府の電圧波形を制御してインクの吸引速度を変更することで、吐出するインク滴の大きさを制御し、大ドット、中ドット、小ドットの3種類のインクドットを形成することが可能となっている。
もちろん、3種類に限らずより多種類のドットを形成することも可能である。更には、微細なインク滴を一度に複数吐出して、吐出するインク滴の数を制御するといった方法を用いて、印刷用紙上に形成されるインクドットの大きさを制御してもよい。このようにしてインクドットの大きさを制御すれば、印刷しようとする画像の階調値に応じて異なる大きさのインクドットを使い分けてやることで、より高画質の画像を印刷することも可能となる。
尚、各色のインク吐出ヘッドからインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインク滴を吐出する方式や、インク通路に配置したヒータでインク通路内に泡(バブル)を発生させてインク滴を吐出する方法などを用いることができる。また、インク滴を吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタを使用することも可能である。
以上のようなハードウェア構成を有するカラープリンタ200は、キャリッジモータ230を駆動することによって、各色のインク吐出用ヘッド244ないし247を印刷用紙Pに対して主走査方向に移動させ、また紙送りモータ235を駆動することによって、印刷用紙Pを副走査方向に移動させる。制御回路260は、キャリッジ240の主走査および副走査の動きに同期させながら、適切なタイミングでノズルを駆動してインク滴を吐出することによって、カラープリンタ200は印刷用紙上にカラー画像を印刷している。
C.画像印刷処理の概要 :
以下では、上記のようなコンピュータ100およびカラープリンタ200が、画像を印刷するために、それぞれの内部で行われる画像処理(画像印刷処理)について説明する。ここでは、理解の便宜を図るため、初めに画像印刷処理の概要について説明し、次に、こうした画像印刷処理を行うことで、画質を低下させることなく画像を迅速に印刷することが可能な理由について説明する。
尚、以下では、画像印刷処理の前半部分はコンピュータ100で実施され、後半部分はカラープリンタ200で実施されるものとして説明するが、コンピュータ100が行う処理をカラープリンタ200の内部で実施したり、あるいはデジタルカメラ120など、画像データを生成する機器の内部で実施することも可能である。すなわち、本実施例の画像印刷処理によれば、後ほど詳細に説明するように、前半部分の処理をたいへん簡素なものとすることができるので、高い処理能力を有していないCPUを用いた場合でも迅速に実施することが可能である。このため、カラープリンタ200やデジタルカメラなどに画像印刷処理の前半部分を組み込んだ場合でも、十分に実用的な印刷システムを構成することができる。
図6は、本実施例の画像印刷処理の全体的な流れを示すフローチャートである。図示されているように、画像印刷処理を開始すると先ず初めに、コンピュータ100が画像データの読み込みを開始する(ステップS100)。ここでは、画像データはRGBカラー画像データであるものとして説明するが、カラー画像データに限らず、モノクロ画像データについても同様に適用することができる。また、カラープリンタに限らず単色プリンタについても同様に適用することが可能である。
カラー画像データの読み込みに続いて、色変換処理を行う(ステップS102)。色変換処理とは、R,G,Bの階調値の組合せによって表現されているRGBカラー画像データを、印刷のために使用されるインク各色についての階調値の組合せによって表現された画像データに変換する処理である。前述したように、カラープリンタ200はC,M,Y,Kの4色のインクを用いて画像を印刷している。そこで、色変換処理ではRGB各色によって表現された画像データを、C,M,Y,Kの各色の階調値によって表現されたデータに変換する。色変換処理は、色変換テーブル(LUT)と呼ばれる3次元の数表を参照することで行う。LUTには、RGBカラー画像データに対して、色変換によって得られるC,M,Y,K各色の階調値が予め記憶されている。ステップS102の処理では、このLUTを参照することにより、RGBカラー画像データをC,M,Y,K各色の画像データに迅速に色変換することが可能となっている。
色変換処理を終了すると、解像度変換処理を開始する(ステップS104)。解像度変換処理とは、画像データの解像度を、プリンタ200が画像を印刷する解像度(印刷解像度)に変換する処理である。画像データの解像度が印刷解像度よりも低い場合は、補間演算を行って画素間に新たな画像データを生成し、逆に画像データの解像度が印刷解像度よりも高い場合には、一定の割合でデータを間引くことによって、画像データの解像度を印刷解像度に一致させる処理を行う。
以上のようにして解像度を印刷解像度に変換したら、コンピュータ100は、多値化結果値生成処理を開始する(ステップS106)。多値化結果値生成処理の詳細な内容は後ほど詳しく説明することとして、ここでは概要のみを説明する。多値化結果値生成処理では、隣接する画素を所定個数ずつ画素群としてまとめることにより、1つの画像を複数の画素群に分割する。画素群としてまとめられ画素数は、必ずしも全ての画素群が同数である必要はなく、例えば、複数の画素数を規則的に切り換えたり、あるいは画像中での位置に応じて画素群にまとめられる画素数を切り換えることも可能であるが、ここでは理解の便宜から、最も単純な場合として全画素群が同数の画素を有するものとして説明する。こうして複数の画素を画素群にまとめて、各画素群を代表する階調値である画素群階調値を求めた後、画素群階調値の多値化を行う。その結果、画素群毎の画素群階調値が多値化結果値に変換されることになる。
そして、画素群毎に得られた多値化結果値を、制御データとしてカラープリンタ200に向かって出力する。このように画素群階調値を、画素群毎に多値化結果値に変換しておけば、カラープリンタ200に出力すべきデータ量を大きく低減することができる。また、後述するように、画素群階調値から多値化結果値への変換は、迅速に行うことができることから、データ量が小さくなることと相まって、極めて迅速に多値化結果値をカラープリンタ200に出力することが可能となる。
尚、複数の画素をひとまとまりとして扱いながら階調値を多値化する手法としては、いわゆる濃度パターン法と呼ばれる手法が知られている。しかし、一般的な濃度パターン法とは異なり、本実施例の多値化結果値生成処理では、画素群毎に固有の値に多値化されている。すなわち、同じ画素群階調値であっても多値化される値(多値化結果値)は画素群毎に定められており、画素群によって異なる値に多値化される場合も多くなっている。詳細には後述するが、このような多値化を行っているために、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクと呼ばれるディザマトリックスを用いることで実現されるような、ドットが良好に分散した高画質な画像を印刷することが可能となる。また、画素群が大きくなるほど画質が低下するといった、通常の濃度パターン法に多く見られる弊害が生じることもない。
加えて、本実施例の多値化結果値生成処理では、多値化の結果として取り得る状態数が、比較的少ない値に設定されている。このため、多値化結果値を一層迅速に生成することが可能となり、生成した多値化結果値のデータ量も一層小さなものとすることができる。このような多値化結果値を制御データとして出力することで、カラープリンタ200にきわめて効率よく制御データを出力することが可能となっている。こうしたことが実現している本実施例の多値化結果値生成処理については、後ほど詳しく説明する。
カラープリンタ200の制御回路260に内蔵されたCPUは、コンピュータ100から画素群毎に供給された多値化結果値のデータを受け取ると、ドット形成有無決定処理を開始する(ステップS108)。上述したように、多値化結果値は、画素群階調値を多値化して得られた値であり、画素群内でいずれの画素にドットを形成すればよいかを示した値ではない。そこで、本実施例のドット形成有無決定処理では、後述する方法を用いることにより、画素群毎に得られた多値化結果値から、その画素群内でドットを形成する画素位置を決定する。
尚、いわゆる濃度パターン法においても、画素群の多値化結果値からドットを形成する画素位置を決定しているが、前述したように本実施例の多値化結果値は、濃度パターン法とは異なって画素群毎に固有の値に多値化されているので、濃度パターン法をそのまま適用することはできない。そこで、後述する方法を用いて、画素群毎に多値化結果値からドットを形成する画素位置を決定する。その結果、ブルーノイズマスクあるいはグリーンノイズマスクと呼ばれるディザマトリックスを用いることで実現されるような、ドットが良好に分散した高画質な画像を印刷することが可能となる。ドット形成有無決定処理の詳細な内容、および、かかる処理を適用してドット形成の有無を決定することで、こうした特性が得られる理由については、後ほど詳しく説明する。
以上のようにして、ドットを形成すべき画素位置を決定したら、決定した画素位置にドットを形成する処理を行う(ステップS110)。すなわち、図3を用いて説明したように、キャリッジ240の主走査および副走査を繰り返しながらインク吐出用ヘッドを駆動してインク滴を吐出することにより、印刷用紙上にインクのドットを形成する。こうしてドットを形成することにより、画像データに対応した画像が印刷されることになる。
C−1.多値化結果値生成処理の概要 :
図7は、上述した本実施例の画像印刷処理で行われる多値化結果値生成処理の流れを示すフローチャートである。ここでは、多値化結果値生成処理はコンピュータ100で実施されるものとして説明するが、後述するように、多値化結果値生成処理は極めて簡素な処理とすることができるから、カラープリンタ200あるいはデジタルカメラ120内で実施することも可能である。以下、フローチャートに従って説明する。
本実施例の多値化結果値生成処理を開始すると、先ず初めに、互いに隣接する所定個数の画素をまとめて画素群を生成する(ステップS200)。ここでは、主走査方向に4画素分、副走査方向に2画素分の合計8つの画素を画素群にまとめるものとする。尚、画素群としてまとめる画素は、このように矩形状に縦横の位置が揃った画素である必要はなく、互いに隣接し且つ所定の位置関係にあればどのような画素を画素群としてまとめても良い。
次いで、画素群階調値と、画素群の分類番号とを決定する(ステップS202)。画素群階調値とは、画素群を代表する階調値であり、次のようにして簡単に求めることができる。例えば、画素群内の各画素に割り当てられた画像データの平均値を求めて画素群階調値とすることができる。あるいは、画素群の中で最も多くの画素に割り当てられた画像データ、更には、画素群内で特定の位置にある画素の画像データを画素群階調値とすることも可能である。
また、画素群の分類番号は、次のようにして極めて簡便に決定することができる。図8は、画素群の分類番号を決定する方法を示した説明図である。図8(a)は、画像中で8つの画素をまとめて生成された1つの画素群を表している。以下では、この画素群についての分類番号を決定する方法について説明する。尚、図8(a)に示すような、分類番号を決定するために着目している画素群を、着目画素群と呼ぶことにする。
今、画像の一番左上隅を原点に取って、原点からの主走査方向および副走査方向への画素数によって画素位置を表すものとする。また、画素群の位置は、画素群の左上隅にある画素の画素位置によって表すものとする。図8(a)では、着目画素群の位置を示す画素に黒丸を付して表示している。この画素の画素位置が(X,Y)であったとする。着目画素群の分類番号は、X,Yを2進数表示して、所定のビットに記憶されているデータを読み出すだけで、極めて容易に決定することができる。例えば、図8(b)に示すように、着目画素群の位置を表すX,Yがそれぞれ10ビットデータであったとする。そして、Xの最上位の4ビット目から8ビット目までのデータを読み出して得られた値をNとし、Yの最上位の4ビット目から8ビット目までのデータを読み出して得られた値をMとする。すると、本実施例の場合は、
N+(M−1)×32 …(1)
を算出することによって、画素群の分類番号を簡単に決定することができる。このようにして画素群の分類番号を決定可能な理由については後述する。
こうして、画素群の分類番号と画素群階調値とを決定したら、後述する多値化テーブルを参照することによって、画素群階調値を多値化する(ステップS204)。図9は、多値化に際して参照される多値化テーブルを概念的に示した説明図である。図示されているように、多値化テーブルには、画素群の分類番号毎に、画素群階調値に対する多値化結果値が対応づけて記憶されており、多値化結果値は、画素群階調値が増加するに従って段階的に増加していく。
尚、本実施例の多値化テーブルに設定されている多値化結果値は、いずれの画素群についても「0」〜「15」の階調値となっている。これは、多値化結果値を4ビットのデータで表現することが可能なように、各画素群が取り得る多値化結果値を、階調値0〜15の16種類(もしくは16種類以下)に抑制したためである。通常は、多値化の結果として取り得る状態数を少なくすると画質に悪影響を与えてしまうが、本実施例の多値化テーブルでは、画質への悪影響が最小限に抑えられるように配慮しながら、多値化結果値の取り得る範囲が抑制されている。このような多値化テーブルの設定方法、および、画質への悪影響を最小限に抑制しながら、多値化結果値の取り得る範囲を抑制する方法については後述する。
図10は、画素群階調値が増加するに従って多値化結果値が段階的に増加していく様子を例示した説明図である。図では、横軸に画素群階調値を取り、縦軸の多値化結果値を取った折れ線グラフを用いて、画素群階調値に対する多値化結果値を表示している。尚、図中では、異なる分類番号N1〜N5を有する5つの画素群についての多値化結果を示しているが、これら画素群の折れ線が重なって判別し難くなることを避けるために、多値化結果値の原点位置を縦軸方向に少しずつ、ずらして表示している。
一例として、図中に太い実線で示した分類番号N1番の画素群について説明すると、画素群階調値が0〜12の範囲では、多値化結果値は「0」であるが、画素群階調値が13〜31の範囲では多値化結果値は「1」に増加する。次いで、画素群階調値が32〜62の範囲では多値化結果値は「2」に増加し、画素群階調値が63〜66の範囲では多値化結果値は「3」に増加する。このように、画素群階調値が増加するに従って、多値化結果値も段階的に増加していき、最終的には、多値化結果値は「15」まで増加する。結局、階調値0〜255の範囲を取り得る画素群階調値を、階調値0〜15までの16段階に多値化(言わば、16値化)していることになる。
同様に、図中で太い破線で示した分類番号N2番の画素群については、画素群階調値が「19」に達すると多値化結果値が「1」に増加し、画素群階調値が「24」に達すると多値化結果値が「2」に増加する。更に、画素群階調値が増加して、「48」、「52」、「78」に達すると、多値化結果値が「3」、「4」、「5」と増加して行く。結局、分類番号N2番の画素群についても、階調値0〜255の範囲を取り得る画素群階調値を、階調値0〜15までの16段階に多値化(言わば、16値化)している。このように本実施例の多値化結果値生成処理では、すべての画素群について、階調値0〜255の範囲を取り得る画素群階調値を、階調値0〜15までの16段階に多値化する。
また、図10に示されているように、多値化結果値が切り換わる画素群階調値は、画素群の分類番号に応じて異なっている。例えば、多値化結果値が「0」から「1」に切り換わる画素群階調値は、分類番号N1番の画素群については階調値13であるのに対し、分類番号N2番の画素群については階調値19となっている。また、多値化結果値が「1」から「2」に切り換わる画素群階調値についても、分類番号N1番の画素群については階調値32であるのに対し、分類番号N2番の画素群については階調値24となっている。このように、本実施例の多値化テーブルに設定されている画素群階調値と多値化結果値との対応関係は、多値化結果値が切り換わる画素群階調値が、画素群の分類番号に応じて異なるような対応関係となっている。こうしたことが可能となるのは、本実施例の対応関係が画素群毎に設定されているためである。そして、画素群毎に対応関係が設定されているために、多値化結果値の取り得る範囲を抑制しても、画質が悪化することをより効果的に抑制することが可能となっている。この点については、後ほど詳しく説明する。
図7に示した多値化結果値生成処理のステップS204では、このような対応関係が設定された多値化テーブルを参照することにより、画素群階調値を画素群毎の多値化結果値に変換する処理を行う。
以上のようにして、複数の画素を画素群にまとめて、その画素群の多値化結果値を生成したら、全画素について処理を終了したか否かを判断する(図7のステップS206)。そして、未処理の画素が残っている場合は(ステップS206:no)、ステップS200に戻って新たな画素群を生成し、後述する一連の処理を行うことによって、その画素群についての多値化結果値を生成する。こうした操作を繰り返し、全画素についての処理を終了したと判断されたら(ステップS206:yes)、各画素群について得られた多値化結果値をカラープリンタ200に出力した後、図7の多値化結果値生成処理を終了する。
このように、画素群毎に多値化結果値を出力してやれば、画素毎にドット形成の有無を表すデータを出力する場合よりも、カラープリンタ200に供給すべきデータ量を大幅に減少させることができる。以下では、この点について説明する。
本実施例では、大ドット、中ドット、小ドットの3種類のドットを形成可能としているから、ドットを形成しない場合も含めると、画素毎に4つの状態を取り得ることになり、従って、ドット形成の有無を表すためには1画素あたり2ビットのデータ量が必要となる。また、本実施例では、1つの画素群は8つの画素で構成されているものとしているから、画素毎にドット形成の有無を表そうとすると、画素群あたり16ビット(=2ビット×8画素)のデータ量が必要となる。
一方、図7に示した多値化結果値生成処理では、いずれの画素群についても、多値化結果値の取り得る値は、「0」〜「15」の16種類となっている(図9、図10を参照のこと)。従って、画素群の多値化結果値であれば、1画素群あたり4ビットのデータ量で表現することが可能である。上述したように、画素毎にドット形成の有無を表す場合には画素群あたり16ビットのデータ量が必要となることから、本実施例の多値化結果値生成処理によれば、カラープリンタ200に出力すべきデータ量を1/4に減少させていることになる。このため、カラープリンタ200に迅速にデータを出力することができ、延いては画像を迅速に印刷することが可能となっている。
カラープリンタ200は、こうしてコンピュータ100から多値化結果値を受け取ると、以下に説明するドット形成有無決定処理を行うことにより、画素群内の各画素についてドット形成の有無を決定する。
C−2.ドット形成有無決定処理の概要 :
図11は、前述した画像印刷処理で行われるドット形成有無決定処理の流れを示すフローチャートである。かかる処理は、コンピュータ100から画素群毎に多値化結果値を受け取った後、カラープリンタ200によって実行される処理である。以下、図11のフローチャートに従って説明する。
本実施例のドット形成有無決定処理を開始すると、先ず初めに、処理対象とする画素群を1つ選択し、選択した画素群の多値化結果値を取得する(ステップS300、S302)。次いで、画素群の多値化結果値を、その画素群に形成するドット個数を表すデータに変換する(ステップS304)。ここで、図10を用いて前述したように、画素群階調値と多値化結果値との対応関係は画素群毎に設定されており、従って、たとえ同じ画素群階調値に対しても、画素群の分類番号が異なれば、別の多値化結果値を取ることも多い。このことから明らかなように、画素群の多値化結果値は、同じ分類番号の画素群との間でのみ結果値の大小を比較することが可能であり、分類番号が異なる画素群については、多値化結果値を比較することができないデータとなっている。
そこで、画素群の分類番号に依存する多値化結果値を、分類番号に依存しない多値化結果値に変換することを考える。多値化結果値を分類番号に依存しない値に変換してやれば、全ての画素群についての多値化結果値の大小を比較することができるので、それぞれの変換値の序列に応じて、大ドット・中ドット・小ドットの適切な形成個数、すなわちドット個数を表すデータを対応付けることが可能となる。
図11のステップS304では、このような考え方に基づいて、画素群の分類番号に依存する多値化結果値を、画素群に形成するべきドットの個数を示すデータに変換する。実際の変換は、画素群の分類番号と多値化結果値との組合せ毎に、適切なドット個数のデータを予め設定しておいた変換テーブルを参照するだけで、極めて迅速に行うことができる。
図12は、画素群の分類番号と多値化結果値との組合せを、ドット個数を示すデータに変換する際に参照される変換テーブルを概念的に示した説明図である。図示されているように、変換テーブルには、多値化結果値に対応するドット個数のデータが、分類番号毎に設定されている。一例として、分類番号1番の画素群について説明すると、多値化結果値0に対しては、ドット個数のデータとして「0」が設定されている。このドット個数データ「0」は、大ドット、中ドット、小ドットの形成個数がいずれも0個であることを表したコードデータである。また、多値化結果値1に対しては、ドット個数のデータとして「1」が設定されている。ドット個数データ「1」は、大ドット、中ドットの形成個数は0個であり、小ドットの形成個数が1個であることを表すコードデータである。更に、多値化結果値15に対してはドット個数データ「164」が設定されている。ドット個数データ「164」は、大ドットを8個形成し、中ドットおよび小ドットは形成しないことを表すコードデータである。
このように、変換テーブルには、ドット個数を示すデータはコード化されたデータとして設定されている。すなわち個数データは、直接的にドット個数を表すものでなくても、何らかの方法で、ドット個数を特定可能であれば、どのような形態のデータとすることもできる。
図13は、コード化された個数データと、各コードデータが表す大ドット、中ドット、小ドットの個数の組合せとの対応関係を示した説明図である。このように、各種ドットの個数をコード化して扱っているのは、次のような理由によるものである。
ここでは、1つの画素群は8つの画素をまとめて構成されているものとしているから、大ドット、中ドット、小ドットの形成個数は、それぞれ0〜8個の合計9種類の値を取り得る。従って、各ドットの個数をコード化せずに、そのまま表現しようとすると、大ドットの個数、中ドットの個数、小ドットの個数を表すためにそれぞれ4ビットずつ必要となり、画素群あたりでは12ビットのデータ量が必要となる。
一方、1つの画素群は8つの画素から構成されているから、画素群に形成され得るドット個数の合計は、最大でも8個である。例えば、大ドットが4個、中ドットが3個、小ドットが2個といったドット個数の組合せは、ドット個数の合計が9個となって8個を越えてしまうので現実には発生し得ない。こうした点に着目すれば、現実に発生し得るドット個数の組合せは、それほど多くの種類はないと考えられる。実際に算出すれば、次のようになる。画素群には8つの画素が含まれており、各画素についてみれば「大ドットを形成する」、「中ドットを形成する」、「小ドットを形成する」、「ドットを形成しない」の4つの状態を取り得る。従って、画素群に形成し得るドット個数の組合せは、これら4つの状態を、重複を許して8回選択した時の組合せの数に等しくなるから、
4H8(=4+8−1C8)
によって求められ、結局、最大でも165通りの組合せしか出現しないことになる。ここで、nHrは、n個の物の中から重複を許してr回選択するときの重複組合せ数を求める演算子である。また、nCrは、n個の物の中から重複を許さずにr回選択するときの組合せ数を求める演算子である。165通りの組合せであれば、8ビットあれば表現することができる。従って、現実に発生し得るドット個数の組合せにコード番号を設定しておけば、画素群に形成すべきドット個数の組合せを8ビットのデータで表すことができる。結局、ドット個数の組合せをコード化しておくことで、ドットの種類毎に形成個数を表した場合よりも、必要なデータ量を低減することが可能となる。このような理由から、個数データを図13に示したようにコード化して表現することとして、図12に示した変換テーブルでは、分類番号毎の多値化結果値に対して、コード化されたドット個数のデータが設定されているのである。尚、図12に示すような変換テーブルを設定する方法については、別図を用いて後ほど詳しく説明する。
図11に示したドット形成有無決定処理では、図12に示した変換テーブルを参照することにより、画素群毎に得られた多値化結果値を、ドット個数を表すコードデータに変換する処理を行う。尚、図12に示した変換テーブルを参照するためには、多値化結果値に加えて、画素群の分類番号が必要となる。ここで、図8を用いて前述したように、本実施例においては、画素群の分類番号は画像中での画素群の位置に基づいて決定されている。多値化結果値は画素群毎に供給されるから、多値化結果値が供給される順序に基づいて、処理しようとする多値化結果値の画素群が画像上でどの位置にあるかを知ることができ、これにより分類番号を簡単に決定することが可能である。画像上での画素群の位置に応じて分類番号を決定する方法については、後述する。尚、コンピュータ100からカラープリンタ200に向けて、多値化結果値とともに分類番号を出力することとしてもよい。
次いで、画素群に対応する順序値マトリックスを読み込む処理を行う(図11のステップS306)。ここで、順序値マトリックスとは、画素群内の各画素について、ドットが形成される順番を設定したマトリックスである。図14は、順序値マトリックスを例示した説明図である。図示されているように、順序値マトリックスも画素群の分類番号毎に異なるマトリックスが設定されている。一例として、図14(a)に示した分類番号1番の順序値マトリックスについて説明する。分類番号1番の画素群は、画素群を構成する8つの画素の中で、左上隅にある画素が最もドットの形成され易い画素である。順序値マトリックスの左上隅の画素に数値「1」が設定されているのは、この画素が1番目にドットが形成される画素であることを表したものである。尚、順序値マトリックスに設定されているこのような順番を表す数値を、順序値と呼ぶものとする。また、画素群の右下隅の画素に順序値「2」が設定されているのは、この画素が画素群中で2番目にドットが形成されることを表している。このように、順序値マトリックスには、画素群に含まれる8つの画素について、ドットが形成される順番を示す順序値が設定されている。
こうした順序値マトリックスは、画素群の分類番号によって異なったマトリックスとなっている。例えば、図14(b)に示した分類番号2番の順序値マトリックスでは、1番目にドットが形成される画素(順序値「1」の画素)は、下段の左から2番目の画素であり、2番目にドットが形成される画素(順序値「2」の画素)は、右下隅の画素である。図14(c)に示した分類番号3番の順序値マトリックスでは、1番目にドットが形成される画素(順序値「1」の画素)は、上段の右から2番目の画素であり、2番目にドットが形成される画素(順序値「2」の画素)は、左下隅の画素である。
本実施例のカラープリンタ200に搭載されたROMには、図14に例示したような順序値マトリックスが画素群の分類番号毎に、予め記憶されている。そして、図11のステップS306では、画素群の分類番号に対応する順序値マトリックスを、ROMから読み出す処理を行う。尚、画素群の分類番号毎に順序値マトリックスを設定する方法については、別図を用いて詳しく説明する。
画素群に対応する順序値マトリックスを読み込んだら、画素群を構成する8つの画素の中から、先ず初めに大ドットを形成する画素を決定する(ステップS308)。大ドットは他のドットよりもドットが目立ち易いことから、できるだけドットが分散して形成されるように、ドットを形成する画素位置を他のドットに優先させて決定しておくことが望ましい。このため、先ず初めに大ドットを形成する画素を決定するのである。ドットを形成する画素の決定に際しては、画素群の多値化結果値を変換して得られたドット個数のデータと、画素群に対応する順序値マトリックスとを使用する。
図15は、ドット個数のデータと順序値マトリックスとを用いて、画素群内で各種ドットを形成する画素を決定している様子を概念的に表した説明図である。例えば、画素群に形成すべきドット個数を示すコードデータが、大ドット1個、中ドット2個、小ドット1個の組合せを表していたものとする。前述したように、順序値マトリックスには画素群内の各画素にドットが形成される順番が設定されており、また、初めに大ドットを形成する画素から決定するのであるから、順序値「1」が設定されている画素には大ドットが形成されることになる。もちろん、仮に大ドットの形成個数が2個であれば、順序値「1」の画素に加えて、順序値「2」の画素にも大ドットが形成されることになる。図15では、大ドットが形成される画素には、細かい斜線を付して表示している。図11のステップS308では、このようにしてドット個数のデータと順序値マトリックスとに基づいて、大ドットを形成する画素を決定する処理を行う。
大ドットを形成する画素を決定したら、続いて中ドットを形成する画素を決定する(図11のステップS310)。図15に示した例では、中ドットを形成すべき個数は2個である。順序値「1」の画素には既に大ドットを形成することにしているから、中ドットは順序値「2」の画素と順序値「3」の画素とに形成されることになる。図15では、中ドットが形成される画素に、少し粗い斜線を付して表示している。図11のステップS310では、このようにして大ドットを形成しない画素の中から中ドットを形成する画素を決定する処理を行う。
中ドットを形成する画素を決定したら、今度は小ドットを形成する画素を決定する(図11のステップS312)。図15に示した例では、小ドットを形成すべき個数は1個であり、順序値「1」ないし順序値「3」の画素には既に大ドットおよび中ドットを形成することにしているから、小ドットは順序値「4」の画素に形成されることになる。図15では、小ドットが形成される画素に、粗い斜線を付して表示している。
こうして大ドット、中ドット、小ドットを形成する画素を決定したら、画素群の中で残った画素はドットを形成しない画素であると決定すればよい(図11のステップS314)。以上のような処理を全て行ったら、画素群内の全画素についてドット形成の有無を決定したことになる。
次いで、全画素群について、上述した処理を行ってドット形成の有無を決定したか否かを判断し(ステップS316)、未処理の画素群が残っていれば(ステップS316:no)、ステップS300に戻って新たな画素群を選択し、その画素群について続く一連の処理を行う。こうした操作を繰り返し、最終的に全画素群についての処理を終了したと判断されたら(ステップS316:yes)、図11に示したドット形成有無決定処理を終了して、図6に示した画像印刷処理に復帰する。前述したように画像印刷処理では、ドット形成有無の決定結果に従ってドットを形成することにより、印刷用紙上に画像が印刷される。
以上に説明したように、本実施例の画像印刷処理では、複数の画素をまとめて画素群を構成し、画素群毎に多値化を行って、得られた多値化結果値をカラープリンタ200に出力する。画素群の多値化に際しては、画素群の分類番号と画素群階調値とを求めて、図9に示すような多値化テーブルを参照するだけで直ちに多値化結果値を得ることができる。画素群の分類番号も画素群階調値も、前述したように極めて簡単に求めることができることから、画素群の多値化結果値は極めて迅速に、しかも極めて簡素な処理によって求めることが可能となる。
加えて、本実施例の多値化テーブルでは、各画素群に設定されている多値化結果値は、階調値0〜階調値15までの範囲の値に抑制されているので、画素群あたり4ビットで表現することが可能である。このため、画素毎にドット形成の有無を表すデータよりも、データ量を大幅に減少させることができ、延いては、多値化結果値をカラープリンタ200に迅速に供給することが可能となる。
カラープリンタ200では、このような多値化結果値を受け取ると、画素群内に形成すべきドットの個数を示すデータに変換する。かかる変換は、図12に示すような変換テーブルを参照するだけで、迅速に行うことができる。次いで、変換して得られたドット個数を示すデータと、順序値マトリックスとに基づいて、大ドット・中ドット・小ドットの形成有無を決定した後、ドットを形成して画像を印刷する。順序値マトリックスを参照すれば、大ドット・中ドット・小ドットを形成する画素は比較的簡単に決定することができる。従って、多値化結果値を受け取ったカラープリンタ200においても、比較的簡素な処理によって迅速に画素毎のドット形成の有無を決定し、迅速に画像を印刷することが可能となる。
加えて、本実施例の画像印刷処理では、単に迅速に画像を印刷することができるだけでなく、十分な画質で画像を印刷することができる。特に、画素群の分類番号に応じて、多値化テーブルや、変換テーブル、および順序値マトリックスを適切に設定しておくことで、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクと呼ばれるディザマトリックスを用いて実現されるような、ドットが良好に分散した高画質な画像を印刷することが可能となる。以下では、こうしたことが可能な理由も含めて、画素群の分類番号を決定する考え方、多値化テーブル、変換テーブル、順序値マトリックスなどを設定する方法について、順次説明する。
C−3.ディザ法の概要 :
上述した本実施例の画像印刷処理は、いわゆるディザ法と呼ばれる方法を発展させて改良したものである。そこで、画素群の分類番号を決定する考え方や、多値化テーブル、変換テーブル、順序値マトリックスなどの設定方法を説明する準備として、先ず、ディザ法の概要について簡単に説明しておく。
ディザ法とは、画像データを、画素毎にドット形成の有無を表すデータに変換するために用いられる代表的な手法である。この手法では、ディザマトリックスと呼ばれるマトリックスに閾値を設定しておき、画像データの階調値とディザマトリックスに設定されている閾値とを画素毎に比較して、画像データの階調値の方が大きい画素についてはドットを形成すると判断し、そうでない画素についてはドットを形成しないと判断する。このような判断を画像中の全画素について行えば、画像データを画素毎にドット形成の有無を表すデータに変換することができる。
図16は、ディザマトリックスの一部を拡大して例示した説明図である。図示したマトリックスには、横方向(主走査方向)に128画素、縦方向(副走査方向)に64画素、合計8192個の画素に、階調値1〜255の範囲から万遍なく選択された閾値がランダムに記憶されている。ここで、閾値の階調値が1〜255の範囲から選択されているのは、本実施例では、画像データが階調値0〜255の値を取り得る1バイトデータとしていることに加えて、画像データの階調値と閾値とが等しい場合には、その画素にはドットを形成するものと判断していることによるものである。
すなわち、ドットが形成されるのは画像データの階調値が閾値よりも大きい画素に限る(すなわち階調値と閾値とが等しい画素にはドットは形成しない)とした場合、画像データの取り得る最大階調値と同じ値の閾値を有する画素には、決してドットが形成されることはない。こうしたことを避けるためには、閾値の取り得る範囲は、画像データの取り得る範囲から最大階調値を除いた範囲としておけばよい。逆に、画像データの階調値と閾値とが等しい画素にもドットを形成するとした場合、画像データの取り得る最小階調値と同じ値の閾値を有する画素には、常にドットが形成されてしまうことになる。こうしたことを避けるためには、閾値の取り得る範囲は、画像データの取り得る範囲から最小階調値を除いた範囲としておけばよい。本実施例では、画像データの取り得る階調値が0〜255であり、画像データと閾値が等しい画素にはドットを形成するとしていることから、閾値の取り得る範囲を1〜255としておくのである。尚、ディザマトリックスの大きさは、図16に例示したような大きさに限られるものではなく、縦と横の画素数が同じマトリックスも含めて種々の大きさとすることができる。
図17は、ディザマトリックスを参照しながら、各画素についてのドット形成の有無を判断している様子を概念的に示した説明図である。ドット形成の有無を判断するに際しては、先ず、判断しようとする画素を選択し、この画素についての画像データの階調値と、ディザマトリックス中で対応する位置に記憶されている閾値とを比較する。図17中に示した細い破線の矢印は、画像データの階調値と、ディザマトリックスに記憶されている閾値とを、画素毎に比較していることを模式的に表したものである。例えば、画像データの左上隅の画素については、画像データの階調値は97であり、ディザマトリックスの閾値は1であるから、この画素にはドットを形成すると判断する。図17中に実線で示した矢印は、この画素にはドットを形成すると判断して、判断結果をメモリに書き込んでいる様子を模式的に表したものである。一方、この画素の右隣の画素については、画像データの階調値は97、ディザマトリックスの閾値は177であり、閾値の方が大きいので、この画素についてはドットを形成しないと判断する。ディザ法では、こうしてディザマトリックスを参照しながら、画素毎にドットを形成するか否かを判断することで、画像データを画素毎にドット形成の有無を表すデータに変換する。
以上に説明した内容を踏まえて、以下では、画素群の分類番号を決定する考え方や、多値化テーブル、変換テーブル、順序値マトリックスなどの設定方法について説明する。
C−4.分類番号を決定するための考え方 :
以下では、先ず初めに、画素群の分類番号を付与する考え方を説明する。次いで、図8を用いて前述した簡便な方法によって、画素群の分類番号を求めることができる理由について説明する。
図18は、画素群毎の分類番号を決定するための考え方を示した説明図である。図18(a)は、画像の一番左上隅の箇所において、横方向に4画素、縦方向に2画素の合計8画素をまとめることによって画素群を1つ生成した様子を概念的に示したものである。
前述したように、ディザ法では画素に割り当てられた画像データの階調値と、ディザマトリックスの対応する位置に設定されている閾値とを比較して、画素毎にドット形成の有無を判断している。一方、本実施例では、隣接する所定数の画素を画素群としてまとめているから、ディザマトリックスに設定されている閾値についても、画素群に対応する所定数ずつまとめてブロックを生成することにする。図18(b)は、図16に示したディザマトリックスに設定されている閾値を、横方向に4画素分、縦方向に2画素分ずつまとめて複数のブロックを生成した様子を示している。図16に示したディザマトリックスは、横方向(主走査方向)に128画素分、縦方向(副走査方向)に64画素分の合計8192画素分の閾値が設定されているから、これら閾値を横方向に4画素、縦方向に2画素ずつブロックにまとめれば、ディザマトリックスは縦横それぞれ32個ずつ、合計1024個のブロックに分割されることになる。
今、図18(b)に示すように、これらブロックに1番〜1024番までの通し番号を付しておく。そして、画像データにディザマトリックスを適用した時に、各画素群の位置に適用されるブロックの通し番号によって、画素群を分類してやる。例えば、図18(c)に示したように、画像の一番左上隅にある画素群には、図18(b)中の通し番号1番のブロックが適用されるから、この画素群は分類番号1番の画素群に分類するのである。以上が、画素群の分類番号を決定するための基本的な考え方である。
次に、図8を用いて前述した方法によって、画素群の分類番号を算出可能な理由について説明する。図19は、画素群の分類番号を算出する方法を示した説明図である。図19(a)は、画像中で生成された1つの画素群を表している。以下では、この画素群を着目画素群として、分類番号を算出する方法について説明する。前述したように、着目画素群の位置は、画素群の左上隅にある画素の画素位置によって表すものとする。図19(a)では、画素群の位置を示す画素に黒丸を付して表示している。この画素の画素位置が(X,Y)であったとする。すると、各画素群の大きさは、主走査方向に4画素、副走査方向に2画素としているから、
X=4n+1、 Y=2m+1
となるようなn、m(ここで、n,mは0以上の正整数)が存在する。換言すれば、着目画素群の左側にはn個の画素群が並んでおり、着目画素群の上側にはm個の画素群が並んでいることになる。
ここで、前述したように画素群は、画像データにディザマトリックスを適用したときに、着目画素群に適用されるブロックの通し番号に基づいて分類することとしているから(図18参照のこと)、ディザマトリックスを移動させながら画像データに適用する方法によって、同じ画素群でも異なった分類番号に分類されることになる。実際には、ディザマトリックスを移動させながら画像データに適用する方法はどのような方法でも構わないが、ここでは説明の便宜から、最も単純な方法すなわちディザマトリックスを横方向に移動させるものとして説明する。図19(b)には、ディザマトリックスを横方向に少しずつ移動させながら、繰り返し画像データに適用している様子が概念的に示されている。
図19(c)は、図19(b)に示すようにディザマトリックスを繰り返して用いながら、図19(a)に示した着目画素群にディザマトリックスを適用している様子を概念的に表している。このようにディザマトリックスを移動させていくと、ディザマトリックス中のいずれかのブロックが、着目画素群に適用されることになる。ここでは、着目画素群には、ディザマトリックス中でM行N列目に位置するブロックが適用されたものとする。すると、図19(a)に示したように着目画素群の左側にはn個の画素群があり、上側にはm個の画素群があるから、Nとn、およびMとmとの間には、それぞれ
N=n − int(n/32)×32 + 1
M=m − int(m/32)×32 + 1
の関係が成り立っている。ここで、intは、小数点以下を切り捨てて整数化することを表す演算子である。すなわち、int(n/32)は、n/32の計算結果に対して小数点以下の数値を切り捨てることによって得られた整数値を表している。このように、着目画素群の位置が分かれば、図19(d)に表示した上述の関係式から数値MおよびNを求めて、ディザマトリックス中でM行N列目にあるブロックのブロック番号を、その着目画素群の分類番号としてやればよい。もっとも実際には、図8を用いて前述したように、着目画素群の座標値X,Yを2進数表示したデータから、所定ビットのデータを抜き出すだけで、極めて簡単に求めることができる。以下、この理由について説明する。
図20は、着目画素群の座標値の2進数表示から分類番号を求める方法を示した説明図である。着目画素群の座標値を(X,Y)として、X,Yが10ビットで表現されているものとする。図20(a)は、数値Xを表す10ビットの2進数データを概念的に示している。図では、各ビットを識別するために、最上位ビットから最下位ビットに向かって1番から10番までの通し番号を付して表示している。
図19を用いて前述したように、着目画素群の左側にある画素群の個数nは、数値Xから1を減算して4で除算すれば得ることができる。ここで、4での除算は、2ビット分だけ右方向にシフトさせることで実施することができるから、数値Xから1を減算して、得られた2進数データを右方向に2ビット分だけビットシフトさせればよい。更に、数値Xは任意の値を取るのではなく、4n+1の形式で表現可能な数値しか取り得ないから、1を減算せずに、単に2進数データを右方向に2ビット分だけビットシフトさせるだけで、画素群の個数nを得ることができる。図20(b)は、こうして数値Xをビットシフトして得られた個数nの2進数データを概念的に表している。
次いで、int(n/32)を算出する。すなわち、個数nを32で除算して、小数点以下の数値を切り捨てる操作を行う。32による除算は、2進数データを右方向に5ビット分だけビットシフトさせることで実行可能であり、また、データを整数形式で扱っていれば、小数点以下の数値は自動的に切り捨てられてしまう。結局、int(n/32)の2進数データは、個数nの2進数データを、単に右方向に5ビット分だけビットシフトさせることで得ることができる。図20(c)は、個数nをビットシフトして得られたint(n/32)の2進数データを概念的に表している。
こうして得られたint(n/32)に32を乗算する。32による乗算は、2進数データを5ビット分だけ左方向にビットシフトすることで実施することができる。図20(d)は、個数nをビットシフトして得られたint(n/32)×32の2進数データを概念的に表している。
次いで、個数nからint(n/32)×32を減算すれば、前述の数値Nを得ることができる。個数nの2進数データ(図20(b)参照)とint(n/32)×32の2進数データ(図20(d)参照)とを比較すれば明らかなように、これら2進数データは、上位の5ビットは共通しており、減算する側の数値の下位5ビットは全て「0」となっている。従って、減算される側の数値(個数n)の下位5ビットをそのまま抜き出せば、求める数値Mを得ることができる。すなわち、図20(b)に示した2進数データに対して、図20(f)に示すようなマスクデータを作用させるだけで、極めて簡便に数値Nを得ることが可能である。あるいは、図20(a)に示した着目画素群の位置を示す数値Xの2進数データに、図20(g)のようなマスクデータを作用させて、4番目〜8番目のビットデータを直接抜き出すことによっても、数値Nを得ることができる。
図20では、着目画素群の位置を示す座標値(X,Y)の数値Xから、ディザマトリックス中でのブロック位置を示す数値Nを求める場合について説明したが、全く同様にして、ブロック位置を示す数値Mも数値Yから求めることができる。結局、着目画素群の位置が分かれば、2進数データから特定のビット位置のデータを抜き出すだけで、着目画素群がディザマトリックス中で何行何列目のブロックに対応するかを知ることができ、このブロックの通し番号を算出すれば、着目画素群の分類番号を得ることができる。図8を用いて前述した分類番号の算出方法は、このようにして導かれた方法である。
C−5.多値化テーブルの設定方法 :
次に、図9に示した多値化テーブルを設定する方法について説明する。前述したように、多値化テーブルには、画素群階調値に対する多値化結果値が画素群の分類番号毎に設定されており、多値化テーブルを参照しながら多値化することで、画素群階調値は、図10に示したように画素群の分類番号に応じた固有な態様で多値化されることになる。
本実施例の多値化テーブルは、大きさの異なる複数種類のドットについて画素毎にドット形成の有無を判断可能なように、前述したディザ法を発展させた手法を基にして設定されている。かかる手法の詳細な内容は、特許3292104号に開示されている。多値化テーブルの設定方法を説明する前に、その準備として、上記の特許公報に開示された技術の概要について簡単に説明しておく。
図21は、ディザ法を発展させて、画素毎に大ドット・中ドット・小ドットの形成の有無を決定可能としたハーフトーン処理の流れを示すフローチャートである。ハーフトーン処理を開始すると、先ず初めに、ドットの形成有無を判断しようとする画素を選択して、その画素の画像データを取得する(ステップS400)。次いで、取得した画像データを、大中小の各ドットについての密度データに変換する。ここで、密度データとは、ドットをどの程度の密度で形成するかを表すデータである。密度データは、階調値が大きくなる程、ドットが高い密度で形成されることを表している。例えば、密度データの階調値「255」は、ドットの形成密度が100%、すなわち全ての画素にドットが形成されることを表しており、密度データの階調値「0」は、ドットの形成密度が0%、すなわちいずれの画素にもドットが形成されないことを表している。こうした密度データへの変換は、ドット密度変換テーブルと呼ばれる数表を参照することによって行うことができる。
図22は、画像データの階調値を大中小各ドットについての密度データに変換する際に参照されるドット密度変換テーブルを概念的に示した説明図である。図示されているように、ドット密度変換テーブルには、画像データの階調値に対して、小ドット・中ドット・大ドットの各ドットについての密度データが設定されている。画像データが階調値「0」近傍の領域では、中ドット・大ドットの密度データはいずれも階調値「0」に設定されている。小ドットの密度データは、画像データの階調値が大きくなるに連れて増加して行くが、画像データがある階調値に達すると今度は逆に減少し始め、代わりに中ドットの密度データが増加し始める。画像データの階調値が更に増加して、ある階調値に達すると、小ドットの密度データが階調値「0」となり、中ドットの密度データが減少し始めて、代わりに大ドットの密度データが少しずつ増加していく。図21のステップS402では、このドット密度変換テーブルを参照しながら、画像データの階調値を、大ドットの密度データ、中ドットの密度データ、小ドットの密度データに変換する処理を行う。
処理対象とする画素について、大中小各ドットの密度データが得られたら、先ず初めに大ドットについての形成有無を判断する(図21のステップS404)。かかる判断は、大ドットの密度データと、処理対象としている画素の対応する位置に設定されているディザマトリックスの閾値とを比較することによって行う。大ドットの密度データが閾値よりも大きい場合は、処理対象の画素には大ドットを形成するものと判断し、逆に密度データの方が小さい場合は、大ドットは形成しないものと判断する。
次いで、処理対象の画素に大ドットを形成すると判断されているか否かを判定し(ステップS406)、大ドットを形成すると判断されている場合は(ステップS406:yes)、中ドットおよび小ドットについての判断は省略して、全画素を終了したか否かを判断する(ステップS418)。そして、ドット形成の有無を未判断の画素が残っている場合は(ステップS418:no)、ステップS400に戻って新たな画素を選択し、続く一連の処理を行う。
一方、処理対象の画素に大ドットを形成すると判断されていない場合は(ステップS406:no)、中ドットについての形成有無を判断するべく、大ドットの密度データに中ドットの密度データを加算して中ドット用の中間データを算出する(ステップS408)。こうして得られた中ドット用の中間データと、ディザマトリックスの閾値とを比較する。そして、中ドット用の中間データの方が閾値よりも大きければ、中ドットを形成するものと判断し、逆に中間データよりもディザマトリックスの閾値の方が大きければ、中ドットを形成しないものと判断する(ステップS410)。
次いで、処理対象の画素に中ドットを形成すると判断されているか否かを判定し(ステップS412)、中ドットを形成すると判断されている場合は(ステップS412:yes)、小ドットについての判断は省略して、全画素を終了したか否かを判断する(ステップS418)。
処理対象の画素に中ドットを形成すると判断されていない場合は(ステップS412:no)、小ドットについての形成有無を判断するべく、中ドット用の中間データに小ドットの密度データを加算して小ドット用の中間データを算出する(ステップS414)。次いで、得られた小ドット用の中間データと、ディザマトリックスの閾値とを比較する。そして、小ドット用の中間データの方が閾値よりも大きければ、小ドットを形成するものと判断し、逆に中間データよりもディザマトリックスの閾値の方が大きければ、いずれのドットも形成しないものと判断する(ステップS416)。
すなわち、大ドットの密度データよりもディザマトリックスに設定された閾値の方が大きい画素(大ドットが形成されない画素)については、大ドットの密度データに中ドットの密度データを加算して、得られた中間データと閾値とを比較し、中間データの方が大きくなれば、中ドットを形成すると判断する。一方、中間データよりも依然として閾値の方が大きい画素については、中間データに小ドットの密度データを加算して新たな中間データを算出する。そして、この中間データと閾値とを比較して、新たな中間データの方が大きくなれば小ドットを形成すると判断し、依然として閾値の方が大きい画素についてはいずれのドットも形成しないと判断するのである。
以上のような処理を行うことにより、処理対象の画素について、大ドット、中ドット、小ドットのいずれのドットを形成するか、若しくは、いずれのドットも形成しないかを判断することができる。そこで、全画素についての処理を終了したか否かを判断し(ステップS418)、未判断の画素が残っている場合は(ステップS418:no)、ステップS400に戻って新たな画素を選択し、続く一連の処理を行う。このようにして、処理対象として選択された画素について1つずつ、大中小のいずれのドットを形成するか否かを判断していく。そして、全画素について処理を終了したと判断されたら(ステップS418:yes)、図21に示したハーフトーン処理を終了する。
以上、ディザマトリックスを利用して、大中小の各ドットについての形成有無を判断する方法について説明した。以下では、上述の説明を踏まえて、図9に示した多値化テーブルの設定方法について説明する。
前述したように多値化結果値生成処理では、画素群内に含まれる各画素の画像データを画素群階調値で代表させることにより、画素群をまとめて多値化している。そこで、多値化テーブルを設定するに際しては、先ず、画素群内の全画素が画素群階調値と同じ値の画像データを有するものとして、各画素について大中小の各種ドットについての形成有無を判断することを考える。各種ドットについての形成有無の判断は、図21を用いて前述したハーフトーン処理によって行う。
図23は、画素群内の各画素について、大中小各ドットの形成有無を判断している様子を概念的に示した説明図である。図中では、ハーフトーン処理を行うために着目している画素群を太い実線で囲って表している。画素群は8つの画素から構成されており、各画素の画像データは、いずれも画素群階調値と同じ値(図示した例では階調値97)を有している。大中小各種ドットの形成有無を判断するためには、画像データを各ドットについての密度データに変換する。密度データへの変換は、図22に示したドット密度変換テーブルを参照することによって行う。ここでは、画素群内の全画素が同じ画像データを有するものとしているから、各種ドットについても密度データも全て画素について同じ値となる。図示した例では、大ドットの密度データの階調値が「2」、中ドットの密度データの階調値が「95」、小ドットの密度データの階調値が「30」であった場合を表している。
次いで、図21を用いて説明したように、大ドットの密度データ、中ドット用の中間データ、あるいは小ドット用の中間データと、ディザマトリックスに設定されている閾値とを比較することによって、各種ドットについての形成有無を画素毎に判断する。ここで、比較に用いるディザマトリックスの閾値は、ディザマトリックスの中から、着目している画素群に対応する箇所に設定されている閾値を使用する。例えば、図23に示した例では、画素群が画像の左上隅にあることから、閾値についても、ディザマトリックス中の左上隅の画素群に設定されている閾値を使用する。
そして、画素群に設定されている8つの閾値の中で、大ドットの密度データよりも小さな閾値が設定されている画素については、大ドットを形成すると判断する。ここでは、大ドットの密度データは階調値「2」としているから、大ドットが形成される画素は、閾値「1」が設定されている画素だけである。図23では、大ドットが形成されると判断された画素には、細かい斜線を付して表示している。大ドットの密度データ「2」よりも大きく、大ドットの密度データと中ドットの密度データとを加算して得られた中ドット用の中間データ「97」よりも小さな閾値が設定されている画素には、中ドットを形成するものと判断する。このような画素は、閾値「42」が設定された画素、および閾値「58」が設定された画素の2つの画素だけである。図23では、中ドットが形成されると判断された画素には、少し粗い斜線を付して表示している。そして、最後に、中ドット用の中間データ「97」よりも大きく、中ドット用の中間データに小ドット用の密度データを加算して得られた小ドット用の中間データ「127」よりも小さな閾値が設定されている画素には、小ドットを形成するものと判断する。このような画素は、閾値「109」が設定された画素だけである。図23では、小ドットが形成されると判断された画素には、粗い斜線を付して表示している。このようにして、大ドット、中ドット、小ドットの形成有無を判断した結果、着目している画素群の画素群階調値が「97」である場合には、大ドット1個、中ドット2個、小ドット1個が形成されることになる。
画素群階調値が大きく異なれば、画素群内に形成される大ドット、中ドット、小ドットの個数も異なったものとなる。また、画素群階調値を「0」から「255」まで変化させれば、それに伴って大ドット、中ドット、小ドットの個数は、幾段階かに変化するはずである。更に、画素群の分類番号が異なれば、ディザマトリックスの閾値も異なることから、ドット個数の変化の仕方も異なるはずである。そこで、画素群階調値を「0」から「255」まで変化させたときに、ドットの発生状態が変化する階調値(閾値階調値)を画素群毎に検出する。図9に示した多値化テーブルは、画素群毎に検出された閾値階調値を元にして設定されている。
図24は、画素群毎に閾値階調値を検出する処理の流れを示したフローチャートである。以下、フローチャートに従って説明する。閾値階調値検出処理を開始すると、先ず初めに、画素群の分類番号を1つ選択する(ステップS500)。例えば、ここでは分類番号1番を選択したものとする。
次いで、選択した分類番号の画素群に対応する閾値を、ディザマトリックスの中から読み出してやる(ステップS502)。例えば、ここでは分類番号1番を選択したものとしているから、図16に例示したディザマトリックスの中から、図18(b)中で1番と表示したブロック位置に設定されている8つの閾値を読み出す。
そして、検出された閾値階調値の個数を示す変数Ithに「1」を設定し、画素群階調値BDに「0」を設定する(ステップS504)。更に、大ドット、中ドット、小ドットの形成個数をいずれも0個に設定する(ステップS506)。
続いて、図22に示したドット密度変換テーブルを参照することにより、画素群階調値を大ドット、中ドット、小ドットについての密度データに変換した後(ステップS508)、これら密度データと先に読み込んでおいた閾値とに基づいて、大中小の各種ドットについての形成個数を決定する(ステップS510)。すなわち、図21あるいは図23を用いて説明したように、大ドットの密度データよりも小さな閾値の個数を求めて、得られた個数を大ドットの形成個数とする。また、大ドットの密度データよりも大きく且つ中ドット用の中間データよりも小さな閾値の個数を求めて、これを中ドットの形成個数とする。更に、中ドット用の中間データよりも大きく且つ小ドット用の中間データよりも小さな閾値の個数を求めて、これを小ドットの形成個数とする。
こうして求めた各種ドットの形成個数が、先に設定されていた形成個数に対して変更されたか否かを判断する(ステップS512)。そして、形成個数が変更されたと判断されれば(ステップS512:yes)、そのときの画素群階調値BDを閾値階調値Vth(Ith)に記憶した後(ステップS514)、閾値階調値の個数を表す変数Ithを「1」だけ増加させる(ステップS516)。一方、形成個数が変更されていないと判断された場合は(ステップS512:no)、閾値階調値Vthの記憶や変数Ithを増加させる処理はスキップする。
次いで、画素群階調値BDが階調値255に達したか否かを判断する(ステップS518)。階調値255に達していなければ(ステップS518:no)、画素群階調値BDを「1」だけ増加させて(ステップS520)、ステップS508に戻って再び画素群階調値BDを密度データに変換し、続く一連の処理を行う。そして、形成されるドットの個数が変更された場合には(ステップS512:yes)、閾値階調値Vth(Ith)を記憶するとともに(ステップS514)、閾値階調値の個数を示す変数Ithを1つ増加させる(ステップS516)。こうした操作を、画素群階調値BDが階調値255に達するまで繰り返す。そして、画素群階調値BDが階調値255に達したら(ステップS518:yes)、選択した分類番号については、すべての閾値階調値Vthを検出したことになる。
次いで、すべての分類番号について、以上のような処理を行ったか否かを判断し(ステップS522)、未処理の分類番号が残っている場合は(ステップS522:no)、ステップS500に戻って再び上述した処理を行う。こうした処理を繰り返し、すべての分類番号について、すべての閾値階調値Vthを検出したと判断されたら(ステップS522:yes)、図24に示した閾値階調値検出処理を終了する。
このようにして、すべての閾値階調値を検出したら、閾値階調値の個数が所望の個数となるように、検出された閾値階調値を間引く操作を行う。すなわち、図9および図10を用いて前述したように、本実施例の多値化テーブルには、いずれの画素群についても、「0」〜「15」までの16種類の多値化結果値が設定されている。多値化結果値が16種類であれば、閾値階調値は15個あればよい。しかし、図24に示した閾値階調値検出処理で検出される閾値階調値の個数は、ほぼ全ての画素群について、15個よりも多くなってしまう。そこで、検出された閾値階調値を間引くことにより、閾値階調値の個数を15個にする操作を行うのである。ここで、ほぼ全ての画素群について、検出される閾値階調値の個数が15個よりも多くなるのは、次のような理由によるものである。
先ず、前述したように、閾値階調値とは、画素群内の各画素についてドット形成の有無を判断しながら画素群階調値を「0」〜「255」まで変化させたときに、ドットの発生状態が変化する画素群階調値である。また、画素群内でのドットの形成有無は、大中小の各ドットについての密度データ(正確には、大ドットの密度データ、中ドット用の中間データ、および小ドット用の中間データ)と、ディザマトリックス中で画素群に対応する位置に設定されている閾値とに基づいて決定される。従って、閾値階調値の個数は、画素群階調値に対して設定されている大中小各ドットについての密度データ(換言すれば、図22に例示したドット密度変換テーブルの設定内容)と、ディザマトリックスに設定されている閾値と、画素群に含まれる画素数とに依存している。尚、ここでは、形成可能なドットの種類は、大ドット、中ドット、小ドットの3種類であるものとしている。
ところが、ディザマトリックスには、画質上の観点からドットを良好に分散させて発生させることが要請されるので、画素群によって、設定されている閾値の分布が大きく異なることはない。また、ドット密度変換テーブルについても、画質上の要請から、画像データの階調値が増加するに従って各種ドットの発生密度を違和感なく切り換える必要があるので、形成可能なドットの種類が例えば大中小の3種類と決まれば、ドット密度変換テーブルに設定される各ドットの密度データには自ずから適切な範囲が存在する。結局、画素群毎に検出される閾値階調値の個数は、実質的には、1つの画素群に含まれる画素数に最も強く依存していることになる。例えば、形成可能なドットが大ドット、中ドット、小ドットの3種類である場合、本実施例のように1つの画素群が8つの画素で構成されているとすれば、検出される閾値階調値の個数は、ほぼすべての画素群について17個〜23個の範囲となる。そこで、多値化結果値を「0」〜「15」までの16種類に抑えるべく、閾値階調値の個数が15個になるまで、検出された閾値階調値を間引く処理を行うのである。閾値階調値が17個〜23個あれば、多値化結果値の種類は18〜24種類となり、多値化結果値を表現するためには5ビットが必要となる。これに対して、閾値階調値を15個以下に抑制すれば、多値化結果値の種類は16種類以下となり、多値化結果値を4ビットで表現することが可能となる。
図25は、閾値階調値を所望の個数に抑えるために、検出された閾値階調値を間引く様子を示す説明図である。図中の左半分には、図24の閾値階調値検出処理によって検出された閾値階調値が示されている。図25に例示した画素群では、18個の閾値階調値Vthが検出されており、これら閾値階調値によって、階調値0〜階調値255まで値を取り得る画素群階調値は19個のいずれかの階調領域に区分されている。すなわち、このままでは、画素群階調値を多値化して得られる結果値は、19種類発生することになる。そこで、斜線を付して示した閾値階調値を間引くことにより、閾値階調値を15個に減らしてやる。
ここで、閾値階調値を間引けば多値化の段数が減少するので、階調表現の分解能が低下し、延いては画質の低下を引き起こすおそれがある。そこで、閾値階調値を間引くに際しては、高階調領域で検出された閾値階調値を1つおきに間引いて行く。これは次のような理由によるものである。経験上、小さなドットがまばらに形成される領域(すなわち、低階調領域)では、階調表現の分解能が不足すると画質に大きな影響を与えるが、大きなドットが高い密度で形成される領域では、階調表現の分解能が不足しても、低階調領域ほどには画質に大きな影響を与えることはない。また、複数の閾値階調値を間引く場合には、連続した閾値階調値を間引くのではなく、1つ以上おいて間引くようにすれば、特定の階調領域に集中して分解能が低下することを回避することができるので、画質に与える影響を抑制することが可能となる。このような理由から、閾値階調値を間引くに際しては、高階調領域で検出された閾値階調値を1つおきに間引いておけば、画質に与える悪影響を最小限に抑制することが可能となるのである。
図25の左半分に示した例では、18個の閾値階調値が検出されているから、3個の閾値階調値を間引けばよい。そこで、高階調領域で検出された閾値階調値を1つおきに、具体的には、図中に斜線を付して示した閾値階調値を間引くことにより、閾値階調値の個数を15個に減らしてやる。図25の右半分には、間引かれた後の閾値階調値が示されている。こうすれば、画素群階調値の取り得る階調値0〜255の範囲は16個の階調領域に区分されることになり、従って、多値化結果値を16種類に抑制することができる。
図9に示した本実施例の多値化テーブルは、以上のようにして選択した閾値階調値に基づいて設定されている。例えば、図25に示した例では、1つめの閾値階調値(Vth(1)=12)に満たない画素群階調値については多値化結果値0を対応付けてやる。また、1つめの閾値階調値よりも大きく2つめの閾値階調値(Vth(2)=31)に満たない画素群階調値については多値化結果値1を対応付け、2つめの閾値階調値よりも大きく3つめの閾値階調値(Vth(3)=35)に満たない画素群階調値については多値化結果値2を対応付けてやる。このようにして、閾値階調値によって区分される階調領域毎に多値化結果値を対応付けてやる。図25を用いて説明したように、各画素群の閾値階調値は15個に間引かれているので、いずれの画素群についても画素群階調値を16個の階調領域に区分することができ、各領域に「0」〜「15」の多値化結果値を対応付けてやれば、図9に示した多値化テーブルを設定することが可能となる。
尚、以上の説明では、所望の個数より多くの閾値階調値が検出された場合には、余計に検出された分だけ閾値階調値を間引くこととして、残った閾値階調値を調整することは行っていない。しかし、少なくとも閾値階調値が間引かれた階調領域では、残った閾値階調値間の階調差が適切な値となるように、閾値階調値の値を調整することとしても良い。
例えば、図25に示した例では、階調値190、階調値203、階調値225の3つの閾値階調値が間引かれており、この結果、残った閾値階調値間の階調差は、閾値階調値179と閾値階調値198との間が階調差19、閾値階調値198と閾値階調値208との間が階調差10、閾値階調値208と閾値階調値237との間が階調差29、閾値階調値237以上の領域が階調差18となっている。前述したように、階調表現の分解能が低階調領域で不足すると画質に大きな影響を与えるが、高階調領域では分解能の不足はそれほど大きな影響を与えない。従って、閾値階調値を間引いた領域での各閾値階調値間の階調差が、高階調領域では大きくなるようにしておくことにより、閾値階調値を間引くことによる画質への影響を最小限に抑制することができると考えられる。こうした観点から見ると、図25で閾値階調値が間引かれた後の階調差は、必ずしも適切な分布とはなっていない。そこで、間引かれた後の各閾値階調値間の階調差が適切な階調差で分布するように、残った閾値階調値の値を調整するのである。
図26は、図25に示した間引き後の閾値階調値を調整している様子を示す説明図である。図中の左半分には、間引いたままの閾値階調値と、各閾値階調値間の階調差とが示されており、図中の右半分には、階調値を調整した後の閾値階調値と、各閾値階調値間の階調差とが示されている。このように、高階調領域では、各閾値階調値間の階調差が大きくなるように、閾値階調値の値を調整しておけば、より高画質な画像を得ることが可能となる。
以上では、画素群が8つの画素から構成されている場合について、閾値階調値を間引く処理について説明したが、画素群を構成する画素数が8個ではない場合にも、同様にして閾値階調値を間引いてやればよい。一例として、1つの画素群が16個の画素で構成されている場合について説明する。前述したように、1つの画素群で検出される閾値階調値の個数は、画素群を構成する画素数に強く依存しており、画素群が16個の画素から構成される場合の閾値階調値の個数は、8個の画素から構成される場合の約2倍に相当する34個〜47個程度となる。そこで、画素群に含まれる画素数が16個の場合は、閾値階調値の個数が31個以下に抑制するべく、検出された閾値階調値を間引く処理を行えばよい。閾値階調値の個数が34個〜47個あれば、多値化結果値の種類は35〜48種類となるので、多値化結果値は6ビットのデータとなる。これに対して閾値階調値を31個以下に抑制すれば、多値化結果値の種類は32種類以下となり、5ビットで多値化結果値を表現することが可能となる。
図27は、画素群が16個の画素から構成されている場合に、閾値階調値を間引く処理の様子を示す説明図である。図中の左半分には、画素群が16個の画素からなる場合に、前述の閾値階調値検出処理によって検出された閾値階調値が示されている。図27に例示した画素群では、37個の閾値階調値Vthが検出されており、これら閾値階調値によって、階調値0〜階調値255まで値を取り得る画素群階調値は38個のいずれかの階調領域に区分されることになり、結局、38種類の多値化結果値が発生することになる。そこで、斜線を付して示した閾値階調値を間引くことにより、閾値階調値を31個に減らしてやる。図27の右半分には、閾値階調値を間引いた様子が例示されている。こうすれば、多値化結果値の種類は32種類となるので、5ビットで表現することができる。また、閾値階調値は、高階調領域で検出された閾値階調値を1つおきに間引いているため、画質に与える悪影響を最小限に抑制することが可能である。更に、この場合でも、間引いた後の閾値階調値間が、適切な階調差となるように、残った閾値階調値の値を調整することとしても良い。
図28は、画素群を構成する画素数が16個の場合に、間引き後の閾値階調値を調整している様子を示す説明図である。図26を用いて説明した画素数が8個の場合と同様に、図28においても、図中の左半分には、間引いたままの閾値階調値および各閾値階調値間の階調差が示されており、図中の右半分には、階調値を調整した後の閾値階調値および各閾値階調値間の階調差とが示されている。このように、高階調領域では、各閾値階調値間の階調差が大きくなるように、閾値階調値の値を調整しておくことで、より一層、高画質な画像を得ることが可能となる。
C−6.変換テーブルの設定方法 :
次に、図12を用いて前述した変換テーブルの設定方法について説明する。かかる変換テーブルは、図11に示したドット形成有無決定処理中で、多値化結果値を分類番号と組み合わせて、画素群に形成されるドット個数を表すデータに変換するために参照されるテーブルである。
図24および図25を用いて前述した多値化テーブルの設定方法から明らかなように、多値化テーブルに設定されている多値化結果値は、画素群に形成される大中小の各ドットの個数に基づいて決定されている。もっとも、多値化結果値が、画素群に形成されるドット個数の組合せに直ちに対応しているわけではなく、多値化結果値と画素群の分類番号とを組み合わせることで初めて、具体的なドット個数の組合せに対応付けることができる。何故なら、多値化結果値は、画素群階調値を階調値0から階調値255まで増加させたときに、大中小各ドットの形成個数が変化したか否かだけを抽出し、具体的に各ドット個数の組合せがどのように変化したかを示す情報は省かれた状態で設定されているからである。
とは言え、画素群の分類番号が分かっていれば、その画素群で何回目の変化に相当するか、すなわち多値化結果値から、各種ドットについての具体的な個数の組合せを特定することはできる。そこで、分類番号毎に、多値化結果値を設定する元になった各種ドットの具体的な個数を求め、得られたドット個数の組合せに対応するコードデータを、多値化結果値に対応付けて記憶しておく。図12に示した変換テーブルは、こうした操作を、全ての分類番号について行うことによって設定されている。
図29は、変換テーブルを設定する具体的な処理の流れを示したフローチャートである。以下、フローチャートに従って説明する。変換テーブル設定処理を開始すると、先ず初めに、設定対象とする分類番号を1つ選択し(ステップS600)、多値化結果値RVを0に設定する(ステップS602)。
次いで、多値化結果値RVに対応する画素群階調値を取得する(ステップS604)。例えば、多値化結果値が「N」であったとすると、図9に示した多値化テーブルを参照して、多値化結果値Nに対応する画素群階調値を1つ取得することができる。次いで、取得した画素群階調値を、対象としている画素群の全画素が有するものとしたときに、画素群内に形成される大ドット、中ドット、小ドットの個数を決定する(ステップS606)。前述したように、多値化テーブルは、画素群に形成される大中小の各ドットの個数に基づいて決定されているから、多値化結果値Nに対応付けられた複数の画素群階調値の中からいずれの画素群階調値を選択した場合でも、画素群内に形成される各種ドットの個数は同じとなる。もっとも、閾値階調値が間引かれている高階調領域では、選択する画素群階調値によって、各種ドットの個数は異なるが、この場合でも、多値化結果値に対応付けられた複数の画素群階調値の中から、いずれか任意の階調値を選択し、その画素群階調値に対して形成される各種ドットの個数を決定すればよい。尚、画素群内での各ドットの形成有無は、図21を用いて前述した方法を適用して決定することができる。
こうして決定した各ドットの個数の組合せを、コードデータに変換する(ステップS608)。ドット個数の組合せからコードデータへの変換は、図13に示した対応表を参照することによって行う。次いで、得られたコードデータを、多値化結果値に対応付けて記憶した後(ステップS610)、多値化結果値の最大値(本実施例では「15」)に達したか否かを判断する(ステップS612)。
そして、多値化結果値の最大値に達していない場合は(ステップS612:no)、多値化結果値RVの値を「1」だけ増加させる(ステップS614)。そして、ステップS604に戻って、新たな多値化結果値RVに対応する画素群階調値を取得した後、続く一連の処理を繰り返す。こうした操作を繰り返し、多値化結果値の最大値に達したと判断されたら(ステップS612:yes)、その分類番号については全データが変換テーブルに設定されたことになる。
そこで今度は、全ての分類番号について同様の処理を行ったか否かを判断する(ステップS616)。そして、未だ処理していない分類番号が残っている場合は、ステップS600に戻って新たな分類番号を選択し、この分類番号について、上述した一連の処理を行う。こうして全ての分類番号について処理を終了したと判断されたら(ステップS616:yes)、変換テーブルの全てのデータが設定されたことになるので、図29に示す処理を終了する。
本実施例のカラープリンタ200は、このようにして設定された変換テーブルが、制御回路260に内蔵されたROM内に予め記憶されている。そして、図11に示したドット形成有無決定処理では、この変換テーブルを参照することによって、多値化結果値を個数データに変換しているのである。
尚、変換テーブルには、画素群の分類番号および多値化結果値の組合せ毎に、個数データが対応付けて記憶されている。従って、多値化結果値の取り得る種類が少なくなれば、変換テーブルのデータ量も少なくなる。前述したように、本実施例では、各画素群の取り得る多値化結果値の種類が所定数以下(本実施例では16個)に抑制されていることから、変換テーブルを記憶するために要するメモリ量も節約することが可能である。
C−7.順序値マトリックスの設定方法 :
次に、図14に例示した順序値マトリックスを設定する方法について説明する。前述したように、順序値マトリックスとは、画素群内の各画素について、ドットが形成される順番を設定したマトリックスである。図11に示したドット形成有無決定処理中では、画素群に対応する順序値マトリックスを読み込んで、マトリックスに設定されている順番に従って、大ドット、中ドット、小ドットを形成する画素を決定していた。
順序値マトリックスも、前述した多値化テーブルと同様に、特許3292104号に開示された手法(ディザ法を発展させて、大きさの異なる複数種類のドットの形成の有無を判断可能とした手法)を基にして設定されている。すなわち、多値化テーブルを設定する場合は、前述したように画素群内の全画素が同じ画像データ(画素群階調値)を有するものとして、画素群内に形成される大中小ドットの個数を決定しながら、画素群階調値を「0」から「255」まで変化させて、このときに各ドットが形成される個数の変化に着目して多値化結果値を設定した。また、図12に示すように、多値化結果値と分類番号とを組み合わせれば、画素群内に形成される大中小の各ドットの個数までは復元することができた。しかし、これら各種ドットが、画素群内のどの画素に形成されるかに関する情報は省略されており、多値化結果値あるいは分類番号からは知ることはできない。順序値マトリックスは、画素群内で各種ドットが形成される画素位置に関する情報を記憶したものと考えることができる。すなわち、特許3292104号に開示された手法を画素群に適用すれば、図21ないし図23を用いて前述したように、各種ドットの形成個数だけでなく、画素群内でドットが形成される画素位置まで決定可能であるところ、本実施例ではこの手法を2つの要素に分解して、各種ドットの形成個数に関する情報については、主に多値化結果値(正確には、多値化結果値および分類番号の組合せ)に反映させ、ドットが形成される画素位置に関する情報ついては、順序値マトリックスに反映させていると考えることができる。このような順序値マトリックスは、実際には、比較的簡単に設定することができる。
図30は、順序値マトリックスを設定する方法について具体的に示した説明図である。以下、図を参照しながら説明する。順序値マトリックスの設定に際しては、先ず、ディザマトリックスを画素群と同じ大きさを有する複数のブロックに分割して、各ブロックに通し番号を付しておく。図18を用いて前述したように、この通し番号がそのまま画素群の分類番号となる。図30(a)は、ディザマトリクスを複数のブロックに分割した様子を概念的に示した説明図である。今、ディザマトリックスが図16に示した大きさ(すなわち、主走査方向に128画素、副走査方向に64画素)を有しているものとすると、1つの画素群は主走査方向に4画素、副走査方向に2画素の大きさを有するとしているから、図30(a)に示すように、ディザマトリックスは主走査方向および副走査方向にそれぞれ32ブロックずつ、全体では、1番から1024番までの分類番号が付された1024個のブロックに分割されることになる。
ディザマトリックスを複数のブロックに分割したら、各ブロックから1組ずつ順序値マトリックスを生成する。図30(b)は、一例として、分類番号1番のブロックから順序値マトリックスを生成している様子を示した説明図である。図30(b)の左側半分には、分類番号1番のブロックに含まれるディザマトリックスの閾値が示されている。図23を用いて前述したように、ドットは小さな閾値が設定されている画素から順番に形成される。従って、図30(b)に示した1番のブロックの中で1番初めにドットが形成される画素は、閾値「1」が設定された画素と考えることができる。そこで、この画素には順序値として「1」を設定する。同様に、2番目にドットが形成される画素は、2番目に小さな閾値である閾値「42」が設定された画素と考えることができる。そこで、この画素には順序値「2」を設定する。このようにして、ブロック内に設定されている閾値の小さな画素から順番に、順序値「1」から順序値「8」までを決定してやれば、図30(b)の右側半分に示した分類番号1番の順序値マトリックスを得ることができる。
図30(c)は、同様にして、ブロック内で小さな閾値が設定されている画素から順番に、順序値「1」から順序値「8」までを設定することで、分類番号2番の順序値マトリックスが得られる様子を示している。図30(a)に示した分類番号「1」番から「1024」番までの全てのブロックについて、以上のような操作を行うことにより、分類番号「1」番から「1024」番までの順序値マトリックスを得ることができる。
本実施例のカラープリンタ200は、このようにして設定された順序値マトリックスが、制御回路260に内蔵されたROM内に、画素群の分類番号に対応付けて予め記憶されている。そして、図11に示したドット形成有無決定処理を実施する際には、記憶されている順序値マトリックスの中から、画素群の分類番号に対応するマトリックスを読み出しているのである。
C−8.多値化結果値からドット形成有無を適切に決定可能な原理 :
以上に説明したように、本実施例の画像印刷処理では、複数個の画素を画素群にまとめて、図9に例示した多値化テーブルを参照することにより、画素群毎に多値化結果値を決定する。次いで、図12に例示した変換テーブル、および図14に例示した順序値マトリックスを参照しながら、多値化結果値に基づいて画素群内に各種ドットを形成する画素位置を決定する。このようにしてドットを形成する画素位置を決定した場合でも、ドットが適切に分散された高画質な画像を出力することができる。加えて、比較的少数ずつ(本実施例では8個ずつ)の画素群をまとめて処理しているにも関わらず、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクに代表される画素数が千個を越えるような大規模なディザマトリックスを用いることで実現されるような、良好なドット分布を得ることが可能である。以下では、このようなことが可能となる原理について説明する。
前述した特許3292104号に開示された技術を用いれば、図21および図22を用いて前述したように、画像データを大ドットの密度データ、中ドット用の中間データ、小ドット用の中間データに変換して、ディザマトリックスに設定されている閾値と比較することで、大中小各ドットについての形成の有無を判断することができる。更に、このときに参照するディザマトリックスを、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクに代表されるような分散性が考慮されたマトリックスとしておけば、ドットが良好に分散した高画質な画像を得ることができる。
また、画像データは一般的に、隣接する画素間では近似する(若しくは同一の)階調値が割り当てられる傾向がある。近年では、高画質化の要請から画像データの解像度は益々高くなる傾向にあるが、隣接する画素間で近似若しくは同一の階調値が割り当てられる傾向は、画像データの解像度が高くなるほど顕著に現れる。このことから、図23を用いて前述したように、複数個の画素を画素群としてまとめてしまい、画素群内の画素は全て同じ画像データを有するものとして大中小各ドットの形成有無を判断した場合でも、実際には画質に差が生じることは稀である。
ここで、前述した本実施例の多値化結果値生成処理では、画素群階調値を多値化して、画素群の分類番号に依存した多値化結果値を生成する。こうして生成された多値化結果値は、画素群の分類番号と組み合わせることで、画素群内に形成される各種ドットの個数を示すデータとなっている。図23に示した画素群については、画素群の分類番号と組み合わせることで、大ドット、中ドット、小ドットの形成個数が、それぞれ1個、2個、1個であることを示すような多値化結果値が生成されることになる。
前述した本実施例のドット形成有無決定処理では、このような多値化結果値を受け取ると、画素群内の各画素について、大中小各ドットについての形成有無を決定する。図31は、前述したドット形成有無決定処理において、多値化結果値を受け取って、画素群内の各画素について大中小各ドットの形成有無を判断する処理の大まかな流れを概念的にまとめた説明図である。図示されているように、多値化結果値を受け取ると、その結果値が表す画素群の分類番号を求めた後、多値化結果値と分類番号とに基づいて、大中小各ドットの形成個数を取得する。また、予め記憶されている順序値マトリックスの中から、分類番号に対応付けて記憶されているマトリックスを読み出してやる。尚、分類番号を求める具体的な方法については後述する。
図23に示した画素群を想定しながら説明すれば、画素群は画像の左上隅にあるから分類番号は1番と求められる。この画素群の多値化結果値と、求めた分類番号とを組み合わせることにより、この画素群には、大ドット1個、中ドット2個、小ドット1個がそれぞれ形成されることが分かる。これら各ドットが、画素群内のどの画素に形成されるかを決定するために、分類番号1番の順序値マトリックスを参照する。この順序値マトリックスは、図23において、ドット形成有無の判断に用いたディザマトリックスの該当部分、すなわち画素群内の各画素についてドット形成の有無を判断するために用いた該当部分から生成した順序値マトリックスである。
このようにして得られた大中小各ドットの個数と、順序値マトリックスとに基づいて、画素群内でこれらドットを形成する画素位置を決定していく。画素位置を決定する具体的な方法は、図15を用いて既に説明しているので、ここでは説明は省略して結果のみを示すと、大ドットは順序値1番の画素に形成され、中ドットは順序値2番の画素と3番の画素とに形成され、小ドットは順序値4番の画素に形成される。図31では、図15に倣って、大ドットを形成する画素には細かいハッチングを付し、中ドットを形成する画素には少し粗いハッチングを付し、小ドットを形成する画素には粗いハッチングを付して表している。こうして得られたドットの分布と、図23に示した画素毎にドット形成の有無を判断して得られたドットの分布とを比較すれば、両者のドット分布は完全に一致していることが分かる。
すなわち、分類番号に依存した多値化結果値のみを受け取った場合でも、上述した方法を用いてドット形成の有無を決定してやれば、前述した特許3292104号を適用してディザ法を参照しながら画素毎に大中小各ドットの形成有無を判断した場合と、全く同じドット分布を得ることができる。このため、ドットが良好に分散された高画質な画像を得ることが可能となるのである。
加えて、多値化結果値を生成するために参照された多値化テーブルは、図24および図25を用いて前述したように、ディザマトリックスに基づいて設定されている。同様に、多値化結果値からドット形成有無を決定する過程で参照された変換テーブルあるいは順序値マトリックスも、ディザマトリックスに基づいて設定されている(図29、図30参照)。従って、これらテーブル類の設定に用いられるディザマトリックスとして、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクを使用すれば、これらマスクを用いることで初めて得られるような、高画質な画像を得ることが可能となる。
C−9.画素群の位置から分類番号を決定する方法 :
ここで、画像上での画素群の位置から、その画素群の分類番号を求める方法について、簡単に説明しておく。
図32は、画像上での画素群の位置に基づいて、分類番号を求める方法を示した説明図である。今、対象としている画素群が、図32(a)に示すように、画像の一番左上隅を基準として主走査方向にi個目の画素群、副走査方向にj個目の画素群の位置にあるとする。また、このような画素群の位置を、座標値(i,j)によって表すものとする。また、ディザマトリックスの大きさは、通常は、画像のようには大きくはないので、図19(b)を用いて前述したように、ディザマトリックスを主走査方向に移動させながら、繰り返して使用するものとする。
1つのディザマトリックスには主走査方向・副走査方向にそれぞれ32個ずつのブロックが含まれるとしているから(図18(b)参照)、ディザマトリックス中で、対象の画素群がある位置をI行J列とすれば、I、Jはそれぞれ次式で求めることができる。
I=i − int(i/32)×32
J=j − int(j/32)×32
ここで、intは、小数点以下を切り捨てて整数化することを表す前述した演算子である。従って、画素群の座標値(i,j)に上式を適用してI,Jを求めることで、その画素群がディザマトリックス中でI行J列にあることが分かる。これより、分類番号は、
I+(J−1)×32 …(2)
によって求めることができる。
また、画素群のディザマトリックス中での位置を表す値I,Jは、上述したような計算を実行せずとも、i,jの2進数表示から所定ビットのデータを抜き出すだけで、極めて簡便に求めることができる。図33は、画素群の座標値(i,j)から、画素群のディザマトリックス中での位置を求める方法を具体的に示した説明図である。図33(a)は、数値iを表す10ビットの2進数表示したデータを概念的に示している。尚、図33(a)では、各ビットを識別するために、最上位ビットから最下位ビットに向かって1番から10番までの通し番号を付して表示している。
画素群の位置を示す値Iを求めるに際しては、先ず初めに、int(i/32)を算出する。この演算は、iの2進数データを右方向に5ビット分だけビットシフトさせることで実行することができる(図33(b)参照)。次いで、int(i/32)×32を算出する。この演算は、int(i/32)の2進数データを左方向に5ビット分だけビットシフトさせることで実行することができる(図33(c)参照)。最後に、数値iから、int(i/32)×32を減算すれば、目的とする数値Iを得ることができる。この操作は、結局は、数値iの2進数データから下位の5ビットのみを抜き出していることに他ならないから、極めて簡便に数値Iを得ることが可能である。同様にして、数値jの2進数データから下位の5ビットのみを抜き出すことで、極めて簡便に数値Jを得ることが可能である。こうして数値IおよびJが求まれば、上述の(2)式を用いて分類番号を算出することができる。
以上、本実施例の画像印刷処理中で行われる多値化結果値生成処理(図6のステップS106)、およびドット形成有無決定処理(図6のステップS108)の内容について詳しく説明した。上述した多値化結果値生成処理では、所定数の画素をまとめて画素群を生成し、その画素群の画素群階調値を多値化して得られた結果値を生成する。多値化結果値の生成に際しては、多値化テーブルを参照することにより、極めて迅速に生成することができる。
また、こうして得られた多値化結果値は、画素群の分類番号に依存した結果値であるが、画素毎にドット形成の有無を表すデータに比べて、データ量が遙かに小さくなっている。加えて、本実施例の多値化テーブルは、多値化結果値の取り得る種類が所定数以下となるように抑制されており、多値化結果値のデータ量がより一層小さくなっている。このため、コンピュータ100からカラープリンタ200に向かって極めて迅速にデータを出力することが可能となる。すなわち、上述した多値化結果値生成処理では、多値化結果値の生成および出力を高速に実行することができ、その分だけ画像を迅速に印刷することが可能となるのである。
加えて、多値化結果値を生成する処理は、単に多値化テーブルを参照する処理に過ぎず、多値化テーブルを参照するために使用する分類番号や画素群階調値も、極めて簡便な処理で求めることができるので、コンピュータ100のような高いデータ処理能力を備えていない機器を用いた場合でも、十分に実用的な速度で処理することができる。
更に、処理内容の大部分は、単にテーブルを参照するという極めて簡素な処理となることから、CPUを用いてソフトウェア的に実行するのではなく、専用の論理回路を組み込んだICチップを用いてハードウェア的に実行することも容易であり、こうすることで極めて高速に処理することも可能である。従って、デジタルカメラ120などの画像データを生成する機器と、カラープリンタ200とを直接接続した場合でも、多値化結果値生成処理をデジタルカメラ120やカラープリンタ200の内部で実行することで、迅速に画像を印刷することも可能となる。
一方、本実施例の画像印刷処理中で行われるドット形成有無決定処理では、多値化結果値を受け取ると、画素群内の各画素についてドットの形成有無を決定する。ドット形成の有無を決定するに際しては、変換テーブルを参照することで、多値化結果値をドット個数の組合せに変換し、続いて、順序値マトリックスを参照することで、各種ドットの形成位置を決定する。すなわち、変換テーブルおよび順序値マトリックスを参照することによって、各種ドットを形成する画素位置を迅速に決定することができる。
通常、形成可能なドットの種類が増加すると、これら各種ドットを形成する画素位置を決定する処理は加速度的に複雑なものとなる。これに対して、上述した本実施例のドット形成有無決定処理では、ドットの種類が増加した場合でも、変換テーブルおよび順序値マトリックスを参照するという基本的な処理内容は同じであり、処理内容が複雑化することはない。この点からも、本実施例のドット形成有無決定処理によれば、簡素で且つ迅速な処理が可能と言うことができる。更に、上述した多値化結果生成処理と同様に、本実施例のドット形成有無決定処理においても、処理内容の大部分は、単にテーブルを参照するという極めて簡素な処理であるため、CPUを用いてソフトウェア的に実行するのではなく、専用の論理回路を組み込んだICチップを用いてハードウェア的に実行することも容易であり、こうすることで極めて高速に処理することが可能である。
D.変形例 :
以上に説明した本実施例の画像印刷処理には種々の変形例が存在している。以下では、これら変形例について簡単に説明する。
D−1.第1の変形例 :
上述した本実施例の多値化結果値生成処理では、階調値0から階調値255までの画素群階調値毎に、対応する多値化結果値を記憶した多値化テーブルを参照している。しかし多値化結果値は、画素群階調値が増加するに従って段階的に増加するだけなので、多値化結果値が切り換わる画素群階調値(閾値階調値)だけを記憶しておけば、画素群階調値に対する多値化結果値を求めることができる。以下に説明する第1の変形例の画像印刷処理では、こうした変形例の多値化結果値生成処理を行う。
図34は、変形例の多値化結果値生成処理において参照される閾値テーブルを概念的に示した説明図である。図示されているように閾値テーブルには、分類番号毎に、閾値階調値が設定されている。従って、設定されている閾値階調値と比較することで、画素群階調値を多値化することができる。一例として、分類番号1番の画素群について説明する。分類番号1番については、多値化結果値0に対しては閾値階調値2が設定されている。これは、分類番号1番の画素群については、閾値階調値2より小さな画素群階調値については、多値化結果値0に多値化されることを表している。また、多値化結果値1に対しては閾値階調値15が設定されている。これは、分類番号1番の画素群については、閾値階調値2以上で尚且つ閾値階調値15より小さな画素群については、多値化結果値1に多値化されることを表している。同様に、多値化結果値14に対しては閾値階調値240が、そして多値化結果値15に対しては閾値階調値250が設定されている。これは、閾値階調値240以上で尚且つ閾値階調値250より小さな画素群階調値については多値化結果値14に、閾値階調値250以上の画素群階調値については多値化結果値15に、それぞれ多値化されることを表している。
尚、図32では、分類番号毎の閾値階調値は、それぞれ多値化結果値に対応させて設定されているものとした。しかし、特に多値化結果値に対応付けることなく、単なる閾値階調値の組を分類番号毎に記憶することとしてもよい。この場合は、画素群階調値よりも小さな閾値閾値階調値の個数を数えることで、多値化結果値を求めることができる。再び、分類番号1番の画素群を例に用いて説明する。例えば、画素群階調値が「20」であったとする。分類番号1番に設定されている閾値階調値の組の中で、画素群階調値20よりも小さな閾値階調値は、「2」、「15」、「18」の3個である。このことから、画素群階調値20に対する多値化結果値は「3」であると決定することとしてもよい。
以上に説明した変形例の多値化結果値生成処理では、画素群についての画素群階調値と分類番号とを求めた後、図34に例示した閾値テーブルを参照することによって、多値化結果値を生成する。閾値テーブルは、前述した多値化結果生成処理中で参照する多値化テーブル(図9参照)よりも少ないデータ量で記憶しておくことができる。このため、第1の変形例の多値化結果値生成処理は、本実施例として前述した処理に比べて、メモリ使用量を節約することが可能である。これに対して、前述した本実施例の多値化結果値生成処理は、分類番号と画素群階調値とから多値化テーブルを参照するだけで直ちに多値化結果値を求めることができる。すなわち、変形例における処理のように画素群階調値と閾値階調値とを比較する必要がないので、迅速に多値化することが可能である。
D−2.第2の変形例 :
上述した本実施例の画像印刷処理においては、カラープリンタ200は大ドット、中ドット、小ドットの3種類のドットを形成可能であるものとして説明した。しかし、カラープリンタ200は、このような3種類のドットを形成可能なものに限られず、例えば、大ドットおよび小ドットの2種類のドットや、インク濃度の異なる2種類のドット(濃ドットおよび淡ドット)を形成可能なプリンタ、更には、4種類以上のドットを形成可能なプリンタに対しても、本願発明を好適に適用することが可能である。以下に説明する第2の変形例の画像印刷処理では、大ドットおよび小ドットの2種類のドットが形成可能なプリンタに、本願発明を適用した場合について説明する。
前述したように、1つの画素群が8つの画素から構成されており、1つの画素には大ドット、中ドット、小ドットの何れかのドットを形成可能であるとして、図24に示した方法で各画素群についての閾値階調値を検出すると、検出される閾値階調値の個数は、ほぼ全ての画素群で17個〜23個の範囲となる。ここで閾値階調値とは、画素群内でドットの発生状態が変化する画素群階調値であるから、形成可能なドットの種類が少なくとなると、画素群あたりに検出される閾値階調値の個数も減少することになり、これに伴って、取り得る多値化結果値の種類も少なくなる。第2の変形例の画像印刷処理では、大ドットおよび小ドットの2種類のドットを形成可能としているから、画素群が取り得る多値化結果値の種類は、大中小の3種類のドットを形成可能な場合よりも少なくなっているが、この多値化結果値の種類を適切な方法で更に抑制することにより、画質の悪化を最小限に抑制しつつ画像を迅速に出力することを可能としている。以下では、第2の変形例において多値化結果値の種類を適切に抑制する方法について説明するが、その準備として、大ドットおよび小ドットの2種類のドットを形成可能な場合に、画素群の閾値階調値を検出する方法について簡単に説明する。
大ドットおよび小ドットを形成可能な場合も、閾値階調値を検出するための基本的な考え方は、図24を用いて前述した大ドット、中ドット、小ドットを形成可能な場合と同様である。すなわち、画素群内では全画素が同じ画素群階調値を有するものとして、画素群階調値を大ドットおよび小ドットについての密度データに変換する。画素群階調値から大ドットおよび小ドットの密度データへの変換は、前述した実施例と同様にドット密度変換テーブルを参照することによって行う。
図35は、画素群階調値を大ドットおよび小ドットの密度データに変換する際に参照されるドット密度変換テーブルを概念的に示した説明図である。図22に示したドット密度変換テーブルには、大ドット、中ドット、小ドットの3種類のドットについての密度データが、画像データの階調値に対応付けて設定されていた。これに対して、図35に示したドット密度変換テーブルは、大ドットおよび小ドットの密度データのみが設定されている点で異なっている。画素群階調値を大ドットおよび小ドットの密度データに変換したら、ディザマトリックスの対応する位置に設定されている閾値と、大ドットの密度データとを比較することによって、大ドットの形成有無を画素群内の各画素について決定する。次いで、大ドットの密度データと小ドットの密度データとを加算して小ドット用の中間データを算出し、得られた小ドット用の中間データと、ディザマトリックスの閾値とを比較することによって、小ドットの形成有無を決定する。
図36は、画素群内の各画素について大ドットおよび小ドットについての形成有無を決定している様子を概念的に示した説明図である。図示した例では、大ドットの密度データは「11」であるから、ディザマトリックスに設定された閾値が「11」より小さな画素、すなわち図中で細かい斜線を付した画素にのみ、大ドットが形成される。また、小ドット用の中間データは、大ドットの密度データと小ドットの密度データとを加算して「109」と求めることができるから、大ドットが形成されておらず、尚且つ、ディザマトリックスの閾値が「109」より小さな画素、すなわち図中で粗い斜線を付した画素にのみ、小ドットが形成される。結局、この画素群の画素群階調値が階調値97を取る場合は、大ドット1つ、小ドット3つが、図36に斜線を付して示した分布で発生することになる。このような操作を、階調値0から階調値255までの全ての画素群階調値に対して行い、ドットの発生状態が変化する画素群階調値を求めることによって、閾値階調値を検出することができる。
このようにして各画素群の閾値階調値を検出してみると、1つの画素群が8つの画素から構成されており且つ1つの画素には大ドットまたは小ドットの2種類のドットが形成可能とした場合は、検出される閾値階調値の個数は、ほぼ全ての画素群で11個〜15個の範囲となる。もちろん、画像中での画素群の位置が異なれば、ディザマトリックスに設定されている閾値も異なるため、ドットの発生状態も異なったものとなる。しかし、前述したようにディザマトリックスにはドットを良好に分散させて発生させることが要請されるから、画素群内での閾値の分布が画像中での位置によって大幅に異なることはなく、従って画素群の位置によらず、ほぼ11個〜15個の閾値階調値が検出されることになる。画素群の閾値階調値の個数が11個〜15個であれば、各画素群の画素群階調値は12値化〜16値化されることになり、多値化結果値は12種類〜16種類となる。このような多値化結果値を表現するためには、1つの多値化結果値あたり4ビットのデータ量が必要となる。多値化結果値は各画素群について1つずつ得られるとすれば、結局、コンピュータ100からカラープリンタ200に供給すべき制御データは、画素群の個数×4ビットのデータ量となる。
第2の変形例の画像印刷処理では、各画素群について検出された閾値階調値を間引くことにより、何れの画素群についても多値化結果値の種類を8種類に抑制する。多値化結果値が8種類であれば3ビットあれば表現することができるから、多値化結果値のデータ量は3/4に減少する。その結果、コンピュータ100からカラープリンタ200に供給すべき制御データのデータ量も3/4に減少するので、迅速に制御データを供給することが可能となる。もっとも、単純に閾値階調値を間引いて多値化結果値の種類を抑制したのでは、画質の悪化が懸念される。そこで、第2の変形例の画像印刷処理では、次のようにして閾値階調値を間引くことにより、画質の悪化を最小限に抑制している。
図37は、第2の変形例の画像印刷処理において、閾値階調値を間引いている様子を概念的に示した説明図である。図中の左半分には、大ドットおよび小ドットの2種類のドットを形成可能であるとして、ある画素群について閾値階調値を検出した結果が示されている。画素群が8つの画素から構成され、各画素に形成可能なドットが2種類であるとした場合、前述したようにほぼ全ての画素群で11個〜15個の閾値階調値が検出される。このことと対応して、図37に示した画素群では11個の閾値階調値Vthが検出されている。従って、この画素群については、12種類の多値化結果値が発生することになる。
第2実施例の画像印刷処理では、11個の閾値階調値Vthの中から4つ間引いて閾値階調値の個数を7個に減らすことにより、多値化結果値の種類を8種類に抑制する。閾値階調値を間引くに際しては、画質の悪化を最小限に抑制するために、高階調領域で検出された閾値階調値を1つおきに間引いてやる。こうすれば、画質に大きな影響を与える低階調領域では閾値階調値を間引いたことによる影響が現れないので、画質の悪化を最小限に抑制することが可能となる。図37では、間引かれる閾値階調値に斜線を付して表示している。このように、各画素群で検出された閾値階調値の中から、高階調側の閾値階調値を1つおきに間引いて閾値階調値を7個に減らしてやる。このようにして得られた閾値階調値に基づいて多値化テーブルを設定してやれば、多値化結果値を3ビットで表現することができるので、コンピュータ100からカラープリンタ200に供給すべき制御データのデータ量が小さくなる。その結果、画質の悪化を最小限に抑制しながら、迅速に画像を出力することが可能となる。
また、第2の変形例の画像印刷処理においても、閾値階調値を間引いた後、残った閾値階調値間の階調差が適切な値となるように調整することとしても良い。例えば、上述の図37に示した例では、階調値95、階調値150、階調値183、階調値231の4つの閾値階調値が間引かれており、残った閾値階調値間の階調差は、閾値階調値74と閾値階調値116との間が階調差42、閾値階調値116と閾値階調値178との間が階調差62、閾値階調値178と閾値階調値212との間が階調差34、閾値階調値212以上の領域が階調差43となっている。前述したように、階調表現の分解能が低階調側で不足すると画質が悪化し易くなるから、低階調側では大きな階調差が生じない方が望ましい。そこで、間引いた後の閾値階調値の値を調整して、階調差の分布を改善してやるのである。図38は、間引いた後の閾値階調値を調整することにより、閾値階調値間の階調差を改善している様子を概念的に表している。こうすれば、画質にあまり影響を与えない高階調領域では各閾値階調値間の階調差は大きいものの、画質に大きな影響を与える低階調領域では、閾値階調値間の階調差を小さくすることができるので、得られる画質を改善することが可能となる。
D−3.第3の変形例 :
また、上述した各種の実施例では、間引かれる閾値階調値は画素群毎に個別に選択するものとして説明したが、少なくとも隣接する画素群間では、近接した閾値階調値が間引かれないように、間引く閾値階調値を選択することとしても良い。以下に説明する第3の変形例の画像印刷処理では、隣接する画素群を考慮しながら閾値階調値を間引くことにより多値化結果値の種類を抑制している。
図39は、隣接する画素間で間引かれる閾値階調値が近接しないように考慮しながら、閾値階調値を間引いている様子を概念的に示した説明図である。ここでは、互いに隣接する画素群Aおよび画素群Bにおいて、それぞれ17個の閾値階調値が検出されたものとする。このままでは、多値化結果値は18種類となるので5ビットのデータとなる。これを、4ビットで表現可能なように多値化結果値を16種類に抑制するためには、いずれの画素群についても2つずつ閾値階調値を間引いてやればよい。前述したように、画質の悪化を最小限とするためには、高階調領域で検出された閾値階調値を1つおきに間引いてやればよい。そこで、画素群Aについては、16番目の閾値階調値225と、14番目の閾値階調値203の、2つ閾値階調値を間引くことにする。
一方、画素群Aに隣接する画素群Bについても同様に、高階調側で1つおきに間引くとすれば、16番目の閾値階調値239と、14番目の閾値階調値202の、2つ閾値階調値を間引くことになる。間引く閾値階調値をこのようにして選択した場合、隣り合う画素群で、近接した2つの閾値階調値203および閾値階調値202が間引かれることになる。すなわち、連続する2つの画素群に亘って、閾値階調値が間引かれたことによる影響が現れることになるので、それだけ画質が悪化し易くなってしまう。そこで、画素群Bの2つめの閾値階調値は、13番目の閾値階調値171を間引いてやるのである。
より具体的には、隣接する画素間で間引こうとする閾値階調値の階調差が所定値(例えば、階調値10)以下とならないように、考慮しながら各画素間で間引く閾値階調値を選択することとすればよい。こうすれば、閾値階調値が間引かれたことによる影響を、隣接する画素群Aと画素群Bとで異なる階調範囲に分散させることができるので、画質への影響をより一層抑制して高画質な画像を得ることが可能となる。
D−4.第4の変形例
前述した本実施例のドット形成有無決定処理では、画素群の分類番号と多値化結果値とを受け取ると、これを、画素群内に形成する各種ドットの個数を表すデータに一旦変換した。そして、ドット形成の有無を判断するに際しては、画素群内の各画素についてドットを形成するか否かをドットの種類毎に決定した。例えば、図11に示したフローチャートでは、初めに大ドットについてのドット形成の有無を判断し、次に中ドットのついての判断を行い、最後に小ドットについて判断するといったように、ドットの種類毎にドット形成有無を判断していた。しかし、ドット形成有無を判断する方法は、こうした方法に限られるものではない。例えば、画素群内から画素を1つずつ選択して、各画素について、大中小のいずれのドットが形成されるのか、あるいはドットが形成されないかを判断することとしてもよい。以下に説明する第4の変形例の画像印刷処理では、こうした変形例のドット形成有無決定処理を行う。
図40は、変形例のドット形成有無決定処理の流れを示したフローチャートである。以下、フローチャートに従って、変形例のドット形成有無決定処理について説明する。
変形例のドット形成有無決定処理においても前述した本実施例における処理と同様に、処理を開始すると先ず初めに、処理対象とする画素群を1つ選択する(ステップS700)。次いで、選択した画素群の多値化結果値を取得し(ステップS702)、画素分の分類番号と多値化結果値とに基づいて、その画素群に形成するドット個数を表すデータを取得する(ステップS704)。ドット個数のデータは、分類番号と多値化結果値との組合せから、図12に示した変換テーブルを参照することによって迅速に取得することができる。
変形例のドット形成有無決定処理では、こうして取得したドット個数のデータを一旦、16ビット長の中間データに変換する(ステップS706)。すなわち、図12の変換テーブルではデータ量を低減するために、ドット個数のデータを8ビット長のコードデータとして表したが、変形例のドット形成有無決定処理では、ドット形成有無をより簡便に決定可能な形式で表現された中間データに一旦変換しておくのである。ここで、中間データのデータ長が16ビットとなっているのは、画素群内に含まれる画素数が8個であり、各画素についてのドット形成の有無は2ビットあれば表現可能であることによる。換言すれば、中間データは2ビットずつを1組として、画素数に相当する8組のデータを用いてドット個数を表すデータとなっている。画素群に形成するドット個数をこのような形式で表現しておけば、後述するように画素との対応が取り易くなるため、ドット形成有無を簡便に決定することが可能となる。変形例のドット形成有無決定処理においては、ドット個数を表すコードデータと中間データとの対応関係が予め記憶されており、ステップS706の処理では、かかる対応関係を参照することによって中間データを取得する。
図41は、ドット個数を表すコードデータと中間データとを対応付けた対応表を示す説明図である。前述したようにコードデータは、各種ドットについての個数の組合せに対応付けられているから(図13参照)、2ビットを1組としてドットの種類を表し、そのビットの組をドットの個数に相当する数だけ並べた表現形式に変換すれば、16ビットのデータを得ることができる。16ビット長の中間データは、コードデータの表現形式をこの様にして変換して得られたデータとなっている。
例えば、コードデータ「1」は、大ドット0個、中ドット0個、小ドット1個の組合せを示している。尚、参考として、図41の右側には、それぞれのコードデータが示すドット個数の組合せが示されている。今、小ドットを表す2ビットデータを「01」とすれば、コードデータ「1」に対応する16ビットデータは、「01」が1組だけ含まれており、他の7組の2ビットデータは「00」であるようなデータとなる。尚、2ビットデータ「00」はドットを形成しないことを表すデータである。
同様に、コードデータ「163」は、大ドット7個、中ドット1個、小ドット0個の組合せを示している。今、大ドットを表す2ビットデータを「11」として、中ドットを表す2ビットデータを「10」とすれば、コードデータ「163」に対応する16ビットデータは、「11」の2ビットデータが7組含まれており、「10」の2ビットデータが1組含まれたデータとなる。
尚、これら2ビットデータは、大ドット、中ドット、小ドットの順番で、右詰めで設定されている。例えば、ドット個数の組合せが、大ドット1個、中ドット2個、小ドット3個であったとすると、8組の2ビットデータの中で、大ドットを表す2ビットデータ「11」は右端に1組だけ設定され、その左隣に続けて、中ドットを表す2ビットデータ「10」が2組設定され、更にその左隣に続けて、小ドットを表す2ビットデータ「01」が3組設定され、残った2組には、ドットを形成しないことを表す2ビットデータ「00」が設定されることになる。もっとも、これら2ビットデータを左詰めで設定することとしても良い。すなわち、大ドット、中ドット、小ドットの順番で左から順番に設定しても良い。
図40に示した変形例のドット形成有無決定処理のS706では、図41に示した対応関係を参照することによって、ドット個数を表すデータを、中間データに変換する処理を行う。尚、以上の説明では、図12に示した変換テーブルを参照することによって、分類番号および画素群階調値の組合せを、ドット個数を表す8ビットのコードデータに一旦変換した後、図41に示した対応関係に基づいて、コードデータを16ビットの中間データに変換するものとした。もっとも、コードデータと中間データとは1対1に対応付けられていることから、図12に示した変換テーブルに、8ビットのコードデータではなく16ビットの中間データを設定しておき、画素群の分類番号および画素群階調値の組合せから、直ちに中間データを取得することも可能である。このようにすれば、変換テーブルのデータ量は大きくなるものの、迅速に中間データを得ることができる。
以上のようにして中間データを取得したら、画素群に対応する順序値マトリックスを読み込んだ後(ステップS708)、画素群の中からドット形成有無を決定しようとする画素を1つ選択して(ステップS710)、順序値マトリックス中で選択した画素位置に設定されている順序値を取得する(ステップS712)。
次いで、先に取得しておいた中間データの中から、順序値に対応する箇所に設定されている2ビットデータを読み出すことによって、選択した画素についてのドット形成の有無を決定する(ステップS714)。図42は、中間データの中から順序値に対応する箇所のデータを読み出すことにより、ドット形成の有無を決定している様子を示した説明図である。図42(a)は、ある画素群に形成するドット個数のデータを変換して得られた中間データを例示したものである。前述したように中間データは、16ビット長のデータであり、2ビットずつ8組のデータから構成されている。また、図42(a)に示した中間データには、大ドットを表す2ビットデータ「11」が1組、中ドットを表す2ビットデータ「10」が2組、小ドットを表す2ビットデータ「01」が3組、ドットを形成しないことを表す2ビットデータ「00」が2組含まれており、これら2ビットデータが、大ドット、中ドット、小ドットの順序で右詰めに設定されている。
今、ドット形成有無を決定しようとしている画素の順序値が「3」であったとする。この場合は、中間データの中で、右から3組目に設定されている2ビットデータを読み出せば、順序値3の画素に形成すべきドットの種類を決定することができる。図42(b)には、中間データの右端から3組目にある2ビットデータを読み出している様子が、概念的に示されている。図示した例では、読み出した2ビットデータは「10」であるから、この画素には中ドットを形成するものと決定すればよい。仮に、順序値が「1」であれば、中間データの右端に設定されている2ビットデータを読み出して、大ドットを形成するものと決定すればよい。
このように、変形例のドット形成有無決定処理では、中間データの中から、順序値に相当する箇所に設定されている2ビットデータを読み出すという極めて簡単な操作によって、ドット形成の有無を決定することができる。これは、次の理由によるものである。先ず、中間データには、大ドット、中ドット、小ドットを表す2ビットデータが右詰めで設定されている。一方、図21あるいは図23に示したように、ディザ法を用いて大中小各ドットの形成有無を判断する処理では、大ドット、中ドット、小ドットの順番でドット形成の有無を決定している。従って、中間データに設定されている2ビットデータを右端から順番に読み出していけば、図21あるいは図23を用いて前述した手法を適用して各種ドットを形成する画素位置を決定した順番と同じ順番で、大ドット、中ドット、小ドットを表す2ビットデータの並びが得られることになる。
また、図21あるいは図23を用いて前述した手法では、ディザマトリックスに小さな閾値が設定されている画素から順番にドットが形成されていく。一方、順序値マトリックスに設定されている順序値は、ディザマトリックスに設定されている閾値の小さい順番を表している。従って、順序値は、図21あるいは図23を用いて前述した手法を用いてドット形成の有無を判断したときに、ドットが形成された順番と一致する。
このことから、対象としている画素の順序値が分かれば、図21あるいは図23の手法を適用したときに、その画素が画素群中で何番目にドットが形成された画素であるかを知ることができ、更に、中間データを右端から数えて順序値組目の2ビットデータを読み出せば、図21あるいは図23の手法を適用したときに得られるドット形成有無の判断結果を知ることができるのである。
尚、以上では、中間データの中で2ビットデータを読み出す箇所を順序値に応じて変更するものとして説明した。しかし、中間データの中で読み出す箇所を変えるのではなく、データを読み出す箇所は固定しておき、中間データを順序値に相当する組数だけシフトさせることとしても良い。この様にしても、ドット形成の有無を決定することができる。図42(c)は、中間データをシフトさせることによって、ドット形成有無を決定している様子を概念的に示した説明図である。図示した例では、中間データの右端にある2ビットデータを読み出すこととして、中間データを画素の順序値に応じた組数(具体的には順序値から1だけ少ない組数)だけ右方向にシフトさせている。図42(b)と図42(c)とを比較すれば明らかなように、どちらの操作を行った場合でも、結局は、中間データの中の同じ箇所に設定されている2ビットデータを読み出していることになる。データを所定のビット数だけシフトさせる処理は、比較的高速に実施可能であることから、この様にして中間データをシフトさせれば、順序値に応じた箇所の2ビットデータを迅速に読み出して、着目している画素についてのドット形成の有無を迅速に決定することができる。
以上のようにして、中間データの中から順序値に相当する箇所に設定されている2ビットデータを読み出すことにより、着目している画素についてのドット形成の有無を決定したら(図40のステップS712)、処理対象としている画素群内の全画素についてドット形成の有無を決定したか否かを判断する(ステップS714)。そして、画素群内に未だドット形成の有無を決定していない画素が残っている場合は(ステップS714:no)、ステップS710に戻って新たな画素を1つ選択し、選択した画素について上述した続く一連の処理を行った後、再び画素群内の全画素についてドット形成の有無を決定したか否かを判断する(ステップS716)。画素群内の全画素についてドット形成の有無を決定するまで、こうした操作を繰り返し、全画素について決定したと判断されたら(ステップS716:yes)、今度は画像中の全画素群について、上述した処理を行ってドット形成の有無を決定したか否かを判断する(ステップS718)。そして、未処理の画素群が残っていれば(ステップS718:no)、ステップS700に戻って新たな画素群を選択し、その画素群について続く一連の処理を行う。こうした操作を繰り返し、最終的に全画素群についての処理を終了したと判断されたら(ステップS718:yes)、図40に示した変形例のドット形成有無決定処理を終了する。
以上に説明したように、変形例のドット形成有無決定処理では、中間データの中から順序値に応じた適切な箇所に設定されている2ビットデータを読み出すだけで、簡便にドット形成の有無を決定することができる。第4の変形例の画像印刷処理では、このようにして迅速にドット形成の有無を決定することができるので、それだけ迅速に画像を印刷することが可能となる。
D−5.第5の変形例 :
以上に説明した第4の変形例のドット形成有無決定処理では、画素群毎の多値化結果値を受け取ると、図12に示した変換テーブルを参照することによって一旦、ドット個数を表す中間データに変換した後、順序値マトリックスを参照しながら、画素群内でドットを形成する画素位置を決定した。しかし、画素群毎の多値化結果値を受け取ると、各種ドットを形成する画素位置を直ちに決定することも可能である。以下では、こうした第5の変形例のドット形成有無決定処理について説明する。
理解の便宜を考えて、第5の変形例のドット形成有無決定処理の詳細な内容を説明する前に、多値化結果値から画素群内でドットを形成する画素位置を決定することが可能な原理について、簡単に説明しておく。前述した本実施例のドット形成有無決定処理では、図31に示したように、画素群毎に多値化結果値を受け取ると、画素群の分類番号を求めた後、多値化結果値と分類番号との組合せから、画素群内に形成される各種ドットの個数を決定した。そして、これらドットを形成する画素位置については、分類番号に対応した順序値マトリックスを参照することによって決定していた。すなわち、画素群の多値化結果値および分類番号が決まれば、画素群内の各画素に形成されるドットの種類を決定することができる。従って、予め、多値化結果値と分類番号との組合せ毎に、画素群内の各画素に形成されるドットの種類を求めて対応表に記憶しておけば、かかる対応表を参照するだけで、直ちにドット形成有無を決定することができるはずである。以下に説明する第5の変形例のドット形成有無決定処理は、このような考え方を採用することにより、画素群の多値化結果値から、各画素についてのドット形成の有無を迅速に決定することが可能となっている。
図43は、第5の変形例のドット形成有無決定処理で参照される変換テーブルを概念的に示した説明図である。図示されているように、第5の変形例の変換テーブルには、多値化結果値と分類番号との組合せに対応付けて、画素群内の各画素に形成されるドット種類を表すデータが設定されている。以下では、このようなデータをドットデータと呼ぶことにする。図43に示した変換テーブルを参照すれば、画素群の分類番号と画素群階調値との組合せから、対応するドットデータを直ちに読み出すことができる。例えば、分類番号i番、画素群階調値jであれば、ドットデータはDD(i,j)となる。こうして読み出されたドットデータには、画素群内の各画素についてドット形成の有無が記述されている。
図44は、第5の変形例の変換テーブルに設定されているドットデータのデータ構造を示した説明図である。図44(a)に示すように、ドットデータは2ビットずつのデータ8組から構成された16ビット長のデータとなっている。ここで、1つのドットデータが8組のデータから構成されているのは、本実施例の画像印刷処理では、1つの画素群には8つの画素が含まれていることに対応するものである。従って、例えば、1つの画素群が16個の画素から構成される場合は、1つのドットデータは16組のデータから構成されることになる。また、1組のデータが2ビットとなっているのは、本実施例のカラープリンタ200が1つの画素あたり、「大ドットを形成」、「中ドットを形成」、「小ドットを形成」、「ドットを形成しない」の4つの状態を表現し得ることに対応したものである。すなわち、1つの画素あたり4つの状態しか取り得ないのであれば、2ビットで表現可能である。そこで、画素1つ分に対応する1組のデータを、2ビットのデータ長としているのである。
図44に示すように、ドットデータを構成する8組のデータは、それぞれ画素群内の所定位置の画素に対応付けられている。例えば、図44(a)に示したドットデータの先頭にある1組目のデータは、図44(b)に示すように、画素群内で左上隅の画素に対応している。また、ドットデータの先頭から2組目のデータは、画素群内で上段の左から2番目の画素に対応している。このように、ドットデータを構成する8組のデータの各々は、画素群内の各位置の画素に予め対応付けられている。
そして、各組のデータの内容は、対応する画素に形成するドットの種類を表している。例えば、2ビットのデータ「11」は大ドットを形成することを意味している。2ビットのデータ「10」は中ドットを形成することを意味しており、「01」は小ドットを形成することを、そして「00」はドットを形成しないことを意味している。以上の説明から分かるように、図44(a)に例示したドットデータは、画素群の左上隅の画素には大ドットを形成し、上段の左から3番目の画素には中ドットを、下段の左から2番目の画素には小ドットを、画素群の右下隅の画素には中ドットを形成し、そして、その他の画素にはドットを形成しないことを表すデータとなっている。
このような変換テーブルを参照すれば、画素群の分類番号と多値化結果値とに基づいて、各画素についてのドット形成の有無を速やかに決定することが可能である。
次に、第5の変形例のドット形成有無決定処理において、多値化結果値から画素群内の各画素についてドット形成の有無を決定する具体的な処理について説明する。
図45は、第5の変形例のドット形成有無決定処理の流れを示すフローチャートである。以下、フローチャートに従って簡単に説明する。第5の変形例のドット形成有無決定処理を開始すると、処理対象とする画素群を1つ選択する(ステップS800)。次いで、選択した画素群の多値化結果値を取得する(ステップS802)。このとき、画素群の分類番号が与えられていなければ、分類番号も算出しておく。そして、分類番号および多値化結果値の組合せに基づいて、図43に示した変換テーブルを参照することにより、画素群内の各画素についてドット形成の有無を表したドットデータを読み出してやる(ステップS804)。第5の変形例のドット形成有無決定処理では、こうして変換テーブルから対応する位置に記憶されているドットデータを読み出すだけで、画素群内の各画素についてドット形成の有無を決定することができる。
次いで、全画素群についてドット形成の有無を決定したか否かを判断し(ステップS806)、未処理の画素群が残っていれば(ステップS806:no)、ステップS800に戻って新たな画素群を選択し、その画素群について続く一連の処理を行う。こうした操作を繰り返して、全画素群について処理を終了したと判断されたら(ステップS806:yes)、図45に示す第5の変形例のドット形成有無決定処理を終了する。
以上に説明したように、第5の変形例のドット形成有無決定処理では、変換テーブルを1回参照するだけで、多値化結果値から画素群内の各画素についてのドット形成有無を直ちに決定することができる。従って、前述した各種のドット形成有無決定処理に対しても、より一層迅速にドット形成の有無を決定することができ、延いては、極めて迅速に画像を出力することが可能となる。
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。例えば、以上の実施例では、同じ画素群については、画素群階調値が大きくなるほど、大きな値の多値化結果値に変換されるものとして説明した。しかし、画素群階調値が大きくなるほど小さな多値化結果値に変換したり、あるいは、画素群階調値の大小と多値化結果値の大小とを一部で逆転させても構わない。
また、上述した各種の実施例では、画素群を構成する画素数は固定されているものとして説明した。しかし、印刷しようとする画像の解像度に応じて、あるいは供給される画像データの解像度に応じて、画素群を最適な個数の画素により構成することも可能である。このような場合は、画素群を構成する画素数によって、多値化結果値の種類を抑制することとしてもよい。例えば、画素群を構成する画素数が多くなると、多値化結果値の取り得る種類も多くなるので、このような場合は、多値化結果値の種類を抑制することとしてもよい。こうすれば、画素群を構成する画素数が多くなった場合でも、画質の悪化を最小限に抑制したまま、迅速に画像を出力することが可能となる。
また、以上の各種実施例では、印刷用紙上にドットを形成して画像を印刷する場合について説明したが、本発明の適用範囲は画像を印刷する場合に限られるものではない。例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置などにも、本発明を好適に適用することができる。