以下では、本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って説明する。
A.実施例の概要:
B.装置構成:
C.第1実施例の画像印刷処理の概要:
C−1.個数データから画素位置を決定可能な原理:
C−2.第1実施例の多値化結果値生成処理:
C−3.分類番号の決定方法:
C−4.多値化用テーブル:
C−5.多値化結果値のデータ形式:
C−6.第1実施例のドット形成有無決定処理:
C−7.第1実施例の変形例:
D.第2実施例:
D−1.第2実施例の画像印刷処理の概要:
D−2.第2実施例の多値化結果値生成処理:
D−2−1.ディザ法を用いた大中小ドットの形成個数の決定処理:
D−2−2.第2実施例の多値化結果値生成処理の内容:
D−3.第2実施例のドット形成有無決定処理:
E.第3実施例:
E−1.第3実施例の多値化結果値生成処理:
E−2.第3実施例のドット形成有無決定処理:
E−3.第3実施例の多値化用テーブルの設定方法:
E−4.第3実施例の変形例:
A.実施例の概要 :
実施例の詳細な説明に入る前に、図1を参照しながら、実施例の概要について説明しておく。図1は、印刷システムを例にとって、本実施例の概要を説明するための説明図である。本印刷システムは、画像処理装置としてのコンピュータ10と、画像出力装置としてのプリンタ20等から構成されており、コンピュータ10に所定のプログラムがロードされて実行されると、コンピュータ10およびプリンタ20などが全体として、一体の画像出力システムとして機能する。プリンタ20は、印刷媒体上にドットを形成することによって画像を印刷する。コンピュータ10は、印刷しようとする画像の画像データに所定の画像処理を施すことによって、プリンタ20が画素毎にドットの形成を制御するためのデータを生成して、該プリンタ20に供給する。
一般的な印刷システムでは、次のようにして画像を印刷する。先ず、コンピュータで所定の画像処理を施すことにより、画像データを、画素毎にドット形成の有無を表すデータに変換する。次いで、得られたデータをプリンタに供給し、プリンタでは供給されたデータに従ってドットを形成することにより画像を印刷している。ここで、印刷しようとする画像の画素数が多くなると、それに伴って、画像処理に要する時間が増加して、画像を迅速に印刷することが困難となる。また、画素数が多くなるにつれて、画素毎にドット形成の有無を表すデータのデータ量が増加するので、コンピュータからプリンタにデータを出力するために要する時間が長くなり、それだけ印刷に要する時間が増加してしまう。
こうした点に鑑みて、図1に例示した印刷システムでは、次のようにして画像を印刷する。先ず、コンピュータ10では、画像を構成する画素を、所定の複数個ずつまとめて画素群を生成する。次いで、画素群を分割する複数の領域について、各領域の階調値を代表する代表階調値を決定する。図1では、画素群が2つの領域に分割されている様子が概念的に示されている。図中に破線で示した小さな正方形は、画素を概念的に表したものである。図示した例では、画素群は8つの画素から構成されており、細かい斜線が付された領域Aと、粗い斜線が付された領域Bの2つの領域に分割されている。代表階調値決定モジュールでは、このような領域毎に代表階調値を決定する。尚、画素群を常に分割するのではなく、画素群内の階調値に基づいて分割するか否かを判断することとしても良い。この様な場合は、分割しないものと判断された画素群については、代表階調値が1つだけ決定されることになる。
こうして得られた代表階調値は、多値化モジュールに供給されて多値化され、多値化結果値に変換される。代表階調値の多値化は、対応関係記憶モジュールに記憶されている多値化用対応関係を参照することによって行う。多値化用対応関係には、代表階調値と多値化結果値とが画素群毎に関連づけられているため、かかる対応関係を参照することで、代表階調値を迅速に多値化結果値に変換することができる。尚、代表階調値は、画素群内の領域毎に決定されるから、多値化結果値も領域毎に得られることになる。もちろん、画素群を分割するか否かを判断することとして、分割しないと判断された画素群については、多値化結果値が1つだけ得られることになる。コンピュータ10は、こうして得られた多値化結果値をプリンタ20に向かって出力する。
プリンタ20では、画素群内の各領域についての多値化結果値を受け取ると、各画素についてのドット形成の有無を領域毎に決定する。ドット形成の有無は、次のようにして決定される。先ず、画素群内で各画素にドットが形成される順番を示す順序値を、画素群毎に特定する。順序値の特定に際してはどのような方法を用いても構わないが、例えば、画素群毎に各画素の順序値を予め記憶しておき、かかる順序値を読み出して特定することとしても良い。そして、多値化結果値を受け取ると、多値化結果値と順序値とに基づいて、画素群内の各画素についてドット形成の有無を決定する。ここで、多値化結果値は画素群内の領域毎に供給されるので、それぞれの多値化結果値と順序値とに基づいて、領域毎にドット形成の有無を決定する。もちろん、多値化結果値が1つだけ供給された画素群については、その多値化結果値と順序値とに基づいて、画素群内の各画素についてのドット形成有無を決定すればよい。このようにして得られたドット形成有無の決定結果に従って、ドット形成モジュールがドットを形成することによって画像が印刷される。
ここで、画素毎にドット形成の有無を表すデータに比べれば、画素群毎の多値化結果値は遙かに小さなデータ量とすることができる。従って、コンピュータ10から画素毎にドット形成の有無を表したデータをプリンタ20に供給する代わりに、画素毎の多値化結果値を供給してやれば、極めて迅速にデータを転送することが可能となる。
また、多値化結果値は、代表階調値と多値化結果値とが関連づけられた多値化用対応関係を参照することによって、迅速に求めることができる。このため、生成した多値化結果値をプリンタ20に迅速に供給可能なことと相まって、たとえ画素数の多い画像であっても迅速に画像を印刷することが可能となる。また、対応関係を参照して多値化結果値を生成すれば、極めて簡素な処理で生成することができる。このため、多値化結果値を生成するためには、コンピュータ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は、キャリッジモータ230を駆動することによって、各色のインク吐出用ヘッド244ないし247を印刷用紙Pに対して主走査方向に移動させ、また紙送りモータ235を駆動することによって、印刷用紙Pを副走査方向に移動させる。制御回路260は、キャリッジ240の主走査および副走査の動きに同期させながら、適切なタイミングでノズルを駆動してインク滴を吐出することによって、カラープリンタ200は印刷用紙上にカラー画像を印刷している。
尚、カラープリンタ200にも、制御回路260内にはCPU,RAM,ROMなどが搭載されていることから、コンピュータ100が行う処理をカラープリンタ200内で実施することも可能である。このような場合は、デジタルカメラ120などで撮影した画像の画像データをカラープリンタ200に直接供給して、制御回路260内で必要な画像処理を実施することにより、カラープリンタ200から直接画像を印刷することも可能となる。
C.第1実施例の画像印刷処理の概要 :
以下では、上記のようなコンピュータ100およびカラープリンタ200が、画像を印刷するために、それぞれの内部で行われる画像処理(画像印刷処理)について説明する。ここでは、理解の便宜を図るため、初めに画像印刷処理の全体像について簡単に説明し、次に、こうした画像印刷処理が可能である原理について説明する。そして最後に、それぞれの処理の詳細な内容について説明する。
尚、以下では、画像印刷処理の前半部分はコンピュータ100で実施され、後半部分はカラープリンタ200で実施されるものとして説明するが、これらの処理をカラープリンタ200の内部で実施したり、あるいはデジタルカメラ120等、画像データを生成する機器の内部で実施することも可能である。もちろん、画像印刷処理の前半部分の処理をデジタルカメラ120などで実施して、後半部分の処理をカラープリンタ200で実施することとしても良い。すなわち、本実施例の画像印刷処理によれば、後ほど詳細に説明するように、前半部分の処理および後半部分の処理をたいへん簡素なものとすることができる。このため、カラープリンタ200やデジタルカメラ120などのように、コンピュータ100のようには高い処理能力を有していない機器を用いた場合でも、画像印刷処理を迅速に実施することが可能であり、従って、コンピュータ100を使用せずとも十分に実用的な印刷システムを構成することができる。
図5は、第1実施例の画像印刷処理の全体的な流れを示すフローチャートである。以下では、図5を参照しながら、画像印刷処理の全体像について簡単に説明する。第1実施例の画像印刷処理を開始すると、先ず初めに、コンピュータ100が画像データの読み込みを開始する(ステップS100)。ここでは、画像データはRGBカラー画像データであるものとして説明するが、カラー画像データに限らず、モノクロ画像データについても同様に適用することができる。また、カラープリンタに限らず単色プリンタについても同様に適用することが可能である。
カラー画像データの読み込みに続いて、色変換処理を行う(ステップS102)。色変換処理とは、R,G,Bの階調値の組合せによって表現されているRGBカラー画像データを、印刷のために使用されるインク各色についての階調値の組合せによって表現された画像データに変換する処理である。前述したように、カラープリンタ200はC,M,Y,Kの4色のインクを用いて画像を印刷している。そこで、第1実施例の色変換処理ではRGB各色によって表現された画像データを、C,M,Y,Kの各色の階調値によって表現されたデータに変換する。色変換処理は、色変換テーブル(LUT)と呼ばれる3次元の数表を参照することで行う。LUTには、RGBカラー画像データに対して、色変換によって得られるC,M,Y,K各色の階調値が予め記憶されている。ステップS102の処理では、このLUTを参照することにより、RGBカラー画像データをC,M,Y,K各色の画像データに迅速に色変換することが可能である。
色変換処理を終了すると、解像度変換処理を開始する(ステップS104)。解像度変換処理とは、画像データの解像度を、プリンタ200が画像を印刷する解像度(印刷解像度)に変換する処理である。画像データの解像度が印刷解像度よりも低い場合は、画素間に新たな画像データを生成し、逆に画像データの解像度が印刷解像度よりも高い場合には、一定の割合でデータを間引くことによって、画像データの解像度を印刷解像度に一致させる処理を行う。
今日では、高画質化の要請、あるいは大画像化の要請に伴って、解像度変換処理では、画像データをより高解像度の印刷解像度に変換することがしばしば行われている。この場合、補間演算を行って画素間に新たな画像データを生成することも可能であるが、簡便には1つの画素を複数の画素に分割することで、新たな画像データを生成することとしても良い。もちろん、1つの画素を単純に分割して高解像度化する場合、隣接する画素間でより滑らかな階調変化が表現されているわけではないので、実質的な解像度が増加しているわけではなく、見かけ上の解像度が増加したに過ぎない。しかし、ドットを形成して画像を印刷する場合、1つの画素で表現可能な階調数は高々数階調に過ぎず、画像データが表現可能な階調数に対して遙かに少ないことから、この様な解像度変換であっても画質の向上には有効であり、単純に画素を分割して見かけの解像度を高解像度化する解像度変換処理も一般的に行われている。
以上のようにして解像度を印刷解像度に変換したら、コンピュータ100は、多値化結果値生成処理を開始する(ステップS106)。多値化結果値生成処理の詳細な内容は後ほど詳しく説明することとして、ここでは概要のみを説明する。この処理では、互いに所定の位置関係にある画素を所定個数ずつ画素群としてまとめることにより、1つ画像を複数の画素群に分割する。画素群としてまとめられ画素数は、必ずしも全ての画素群が同数である必要はなく、例えば、複数の画素数を規則的に切り換えたり、あるいは画像中での位置に応じて画素群にまとめられる画素数を切り換えることも可能であるが、ここでは理解の便宜から、最も単純な場合として全画素群が同数の画素を有するものとして説明する。
次いで、以下に説明する第1実施例においては、画素群にまとめられた各画素の画像データに基づいて、画素群を分割するか否かを判断する。そして、分割しない画素群については、画素群内の画像データを代表する階調値(代表階調値)を決定する。一方、分割すると判断した画素群については、画素群を分割して生成した各領域の画像データを代表する階調値を求め、それぞれの領域の代表階調値として決定する。すなわち、画素群の中には、分割されて複数の代表階調値が決定される画素群と、分割されることなく1つだけ代表階調値が決定される画素群とが存在することになる。もっとも、分割するか否かの判断を省略して、画素群を常に分割するものとして扱うことも可能である。この場合は、全ての画素群について複数の代表階調値が決定されることになる。常に複数の代表階調値が得られる場合を基準に考えれば、以下に説明する第1実施例の処理は、1つだけ代表階調値が得られる場合を追加したものと考えることができる。従って、この意味からは、画素群を常に分割する処理の方が単純な処理と見ることもできる。しかし、画素群を常に分割することの技術的な意味を理解するためには、先に、画素群を分割しない場合について理解しておいた方が便宜である。そこで、第1実施例としては、画素群を分割するか否かを判断する実施例について説明し、その後に、第1実施例の変形例として、画素群を常に分割する実施例について説明する。
画素群あるいは画素群を分割する各領域について代表階調値を決定したら、この代表階調値を多値化することによって多値化結果値に変換する。多値化結果値が示す内容はどのようなものとすることも可能であるが、ここでは画素群内に形成すべきドットの個数を示すデータであるものとする。すなわち、代表階調値は画素群内の各画素の画像データを代表する階調値であるから、代表階調値が大きくなると、それにつれて画素群内に形成されるドットの個数は増加する。従って、画素群の代表階調値から該画素群内に形成するドット個数を決定する処理を、一種の多値化と見ることができ、この場合は、ドットの個数が多値化結果値に相当していることになる。尚、多値化結果値は、ドットの個数に変換することが可能な値であれば良い。すなわち、必ずしもドットの個数そのものではなく、間接的にドットの個数を表す値であっても構わない。
また、詳細には後述するが、代表階調値を多値化する処理は、代表階調値と多値化結果値とを画素群毎に対応付けた多値化用テーブルを参照することにより、迅速に行うことができる。こうして多値化結果値が得られたらカラープリンタ200に出力する。ここで、画素群が複数の領域に分割された場合は複数の代表階調値が得られるから、多値化結果値も複数得られている。従って、この様な画素群については、複数の多値化結果値がカラープリンタ200に出力されることになる。多値化結果値生成処理では、このようにして、各画素についての画像データに基づいて、画素群毎に1つまたは複数の多値化結果値を生成した後、カラープリンタ200に供給する処理を行う。
カラープリンタ200の制御回路260に内蔵されたCPUは、コンピュータ100から多値化結果値を受け取ると、ドット形成有無決定処理を開始する(ステップS108)。すなわち、カラープリンタ200は、画像を構成する各画素にドットを形成することによって画像を印刷していることから、画像の印刷に先立って、各画素についてドットを形成するか否かを決定しておく必要がある。そこで、コンピュータ100から画素群毎に多値化結果値を受け取ると、画素群内の各画素についてドットを形成するか否かを決定する処理を行うのである。
ここで多値化結果値から画素群内の各画素についてドット形成の有無を決定する手法としては、いわゆる濃度パターン法と呼ばれる手法が知られているが、本実施例のドット形成有無決定処理では、多値化結果値に加えて、画素群毎に設定された順序値を用いてドット形成有無を決定する点で大きく異なっている。この様にして各画素のドット形成の有無を決定しているため、次のような大きな利点を得ることができる。すなわち、一般的な濃度パターン法では、実質的な解像度が、多値化を行った画素群の解像度まで低下してしまい、画質の悪化を招き易い傾向がある。これに対して、本実施例のドット形成有無決定処理では、画素群毎に記憶されている順序値を参照しながらドット形成の有無を決定しているために、画素群の大きさに依存して画質が悪化することがない。更に、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクと呼ばれるディザマトリックスを用いることで実現されるような、ドットが良好に分散した高画質な画像を印刷することが可能となる。本実施例のドット形成有無決定処理の詳細な内容、および、かかる処理を行ってドット形成の有無を決定することで、こうした特性が得られる理由については、後ほど詳しく説明する。
以上のようにして、画素群内の各画素についてドット形成の有無を決定したら、決定したドット形成の有無に従って、出力媒体上にドットを形成する処理を行う(ステップS110)。すなわち、図3を用いて説明したように、キャリッジ240の主走査および副走査を繰り返しながらインク吐出用ヘッドを駆動してインク滴を吐出することにより、印刷用紙上にインクのドットを形成する。こうしてドットを形成することにより、画像データに対応した画像が印刷されることになる。
このように、第1実施例の画像印刷処理では、コンピュータ100からカラープリンタ200に向かって、多値化結果値を供給するものの、画素毎にドット形成の有無を示すデータは供給していない。画素毎にドット形成の有無を表現することに比べれば、多値化結果値は遙かに少ないデータ量で表現することができることから、このような方法を採用することで、コンピュータ100からカラープリンタ200に向かって極めて迅速にデータを供給することが可能となる。
例えば、各画素に形成可能なドットは1種類であるとする。この場合、各画素はドットが形成されるか否かのいずれかの状態しか取り得ないから画素あたりのデータ長は1ビットとなる。また、1つの画素群には8つの画素がまとめられているとすれば、画素群内の全画素についてドット形成の有無を表現するためには、8ビットのデータ長が必要となる。一方、画素群内に形成されるドットの個数は、0個〜8個のいずれかの9通りしか取り得ない。9通りであれば4ビットあれば表現することができる。従って、画素群の代表階調値をドット個数のデータに多値化しておけば、多値化結果値は4ビットのデータ長で表現可能となる。このように、画素毎にドット形成の有無を表すデータに比べて、多値化結果値は遙かに少ないデータ量で表現することができるので、コンピュータ100からカラープリンタ200に向かって極めて迅速にデータを供給することが可能となる。もちろん、画素群を分割した場合には画素群あたり複数の多値化結果値を供給しなければならないが、後述するように、画像データは近接する画素間では近似した階調値を取る傾向があるため、画素群が分割される割合は僅かである。このため、画像全体としてはカラープリンタ200に供給されるデータ量の増加は僅かなものに過ぎず、迅速に多値化結果値を供給することが可能である。
加えて、詳細には後述するが、各画素についてのドット形成の有無を適切に決定してやれば、多値化結果値を供給した場合でも、画質が悪化することはない。特に、所定の条件下では、画素毎にドット形成の有無を表すデータを供給した場合と全く同じ結果を得ることが可能である。加えて、画素群内の各画素の画像データに基づいて画素群を分割し、それぞれの領域についての多値化結果値を生成してカラープリンタ200に供給することができるので、画素群内で画像データが大きく変化している場合でも、画質を低下させることなく画像を印刷することが可能である。
更に、後述するアルゴリズムを用いれば、多値化結果値を生成する処理や、多値化結果値から各画素についてのドット形成の有無を決定する処理は、極めて簡素な処理によって実現することができ、しかも極めて迅速に実行することが可能である。このため、コンピュータ100のような高度な処理能力を有する画像処理装置を用いずとも、例えばデジタルカメラ120やカラープリンタ200などの内部で実行することも可能である。こうした場合には、デジタルカメラ120で撮影した画像データを直接カラープリンタ200に供給して、高画質なカラー画像を印刷することも可能となる。
C−1.個数データから画素位置を決定可能な原理 :
以下では、上述した方法を採用した場合、すなわち、画素群に形成するドット個数を示す多値化結果値を、コンピュータ100からカラープリンタ200に供給し、この多値化結果値に基づいて、画素群内の各画素についてドット形成の有無を決定した場合でも、画質を悪化させることなく画像を印刷することが可能な原理について説明する。
説明の都合上、先ず初めに、ディザ法について説明する。ディザ法とは、画像データを画素毎にドット形成の有無を表すデータに変換するために用いられる代表的な手法である。この手法では、ディザマトリックスと呼ばれるマトリックスに閾値を設定しておき、画像データの階調値とディザマトリックスに設定されている閾値とを画素毎に比較して、画像データの階調値の方が大きい画素についてはドットを形成すると判断し、そうでない画素についてはドットを形成しないと判断する。このような判断を画像中の全画素について行えば、画像データを画素毎にドット形成の有無を表すデータに変換することができる。
図6は、ディザマトリックスの一部を概念的に例示した説明図である。図示したマトリックスには、横方向(主走査方向)に128画素、縦方向(副走査方向)に64画素、合計8192個の画素に、階調値1〜255の範囲から万遍なく選択された閾値がランダムに記憶されている。ここで、閾値の階調値が1〜255の範囲から選択されているのは、本実施例では、画像データが階調値0〜255の値を取り得る1バイトデータとしていることに加えて、画像データの階調値と閾値とが等しい場合には、その画素にはドットを形成するものと判断していることによるものである。
すなわち、ドットが形成されるのは画像データの階調値が閾値よりも大きい画素に限る(すなわち階調値と閾値が等しい画素にはドットは形成しない)とした場合、画像データの取り得る最大階調値と同じ値の閾値を有する画素には、決してドットが形成されないことになる。こうしたことを避けるため、閾値の取り得る範囲は、画像データの取り得る範囲から最大階調値を除いた範囲とする。逆に、画像データの階調値と閾値が等しい画素にもドットを形成するとした場合、画像データの取り得る最小階調値と同じ値の閾値を有する画素には、常にドットが形成されてしまうことになる。こうしたことを避けるため、閾値の取り得る範囲は、画像データの取り得る範囲から最小階調値を除いた範囲とする。本実施例では、画像データの取り得る階調値が0〜255であり、画像データと閾値が等しい画素にはドットを形成するとしていることから、閾値の取り得る範囲を1〜255としておくのである。尚、ディザマトリックスの大きさは、図6に例示したような大きさに限られるものではなく、縦と横の画素数が同じマトリックスも含めて種々の大きさとすることができる。
図7は、ディザマトリックスを参照しながら、各画素についてのドット形成の有無を判断している様子を概念的に示した説明図である。ドット形成の有無を判断するに際しては、先ず、判断しようとする画素を選択し、この画素についての画像データの階調値と、ディザマトリックス中で対応する位置に記憶されている閾値とを比較する。図7中に示した細い破線の矢印は、画像データの階調値と、ディザマトリックスに記憶されている閾値とを、画素毎に比較していることを模式的に表したものである。例えば、画像データの左上隅の画素については、画像データの階調値は97であり、ディザマトリックスの閾値は1であるから、この画素にはドットを形成すると判断する。図7中に実線で示した矢印は、この画素にはドットを形成すると判断して、判断結果をメモリに書き込んでいる様子を模式的に表したものである。一方、この画素の右隣の画素については、画像データの階調値は97、ディザマトリックスの閾値は177であり、閾値の方が大きいので、この画素についてはドットを形成しないと判断する。ディザ法では、こうしてディザマトリックスを参照しながら、画素毎にドットを形成するか否かを判断することで、画像データを画素毎にドット形成の有無を表すデータに変換する。
図8は、ディザ法を用いて画像データをドット形成の有無を表すデータに変換している様子を示した説明図である。図8(a)は、画像データの一部を拡大して示したものであり、図中の小さな矩形は画素を、そして、それぞれの矩形の中に表示された数値は画像データの階調値を表している。図示されているように、画像データは、隣接する画素間では近似する(若しくは同一の)階調値が割り当てられる傾向がある。近年では、高画質化の要請から画像データの解像度は高くなる傾向にあるが、隣接する画素間で近似若しくは同一の階調値が割り当てられる傾向は、画像データの解像度が高くなるほど顕著となっている。更に、前述したように、画像データの解像度を印刷解像度に変換する際に、画素を複数の画素に分割して高解像度化した場合には、同一の画素から分割して生成された画素は全て同じ階調値を有することになる。
図8(b)は、ディザマトリックスの対応する位置に閾値が設定されている様子を示している。図8(a)に示した画像データの階調値と、図8(b)に示したディザマトリックスの閾値とを画素毎に比較することによって、ドット形成の有無を判断する。図8(c)は、こうして画素毎にドット形成の有無を判断した結果を示しており、図中で斜線を付した画素がドットを形成すると判断された画素である。
ここで、隣接する画素を所定数ずつ画素群としてまとめ、画素群内でドットを形成すると判断された画素の個数を数えることを考える。一例として、主走査方向(図8中では横方向)に4画素分、副走査方向(図8中では縦方向)に2画素分の、合計8画素ずつを画素群としてまとめるものとする。図8(d)は、こうしてまとめられたそれぞれの画素群について、ドットを形成すると判断された画素を数えることによって得られたドット個数を示している。第1実施例の画像印刷処理において、コンピュータ100からカラープリンタ200に供給される多値化結果値は、このような画素群毎に得られたドット個数のデータである。ドット個数を示す多値化結果値には、ドットを形成する画素位置に関する情報は含まれていない。しかし、次のようにすれば、ドットの個数から、ドットを形成する画素位置の情報を復元して、画素毎にドット形成の有無を表すデータを生成することができる。
図9は、ドット個数を示すデータから、画素毎にドット形成の有無を表すデータを生成する様子を示した説明図である。図9(a)は、図8で画素群毎に形成するドットの個数を数えて得られた値を表している。また、図9(b)は、図8で画素毎にドット形成の有無を判断するために参照したディザマトリックスを示している。前述したようにディザ法では、画像データの階調値と、ディザマトリックスの対応する画素位置に設定された閾値とを比較して、画像データの階調値の方が大きければ、その画素にはドットを形成すると判断しており、ディザマトリックスの閾値が小さくなるほどドットが形成され易くなる。このことから、ディザマトリックスはドットが形成される画素の順番を表していると考えることができる。
ディザマトリックスの有するこうした性質に着目すれば、画素群内に形成されるドットの個数から、各画素についてのドット形成の有無を決定することができる。例えば、図9(a)に示した一番左上隅の画素群について説明すると、この画素群に形成されるドット個数は3個である。また、図9(b)に示したディザマトリックスを参照すれば、この画素群内では、左上隅にある画素位置すなわち閾値「1」が設定されている画素位置が最もドットが形成され易い画素であると言える。従って、この画素群内で3つ形成されるドットの中の1つは、左上隅の画素に形成されているものと考えることができる。同様にして、残りの2つのドットは、この画素群内で2番目にドットが形成され易い画素(すなわち図9(b)のディザマトリックスで閾値「42」が設定されている画素)と、3番目にドットが形成され易い画素(すなわち閾値「58」が設定されている画素)とに形成されるものと考えることができる。
もちろん、ドット形成の有無は、ディザマトリックスに設定された閾値だけでなく、画像データの階調値によっても影響されるから、画像データの階調値が極端に大きければ、より小さな閾値が設定されている画素よりも先にドットが形成されることも起こり得る。しかし、前述したように画像データには、隣接する画素には近似する(若しくは同一の)階調値が割り当てられる傾向があるから、ほとんどの場合はドットが形成され易い画素(すなわちディザマトリックスに設定された閾値の小さな画素)からドットが形成されると考えることができる。
図9(a)に示した他の画素群についても、同様にして、ドット個数とディザマトリックスの閾値とに基づいて、各画素についてのドット形成の有無を決定することができる。例えば、図9(a)の上述した画素群の下にある画素群(左端上から2番目の画素群)については、ドット個数は3個であるから、図9(b)のディザマトリックスを参照すれば、これら3つのドットは、閾値「22」が設定された画素と、閾値「33」が設定された画素と、閾値「91」が設定された画素とに、それぞれ形成されると考えることができる。
図9(a)に示した4つの画素群について、このようにしてドット個数のデータからドットを形成する画素位置を決定すると、図9(c)に示した結果を得ることができる。図9(c)中で、斜線を付して示した画素はドットを形成すると判断された画素である。図9(c)と図8(c)とを比較すれば明らかなように、ドットの個数に基づいて決定したドットの分布は、画素毎に画像データと閾値とを比較して決定したドットの分布と一致している。このことは、ディザマトリックスを参照して画素毎にドット形成の有無を判断し、画素群内に形成されるドットの個数のみが分かれば、画素位置までは分からなくても、ディザマトリックスとドットの個数とに基づいて、各画素のドット形成の有無を適切に決定可能なことを示している。このことから、画素群に形成するドットの個数を示す多値化結果値をコンピュータ100からカラープリンタ200に供給した場合でも、カラープリンタ200側でドット形成の有無を適切に決定することができるので、画質を悪化させることなく画像を印刷することが可能となるのである。
また、個数データからドットを形成する画素位置を適切に決定するためには、画像データの階調値が画素群内で大きく異なっていなければ良い。前述したように、画像データは隣接する画素間では近似した階調値を有する特性があるから、こうした条件はほとんどの場合に成立しており、従って、ドットの個数を示す多値化結果値をカラープリンタ200に供給して、多値化結果値からドット形成の有無を決定した場合でも、画質を悪化させることなく画像を印刷することができるのである。
特に、次の2つの条件が満足される場合には、画像データの階調値とディザマトリックスの閾値とを比較してドット形成の有無を画素毎に判断した結果と、完全に同じドット分布が得られることになる。先ず1つ目の条件は、画素群内で各画素の階調値が同一の値を有することであり、2つ目の条件は、コンピュータ100側で画素毎にドット形成の有無を判断する際に参照したディザマトリックスと、カラープリンタ200側で個数データから画素位置を決定するために参照するディザマトリックスとが、同一のマトリックスであることである。また、詳細には後述するが、本実施例の多値化結果値生成処理では、画素群を複数の領域に分割して多値化結果値を生成することが可能であり、この場合は、分割した領域内で各画素の階調値が同一の値となっていればよい。例え、画素群内の各画素が同一の階調値を有していない場合でも、画素群を複数の領域に分割することで、領域内の各画素の階調値が同一になる場合も多く存在する。このため、画素群を分割して多値化結果値を生成可能とすることで、画質を改善することが可能となる。
尚、図7で説明したディザ法においては、ディザマトリックスに設定された閾値と画像データとの階調値とを比較して、いずれの値が大きいかによってドット形成の有無を判断している。これに対して、ドットの個数から画素毎のドット形成の有無を決定する場合には、図9を用いて説明したように、画素群内でドットが形成される順番がドットの個数よりも小さいか、あるいはドットの個数と同じ画素についてはドットを形成すると判断し、それ以外の画素についてはドットを形成しないと判断している。すなわち、画素位置を決定するためには、閾値の値まで必要なわけではなく、画素群内でドットが形成され易い順序(換言すれば、ドットが形成される順番)が分かっていれば良い。このことから、図9(b)に示すディザマトリックスの代わりに、図9(d)に示すような画素群内の各画素について、ドットが形成される順番を示す値(順序値)が設定されたマトリックス(本明細書中では、このようなマトリックスを順序値マトリックスと呼ぶものとする)を記憶しておき、画素群毎に順序値マトリックスを参照しながら、各画素についてのドット形成の有無を決定することも可能である。
加えて、このように、ディザマトリックスに基づいてドット形成の有無を決定する場合、ディザ法を適用してドット形成の有無を決定した時とほぼ同等のドット分布を得ることができる。このことから、ディザマトリックスの特性を適切に設計しておくことで、ドットの分布を制御することが可能である。例えば、いわゆるブルーノイズマスク特性を有するマトリックスや、あるいはグリーンノイズマスク特性を有するマトリックスを使用すれば、画像データを画素群単位で処理しているにも関わらず、これらディザマトリックスの特性に依存したドット分布の画像を得ることができる。以下では、この点につき、若干補足して説明する。
図10は、ブルーノイズマスク特性を有するディザマトリックス、およびグリーンノイズマスク特性を有するディザマトリックスについて、マトリックスに設定されている閾値の空間周波数特性を概念的に例示した説明図である。図10では、表示の都合から、横軸には空間周波数の代わりに周期を取って表示している。言うまでもなく、周期が短くなるほど、空間周波数は高くなる。また、図10の縦軸は、それぞれの周期での空間周波数成分を示している。尚、図示されている周波数成分は、ある程度変化が滑らかとなるように平滑化された状態で示されている。
図中の実線は、ブルーノイズマスクの空間周波数成分を概念的に示している。図示されているように、ブルーノイズマスクは、1周期の長さが2画素以下の高い周波数領域に最も大きな周波数成分を有している。ブルーノイズマスクの閾値は、このような空間周波数特性を有するように設定されていることから、ブルーノイズマスクに基づいてドット形成の有無を判断した場合には、ドットが互いに離れた状態で形成される傾向にある。また、図中の破線は、グリーンノイズマスクの空間周波数成分を概念的に示している。図示されているように、グリーンノイズマスクは、1周期の長さが2画素から十数画素の中間周波数領域に最も大きな周波数成分を有している。グリーンノイズマスクの閾値は、このような空間周波数特性を有するように設定されていることから、グリーンノイズマスクに基づいてドット形成の有無を判断した場合には、数ドット単位で隣接してドットが形成されながら、全体としてはドットの固まりが分散した状態で形成される傾向にある。
従って、このようなブルーノイズマスク特性、あるいはグリーンノイズマスク特性を有するディザマトリックスに基づいて、画素群の個数データを決定したり、あるいは、画素位置を決定してやれば、画素群単位で処理しているにも関わらず、ブルーノイズマスク特性あるいはグリーンノイズマスク特性を反映した分布となるように、ドットを形成することが可能となる。
また、以上の説明では、図9に示したように、ディザマトリックスに基づいて生成されて、複数種類の順序値マトリックスを予め記憶しておき、画素群の個数データを受け取ると、その画素群に対応した順序値マトリックスを用いて、各画素についてのドット形成の有無を決定するものとして説明した。しかし、より簡便には次のようにしてドット形成の有無を決定しても良い。すなわち、予め複数の順序値マトリックスを記憶しておき、個数データを受け取ると、画素群毎にランダムに選択した1の順序値マトリックスを用いて、各画素についてのドット形成の有無を決定しても良い。更に、より簡便には、順序値マトリックスを1組だけ記憶しておき、このマトリックスを用いて各画素についてのドット形成の有無を決定することも可能である。
C−2.第1実施例の多値化結果値生成処理 :
以下では、図5に示した第1実施例の画像印刷処理において、画像データから多値化結果値を生成する処理(ステップS106)について説明する。図11は、第1実施例の多値化結果値生成処理の流れを示すフローチャートである。ここでは、多値化結果値生成処理はコンピュータ100で実施されるものとして説明するが、後述するように、多値化結果値生成処理は簡素な処理とすることができるので、カラープリンタ200あるいはデジタルカメラ120などの内部で実施することも可能である。以下、フローチャートに従って説明する。
第1実施例の多値化結果値生成処理を開始すると、先ず初めに、互いに隣接する所定個数の画素をまとめて画素群を生成する(ステップS200)。ここでは、主走査方向に4画素分、副走査方向に2画素分の合計8つの画素を画素群にまとめるものとする。尚、画素群としてまとめる画素は、このように矩形状に縦横の位置が揃った画素である必要はなく、互いに隣接し且つ所定の位置関係にある画素であれば、どのような画素を画素群としてまとめても良い。
次いで、画素群の分類番号を決定する(ステップS202)。分類番号の意味するところについては後述するが、ここでは画素群を識別するために用いられる番号と考えておく。画素群の分類番号は、後述する方法を用いれば極めて簡便に決定することができる。
次いで、画素群を分割するか否かを、画素群にまとめた各画素の階調値に基づいて判断し(ステップS204)、画素群を分割しないと判断した場合は(ステップS204:no)、画素群の代表階調値を決定する(ステップS206)。一方、画素群を分割すると判断した場合は(ステップS204:yes)、画素群を分割して生成した各領域について代表階調値を決定する(ステップS212)。画素群を分割する態様、すなわち、画素群を分割して生成する領域の個数や、それぞれの領域の大きさは種々に設定することができるが、ここでは、理解の便宜のために最も単純な態様として、画素群を左右の2つの領域に等分するものとして説明する。
図12は、画素群にまとめられた各画素の階調値に基づいて、画素群を分割するか否かを判断して、代表階調値を決定する様子を概念的に示した説明図である。図中に示した大きな矩形は画素群を表しており、画素群内の小さな正方形は画素を表している。また、画素を表す正方形の中に表示された数字は、その画素に割り当てられた画像データの階調値を表している。図12(a)の左側に示すように、画素群内の各画素の階調値が同じであれば、その画素群は分割しないと判断して、各画素の階調値を画素群の代表階調値とする。図12(a)の右側には、各画素の階調値を画素群の代表階調値として決定した様子を概念的に表している。
前述したように、画像データは近接する画素間では近似した階調値を取る傾向があるから、画素群内の各画素の階調値は図12(a)のような分布となることが多いと考えられる。また、画像データの解像度を印刷解像度に変換する処理において、1つの画素を複数の画素に分割することで解像度を高くした場合には、ほとんどの画素群でこのような階調値の分布を取るものと考えられる。更に、解像度を変換する際に、1つの画素を主走査方向(図上では左右方向)に4分割し、副走査方向(図上では上下方向)に2分割することで高解像度化した場合には、全ての画素群は必ず、図12(a)に示す階調値分布を取ることになる。
これに対して、図12(b)に示すように、階調値が画素群の中央で2つに分かれ、左側の領域と右側の領域とで異なっている場合は、画素群を左右2つの領域に分割すればよい。そして、この場合は、それぞれの領域の階調値を代表階調値とすればよい。図12(b)に示した例では、画素群の左側の領域の階調値は「97」であり右側の領域の階調値は「135」であるから、階調値97、135をそれぞれの領域の代表階調値とする。また、このような場合でも、左右の領域で階調値に大きな差がない場合(例えば、階調差が所定値以下である場合)は、画素群を分割しないと判断することも可能である。この場合の代表階調値としては、左右いずれかの領域の階調値を用いることができる。あるいは階調値の平均値を代表階調値としたり、画素群の中で最も画素数の多い階調値を代表階調値としてもよい。
また、画像データの解像度を印刷解像度に変換する際に、少なくとも主走査方向については解像度を2倍に変換することがしばしば行われている。このような解像度変換が行われると、1つの画素から主走査方向には2つの画素が生成されることになるので、たとえ、画素群内の各画素の階調値が異なる値を取る場合でも、階調値の分布は、図12(b)に示したように、画素群の中央で左右に分かれたような分布になることが多いと考えられる。特に、主走査方向だけでなく、副走査方向についても解像度を2倍にするような変換が行われた場合、1つの画素が縦横2列ずつの4画素に変換されることになるから、仮に、画素群内に異なる階調値が含まれているとしても、必ず図12(b)に示すような階調値分布を取ることになる。
もちろん、画素群内に階調値分布が存在する場合、必ず図12(b)に示した分布を取るとは限らない。例えば、1つの画素から主走査方向に並ぶ2つの画素を生成するような解像度変換を行った場合でも、元になる画素の階調値が副走査方向に異なっていれば、図12(c)に示すような階調値分布となることがある。ここでは理解の便宜を図るために、本実施例では画素群を分割する態様(分割パターン)は、画素群を左右2つの領域に等分するパターンのみを取るものとしているから、このような階調値分布の場合は、図12(b)に示したパターンで分割すると判断し、左側の領域の代表階調値については、領域内に含まれる階調値のいずれかを選択してやればよい。尚、このとき階調値135を選択した場合は、左右いずれの領域の代表階調値も階調値135となるので、これら領域を統合することができ、結局、画素群を分割しないと判断した場合と同様に取り扱うことができる。
あるいは、左側の領域には階調値97、135の2つの階調値が含まれているから、これら階調値の平均値を代表階調値としても良い。平均値の算出に際しては、単純に階調値の平均を算出しても良いし、あるいは階調値毎に画素数に相当する重みを付けて平均することとしても良い。図12(c)の右側には、このようにして左側の領域の代表階調値を決定した様子を概念的に表している。
もちろん、印刷解像度への変換は、画素を分割して高解像度化する変換に限らず、補間演算を行って画素間に新たな階調値を生成する場合や、更には所定の割合で画素を間引くことにより低解像度化する場合もある。これらの場合には、画素群内の階調値分布は更に種々の分布を取るものと考えられる。図12(d)ないし図12(f)には、こうした種々の階調値分布を取る場合に、画素群の分割有無を判断して、代表階調値を決定する様子が例示されている。
例えば、図12(d)に示されているように、階調値がちょうど中央で左右の領域に分かれるわけではないものの、大まかにはほぼ中央で分かれている場合は、画素群を左右2つの領域に等分することができる。あるいは、図12(e)に示されているように、画素群内の一部の画素では異なる階調値を取るものの、他の画素群については同じ階調値となっている場合には、画素群を分割しないものと判断することができる。更には、図12(f)に示されているように、階調値分布が傾斜を持っているような場合には、画素群を左右2つの領域に分割することができる。このとき各領域内での階調値の平均値を、それぞれの領域の代表階調値とすることができる。あるいは、簡便には、各領域から選択した画素の階調値を代表階調値としても良い。もっとも、画素群内の階調値分布に傾斜がある場合でも、傾斜が小さい場合(例えば、画素群内の階調差が所定値以下の場合)には、画素群を分割しないと判断してもよい。
また、より一般的には、画素群内にエッジがあるか否かを判断して、エッジがあれば画素群を分割すると判断しても良い。エッジ有無の判定に際しては、例えば、画素群内での階調差が所定値以上であれば、エッジがあると判断することができる。あるいは、いわゆる微分型の画像フィルターを作用させて、微分値の絶対値が所定値以上となる画素を含む画素群についてはエッジがあると判断することも可能である。
図11に示したステップS204、S206、S212においては、以上のようにして、画素群内の各画素の階調値に基づいて画素群を分割するか否かを判断し、画素群を分割しないと判断した場合(S204:no)には画素群の代表階調値を決定し(S206)、画素群を分割すると判断した場合(S204:yes)には、画素群を分割して生成した各領域の代表階調値を決定する処理を行う(S212)。
こうして、画素群の分類番号を決定し、画素群について1つまたは複数(本実施例では2つ)の代表群階調値を決定したら、後述する多値化用テーブルを参照することによって、代表階調値を多値化結果値に変換する(ステップS208またはステップS214)。詳細には後述するが、多値化用テーブルには、画素群の分類番号と代表階調値との組合せに対応付けて、適切な多値化結果値が予め記憶されている。従って、分類番号と代表階調値とが求まっていれば、多値化用テーブルを参照することで直ちに多値化結果値を求めることが可能である。また、画素群が分割されている場合には、代表階調値が複数(本実施例では2つ)得られていることに対応して、その画素群については複数の多値化結果値が得られることになる。
以上のようにして多値化結果値を求めたら、画素群について得られた多値化結果値を記憶する(ステップS210)。画素群が分割されている場合には、各領域について得られた多値化結果値を記憶する(ステップS216)。多値化結果値を記憶するためのデータ形式については後述する。次いで、画像データの全画素について処理を終了したか否かを判断し(ステップS218)、未処理の画素が残っていれば(ステップS218:no)、ステップS200に戻って新たな画素群を生成して、続く一連の処理を繰り返す。こうした操作を繰り返し、全画素についての処理が終了したと判断されたら(ステップS218:yes)、得られた多値化結果値をカラープリンタ200に出力して(ステップS220)、図11に示す第1実施例の多値化結果値生成処理を終了する。
C−3.分類番号の決定方法 :
ここで、上述した第1実施例の多値化結果値生成処理中で、画素群の分類番号を決定する方法について説明する。以下では、先ず初めに、画素群の分類番号を付与する考え方を説明した後、分類番号を付与する具体的な方法について説明する。
図13は、画素群毎の分類番号を決定するための考え方を示した説明図である。図13(a)は、画像の一番左上隅の箇所において、横方向に4画素、縦方向に2画素の合計8画素をまとめることによって画素群を1つ生成した様子を概念的に示したものである。
前述したように、ディザ法では画素に割り当てられた画像データの階調値と、ディザマトリックスの対応する位置に設定されている閾値とを比較して、画素毎にドット形成の有無を判断している。一方、本実施例では、隣接する所定数の画素を画素群としてまとめているから、ディザマトリックスに設定されている閾値についても、画素群に対応する所定数ずつまとめてブロックを生成することにする。図13(b)は、図6に示したディザマトリックスに設定されている閾値を、横方向に4つ、縦方向に2つずつまとめて複数のブロックを生成した様子を示している。図6に示したディザマトリックスは、横方向(主走査方向)に128画素分、縦方向(副走査方向)に64画素分の合計8192画素分の閾値が設定されているから、これら閾値を横方向に4つ、縦方向に2つずつブロックにまとめれば、ディザマトリックスは縦横それぞれ32個ずつ、合計1024個のブロックに分割されることになる。
今、図13(b)に示すように、これらブロックに1番〜1024番までの通し番号を付しておく。そして、画像データにディザマトリックスを適用した時に、各画素群の位置に適用されるブロックの通し番号によって、画素群を分類してやる。例えば、図13(c)に示したように、画像の一番左上隅にある画素群には、図13(b)中の通し番号1番のブロックが適用されるから、この画素群は分類番号1番の画素群に分類する。
以上が、画素群を分類する際の基本的な考え方である。図11のステップS202では、このように、画像データにディザマトリックスを適用したときに、画素群に適用されるブロックの通し番号によって各画素群を分類し、対応する分類番号を決定して画素群に付与する処理を行う。
次に、画素群の分類番号を決定するための具体的な方法について説明する。図14は、画素群の分類番号を決定する方法を示した説明図である。図14(a)は、画像中で生成された1つの画素群を表している。ここでは、この画素群に着目して分類番号を決定する方法について説明する。尚、以下では、分類番号を決定するために着目している画素群を、着目画素群と呼ぶことにする。
今、画像の一番左上隅にある画素を原点に取って、原点からの主走査方向および副走査方向への画素数によって画素位置を表すものとする。また、画素群の位置は、画素群の左上隅にある画素の画素位置によって表すものとする。図14(a)では、着目画素群の位置を示す画素に黒丸を付して表示している。この画素の画素位置が(X,Y)であったとする。すると、各画素群の大きさは、主走査方向に4画素、副走査方向に2画素としているから、
X=4n+1、 Y=2m+1
となるようなn、m(ここで、n,mは0以上の正整数)が存在する。換言すれば、着目画素群の左側にはn個の画素群が並んでおり、着目画素群の上側にはm個の画素群が並んでいることになる。
ここで、前述したように画素群は、画像データにディザマトリックスを適用したときに、着目画素群に適用されるブロックの通し番号に基づいて分類することとしているから(図13参照のこと)、ディザマトリックスを移動させながら画像データに適用する方法によって、同じ画素群でも異なった分類番号に分類されることになる。実際には、ディザマトリックスを移動させながら画像データに適用する方法はどのような方法でも構わないが、ここでは説明の便宜から、最も単純な方法すなわちディザマトリックスを横方向に移動させるものとして説明する。図14(b)には、ディザマトリックスを横方向に少しずつ移動させながら、繰り返し画像データに適用している様子が概念的に示されている。
図14(c)は、図14(b)に示すようにディザマトリックスを繰り返して用いながら、図14(a)に示した着目画素群にディザマトリックスを適用している様子を概念的に表している。このようにディザマトリックスを移動させていくと、ディザマトリックス中のいずれかのブロックが、着目画素群に適用されることになる。ここでは、着目画素群には、ディザマトリックス中でM行N列目のブロックが適用されたものとする。すると、図14(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の計算結果に対して小数点以下の数値を切り捨てることによって得られた整数値を表している。このように、着目画素群の位置が分かれば、図14(d)に表示した上述の関係式から数値MおよびNを求めて、ディザマトリックス中でM行N列目にあるブロックのブロック番号を、その着目画素群の分類番号としてやればよい。もっとも実際には、M,Nの値は、図14(d)に示すような計算を実行せずとも、極めて簡便に求めることができる。以下、この点について説明する。
図15は、着目画素群の分類番号を決定する方法を具体的に示した説明図である。着目画素群の位置を(X,Y)として、X,Yが10ビットで表現されているものとする。図15(a)は、数値Xを表す10ビットの2進数データを概念的に示している。図では、各ビットを識別するために、最上位ビットから最下位ビットに向かって1番から10番までの通し番号を付して表示している。
図14を用いて前述したように、着目画素群の左側にある画素群の個数nは、数値Xから1を減算して4で除算すれば得ることができる。ここで、4での除算は、2ビット分だけ右方向にシフトさせることで実施することができるから、数値Xから1を減算して、得られた2進数データを右方向に2ビット分だけビットシフトさせればよい。更に、数値Xは任意の値を取るのではなく、4n+1の形式で表現可能な数値しか取り得ないから、1を減算せずに、単に2進数データを右方向に2ビット分だけビットシフトさせるだけで、画素群の個数nを得ることができる。図15(b)は、こうして数値Xをビットシフトして得られた個数nの2進数データを概念的に表している。
次いで、int(n/32)を算出する。すなわち、個数nを32で除算して、小数点以下の数値を切り捨てる操作を行う。32による除算は、2進数データを右方向に5ビット分だけビットシフトさせることで実行可能であり、また、データを整数形式で扱っていれば、小数点以下の数値は自動的に切り捨てられてしまう。結局、int(n/32)の2進数データは、個数nの2進数データを、単に右方向に5ビット分だけビットシフトさせることで得ることができる。図15(c)は、個数nをビットシフトして得られたint(n/32)の2進数データを概念的に表している。
こうして得られたint(n/32)に32を乗算する。32による乗算は、2進数データを5ビット分だけ左方向にビットシフトすることで実施することができる。図15(d)は、個数nをビットシフトして得られたint(n/32)×32の2進数データを概念的に表している。
次いで、個数nからint(n/32)×32を減算すれば、前述の数値Nを得ることができる。個数nの2進数データ(図15(b)参照)とint(n/32)×32の2進数データ(図15(d)参照)とを比較すれば明らかなように、これら2進数データは、上位の5ビットは共通しており、減算する側の数値の下位5ビットは全て「0」となっている。従って、減算される側の数値(個数n)の下位5ビットをそのまま抜き出せば、求める数値Mを得ることができる。すなわち、図15(b)に示した2進数データと、図15(f)に示すようなマスクデータとの論理積を求めるだけで、極めて簡便に数値Nを得ることが可能である。あるいは、図15(a)に示した着目画素群の位置を示す数値Xの2進数データと、図15(g)のようなマスクデータとの論理積を求めることにより、4番目〜8番目のビットデータを直接抜き出すことによっても、数値Nを得ることができる。
図15では、着目画素群の位置を示す座標値(X,Y)の数値Xから、ディザマトリックス中でのブロック位置を示す数値Nを求める場合について説明したが、全く同様にして、ブロック位置を示す数値Mも数値Yから求めることができる。結局、着目画素群の位置が分かれば、2進数データから特定のビット位置のデータを抜き出すだけで、着目画素群がディザマトリックス中で何行何列目のブロックに対応するかを知ることができ、このブロックの通し番号によって、着目画素群の分類番号を迅速に決定することが可能なのである。
C−4.多値化用テーブル :
図11を用いて前述したように、第1実施例の多値化結果値生成処理のステップS206あるいはステップS214では、こうして得られた画素群の分類番号と代表階調値とから、多値化用テーブルを参照することによって代表階調値を多値化する。以下では、代表階調値を多値化するために参照される多値化用テーブルについて説明する。
図16は、画素群の分類番号と代表階調値とから多値化結果値を取得するために参照される第1実施例の多値化用テーブルを概念的に示した説明図である。図示されているように、第1実施例の多値化用テーブルには、画素群の分類番号と代表階調値との組合せに対応付けて、適切な多値化結果値が予め記憶されている。図13を用いて前述したように、ここでは画素群は分類番号1番〜1024番のいずれかに分類される。また、画像データを1バイトデータとすれば、代表階調値は0〜255のいずれかの階調値を取り得るから、分類番号と代表階調値との組合せは、1024×256=262144の組合せが存在する。多値化用テーブルには、この全ての組合せに対して多値化結果値が設定されている。尚、本実施例では、多値化結果値は、分類番号および代表階調値をそれぞれパラメータとするテーブルに記憶されているものとしているが、分類番号と代表階調値とが決まれば、対応する多値化結果値が1つ決定されるようなものであれば、必ずしもテーブルの形態で多値化結果値を記憶しておく必要はない。
図17は、画素群の分類番号と代表階調値との組合せに応じて、適切な多値化結果値を決定する様子を概念的に示した説明図である。一例として、画素群の分類番号が1番であるとする。分類番号1番の画素群には、ディザマトリックス中で通し番号1番のブロックが適用される。図17(a)には、通し番号1番のブロックに設定されている閾値が示されている。
今、代表群階調値が「0」であるとする。この場合は、画素群中の全画素が階調値0の画像データを有するものとする。そして、各画素の階調値(すなわち「0」)と図17(a)に示した閾値とを比較して、階調値の方が大きい(若しくは同じ)画素については、ドットを形成するものと判断する。画素群の全画素についてこうした判断を行った後、ドットの個数を数えて、得られた個数を多値化結果値とする。図17(a)に示したいずれの閾値も、階調値0よりは大きいから、ドットを形成すると判断される画素は存在しない。そこで、分類番号が1番で代表階調値が「0」の組合せについては、多値化結果値0を設定する。図17(b)は、このようにして、代表群階調値0に対する多値化結果値として「0」が決定される様子を概念的に表したものである。
図17(c)は、分類番号1番、代表階調値1に対する多値化結果値を決定する様子を概念的に示している。この場合は、画素群内の全画素が階調値1の画像データを有するものとして、各画素の階調値を図17(a)に示した閾値と比較する。その結果、画素群内で左上隅にある画素では、画像データの階調値と閾値とが等しくなってドットを形成すると判断され、他の画素についてはドットを形成しないと判断される。図17(c)に表示された斜線の付された丸印は、その画素にドットを形成すると判断されたことを表している。この結果、分類番号が1番で代表階調値が「1」の組合せについては、多値化結果値1が設定される。
こうした操作を、0〜255までの全ての代表階調値について行うことにより、多値化結果値を決定していく。例えば、代表階調値が2の場合は、図17(d)に示したように、多値化結果値は「1」となり、代表階調値が「100」の場合は、図17(e)に示すように多値化結果値は「3」となる。図17(f)および図17(g)には、代表階調値が「200」の場合および代表階調値が「255」の場合に、それぞれの多値化結果値タを決定する様子が概念的に示されている。図16に示した多値化用テーブルの中で、分類番号1に該当する行(表中に示された横方向の欄)の部分に、それぞれの代表階調値に対応付けて設定されている多値化結果値は、このようにして決定された値である。こうした操作を、1番〜1024番までの全ての分類番号について行えば、最終的に、全ての分類番号と全ての代表階調値とのあらゆる組合せに対して、多値化結果値を決定することができる。図16に示した多値化用テーブルには、分類番号と代表階調値との組合せに応じて、対応する多値化結果値が予め設定されている。
C−5.多値化結果値のデータ形式 :
図11を用いて前述したように、第1実施例の多値化結果値生成処理のステップS210あるいはステップS216では、得られた多値化結果値を記憶しておき、ステップS220では、記憶しておいた多値化結果値をカラープリンタ200に向かって出力する。画素群が分割されていない場合は、多値化結果値は画素群毎に1つずつ出力され、画素群が分割されている場合は、画素群毎に複数(本実施例では2つずつ)出力されることになる。ここで、図16に示したように、多値化結果値を得るために参照する多値化用テーブルは、画素群が分割されていない場合でも分割された場合でも同じ多値化用テーブルを参照しており、従って、画素群の分割有無によらず、同じような多値化結果値が得られることになる。そこで、多値化結果値が一体の画素群について得られたものか、分割された画素群の各領域について得られたものかを区別可能とするために、図11のステップS210あるいはステップS216では、得られた多値化結果値を次のようなデータ形式で記憶している。
図18は、多値化結果値を記憶するためのデータ形式の一例を示した説明図である。図示した例では、多値化結果値の先頭に、画素群が分割されたか否かを示すビットを付加した状態で、多値化結果値を記憶する。例えば、画素群を分割しない場合は、図18(a)に示すように、多値化結果値の先頭に、値「0」の1ビットのデータを付加しておく。ここでは画素群は8つの画素から構成されており、多値化結果値は画素群内に形成されるドットの個数を表すものとしているから、前述したように1つの多値化結果値は4ビットあれば足りる。従って、分割しない画素群については、先頭の1ビットを加えた合計5ビットのデータとして多値化結果値が記憶されることになる。
また、画素群を分割した場合は、図18(b)に示すように、値「1」の1ビットのデータに続けて、各領域の多値化結果値を順番に記憶していく。本実施例では、画素群の分割パターンは、左右2つの領域に分割するパターンのみとしているから、先頭のビットが「1」であれば、左右の領域に対応した4ビットの多値化結果値が2つ続くことになる。従って、分割した画素群については、合計9ビットのデータとして多値化結果値が記憶されることになる。尚、画素群の分割パターンとしては、必ずしも2つの領域に分割するパターンに限られるものではなく、より多くの領域に分割することも可能である。例えば画素群を4つの領域に分割する場合には、分割したことを示す1ビットのデータに続いて、それぞれの領域の多値化結果値を示す4ビットのデータが4つ続くことになり、合計すると17ビットのデータとして多値化結果値が記憶されることになる。
図19は、多値化結果値を記憶するデータ形式の他の一例を示した説明図である。図示されているように、画素群を分割した場合にだけ、分割したことを示すデータとともに多値化結果値を記憶することとしても良い。すなわち、分割しない画素群については、図19(a)に示すように、多値化結果値だけをそのまま記憶する。一方、分割した画素群については、図19(b)に示すように、分割したことを表す特別なデータに続けて、各領域の多値化結果値を記憶しても良い。分割したことを表す特別なデータ(以下では、この様なデータをESCコードと呼ぶことにする)としては、多値化結果値と区別することが可能であればどのようなデータを用いることもできる。例えば本実施例では、多値化結果値は4ビットデータであり16通りの状態を表現することができるが、多値化結果値は実際には9通りの状態しか取り得えないから、5通りの状態が使われずに余っている計算になる。そこで、使われていない状態の1つを選択して、画素群が分割されていることを表すESCコードとして使用することができる。図19に示した例では、4ビット全てが「1」となっているデータ(10進数表示では、「15」)をESCコードとして使用している。
図20は、多値化結果値をESCコードとともに記憶する様子を示した説明図である。例えば、図20(a)に示すように、3つの画素群があるとして、中央の画素群が分割されているものとする。また、左端の画素群について得られた多値化結果値は「2」、右端の画素群について得られた多値化結果値は「6」、中央の画素群についてはそれぞれ多値化結果値「2」および「6」が得られたものとする。このような多値化結果値を記憶する場合、先ず左端の画素群は分割されていないから、多値化結果値「2」をそのまま記憶する。次の画素群は分割されているから、先ず画素群が分割されていることを表すESCコード「15」を記憶し、続いて左の領域について得られた多値化結果値「2」と、右の領域について得られた多値化結果値「6」を記憶する。すなわち、分割された画素群については、分割されていない画素群3つ分のデータ長となる。次いで、右端の画素群についての多値化結果値を記憶する。この画素群は分割されていないから、得られた多値化結果値「6」をそのまま記憶すればよい。
多値化結果値を記憶する際には、図18に示したデータ形式と、図19に示したデータ形式との、いずれの形式を用いることも可能であるが、使用するデータ形式によって次のような得失がある。先ず、分割された画素群の多値化結果値に着目すれば、図18のデータ形式を用いた方が図19に示したデータ形式を用いた場合よりも、少ないデータ長で多値化結果値を記憶することができる。すなわち、図18のデータ形式によれば、各領域の多値化結果値の他に、画素群が分割されていることを表す1ビットのデータを加えればよいのに対して、図19のデータ形式では、各領域の多値化結果値に4ビットのESCコードを付加する必要がある。このため、分割する画素群については、図18のデータ形式を採用した方が、画素群1つあたり3ビットずつデータ量を節約することができる。一方、分割しない画素群については、図18のデータ形式では、画素群の多値化結果値に加えて画素群が分割されていないことを表す1ビットのデータを加える必要があるのに対して、図19のデータ形式では画素群の多値化結果値をそのまま記憶すればよい。従って、分割しない画素群については、図19のデータ形式を採用した方が、画素群1つあたり1ビットずつデータ量を節約することができる。このことから、分割される画素群が多い場合は、図18のデータ形式を用いて多値化結果値を記憶した方がデータ量を節約することができ、逆に分割される画素群が少ない場合は、図19のデータ形式を用いた方がデータ量を節約できることが分かる。前述したように、画像データは近接する画素間では近似した階調値を取ることが多く、分割される画素群の比率はさほど多くはないから、通常は図19に示すデータ形式を採用した方が、少ないデータ量で多値化結果値を記憶することが可能である。
C−6.第1実施例のドット形成有無決定処理 :
次に、前述した第1実施例の画像印刷処理において、画素群内の各画素についてのドット形成の有無を、多値化結果値に基づいて決定する処理(図5のステップS108)について説明する。図21は、第1実施例のドット形成有無決定処理の流れを示すフローチャートである。かかる処理は、カラープリンタ200の制御回路260に内蔵されたCPUによって実行される処理である。以下では、フローチャートに従って、画素群内の各画素についてのドット形成の有無を、多値化結果値に基づいて決定する処理について説明する。
ドット形成有無決定処理を開始すると、先ず初めに、処理対象とする画素群を1つ選択し(ステップS300)、その画素群の多値化結果値を取得する(ステップS302)。前述したように、画素群が分割されている場合は複数の多値化結果値が生成されているから、この様な画素群を選択した場合には、これら複数の多値化結果値を取得する。
次いで、選択した画素群に対応する順序値マトリックスを読み込む処理を行う(ステップS304)。順序値マトリックスとは、画素群内の各画素について、ドットが形成される順番を設定したマトリックスである。図9を用いて前述したように、ディザマトリックスの各画素に設定されている閾値は、画素群内で各画素にドットが形成される順番を表していると考えることができるから、ディザマトリックスに基づいて、画素群に対応する順序値マトリックスを生成することができる。
図22は、ディザマトリックスに基づいて順序値マトリックスを生成している様子を示した説明図である。順序値マトリックスの生成に際しては、先ず、ディザマトリックスを画素群と同じ大きさに分割する。図22(a)は、図6に示したディザマトリックスを分割した様子を概念的に表している。図6に示したディザマトリックスは、主走査方向に128画素分、副走査方向に64画素分の閾値が設定されており、また画素群の大きさは主走査方向に4画素、副走査方向に2画素としているから、ディザマトリックスは1024個のブロックに分割されることになる。そして、画素群に分類番号を付与したときと同様に、これらブロックに1番から1024番までの通し番号を付けておく。
図22(b)の左半分には、通し番号1番のブロックに設定されている閾値を示している。前述したように、ディザマトリックスに設定されている閾値が小さい画素ほどドットが形成され易くなるから、図22(b)に示したブロックでは、閾値「1」が設定されている画素が最もドットが形成され易く、閾値「42」が設定されている画素が2番目にドットが形成され易い。3番目にドットが形成され易い画素は閾値「58」が設定されている画素となる。このようにして、ブロック内の各画素に設定されている閾値に基づいてドットが形成される順番を決定することができ、順序値マトリックスを生成することができる。同様にして、通し番号2番のブロックについても、順序値マトリックスを生成することができる。図22(c)には、通し番号2番のブロックから生成された順序値マトリックスが示されている。こうして、通し番号1番から1024番までの全ブロックについて順序値マトリックスを生成して記憶しておく。カラープリンタ200のメモリには、このような順序値マトリックスが記憶されている。そして、図21のステップS304では、処理対象として選択した画素群が分類番号1番の画素群である場合には、通し番号1番のブロックから生成した順序値マトリックスを読み込んでやり、分類番号2番の画素群であれば、通し番号2番のブロックから生成された順序値マトリックスを読み込む処理を行う。
このようにして、選択した画素群の多値化結果値と順序値マトリックスとを読み込んだら、今度は、画素群に含まれる各画素の中から対象とする画素を1つずつ選択しながら、多値化結果値と順序値マトリックスとに基づいてドット形成の有無を決定していく(ステップS306、S308、S310)。以下では、図23を参照しながら、画素毎にドット形成の有無を決定する様子について説明する。
図23は、多値化結果値と順序値マトリックスとに基づいて、画素群内の各画素についてドット形成の有無を決定する様子を概念的に示した説明図である。図23(a)は、選択した画素群について読み込まれた多値化結果値を示している。ここでは、画素群は2つの領域に分割されており、左の領域については多値化結果値3が、右の領域については多値化結果値6が読み込まれている。図23(b)は、選択した画素群に対応して読み込まれた順序値マトリックスを示している。
ドット形成の有無を決定するに際しては、先ず初めに、画素群の中から対象とする画素を1つ選択する(図21のステップS306)。ここでは、画素群内の左上隅にある画素を選択したものとする。次いで、順序値マトリックスを参照することにより、対象とする画素の順序値、すなわち画素群内でドットが形成される順番を取得する(ステップS310)。図23(b)に示した順序値マトリックスを参照すれば、画素群内で左上隅にある画素の順序値は「1」であることが分かる。次に、この画素に対応する多値化結果値を選択する(図21のステップS310)。図23(a)に示したように、この画素群については2つの多値化結果値が読み込まれているが、対象とする画素は左上隅の画素であるから、左側の領域に対応する多値化結果値「3」を選択する。もちろん、画素群が分割されておらず、多値化結果値が1つしか読み込まれていない場合は、この結果値を選択すればよい。
こうして、対象とする画素の順序値および多値化結果値が得られたら、変換テーブルを参照することによって、ドット形成の有無を決定する(図21のステップS312)。図24は、対象画素についてのドット形成の有無を決定するために参照される変換テーブルを概念的に示した説明図である。ここでは、画素群は8つの画素から構成されているから、順序値は1〜8までの値を取り、個数データは0〜8までの値を取るとしているから、変換テーブルには、これらを組合せた72通りの組合せに対応付けて、ドット形成の有無を示す値が設定されている。図24に示した例では、ドットを形成する組合せに「1」が、ドットを形成しない組合せには「0」が設定されている。
画素群の左上隅の画素については、順序値は「1」であり、多値化結果値は「3」であるから、変換テーブルの該当する箇所にはドット形成することを意味する値「1」が設定されているから、この画素についてはドットを形成すると判断することができる。こうして、1つの画素についてドット形成の有無を決定したら、画素群内の全画素について決定したか否かを判断し(ステップS314)、未だ決定していない画素が残っている場合は(ステップS314:no)、ステップS306に戻って新たな画素を1つ選択した後、選択した画素について同様の操作を行うことによりドット形成の有無を決定する(ステップS308、S310、S312)。
図23(a)に示した画素群は、左側の領域についての多値化結果値「3」と、右側の領域についての多値化結果値「6」とが読み込まれている。また、図23(b)の順序値マトリックスに示されているように、この画素群の左側の領域には、「1」、「4」、「6」、「8」の4つの順序値が設定されている。従って、画素群の左側にある各画素については、図24に示した変換テーブルの中から、破線の丸印を付した箇所に設定されている値、すなわち、多値化結果値「3」と順序値「1」の組合せ、または多値化結果値「3」と順序値「4」の組合せ、多値化結果値「3」と順序値「6」、多値化結果値「3」と順序値「8」のそれぞれの組合せに設定されている値を読み出すことにより、ドット形成の有無を決定することができる。同様に、画素群の右側の領域については、多値化結果値は「6」であり、順序値は「1」、「4」、「6」、「8」の4つの値が設定されている。従って、画素群の右側にある各画素については、図24に示した変換テーブルの中から、破線の四角を付した箇所に設定されている値を読み出すことにより、ドット形成の有無を決定することができる。
このようにして、選択した画素群に含まれる全画素についてドット形成の有無を決定したと判断したら(図21のステップS314:yes)、今度は、全画素群について、上述した操作を行ったか否かを判断する(ステップS316)。そして、未処理の画素群が残っている場合は(ステップS316:no)、ステップS300に戻って新たな画素群を1つ選択して、上述した一連の操作を行う。こうした操作を繰り返し、全画素群についてドット形成の有無を決定したと判断されたら(ステップS316:yes)、図21に示した第1実施例のドット形成有無決定処理を終了して、図5の画像印刷処理に復帰する。
以上、第1実施例の画像印刷処理中で行われる多値化結果値生成処理(図5のステップS106)、およびドット形成有無決定処理(図5のステップS108)の内容について詳しく説明した。上述した多値化結果値生成処理では、所定数の画素をまとめて画素群を生成し、その画素群について分類番号と代表階調値を決定した後、多値化結果値を生成する。上述したように、画素群の分類番号および代表階調値は容易に求めることができ、多値化用テーブルを参照することによって、極めて容易に多値化結果値を得ることができる。こうして得られた多値化結果値は、画素毎にドット形成の有無を表すデータに比べて、データ量が遙かに小さくなっているため、コンピュータ100からカラープリンタ200に向かって極めて迅速にデータを出力することができる。
また、画素群にまとめられた各画素の階調値基づいて、画素群を分割するか否かを判断し、分割すると判断された画素群については、複数の多値化結果値を生成する。このように、画素群を分割すると、その画素群については出力すべき多値化結果値が増えた分だけ、カラープリンタ200に供給すべきデータ量が増加するが、前述したように、画像データは近接した画素間では近似した階調値を有する傾向があるため、実際には、分割される画素群の比率は小さく、従って、データ量の増加も僅かである。結局、上述した多値化結果値生成処理では、多値化結果値の生成および出力を迅速に実行することが可能となる。
また、上述したドット形成有無決定処理では、コンピュータ100から迅速に供給された多値化結果値を受け取ると、順序値マトリックスを参照して画素群内の各画素についての順序値を取得する。次いで、多値化結果値と順序値とに基づいて変換テーブルを参照することにより、各画素についてのドット形成の有無を決定する。このように、順序値マトリックスおよび変換テーブルを参照しながら決定すれば、画素群内の各画素についてのドット形成有無を迅速に決定することが可能である。加えて、分割された画素群については、分割された各領域の多値化結果値を受け取って、それぞれの領域内の各画素についてドット形成の有無を決定することができる。このため、画素群内で階調値が変化している場合にも、階調値の分布に応じて適切にドット形成の有無を決定することができるので、高画質な画像を得ることが可能となる。
更に、多値化結果値は多値化用テーブルを参照することで生成可能なことから、比較的単純な処理で生成することができる。同様に、各画素についてのドット形成の有無も、順序値マトリックスや変換テーブルを参照することで決定可能なことから、比較的単純に決定することができる。このため、いずれの処理についても、コンピュータ100のような高いデータ処理能力を備えていない機器を用いた場合でも、十分に実用的な速度で処理することが可能である。
また、上述した画像印刷処理では、画素群を分割するか否かに関わらず、多値化結果値を生成する際に参照する多値化用テーブルや、ドット形成有無を決定する際に参照する順序値マトリックスは同じものを参照することができる。更に、画素群を分割する場合でも、後述する変形例のように、分割してどのような領域を生成するかに関わらず、多値化用テーブルや順序値マトリックスは同じものを参照することができる。このため、画素群の分割の有無、あるいは分割の態様毎に、多値化用テーブルおよび順序値マトリックスを記憶しておく必要がないので、多大なメモリ量が必要となることがない。従って、上述した画像印刷処理は、大きなメモリ容量を有しない機器においても実行することが可能である。
C−7.第1実施例の変形例 :
以上に説明した第1実施例の画像印刷処理には、種々の変形例が存在している。以下では、これら変形例について簡単に説明する。
(1)第1の変形例 :
以上に説明した第1実施例においては、画素群の分割パターンは1つだけしか無いものとして説明した。しかし、複数の分割パターンを用意しておき、画素群内の階調値分布に応じて適切なパターンを選択することとしても良い。以下では、こうした第1の変形例について説明する。
図25は、第1実施例の第1の変形例において用いられる分割パターンを例示した説明図である。図示されているように、ここでは7種類の分割パターンが用意されている。図25(a)に示した分割パターン1は、上述した実施例のように画素群を左右2つの領域に等分するパターンである。図25(b)に示した分割パターンは、画素群を上下2つの領域に等分する。また、次の4つの分割パターンは、画素群を縦横に2等分して4つの領域を生成し、その中から選択した1つの領域と他の領域とに2分割するパターンとなっている。具体的には、図25(c)に示した分割パターンは、画素群を、左上隅の領域と他の領域とに2分割するパターンである。また、図25(d)に示した分割パターンは、右上隅の領域と他の領域とに分割し、図25(e)に示したパターンは、左下隅の領域と他の領域とに分割し、図25(f)のパターンは、右下隅の領域と他の領域とに分割する。結局、これら4つの分割パターンは、画素群を異なる大きさの領域に分割することになる。また、最後に示した図25(g)の分割パターンは、画素群内の4つの領域の中から斜め方向に選択した2つの領域と、これに交差する他の領域とに画素群を分割するパターンとなっている。
このように図25に示した第1の変形例においては、7種類の分割パターンを備えており、画素群の多値化結果値を次のようにして生成する。以下では、第1実施例の多値化結果値生成処理の説明で用いた図11のフローチャートを流用しながら、簡単に説明する。
第1実施例の第1の変形例において、多値化結果値を生成するに際して、先ず画素群を生成して分類番号を決定する(図11のステップS200、S202相当)。次いで、画素群内の階調値分布に基づいて、画素群を分割するか否か、そして分割する場合は、これら7つの分割パターンの中から何れのパターンで分割するかを判断する(ステップS204相当)。画素群を分割しないと判断した場合は、前述した第1実施例と同様にして多値化結果値を得る。すなわち、画素群の代表階調値を算出し、多値化用テーブルを参照することにより代表階調値を多値化して、得られた多値化結果値を記憶する(ステップS206,S208、S210相当)。
一方、画素群を分割すると判断した場合は(ステップS204:yesに相当)、同時に、図25に示した何れのパターンで分割するかについても判断する。次いで、画素群を分割する各領域について代表階調値を決定した後、多値化用テーブルを参照することにより、それぞれの代表階調値を多値化結果値に変換する(ステップS212、S214相当)。そして、得られた多値化結果値を記憶するに際しては、先ず初めに、分割パターンを示すESCコードを記憶し、ESCコードに続けて、各領域について得られた多値化結果値を記憶する。
図26は、第1実施例の第1の変形例において、分割パターンを示すESCコードを例示した説明図である。多値化結果値は、前述したように4ビットデータで表現されており、10進数表示で「0」〜「15」の値を表現可能である。このうち、「9」〜「15」までの値がESCコードに割り当てられており、残りの「0」〜「8」までの値は多値化結果値に割り当てられている。ここで、多値化結果値が「0」〜「8」までの値となっているのは、画素群が8つの画素で構成されており、各画素はドットが形成されるか否かの2つの状態しか取り得ないとしていることに対応したものである。また、ESCコードが「9」〜「15」までの値となっているのは、「0」〜「8」の多値化結果値を表すために4ビット必要となり、表現可能な「0」〜「15」の中で、多値化結果値に用いられない「9」〜「15」の7つ値をESCコードに割り当てたためである。そして、ESCコード「15」は、図25(a)に示した分割パターン1に割り当てられており、ESCコード「14」は分割パターン2に割り当てられ、ESCコード「13」は分割パターン3に、ESCコード「12」は分割パターン4に、ESCコード「11」は分割パターン5に、ESCコード「10」は分割パターン6に、ESCコード「9」は分割パターン7に、それぞれ割り当てられている。
第1の変形例においては、分割した画素群についての多値化結果値を記憶するに際して、先ず分割パターンを示すESCコードを記憶し、続けて各領域について得られた多値化結果値を記憶する(図11のステップS216相当)。例えば、画素群が図25(b)に示す分割パターン2で分割されていた場合は、この分割パターンに対応するESCコード「14」に続けて、それぞれの領域の多値化結果値を記憶することになる。
また、第1の変形例のドット形成有無決定処理では、このよう多値化結果値を受け取ると、次のようにして画素群内の各画素についてのドット形成有無を決定する。以下では、第1実施例のドット形成有無決定処理を示した図21のフローチャートを流用しながら、簡単に説明する。先ず、処理対象とする画素群を選択して、選択した画素群についての多値化結果値を取得する(図21のステップS300、S302相当)。ここで、選択した画素群が分割されている場合は、分割パターンを示すESCコードと、画素群を分割する各領域についての多値化結果値とを取得する。すなわち、多値化結果値として読み込んだ値が「9」〜「15」である場合は、多値化結果値ではなく画素群の分割パターンを示すESCコードであり、各領域についての多値化結果値はESCコードに続いて記憶されていると判断して、これら多値化結果値を読み込んでやる。
次いで、画素群に対応する順序値マトリックスを読み込んだ後(ステップS304相当)、画素群の中から対象画素を1つずつ選択して(ステップS306相当)、順序値マトリックスに設定されている順序値と対象画素の多値化結果値を読み込み(ステップS308、S310相当)、変換テーブルを参照することにより対象画素についてのドット形成の有無を決定する(ステップS312相当)。こうした操作を画素群内の全画素について繰り返す(ステップS314相当)。1つの画素群についての処理を終了したら、全ての画素群について処理を終了したか否かを判断し(S316相当)、全画素群について処理を行ったと判断されたら、第1の変形例のドット形成有無決定処理を終了する。
以上に説明した第1実施例の第1の変形例によれば、画素群にまとめられた各画素の階調値分布に応じて画素群を適切に分割することができるので、更に高画質な画像を得ることができる。また、画素群の分割パターンを増やした場合でも、分割した画素群の多値化結果値を出力するために要するデータ量や、多値化結果値から各画素についてのドット形成有無を決定するための手間は増加していない。従って、前述した第1実施例の画像印刷処理に比べて画質が向上しているにも関わらず、第1実施例の処理と同様に、迅速に画像を出力することが可能となる。
(2)第2の変形例 :
以上に説明した各種の実施例では、画素群内の各画素の階調値に基づいて画素群を分割するか否かを判断し、画素群を分割する場合にだけ、領域毎に多値化結果値を生成して、ドット形成の有無を決定した。しかし、初めから画素群を常に分割することを前提として、実際には一体として処理されることのないような、大きな画素群を生成することとしても良い。
一例として、前述した解像度変換処理(図5のステップS104)において、次のような解像度変換が行われた場合を考える。画像データの解像度を主走査方向および副走査方向ともに2倍の解像度に変換することとして、1つの画素を縦横にそれぞれ2分割することにより、合計4つの画素を生成したものとする。このような場合は、これら4つの画素を画素群としてまとめれば、画素群内の各画素は同じ階調値を有することになる。従って、画素群の多値化結果値を生成して各画素のドット形成有無を決定することで、画質を全く劣化させることなく画像を印刷することが可能である。
ここで、第1実施例の第2の変形例においては、これら4つの画素(すなわち、主走査方向および副走査方向いずれも2画素ずつ)を画素群としてまとめるのではなく、主走査方向に4画素ずつ、副走査方向に2画素ずつ、合計8つの画素を画素群としてまとめる。そして、これら画素群が、常に、左右2つの領域に分割されているものとして、領域毎に上述した多値化結果値生成処理、およびドット形成有無決定処理を行うのである。
多値化用テーブルや順序値マトリックスについての前述した設定方法から明らかなように、画素群に含まれる画素の数が異なれば、多値化用テーブルや順序値マトリックスも異なったものを用意する必要がある。しかし、画素群は8つの画素から構成しておき、画素群が常に左右2つの領域に分割されるものとして処理すれば、画素群に8つの画素が含まれている場合についての多値化用テーブルや順序値マトリックスをそのまま使用して、実質的には、4画素ずつ画素群にまとめた場合と同様な処理を行うことができる。すなわち、画素群に4つの画素が含まれている場合の多値化用テーブルや順序値マトリックスを、新たに設定する必要がない。
また、こうしたことは画素を4つずつ画素群にまとめる場合に限られるものではない。例えば、画素を2つずつ画素群にまとめる場合や、異なる個数の画素を画素群にまとめる場合であっても、同様なことが成り立ち、それぞれの場合について専用の多値化用テーブルや順序値マトリックスを設定する必要がない。
加えて、こうした第1実施例の第2の変形例によれば、多値化用テーブルのデータ量を低減することも可能となる。例えば、前述した第1実施例の多値化用テーブルは、図16に示したように、1024個の画素群と256通りの代表階調値との組合せ毎に、多値化結果値が設定されている。多値化結果値は0〜8の9通りの値を取り得るから、個々の多値化結果値は4ビットのデータとなる。従って、1つの多値化用テーブルは、1Mビットのデータ量となる。
一方、画素群が4つの画素から構成されているとした場合、画素群の数は2048個と、2倍に増加する。また、多値化結果値は0〜4の5通りの値を取り得るから、個々の多値化結果値は3ビットと、データ長が若干減少するものの、結局、1つの多値化用テーブルのデータ量は、1.5Mビットと、1.5倍に増加してしまう。換言すれば、画素群が4つの画素から構成されているとして多値化用テーブルを設定すると、1つのテーブルを記憶するために1.5Mビットのデータ量が必要になるのに対して、画素群が8つの画素から構成されているものとして、画素群を常に分割して処理することにすれば、多値化用テーブルを記憶するために要するデータ量を、1Mビットと減少させることが可能となるのである。
D.第2実施例 :
以上に説明した第1実施例では、カラープリンタ200で形成可能なドットは1種類であるものとして説明した。しかし、今日では、画質を向上させることを目的として、大きさの異なるドットや、インク濃度の異なるドットなど、多種のドットを形成可能なプリンタ(いわゆる多値ドットプリンタ)が広く使用されている。本願の発明は、こうした多値ドットプリンタに適用した場合にも大きな効果を得ることができる。以下では、第2実施例として、本願発明を多値ドットプリンタに適用した場合について説明する。
D−1.第2実施例の画像印刷処理の概要 :
第2実施例の画像印刷処理は、フローチャートについては、図5に示した第1実施例の画像印刷処理と同様である。以下では、図5のフローチャートを流用しながら、第2実施例の画像印刷処理の概要について簡単に説明する。
第2実施例の画像印刷処理を開始すると、先ず初めに、コンピュータ100で画像データを読み込んだ後、色変換処理を行う(図5のステップS100およびステップS102相当)。次いで、解像度変換処理を行って、画像データの解像度を印刷解像度に変換した後(ステップS104相当)、多値化結果値生成処理を行って画素群の代表階調値を多値化結果値に変換する(ステップS106相当)。
前述したように、第1実施例では、カラープリンタ200が形成可能なドットは1種類であるものとしており、多値化結果値は、画素群の画素群内に形成されるドット個数を表していた。これに対して第2実施例では、カラープリンタ200は、大きさの異なる3種類のドット、すなわち大ドット、中ドット、小ドットを形成可能である。このことと対応して、第2実施例の多値化結果値は、画素群内に形成されるこれら各種ドットの個数の組合せを表すものとする。そして、第2実施例の多値化結果値生成処理では、画素群の代表階調値を、各種ドットの個数の組合せを表す多値化結果値に変換する処理を行う。また、画素群を分割すると判断した場合には、分割して生成された各領域について多値化結果値を決定する。第2実施例の多値化結果値生成処理の詳細については後述する。
カラープリンタ200の制御回路260に内蔵されたCPUは、コンピュータ100から供給された多値化結果値を受け取ると、ドット形成有無決定処理を開始する(図5のステップS108相当)。詳細には後述するが、第2実施例のドット形成有無決定処理では、多値化結果値を、大ドット、中ドット、小ドットの個数を示す中間的なデータに一旦変換した後、画素群内の各画素について、各種ドットの形成有無を判断する処理を行う。
こうして、大中小の各種ドットについてドット形成の有無を決定したら、決定したドット形成の有無に従って、印刷媒体上にドットを形成する(図5のステップS110相当)。その結果、画像データに対応した画像が印刷されることになる。
D−2.第2実施例の多値化結果値生成処理 :
次に、上述した第2実施例の画像印刷処理において、画素群についての、あるいは画素群内の各領域についての代表階調値を多値化して多値化結果値を生成する処理について説明する。後述するように、第2実施例の多値化結果値生成処理においても、画素群の分類番号および代表階調値から多値化用テーブルを参照することにより、極めて容易に生成することができる。こうしたことが可能である理由を説明するために、先ず初めに、画素群内に形成される大中小ドットの個数を、ディザ法を用いて決定する処理について簡単に説明する。その後、かかる処理を踏まえた上で、第2実施例の多値化結果値生成処理の詳細な内容について説明する。
D−2−1.ディザ法を用いた大中小ドットの形成個数の決定処理 :
図27は、画素群内に形成される大ドット、中ドット、小ドットの個数を、ディザ法を適用して決定する処理の流れを示すフローチャートである。尚、ディザ法を適用して大中小の各ドットの形成有無を決定する処理の詳細については、特許3292104号に開示されている。すなわち、図27に示した処理は、特許3292104号に開示された手法を画素群単位で行うものと見ることができる。大中小ドットの個数を決定する場合も、処理を開始すると先ず初めに、互いに隣接する所定数の画素をまとめて画素群を形成する(ステップS400)。ここでは、前述した実施例と同様に、主走査方向に4画素、副走査方向に2画素の合計8つの画素を画素群としてまとめるものとする。
次いで、画素群の中からドット形成の有無を判断するべく、処理対象とする画素を1つ選択して(ステップS402)、選択した処理画素について、大ドット、中ドット、小ドットの形成有無を判断する(ステップS404)。大中小ドットの形成有無は次のようにして判断する。
図28は、選択した1つの画素についてハーフトーン処理を行うことにより、大ドット、中ドット、小ドットの形成有無を判断する処理の流れを示すフローチャートである。大中小ドットのハーフトーン処理を開始すると、先ず初めに処理対象とする画素についての画像データを、大ドット、中ドット、小ドットの各ドットについての密度データに変換する(ステップS450)。ここで、密度データとは、ドットをどの程度の密度で形成するかを表すデータである。密度データは、大きな階調値となるほどドットが高い密度で形成されることを表している。例えば、密度データの階調値「255」は、ドットの形成密度が100%、すなわち全ての画素にドットが形成されることを表しており、密度データの階調値「0」は、ドットの形成密度が0%、すなわちいずれの画素にもドットが形成されないことを表している。こうした密度データへの変換は、ドット密度変換テーブルと呼ばれる数表を参照することによって行うことができる。
図29は、画像データの階調値を大中小各ドットについての密度データに変換する際に参照されるドット密度変換テーブルを概念的に示した説明図である。図示されているように、ドット密度変換テーブルには、色変換によって得られた画像データの階調値に対して、小ドット・中ドット・大ドットの各ドットについての密度データが設定されている。画像データが階調値「0」近傍の領域では、中ドット・大ドットの密度データはいずれも階調値「0」に設定されている。小ドットの密度データは、画像データの階調値が大きくなるにつれて増加して行くが、画像データがある階調値に達すると今度は逆に減少し始め、代わりに中ドットの密度データが増加し始める。画像データの階調値が更に増加して、ある階調値に達すると、小ドットの密度データが階調値「0」となり、中ドットの密度データが減少し始めて、代わりに大ドットの密度データが少しずつ増加していく。図28のステップS450では、このドット密度変換テーブルを参照しながら、画像データの階調値を、大ドットの密度データ、中ドットの密度データ、小ドットの密度データに変換する処理を行う。
このようにして、処理対象とする画素について、大中小各ドットの密度データが得られたら、先ず初めに大ドットについての形成有無を判断する(図28のステップS452)。かかる判断は、大ドットの密度データと、処理対象としている画素の対応する位置に設定されているディザマトリックスの閾値とを比較することによって行う。そして、密度データの方が大きい場合は処理対象の画素には大ドットを形成するものと判断される。その結果、大ドットを形成することになった場合は、ステップS454において「yes」と判断され、ハーフトーン処理を抜けて図27に示したドット個数決定処理に復帰する。
逆に、大ドットの密度データよりも閾値の方が大きければ、ステップS452において、処理対象の画素には大ドットは形成されないと判断される。判断の結果、大ドットは形成されない場合は(ステップS454:no)、今度は中ドットについて形成有無を判断する処理を開始する。中ドットの形成有無の判断には、大ドットの密度データと中ドットの密度データとを加算して、中ドット用の中間データを算出する(ステップS456)。そして、得られた中ドット用の中間データと、ディザマトリックスの閾値とを比較することにより、中ドットの形成有無を判断する(ステップS458)。そして、中ドット用の中間データの方が大きい場合は処理対象の画素には中ドットを形成するものと判断される。その結果が、中ドットを形成することになった場合は、ステップS460において「yes」と判断されるので、ハーフトーン処理を抜けて図27のドット個数決定処理に復帰する。
逆に、中ドット用の中間データよりも閾値の方が大きかった場合は、ステップS458において、処理対象の画素には中ドットを形成しないと判断される。判断の結果、中ドットも形成されない場合は(ステップS460:no)、今度は小ドットについて形成有無を判断する処理を開始する。小ドットの形成有無の判断には、中ドット用の中間データと小ドットの密度データとを加算して、小ドット用の中間データを算出する(ステップS462)。そして、得られた小ドット用の中間データと、ディザマトリックスの閾値とを比較することにより、小ドットの形成有無を判断する(ステップS464)。その結果、小ドット用の中間データの方が大きい場合は処理対象の画素には小ドットを形成するものと判断し、逆に、小ドット用の中間データよりも閾値の方が大きい場合には、いずれのドットも形成されないものと判断する。以上のような処理を行えば、処理対象としている画素について、大ドット、中ドット、小ドットのいずれのドットを形成するか、若しくは、いずれのドットも形成しないかを判断することができるので、図28に示したハーフトーン処理を抜けて図27のドット個数決定処理に復帰する。
上述した処理を行いながら大中小の各ドットの形成有無を判断する様子について、図30を参照しながら補足して説明する。図30は、画素群内の各画素について、ディザ法を適用しながら大中小各ドットの形成有無を判断している様子を概念的に示した説明図である。ここでは、説明が煩雑となることを避けるために、画素群内の全画素が同じ階調値を有しており、従って、大中小各ドットの密度データも同じ階調値を有しているものとする。図30(a)は、画素群内の各画素について得られた大中小ドットの密度データを示しており、いずれの画素も、大ドットの密度データが「2」、中ドットの密度データが「90」、小ドットの密度データが「32」であったものとする。
図30(b)は、ディザマトリックス中で、画素群の対応する位置に記憶されている閾値を表している。大ドットの形成有無を判断する際には、大ドットの密度データと、これら閾値とを比較する。ここでは、いずれの画素についても、大ドットの密度データは「2」であるとしているから、大ドットを形成すると判断される画素は、閾値「1」が設定された画素だけである。図30(b)には、大ドットが形成されると判断された画素には、細かい斜線を付して表示している。その他の画素については、中ドットか小ドットのどちらかが形成されるか、若しくはいずれのドットも形成されないかのいずれかであると考えられる。そこで、中ドットの形成有無を判断する。
中ドットの形成有無の判断に際しては、大ドットの密度データ「2」と中ドットの密度データ「90」とを加算して中ドット用の中間データを算出し、得られた中間データ「92」とディザマトリックスの閾値とを比較する。その結果、閾値「42」が設定された画素と、閾値「58」が設定された画素の2つの画素にのみ、中ドットが形成されるものと判断される。図30(c)には、中ドットが形成されると判断された画素には、少し細かい斜線を付して表示している。そして、大ドットも中ドットも形成されない画素については、小ドットが形成されるか、ドットが形成されないかのいずれかであると考えられる。そこで、中ドット用の中間データ「92」に小ドットの密度データ「32」を加算して、小ドット用の中間データを算出し、得られた中間データ「124」とディザマトリックスの閾値とを比較する。その結果、閾値「109」が設定された画素にのみ、小ドットが形成されるものと判断される。図30(d)には、小ドットが形成されると判断された画素には、粗い斜線を付して表示している。
図27に示したドット個数決定処理のステップS402〜S406では、以上のようにして画素群内の各画素について中間データを算出しながら、大中小の各ドットについての形成有無を判断していく。こうして、画素群内の全画素について判断を終了したら(ステップS406:yes)、画素群内に形成される大ドット、中ドット、小ドットの個数を決定する(ステップS408)。図30に例示した画素群については、大ドット1個、中ドット2個、小ドット1個となる。
こうして、大中小の各ドットのドット個数を取得したら、画像の全画素について以上の処理を行ったか否かを判断する(ステップS410)。そして、未処理の画素が残っている場合は、ステップS400に戻って続く一連の処理を繰り返し、画像の全画素について処理を終了したと判断されたら、図27に示したディザ法によるドット個数決定処理を終了する。その結果、画像データは複数の画素群に分割され、各画素群に形成される大ドット、中ドット、小ドットの個数が得られることになる。図31は、画素群毎に大ドット、中ドット、小ドットの形成個数が得られた様子を概念的に示した説明図である。
D−2−2.第2実施例の多値化結果値生成処理の内容 :
第2実施例の多値化結果値生成処理は、以上に説明したディザ法を用いて大中小各ドットの形成有無を判断する処理を基礎としており、画素群内の各画素が何れも代表階調値を有するものとして、代表階調値を大中小各ドットの個数を示す値に多値化する処理を行う。すなわち、第2実施例の多値化結果値は、画素群内に形成される各種ドットの個数の組合せを表している。そこで、先ず、第2実施例の多値化結果値と、画素群内に形成される各種ドットの個数の組合せとの対応関係について説明しておく。
図32は、第2実施例の多値化結果値と、画素群内に形成される各種ドットの個数の組合せとの対応関係を示した説明図である。第2実施例においては、画素群内に形成される大ドット、中ドット、小ドットの個数の組合せは、全部で165通り存在しており、それぞれの組合せ1つずつに多値化結果値が対応付けられている。ここで、1つに画素に形成し得るドットの種類は大ドット、中ドット、小ドットの3種類であり、画素群には8つの画素が含まれているから、1つの画素群に形成し得るドット個数の組合せは、単純に考えると3の8乗(=6561)通りにもなってしまう。しかし、実際には図32に示したように165通りの組合せしか存在しない。これは、次のような理由によるものである。
画素群内の各画素には、大ドット、中ドット、小ドットのいずれのドットも形成され得るが、1つの画素に複数のドットが形成されることはないから、ドット個数の合計が画素群内の画素数(上述した実施例では8個)を越えることはない。従って、これら大中小ドットの個数の組合せは、「大ドットを形成する」、「中ドットを形成する」、「小ドットを形成する」、「ドットを形成しない」の4つの状態の中から重複を許して8回選択するときの組合せの数に等しくなるから、
4H8 (=4+8−1C8)
によって求められ、165通りの組合せが存在していることになる。ここで、nHrは、n種類の物の中から重複を許してr回選択したときに得られる組合せの数(重複組合せ数)を求める演算子である。また、nCrは、n種類の物の中から重複を許さずにr回選択したときに得られる組合せの数を求める演算子である。
165通りであれば、8ビットあれば表現することができるから、第2実施例の多値化結果値は8ビットのデータとなっている。大中小の3種類のドットを形成可能とした場合、各画素は、大中小いずれかのドットを形成するか、何れのドットも形成しないかの4つの状態を取り得るから、これらの状態を表現しようとすると画素あたり2ビットが必要となる。画素群には8つの画素があるから、画素群内の各画素がいずれの状態を取るかを表すためには16ビット必要となる。各画素のドット形成の有無を出力する代わりに多値化結果値を出力することとすれば、データ量を半減させることができる計算となる。
図33は、第2実施例における多値化結果値生成処理の流れを示すフローチャートである。前述したように第2実施例の多値化結果値は、第1実施例の多値化結果値とは異なり各種ドットの個数を表す値となっているが、多値化結果値生成処理としては、参照する多値化用テーブルが異なる以外は、図11に示した第1実施例の処理とほぼ同様である。以下では、図33のフローチャートに従って説明する。
第2実施例の多値化結果値生成処理を開始すると、先ず初めに、互いに隣接する所定個数の画素をまとめて画素群を生成した後(ステップS500)、画像中での画素群の位置に基づいて分類番号を決定する(ステップS502)。次いで、画素群にまとめられた各画素の階調値に基づいて、画素群を分割するか否かを判断する(ステップS504)。説明の便宜から、ここでは分割パターンとしては、第1実施例と同様に、図12に示した左右2つの領域に等分するパターンのみが用意されているものとして説明するが、図25に例示したような、異なる複数の分割パターンが用意されているものとすることも可能である。そして、画素群を分割しないと判断した場合は(ステップS504:no)、画素群の代表階調値を決定した後(ステップS506)、多値化用テーブルを参照することにより、画素群の分類番頭および代表階調値に対応する多値化結果値を取得する。画素群の代表階調値は、前述した第1実施例と同様にして決定する。
図34は、第2実施例の多値化結果値生成処理で参照される多値化用テーブルを概念的に示した説明図である。図示されているように、第2実施例における多値化用テーブルには、画素群の分類番号および代表階調値に対応付けて、多値化結果値が設定されている。この多値化結果値は、画素群内の全ての画素が代表階調値を有するものとして、図27ないし図30で説明した方法により各種ドットの形成個数を求め、得られたドット個数の組合せを図32に示した対応関係に従って変換した値である。図34に示した多値化用テーブルには、このようにして求めた多値化結果値が予め設定されているので、第2実施例の多値化結果値生成処理では、テーブルを参照するだけで、画素群の分類番号および代表階調値から直ちに多値化結果値を得ることが可能である。画素群を分割しないと判断した場合は、こうして得られた多値化結果値を記憶しておく(図33のステップS510)。
一方、画素群を分割すると判断した場合は(ステップS504:yes)、画素群を分割して生成した各領域について代表階調値を決定した後(ステップS512)、それぞれの代表階調値を画素群の分類番号と組み合わせて多値化用テーブルを参照することにより、各領域についての多値化結果値を取得する(ステップS514)。ここでは説明の便宜から、画素群の分割パターンは1種類だけ用意されているとしているが、複数のパターンの中から選択することも可能である。次いで、分割パターンを示すESCコードを記憶する(ステップS516)。
図35は、第2実施例において多値化結果値とESCコードとが割り当てられている様子を示した説明図である。前述したように多値化結果値は165通りの値を取り得るので8ビットのデータとなり、「0」〜「164」の値を多値化結果値に割り当てると、「165」〜「255」の値が空きとなる。そこで、空いた値の中から任意に選んだ値(ここでは、「255」)をESCコードに割り当てる。画素群の分類パターンが複数用意されている場合は、分類パターンの種類に応じて複数の値をESCコードに割り当てておけば良い。図33のステップS516では、画素群の分割パターンに対応付けて割り当てられたESCコードを記憶する。
こうしてESCコードを記憶したら、続いて各領域について得られた多値化結果値を記憶する(ステップS518)。多値化結果値は、画素群を分割して生成された各領域について得られる。従って、画素群をN個の領域に分割した場合は、ESCコードに続いて記憶される多値化結果値の個数もN個となる。また、分割パターンとして画素群の分割数が異なるパターンが用意されている場合は、ESCコードに続いて記憶される多値化結果値の個数が分割パターンに応じて異なる場合を起こり得る。
以上のようにして画素群の多値化結果値を記憶したら、画像データの全画素について処理を終了したか否かを判断し(ステップS520)、未処理の画素が残っていれば(ステップS520:no)、ステップS500に戻って新たな画素群を生成して、続く一連の処理を繰り返す。こうした操作を繰り返し、全画素についての処理が終了したと判断されたら(ステップS520:yes)、分割されていない画素群については多値化結果値のみを、分割されている画素群については、分割パターンを示すESCコードおよび多値化結果値をカラープリンタ200に出力して(ステップS522)、図33に示す第2実施例の多値化結果値生成処理を終了する。
D−3.第2実施例のドット形成有無決定処理 :
次に、第2実施例のカラープリンタ200において、多値化結果値を受け取って大中小各ドットの形成有無を決定する処理について説明する。図36は、第2実施例のドット形成有無決定処理の前半部分の処理を示すフローチャートである。また、図37は、第2実施例のドット形成有無決定処理の後半部分の処理を示すフローチャートである。これらの図に示された処理の大まかな流れは、図21を用いて前述した第1実施例のドット形成有無決定処理とほぼ同様である。但し、第2実施例では大中小の各ドットを形成可能であることに対応して、多値化結果値を、画素群内に形成される各種ドットの個数に対応した中間データに一旦変換してから、各画素についてのドット形成有無を決定する点が大きく異なっている。以下、これらフローチャートに従って、第2実施例のドット形成有無決定処理について説明する。
第2実施例のドット形成有無決定処理を開始すると、先ず初めに、処理対象とする画素群を1つ選択し(ステップS600)、その画素群について供給された多値化結果値の先頭のデータを取得して(ステップS602)、取得したデータがESCコードか否かを判断する(ステップS604)。ここでは、画素群の分割パターンは1種類だけ用意されており、この分割パターンにはESCコード「255」が割り当てられているものとしているから、ステップS604では読み込んだデータが「255」であるか否かを判断することになる。
そして、読み込んだデータがESCコードでは無い場合は(ステップS604:no)、画素群は分割されていないと判断して、読み込んだデータを多値化結果値と読み替える(ステップS606)。一方、読み込んだデータがESCコードである場合は(ステップS604:yes)、画素群は分割されていると判断し、ESCコードに続いて記憶されている所定個数の多値化結果値を取得する(ステップS608)。
次いで、取得した多値化結果値を、画素群内に形成される各種ドットの個数に対応した中間データに変換する(ステップS610)。かかる変換は、中間データ用の変換テーブルを参照することによって行う。図38は、第2実施例のドット形成有無決定処理において参照される中間データ用の変換テーブルを概念的に示した説明図である。図示されているように、変換テーブルには、多値化結果値に対応付けて中間データが設定されており、それぞれの中間データは、形成すべきドットの種類を表す値が、画素群に含まれる画素の数だけ並んだデータとなっている。
例えば、多値化結果値「1」について説明すると、図32に示したように、多値化結果値「1」は、画素群に形成されるドットが小ドット1つのみである状態、換言すれば、画素群内には、小ドットが形成される画素が1つ、ドットが形成されない画素が7つ存在することを表している。そこで、中間データは、ドットを形成しないことを意味する値「0」が7つ、小ドットを形成することを意味する値「1」が1つだけ並んだデータとする。尚、中間データは、これらの値が先頭から小さい順に並んだデータとなっている。従って、多値化結果値「1」に対する中間データは「00000001」というデータとなる。また、多値化結果値に対応するドット個数が、例えば大ドットが2個、中ドットが1個、小ドットが3個であるとする。この場合は、ドットを形成しない画素は2つあるから、先頭の2つの値はドットを形成しないことを意味する値「0」となり、次いで小ドットを形成することを意味する値「1」が3つ続き、その後に中ドットを形成することを意味する値「2」が1つ、最後に大ドットを形成することを意味する値「3」が2つ続くことになる。結局、このような多値化結果値に対応する中間データは、「00111233」というデータとなる。
また、形成可能なドットが大ドット、中ドット、小ドットの3種類である場合、中間データに含まれる各値は「0」〜「3」の4つの値しか取り得ないので、それぞれの値は2ビットあれば表現することができる。従って、画素群内に含まれる画素数を8個とすれば、中間データは1つあたり16ビットあれば表現することが可能である。
図38に示した中間データ用の変換テーブルには、この様にして生成された中間データが、多値化結果値に対応付けて設定されている。図36のステップS610では、このような変換テーブルを参照することによって、画素群の多値化結果値を中間データに変換する。
次いで、選択した画素群に対応する順序値マトリックスを読み込む処理を行う(図37のステップS612)。第1実施例において説明したように、順序値マトリックスには画素群内の各画素について、ドットが形成される順番を示す値(順序値)が設定されている。そして、順序値マトリックスは、画素群の分類番号毎に設定されている。
このようにして、選択した画素群についての中間データと順序値マトリックスとが得られたら、画素群の中から対象画素を1画素ずつ選択しながら、ドット形成の有無を決定していく。この様子を、図39を参照しながら説明する。
図39は、第2実施例のドット形成有無決定処理において中間データと順序値マトリックスとを用いて、ドット形成の有無を決定する様子を示した説明図である。一例として、図39(a)に示すような多値化結果値、すなわち画素群が2つに分割されて、左の領域については多値化結果値92が、右の領域については多値化結果値135が得られたものとする。次いで、これらの多値化結果値を中間データに変換する。図39(b)および図39(c)は、それぞれの領域の多値化結果値が中間データに変換された様子を示している。第2実施例のドット形成有無決定処理では、中間データと順序値マトリックスとを用いて画素群内の各画素についてのドット形成の有無を決定する。
対象としている画素群の順序値マトリックスが、図39(d)のようなマトリックスであったとする。前述したように、順序値マトリックスには順序値が設定されており、順序値は画素群内の各画素について、何番目にドットが形成されるかを示している。今、画素群は左右2つに分割されているものとしているから、順序値マトリックスも左右2つに分割する。そして、左側の領域に設定された順序値は画素群の左側の中間データと組合せ、マトリックスの右側の順序値は画素群の右側の中間データと組合せて考える。
例えば、画素群の中から任意の画素を1つ選択して、その画素が画素群の左上隅の画素であったとする。図39(d)の順序値マトリックスを参照することにより、その画素の順序値は1番であることが分かる。また、選択した画素は画素群の左の領域にあるから、左の領域について得られた中間データを参照する。前述したように中間データには、「ドットを形成しない」、「小ドットを形成する」、「中ドットを形成する」、「大ドットを形成する」ことを表す値が、この順番で先頭から並んでいる。一方、大中小各ドットを形成する場合は、初めに大ドットを形成し、次に中ドットを形成し、最後に小ドットを形成する。すなわち、中間データの先頭から並んでいるドット種類の順番は、実際にドットが形成される順番とは逆の順番となっている。従って、中間データを最後尾から読み出していけば、その画素群には、大中小ドットの中の何れの種類のドットから、それぞれ何個ずつ形成されるかを知ることができる。今、選択した画素の順序値は1番であるから、左の領域の中間データから最後尾にある値を読み出すと「2」が得られるので、その画素に形成すべきドットは、中ドットであると決定することができる。
また、例えば画素群の右下隅の画素が選択された場合は、順序値マトリックスを参照することにより、その画素の順序値は5番であることがわかる。選択した画素は右の領域にあるから、画素群の右側の中間データを参照して最後尾から5番目の値を読み出すと「1」が得られるので、その画素に形成すべきドットは小ドットであると決定することができる。
図37のステップS614ないしステップS620では、このようにして画素群の中から対象とする画素を1つずつ選択しながら、ドット形成の有無を決定する。以下、フローチャートに従って簡単に説明すると、先ず初めに、画素群の中から対象画素を1つ選択し(図37のステップS614)、順序値マトリックスを参照することにより、対象画素の順序値を取得する(ステップS616)。次いで、対象画素に対応する中間データを参照して、大中小いずれのドットを形成すべきかを決定する(ステップS618)。すなわち、画素群が分割されていない場合は、中間データは1つしか得られていないので、このデータを参照してドット形成の有無を決定する。また、画素群が分割されている場合は、複数の中間データが得られているので、対象画素が含まれる領域について得られた中間データを参照することによって、ドット形成の有無を決定するのである。
こうして対象画素についてのドット形成の有無を決定したら、画素群内の全画素について決定したか否かを判断する(ステップS620)。画素群の中に未だドット形成の有無を決定していない画素が残っている場合は(ステップS620:no)、ステップS614に戻って新たな画素を選択し、続く一連の操作を行うことによりドット形成の有無を決定する。このような操作を繰り返して、画素群に含まれる全画素についてドット形成の有無を決定したと判断したら(ステップS620:yes)、今度は、全画素群について、上述した操作を行ったか否かを判断する(ステップS622)。そして、未処理の画素群が残っている場合は(ステップS622:no)、ステップS600に戻って新たな画素群を1つ選択して、上述した一連の操作を行う。全ての画素群についてこうした操作を繰り返し、全画素群についてドット形成の有無を決定したと判断されたら(ステップS622:yes)、図36および図37に示した第2実施例のドット形成有無決定処理を終了して、図5の画像印刷処理に復帰する。
以上、第2実施例の画像印刷処理中で行われる多値化結果値生成処理(図33)、およびドット形成有無決定処理(図36、図37)について説明した。第2実施例の画像印刷処理では、大中小の各種ドットを形成することによって高画質な画像を印刷することができる。このように、第2実施例では第1実施例に対して基準となる画質が向上していることから、階調値分布に応じて画素群を分割してドット形成有無を決定することによる画質の改善効果を、より効果的に発揮させることができる。
また、一般には、形成可能なドットの種類が増加すると、ドット形成の有無を判断する処理が複雑となり、加えて、コンピュータからカラープリンタに供給すべきデータ量が増加してしまう。このため、高画質な画像は得られるものの、どうしても印刷速度が低下する傾向にあった。しかし、第2実施例の画像印刷処理は、第1実施例に対して、多値化結果値のデータ長こそ4ビットから8ビットに増えているものの、多値化結果値を生成する処理そのものは、画素群の分類番号および代表階調値から多値化用テーブルを参照するだけで変わるところが無く、たいへんに簡素な処理によって迅速に多値化結果値を出力することができる。また、画素毎に大中小ドットの形成有無を表現しようとすると16ビット必要になることと比べれば、多値化結果値が8ビットであっても、データ量が半減していることになる。従って、多値化結果値を、コンピュータ100からカラープリンタ200迅速に供給することが可能であり、高画質な画像を迅速に出力することが可能となる。
一方、ドットの形成有無を決定するに際しても、第2実施例では多値化結果値を一旦、中間データに変換しているものの、中間データと順序値マトリックスとに基づいて各画素のドット形成の有無を迅速に決定することができる。また、多値化結果値を中間データに変換する処理も、単にテーブルを参照するだけの簡素な処理なので迅速に実行することができる。このため、大中小の各種ドットを形成して高画質な画像を出力可能であるにも関わらず、処理の複雑化や処理速度の低下を招くことなく、迅速に画像を出力することができる。
加えて、第2実施例においても第1実施例と同様に、多値化結果値生成処理およびドット形成有無決定処理のいずれの処理も簡素な処理とすることができるので、コンピュータのような高度な処理能力を持たない機器においても、十分に実用的な速度で実行することが可能である。
また、以上に説明した第2実施例の画像印刷処理においても、前述した第1実施例の第2の変形例における処理と同様に、画素群を常に分割することとして画像処理を行うこととしても良い。こうすれば、例えば8つの画素を含む画素群についての多値化用テーブルおよび順序値マトリックスをそのまま使用して、実質的には、より少ない画素を画素群とする処理を行うことができる。
加えて、画素群を常に分割するものとして、実際の処理単位よりも大きな画素群を生成しておけば、前述した第1実施例の第2の変形例における場合と同様に、多値化用テーブルのデータ量を低減することも可能となる。例えば、前述した第2実施例の多値化用テーブルは、図34に示したように、1024個の画素群と256通りの代表階調値との組合せ毎に、多値化結果値が設定されており、個々の多値化結果値は8ビットだから、多値化用テーブルのデータ量は2Mビットとなる。すなわち、8つの画素を画素群にまとめた場合、多値化用テーブルを記憶するためには2Mビットのメモリ容量が必要となる。
一方、4つの画素を画素群にまとめた場合は、画素群の数は2048個に増加する。個々の多値化結果値の取り得る範囲は0〜34の35種類だから、6ビットあれば表現可能である。すなわち、画素群に8つの画素が含まれている場合に比べて、画素群の数は2倍、個々の多値化結果値のデータ長は6/8倍となるから、多値化用テーブルのデータ量は、1.5倍の3Mビットとなる。
結局、画素を4つずつ画素群にまとめた場合は多値化用テーブルを記憶するために3Mビット必要になるところを、8つずつ画素群にまとめて、画素群を常に2つに分割して処理することとすれば2Mビットで良くなり、多値化用テーブルを記憶するために要するメモリ容量を低減することが可能となる。
E.第3実施例 :
以上に説明した第1実施例、あるいは第2実施例では、多値化結果値の意味するところは、その結果値がいずれの画素群について得られたものであっても同じように解釈することができた。例えば、第1実施例において多値化結果値3と言えば、その結果値がどの画素群について得られたものであっても、画素群内に3つのドットが形成されることを表していた。また、第2実施例において多値化結果値125と言えば、この値は、図32に示した対応関係に応じて大ドット、中ドット、小ドットがそれぞれ所定の個数だけ画素群に形成されることを表していた。このように、異なる画素群に対して得られた多値化結果値であっても同じ値であれば、その意味するところは同じように解釈することができた。しかし、多値化結果値の意味する内容を、画素群に応じて異ならせることも可能である。こうすれば、多値化結果値のデータ量を低減することが可能となる。特に、第2実施例における場合のように、多値化結果値が165通りもの多くの値を取り得るような場合には、多値化結果値のデータ量を低減することで、より迅速に多値化結果値を供給することができる。以下では、このような第3実施例の画像印刷処理について説明する。尚、第3実施例においても、前述した第2実施例と同様に、カラープリンタ200は大中小の3種類のドットを形成可能であるものとする。
E−1.第3実施例の多値化結果値生成処理 :
第3実施例の多値化結果値生成処理は、前述した第2実施例の多値化結果値生成処理に対して、参照する多値化用テーブルが異なるものの、処理の全体的な流れはほぼ同様である。このように、本実施例の画像印刷処理は、処理の内容が複雑かつ高度な内容になっても、多くの場合は多値化用テーブルの変更だけで対応することができ、実際の処理の流れは簡素なものとすることが可能である。以下では、図33に示した第2実施例の多値化結果値生成処理のフローチャートを流用しながら、第3実施例の多値化結果値生成処理について説明する。
第3実施例の多値化結果値生成処理を開始すると、先ず初めに、互いに隣接する所定数の画素をまとめて画素群を生成し(ステップS500相当)、画素群の分類番号を決定する(ステップS502相当)。次いで、画素群にまとめられた各画素の階調値に基づいて、画素群を分割するか否かを判断する(ステップS504相当)。ここでは、説明の便宜上、分割パターンは画素群を左右2つの領域に等分するパターンのみが用意されているものとする。もちろん、複数種類の分割パターンを用意しておき、階調値の分布に応じた適切なパターンを選択することも可能である。複数種類の分割パターンを用いる場合については後述する。画素群を分割しないと判断した場合は、前述した各実施例と同様にして画素群の代表階調値を決定した後(ステップS506相当)、多値化用テーブルを参照することにより、画素群の分類番号および代表階調値に対応する多値化結果値を取得する。
図40は、第3実施例の多値化結果値生成処理で参照される多値化用テーブルを概念的に示した説明図である。前述した第2実施例の多値化結果値生成処理で参照した多値化用テーブル(図34参照)と、この多値化用テーブルとを比較すれば明らかなように、第3実施例の多値化用テーブルに設定されている多値化結果値は、第2実施例の多値化結果値よりも小さな値となっている。これは、第2実施例では、多値化結果値が、画素群によらず同じように解釈可能な値に設定されているのに対し、第3実施例では、その多値化結果値が得られた画素群を特定して(より正確には、画素群の分類番号を特定して)初めて解釈できるような値に設定されていることによる。
図41は、第3実施例の多値化用テーブルにおいて、画素群の分類番号毎に設定されている代表階調値と多値化結果値との対応関係を例示した説明図である。図では、横軸に代表階調値を取り、縦軸の多値化結果値を取った折れ線グラフを用いて、代表階調値に対して設定された多値化結果値を表示している。また、図中では、異なる分類番号N1〜N5を有する5つの画素群についての多値化結果を示しているが、これら画素群の折れ線が重なって判別し難くなることを避けるために、多値化結果値の原点位置を、縦軸方向に少しずつずらした状態で表示している。
図41中に太い実線を用いて表した折れ線は、分類番号N1番の画素群についての代表階調値と多値化結果値との対応関係を示している。分類番号N1番の画素群については、代表階調値0〜4に対しては多値化結果値0が設定されている。代表階調値5〜20に対しては、多値化結果値1が設定されている。次いで、代表階調値が21〜42の範囲に増加すると、多値化結果値は「2」に増加し、代表階調値が43〜69の範囲に増加すると多値化結果値は「3」に増加する。このように、代表階調値が増加するに従って、多値化結果値も段階的に増加していき、最終的には、多値化結果値は「15」まで増加する。同様に、図中で太い破線で示した分類番号N2番の画素群や、太い一点鎖線で示した分類番号N3番の画素群については、代表階調値が0〜255に増加するに従って、多値化結果値が0〜17へと段階的に増加するように設定されている。更に、細い実線で示した分類番号N4番の画素群および細い一点鎖線で示した分類番号N5番の画素群については、代表階調値が0〜255に増加するに従って、多値化結果値が0〜20へと段階的に増加するように設定されている。この結果、例えば、分類番号N1の画素群については0〜15のいずれかの多値化結果値に多値化(いわば16値化)され、分類番号N2またはN3の画素群については0〜17のいずれかの多値化結果値に多値化(いわば18値化)され、分類番号N4またはN5の画素群については0〜20のいずれかの多値化結果値に多値化(いわば21値化)されることになる。
このように、第3実施例の多値化結果値生成処理では、各画素群の多値化の段数(多値化の結果として取り得る状態数)が同じではなく、画素群の分類番号に応じて固有の段数で多値化されている。この結果、同じ代表階調値を多値化した場合でも、画素群の分類番号が異なり、そのため多値化の段数が異なっていれば、異なる結果値に多値化されることになる。
また、多値化段数が同じであったとしても、同じ多値化結果値が得られるわけではない。例えば、図41に示した分類番号N2の画素群と、分類番号N3の画素群とを比較すれば明らかなように、これら画素群については代表階調値がいずれも18値化されているが、多値化結果値が切り換わる代表階調値は多くの場合、一致していない。分類番号N4の画素群と分類番号N5の画素群とについても同様に、これら画素群では代表階調値が何れも21値化されているが、多値化結果値が切り換わる代表階調値は一致していないことが多い。このことから、たとえ画素群の多値化の段数が同じでも、分類番号が異なれば、異なる多値化結果値が得られることになる。
このように、図40に示した第3実施例の多値化用テーブルに設定されている多値化結果値は、代表階調値と多値化結果値との対応関係が画素群の分類番号毎に異なっている。換言すれば、第3実施例の多値化結果値は、その結果値が得られた画素群の分類番号を特定して初めて解釈できる値となっている。このように多値化結果値を画素群に依存した値としてやることで、多値化結果値の取り得る値の個数を少なくすることが可能である。図41に示した例示では、多値化結果値の個数が最も多い分類番号N4の画素群および分類番号N5の画素群の場合でも、「0」〜「20」までの21通りしか存在しない。実際のところ、多値化結果値の取り得る値は、多く見積もっても30通りを越えることはなく、30通りであれば、5ビットで十分に表現することができる。第2実施例では、多値化結果値を表現するために8ビット必要であったことと比較すれば、多値化結果値のデータ量が5/8に低減されていることになる。尚、図40に示した第3実施例の多値化用テーブルを設定する方法については後述する。
第3実施例の多値化結果値生成処理において、分割しないと判断した画素群については、図40に示した多値化用テーブルを参照することによって、多値化結果値を取得した後(図33のステップS508相当)、得られた多値化結果値を記憶しておく(ステップS510相当)。
一方、第3実施例の多値化結果値生成処理において、画素群を分割すると判断した場合は(図33のステップS504:yesに相当)、画素群を分割して生成した各領域の代表階調値を決定した後(ステップS512相当)、画素群の分類番号および、それぞれの代表階調値から多値化用テーブルを参照して、各領域の多値化結果値を取得する(ステップS514相当)。すなわち、多値化結果値は、画素群を分割して生成した領域の数だけ生成されることになる。次いで、分割パターンを示すESCコードに続けて、領域毎に生成された多値化結果値を記憶する(ステップS516およびS518相当)。
図42は、5ビットのデータに、多値化結果値と分割パターンとが対応付けられている様子を示した説明図である。前述したように、第3実施例では、多値化結果値は画素群の分類番号に固有の値に設定されているので、それぞれの分類番号での多値化結果値は、多く見積もっても30通りの値しか取り得ず、5ビットで表現することができる。そこで、多値化結果値として使用されない「31」を表すデータを、ESCコードに割り付けておく。ここでは、画素群の分割パターンは1つのみであるとしているから、ESCコード1だけで、画素群が分割されていること、および分割パターンを同時に表すことができる。
以上のようにして画素群の多値化結果値を記憶したら、画像データの全画素について処理を終了したか否かを判断し(ステップS520相当)、未処理の画素が残っていれば、新たな画素群を生成した後、続く一連の処理を繰り返す。こうした操作を繰り返し、全画素についての処理が終了したら、分割されていない画素群については多値化結果値のみをカラープリンタ200に出力し、また、分割されている画素群については、分割パターンを示すESCコードおよび多値化結果値を出力して(ステップS522相当)、第3実施例の多値化結果値生成処理を終了する。
図43は、第3実施例の多値化結果値生成処理によって、画素群にまとめられた画像データが多値化結果値に変換される様子を示した説明図である。図43(a)は、8つの画素が画素群にまとめられた様子を示している。画素群Aは、全ての画素の階調値が「97」となっている。画素群Bは、左半分の領域にある画素の階調値は「97」であるが、右半分の画素は階調値が「135」となっている。そして、その隣にある画素群Cは、全ての画素の階調値が「135」となっている。図43(b)は、これら画素群について代表階調値が決定された様子を表している。画素群Aについては代表階調値97が得られている。画素群Bについては左右2つの領域に分割されて、左の領域については代表階調値97が、右の領域については代表階調値135が得られている。そして画素群Cについては代表階調値135が得られている。
図43(c)は、これらの代表階調値を多値化結果値に変換した後、得られた多値化結果値を記憶している様子を示している。先頭の値「15」は画素群Aについての多値化結果値である。その次の値「31」は、画素群Aに続く画素群Bが分割されていることを表すESCコードである。ここでは、画素群の分割パターンは左右2つの領域に等分する1パターンのみであるとしているから、分割されていることを示すだけで同時に分割パターンを表していることになる。ESCコード「31」に続く2つの値は、それぞれ左領域についての多値化結果値と、右領域についての多値化結果値とを表している。結局、画素群Bについては、ESCコードを含めて3つのデータを用いて多値化結果値が表されていることになる。尚、画素群Aと画素群Bの左領域とは同じ代表階調値を有しているが、それぞれの画素群の分類番号が異なっているため、得られる多値化結果値は異なった値となっている。
画素群Bについての多値化結果値を表す3つの値に続いて、画素群Cについての多値化結果値が記憶される。この値「18」はESCコードではないので、画素群Cは分割されていないと考えられる。従って、この画素群の多値化結果値は値「18」だけであると判断され、その次の値は画素群Dについての多値化結果値を示していることになる。第3実施例の多値化結果値生成処理では、このような多値化結果値を生成してカラープリンタに出力する。
尚、以上では、画素群の分割パターンは1種類のみが用意されているものとして説明したが、より多くの分割パターンを用意しておくことも可能である。例えば、以上の説明では多値化結果値の中で使用されていない値「31」をESCコードとして用いたが、図42に示したように値「30」も使用されていない値である。そこで、この値「30」を第2の分割パターンを示すESCコードに割り当てることも可能である。例えば、ESCコード「30」は、画素群を上下2つの領域に等分するパターンを表すものとして、画素群を上下2つの領域に等分した場合には、ESCコード「30」に続けてそれぞれの領域の多値化結果値を記憶することとしても良い。
また、更に多くの分割パターンを用意する場合は、次のようにすることもできる。例えば、以上の説明においては、図42に示したように多値化結果値が5ビットデータであるものとしたが、1ビットだけ増やした6ビットデータとしてもよい。6ビットデータであれば、0〜63までの値を表現することができるので、30〜63までの値を異なる分割パターンに割り付けることができる。
あるいは、次のように複数のESCコードを組み合わせることにより、分割パターンを表すこととしても良い。例えば、本実施例の画素群は主走査方向(図上では横方向)に4画素、副走査方向(図上では縦方向)に2画素がまとめられた横長の画素群であることから、画素群を分割する場合、左右2つの領域に分割するケースが最も多いと考えられる。そこで、2つのESCコード「30」、「31」の中の一方(たとえば「31」)を、最も頻繁に現れると考えられる分割パターンに割り当てる。そして、これ以外の分割パターンについては、もう一方のESCコード(例えば「30」)と、新たな5ビットデータとを組み合わせて表現することとしても良い。すなわち、図43(d)に例示したように、画素群Bについて先頭のデータが「30」であれば、画素群が左右2分割以外のパターンで分割されていることを表すものとして、具体的な分割パターンは、続くデータ(図示した例では「0」)によって表すものとしてもよい。もちろん、画素群Bの先頭のデータが「31」であれば、その画素群は左右2つの領域の等分されていると判断して、続く2つの多値化結果値を、それぞれ左領域および右領域について得られた多値化結果値と解釈すればよい。このようにすれば、より多種類の分割パターンを使い分けながら、分割パターンの種類が増えることで全体としてデータ量が増加してしまうことを抑制することが可能となる。
E−2.第3実施例のドット形成有無決定処理 :
上述したように、第3実施例の多値化結果値生成処理では、多値化結果値のデータ量を低減するために、画素群の分類番号に固有の多値化結果値を生成してカラープリンタ200に出力する。すなわち、多値化結果値の意味するところは、画素群の分類番号を特定して初めて解釈可能となっている。このため、第3実施例のカラープリンタ200では、このような多値化結果値を受け取ると、次のようなドット形成有無決定処理を行うことにより、画素群内の各画素についてのドット形成の有無を決定する処理を行う。
図44は、第3実施例のドット形成有無決定処理の前半部分の処理を示すフローチャートである。また図45は、第3実施例のドット形成有無決定処理の後半部分の処理を示すフローチャートである。図示した第3実施例のドット形成有無決定処理は、図36および図37を用いて前述した第2実施例の処理に対して、コンピュータ100から受け取る多値化結果値が画素群に依存した値となっており、この多値化結果値を画素群に依存しない中間データに変換してから、各画素についてのドット形成有無を決定する点が大きく異なっている。以下では、こうした第2実施例に対する相違点を中心として、第3実施例のドット形成有無決定処理について説明する。
第3実施例のドット形成有無決定処理においても、前述した第2実施例と同様に、処理を開始すると先ず初めに、処理対象とする画素群を1つ選択する(ステップS700)。そして、その画素群について供給された多値化結果値の先頭のデータを取得し(ステップS702)、取得したデータがESCコードか否かを判断する(ステップS704)。読み込んだデータがESCコードでは無い場合は(ステップS704:no)、画素群は分割されていないと判断して、読み込んだデータを多値化結果値と読み替える(ステップS706)。一方、読み込んだデータがESCコードである場合は(ステップS704:yes)、画素群は分割されていると判断し、ESCコードに続いて記憶されている所定個数の多値化結果値を取得する(ステップS708)。
第3実施例においては前述した第2実施例と異なり、こうして読み込んだ多値化結果値が、その値が得られた画素群の分類番号を特定して初めて解釈可能な値となっている。そこで、第3実施例のドット形成有無決定処理では、この多値化結果値を、画素群の分類番号に依存しないデータに変換した後に、画素群内の各画素についてのドット形成の有無を決定する。多値化結果値を分類番号に依存しないデータに変換する準備として、先ず、画素群の分類番号を取得する処理を行う(ステップS710)。画素群の分類番号は、画像中での画素群の位置に基づいて、次のようにして取得することができる。
図46は、画素群の分類番号を決定する方法を示した説明図である。今、ドット形成の有無を決定する対象としている画素群が、図46(a)に示すように、画像の一番左上隅を基準として主走査方向にi個目の画素群、副走査方向にj個目の画素群の位置にあるとする。また、このような画素群の位置を、座標値(i,j)によって表すものとする。また、ディザマトリックスの大きさは、通常は、画像のようには大きくはないので、図14(b)を用いて前述したように、ディザマトリックスを主走査方向に移動させながら、繰り返して使用するものとする。
1つのディザマトリックスには主走査方向・副走査方向にそれぞれ32個ずつのブロックが含まれるとしているから(図13(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 …(1)
によって求めることができる。
また、画素群のディザマトリックス中での位置を表す値I,Jは、上述したような計算を実行せずとも、i,jの2進数表示から所定ビットのデータを抜き出すだけで、極めて簡便に求めることができる。図47は、画素群の座標値(i,j)から、画素群のディザマトリックス中での位置を求める方法を具体的に示した説明図である。図47(a)は、数値iを表す10ビットの2進数表示したデータを概念的に示している。尚、図47(a)では、各ビットを識別するために、最上位ビットから最下位ビットに向かって1番から10番までの通し番号を付して表示している。
画素群の位置を示す値Iを求めるに際しては、先ず初めに、int(i/32)を算出する。この演算は、iの2進数データを右方向に5ビット分だけビットシフトさせることで実行することができる(図47(b)参照)。次いで、int(i/32)×32を算出する。この演算は、int(i/32)の2進数データを左方向に5ビット分だけビットシフトさせることで実行することができる(図47(c)参照)。最後に、数値iから、int(i/32)×32を減算すれば、目的とする数値Iを得ることができる。この操作は、結局は、数値iの2進数データから下位の5ビットのみを抜き出していることに他ならないから、極めて簡便に数値Iを得ることが可能である。同様にして、数値jの2進数データから下位の5ビットのみを抜き出すことで、極めて簡便に数値Jを得ることが可能である。こうして数値IおよびJが求まれば、上述の(1)式を用いて分類番号を算出することができる。
図44に示した第3実施例のドット形成有無決定処理のステップS710では、以上のようにして、処理対象としている画素群の分類番号を取得する。次いで、予め設定しておいた変換テーブルを参照することにより、画素群に依存する形態で表現された多値化結果値を、画素群に依存しない形態で表現された中間データに変換する(ステップS712)。
図48は、第3実施例のドット形成有無決定処理において、多値化結果値を中間データに変換する際に参照される変換テーブルを概念的に示した説明図である。図示されているように、第3実施例のドット形成有無決定処理において参照する変換テーブルには、画素群の分類番号と多値化結果値との組合せに対応づけて、対応する中間データが設定されている。図中に示したDD(n,m)は、画素群の分類番号n番であり、その画素群の多値化結果値が「m」である場合の中間データを表している。また、この中間データは、図38に示したように、その画素群に形成されるドットの種類と、それらドットの個数とを示す形式で表現されている。そして、前述したようにこの中間データは、どの画素群についてのデータであっても同じように解釈することが可能なデータとなっている。従って、図48に示した変換テーブルを参照することにより、画素群に依存した形式の多値化結果値を、画素群に形成すべきドットの種類と個数とが画素群に依存しない形式で表現された中間データに変換することができる。
こうして多値化結果値を中間データに変換したら、今度は、選択した画素群に対応する順序値マトリックスを読み込む処理を行う(図45のステップS714)。前述したように、順序値マトリックスには、画素群内の各画素についてドットが形成される順番を示す値(順序値)が設定されている。次いで、前述した第2実施例と同様にして、選択した画素群についての中間データと順序値マトリックスに設定された順序値とを参照しながら、画素群の中から対象画素を1画素ずつ選択してドット形成の有無を決定していく。すなわち、画素群の中から対象とする画素(対象画素)を1つ選択し(ステップS716)、順序値マトリックスを参照することにより、対象画素の順序値を取得する(ステップS718)。次いで、対象画素に対応する中間データを参照して、大中小いずれのドットを形成すべきかを決定する(ステップS720)。このとき、画素群が分割されている場合は複数の中間データが得られているので、対象画素が含まれる領域について得られた中間データを参照することによって、ドット形成の有無を決定する。一方、画素群が分割されていない場合は中間データは1つしか得られていないので、このデータを参照してドット形成の有無を決定する。
こうして画素群の中から1つずつ対象画素を選択しながら、全ての画素についてのドット形成の有無を決定するまで上述した操作を繰り返し(ステップS722)、全画素につてドット形成の有無を決定したら、今度は、全画素群について、上述した操作を行ったか否かを判断する(ステップS724)。そして、未処理の画素群が残っている場合は、ステップS700に戻って新たな画素群を1つ選択して、上述した一連の操作を行う。全ての画素群についてこうした操作を繰り返し、全画素群についてドット形成の有無を決定したら、図44および図45に示した第3実施例のドット形成有無決定処理を終了する。
以上に説明した第3実施例の画像印刷処理では、画素群の代表階調値を多値化する際に、画素群に依存した多値化結果値を生成することで、コンピュータ100からカラープリンタ200に出力すべきデータ量を低減することができる。このため、ある程度の割合で画素群を分割した場合でも、分割によるデータ量の増加を抑制して、多値化結果値を迅速に出力することが可能となる。また、このような多値化結果値を生成する処理も、前述した各種実施例と同様に多値化テーブルを参照することで簡素な処理とすることができる。このため、各画素群の多値化結果値を迅速に供給することができる。加えて、画素群内の階調値分布に応じて画素群を分割することで、画素群内の各画素についてのドット形成有無を適切に決定することができるので、高画質な画像を出力することが可能となる。
E−3.第3実施例の多値化用テーブルの設定方法 :
次に、第3実施例の多値化結果値生成処理中で参照される多値化用テーブル(図40参照)を設定する方法について説明する。前述したように、多値化用テーブルには、代表階調値に対する多値化結果値が画素群の分類番号毎に設定されており、多値化用テーブルを参照しながら多値化することで、代表階調値は、図41に示したように画素群の分類番号に依存した多値化結果値に変換されることになる。
本実施例の多値化用テーブルは、図27ないし図30を用いて前述した特許3292104号に開示の方法、すなわち、大きさの異なる複数種類のドットの形成有無を決定可能なように、ディザ法を発展させた手法を基にして設定されている。
前述したように多値化結果値生成処理では、画素群内に含まれる各画素の画像データを代表階調値で代表させることにより、画素群をまとめて多値化している。そこで、多値化用テーブルを設定するに際しては、先ず、画素群内の全画素が代表階調値と同じ値の画像データを有するものとして、各画素について大中小の各種ドットについての形成有無を判断することを考える。各種ドットについての形成有無の判断は、図28を用いて前述したハーフトーン処理によって行う。
図49は、画素群内の各画素について、大中小各ドットの形成有無を判断している様子を概念的に示した説明図である。図中では、ハーフトーン処理を行うために着目している画素群を太い実線で囲って表している。画素群は8つの画素から構成されており、各画素の画像データは、いずれも代表階調値と同じ値(図示した例では階調値97)を有している。大中小各種ドットの形成有無を判断するためには、画像データを各ドットについての密度データに変換する。密度データへの変換は、図29を用いて前述したドット密度変換テーブルを参照することによって行う。ここでは、画素群内の全画素が同じ画像データを有するものとしているから、各種ドットについても密度データも全て画素について同じ値となる。図示した例では、大ドットの密度データの階調値が「2」、中ドットの密度データの階調値が「95」、小ドットの密度データの階調値が「30」であった場合を表している。
次いで、図28を用いて前述したように、大ドットの密度データ、中ドット用の中間データ、あるいは小ドット用の中間データと、ディザマトリックスに設定されている閾値とを比較することによって、各種ドットについての形成有無を画素毎に判断する。ここで、比較に用いるディザマトリックスの閾値は、ディザマトリックスの中から、着目している画素群に対応する箇所に設定されている閾値を使用する。例えば、図49に示した例では、画素群が画像の左上隅にあることから、閾値についても、ディザマトリックス中の左上隅の画素群に設定されている閾値を使用する。
そして、画素群に設定されている8つの閾値の中で、大ドットの密度データよりも小さな閾値が設定されている画素については、大ドットを形成すると判断する。ここでは、大ドットの密度データは階調値「2」としているから、大ドットが形成される画素は、閾値「1」が設定されている画素だけである。図49では、大ドットが形成されると判断された画素には、細かい斜線を付して表示している。大ドットの密度データ「2」よりも大きく、大ドットの密度データと中ドットの密度データとを加算して得られた中ドット用の中間データ「97」よりも小さな閾値が設定されている画素には、中ドットを形成するものと判断する。このような画素は、閾値「42」が設定された画素、および閾値「58」が設定された画素の2つの画素だけである。図49では、中ドットが形成されると判断された画素には、少し粗い斜線を付して表示している。そして、最後に、中ドット用の中間データ「97」よりも大きく、中ドット用の中間データに小ドット用の密度データを加算して得られた小ドット用の中間データ「127」よりも小さな閾値が設定されている画素には、小ドットを形成するものと判断する。このような画素は、閾値「109」が設定された画素だけである。図49では、小ドットが形成されると判断された画素には、粗い斜線を付して表示している。このようにして、大ドット、中ドット、小ドットの形成有無を判断した結果、着目している画素群の代表階調値が「97」である場合には、大ドット1個、中ドット2個、小ドット1個が形成されることになる。
代表階調値が大きく異なれば、画素群内に形成される大ドット、中ドット、小ドットの個数も異なったものとなる。また、代表階調値を「0」から「255」まで変化させれば、それに伴って大ドット、中ドット、小ドットの個数は、幾段階かに変化するはずである。更に、画素群の分類番号が異なれば、ディザマトリックスの閾値も異なることから、ドット個数の変化の仕方も異なるはずである。図40に示した多値化用テーブルは、代表階調値を「0」から「255」まで変化させたときの、各種ドットの個数が段階的に変化する挙動を、分類番号毎に調べることによって設定されている。
図50は、第3実施例の多値化結果値生成処理中で参照される多値化用テーブルを設定する処理の流れを示したフローチャートである。以下、フローチャートに従って説明する。多値化用テーブルの設定処理を開始すると、先ず初めに、画素群の分類番号を1つ選択する(ステップS800)。例えば、ここでは分類番号1番を選択したものとする。
次いで、選択した分類番号の画素群に対応する閾値を、ディザマトリックスの中から読み出してやる(ステップS802)。例えば、ここでは分類番号1番を選択したものとしているから、図6に例示したディザマトリックスの中から、図13(b)中で1番と表示したブロック位置に設定されている8つの閾値を読み出す。
そして、多値化結果値RVおよび代表階調値BDを「0」に設定し(ステップS804)、更に、大ドット、中ドット、小ドットの形成個数をいずれも0個に設定する(ステップS806)。
続いて、図29に示したドット密度変換テーブルを参照することにより、代表階調値を大ドット、中ドット、小ドットについての密度データに変換した後(ステップS808)、これら密度データと先に読み込んでおいた閾値とに基づいて、大中小の各種ドットについての形成個数を決定する(ステップS810)。すなわち、図28あるいは図30を用いて説明したように、大ドットの密度データよりも小さな閾値の個数を求めて、得られた個数を大ドットの形成個数とする。また、大ドットの密度データよりも大きく且つ中ドット用の中間データよりも小さな閾値の個数を求めて、これを中ドットの形成個数とする。更に、中ドット用の中間データよりも大きく且つ小ドット用の中間データよりも小さな閾値の個数を求めて、これを小ドットの形成個数とする。
こうして求めた各種ドットの形成個数が、先に設定されていた形成個数に対して変更されたか否かを判断する(ステップS812)。そして、形成個数が変更されたと判断されれば(ステップS812:yes)、多値化結果値RVを「1」だけ増加させて(ステップS814)、得られた多値化結果値RVを代表階調値BDに対応づけて記憶する(ステップS816)。一方、形成個数が変更されていないと判断された場合は(ステップS812:no)、多値化結果値RVを増加させることなく、そのままの値を代表階調値BDに対応づけて記憶する(ステップS816)。
以上のようにして、ある代表階調値に対する多値化結果値を記憶したら、代表階調値BDが階調値255に達したか否かを判断する(ステップS818)。階調値255に達していなければ(ステップS818:no)、代表階調値BDを「1」だけ増加させて(ステップS820)、ステップS808に戻って再び代表階調値BDを密度データに変換した後、続く一連の処理を行って、新たな代表階調値BDに対応づけて多値化結果値RVを記憶する(ステップS816)。代表階調値BDが階調値255に達するまで、こうした操作を繰り返す。そして、代表階調値BDが階調値255に達したら(ステップS816:yes)、選択した分類番号については、すべての多値化結果値を設定したことになる。
そこで、すべての分類番号について、以上のような処理を行ったか否かを判断し(ステップS822)、未処理の分類番号が残っている場合は(ステップS822:no)、ステップS800に戻って再び上述した処理を行う。こうした処理を繰り返し、すべての分類番号について、すべての多値化結果値を設定したと判断されたら(ステップS822:yes)、図50に示した多値化用テーブル設定処理を終了する。
以上の説明から明らかなように、多値化結果値は、代表階調値を変換して得られた大中小各ドットの密度データと、ディザマトリックス中で画素群に対応する位置に記憶されている閾値とによって決定される。ここで、図29に示したドット密度変換テーブルは、画素群の分類番号が異なっていても同じテーブルを参照するから、代表階調値に対する各ドットの密度データも、分類番号によらず同じ密度データが得られる。しかし、ディザマトリックスから読み出された閾値の組は、分類番号毎に異なったものとなる。何故なら、ディザマトリックスは、画像上でドットが一定のパターンで発生したり、あるいは近接した位置に固まって発生することで画質を悪化させることの無いように、閾値は出来るだけ分散させて且つ出来るだけランダムに設定されている。このため、画素群に含まれる複数個の閾値を組として見たときに、全く同じ組合せとなる可能性は極めて低いと考えられるからである。このような理由から、第3実施例の多値化結果値生成処理で参照される多値化用テーブルは、代表階調値と多値化結果値との対応関係が分類番号毎に異なったものとなり、また、多値化結果値が変化する回数(図41に示した多値化の段数)も、分類番号に応じて異なったものとなるのである。
E−4.第3実施例の変形例 :
上述した第3実施例の多値化結果値生成処理では、階調値0から階調値255までの代表階調値毎に、対応する多値化結果値を記憶した多値化用テーブルを参照している。しかし多値化結果値は、代表階調値が増加するに従って段階的に増加するだけなので、多値化結果値が切り換わる代表階調値だけを記憶しておけば、代表階調値に対する多値化結果値を求めることができる。以下では、このような第3実施例の変形例の多値化結果値生成処理について説明する。
図51は、第3実施例の変形例の多値化結果値生成処理において参照される閾値テーブルを概念的に示した説明図である。図示されているように閾値テーブルには、分類番号毎に、多値化結果値に対応する閾値が設定されている。この閾値は、代表階調値を階調値0から階調値255まで増加させたときに、その多値化結果値となる最も大きな代表階調値を表している。一例として、分類番号1番の画素群について説明する。分類番号1番については、多値化結果値「0」に対しては閾値「2」が設定されている。これは、分類番号1番の画素群については、代表階調値が「0」ないし「2」の範囲にあれば、多値化結果値が「0」となることを表している。また、多値化結果値「1」に対しては閾値「15」が設定されている。これは、分類番号1番の画素群については、代表階調値が「3」から「15」の範囲にあれば多値化結果値が「1」となることを表している。同様に、多値化結果値「14」に対しては閾値「243」が、そして多値化結果値「15」に対しては閾値「255」が設定されている。これは、代表階調値が「244」から「255」の範囲にあれば多値化結果値が「15」になることを、そして、分類番号1番の画素群については、多値化結果値の最大値が「15」であることを表している。
尚、図51では、分類番号毎の閾値は、それぞれ多値化結果値に対応させて設定されているものとした。しかし、特に多値化結果値に対応付けることなく、単なる閾値の組を分類番号毎に記憶することとしてもよい。この場合は、代表階調値よりも小さな閾値の個数を数えることで、多値化結果値を求めることができる。再び、分類番号1番の画素群を例に用いて説明する。例えば、代表階調値が「20」であったとする。分類番号1番に設定されている閾値の組の中で、階調値20よりも小さな閾値は、「2」、「15」、「18」の3個である。このことから、代表階調値20に対する多値化結果値は「3」であると求めることとしてもよい。
以上に説明した第3実施例の変形例の多値化結果値生成処理では、画素群についての代表階調値と分類番号とを求めた後、図51に例示した閾値テーブルを参照することによって、多値化結果値を生成する。閾値テーブルは、前述した第3実施例の多値化結果生成処理中で参照する多値化用テーブル(図40参照)よりも少ないデータ量で記憶しておくことができる。このため、変形例の多値化結果値生成処理は、第3実施例の処理に比べて、メモリ使用量を節約することが可能である。これに対して、前述した第3実施例の多値化結果値生成処理は、分類番号と代表階調値とから多値化用テーブルを参照するだけで直ちに多値化結果値を求めることができる。すなわち、変形例における処理のように代表階調値と閾値とを比較する必要がないので、迅速に多値化することが可能である。
また、以上に説明した第3実施例の画像印刷処理においても、前述した第1実施例の第2の変形例における処理と同様に、画素群を常に分割することとして画像処理を行うこととしても良い。こうすれば、例えば8つの画素を含む画素群についての多値化用テーブルおよび順序値マトリックスをそのまま使用して、実質的には、より少ない画素を画素群とする処理を行うことができる。加えて、画素群を常に分割するものとして、実際の処理単位よりも大きな画素群を生成しておけば、前述した第1実施例の第2の変形例における場合と同様に、多値化用テーブルのデータ量を低減することも可能となる。例えば、半分の大きさの画素群を生成する代わりに、1つの画素群を2つに分割して処理する場合について説明する。この場合、多値化用テーブルに含まれる画素群の数は半分に減少する。一方、個々の多値化結果値については、画素群が大きくなるほどデータ長も大きくなる。上述した第3実施例に即して説明すれば、画素群に含まれる画素数が4つの場合は、個々の多値化結果値は4ビットで表現されるが、画素群に含まれる画素数が8つに増加すると、多値化結果値も5ビットのデータとなる。しかし、多値化結果値のデータ長の増加度合いよりも、画素群の数の減少度合いの方が大きくなっている。結局、小さな画素群を生成する代わりに、大きな画素群を常に2つに分割して処理することで、多値化用テーブルを記憶するために必要なメモリ容量を、5/8に減少させることが可能となる。
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。例えば、以上の実施例では、印刷用紙上にドットを形成して画像を印刷する場合について説明したが、本発明の適用範囲は画像を印刷する場合に限られるものではない。例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置などにも、本発明を好適に適用することができる。