以下では、本発明の作用・効果をより明確に説明するために、本発明の実施の形態を次の順序に従って説明する。
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の変形例 :
D−6:第6の変形例 :
D−7:第7の変形例 :
D−8:第8の変形例 :
A.実施例の概要 :
図1は、印刷システムを例にとって本発明の概要を説明するための説明図である。本印刷システムは、画像処理装置としてのコンピュータ10と、画像出力装置としてのプリンタ20等から構成されており、コンピュータ10に所定のプログラムがロードされて実行されると、コンピュータ10およびプリンタ20などが全体として、一体の画像出力システムとして機能する。プリンタ20は、印刷媒体上にドットを形成することによって画像を印刷する。コンピュータ10は、印刷しようとする画像の画像データに所定の画像処理を施すことによって、プリンタ20が画素毎にドットの形成を制御するためのデータを生成して、このプリンタ20に供給する。
一般的な印刷システムでは、次のようにして画像を印刷する。先ず、コンピュータで所定の画像処理を施すことにより、画像データを、印刷画素(あるいは出力画素)毎にドット形成の有無を表すデータに変換する。次いで、得られたデータをプリンタに供給し、プリンタでは供給されたデータに従ってドットを形成することにより画像を印刷している。ここで、印刷しようとする画像の画素数が多くなると、それに伴って、画像処理に要する時間が増加して、画像を迅速に印刷することが困難となる。また、画素数が多くなるにつれて、画素毎にドット形成の有無を表すデータのデータ量が増加するので、コンピュータからプリンタにデータを出力するために要する時間が長くなり、それだけ印刷に要する時間が増加してしまう。
このような画像処理は、低解像度多階調の入力画像に応じて高解像度低階調の出力画像を形成するという印刷処理固有の問題である。具体的には、印刷処理では、一般に、自然画においては200dpi程度で256階調の画像を、1440dpi×720dpiの4階調の画像で表現することが要請されている。これは印刷装置による多階調表現が困難であることを考慮して、印刷解像度で階調数を補償しようとしているためである。
こうした点に鑑みて、図1に例示した印刷システムでは、次のようにして画像を印刷する。先ず、コンピュータ10では、200dpi程度で256階調の画像を構成する各入力画素の入力階調値を、1440dpi×720dpiの4階調を有する8個の画素群で表現するための多値化処理(あるいは減色処理)を行って多値化結果値を生成する。この多値化結果値は、コンピュータ10からプリンタ20に供給される(図1)。プリンタ20に供給された多値化結果値は、ドット形成有無決定モジュールによって処理されることにより、画素群内の各画素についてドット形成の有無を表すデータに変換される。次いで、各画素について決定されたドット形成の有無に従って、ドット形成モジュールが印刷媒体上にドットを形成することによって画像が印刷される。
多値化結果値は、たとえばプリンタ20が大中小の3種類のドットを形成可能な場合には、各画素群に形成される各種類のドット個数を表すデータとしてコード化される。このようなコード化されたデータは、コード値と呼ばれる。
プリンタ20では、各画素群についてのコード値を受け取ると、画素群内の各画素についてのドット形成の有無を表すデータ(画素群の出力ドット配置)を決定する。ドット形成の有無は、第2の対応関係を参照しながら、ドット形成有無決定モジュールによって行われる。このようにして得られたドット形成有無の決定結果に従って、ドット形成モジュールがドットを形成することによって画像が印刷される。
ここで、画素毎にドット形成の有無を表すデータに比べれば、画素群毎のコード値は遙かに小さなデータ量とすることができる。従って、コンピュータ10から画素毎にドット形成の有無を表したデータをプリンタ20に供給する代わりに、画素毎のコード値を供給してやれば、極めて迅速にデータを転送することが可能となる。
なお、コード化は、コンピュータ10で行っても良く、この場合には、多値化結果値の代わりにコンピュータ10からプリンタ20には、コード値が供給されることになる。ここで、コード値や多値化結果値は、特許請求の範囲における「エンコードデータ」に相当する。
また、「多値化結果値生成処理」は、上述のように、入力画素の入力階調値から直接的に多値化結果値を生成するようにしても良いし、あるいは、たとえば入力画像を解像度変換した後に入力画素に対応する複数の画素に含まれる画素の少なくとも1つの画素値に応じて多値化結果値を生成するようにしても良い。前者は、解像度変換処理に伴う処理負担や画質の劣化を防止することができるという利点を有し、後者は、任意の大きさの印刷を実現することができるという利点を有する。
しかし、本願の発明者は、このような構成が単に印刷処理速度を向上させるだけでなく、印刷装置の処理負担を過大とすることなく、従来のディザ法や誤差拡散法の限界を超える新たなハーフトーン処理を可能とする点に着目した。
従来のディザ法や誤差拡散法は、本来的に以下の限界を有している。ディザ法は、ディザマトリックスの閾値の格納要素の適切な配置によってドットの形成状態を直接的に制御できるという利点がある一方、想定される入力階調値の全域を評定として閾値の格納要素が配置されなければならないという限界を有している。すなわち、入力階調値の一部領域に対して閾値の格納要素の配置を最適化させると、他の領域において最適状態から離れてしまうので入力階調値の全域に対する妥協が必要となってしまうのである。一方、誤差拡散法は、誤差の拡散によってドットを分散させるので上記妥協を行うことなくドットの分散性は確保することができる一方、ドットの形成状態を直接的に制御することが困難であるとともに処理負担が大きいという問題を有している。
このような限界を超えるハーフトーン技術は、各画素群において各ドット個数毎にドットの形成状態を自由に制御できる構成として以下のように実現することができる。
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は印刷用紙上にカラー画像を印刷している。
なお、カラープリンタ200にも、制御回路260内にはCPU,RAM,ROMなどが搭載されていることから、コンピュータ100が行う処理をカラープリンタ200内で実施することも可能である。このような場合は、デジタルカメラ120などで撮影した画像の画像データをカラープリンタ200に直接供給して、制御回路260内で必要な画像処理を実施することにより、カラープリンタ200から直接画像を印刷することも可能となる。
C.本発明の実施例の画像印刷処理の概要 :
図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つ画像を複数の画素群に分割する。画素群としてまとめられ画素数は、必ずしも全ての画素群が同数である必要はなく、たとえば、複数の画素数を規則的に切り換えたり、あるいは画像中での位置に応じて画素群にまとめられる画素数を切り換えることも可能であるが、ここでは理解の便宜から、最も単純な場合として全画素群が同数の画素を有するものとして説明する。こうして複数の画素を画素群にまとめて、各画素群を代表する階調値である画素群階調値を求めた後、画素群階調値の多値化を行う。その結果、画素群毎の画素群階調値が多値化結果値に変換されることになる。
ここで、本実施例の多値化結果値生成処理では、多値化の結果として取り得る状態数が画素群毎に異なっている。すなわち、一般的に行われる多値化では、たとえば1つの画像中で2値化と3値化とが切り換わることはないが、本実施例の多値化結果値生成処理では、画素群毎に多値化の段数が異なっている。そして、画素群階調値を、画素群毎に個数の段数で多値化して得られた結果値を、カラープリンタ200に向かって出力する。このように画素群階調値を、画素群毎に固有の段数で多値化して、得られた結果を出力することとすれば、カラープリンタ200に出力すべきデータ量を大きく低減することができる。
カラープリンタ200の制御回路260に内蔵されたCPUは、コンピュータ100から画素群毎に供給された多値化結果値のデータを受け取ると、ドット形成有無決定処理を開始する(ステップS108)。上述したように、多値化結果値は、画素群階調値を多値化して得られた値であり、画素群内でいずれの画素にドットを形成すればよいかを示した値ではない。画素群の多値化結果値からドットを形成する画素位置を決定する手法としては、いわゆる濃度パターン法と呼ばれる手法が知られているが、本実施例の多値化結果値は画素群毎に固有の段数で多値化されており、濃度パターン法をそのまま適用することはできない。そこで、本発明の実施例のドット形成有無決定処理では、後述するような特殊な方法を用いることにより、画素群毎に得られた多値化結果値からドットを形成する画素位置を決定する。
また、いわゆる濃度パターン法では、実質的な解像度が、多値化を行った画素群の解像度まで低下してしまい、画質の悪化を招き易い傾向があった。これに対して、本発明の実施例のドット形成有無決定処理によれば、後述するように画素群の大きさに依存して画質が悪化することがない。更に、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクと呼ばれるディザマトリックスを用いることで実現されるような、ドットが良好に分散した高画質な画像を印刷することが可能となる。本発明の実施例のドット形成有無決定処理の詳細な内容、および、かかる処理を適用してドット形成の有無を決定することで、こうした特性が得られる理由については、後ほど詳しく説明する。
以上のようにして、ドットを形成すべき画素位置を決定したら、決定した画素位置にドットを形成する処理を行う(ステップS110)。すなわち、図3を用いて説明したように、キャリッジ240の主走査および副走査を繰り返しながらインク吐出用ヘッドを駆動してインク滴を吐出することにより、印刷用紙上にインクのドットを形成する。こうしてドットを形成することにより、画像データに対応した画像が印刷されることになる。
C−1.多値化結果値生成処理の概要 :
図7は、上述した本発明の実施例の画像印刷処理で行われる多値化結果値生成処理の流れを示すフローチャートである。ここでは、多値化結果値生成処理はコンピュータ100で実施されるものとして説明するが、後述するように、多値化結果値生成処理は極めて簡素な処理とすることができるから、カラープリンタ200あるいはデジタルカメラ120内で実施することも可能である。以下、フローチャートに従って説明する。
本実施例の多値化結果値生成処理を開始すると、先ず初めに、互いに隣接する所定個数の画素をまとめて画素群を生成する(ステップS130)。ここでは、主走査方向に4画素分、副走査方向に2画素分の合計8つの画素を画素群にまとめるものとする。なお、画素群としてまとめる画素は、このように矩形状に縦横の位置が揃った画素である必要はなく、互いに隣接し且つ所定の位置関係にあればどのような画素を画素群としてまとめても良い。
次いで、画素群階調値と、画素群の分類番号とを決定する(ステップS132)。画素群階調値とは、画素群を代表する階調値であり、次のようにして簡単に求めることができる。たとえば、画素群内の各画素に割り当てられた画像データの平均値を求めて画素群階調値とすることができる。あるいは、画素群の中で最も多くの画素に割り当てられた画像データ、更には、画素群内で特定の位置にある画素の画像データを画素群階調値とすることも可能である。
また、画素群の分類番号は、次のようにして極めて簡便に決定することができる。図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)
を算出することによって、画素群の分類番号を簡単に決定することができる。このようにして画素群の分類番号を決定可能な理由については後述する。
こうして、画素群の分類番号と画素群階調値とを決定したら、後述する多値化テーブルを参照することによって、画素群階調値を多値化する(ステップS134)。図9は、多値化に際して参照される多値化テーブルを概念的に示した説明図である。図示されているように、多値化テーブルには、画素群の分類番号毎に、画素群階調値に対する多値化結果値が対応づけて記憶されており、多値化結果値は、画素群階調値が増加するに従って段階的に増加していく。
図10は、画素群階調値が増加するに従って多値化結果値が段階的に増加していく様子を例示した説明図である。図では、横軸に画素群階調値を取り、縦軸の多値化結果値を取った折れ線グラフを用いて、画素群階調値に対する多値化結果値を表示している。なお、図中では、異なる分類番号N1〜N5を有する5つの画素群についての多値化結果を示しているが、これら画素群の折れ線が重なって判別し難くなることを避けるために、多値化結果値の原点位置を縦軸方向に少しずつ、ずらして表示している。
一例として、図中に太い実線で示した分類番号N1番の画素群について説明すると、画素群階調値が0〜4の範囲では、多値化結果値は「0」であるが、画素群階調値が5〜20の範囲では多値化結果値は「1」に増加する。次いで、画素群階調値が21〜42の範囲では多値化結果値は「2」に増加し、画素群階調値が43〜69の範囲では多値化結果値は「3」に増加する。このように、画素群階調値が増加するに従って、多値化結果値も段階的に増加していき、最終的には、多値化結果値は「15」まで増加する。すなわち、分類番号N1番の画素群については、階調値0〜255の範囲を取り得る画素群階調値を、階調値0〜15までの16段階に多値化(言わば、16値化)していることになる。
同様に、図中で太い破線で示した分類番号N2番の画素群や、太い一点鎖線で示した分類番号N3番の画素群については、階調値0〜255の範囲を取り得る画素群階調値を、階調値0〜17までの18段階に多値化(言わば、18値化)している。更に、細い実線で示した分類番号N4番の画素群および細い一点鎖線で示した分類番号N5番の画素群については、画素群階調値を階調値0〜20までの21段階に多値化(言わば、21値化)していることになる。このように、本実施例の多値化結果値生成処理では、各画素群の多値化の段数(多値化の結果として取り得る状態数)が同じではなく、画素群の分類番号に応じて固有の段数で多値化されている。この結果、同じ画素群階調値を多値化した場合でも、画素群の分類番号が異なり、そのため多値化の段数が異なっていれば、異なる結果値に多値化されることになる。
また、多値化段数が同じであったとしても、同じ多値化結果値が得られるわけではない。たとえば、図10に示した分類番号N2の画素群と、分類番号N3の画素群とを比較すれば明らかなように、これら画素群についての多値化段数はいずれも18段であるが、多値化結果値が切り換わる画素群階調値は多くの場合、一致していない。分類番号N4の画素群と分類番号N5の画素群とについても同様に、これら画素群の多値化段数はいずれも21段であるが、多値化結果値が切り換わる画素群階調値は一致していないことが多い。このことから、例え画素群の多値化段数が同じでも、分類番号が異なれば、異なる多値化結果値が得られることになる。
図9に示した多値化テーブルには、画素群階調値に対する多値化結果値が画素群の分類番号毎に記憶されている。そして、画素群階調値と多値化結果値との対応関係は、図10に示したように、分類番号毎に固有の対応関係となっている。図7に示した多値化結果値生成処理のステップS134では、このような多値化テーブルを参照して画素群階調値を多値化することにより、画素群毎に多値化結果値を生成する処理を行う。なお、図9に示す多値化テーブルの設定方法については、後ほど詳しく説明する。
以上のようにして、複数の画素を画素群にまとめて、その画素群の多値化結果値を生成したら、全画素について処理を終了したか否かを判断する(ステップS136)。そして、未処理の画素が残っている場合は(ステップS136:no)、ステップS130に戻って新たな画素群を生成し、後述する一連の処理を行うことにより、その画素群についての多値化結果値を生成する。こうした操作を繰り返し、全画素についての処理を終了したと判断されたら(ステップS136:yes)、各画素群について得られた多値化結果値をカラープリンタ200に出力した後(ステップS138)、図7の多値化結果値生成処理を終了する。
このように、画素群毎に多値化結果値を出力してやれば、画素毎にドット形成の有無を表すデータを出力する場合よりも、カラープリンタ200に供給すべきデータ量を大幅に減少させることができる。以下では、この点について説明する。
本実施例では、大ドット、中ドット、小ドットの3種類のドットを形成可能としているから、ドットを形成しない場合も含めると、画素毎に4つの状態を取り得ることになり、従って、ドット形成の有無を表すためには1画素あたり2ビットのデータ量が必要となる。また、本実施例では、1つの画素群は8つの画素で構成されているものとしているから、画素毎にドット形成の有無を表そうとすると、画素群あたり16ビット(=2ビット×8画素)のデータ量が必要となる。
一方、図7に示した多値化結果値生成処理では、画素群の分類番号によって異なるものの、多値化の段数は15〜21程度となっている(図9、図10を参照のこと)。画素群毎に多値化の段数を決定する方法については後述するが、多値化の段数は、多く見積もっても30を越えることはないと考えられる。従って、画素群の多値化結果値であれば、1画素群あたり5ビットのデータ量があれば十分に表現することが可能である。前述したように、画素毎にドット形成の有無を表す場合には画素群あたり16ビットのデータ量が必要となることから、画素群階調値を多値化して得られた結果値を出力することにすれば、カラープリンタ200に出力すべきデータ量を1/3以下に減少させることができる。この様に、本実施例の画像印刷処理では、画素群の多値化結果値を出力しているため、データ量を大きく減少させることができ、カラープリンタ200に迅速にデータを出力することが可能となっている。
カラープリンタ200は、こうしてコンピュータ100から多値化結果値を受け取ると、以下に説明するドット形成有無決定処理を行うことにより、画素群内の各画素についてドット形成の有無を決定する。
C−2.ドット形成有無決定処理の概要 :
図11は、前述した本発明の実施例の画像印刷処理で行われるドット形成有無決定処理の流れを示すフローチャートである。かかる処理は、コンピュータ100から画素群毎に多値化結果値を受け取った後、カラープリンタ200によって実行される処理である。以下、図11のフローチャートに従って説明する。
本発明の実施例のドット形成有無決定処理を開始すると、先ず初めに、処理対象とする画素群を1つ選択し、選択した画素群の多値化結果値を取得する(ステップS160、S162)。次いで、画素群の多値化結果値を、その画素群に形成するドット個数を表すデータに変換する(ステップS164)。ここで、図9および図10に示したように、多値化結果値は、画素群の分類番号が異なれば、例え画素群階調値が同じであっても異なった値を取る。このことから明らかなように、画素群の多値化結果値は、同じ分類番号の画素群との間でのみ結果値の大小を比較することが可能であり、分類番号が異なる画素群については、多値化結果値を比較することができないデータとなっている。
そこで、画素群の分類番号に依存する多値化結果値を、分類番号に依存しない多値化結果値に変換することを考える。多値化結果値を分類番号に依存しない値に変換してやれば、全ての画素群についての多値化結果値の大小を比較することができるので、それぞれの変換値の序列に応じて、大ドット・中ドット・小ドットの適切な形成個数、すなわちドット個数を表すデータを対応付けることが可能となる。
図11のステップS164では、このような考え方に基づいて、画素群の分類番号に依存する多値化結果値を、画素群に形成するべきドットの個数を示すデータに変換する。実際の変換は、画素群の分類番号と多値化結果値との組合せ毎に、適切なドット個数のデータを予め設定しておいた変換テーブルを参照するだけで、極めて迅速に行うことができる。
図12は、画素群の分類番号と多値化結果値との組合せを、ドット個数を示すデータに変換する際に参照される変換テーブルを概念的に示した説明図である。図示されているように、変換テーブルには、多値化結果値に対応するドット個数のデータが、分類番号毎に設定されている。一例として、分類番号1番の画素群について説明すると、多値化結果値0に対しては、ドット個数のデータとして「0」が設定されている。このドット個数データ「0」は、大ドット、中ドット、小ドットの形成個数がいずれも0個であることを表したコード値である。また、多値化結果値1に対しては、ドット個数のデータとして「1」が設定されている。ドット個数データ「1」は、大ドット、中ドットの形成個数は0個であり、小ドットの形成個数が1個であることを表すコード値である。更に、多値化結果値15に対してはドット個数データ「164」が設定されている。ドット個数データ「164」は、大ドットを8個形成し、中ドットおよび小ドットは形成しないことを表すコード値である。
このように、変換テーブルには、ドット個数を示すデータはコード化されたデータであるコード値として設定されている。すなわち個数データは、直接的にドット個数を表すものでなくても、何らかの方法で、ドット個数を特定可能であれば、どのような形態のデータとすることもできる。また、分類番号1番の画素群については、「16」より大きな多値化結果値に対してはドット個数を示すデータが設定されていない。これは、分類番号1番の画素群は多値化段数が16段であり、多値化結果値は0〜15の値しか取り得ないことに対応するものである。従って、分類番号2番の画素群のように多値化段数が18段の画素群については、0〜17の多値化結果値に対してのみドット個数を示すデータが設定され、「18」より大きな多値化結果値に対しては、ドット個数を示すデータが設定されることはない。
図13は、コード化された個数データと、各コード値が表す大ドット・中ドット・小ドットの個数の組合せとの対応関係を示した説明図である。このように、各種ドットの個数をコード化して扱っているのは、次のような理由によるものである。
ここでは、1つの画素群は8つの画素をまとめて構成されているものとしているから、大ドット、中ドット、小ドットの形成個数は、それぞれ0〜8個の値を取り得る。従って、各ドットの個数をコード化せずに、そのまま表現しようとすると、大ドットの個数、中ドットの個数、小ドットの個数を表すためにそれぞれ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に向けて、多値化結果値とともに分類番号を出力してもよいことは言うまでも無い。
次いで、画素群に対応する順序値マトリックスを生成する処理を行う(ステップS166)。ここで、順序値マトリックスとは、画素群内の各画素について、ドットが形成される順番を設定したマトリックスである。図14は、順序値マトリックスを生成するための位置番号を取得するための位置番号取得テーブルを示す説明図である。図15は、位置番号から順序値マトリックスを生成する方法を示す説明図である。
具体的には、たとえば分類番号が1で多値化結果値が1であるときの順序値マトリックスは、以下のようにして生成される。先ず、分類番号「1」と多値化結果値「1」とに基づいて位置番号取得テーブル(図14)から位置番号「6」が取得される。次に、取得された位置番号「6」と、順序値マトリックス生成の基準として予め準備された基準位置マトリックスPOS(図15)とに基づいて、順序値マトリックスOrd1が生成される。位置番号「6」は、基準位置マトリックスPOSにおいて「6」の値が格納されたセルに対応する画素にのみドットが形成されることを意味する値である。
たとえば分類番号が1で多値化結果値が15であるときの順序値マトリックスは、同様に位置番号「61357042」と、順序値マトリックス生成の基準として予め準備された基準位置マトリックスPOSとに基づいて、順序値マトリックスOrd6が生成される。位置番号「61357042」は、基準位置マトリックスPOSにおけるドットの形成順序を示している。位置番号の最初の桁の数値「6」は、基準位置マトリックスPOSにおいて最初にドットの形成される位置を示し、また、位置番号の最初の桁の数値「1357042」は、それぞれ2番目から8番目にドットの形成される位置を示している。
このように、多値化結果値から直接的に順序値マトリックスを生成せずに、基準位置マトリックスPOSに基づいて位置番号から順序値マトリックスを生成するように構成されているのはデータ量を削減するためである。こうすれば、ドット個数が少ないとき、たとえばドット個数が1個のときには1個の数字(上述の例では「6」)を表すデータで順序値マトリックスを生成することができるからである。
図16は、分類番号が1番の順序値マトリックスを示す説明図である。この例では、多値化結果値が「1」のときは、1個のドットの形成位置が示される順序値マトリックスOrd1が生成され、また、多値化結果値が「2」「3」のときは、それぞれ2個、3個のドットの形成位置が示される順序値マトリックスOrd2、Ord3が生成される。多値化結果値が「4」〜「10」のときは、4個のドットの形成位置が示される同一の順序値マトリックスOrd4が生成される。多値化結果値が「11」、「12」のときは、5個のドットの形成位置が示される同一の順序値マトリックスOrd5が生成される。多値化結果値が「13」〜「15」のときは、8個のドットの形成位置が示される同一の順序値マトリックスOrd6が生成される。
このように、本実施例では、多値化結果値に応じて順序値マトリックスが生成されるので、ドット個数だけでなくドット配置についても入力階調値に応じて自由に設定できることが分かる。この特徴は、従来のディザ法では実現できなかったハーフトーン処理を実現することができるが、この点につては後に詳述する。
本発明の実施例のカラープリンタ200に搭載されたROMには、図14と図15に例示したような順序値マトリックス変換テーブルと基準位置マトリックスPOSとが予め記憶されている。なお、画素群の分類番号と多値化結果値とに応じて順序値マトリックスを設定する方法については、別図を用いて詳しく説明する。
図17(a)(b)は、ドット個数のデータと順序値マトリックスとを用いて、画素群内で各種ドットを形成する画素を決定している様子を概念的に表した説明図である。たとえば、図17(a)に示されるように、画素群に形成すべきドット個数を示すコード値が、小ドット1個のみ、すなわち、大ドット0個、中ドット0個、小ドット1個の組合せを表し、順序値マトリックスOrd1が生成されていたものとする。このような場合には、小ドットの形成位置のみが決定される。図17(a)では、小ドットの形成位置に粗い斜線を付して表示している。
一方、図17(b)に示されるように、たとえば、画素群に形成すべきドット個数を示すコード値が、大ドット1個、中ドット2個、小ドット1個の組合せを表していたものとすると順序値マトリックスに基づいて大中小の順にドットの形成位置が決定される。図11のステップS168では、このようにしてドット個数のデータと順序値マトリックスとに基づいて、大ドットを形成する画素を決定する処理を行う。大ドットが形成される画素には、細かい斜線を付して表示している。
大ドットを形成する画素を決定したら、続いて中ドットを形成する画素を決定する(図11のステップS170)。図17に示した例では、中ドットを形成すべき個数は2個である。順序値「1」の画素には既に大ドットを形成することにしているから、中ドットは順序値「2」の画素と順序値「3」の画素とに形成されることになる。図17では、中ドットが形成される画素に、少し粗い斜線を付して表示している。図11のステップS170では、このようにして大ドットを形成しない画素の中から中ドットを形成する画素を決定する処理を行う。
中ドットを形成する画素を決定したら、今度は小ドットを形成する画素を決定する(図11のステップS172)。図17に示した例では、小ドットを形成すべき個数は1個であり、順序値「1」ないし順序値「3」の画素には既に大ドットおよび中ドットを形成することにしているから、小ドットは順序値「4」の画素に形成されることになる。図17では、小ドットが形成される画素に、粗い斜線を付して表示している。
こうして大ドット、中ドット、小ドットを形成する画素を決定したら、画素群の中で残った画素はドットを形成しない画素であると決定すればよい(図11のステップS174)。以上のような処理を全て行ったら、画素群内の全画素についてドット形成の有無を決定したことになる。
次いで、全画素群について、上述した処理を行ってドット形成の有無を決定したか否かを判断し(ステップS176)、未処理の画素群が残っていれば(ステップS176:no)、ステップS160に戻って新たな画素群を選択し、その画素群について続く一連の処理を行う。こうした操作を繰り返し、最終的に全画素群についての処理を終了したと判断されたら(ステップS176:yes)、図11に示したドット形成有無決定処理を終了して、図6に示した画像印刷処理に復帰する。前述したように画像印刷処理では、ドット形成有無の決定結果に従ってドットを形成することにより、印刷用紙上に画像が印刷される。
以上に説明したように、本発明の実施例の画像印刷処理では、複数の画素をまとめて画素群を構成し、画素群毎に多値化を行って、得られた多値化結果値をカラープリンタ200に出力する。画素群の多値化に際しては、画素群の分類番号と画素群階調値とを求めて、図9に示すような多値化テーブルを参照するだけで直ちに多値化結果値を得ることができる。画素群の分類番号も画素群階調値も、前述したように極めて簡単に求めることができることから、画素群の多値化結果値は極めて迅速に、しかも極めて簡素な処理によって求めることが可能となる。
加えて、多値化結果値は、画素群あたり僅かなビット数(本実施例では高々5ビット)で表現することができるので、画素毎にドット形成の有無を表すデータよりも、データ量を大幅に減少させることができる。このため、画素毎にドット形成の有無を表すデータに代えて、画素群毎の多値化結果値をカラープリンタ200に出力してやれば、データ量が減少する分だけ迅速にデータを供給することが可能となる。
また、カラープリンタ200では、画素群毎の多値化結果値を受け取ると、これを画素群内に形成すべきドットの個数を示すデータに変換する。かかる変換は、図12に示すような変換テーブルを参照するだけで、迅速に行うことができる。次いで、変換して得られたドット個数を示すデータと、順序値マトリックスとに基づいて、大ドット・中ドット・小ドットの形成有無を決定した後、ドットを形成して画像を印刷する。順序値マトリックスを参照すれば、大ドット・中ドット・小ドットを形成する画素は比較的簡単に決定することができる。従って、カラープリンタ200においても、画素群毎の多値化結果値を受け取ると、比較的簡素な処理で、迅速に画素毎のドット形成の有無を決定し、延いては、迅速に画像を印刷することが可能となる。
加えて、本発明の実施例の画像印刷処理では、単に迅速に画像を印刷することができるだけでなく、十分な画質で画像を印刷することができる。特に、画素群の分類番号に応じて、多値化テーブルや、変換テーブル、および順序値マトリックスを適切に設定しておくことで、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクと呼ばれるディザマトリックスを用いて実現されるような、ドットが良好に分散した高画質な画像を印刷することが可能となる。
さらに、本実施例では、多値化結果値に応じて順序値マトリックスが生成されるので、ドット個数だけでなくドット配置についても入力階調値に応じて自由に設定できることが分かる。以下では、こうしたことが可能な理由も含めて、画素群の分類番号を決定する考え方、多値化テーブル、変換テーブル、順序値マトリックスなどを設定する方法について、順次説明する。
C−3.ディザ法の概要 :
上述した本発明の実施例の画像印刷処理は、いわゆるディザ法と呼ばれる方法を発展させて改良したものである。そこで、画素群の分類番号を決定する考え方や、多値化テーブル、変換テーブル、順序値マトリックスなどの設定方法を説明する準備として、先ず、ディザ法の概要について簡単に説明しておく。
ディザ法とは、画像データを、画素毎にドット形成の有無を表すデータに変換するために用いられる代表的な手法である。この手法では、ディザマトリックスと呼ばれるマトリックスに閾値を設定しておき、画像データの階調値とディザマトリックスに設定されている閾値とを画素毎に比較して、画像データの階調値の方が大きい画素についてはドットを形成すると判断し、そうでない画素についてはドットを形成しないと判断する。このような判断を画像中の全画素について行えば、画像データを画素毎にドット形成の有無を表すデータに変換することができる。
図18は、ディザマトリックスの一部を拡大して例示した説明図である。図示したマトリックスには、横方向(主走査方向)に128画素、縦方向(副走査方向)に64画素、合計8192個の画素に、階調値1〜255の範囲から万遍なく選択された閾値がランダムに記憶されている。ここで、閾値の階調値が1〜255の範囲から選択されているのは、本実施例では、画像データが階調値0〜255の値を取り得る1バイトデータとしていることに加えて、画像データの階調値と閾値とが等しい場合には、その画素にはドットを形成するものと判断していることによるものである。
すなわち、ドットが形成されるのは画像データの階調値が閾値よりも大きい画素に限る(すなわち階調値と閾値とが等しい画素にはドットは形成しない)とした場合、画像データの取り得る最大階調値と同じ値の閾値を有する画素には、決してドットが形成されることはない。こうしたことを避けるため、閾値の取り得る範囲は、画像データの取り得る範囲から最大階調値を除いた範囲とする。逆に、画像データの階調値と閾値とが等しい画素にもドットを形成するとした場合、画像データの取り得る最小階調値と同じ値の閾値を有する画素には、常にドットが形成されてしまうことになる。こうしたことを避けるため、閾値の取り得る範囲は、画像データの取り得る範囲から最小階調値を除いた範囲とする。本実施例では、画像データの取り得る階調値が0〜255であり、画像データと閾値が等しい画素にはドットを形成するとしていることから、閾値の取り得る範囲を1〜255としておくのである。なお、ディザマトリックスの大きさは、図18に例示したような大きさに限られるものではなく、縦と横の画素数が同じマトリックスも含めて種々の大きさとすることができる。
図19は、ディザマトリックスを参照しながら、各画素についてのドット形成の有無を判断している様子を概念的に示した説明図である。ドット形成の有無を判断するに際しては、先ず、判断しようとする画素を選択し、この画素についての画像データの階調値と、ディザマトリックス中で対応する位置に記憶されている閾値とを比較する。図19中に示した細い破線の矢印は、画像データの階調値と、ディザマトリックスに記憶されている閾値とを、画素毎に比較していることを模式的に表したものである。たとえば、画像データの左上隅の画素については、画像データの階調値は97であり、ディザマトリックスの閾値は1であるから、この画素にはドットを形成すると判断する。図19中に実線で示した矢印は、この画素にはドットを形成すると判断して、判断結果をメモリに書き込んでいる様子を模式的に表したものである。一方、この画素の右隣の画素については、画像データの階調値は97、ディザマトリックスの閾値は177であり、閾値の方が大きいので、この画素についてはドットを形成しないと判断する。ディザ法では、こうしてディザマトリックスを参照しながら、画素毎にドットを形成するか否かを判断することで、画像データを画素毎にドット形成の有無を表すデータに変換する。
以上に説明した内容を踏まえて、以下では、画素群の分類番号を決定する考え方や、多値化テーブル、変換テーブル、順序値マトリックスなどの設定方法について説明する。
C−4.分類番号を決定するための考え方 :
以下では、先ず初めに、画素群の分類番号を付与する考え方を説明する。次いで、図8を用いて前述した簡便な方法によって、画素群の分類番号を求めることができる理由について説明する。
図20は、画素群毎の分類番号を決定するための考え方を示した説明図である。図20(a)は、画像の一番左上隅の箇所において、横方向に4画素、縦方向に2画素の合計8画素をまとめることによって画素群を1つ生成した様子を概念的に示したものである。
前述したように、ディザ法では画素に割り当てられた画像データの階調値と、ディザマトリックスの対応する位置に設定されている閾値とを比較して、画素毎にドット形成の有無を判断している。一方、本実施例では、隣接する所定数の画素を画素群としてまとめているから、ディザマトリックスに設定されている閾値についても、画素群に対応する所定数ずつまとめてブロックを生成することにする。図20(b)は、図18に示したディザマトリックスに設定されている閾値を、横方向に4つ、縦方向に2つずつまとめて複数のブロックを生成した様子を示している。図18に示したディザマトリックスは、横方向(主走査方向)に128画素分、縦方向(副走査方向)に64画素分の合計8192画素分の閾値が設定されているから、これら閾値を横方向に4つ、縦方向に2つずつブロックにまとめれば、ディザマトリックスは縦横それぞれ32個ずつ、合計1024個のブロックに分割されることになる。
今、図20(b)に示すように、これらブロックに1番〜1024番までの通し番号を付しておく。そして、画像データにディザマトリックスを適用した時に、各画素群の位置に適用されるブロックの通し番号によって、画素群を分類してやる。たとえば、図20(c)に示したように、画像の一番左上隅にある画素群には、図20(b)中の通し番号1番のブロックが適用されるから、この画素群は分類番号1番の画素群に分類するのである。以上が、画素群の分類番号を決定するための基本的な考え方である。
次に、図8を用いて前述した方法によって、画素群の分類番号を算出可能な理由について説明する。図21は、画素群の分類番号を算出する方法を示した説明図である。図21(a)は、画像中で生成された1つの画素群を表している。以下では、この画素群を着目画素群として、分類番号を算出する方法について説明する。前述したように、着目画素群の位置は、画素群の左上隅にある画素の画素位置によって表すものとする。図21(a)では、画素群の位置を示す画素に黒丸を付して表示している。この画素の画素位置が(X,Y)であったとする。すると、各画素群の大きさは、主走査方向に4画素、副走査方向に2画素としているから、
X=4n+1、 Y=2m+1
となるようなn、m(ここで、n,mは0以上の正整数)が存在する。換言すれば、着目画素群の左側にはn個の画素群が並んでおり、着目画素群の上側にはm個の画素群が並んでいることになる。
ここで、前述したように画素群は、画像データにディザマトリックスを適用したときに、着目画素群に適用されるブロックの通し番号に基づいて分類することとしているから(図20参照のこと)、ディザマトリックスを移動させながら画像データに適用する方法によって、同じ画素群でも異なった分類番号に分類されることになる。実際には、ディザマトリックスを移動させながら画像データに適用する方法はどのような方法でも構わないが、ここでは説明の便宜から、最も単純な方法すなわちディザマトリックスを横方向に移動させるものとして説明する。図21(b)には、ディザマトリックスを横方向に少しずつ移動させながら、繰り返し画像データに適用している様子が概念的に示されている。
図21(c)は、図21(b)に示すようにディザマトリックスを繰り返して用いながら、図21(a)に示した着目画素群にディザマトリックスを適用している様子を概念的に表している。このようにディザマトリックスを移動させていくと、ディザマトリックス中のいずれかのブロックが、着目画素群に適用されることになる。ここでは、着目画素群には、ディザマトリックス中でM行N列目のブロックが適用されたものとする。すると、図21(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の計算結果に対して小数点以下の数値を切り捨てることによって得られる整数値を表している。このように、着目画素群の位置が分かれば、図21(d)に表示した上述の関係式から数値MおよびNを求めて、ディザマトリックス中でM行N列目にあるブロックのブロック番号を、その着目画素群の分類番号としてやればよい。もっとも実際には、図8を用いて前述したように、着目画素群の座標値X,Yを2進数表示したデータから、所定ビットのデータを抜き出すだけで、極めて簡単に求めることができる。以下、この理由について説明する。
図22は、着目画素群の座標値の2進数表示から分類番号を求める方法を示した説明図である。着目画素群の座標値を(X,Y)として、X,Yが10ビットで表現されているものとする。図22(a)は、数値Xを表す10ビットの2進数データを概念的に示している。図では、各ビットを識別するために、最上位ビットから最下位ビットに向かって1番から10番までの通し番号を付して表示している。
図21を用いて前述したように、着目画素群の左側にある画素群の個数nは、数値Xから1を減算して4で除算すれば得ることができる。ここで、4での除算は、2ビット分だけ右方向にシフトさせることで実施することができるから、数値Xから1を減算して、得られた2進数データを右方向に2ビット分だけビットシフトさせればよい。更に、数値Xは任意の値を取るのではなく、4n+1の形式で表現可能な数値しか取り得ないから、1を減算せずに、単に2進数データを右方向に2ビット分だけビットシフトさせるだけで、画素群の個数nを得ることができる。図22(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ビット分だけ左方向にビットシフトすることで実施することができる。図22(d)は、個数nをビットシフトして得られたint(n/32)×32の2進数データを概念的に表している。
次いで、個数nからint(n/32)×32を減算すれば、前述の数値Nを得ることができる。個数nの2進数データ(図22(b)参照)とint(n/32)×32の2進数データ(図22(d)参照)とを比較すれば明らかなように、これら2進数データは、上位の5ビットは共通しており、減算する側の数値の下位5ビットは全て「0」となっている。従って、減算される側の数値(個数n)の下位5ビットをそのまま抜き出せば、求める数値Mを得ることができる。すなわち、図22(b)に示した2進数データに対して、図22(f)に示すようなマスクデータを作用させるだけで、極めて簡便に数値Nを得ることが可能である。あるいは、図22(a)に示した着目画素群の位置を示す数値Xの2進数データに、図22(g)のようなマスクデータを作用させて、4番目〜8番目のビットデータを直接抜き出すことによっても、数値Nを得ることができる。
図22では、着目画素群の位置を示す座標値(X,Y)の数値Xから、ディザマトリックス中でのブロック位置を示す数値Nを求める場合について説明したが、全く同様にして、ブロック位置を示す数値Mも数値Yから求めることができる。結局、着目画素群の位置が分かれば、2進数データから特定のビット位置のデータを抜き出すだけで、着目画素群がディザマトリックス中で何行何列目のブロックに対応するかを知ることができ、このブロックの通し番号を算出すれば、着目画素群の分類番号を得ることができる。図8を用いて前述した分類番号の算出方法は、このようにして導かれた方法である。
C−5.多値化テーブルの設定方法 :
次に、図9に示した多値化テーブルを設定する方法について説明する。前述したように、多値化テーブルには、画素群階調値に対する多値化結果値が画素群の分類番号毎に設定されており、多値化テーブルを参照しながら多値化することで、画素群階調値は、図10に示したように画素群の分類番号に応じた固有な態様で多値化されることになる。
本実施例の多値化テーブルは、大きさの異なる複数種類のドットについて画素毎にドット形成の有無を判断可能なように、前述したディザ法を発展させた手法を基にして設定されている。かかる手法の詳細な内容は、特許3292104号に開示されている。多値化テーブルの設定方法を説明する前に、その準備として、上記の特許公報に開示された技術の概要について簡単に説明しておく。
図23は、ディザ法を発展させて、画素毎に大ドット・中ドット・小ドットの形成の有無を決定可能としたハーフトーン処理の流れを示すフローチャートである。ハーフトーン処理を開始すると、先ず初めに、ドットの形成有無を判断しようとする画素を選択して、その画素の画像データを取得する(ステップS200)。次いで、取得した画像データを、大中小の各ドットについての密度データに変換する。ここで、密度データとは、ドットをどの程度の密度で形成するかを表すデータである。密度データは、階調値が大きくなる程、ドットが高い密度で形成されることを表している。たとえば、密度データの階調値「255」は、ドットの形成密度が100%、すなわち全ての画素にドットが形成されることを表しており、密度データの階調値「0」は、ドットの形成密度が0%、すなわちいずれの画素にもドットが形成されないことを表している。こうした密度データへの変換は、ドット密度変換テーブルと呼ばれる数表を参照することによって行うことができる。
図24は、画像データの階調値を大中小各ドットについての密度データに変換する際に参照されるドット密度変換テーブルを概念的に示した説明図である。図示されているように、ドット密度変換テーブルには、画像データの階調値に対して、小ドット・中ドット・大ドットの各ドットについての密度データが設定されている。画像データが階調値「0」近傍の領域では、中ドット・大ドットの密度データはいずれも階調値「0」に設定されている。小ドットの密度データは、画像データの階調値が大きくなるに連れて増加して行くが、画像データがある階調値に達すると今度は逆に減少し始め、代わりに中ドットの密度データが増加し始める。画像データの階調値が更に増加して、ある階調値に達すると、小ドットの密度データが階調値「0」となり、中ドットの密度データが減少し始めて、代わりに大ドットの密度データが少しずつ増加していく。図23のステップS202では、このドット密度変換テーブルを参照しながら、画像データの階調値を、大ドットの密度データ、中ドットの密度データ、小ドットの密度データに変換する処理を行う。
処理対象とする画素について、大中小各ドットの密度データが得られたら、先ず初めに大ドットについての形成有無を判断する(図23のステップS204)。かかる判断は、大ドットの密度データと、処理対象としている画素の対応する位置に設定されているディザマトリックスの閾値とを比較することによって行う。大ドットの密度データが閾値よりも大きい場合は、処理対象の画素には大ドットを形成するものと判断し、逆に密度データの方が小さい場合は、大ドットは形成しないものと判断する。
次いで、処理対象の画素に大ドットを形成すると判断されているか否かを判定し(ステップS206)、大ドットを形成すると判断されている場合は(ステップS206:yes)、中ドットおよび小ドットについての判断は省略して、全画素を終了したか否かを判断する(ステップS218)。そして、ドット形成の有無を未判断の画素が残っている場合は(ステップS218:no)、ステップS200に戻って新たな画素を選択し、続く一連の処理を行う。
一方、処理対象の画素に大ドットを形成すると判断されていない場合は(ステップS206:no)、中ドットについての形成有無を判断するべく、大ドットの密度データに中ドットの密度データを加算して中ドット用の中間データを算出する(ステップS208)。こうして得られた中ドット用の中間データと、ディザマトリックスの閾値とを比較する。そして、中ドット用の中間データの方が閾値よりも大きければ、中ドットを形成するものと判断し、逆に中間データよりもディザマトリックスの閾値の方が大きければ、中ドットを形成しないものと判断する(ステップS210)。
次いで、処理対象の画素に中ドットを形成すると判断されているか否かを判定し(ステップS212)、中ドットを形成すると判断されている場合は(ステップS212:yes)、小ドットについての判断は省略して、全画素を終了したか否かを判断する(ステップS218)。
処理対象の画素に中ドットを形成すると判断されていない場合は(ステップS212:no)、小ドットについての形成有無を判断するべく、中ドット用の中間データに小ドットの密度データを加算して小ドット用の中間データを算出する(ステップS214)。そして、得られた小ドット用の中間データと、ディザマトリックスの閾値とを比較する。そして、小ドット用の中間データの方が閾値よりも大きければ、小ドットを形成するものと判断し、逆に中間データよりもディザマトリックスの閾値の方が大きければ、いずれのドットも形成しないものと判断する(ステップS216)。
すなわち、大ドットの密度データよりもディザマトリックスに設定された閾値の方が大きい画素(大ドットが形成されない画素)については、大ドットの密度データに中ドットの密度データを加算して、得られた中間データと閾値とを比較し、中間データの方が大きくなれば、中ドットを形成すると判断する。一方、中間データよりも依然として閾値の方が大きい画素については、中間データに小ドットの密度データを加算して新たな中間データを算出する。そして、この中間データと閾値とを比較して、新たな中間データの方が大きくなれば小ドットを形成すると判断し、依然として閾値の方が大きい画素についてはいずれのドットも形成しないと判断するのである。
以上のような処理を行うことにより、処理対象の画素について、大ドット、中ドット、小ドットのいずれのドットを形成するか、若しくは、いずれのドットも形成しないかを判断することができる。そこで、全画素についての処理を終了したか否かを判断し(ステップS218)、未判断の画素が残っている場合は(ステップS218:no)、ステップS200に戻って新たな画素を選択し、続く一連の処理を行う。このようにして、処理対象として選択された画素について1つずつ、大中小のいずれのドットを形成するか否かを判断していく。そして、全画素について処理を終了したと判断されたら(ステップS218:yes)、図23に示したハーフトーン処理を終了する。
以上、ディザマトリックスを利用して、大中小の各ドットについての形成有無を判断する方法について説明した。以下では、上述の説明を踏まえて、図9に示した多値化テーブルの設定方法について説明する。
前述したように多値化結果値生成処理では、画素群内に含まれる各画素の画像データを画素群階調値で代表させることにより、画素群をまとめて多値化している。そこで、多値化テーブルを設定するに際しては、先ず、画素群内の全画素が画素群階調値と同じ値の画像データを有するものとして、各画素について大中小の各種ドットについての形成有無を判断することを考える。各種ドットについての形成有無の判断は、図23を用いて前述したハーフトーン処理によって行う。
図25は、画素群内の各画素について、大中小各ドットの形成有無を判断している様子を概念的に示した説明図である。図中では、ハーフトーン処理を行うために着目している画素群を太い実線で囲って表している。画素群は8つの画素から構成されており、各画素の画像データは、いずれも画素群階調値と同じ値(図示した例では階調値97)を有している。大中小各種ドットの形成有無を判断するためには、画像データを各ドットについての密度データに変換する。密度データへの変換は、図24に示したドット密度変換テーブルを参照することによって行う。ここでは、画素群内の全画素が同じ画像データを有するものとしているから、各種ドットについても密度データも全て画素について同じ値となる。図示した例では、大ドットの密度データの階調値が「2」、中ドットの密度データの階調値が「95」、小ドットの密度データの階調値が「30」であった場合を表している。
次いで、図23を用いて説明したように、大ドットの密度データ、中ドット用の中間データ、あるいは小ドット用の中間データと、ディザマトリックスに設定されている閾値とを比較することによって、各種ドットについての形成有無を画素毎に判断する。ここで、比較に用いるディザマトリックスの閾値は、ディザマトリックスの中から、着目している画素群に対応する箇所に設定されている閾値を使用する。たとえば、図25に示した例では、画素群が画像の左上隅にあることから、閾値についても、ディザマトリックス中の左上隅の画素群に設定されている閾値を使用する。
そして、画素群に設定されている8つの閾値の中で、大ドットの密度データよりも小さな閾値が設定されている画素については、大ドットを形成すると判断する。ここでは、大ドットの密度データは階調値「2」としているから、大ドットが形成される画素は、閾値「1」が設定されている画素だけである。図25では、大ドットが形成されると判断された画素には、細かい斜線を付して表示している。大ドットの密度データ「2」よりも大きく、大ドットの密度データと中ドットの密度データとを加算して得られた中ドット用の中間データ「97」よりも小さな閾値が設定されている画素には、中ドットを形成するものと判断する。このような画素は、閾値「42」が設定された画素、および閾値「58」が設定された画素の2つの画素だけである。図25では、中ドットが形成されると判断された画素には、少し粗い斜線を付して表示している。そして、最後に、中ドット用の中間データ「97」よりも大きく、中ドット用の中間データに小ドット用の密度データを加算して得られた小ドット用の中間データ「127」よりも小さな閾値が設定されている画素には、小ドットを形成するものと判断する。このような画素は、閾値「109」が設定された画素だけである。図25では、小ドットが形成されると判断された画素には、粗い斜線を付して表示している。このようにして、大ドット、中ドット、小ドットの形成有無を判断した結果、着目している画素群の画素群階調値が「97」である場合には、大ドット1個、中ドット2個、小ドット1個が形成されることになる。
画素群階調値が大きく異なれば、画素群内に形成される大ドット、中ドット、小ドットの個数も異なったものとなる。また、画素群階調値を「0」から「255」まで変化させれば、それに伴って大ドット、中ドット、小ドットの個数は、幾段階かに変化するはずである。更に、画素群の分類番号が異なれば、ディザマトリックスの閾値も異なることから、ドット個数の変化の仕方も異なるはずである。図9に示した多値化テーブルは、画素群階調値を「0」から「255」まで変化させたときの、各種ドットの個数が段階的に変化する挙動を、分類番号毎に調べることによって設定されている。
図26は、実際に、多値化テーブルを設定する処理の流れを示したフローチャートである。以下、フローチャートに従って説明する。多値化テーブルの設定処理を開始すると、先ず初めに、画素群の分類番号を1つ選択する(ステップS300)。たとえば、ここでは分類番号1番を選択したものとする。
次いで、選択した分類番号の画素群に対応する閾値を、ディザマトリックスの中から読み出してやる(ステップS302)。たとえば、ここでは分類番号1番を選択したものとしているから、図18に例示したディザマトリックスの中から、図20(b)中で1番と表示したブロック位置に設定されている8つの閾値を読み出す。
そして、多値化結果値RVおよび画素群階調値BDを「0」に設定し(ステップS304)、更に、大ドット、中ドット、小ドットの形成個数をいずれも0個に設定する(ステップS306)。
続いて、図24に示したドット密度変換テーブルを参照することにより、画素群階調値を大ドット、中ドット、小ドットについての密度データに変換した後(ステップS308)、これら密度データと先に読み込んでおいた閾値とに基づいて、大中小の各種ドットについての形成個数を決定する(ステップS310)。すなわち、図23あるいは図25を用いて説明したように、大ドットの密度データよりも小さな閾値の個数を求めて、得られた個数を大ドットの形成個数とする。また、大ドットの密度データよりも大きく且つ中ドット用の中間データよりも小さな閾値の個数を求めて、これを中ドットの形成個数とする。更に、中ドット用の中間データよりも大きく且つ小ドット用の中間データよりも小さな閾値の個数を求めて、これを小ドットの形成個数とする。
こうして求めた各種ドットの形成個数が、先に設定されていた形成個数に対して変更されたか否かを判断する(ステップS312)。そして、形成個数が変更されたと判断されれば(ステップS312:yes)、多値化結果値RVを「1」だけ増加させて(ステップS314)、得られた多値化結果値RVを画素群階調値BDに対応づけて記憶する(ステップS316)。一方、形成個数が変更されていないと判断された場合は(ステップS312:no)、多値化結果値RVを増加させることなく、そのままの値を画素群階調値BDに対応づけて記憶する(ステップS316)。
以上のようにして、ある画素群階調値に対する多値化結果値を記憶したら、画素群階調値BDが階調値255に達したか否かを判断する(ステップS318)。階調値255に達していなければ(ステップS318:no)、画素群階調値BDを「1」だけ増加させて(ステップS320)、ステップS308に戻って再び画素群階調値BDを密度データに変換した後、続く一連の処理を行って、新たな画素群階調値BDに対応づけて多値化結果値RVを記憶する(ステップS316)。画素群階調値BDが階調値255に達するまで、こうした操作を繰り返す。そして、画素群階調値BDが階調値255に達したら(ステップS316:yes)、選択した分類番号については、すべての多値化結果値を設定したことになる。
そこで、すべての分類番号について、以上のような処理を行ったか否かを判断し(ステップS322)、未処理の分類番号が残っている場合は(ステップS322:no)、ステップS300に戻って再び上述した処理を行う。こうした処理を繰り返し、すべての分類番号について、すべての多値化結果値を設定したと判断されたら(ステップS322:yes)、図26に示した多値化テーブル設定処理を終了する。
以上の説明から明らかなように、多値化結果値は、画素群階調値を変換して得られた大中小各ドットの密度データと、ディザマトリックス中で画素群に対応する位置に記憶されている閾値とによって決定される。ここで、図24に示したドット密度変換テーブルは、画素群の分類番号が異なっていても同じテーブルを参照するから、画素群階調値に対する各ドットの密度データも、分類番号によらず同じ密度データが得られる。しかし、ディザマトリックスから読み出された閾値の組は、分類番号毎に異なったものとなる。何故なら、ディザマトリックスは、画像上でドットが一定のパターンで発生したり、あるいは近接した位置に固まって発生することで画質を悪化させることの無いように、閾値は出来るだけ分散させて且つ出来るだけランダムに設定されている。このため、画素群に含まれる複数個の閾値を組として見たときに、全く同じ組合せとなる可能性は極めて低いと考えられるからである。このような理由から、本実施例の多値化結果値生成処理で参照される多値化テーブルは、画素群階調値と多値化結果値との対応関係が分類番号毎に異なったものとなり、また、多値化結果値が変化する回数(図10に示した多値化の段数)も、分類番号に応じて異なったものとなっている。
C−6.変換テーブルの設定方法 :
次に、図12を用いて前述した変換テーブルの設定方法について説明する。かかる変換テーブルは、図11に示したドット形成有無決定処理中で、多値化結果値を分類番号と組み合わせて、画素群に形成されるドット個数を表すデータに変換するために参照されるテーブルである。
図26を用いて前述した多値化テーブルの設定方法から明らかなように、多値化テーブルに設定されている多値化結果値は、画素群に形成される大中小の各ドットの個数に基づいて決定されている。もっとも、多値化結果値が、画素群に形成されるドット個数の組合せに直ちに対応しているわけではなく、多値化結果値と画素群の分類番号とを組み合わせることで初めて、具体的なドット個数の組合せに対応付けることができる。何故なら、多値化結果値は、画素群階調値を階調値0から階調値255まで増加させたときに、大中小各ドットの形成個数が変化したか否かだけを抽出し、具体的に各ドット個数の組合せがどのように変化したかを示す情報は省かれた状態で設定されているからである。
とは言え、画素群の分類番号が分かっていれば、その画素群で何回目の変化に相当するか、すなわち多値化結果値から、各種ドットについての具体的な個数の組合せを特定することはできる。そこで、分類番号毎に、多値化結果値を設定する元になった各種ドットの具体的な個数を求め、得られたドット個数の組合せに対応するコード値を、多値化結果値に対応付けて記憶しておく。図12に示した変換テーブルは、こうした操作を、全ての分類番号について行うことによって設定されている。
図27は、変換テーブルを設定する具体的な処理の流れを示したフローチャートである。以下、フローチャートに従って説明する。変換テーブル設定処理を開始すると、先ず初めに、設定対象とする分類番号を1つ選択し(ステップS350)、多値化結果とRVを0に設定する(ステップS352)。
次いで、多値化結果値RVに対応する大中小各ドットの個数を取得する(ステップS354)。たとえば、多値化結果値が「N」であったとすると、その分類番号の画素群について、画素群階調値を「0」から「255」に変化させながら大中小各ドットの形成有無を判断し、ドットの形成個数がN番目に変化したときの大ドット、中ドット、小ドットの個数を取得する。
こうして取得した各ドットの個数の組合せを、コード値に変換する(ステップS356)。ドット個数の組合せからコード値への変換は、図13に示した対応表を参照することによって行う。次いで、得られたコード値を、多値化結果値に対応付けて記憶した後(ステップS358)、対象としている分類番号についての最大の多値化結果に達したか否かを判断する(ステップS360)。すなわち、図9を用いて説明したように、多値化結果の最大値は、画素群の分類番号によって異なっていることから、対象としている分類番号についての多値化結果の最大値に達したか否かを判断するのである。
そして、多値化結果の最大値に達していない場合は(ステップS360:no)、多値化結果RVの値を「1」だけ増加させる(ステップS362)。そして、ステップS354に戻って、新たな多値化結果値RVに対応する各ドットの個数を取得した後、続く一連の処理を繰り返す。こうした操作を繰り返し、対象としている分類番号の最大多値化結果値に達したと判断されたら(ステップS360:yes)、その分類番号については全データが変換テーブルに設定されたことになる。
そこで今度は、全ての分類番号について同様の処理を行ったか否かを判断する(ステップS364)。そして、未だ処理していない分類番号が残っている場合は、ステップS350に戻って新たな分類番号を選択し、この分類番号について、上述した一連の処理を行う。こうして全ての分類番号について処理を終了したと判断されたら(ステップS364:yes)、変換テーブルの全てのデータが設定されたことになるので、図27に示す処理を終了する。
本発明の実施例のカラープリンタ200は、このようにして設定された変換テーブルが、制御回路260に内蔵されたROM内に予め記憶されている。そして、図11に示したドット形成有無決定処理では、この変換テーブルを参照することによって、多値化結果値を個数データに変換しているのである。
C−7.順序値マトリックスの設定方法 :
次に、図14に例示した順序値マトリックス変換テーブルを設定する方法について説明する。前述したように、順序値マトリックスとは、画素群内の各画素について、ドットが形成される順番を設定したマトリックスである。図11に示したドット形成有無決定処理中では、画素群に対応する順序値マトリックスを読み込んで、マトリックスに設定されている順番に従って、大ドット、中ドット、小ドットを形成する画素を決定していた。
順序値マトリックスも、前述した多値化テーブルと同様に、特許3292104号に開示された手法(ディザ法を発展させて、大きさの異なる複数種類のドットの形成の有無を判断可能とした手法)を基にして設定されている。すなわち、多値化テーブルを設定する場合は、前述したように画素群内の全画素が同じ画像データ(画素群階調値)を有するものとして、画素群内に形成される大中小ドットの個数を決定しながら、画素群階調値を「0」から「255」まで変化させて、このときに各ドットが形成される個数の変化に着目して多値化結果値を設定した。また、図12に示すように、多値化結果値と分類番号とを組み合わせれば、画素群内に形成される大中小の各ドットの個数までは復元することができた。しかし、これら各種ドットが、画素群内のどの画素に形成されるかに関する情報は省略されており、多値化結果値あるいは分類番号からは知ることはできない。順序値マトリックスは、画素群内で各種ドットが形成される画素位置に関する情報を記憶したものと考えることができる。すなわち、特許3292104号に開示された手法を画素群に適用すれば、図23ないし図25を用いて前述したように、各種ドットの形成個数だけでなく、画素群内でドットが形成される画素位置まで決定可能であるところ、本実施例ではこの手法を2つの要素に分解して、各種ドットの形成個数に関する情報については、主に多値化結果値(正確には、多値化結果値および分類番号の組合せ)に反映させ、ドットが形成される画素位置に関する情報ついては、順序値マトリックスに反映させていると考えることができる。このような順序値マトリックスは、実際には、比較的簡単に設定することができる。
図28は、順序値マトリックスを設定する方法について具体的に示した説明図である。以下、図を参照しながら説明する。順序値マトリックスの設定に際しては、先ず、ディザマトリックスを画素群と同じ大きさを有する複数のブロックに分割して、各ブロックに通し番号を付しておく。図20を用いて前述したように、この通し番号がそのまま画素群の分類番号となる。図28(a)は、ディザマトリクスを複数のブロックに分割した様子を概念的に示した説明図である。今、ディザマトリックスが図18に示した大きさ(すなわち、主走査方向に128画素、副走査方向に64画素)を有しているものとすると、1つの画素群は主走査方向に4画素、副走査方向に2画素の大きさを有するとしているから、図28(a)に示すように、ディザマトリックスは主走査方向および副走査方向にそれぞれ32ブロックずつ、全体では、1番から1024番までの分類番号が付された1024個のブロックに分割されることになる。
ディザマトリックスを複数のブロックに分割したら、各ブロックから1組ずつ順序値マトリックスを生成する。図28(b)は、一例として、分類番号1番のブロックから順序値マトリックスを生成している様子を示した説明図である。図28(b)の左側半分には、分類番号1番のブロックに含まれるディザマトリックスの閾値が示されている。図25を用いて前述したように、ドットは小さな閾値が設定されている画素から順番に形成される。従って、図28(b)に示した1番のブロックの中で1番初めにドットが形成される画素は、閾値「1」が設定された画素と考えることができる。そこで、この画素には順序値として「1」を設定する。同様に、2番目にドットが形成される画素は、2番目に小さな閾値である閾値「42」が設定された画素と考えることができる。そこで、この画素には順序値「2」を設定する。このようにして、ブロック内に設定されている閾値の小さな画素から順番に、順序値「1」から順序値「8」までを決定してやれば、図28(b)の右側半分に示した分類番号1番の順序値マトリックスを得ることができる。
図28(c)は、同様にして、ブロック内で小さな閾値が設定されている画素から順番に、順序値「1」から順序値「8」までを設定することで、分類番号2番の順序値マトリックスが得られる様子を示している。図28(a)に示した分類番号「1」番から「1024」番までの全てのブロックについて、以上のような操作を行うことにより、分類番号「1」番から「1024」番までの順序値マトリックスを得ることができる。
本発明の実施例のカラープリンタ200は、このようにして設定された順序値マトリックスが、制御回路260に内蔵されたROM内に、画素群の分類番号に対応付けて予め記憶されている。そして、図11に示したドット形成有無決定処理を実施する際には、記憶されている順序値マトリックスの中から、画素群の分類番号に対応するマトリックスを読み出しているのである。
C−8.多値化結果値からドット形成有無を適切に決定可能な原理 :
以上に説明したように、本発明の実施例の画像印刷処理では、複数個の画素を画素群にまとめて、図9に例示した多値化テーブルを参照することにより、画素群毎に多値化結果値を決定する。次いで、図12に例示した変換テーブル、および図16に例示した順序値マトリックスを参照しながら、多値化結果値に基づいて画素群内に各種ドットを形成する画素位置を決定する。このようにしてドットを形成する画素位置を決定した場合でも、ドットが適切に分散された高画質な画像を出力することができる。加えて、比較的少数ずつ(本実施例では8個ずつ)の画素群をまとめて処理しているにも関わらず、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクに代表される画素数が千個を越えるような大規模なディザマトリックスを用いることで実現されるような、良好なドット分布を得ることが可能である。以下では、このようなことが可能となる原理について説明する。
前述した特許3292104号に開示された技術を用いれば、図23および図24を用いて前述したように、画像データを大ドットの密度データ、中ドット用の中間データ、小ドット用の中間データに変換して、ディザマトリックスに設定されている閾値と比較することで、大中小各ドットについての形成の有無を判断することができる。更に、このときに参照するディザマトリックスを、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクに代表されるような分散性が考慮されたマトリックスとしておけば、ドットが良好に分散した高画質な画像を得ることができる。
また、画像データは一般的に、隣接する画素間では近似する(若しくは同一の)階調値が割り当てられる傾向がある。近年では、高画質化の要請から画像データの解像度は益々高くなる傾向にあるが、隣接する画素間で近似若しくは同一の階調値が割り当てられる傾向は、画像データの解像度が高くなるほど顕著に現れる。このことから、図25を用いて前述したように、複数個の画素を画素群としてまとめてしまい、画素群内の画素は全て同じ画像データを有するものとして大中小各ドットの形成有無を判断した場合でも、実際には画質に差が生じることは稀である。
ここで、前述した本実施例の多値化結果値生成処理では、画素群階調値を多値化して、画素群の分類番号に依存した多値化結果値を生成する。こうして生成された多値化結果値は、画素群の分類番号と組み合わせることで、画素群内に形成される各種ドットの個数を示すデータとなっている。図25に示した画素群については、画素群の分類番号と組み合わせることで、大ドット、中ドット、小ドットの形成個数が、それぞれ1個、2個、1個であることを示すような多値化結果値が生成されることになる。
前述した本発明の実施例のドット形成有無決定処理では、このような多値化結果値を受け取ると、画素群内の各画素について、大中小各ドットについての形成有無を決定する。図29は、前述したドット形成有無決定処理において、多値化結果値を受け取って、画素群内の各画素について大中小各ドットの形成有無を判断する処理の大まかな流れを概念的にまとめた説明図である。図示されているように、多値化結果値を受け取ると、その結果値が表す画素群の分類番号を求めた後、多値化結果値と分類番号とに基づいて、大中小各ドットの形成個数を取得するとともに、順序値マトリックスを生成する。なお、分類番号を求める具体的な方法については後述する。
図25に示した画素群を想定しながら説明すれば、画素群は画像の左上隅にあるから分類番号は1番と求められる。この画素群の多値化結果値と、求めた分類番号とを組み合わせることにより、この画素群には、大ドット1個、中ドット2個、小ドット1個がそれぞれ形成されることが分かる。これら各ドットが、画素群内のどの画素に形成されるかを決定するために、分類番号1番の順序値マトリックスを参照する。この順序値マトリックスは、図25において、ドット形成有無の判断に用いたディザマトリックスのこの当部分、すなわち画素群内の各画素についてドット形成の有無を判断するために用いたこの当部分から生成した順序値マトリックスである。
このようにして得られた大中小各ドットの個数と、順序値マトリックスとに基づいて、画素群内でこれらドットを形成する画素位置を決定していく。画素位置を決定する具体的な方法は、図17を用いて既に説明しているので、ここでは説明は省略して結果のみを示すと、大ドットは順序値1番の画素に形成され、中ドットは順序値2番の画素と3番の画素とに形成され、小ドットは順序値4番の画素に形成される。図29では、図17に倣って、大ドットを形成する画素には細かいハッチングを付し、中ドットを形成する画素には少し粗いハッチングを付し、小ドットを形成する画素には粗いハッチングを付して表している。こうして得られたドットの分布と、図25に示した画素毎にドット形成の有無を判断して得られたドットの分布とを比較すれば、両者のドット分布は完全に一致していることが分かる。
すなわち、分類番号に依存した多値化結果値のみを受け取った場合でも、上述した方法を用いてドット形成の有無を決定してやれば、前述した特許3292104号を適用してディザ法を参照しながら画素毎に大中小各ドットの形成有無を判断した場合と、全く同じドット分布を得ることができる。このため、ドットが良好に分散された高画質な画像を得ることが可能となるのである。
加えて、多値化結果値を生成するために参照された多値化テーブルは、ディザマトリックスに基づいて設定されている(図27参照)。同様に、多値化結果値からドット形成有無を決定する過程で参照された変換テーブルあるいは順序値マトリックスも、ディザマトリックスに基づいて設定されている(図27、図28参照)。従って、これらテーブル類の設定に用いられるディザマトリックスとして、いわゆるブルーノイズマスク、あるいはグリーンノイズマスクを使用すれば、これらマスクを用いることで初めて得られるような、高画質な画像を得ることが可能となる。
なお、本明細書中で言うブルーノイズマスクとは、ドットを不規則に発生させるディザマトリックスであって、設定されている閾値の空間周波数が、2画素以下を1周期とする高周波数領域に最も大きな成分を有するマトリックスを言う。もっとも、明るい(明度の高い)画像など、特定の明度付近では規則的なパターンでドットが形成される場合があっても良い。また、本明細書中で言うブルーノイズ特性とは、ブルーノイズマスクが有するこうした特性を言う。更に、本明細書中で言うグリーンノイズマスクとは、ドットを不規則に発生させるディザマトリックスであって、設定されている閾値の空間周波数が、2画素から十数画素を1周期とする中間周波数領域に最も大きな成分を有するマトリックスを言う。もっとも、グリーンノイズマトリックスについても、特定の明度付近であれば規則的なパターンでドットが形成される場合があっても良い。また、本明細書中で言うグリーンノイズ特性とは、グリーンノイズマスクが有するこうした特性を言う。
図30は、ブルーノイズマスク、およびグリーンノイズマスクに設定されている閾値の空間周波数特性を概念的に例示した説明図である。図30では、表示の都合から、横軸には空間周波数の代わりに周期を取って表示している。言うまでもなく、周期が短くなるほど、空間周波数は高くなる。また、図30の縦軸は、それぞれの周期での空間周波数成分を示している。なお、図示されている周波数成分は、ある程度変化が滑らかとなるように平滑化された状態で示されている。
図中の実線は、ブルーノイズマスクの空間周波数成分を概念的に示している。図示されているように、ブルーノイズマスクは、1周期の長さが2画素以下の高い周波数領域に最も大きな周波数成分を有している。ブルーノイズマスクの閾値は、このような空間周波数特性を有するように設定されていることから、ブルーノイズマスクに基づいてドット形成の有無を判断した場合には、ドットが互いに離れた状態で形成される傾向にある。また、図中の破線は、グリーンノイズマスクの空間周波数成分を概念的に示している。図示されているように、グリーンノイズマスクは、1周期の長さが2画素から十数画素の中間周波数領域に最も大きな周波数成分を有している。グリーンノイズマスクの閾値は、このような空間周波数特性を有するように設定されていることから、グリーンノイズマスクに基づいてドット形成の有無を判断した場合には、数ドット単位で隣接してドットが形成されながら、全体としてはドットの固まりが分散した状態で形成される傾向にある。
従って、このようなブルーノイズマスク、あるいはグリーンノイズマスクに基づいて、画素群内でのドット形成有無を決定してやれば、画素群単位で処理しているにも関わらず、ブルーノイズ特性あるいはグリーンノイズ特性を反映した分布となるようにドットを発生させて、高画質な画像を出力することが可能となるのである。
C−9.画素群の位置から分類番号を決定する方法 :
ここで、画像上での画素群の位置から、その画素群の分類番号を求める方法について、簡単に説明しておく。
図31は、画像上での画素群の位置に基づいて、分類番号を求める方法を示した説明図である。今、対象としている画素群が、図31(a)に示すように、画像の一番左上隅を基準として主走査方向にi個目の画素群、副走査方向にj個目の画素群の位置にあるとする。また、このような画素群の位置を、座標値(i,j)によって表すものとする。また、ディザマトリックスの大きさは、通常は、画像のようには大きくはないので、図21(b)を用いて前述したように、ディザマトリックスを主走査方向に移動させながら、繰り返して使用するものとする。
1つのディザマトリックスには主走査方向・副走査方向にそれぞれ32個ずつのブロックが含まれるとしているから(図20(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進数表示から所定ビットのデータを抜き出すだけで、極めて簡便に求めることができる。図32は、画素群の座標値(i,j)から、画素群のディザマトリックス中での位置を求める方法を具体的に示した説明図である。図32(a)は、数値iを表す10ビットの2進数表示したデータを概念的に示している。なお、図32(a)では、各ビットを識別するために、最上位ビットから最下位ビットに向かって1番から10番までの通し番号を付して表示している。
画素群の位置を示す値Iを求めるに際しては、先ず初めに、int(i/32)を算出する。この演算は、iの2進数データを右方向に5ビット分だけビットシフトさせることで実行することができる(図32(b)参照)。次いで、int(i/32)×32を算出する。この演算は、int(i/32)の2進数データを左方向に5ビット分だけビットシフトさせることで実行することができる(図32(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チップを用いてハードウェア的に実行することも容易であり、こうすることで極めて高速に処理することが可能である。
図33(a)〜(e)は、ローカルマトリックス内において、画素群階調値に応じて閾値の格納位置が入れ替えられる様子を示す説明図である。ローカルマトリックスとは、ディザマトリックスのうちの各画素群に対応する要素で構成された部分マトリックスである。
図33(b)は、後述する初期状態としてのブルーノイズマトリックスの部分マトリックスであるローカルマトリックスLMdを示している。順序値マトリックスOrd6(図16)は、ローカルマトリックスLMdに基づいて生成されている。図33(c)は、分類番号「1」の画素群の多値化結果「1」に相当する入力階調値に最適化された結果、初期状態と同一となっているローカルマトリックスLMdを示している。このマトリックスは、順序値マトリックスOrd1の生成の基準となるマトリックスである。なお、一部の入力階調値に対する最適化の方法については後述する。
図33(d)は、分類番号「1」の画素群の多値化結果「2」に相当する入力階調値に最適化されたローカルマトリックスLM1を示している。ローカルマトリックスLM1は、初期状態のローカルマトリックスLMdに対して4個の閾値の配置が入れ替えられている。具体的には、閾値「15」と閾値「162」とが入れ替えられているとともに、閾値「40」と閾値「116」とが入れ替えられている。これにより、分類番号「1」の画素群の多値化結果「2」のドット配置では、分類番号「1」の画素群の多値化結果「1」のドット配置で形成されていた画素にドットが形成されることなく、他の2箇所の画素にドットが形成されることになる。
図33(e)は、ローカルマトリックスLM1に対して、さらに、閾値「40」と閾値「210」とが入れ替えられたローカルマトリックスLM2を示している。ローカルマトリックスLM2は、順序値マトリックスOrd3の生成の基準となるマトリックスである。このような閾値の入れ替えは、本願の発明者が初めて実装に成功したものであって、従来のディザマトリックスでは、少なくとも現実問題としては存在しなかった概念である。
図34は、上述の閾値の入れ替えが粒状性を低減させる様子を示す説明図である。ドットパターンDP1〜DP4は、初期状態としてのローカルマトリックスに基づいて生成された順序値マトリックスOrd6に基づいて形成されている。一方、ドットパターンDP1a〜DP4aは、初期状態としてのローカルマトリックスに基づいて生成された順序値マトリックスOrd1〜3に基づいて形成されている。ドットパターンDP1〜DP4、DP1a〜DP4aにおいて、横線のハッチングが付されたドットは、対象となるローカルマトリックス内に形成されたドットを意味し、縦線のハッチングが付されたドットは、対象となるローカルマトリックス内に形成されたドットに対して連続するドットを意味する。
図34から分かるように、ドットパターンDP1a〜DP4aは、ドットパターンDP1〜DP4に対して低い粒状性を有する。ドットパターンDP1a〜DP4aにおいては、ドットの連続によって生成される巨大ドットの発生が、ドットパターンDP1〜DP4に対して少ないからである。このような巨大ドットの発生の低減は、対象となるローカルマトリックスのドット配置を考慮しつつ、ドットが連続しないように順序値マトリックスを修正することによって実現されている。このような順序値マトリックスの修正は、後述するような方法でディザマトリックスを調整することによって半自動化することも可能である。
図35は、本実施例の順序値マトリックスの生成で参照されるディザマトリックスの調整処理の流れを示すフローチャートである。ここでは、一例としてブルーノイズ特性を有する既存のディザマトリックスを元にして、想定される入力階調値の一部の着目階調値に対して粒状性を低下させる方法を説明する。
ステップS500では、元になるディザマトリックスとしてブルーノイズ特性を有する既存のディザマトリックスが読み込まれる。このディザマトリックスは、入力階調値の全体に対して最適化が図られてブルーノイズ特性を有するように構成されている。入力階調値の全体に対して最適化が図られているので、入力階調値の各部分については他の部分との妥協が図られていることになる。
ステップS502では、読み込んだマトリックスがマトリックスAとして設定される。ステップS504では、着目ローカルマトリックスの中から2つの画素位置(画素位置Pおよび画素位置Q)がランダムに選択される。着目ローカルマトリックスとは、最適化の対象となるローカルマトリックスを意味している。ローカルマトリックスとは、ディザマトリックスのうちで画素群に対応する部分マトリックスを意味する。
ステップS506では、着目ローカルマトリックスの中から選択された画素位置Pに設定されている閾値と、選択した画素位置Qに設定されている閾値とを入れ換えて、得られたマトリックスをマトリックスBとする。このように、閾値の入れ替えは、各ローカルマトリックスの内部においてのみ行われる。これにより、各ローカルマトリックスに対応する画素群で形成されるドット個数が維持されることになる。
ステップS508では、マトリックスAについての粒状性評価値Evaが算出される。粒状性評価値とは、本実施例では、着目階調値(たとえば階調値0〜7)の8通りの画像にディザ法を適用して得られた8通りのドットの形成状態のRMS粒状度である。RMS粒状度とは、濃度分布の標準偏差であって、ドットの形成状態を数値化してローパスフィルタ処理を施したデータの標準偏差として高速に算出することができる。ステップS510では、マトリックスBについても同様にして粒状性評価値Evbが算出される。
ステップS512では、マトリックスAについての粒状性評価値Evaと、マトリックスBについての粒状性評価値Evbとが比較される。この比較の結果、好ましい方(粒状性評価値が小さい方)のディザマトリックスが選択される。この選択は、マトリックスの読み替えによって実行される(ステップS514)。
このような処理(ステップS504〜ステップS514)が、着目ローカルマトリックスを変更しつつ粒状性評価値が収束するまで繰り返される。粒状性評価値が収束したか否かは、たとえば、マトリックスAの粒状性評価値EvaよりもマトリックスBの粒状性評価値Evbの方が小さくなった場合について、粒状性評価値の減少量を求めておき、この減少量が複数回の操作に亘って安定して一定値以下となっていれば、粒状性評価値が収束したものと判断することができる。
このようにして、着目階調値(上述の例では階調値0〜7)に最適化されたディザマトリックスを生成することができる。他の階調値に最適化されたディザマトリックスについても、着目閾値を変更することによって、同様に生成することができる。これにより、従来のディザマトリックスの限界、すなわち、想定される入力階調値の全域を評定として閾値の格納要素が配置されなければならないという限界を超えて画質を向上させることができることになる。
D.変形例:
D−1.第1の変形例 :
上述した本発明の実施例の多値化結果値生成処理では、階調値0から階調値255までの画素群階調値毎に、対応する多値化結果値を記憶した多値化テーブルを参照している。しかし多値化結果値は、画素群階調値が増加するに従って段階的に増加するだけなので、多値化結果値が切り換わる画素群階調値だけを記憶しておけば、画素群階調値に対する多値化結果値を求めることができる。以下に説明する第1の変形例の画像印刷処理では、こうした変形例の多値化結果値生成処理を行う。
図36は、変形例の多値化結果値生成処理において参照される閾値テーブルを概念的に示した説明図である。図示されているように閾値テーブルには、分類番号毎に、多値化結果値に対応する閾値が設定されている。この閾値は、画素群階調値を階調値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」であることを表している。
なお、図36では、分類番号毎の閾値は、それぞれ多値化結果値に対応させて設定されているものとした。しかし、特に多値化結果値に対応付けることなく、単なる閾値の組を分類番号毎に記憶することとしてもよい。この場合は、画素群階調値よりも小さな閾値の個数を数えることで、多値化結果値を求めることができる。再び、分類番号1番の画素群を例に用いて説明する。たとえば、画素群階調値が「20」であったとする。分類番号1番に設定されている閾値の組の中で、階調値20よりも小さな閾値は、「2」、「15」、「18」の3個である。このことから、画素群階調値20に対する多値化結果値は「3」であると求めることとしてもよい。
以上に説明した変形例の多値化結果値生成処理では、画素群についての画素群階調値と分類番号とを求めた後、図36に例示した閾値テーブルを参照することによって、多値化結果値を生成する。閾値テーブルは、前述した本発明の実施例の多値化結果生成処理中で参照する多値化テーブル(図9参照)よりも少ないデータ量で記憶しておくことができる。このため、変形例の多値化結果値生成処理は、本発明の実施例として示した処理に比べて、メモリ使用量を節約することが可能である。これに対して、本発明の実施例の多値化結果値生成処理は、分類番号と画素群階調値とから多値化テーブルを参照するだけで直ちに多値化結果値を求めることができる。すなわち、変形例における処理のように画素群階調値と閾値とを比較する必要がないので、迅速に多値化することが可能である。
D−2:第2の変形例 :
上述した本発明の実施例のドット形成有無決定処理では、画素群の分類番号と多値化結果値とを受け取ると、これを、画素群内に形成する各種ドットの個数を表すデータに一旦変換した。そして、ドット形成の有無を判断するに際しては、画素群内の各画素についてドットを形成するか否かをドットの種類毎に決定した。たとえば、図11に示したフローチャートでは、初めに大ドットについてのドット形成の有無を判断し、次に中ドットのついての判断を行い、最後に小ドットについて判断するといったように、ドットの種類毎にドット形成有無を判断していた。しかし、ドット形成有無を判断する方法は、こうした方法に限られるものではない。たとえば、画素群内から画素を1つずつ選択して、各画素について、大中小のいずれのドットが形成されるのか、あるいはドットが形成されないかを判断することとしてもよい。以下に説明する第2の変形例の画像印刷処理では、こうした変形例のドット形成有無決定処理を行う。
図37は、変形例のドット形成有無決定処理の流れを示したフローチャートである。以下、フローチャートに従って、変形例のドット形成有無決定処理について説明する。
変形例のドット形成有無決定処理においても前述した本発明の実施例における処理と同様に、処理を開始すると先ず初めに、処理対象とする画素群を1つ選択する(ステップS700)。次いで、選択した画素群の多値化結果値を取得し(ステップS702)、画素群の分類番号と多値化結果値とに基づいて、その画素群に形成するドット個数を表すデータを取得する(ステップS704)。ドット個数のデータは、分類番号と多値化結果値との組合せから、図12に示した変換テーブルを参照することによって迅速に取得することができる。
変形例のドット形成有無決定処理では、こうして取得したドット個数のデータを一旦、16ビット長の中間データに変換する(ステップS706)。すなわち、図12の変換テーブルではデータ量を低減するために、ドット個数のデータを8ビット長のコード値として表したが、変形例のドット形成有無決定処理では、ドット形成有無をより簡便に決定可能な形式で表現された中間データに一旦変換しておくのである。ここで、中間データのデータ長が16ビットとなっているのは、画素群内に含まれる画素数が8個であり、各画素についてのドット形成の有無は2ビットあれば表現可能であることによる。換言すれば、中間データは2ビットずつを1組として、画素数に相当する8組のデータを用いてドット個数を表すデータとなっている。画素群に形成するドット個数をこのような形式で表現しておけば、後述するように画素との対応が取り易くなるため、ドット形成有無を簡便に決定することが可能となる。変形例のドット形成有無決定処理においては、ドット個数を表すコード値と中間データとの対応関係が予め記憶されており、ステップS706の処理では、かかる対応関係を参照することによって中間データを取得する。
図38は、ドット個数を表すコード値と中間データとを対応付けた対応表を示す説明図である。前述したようにコード値は、各種ドットについての個数の組合せに対応付けられているから(図13参照)、2ビットを1組としてドットの種類を表し、そのビットの組をドットの個数に相当する数だけ並べた表現形式に変換すれば、16ビットのデータを得ることができる。16ビット長の中間データは、コード値の表現形式をこの様にして変換して得られたデータとなっている。
たとえば、コード値「1」は、大ドット0個、中ドット0個、小ドット1個の組合せを示している。なお、参考として、図38の右側には、それぞれのコード値が示すドット個数の組合せが示されている。今、小ドットを表す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ビットデータを左詰めで設定することとしても良い。すなわち、大ドット、中ドット、小ドットの順番で左から順番に設定しても良い。
図37に示した変形例のドット形成有無決定処理のS706では、図38に示した対応関係を参照することによって、ドット個数を表すデータを、中間データに変換する処理を行う。なお、以上の説明では、図12に示した変換テーブルを参照することによって、分類番号および画素群階調値の組合せを、ドット個数を表す8ビットのコード値に一旦変換した後、図38に示した対応関係に基づいて、コード値を16ビットの中間データに変換するものとした。もっとも、コード値と中間データとは1対1に対応付けられていることから、図12に示した変換テーブルに、8ビットのコード値ではなく16ビットの中間データを設定しておき、画素群の分類番号および画素群階調値の組合せから、直ちに中間データを取得することも可能である。このようにすれば、変換テーブルのデータ量は大きくなるものの、迅速に中間データを得ることができる。
以上のようにして中間データを取得したら、画素群の分類番号および画素群階調値の組合せに応じて順序値マトリックスを生成した後(ステップS708)、画素群の中からドット形成有無を決定しようとする画素を1つ選択して(ステップS710)、順序値マトリックス中で選択した画素位置に設定されている順序値を取得する(ステップS712)。
次いで、先に取得しておいた中間データの中から、順序値に対応する箇所に設定されている2ビットデータを読み出すことによって、選択した画素についてのドット形成の有無を決定する(ステップS714)。図39は、中間データの中から順序値に対応する箇所のデータを読み出すことにより、ドット形成の有無を決定している様子を示した説明図である。図39(a)は、ある画素群に形成するドット個数のデータを変換して得られた中間データを例示したものである。前述したように中間データは、16ビット長のデータであり、2ビットずつ8組のデータから構成されている。また、図39(a)に示した中間データには、大ドットを表す2ビットデータ「11」が1組、中ドットを表す2ビットデータ「10」が2組、小ドットを表す2ビットデータ「01」が3組、ドットを形成しないことを表す2ビットデータ「00」が2組含まれており、これら2ビットデータが、大ドット、中ドット、小ドットの順序で右詰めに設定されている。
今、ドット形成有無を決定しようとしている画素の順序値が「3」であったとする。この場合は、中間データの中で、右から3組目に設定されている2ビットデータを読み出せば、順序値3の画素に形成すべきドットの種類を決定することができる。図39(b)には、中間データの右端から3組目にある2ビットデータを読み出している様子が、概念的に示されている。図示した例では、読み出した2ビットデータは「10」であるから、この画素には中ドットを形成するものと決定すればよい。仮に、順序値が「1」であれば、中間データの右端に設定されている2ビットデータを読み出して、大ドットを形成するものと決定すればよい。
このように、変形例のドット形成有無決定処理では、中間データの中から、順序値に相当する箇所に設定されている2ビットデータを読み出すという極めて簡単な操作によって、ドット形成の有無を決定することができる。これは、次の理由によるものである。先ず、中間データには、大ドット、中ドット、小ドットを表す2ビットデータが右詰めで設定されている。一方、図23あるいは図25に示したように、ディザ法を用いて大中小各ドットの形成有無を判断する処理では、大ドット、中ドット、小ドットの順番でドット形成の有無を決定している。従って、中間データに設定されている2ビットデータを右端から順番に読み出していけば、図23あるいは図25を用いて前述した手法を適用して各種ドットを形成する画素位置を決定した順番と同じ順番で、大ドット、中ドット、小ドットを表す2ビットデータの並びが得られることになる。
D−3:第3の変形例 :
上述の実施例や変形例は、大中小の3種類のドットを形成するプリンタを想定して構成されているが、たとえば4種類以上のドットを形成するプリンタや2種類あるいは図40に示されるような1種類のドットを形成するプリンタにも本願発明は適用することが可能である。
なお、1種類のドットを形成するプリンタに本願発明を適用する場合には、ディザ法を用いて大中小各ドットの形成有無を判断する処理(図23、図25)が不要となるので、ドット個数データの生成や供給が不要となるとともに順序値マトリックスにおける順序の概念も不要となる。これにより、分類番号と位置番号(図15)のみで各画素群のドットの形成位置が決定できることになる。この結果、各入力階調領域毎(あるいは各入力階調値毎)にドットの分散性が最適化された印刷を極めて少ない処理負担で実現することができることになる。
D−4:第4の変形例 :
上述の実施例や変形例では、印刷画像を複数の画素群に分割して画素群毎にハーフトーン処理を行っているが、たとえば入力階調値の一部の領域に対して最適化された複数のディザマトリックスを用いて従来のように画素毎に処理するようにしても良い。ただし、上述の実施例や変形例は、従来のディザ法よりも少ない処理負担で本願発明を実現できるという利点を有する。
このようなディザマトリックスは、たとえば領域毎に最適化された複数のディザマトリックスとして構成されていても良い。領域毎とは、たとえば入力階調値が0〜255の幅を有する場合には、0〜7、8〜15というように所定の幅を持った領域毎であっても良いし、階調値毎であっても良い。さらに、たとえばハーフトーン処理に起因して画質劣化が生じやすい領域、すなわちドット密度の低い一部の領域のみに対して格納位置の変更を行うようにしても良い。
また、特許請求の範囲における「所定のディザマトリックスを用いてハーフトーン処理」とは、広い概念を有し、所定のディザマトリックスに基づいて生成されたデータ(たとえば個数データ変換テーブル(図12)や順序値マトリックス変換テーブル(図14))を用いてドットデータを生成する処理も含む。
さらに、上述の実施例や変形例では、ディザマトリックスに設定されている閾値と画像データの階調値とを画素毎に比較することによって、個数データ変換テーブル等を生成しているが、たとえば閾値と階調値の和を固定値と比較してドット形成の有無を判断して各テーブル(図12、図14)等を生成するようにしても良い。
D−5:第5の変形例 :
上述の実施例では、ローパスフィルタ処理を行うとともにドット密度の均一性やRMS粒状度に基づいてディザマトリックスの最適性を評価しているが、たとえばドットパターンに対してフーリエ変換を行うとともにVTF関数を用いてディザマトリックスの最適性を評価するように構成しても良い。具体的には、ゼロックスのDooleyらが用いた評価尺度(Grainess scale:GS値)をドットパターンに適用して、GS値によってディザマトリックスの最適性を評価するように構成しても良い。ここで、GS値とは、ドットパターンに対して2次元フーリエ変換を含む所定の処理を行って数値化するとともに、視覚の空間周波数特性VTFとカスケードした後に積分することによって得ることができる粒状性評価値である(参考文献:ファインイメージングとハードコピー、コロナ社、日本写真学会、日本画像学会 合同出版委員会編 P534)。ただし、前者は、フーリエ変換などの複雑な計算が不必要となるという利点を有する。なお、GS値は、粒状性指数とも呼ばれる。
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。たとえば、以上の実施例では、印刷用紙上にドットを形成して画像を印刷する場合について説明したが、本発明の適用範囲は画像を印刷する場合に限られるものではない。たとえば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置などにも、本発明を好適に適用することができる。
D−6:第6の変形例 :
上述の実施例では、全ての出力画素群について順序値マトリックスを切り替えているが、たとえばチェッカーフラグ状に選択した全体の1/2の出力画素群についてのみ順序値マトリックスの切替を行うようにしても良いし、全体の1/4程度の出力画素群に減らしても良い。発明者が行った実験によれば、全体の1/2の出力画素群の切替で効果の飽和が始まり、全体の1/4程度の出力画素群の切替でも顕著な効果が確認された。本発明のドット配置決定工程は、少なくとも一部の出力画素群について複数のドット配置決定用マトリクスの切替が行われればよい。
D−7:第7の変形例 :
上述の実施例では、入力階調値の一部の領域についてディザマトリックスのローカルブロック内での閾値の格納位置の入替で最適化を図っているが、たとえば順序値マトリックスに格納されている順序値の入替によって、順序値マトリックスを入力階調値の一部の領域について直接的に最適化を図るように構成しても良い。なお、順序値マトリックスは、特許請求の範囲における「ドット配置決定用マトリクス」に相当する。
D−8:第8の変形例 :
図29に示したように、上述のドット形成有無決定処理においては、画素群毎に多値化結果値を受け取ると、画素群の分類番号を求めた後、多値化結果値と分類番号との組合せから、画素群内に形成される各種ドットの個数を決定した。そして、これらドットを形成する画素位置については、分類番号に対応した順序値マトリックスを参照することによって決定していた。すなわち、画素群の多値化結果値および分類番号が決まれば、画素群内の各画素に形成されるドットの種類を決定することができる。従って、予め、多値化結果値と分類番号との組合せ毎に、画素群内の各画素に形成されるドットの種類を求めて対応表に記憶しておけば、かかる対応表を参照するだけで、直ちにドット形成有無を決定することができるはずである。第8の変形例のドット形成有無決定処理は、このような考え方に基づいて、画素群の多値化結果値から、各画素についてのドット形成の有無を迅速に決定することが可能となっている。
図41は、第8の変形例のドット形成有無決定処理で参照される変換テーブルを概念的に示した説明図である。図示されているように、第8の変形例の変換テーブルには、多値化結果値と分類番号との組合せに対応付けて、画素群内の各画素に形成されるドット種類を表すデータが設定されている。以下では、このようなデータをドットデータと呼ぶことにする。図41に示した変換テーブルを参照すれば、画素群の分類番号と画素群階調値との組合せから、対応するドットデータを直ちに読み出すことができる。例えば、分類番号i番、画素群階調値jであれば、ドットデータはDD(i,j)となる。こうして読み出されたドットデータには、画素群内の各画素についてドット形成の有無が記述されている。
図42は、第8の変形例の変換テーブルに設定されているドットデータのデータ構造を示した説明図である。図42(a)に示すように、ドットデータは2ビットずつのデータ8組から構成された16ビット長のデータとなっている。ここで、1つのドットデータが8組のデータから構成されているのは、本実施例の画像印刷処理では、1つの画素群には8つの画素が含まれていることに対応するものである。従って、例えば、1つの画素群が4つの画素から構成される場合は、1つのドットデータは4組のデータから構成されることになる。また、1組のデータが2ビットとなっているのは、本実施例のカラープリンタ200が1つの画素あたり、「大ドットを形成」、「中ドットを形成」、「小ドットを形成」、「ドットを形成しない」の4つの状態を表現し得ることに対応したものである。すなわち、1つの画素あたり4つの状態しか取り得ないのであれば、2ビットで表現可能である。そこで、画素1つ分に対応する1組のデータを、2ビットのデータ長としているのである。
図42に示すように、ドットデータを構成する8組のデータは、それぞれ画素群内の所定位置の画素に対応付けられている。例えば、図42(a)に示したドットデータの先頭にある1組目のデータは、図42(b)に示すように、画素群内で左上隅の画素に対応している。また、ドットデータの先頭から2組目のデータは、画素群内で上段の左から2番目の画素に対応している。このように、ドットデータを構成する8組のデータは、それぞれ画素群内の所定位置の画素に予め対応付けられている。
そして、各組のデータの内容は、対応する画素に形成するドットの種類を表している。すなわち、2ビットのデータ「11」は大ドットを形成することを意味している。2ビットのデータ「10」は中ドットを形成することを意味しており、「01」は小ドットを形成することを、そして「00」はドットを形成しないことを意味している。以上の説明から分かるように、図42(a)に例示したドットデータは、画素群の左上隅の画素には大ドットを形成し、上段の左から3番目の画素には中ドットを、下段の左から2番目の画素には小ドットを、画素群の右下隅の画素には中ドットを形成し、そして、その他の画素にはドットを形成しないことを表すデータとなっている。
このような変換テーブルを参照すれば、画素群の分類番号と多値化結果値とに基づいて、各画素についてのドット形成の有無を速やかに決定することが可能である。次に、第8の変形例のドット形成有無決定処理において、多値化結果値から画素群内の各画素についてドット形成の有無を決定する具体的な処理について説明する。
図43は、第8の変形例のドット形成有無決定処理の流れを示すフローチャートである。以下、フローチャートに従って簡単に説明する。第8の変形例のドット形成有無決定処理を開始すると、処理対象とする画素群を1つ選択する(ステップS900)。次いで、選択した画素群の多値化結果値を取得する(ステップS902)。このとき、画素群の分類番号が与えられていなければ、分類番号も算出しておく。そして、分類番号および多値化結果値の組合せに基づいて、図41に示した変換テーブルを参照することにより、画素群内の各画素についてドット形成の有無を表したドットデータを読み出してやる(ステップS904)。第8の変形例のドット形成有無決定処理では、こうして変換テーブルから対応する位置に記憶されているドットデータを読み出すだけで、画素群内の各画素についてドット形成の有無を決定することができる。
次いで、全画素群についてドット形成の有無を決定したか否かを判断し(ステップS906)、未処理の画素群が残っていれば(ステップS906:no)、ステップS900に戻って新たな画素群を選択し、その画素群について続く一連の処理を行う。こうした操作を繰り返して、全画素群について処理を終了したと判断されたら(ステップS906:yes)、図43に示す第8の変形例のドット形成有無決定処理を終了する。
以上に説明したように、第8の変形例のドット形成有無決定処理では、変換テーブルを1回参照するだけで、多値化結果値から画素群内の各画素についてのドット形成有無を直ちに決定することができる。従って、図11に示した上述の実施例のドット形成有無決定処理に対しても、より一層迅速にドット形成の有無を決定することができ、延いては、極めて迅速に画像を出力することが可能となる。