(57)【要約】【課題】  高画質な画像を簡素な処理で迅速に出力可能な技術を提供する。【解決手段】  隣接する画素を複数個ずつまとめて画素群を生成し、画素群毎に画素群階調値を決定する。次いで、予め設定しておいた対応関係に基づいて、画素群の画素群階調値に応じた個数データを取得する。また、画素群階調値を個数データへ変換する際に生じた階調誤差を周辺の画素群に拡散し、画素群階調値の算出に反映させる。次いで、画素群内でドットが形成される画素位置を個数データに基づいて決定し、ドットを形成する。個数データはデータ量が小さく迅速にやり取りでき、生成テーブルを参照すれば迅速に個数データを生成することができる。更に、誤差を拡散することで画質の改善も可能である。このため、高画質な画像データを迅速に出力することが可能となる。【選択図】        図１
2005303666.tif 000002
【特許請求の範囲】
【請求項１】
画像データに所定の画像処理を施す画像処理装置と、該画像処理の結果に基づいてドットを形成することにより画像を出力する画像出力装置とを備える画像出力システムであって、
前記画像処理装置は、
互いに隣接する画素が複数個ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する画素群階調値決定手段と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成した後、該個数データを前記画像出力装置に供給する個数データ供給手段と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する誤差拡散手段と
を備えており、
前記画像出力装置は、
前記画素群内で各画素にドットが形成される画素の序列を特定し、前記画素群毎に供給された個数データと該特定した序列とに基づいて、該画素群内でドットが形成される画素位置を決定する画素位置決定手段と、
前記決定した画素位置に基づいてドットを形成するドット形成手段と
を備えている画像出力システム。
【請求項２】
請求項１記載の画像出力システムであって、
前記個数データ供給手段は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に形成するドット個数を表す個数データとが対応付けられた個数データ生成テーブルを参照することにより、該各々の画素群についての個数データを生成する手段である画像出力システム。
【請求項３】
請求項１または請求項２記載の画像出力システムであって、
前記画素群階調値決定手段は、前記画素群階調値を、前記画素群内の各画素の画像データに基づいて決定する手段である画像出力システム。
【請求項４】
請求項１または請求項２記載の画像出力システムであって、
前記画素群階調値決定手段は、前記画素群階調値を、前記画素群内の各画素の画像データと、該画素群に拡散された前記階調誤差とに基づいて決定する手段である画像出力システム。
【請求項５】
ドットを形成して画像を出力する画像出力装置が該ドットの形成を制御するために用いる制御データを、該画像を表す画像データに所定の画像処理を加えて生成する画像処理装置であって、
互いに隣接する画素が所定個数ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する画素群階調値決定手段と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成した後、該個数データを前記制御データとして出力する制御データ出力手段と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する誤差拡散手段と
を備える画像処理装置。
【請求項６】
請求項５記載の画像処理装置であって、
前記制御データ出力手段は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に形成するドット個数を表す個数データとが対応付けられた個数データ生成テーブルを参照することにより、該各々の画素群についての個数データを生成する手段である画像処理装置。
【請求項７】
請求項５または請求項６記載の画像処理装置であって、
前記画素群階調値決定手段は、前記画素群階調値を、前記画素群内の各画素の画像データに基づいて決定する手段である画像処理装置。
【請求項８】
請求項５または請求項６記載の画像処理装置であって、
前記画素群階調値決定手段は、前記画素群階調値を、前記画素群内の各画素の画像データと、該画素群に拡散された前記階調誤差とに基づいて決定する手段である画像処理装置。
【請求項９】
請求項５または請求項６記載の画像処理装置であって、
前記画素群を前記画像中での位置に応じて複数種類に分類することにより、該各々の画素群に前記分類番号を付与する分類番号付与手段を備える画像処理装置。
【請求項１０】
請求項５または請求項６記載の画像処理装置であって、
前記誤差拡散手段は、前記個数データが表す階調値と前記画素群階調値との階調差を算出することによって求めた前記階調誤差を、該個数データが未だ生成されていない画素群に拡散する手段である画像処理装置。
【請求項１１】
請求項５または請求項６記載の画像処理装置であって、
前記誤差拡散手段は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に生じる前記階調誤差とが対応付けられた階調誤差生成テーブルを参照することによって該画素群の階調誤差を取得した後、前記個数データが未だ生成されていない画素群に拡散する手段である画像処理装置。
【請求項１２】
請求項６記載の画像処理装置であって、
前記個数データ生成テーブルは、前記分類番号および前記画素群階調値の組合せ毎に、前記個数データおよび前記階調誤差が対応付けられたテーブルであり、
前記制御データ出力手段は、前記前記個数データ生成テーブルを参照することにより、前記個数データに加えて前記階調誤差を生成する手段であり、
前記誤差拡散手段は、前記個数データとともに生成された前記階調誤差を取得して、該個数データが未だ生成されていない画素群に拡散する手段である画像処理装置。
【請求項１３】
請求項６記載の画像処理装置であって、
前記個数データ生成テーブルは、表現する階調値の異なる複数種類のドットについてのドット個数を表す個数データと、前記分類番号および前記画素群階調値の組合せとを対応付けたテーブルであり、
前記制御データ出力手段は、前記個数データ生成テーブルを参照することにより、前記各種ドットについてのドット個数の組合せを表す個数データを生成した後、前記制御データとして出力する手段である画像処理装置。
【請求項１４】
請求項１３記載の画像処理装置であって、
前記制御データ出力手段は、前記制御データを、前記各種ドットについてのドット個数の組合せに応じてコード化された状態で出力する手段である画像処理装置。
【請求項１５】
請求項５または請求項６記載の画像処理装置であって、
前記画像データから前記画素群階調値を決定する際に生じた丸め誤差を取得する丸め誤差取得手段を備え、
前記誤差拡散手段は、前記階調誤差に加えて前記丸め誤差も、前記個数データが未だ精製されていない画素群に拡散する手段である画像処理装置。
【請求項１６】
画像データに応じてドットを形成することにより、該画像データに対応した画像を出力する画像出力装置であって、
互いに隣接する画素が複数個ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する画素群階調値決定手段と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成する個数データ生成手段と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する誤差拡散手段と
前記画素群内で各画素にドットが形成される画素の序列を特定し、前記画素群毎に供給された個数データと該特定した序列とに基づいて、該画素群内でドットが形成される画素位置を決定する画素位置決定手段と、
前記決定した画素位置に基づいてドットを形成するドット形成手段と
を備える画像出力装置。
【請求項１７】
請求項１６記載の画像出力装置であって、
前記個数データ生成手段は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に形成するドット個数を表す個数データとが対応付けられた個数データ生成テーブルを参照することにより、該各々の画素群についての個数データを生成する手段である画像出力装置。
【請求項１８】
画像データに所定の画像処理を施して、得られた結果に基づいてドットを形成することにより画像を出力する画像出力方法であって、
互いに隣接する画素が複数個ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する第１の工程と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成する第２の工程と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する第３の工程と、
前記画素群内で各画素にドットが形成される画素の序列を特定し、前記画素群毎に供給された個数データと該特定した序列とに基づいて、該画素群内でドットが形成される画素位置を決定する第４の工程と、
前記決定した画素位置に基づいてドットを形成する第５の工程と
を備える画像出力方法。
【請求項１９】
請求項１８記載の画像出力方法であって、
前記第２の工程は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に形成するドット個数を表す個数データとが対応付けられた個数データ生成テーブルを参照することにより、該各々の画素群についての個数データを生成する工程である画像出力方法。
【請求項２０】
ドットを形成して画像を出力する画像出力装置が該ドットの形成を制御するために用いる制御データを、該画像を表す画像データに所定の画像処理を加えて生成する画像処理方法であって、
互いに隣接する画素が所定個数ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する工程（Ａ）と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成した後、該個数データを前記制御データとして出力する工程（Ｂ）と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する工程（Ｃ）と
を備える画像処理方法。
【請求項２１】
請求項２０記載の画像処理方法であって、
前記工程（Ｂ）は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に形成するドット個数を表す個数データとが対応付けられた個数データ生成テーブルを参照することにより、該各々の画素群についての個数データを生成する工程である画像処理方法。
【請求項２２】
画像データに所定の画像処理を施して、得られた結果に基づいてドットを形成することにより画像を出力する方法を、コンピュータを用いて実現するためのプログラムであって、
互いに隣接する画素が複数個ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する第１の機能と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成する第２の機能と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する第３の機能と、
前記画素群内で各画素にドットが形成される画素の序列を特定し、前記画素群毎に供給された個数データと該特定した序列とに基づいて、該画素群内でドットが形成される画素位置を決定する第４の機能と、
前記決定した画素位置に基づいてドットを形成する第５の機能と
を実現するプログラム。
【請求項２３】
請求項２２記載のプログラムであって、
前記第２の機能は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に形成するドット個数を表す個数データとが対応付けられた個数データ生成テーブルを参照することにより、該各々の画素群についての個数データを生成する機能であるプログラム。
【請求項２４】
ドットを形成して画像を出力する画像出力装置が該ドットの形成を制御するために用いる制御データを、該画像を表す画像データに所定の画像処理を加えて生成する方法を、コンピュータを用いて実現するためのプログラムであって、
互いに隣接する画素が所定個数ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する機能（Ａ）と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成した後、該個数データを前記制御データとして出力する機能（Ｂ）と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する機能（Ｃ）と
を実現するプログラム。
【請求項２５】
請求項２４記載のプログラムであって、
前記機能（Ｂ）は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に形成するドット個数を表す個数データとが対応付けられた個数データ生成テーブルを参照することにより、該各々の画素群についての個数データを生成する機能であるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、画像データに基づいて画像を出力する技術に関し、詳しくは、画像データに所定の画像処理を施してドットを適切な密度で発生させることにより、画像を出力する技術に関する。
【背景技術】
【０００２】
印刷媒体や液晶画面といった各種の出力媒体上にドットを形成することで画像を出力する画像出力装置は、各種画像機器の出力装置として広く使用されている。これら画像出力装置では、画像は画素と呼ばれる小さな領域に細分された状態で扱われており、ドットはこれら画素に形成される。ドットを画素に形成した場合、もちろん画素１つ１つについて見れば、ドットが形成されるか否かのいずれかの状態しか取り得ない。しかし、ある程度の広さを持った領域で見れば、形成するドットの密度に粗密を生じさせることは可能であり、ドットの形成密度を変えることによって多階調の画像を出力することが可能である。例えば、印刷用紙上に黒いインクのドットを形成する場合、ドットが密に形成されている領域は暗く見えるし、逆にドットがまばらに形成されている領域は明るく見える。また、液晶画面に輝点のドットを形成する場合、ドットが密に形成された領域は明るく見え、まばらに形成された領域は暗く見える。従って、ドットの形成密度を適切に制御してやれば、多階調の画像を出力することが可能となる。このように、適切な形成密度が得られるようにドットの形成を制御するためのデータは、出力しようとする画像に所定の画像処理を施すことによって発生させる。
【０００３】
近年では、これら画像出力装置には、出力画像の高画質化や大画像化が要請されるようになってきた。高画質化の要請に対しては、画像をより細かな画素に分割することが効果的である。画素を小さくしてやれば、画素に形成されるドットが目立たなくなるので画質を向上させることができる。また、大画像化の要請に対しては、画素数の増加によって対応する。もちろん、個々の画素を大きくすることによっても出力画像を大きくすることはできるが、これでは画質の低下を招いてしまうので、大型化の要請に対しては画素数を増加させることが効果的である。
【０００４】
もっとも、画像を構成する画素数が増加すると画像処理に時間がかかってしまい、画像を迅速に出力することが困難となる。そこで、画像処理を迅速に実行可能とする技術が提案されている（特許文献１）。
【０００５】
【特許文献１】特開２００２−１８５７８９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、画像処理を迅速に行ったとしても、画像データの転送に、あるいは処理済みの画像データの転送に時間がかかってしまったのでは、画像の出力を迅速化する効果にも自ずから限界がある。
【０００７】
また、近年では、デジタルカメラなどで撮影した画像のデータを、印刷装置などの画像出力装置に直接供給して直ちに画像を出力したいという要請も存在する。このような場合は、いわゆるパーソナルコンピュータ等のような高い処理能力を備えた画像処理装置を用いて画像処理を行うことはできない。従って、デジタルカメラなどの画像撮影装置あるいは画像出力装置のいずれか、若しくは両者で分担して実行可能なように、簡素な画像処理としておく必要がある。
【０００８】
この発明は従来技術における上述した課題を解決するためになされたものであり、十分な出力画質を維持したまま、画像処理およびデータ転送を高速に実行可能であるとともに、画像処理のためにパーソナルコンピュータ等のような高い処理能力を有する機器を用いずとも実行可能な、簡素な画像処理技術の提供を目的とする。
【課題を解決するための手段】
【０００９】
上述した課題の少なくとも一部を解決するために、本発明の画像出力システムは、次の構成を採用した。すなわち、
画像データに所定の画像処理を施す画像処理装置と、該画像処理の結果に基づいてドットを形成することにより画像を出力する画像出力装置とを備える画像出力システムであって、
前記画像処理装置は、
互いに隣接する画素が複数個ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する画素群階調値決定手段と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成した後、該個数データを前記画像出力装置に供給する個数データ供給手段と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する誤差拡散手段と
を備えており、
前記画像出力装置は、
前記画素群内で各画素にドットが形成される画素の序列を特定し、前記画素群毎に供給された個数データと該特定した序列とに基づいて、該画素群内でドットが形成される画素位置を決定する画素位置決定手段と、
前記決定した画素位置に基づいてドットを形成するドット形成手段と
を備えていることを要旨とする。
【００１０】
また、上記の画像出力システムに対応する本発明の画像出力方法は、
画像データに所定の画像処理を施して、得られた結果に基づいてドットを形成することにより画像を出力する画像出力方法であって、
互いに隣接する画素が複数個ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する第１の工程と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成する第２の工程と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する第３の工程と、
前記画素群内で各画素にドットが形成される画素の序列を特定し、前記画素群毎に供給された個数データと該特定した序列とに基づいて、該画素群内でドットが形成される画素位置を決定する第４の工程と、
前記決定した画素位置に基づいてドットを形成する第５の工程と
を備えることを要旨とする。
【００１１】
かかる本発明の画像出力システムおよび画像出力方法においては、複数の画素をまとめて画素群を構成し、画素群内に形成されるドット個数を表す個数データを生成して、画像出力装置に供給する。ここで、画素群としては、常に同数の画素をまとめたものであっても良いが、例えば、所定のパターンあるいは所定の規則に従って異なる個数ずつ画素をまとめたものとすることもできる。また、「ドット個数を表す」とは、画素群内に形成するドット個数を特定し得るものであれば足り、直接的にドットの個数を表している必要はない。次いで、画素群内で各画素にドットが形成される画素の序列を特定し、画素群毎の個数データと各画素について特定された序列とに基づいて、画素群内でドットが形成される画素位置を決定する。画素の序列は、例えば予め適切な序列を記憶しておき、この序列を読み出すことによって決定することとしてもよい。更には、画素群毎に異なる序列を記憶しておくこととしても良い。こうして、個数データと序列とに基づいて決定した画素位置に従って、ドットを形成することにより画像を出力する。例えば、印刷媒体や液晶画面などの媒体上にドットを形成すれば、これら媒体上に画像が出力されることになる。
【００１２】
詳細には後述するが、画像の全画素についてドット形成の有無を表すデータに比べれば、画素群毎にドットの個数を表すデータは遙かに小さなデータとすることができる。このため、画像出力装置に個数データを供給してやれば、迅速にデータを供給することが可能となり、延いては画像を迅速に出力することが可能となる。
【００１３】
また、個数データの生成に際しては、画素群階調値と、画素群に形成するドット個数を表す個数データとの対応関係に基づいて、各々の画素群についての個数データを生成する。後ほど詳細に説明するように、画素群の画素群階調値は極めて容易に求めることができるから、このような対応関係に基づいて個数データを生成することとすれば、各画素群についての個数データを迅速に生成することが可能となる。
【００１４】
更に、個数データを生成したことで画素群毎に生じた階調誤差を、未だ個数データが生成されていない画素群に拡散していることから、画素群で発生した階調誤差を速やかに解消することが可能であり、それだけ画質を改善することが可能となる。
【００１５】
また、上述の画像出力システムにおける画像処理装置と画像出力装置とを一体に組み込んで、画像処理の機能と画像を出力する機能とを併せ持った画像出力装置を構成することも可能である。従って、本発明は、次のような画像出力装置として把握することも可能である。すなわち、本発明の画像出力装置は、
画像データに応じてドットを形成することにより、該画像データに対応した画像を出力する画像出力装置であって、
互いに隣接する画素が複数個ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する画素群階調値決定手段と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成する個数データ生成手段と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する誤差拡散手段と
前記画素群内で各画素にドットが形成される画素の序列を特定し、前記画素群毎に供給された個数データと該特定した序列とに基づいて、該画素群内でドットが形成される画素位置を決定する画素位置決定手段と、
前記決定した画素位置に基づいてドットを形成するドット形成手段と
を備えることを要旨とする。
【００１６】
こうした画像出力装置においても、画素毎にドット形成の有無を表すデータの代わりに、画素群の個数データを生成することで、データ量が低減される分だけ迅速に取り扱うことができる。加えて、個数データは簡単な処理で迅速に生成することができることから、速やかに画像処理を行うことができる。更に、画素群で生じた階調誤差を拡散することで、誤差を速やかに解消することができる。このため、高画質な画像を迅速に出力することが可能となる。
【００１７】
こうした本願の画像出力システム、画像出力方法、および画像出力装置においては、画素群毎に付与された分類番号と画素群の画素群階調値との組合せと、該画素群に形成するドット個数を表す個数データとを、個数データ生成テーブルに対応付けておき、このテーブルを参照することによって、各々の画素群についての個数データを生成することとしてもよい。
【００１８】
画素群階調値と分類番号とに基づいて個数データ生成テーブルを参照することによって個数データを生成すれば、適切な個数データを簡単に生成することができる。加えて、画素群毎に分類番号が予め付与されている場合は言うに及ばず、分類番号を決定しなければならない場合でも、後述するように極めて容易に決定することができるから、個数データを生成する処理は極めて簡素な処理とすることができる。このため、個数データを迅速に生成することが可能となり、延いては、画像を迅速に出力することが可能となる。
【００１９】
また、詳細には後述するが、画素群の画素群階調値から個数データを生成する処理は、一種の多値化処理と考えることができる。しかし、個数データは、画素群の分類番号と画素群階調値との組合せによって決定されており、画素群の分類番号が異なれば、同じ画素群階調値に対しても異なる個数データが生成される。従って、一般的な多値化処理のように、多値化結果が一定のパターンで繰り返されると言ったおそれがなく、常に安定した画質を得ることが可能である。
【００２０】
また、各画素群についての画素群階調値は、画素群内の各画素についての画像データに基づいて決定することとしてもよい。例えば、各画素の画像データの平均値を算出し、得られた平均値を画素群階調値としても良いし、あるいは画素群内で最も多くの画素に付与された画像データを画素群階調値としても良く、更には、画素群内で所定位置にある画素の画像データを画素群階調値とすることも可能である。このように、画素群内の各画素についての画像データに基づいて決定すれば、画素群階調値を適切に決定することが可能となる。
【００２１】
更に、画素群階調値を決定するに際しては、画素群内の各画素の画像データと、その画素群に拡散された階調誤差とに基づいて決定することとしてもよい。このようにして、画素群階調値の決定に際して、階調誤差を考慮すれば、他の画素群で発生した階調誤差を速やかに解消することができるので、それだけ画質を改善することが可能となる。
【００２２】
また、従来技術が有する前述した課題の少なくとも一部を解決するために、本発明の画像処理装置は次の構成を採用した。すなわち、
ドットを形成して画像を出力する画像出力装置が該ドットの形成を制御するために用いる制御データを、該画像を表す画像データに所定の画像処理を加えて生成する画像処理装置であって、
互いに隣接する画素が所定個数ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する画素群階調値決定手段と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成した後、該個数データを前記制御データとして出力する制御データ出力手段と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する誤差拡散手段と
を備えることを要旨とする。
【００２３】
また、上記の画像処理装置に対応する本発明の画像処理方法は、
ドットを形成して画像を出力する画像出力装置が該ドットの形成を制御するために用いる制御データを、該画像を表す画像データに所定の画像処理を加えて生成する画像処理方法であって、
互いに隣接する画素が所定個数ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する工程（Ａ）と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成した後、該個数データを前記制御データとして出力する工程（Ｂ）と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する工程（Ｃ）と
を備えることを要旨とする。
【００２４】
かかる本発明の画像処理装置および画像処理方法においても、画素を複数個ずつ画素群にまとめて、画素群内に形成されるドット個数を表す個数データを生成し、画素群毎に得られた個数データを制御データとして出力する。
【００２５】
後述するように、画像の全画素についてドット形成の有無を表すデータに比べれば、画素群毎にドットの個数を表すデータは遙かに小さなデータとすることができるため、こうすることで制御データを迅速に出力することが可能となる。
【００２６】
また、かかる画像処理装置および画像処理方法では、画素群階調値と個数データとの対応関係に基づいて個数データを生成している。このため、個数データを迅速に生成することができ、延いては、制御データを迅速に出力することが可能となる。
【００２７】
加えて、個数データを生成したことで生じた階調誤差を、未だ個数データが生成されていない画素群に拡散している。このため、発生した階調誤差を速やかに解消することが可能となり、それだけ画質を向上させることが可能となる。
【００２８】
また、かかる画像処理装置および画像処理方法においても、次のようにして個数データを生成することとしても良い。すなわち、画素群の分類番号および画素群階調値の組合せと、個数データと対応付けた個数データ生成テーブルを予め記憶しておき、このテーブルを参照することによって個数データを生成してもよい。
【００２９】
こうすれば、適切な個数データを容易に生成することができるので、制御データを適切に且つ迅速に出力することが可能となる。加えて、画素群の分類番号と画素群階調値との組合せによって個数データが決定されることから、画素群の分類番号が異なれば、同じ画素群階調値に対しても異なる個数データが生成される。このため、一般的な多値化処理のように、多値化結果が一定のパターンで繰り返されると言ったおそれがなく、常に安定した画質を得ることができる。
【００３０】
もちろん、前述した本願の画像出力システム、画像出力装置、および画像出力方法と同様に、各画素群についての画素群階調値を、画素群内の各画素についての画像データに基づいて決定することとしてもよい。こうすれば、画素群階調値を適切に決定することが可能となる。
【００３１】
更に、画素群内の各画素の画像データと、その画素群に拡散された階調誤差とに基づいて、画素群階調値を決定することとしてもよい。このようにして、画素群階調値の決定に際して、階調誤差を考慮すれば、他の画素群で発生した階調誤差を速やかに解消することができるので、それだけ画質を改善することが可能となる。
【００３２】
かかる画像処理装置および画像処理方法においては、画素群の分類番号を次のようにして付与することとしても良い。すなわち、各画素群を画像中での位置に応じて複数種類に分類し、その結果に応じて分類番号を付与することとしても良い。
【００３３】
こうすれば、画素群に予め分類番号を付与しておく必要が無いだけでなく、画像中での位置に応じて付与することで適切に分類番号を付与することが可能となる。
【００３４】
また、各画素群の階調誤差は、個数データが表す階調値と画素群階調値との階調差を算出することによって求めることとしてもよい。
【００３５】
個数データが表す階調値と画素群階調値との階調差を算出すれば、画素群に生じた階調誤差を算出することができる。ここで、個数データが表す階調値は、ドットを１つ形成することで表現される階調値に基づいて、個数データから算出することができる。あるいは、予め算出しておいた階調値を個数データに対応付けて記憶しておいても良い。個数データが表す階調値を算出してやれば、これら階調値を個数データに対応付けて記憶しておく必要がないので、記憶容量を節約することができる。一方、個数データが表す階調値を予め記憶しておいた場合は、記憶されている階調値を読み出して直ちに画素群階調値との階調差を算出することができるので、速やかに階調誤差を求めることが可能となる。
【００３６】
これに対して、画素群の階調誤差は、個数データが表す階調値と画素群階調値とに基づいて算出するのではなく、次のようにして階調誤差生成テーブルを参照することによって取得することとしても良い。すなわち、画素群の分類番号および画素群階調値の組合せと、その画素群で生じる階調誤差とを対応付けて階調誤差生成テーブルに記憶しておく。そして、画素群の分類番号と画素群階調値とに基づいて、このテーブルを参照することにより、階調誤差を取得することとしても良い。
【００３７】
前述したように、画素群の分類番号および画素群階調値の組合せと、個数データとは、個数データ生成テーブルによって対応付けられている。また、個数データが決まれば、その個数データが表す階調値も自ずから決定される。ここで、個数データが表す階調値と画素群階調値との階調差を算出すれば階調誤差が得られることから、分類番号と画素群階調値とが決まれば、個数データを生成したことによって生じる階調誤差も決まってしまうことになる。このことから、画素群の分類番号および画素群階調値の組合せと階調誤差とを対応付けて、階調誤差生成テーブルに記憶しておくことが可能であり、こうすれば、かかる階調誤差生成テーブルを参照することで、階調誤差を速やかに求めることが可能となるので好ましい。
【００３８】
ここで、画素群の分類番号と画素群階調値の組合せ毎に、その画素群で生じる階調誤差とを対応付けたテーブルを、個数データ生成テーブルと一体のテーブルとして記憶しておき、個数データ生成テーブルを参照して個数データを取得する際に、階調誤差も同時に取得することとしても良い。
【００３９】
このように、個数データおよび階調誤差を同時に取得してやれば、テーブルを参照する回数を減少させることができるので、より速やかに個数データを生成することが可能となる。
【００４０】
また、上述した画像処理装置においては、画素群内に形成されるドット個数を表す個数データとして、表現する階調値が互いに異なる複数種類のドットについてのドット個数の組合せを表すデータを生成することとしてもよい。ここで、表現する階調値が互いに異なる複数種類のドットとは、例えば、ドットの大きさが異なる複数種類のドットとすることもできるし、あるいは、ドットの濃度が異なる複数種類のドットとすることもできる。更には、微細なドットを所定の密度で形成することで擬似的に１つのドットを形成している場合には、微細なドットの密度が異なった複数種類のドットとすることも可能である。
【００４１】
個数データ生成テーブルを参照することによって個数データを生成する場合、個数データが複数種類のドットについてのドット個数の組合せを示すデータであっても、単にドット個数を表すデータである場合と同様に、極めて容易に個数データを生成することができる。通常、画素毎にドット形成の有無を判断する場合は、ドットの種類が多くなると、それに連れて判断する処理もいきおい複雑なものとなりがちであるから、テーブルを参照して個数データを生成することで、ドットの種類が多くなるほど、相対的に迅速に生成することが可能となる。
【００４２】
ここで、制御データとして個数データを画像出力装置に出力するに際しては、各種ドットについてのドット個数の組合せに応じてコード化された状態で供給することとしても良い。尚、コード化は、個数データを生成した後に行うことも可能であるが、初めからコード化された状態で個数データを生成することも可能である。
【００４３】
制御データとして、各種ドットのドット個数の組合せに対応した個数データを供給する場合は、個数データをコード化することでデータ量を低減することができるので、より迅速に制御データを供給することが可能となって好ましい。
【００４４】
また、上述した画像処理装置においては、画像データから画素群階調値を決定する際に生じた丸め誤差を取得して、該取得した丸め誤差を、周辺の画素群に拡散することとしても良い。
【００４５】
画素群内の各画素の画像データから画素群階調値を算出すると、各画素群には丸め誤差が発生する。そこで、階調誤差と同様に、この丸め誤差も周辺の画素群に拡散して、周辺の画素群階調値を算出する際にこれを考慮してやれば、階調誤差と同時に丸め誤差も解消することができる。特に、高分解能画像データが入力されて画素群階調値の分解能が不足する場合には、画素群階調値を算出する際に生じる丸め誤差を拡散しておくことで、分解能の不足を補って、高画質な画像を得ることが可能となる。
【００４６】
更に本発明は、上述した画像出力方法あるいは画像処理方法を実現するためのプログラムをコンピュータに読み込ませ、コンピュータを用いて実現することも可能である。従って、本発明は次のようなプログラム、あるいは該プログラムを記録した記録媒体としての態様も含んでいる。すなわち、上述した画像出力方法に対応する本発明のプログラムは、
画像データに所定の画像処理を施して、得られた結果に基づいてドットを形成することにより画像を出力する方法を、コンピュータを用いて実現するためのプログラムであって、
互いに隣接する画素が複数個ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する第１の機能と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成する第２の機能と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する第３の機能と、
前記画素群内で各画素にドットが形成される画素の序列を特定し、前記画素群毎に供給された個数データと該特定した序列とに基づいて、該画素群内でドットが形成される画素位置を決定する第４の機能と、
前記決定した画素位置に基づいてドットを形成する第５の機能と
を実現することを要旨とする。
【００４７】
また、上記のプログラムに対応する本発明の記録媒体は、
画像データに所定の画像処理を施して、得られた結果に基づいてドットを形成することにより画像を出力するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
互いに隣接する画素が複数個ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する第１の機能と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成する第２の機能と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する第３の機能と、
前記画素群内で各画素にドットが形成される画素の序列を特定し、前記画素群毎に供給された個数データと該特定した序列とに基づいて、該画素群内でドットが形成される画素位置を決定する第４の機能と、
前記決定した画素位置に基づいてドットを形成する第５の機能と
をコンピュータを用いて実現するプログラムを記録していることを要旨とする。
【００４８】
また、これらプログラムあるいは記録媒体において、第２の機能は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に形成するドット個数を表す個数データとが対応付けられた個数データ生成テーブルを参照することにより、該各々の画素群についての個数データを生成する機能とすることができる。
【００４９】
上述した画像処理方法に対応する本発明のプログラムは、
ドットを形成して画像を出力する画像出力装置が該ドットの形成を制御するために用いる制御データを、該画像を表す画像データに所定の画像処理を加えて生成する方法を、コンピュータを用いて実現するためのプログラムであって、
互いに隣接する画素が所定個数ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する機能（Ａ）と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成した後、該個数データを前記制御データとして出力する機能（Ｂ）と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する機能（Ｃ）と
を実現することを要旨とする。
【００５０】
また、上記のプログラムに対応する本発明の記録媒体は、
ドットを形成して画像を出力する画像出力装置が該ドットの形成を制御するために用いる制御データを、該画像を表す画像データに所定の画像処理を加えて生成するプログラムを、コンピュータで読み取り可能に記録した記録媒体であって、
互いに隣接する画素が所定個数ずつまとめられた画素群毎に、該画素群を代表する階調値たる画素群階調値を決定する機能（Ａ）と、
前記画素群階調値と、前記画素群に形成するドット個数を表す個数データとの対応関係に基づいて、該各々の画素群についての個数データを生成した後、該個数データを前記制御データとして出力する機能（Ｂ）と、
前記個数データを生成したことに伴って該個数データが表す階調値と前記画素群階調値との間に生じた階調誤差を、該個数データが未だ生成されていない画素群に拡散する機能（Ｃ）と
をコンピュータを用いて実現するプログラムを記録していることを要旨とする。
【００５１】
また、これらプログラムあるいは記録媒体において、機能（Ｂ）は、前記画素群毎に付与された分類番号および該画素群の画素群階調値の組合せと、該画素群に形成するドット個数を表す個数データとが対応付けられた個数データ生成テーブルを参照することにより、該各々の画素群についての個数データを生成する機能とすることができる。
【００５２】
こうしたプログラム、あるいは記録媒体に記録されているプログラムをコンピュータに読み込ませ、該コンピュータを用いて上述の各種機能を実現させれば、画像処理およびデータ転送を迅速に行って、高画質な画像を迅速に出力することが可能となる。
【発明を実施するための最良の形態】
【００５３】
以下では、本発明の作用・効果をより明確に説明するために、本発明の実施の形態を、次のような順序に従って説明する。
Ａ．実施例の概要：
Ｂ．第１実施例：
Ｂ−１．装置構成：
Ｂ−２．第１実施例の画像印刷処理の概要：
Ｂ−３．個数データから画素位置を決定可能な原理：
Ｂ−４．第１実施例の個数データ生成処理：
Ｂ−４−１．分類番号の決定方法：
Ｂ−４−２．個数データ生成テーブル：
Ｂ−４−３．階調誤差の拡散方法：
Ｂ−５．第１実施例の画素位置決定処理：
Ｂ−６．変形例：
Ｂ−６−１．第１の変形例：
Ｂ−６−２．第２の変形例：
Ｃ．第２実施例：
Ｃ−１．第２実施例の画像印刷処理：
Ｃ−２．第２実施例の個数データ生成処理：
Ｃ−２−１．ディザ法を用いた大中小ドットの形成個数の決定処理：
Ｃ−２−２．大中小ドットの形成個数のコード化処理：
Ｃ−２−３．変換テーブルを利用した第２実施例の個数データ生成処理：
Ｃ−３．第２実施例の画素位置決定処理：
【００５４】
Ａ．実施例の概要  ：
実施例についての詳細な説明に入る前に、図１を参照しながら、各種実施例の概要について説明しておく。図１は、印刷システムを例にとって、実施例の概要を説明するための説明図である。図示した印刷システムは、画像処理装置としてのコンピュータ１０と、画像出力装置としてのプリンタ２０等から構成されており、コンピュータ１０に所定のプログラムがロードされて実行されると、コンピュータ１０およびプリンタ２０などが全体として、一体の画像出力システムとして機能する。プリンタ２０は、印刷媒体上にドットを形成することによって画像を印刷する。コンピュータ１０は、印刷しようとする画像の画像データに所定の画像処理を施すことによって、プリンタ２０が画素毎にドットの形成を制御するためのデータを生成して、該プリンタ２０に供給する。
【００５５】
一般的な印刷システムでは、次のようにして画像を印刷する。先ず、コンピュータで所定の画像処理を施すことにより、画像データを、画素毎にドット形成の有無を表すデータに変換する。次いで、得られたデータをプリンタに供給し、プリンタでは供給されたデータに従ってドットを形成することによって画像を印刷している。ここで、印刷しようとする画像の画素数が多くなると、それに伴って、画像処理に要する時間が増加して、画像を迅速に印刷することが困難となる。また、画素数が多くなるにつれて、画素毎にドット形成の有無を表すデータのデータ量が増加するので、コンピュータからプリンタにデータを出力するために要する時間が長くなり、それだけ印刷に要する時間が増加してしまう。
【００５６】
こうした点に鑑みて、図１に例示した印刷システムでは、次のようにして画像を印刷する。先ず、コンピュータ１０では、画像を構成する画素を互いに隣接した複数個ずつまとめて画素群とする。そして、各画素群について、画素群内に形成するドット個数を表す個数データを生成してプリンタ２０に供給する。プリンタ２０の画素位置決定モジュールは、各画素群についての個数データを受け取ると、画素群内の各画素についてドットを形成する序列を特定し、個数データと該序列とに基づいて、ドットを形成する画素位置を決定する。このとき、ドットを形成する画素の序列を予め記憶しておくこととすれば、画素位置を迅速に決定することができる。このようにして決定された画素位置に、ドット形成モジュールがドットを形成することによって画像が印刷される。
【００５７】
ここで、画素毎にドット形成の有無を表すデータに比べれば、画素群毎の個数データは遙かに小さなデータ量とすることができる。従って、コンピュータ１０から画素毎にドット形成の有無を表したデータをプリンタ２０に供給する代わりに、画素毎の個数データを供給してやれば、極めて迅速にデータを転送することが可能となる。
【００５８】
また、画素群の個数データは、コンピュータ１０内で次のようにして生成する。先ず、画素群階調値決定モジュールにおいて、画像から生成された複数の画素群について画素群階調値を決定する。画素群階調値とは、画素群を代表する階調値であり、該画素群内に含まれる各画素の画像データに基づいて決定することができる。そして、個数データ供給モジュールでは、画素群階調値と個数データとの対応関係に基づいて、画素群毎に個数データを決定した後、得られた個数データをプリンタ２０に供給する。誤差拡散モジュールは、個数データを決定したことによって各画素群に生じた階調誤差を、未だ個数データを決定していない未処理の画素群に拡散する。画素群階調値決定モジュールは、こうして周辺の画素群から拡散されてきた階調誤差を考慮しながら、各画素群についての画素群階調値を決定する。
【００５９】
画素群階調値と個数データとの対応関係に基づいて個数データを決定すれば、迅速に決定することができる。このため、図１に例示した印刷システムでは、個数データをプリンタ２０に迅速に供給可能なことと相まって、迅速に生成した個数データを、迅速にプリンタ２０に供給することができるので、画像を迅速に印刷することが可能となる。
【００６０】
尚、個数データを生成するに際しては、画素群に付与された分類番号および画素群階調値の組合せと、該組合せを有する画素群の個数データとが対応付けられたテーブル（個数データ生成テーブル）を予め記憶しておき、このテーブルを参照することによって個数データを生成することとしても良い。画素群階調値と分類番号との組合せ毎に、個数データを対応付けておけば、より適切な個数データを迅速に生成することができる。ここで画素群の分類番号は、各画素群を画像中での位置に応じて複数種類の分類することによって設定することもできるし、また、画像がいつも同じように分割される場合などには、各画素群に予め適切な分類番号を付与しておくこともできる。更に、簡便には、乱数などを用いてランダムに分類番号を付与することも可能である。
【００６１】
また、個数データは、対応関係に基づいて、あるいは個数データ生成テーブルを参照して生成することから、極めて簡素な処理で生成することが可能である。このため、個数データを生成するためにコンピュータ１０のような高度な処理能力を有する機器を用いずとも、プリンタ２０あるいはデジタルカメラなどの内部で個数データを生成することも可能となる。
【００６２】
加えて、各画素群で生じた誤差を、周辺の画素群に拡散して個数データの生成に反映させているので、画素群単位で発生する誤差を解消することができ、延いては高画質な画像を印刷することができる。更に、詳細には後述するが、個数データ生成テーブルを参照しながら個数データを生成した場合には、同じ画素群階調値を有する画素群に対しても異なる階調誤差が生じることとなる。このため、誤差を拡散させることでドットの発生に一定のパターンが生じてしまうことを確実に回避することができるので、常に安定した画質で画像を印刷することも可能となる。以下では、こうした印刷システムを例にとって、本発明の各種実施例について詳細に説明する。
【００６３】
Ｂ．第１実施例  ：
Ｂ−１．装置構成  ：
図２は、本実施例の画像処理装置としてのコンピュータ１００の構成を示す説明図である。コンピュータ１００は、ＣＰＵ１０２を中心に、ＲＯＭ１０４やＲＡＭ１０６などが、バス１１６で互いに接続して構成された周知のコンピュータである。
【００６４】
コンピュータ１００には、フレキシブルディスク１２４やコンパクトディスク１２６等のデータを読み込むためのディスクコントローラＤＤＣ１０９や、周辺機器とデータの授受を行うための周辺機器インターフェースＰＩＦ１０８、ＣＲＴ１１４を駆動するためのビデオインターフェースＶＩＦ１１２等が接続されている。ＰＩＦ１０８には、後述するカラープリンタ２００や、ハードディスク１１８等が接続されている。また、デジタルカメラ１２０やカラースキャナ１２２等をＰＩＦ１０８に接続すれば、デジタルカメラ１２０やカラースキャナ１２２で取り込んだ画像を印刷することも可能である。また、ネットワークインターフェースカードＮＩＣ１１０を装着すれば、コンピュータ１００を通信回線３００に接続して、通信回線に接続された記憶装置３１０に記憶されているデータを取得することもできる。
【００６５】
図３は、本実施例のカラープリンタ２００の概略構成を示す説明図である。カラープリンタ２００はシアン，マゼンタ，イエロ，ブラックの４色インクのドットを形成可能なインクジェットプリンタである。もちろん、これら４色のインクに加えて、染料または顔料濃度の低いシアン（淡シアン）インクと、染料または顔料濃度の低いマゼンタ（淡マゼンタ）インクとを含めた合計６色のインクドットを形成可能なインクジェットプリンタを用いることもできる。尚、以下では場合によって、シアンインク，マゼンタインク，イエロインク，ブラックインク，淡シアンインク，淡マゼンタインクのそれぞれを、Ｃインク，Ｍインク，Ｙインク，Ｋインク，ＬＣインク，ＬＭインクと略称することがあるものとする。
【００６６】
カラープリンタ２００は、図示するように、キャリッジ２４０に搭載された印字ヘッド２４１を駆動してインクの吐出およびドット形成を行う機構と、このキャリッジ２４０をキャリッジモータ２３０によってプラテン２３６の軸方向に往復動させる機構と、紙送りモータ２３５によって印刷用紙Ｐを搬送する機構と、ドットの形成やキャリッジ２４０の移動および印刷用紙の搬送を制御する制御回路２６０などから構成されている。
【００６７】
キャリッジ２４０には、Ｋインクを収納するインクカートリッジ２４２と、Ｃインク，Ｍインク，Ｙインクの各種インクを収納するインクカートリッジ２４３とが装着されている。インクカートリッジ２４２，２４３をキャリッジ２４０に装着すると、カートリッジ内の各インクは図示しない導入管を通じて、印字ヘッド２４１の下面に設けられた各色毎のインク吐出用ヘッド２４４ないし２４７に供給される。
【００６８】
図４は、インク吐出用ヘッド２４４ないし２４７におけるインクジェットノズルＮｚの配列を示す説明図である。図示するように、インク吐出用ヘッドの底面には、Ｃ，Ｍ，Ｙ，Ｋの各色のインクを吐出する４組のノズル列が形成されており、１組のノズル列あたり４８個のノズルＮｚが、一定のノズルピッチｋで配列されている。
【００６９】
制御回路２６０は、ＣＰＵや、ＲＯＭ、ＲＡＭ、ＰＩＦ（周辺機器インターフェース）等がバスで相互に接続されて構成されている。制御回路２６０は、キャリッジモータ２３０および紙送りモータ２３５の動作を制御することによってキャリッジ２４０の主走査動作および副走査動作を制御するとともに、コンピュータ１００から供給される制御データに基づいて、各ノズルから適切なタイミングでインク滴を吐出する制御を行う。こうして、制御回路２６０の制御の下、印刷媒体上の適切な位置に各色のインクドットを形成することによって、カラープリンタ２００はカラー画像を印刷することができる。
【００７０】
また、インク滴を吐出するためにノズルに供給される駆動信号波形を制御してやれば、吐出されるインク滴の大きさを変更して、大きさの異なるインクドットを形成することもできる。このようにしてインクドットの大きさを制御すれば、印刷しようとする画像の領域に応じて異なる大きさのインクドットを使い分けてやることで、より高画質の画像を印刷することも可能となる。
【００７１】
尚、各色のインク吐出ヘッドからインク滴を吐出する方法には、種々の方法を適用することができる。すなわち、ピエゾ素子を用いてインクを吐出する方式や、インク通路に配置したヒータでインク通路内に泡（バブル）を発生させてインク滴を吐出する方法などを用いることができる。また、インクを吐出する代わりに、熱転写などの現象を利用して印刷用紙上にインクドットを形成する方式や、静電気を利用して各色のトナー粉を印刷媒体上に付着させる方式のプリンタを使用することも可能である。
【００７２】
以上のようなハードウェア構成を有するカラープリンタ２００は、キャリッジモータ２３０を駆動することによって、各色のインク吐出用ヘッド２４４ないし２４７を印刷用紙Ｐに対して主走査方向に移動させ、また紙送りモータ２３５を駆動することによって、印刷用紙Ｐを副走査方向に移動させる。制御回路２６０は、キャリッジ２４０の主走査および副走査の動きに同期させながら、適切なタイミングでノズルを駆動してインク滴を吐出することによって、カラープリンタ２００は印刷用紙上にカラー画像を印刷している。
【００７３】
尚、カラープリンタ２００にも、制御回路２６０内にはＣＰＵ，ＲＡＭ，ＲＯＭなどが搭載されていることから、コンピュータ１００が行う処理をカラープリンタ２００内で実施することも可能である。このような場合は、デジタルカメラ１２０などで撮影した画像の画像データをカラープリンタ２００に直接供給して、制御回路２６０内で必要な画像処理を実施することにより、カラープリンタ２００から直接画像を印刷することも可能となる。
【００７４】
Ｂ−２．第１実施例の画像印刷処理の概要  ：
以下では、上記のようなコンピュータ１００およびカラープリンタ２００が、画像を印刷するために、それぞれの内部で行われる画像処理（画像印刷処理）について説明する。ここでは、理解の便宜を図るため、初めに画像印刷処理の全体像について簡単に説明し、次に、こうした画像印刷処理が可能である原理について説明する。そして最後に、それぞれの処理の詳細な内容について説明する。
【００７５】
尚、以下では、画像印刷処理の前半部分はコンピュータ１００で実施され、後半部分はカラープリンタ２００で実施されるものとして説明するが、コンピュータ１００が行う処理をカラープリンタ２００の内部で実施したり、あるいはデジタルカメラ１２０など、画像データを生成する機器の内部で実施することも可能である。すなわち、本実施例の画像印刷処理によれば、後ほど詳細に説明するように、前半部分の処理をたいへん簡素なものとすることができるので、高い処理能力を有していないＣＰＵを用いた場合でも迅速に実施することが可能である。
【００７６】
図５は、第１実施例の画像印刷処理の全体的な流れを示すフローチャートである。以下では、図５を参照しながら、画像印刷処理の全体像について簡単に説明する。第１実施例の画像印刷処理を開始すると、先ず初めに、コンピュータ１００が画像データの読み込みを開始する（ステップＳ１００）。ここでは、画像データはＲＧＢカラー画像データであるものとして説明するが、カラー画像データに限らず、モノクロ画像データについても同様に適用することができる。また、カラープリンタに限らず単色プリンタについても同様に適用することが可能である。
【００７７】
カラー画像データの読み込みに続いて、色変換処理を行う（ステップＳ１０２）。色変換処理とは、Ｒ，Ｇ，Ｂの階調値の組合せによって表現されているＲＧＢカラー画像データを、印刷のために使用されるインク各色についての階調値の組合せによって表現された画像データに変換する処理である。前述したように、カラープリンタ２００はＣ，Ｍ，Ｙ，Ｋの４色のインクを用いて画像を印刷している。そこで、第１実施例の色変換処理ではＲＧＢ各色によって表現された画像データを、Ｃ，Ｍ，Ｙ，Ｋの各色の階調値によって表現されたデータに変換する。色変換処理は、色変換テーブル（ＬＵＴ）と呼ばれる３次元の数表を参照することで行う。ＬＵＴには、ＲＧＢカラー画像データに対して、色変換によって得られるＣ，Ｍ，Ｙ，Ｋ各色の階調値が予め記憶されている。ステップＳ１０２の処理では、このＬＵＴを参照することにより、ＲＧＢカラー画像データをＣ，Ｍ，Ｙ，Ｋ各色の画像データに迅速に色変換することが可能となっている。
【００７８】
色変換処理を終了すると、解像度変換処理を開始する（ステップＳ１０４）。解像度変換処理とは、画像データの解像度を、プリンタ２００が画像を印刷する解像度（印刷解像度）に変換する処理である。画像データの解像度が印刷解像度よりも低い場合は、補間演算を行って画素間に新たな画像データを生成し、逆に画像データの解像度が印刷解像度よりも高い場合には、一定の割合でデータを間引くことによって、画像データの解像度を印刷解像度に一致させる処理を行う。
【００７９】
以上のようにして解像度を印刷解像度に変換したら、コンピュータ１００は、個数データ生成処理を開始する（ステップＳ１０６）。個数データ生成処理の詳細な内容は後ほど詳しく説明することとして、ここでは概要のみを説明する。個数データ生成処理では、隣接する画素を所定個数ずつ画素群としてまとめることにより、１つ画像を複数の画素群に分割する。そして、それぞれの画素群の中で形成すべきドットの個数を表すデータ、すなわち個数データを画素群毎に決定する。一般に、ある画素にドットが形成されるか否かは、その画素の画像データに依存して決まるから、画素群内に形成されるドットの個数を表す個数データについても、画素群についての画像データに基づいて決定することができる。次いで、各画素群について決定した個数データを、カラープリンタ２００に向かって出力する。また、画像データを個数データに変換することで、その画素群については何がしかの階調誤差が発生する。そこで、個数データ生成処理では、この階調誤差を周辺の画素群に拡散させておき、周辺の画素群についての処理を行う際には、拡散されてきた誤差が解消されるように考慮しながら個数データを生成する。個数データ生成処理では、このようにして、各画素についての画像データに基づいて個数データを画素群毎に生成した後、カラープリンタ２００に供給する処理を行う。個数データ生成処理の詳細については後述する。
【００８０】
カラープリンタ２００の制御回路２６０に内蔵されたＣＰＵは、コンピュータ１００から供給された個数データを受け取ると、画素位置決定処理を開始する（ステップＳ１０８）。詳細な処理内容については後述するが、画素位置決定処理では大まかには次のような処理を行う。上述したように、コンピュータ１００から供給される個数データは、画素群に形成すべきドットの個数を表すデータであり、その個数のドットを画素群内のいずれの画素に形成するかについては未確定な状態となっている。そこで、画像を印刷するに際しては、画素群内で実際にドットを形成する画素位置を、供給された個数データから確定しておく必要がある。画素位置決定処理では、画素群内の各画素についてドットの形成され易さを示す序列、換言すれば、画素群内の複数の画素の中でドットが形成される順序を示す画素の序列を記憶しておき、この序列を参照しながら、ドットを形成する画素位置を個数データに基づいて決定する処理を行う。画素位置決定処理の詳細についても後述する。
【００８１】
以上のようにして、ドットを形成すべき画素位置を決定したら、決定した画素位置にドットを形成する処理を行う（ステップＳ１１０）。すなわち、図３を用いて説明したように、キャリッジ２４０の主走査および副走査を繰り返しながらインク吐出用ヘッドを駆動してインク滴を吐出することにより、印刷用紙上にインクのドットを形成する。こうしてドットを形成することにより、画像データに対応した画像が印刷されることになる。
【００８２】
このように、第１実施例の画像印刷処理では、コンピュータ１００からカラープリンタ２００に向かって、画素群に形成すべきドット個数のデータのみを供給しており、画素群内でドットが形成される画素位置についてのデータまでは供給していない。画像を構成する画素毎にドット形成の有無を表現することに比べれば、複数の画素をまとめた画素群に形成するドットの個数は遙かに少ないデータ量で表現することができることから、このような方法を採用することで、コンピュータ１００からカラープリンタ２００に向かって極めて迅速にデータを供給することが可能となる。
【００８３】
例えば、１つの画素群に８つの画素がまとめられており、形成可能なドットは１種類であるとする。この場合、各画素はドットが形成されるか否かのいずれかの状態しか取り得ないから、画素あたり１ビットのデータ長となる。画素群に含まれる全画素について、ドットが形成される画素位置まで含めて表現しようとすると、８ビットのデータ長となる。一方、画素群内に形成されるドットの個数は、０個〜８個のいずれかの９通りしか取り得ない。９通りであれば４ビットあれば表現することができるから、画素群に形成するドットの個数は４ビットのデータ長で表現可能となる。このように、画素毎にドット形成の有無を表すデータに比べて、画素群内に形成されるドット個数は遙かに少ないデータ量で表現することができるので、コンピュータ１００からカラープリンタ２００に向かって極めて迅速にデータを供給することが可能となるのである。
【００８４】
加えて、詳細には後述するが、ドットを形成する画素位置を適切に決定してやれば、ドット個数のデータのみを供給した場合でも、画質が悪化することはない。また、画素群で生じた階調誤差を周辺の画素群に拡散しておき、周辺の画素群についての個数データを生成する際には、拡散されてきた誤差を解消するように個数データを生成しているので、誤差が速やかに解消される。このため、高画質の画像を得ることができる。更に、個数データは個数データ生成テーブルを参照することによって生成されることから、例え、同じ画素群階調値を有する画素群であっても、同じ個数データが生成されるわけではない。換言すれば、画素群に生じる誤差が常に複雑に変化することになる。このため、ドットが一定の繰り返しパターンで発生するおそれを確実に回避することが可能である。この点については、後ほど詳しく説明する。
【００８５】
その上、後述するアルゴリズムを用いれば、個数データを生成する処理は極めて簡素な処理によって実現することができ、しかも極めて迅速に実行することが可能である。このため、処理能力が比較的小さい画像処理装置を用いた場合でも、十分に実用的な速さで個数データを生成することが可能となる。
【００８６】
Ｂ−３．個数データから画素位置を決定可能な原理  ：
以下では、上述した方法を採用した場合、すなわち、コンピュータ１００からは画素群に形成するドット個数のデータを供給し、このドット個数のデータから実際にドットを形成する画素位置をカラープリンタ２００側で決定した場合でも、画質を悪化させることなく画像を印刷することが可能な原理について説明する。
【００８７】
説明の都合上、先ず初めに、ディザ法について説明する。ディザ法とは、画像データを画素毎にドット形成の有無を表すデータに変換するために用いられる代表的な手法である。この手法では、ディザマトリックスと呼ばれるマトリックスに閾値を設定しておき、画像データの階調値とディザマトリックスに設定されている閾値とを画素毎に比較して、画像データの階調値の方が大きい画素についてはドットを形成すると判断し、そうでない画素についてはドットを形成しないと判断する。このような判断を画像中の全画素について行えば、画像データを画素毎にドット形成の有無を表すデータに変換することができる。
【００８８】
図６は、ディザマトリックスの一部を概念的に例示した説明図である。図示したマトリックスには、横方向（主走査方向）に１２８画素、縦方向（副走査方向）に６４画素、合計８１９２個の画素に、階調値１〜２５５の範囲から万遍なく選択された閾値がランダムに記憶されている。ここで、閾値の階調値が１〜２５５の範囲から選択されているのは、本実施例では、画像データが階調値０〜２５５の値を取り得る１バイトデータとしていることに加えて、画像データの階調値と閾値とが等しい場合には、その画素にはドットを形成するものと判断していることによるものである。
【００８９】
すなわち、ドットが形成されるのは画像データの階調値が閾値よりも大きい画素に限る（すなわち階調値と閾値が等しい画素にはドットは形成しない）とした場合、画像データの取り得る最大階調値と同じ値の閾値を有する画素には、決してドットが形成されることはない。このようにドットが形成されることのない画素が生じないようにするためには、画像データの階調値が閾値より大きい画素にだけドットを形成するとした場合は、閾値の取り得る範囲を、画像データの取り得る範囲から最大階調値を除いた範囲としておけばよい。逆に、画像データの階調値と閾値が等しい画素にもドットを形成するとした場合、画像データの取り得る最小階調値と閾値の値が同じ画素には、常にドットが形成されてしまうことになる。このように常にドットが形成されてしまう画素が生じないようにするためには、画像データの階調値が閾値と同じ画素にもドットを形成するとした場合は、閾値の取り得る範囲を、画像データの取り得る範囲から最小階調値を除いた範囲としておけばよい。本実施例では、画像データの取り得る階調値が０〜２５５であり、画像データと閾値が等しい画素にはドットを形成するとしていることから、閾値の取り得る範囲を１〜２５５としておくのである。尚、ディザマトリックスの大きさは、図６に例示したような大きさに限られるものではなく、縦と横の画素数が同じマトリックスも含めて種々の大きさとすることができる。
【００９０】
図７は、ディザマトリックスを参照しながら、各画素についてのドット形成の有無を判断している様子を概念的に示した説明図である。ドット形成の有無を判断するに際しては、先ず、判断しようとする画素を選択し、この画素についての画像データの階調値と、ディザマトリックス中で対応する位置に記憶されている閾値と比較する。図７中に示した細い破線の矢印は、画像データの階調値と、ディザマトリックスに記憶されている閾値とを、画素毎に比較していることを模式的に表したものである。例えば、画像データの左上隅の画素については、画像データの階調値は９７であり、ディザマトリックスの閾値は１であるから、この画素にはドットを形成すると判断する。図７中に実線で示した矢印は、この画素にはドットを形成すると判断して、判断結果をメモリに書き込んでいる様子を模式的に表したものである。一方、この画素の右隣の画素については、画像データの階調値は９７、ディザマトリックスの閾値は１７７であり、閾値の方が大きいので、この画素についてはドットを形成しないと判断する。ディザ法では、こうしてディザマトリックスを参照しながら、画素毎にドットを形成するか否かを判断することで、画像データを画素毎にドット形成の有無を表すデータに変換する。
【００９１】
図８は、ディザ法を用いて画像データをドット形成の有無を表すデータに変換している様子を示した説明図である。図８（ａ）は、画像データの一部を拡大して示したものであり、図中の小さな矩形は画素を、そして、それぞれの矩形の中に表示された数値は画像データの階調値を表している。図示されているように、画像データは、隣接する画素間では近似する（若しくは同一の）階調値が割り当てられる傾向がある。高画質化の要請から近年では画像データの解像度は高くなる傾向にあるが、隣接する画素間で近似若しくは同一の階調値が割り当てられる傾向は、画像データの解像度が高くなるほど顕著となっている。
【００９２】
図８（ｂ）は、ディザマトリックスの対応する位置に閾値が設定されている様子を示している。図８（ａ）に示した画像データの階調値と、図８（ｂ）に示したディザマトリックスの閾値とを画素毎に比較することによって、ドット形成の有無を判断する。図８（ｃ）は、こうして画素毎にドット形成の有無を判断した結果を示しており、図中で斜線を付した画素がドットを形成すると判断された画素である。
【００９３】
ここで、隣接する画素を所定数ずつ画素群としてまとめ、画素群内でドットを形成すると判断された画素の個数を数えることを考える。一例として、主走査方向（図８中では横方向）に４画素分、副走査方向（図８中では縦方向）に２画素分の、合計８画素ずつを画素群としてまとめるものとする。図８（ｄ）は、こうしてまとめられたそれぞれの画素群について、ドットを形成すると判断された画素を数えることによって得られたドット個数を示している。第１実施例の画像印刷処理において、コンピュータ１００からカラープリンタ２００に供給されるのは、このような画素群毎の個数を示すデータである。個数データには、ドットを形成する画素位置に関する情報は含まれていないが、次のようにすれば、個数データからドットを形成する画素位置の情報を復元して、画素毎にドット形成の有無を表すデータを生成することができる。
【００９４】
図９は、個数のデータから、画素毎にドット形成の有無を表すデータを生成する様子を示した説明図である。図９（ａ）は、図８で画素群毎に形成するドットの個数を数えて得られた値を表している。また、図９（ｂ）は、図８で画素毎にドット形成の有無を判断するために参照したディザマトリックスを示している。前述したようにディザ法では、画像データの階調値と、ディザマトリックスの対応する画素位置に設定された閾値とを比較して、画像データの階調値の方が大きければ、その画素にはドットを形成すると判断しており、ディザマトリックスの閾値が小さくなるほどドットが形成され易くなる。このことから、ディザマトリックスはドットが形成される画素の序列を表していると考えることができる。
【００９５】
ディザマトリックスの有するこうした性質に着目すれば、画素群内に形成されるドットの個数から、ドットが形成される画素位置を決定することができる。例えば、図９（ａ）に示した一番左上隅の画素群について説明すると、この画素群に形成されるドット個数は３である。また、図９（ｂ）に示したディザマトリックスを参照すれば、この画素群内では、左上隅にある画素位置すなわち閾値「１」が設定されている画素位置が最もドットが形成され易い画素であると言える。従って、この画素群内で３つ形成されるドットの中の１つは、左上隅の画素に形成されているものと考えることができる。同様にして、残りの２つのドットは、この画素群内で２番目にドットが形成され易い画素（すなわち図９（ｂ）のディザマトリックスで閾値「４２」が設定されている画素）と、３番目にドットが形成され易い画素（すなわち閾値「５８」が設定されている画素）とに形成されるものと考えることができる。
【００９６】
もちろん、ドット形成の有無は、ディザマトリックスに設定された閾値だけでなく、画像データの階調値によっても影響されるから、画像データの階調値が極端に大きければ、より小さな閾値が設定されている画素よりも先にドットが形成されることも起こり得る。しかし、前述したように画像データには、隣接する画素には近似する（若しくは同一の）階調値が割り当てられる傾向があるから、ほとんどの場合はドットが形成され易い画素（すなわちディザマトリックスに設定された閾値の小さな画素）からドットが形成されると考えることができる。
【００９７】
図９（ａ）に示した他の画素群についても、同様にして、ドット個数とディザマトリックスの閾値とに基づいて、ドットを形成する画素位置を決定することができる。例えば、図９（ａ）の上述した画素群の下にある画素群（左端上から２番目の画素群）については、ドット個数は３個であるから、図９（ｂ）のディザマトリックスを参照すれば、これら３つのドットは、閾値「２２」が設定された画素と、閾値「３３」が設定された画素と、閾値「９１」が設定された画素とに、それぞれ形成されると考えることができる。
【００９８】
図９（ａ）に示した４つの画素群について、このようにして個数データからドットを形成する画素位置を決定すると、図９（ｃ）に示した結果を得ることができる。図９（ｃ）中で、斜線を付して示した画素はドットを形成すると判断された画素である。図９（ｃ）と図８（ｃ）とを比較すれば明らかなように、個数データから決定した画素位置は、画素毎に決定した画素位置と一致している。このことは、ディザマトリックスを参照して画素毎にドット形成の有無を判断し、画素群内に形成されるドットの個数のみを記憶しておけば、画素位置までは記憶していなくても、ディザマトリックスとドット個数とから、ドットが形成される画素位置を適切に決定可能なことを示している。本実施例の画像印刷処理では、このような原理に基づいて個数データからドットを形成する画素位置を決定して画像を印刷する。すなわち、コンピュータ１００から画素群毎に個数データを生成し、カラープリンタ２００側で個数データからドットを形成する画素位置を適切に決定することで、高画質な画像の印刷を可能としている。
【００９９】
また、個数データからドットを形成する画素位置を適切に決定するためには、画像データの階調値が画素群内で大きく異なっていなければ良い。前述したように、画像データは隣接する画素間では近似した階調値を有する特性があるから、こうした条件はほとんどの場合に成立するので、個数データのみをカラープリンタ２００に供給した場合でも、画質を悪化させることなく画像を印刷することができる。加えて、後述するように、本実施例の個数データ生成処理では、個数データを生成することによって生じた階調誤差を周辺の画素群に拡散しておき、周辺の画素群で個数データを生成するに際しては、拡散されてきた誤差が解消されるように個数データを生成する。このため、画素群で生じた誤差を速やかに解消することが可能となり、印刷画質を大きく改善することが可能となっている。
【０１００】
尚、図７で説明したディザ法においては、ディザマトリックスに設定された閾値と画像データとの階調値とを比較して、いずれの値が大きいかによってドット形成の有無を判断している。これに対して、個数データから画素群内でドットが形成される画素位置を決定する場合には、図９を用いて説明したように、ドットが形成される画素位置を、ディザマトリックスに設定された閾値の小さな画素から順番に決定している。すなわち、画素位置を決定するためには、閾値の値まで必要なわけではなく、画素群内でドットが形成され易い順番が分かっていれば良い。このことから、図９（ｂ）に示すディザマトリックスの代わりに、図９（ｄ）に示すような画素群内の各画素について、ドットが形成される順序を示す値（順序値）が設定されたマトリックス（本明細書中では、このようなマトリックスを序列マトリックスと呼ぶものとする）を記憶しておき、画素群毎に序列マトリックスを参照しながら、個数データから画素位置を決定することも可能である。
【０１０１】
Ｂ−４．第１実施例の個数データ生成処理  ：
以下では、図５に示した第１実施例の画像印刷処理において、画像データから個数データを生成する処理（ステップＳ１０６）について説明する。図１０は、第１実施例の個数データ生成処理の流れを示すフローチャートである。ここでは、個数データ生成処理はコンピュータ１００で実施されるものとして説明するが、後述するように、個数データ生成処理は極めて簡素な処理とすることができるから、カラープリンタ２００あるいはデジタルカメラ１２０内で実施することも可能である。以下、フローチャートに従って説明する。
【０１０２】
第１実施例の個数データ生成処理を開始すると、先ず初めに、互いに隣接する所定個数の画素をまとめて画素群を生成する（ステップＳ２００）。ここでは、主走査方向に４画素分、副走査方向に２画素分の合計８つの画素を画素群にまとめるものとする。尚、画素群としてまとめる画素は、このように矩形状に縦横の位置が揃った画素である必要はなく、互いに隣接し且つ所定の位置関係にあればどのような画素を画素群としてまとめても良い。
【０１０３】
次いで、画素群の分類番号を決定する（ステップＳ２０２）。詳細には後述するが、画素群は、画像中で存在する位置に応じて複数種類に分類され、分類番号が付与される。この分類番号は、後述する方法を用いれば、極めて簡便に決定することができる。
【０１０４】
続いて、その画素群に拡散されている拡散誤差ＥＲdfを読み出す（ステップＳ２０４）。拡散誤差ＥＲdfとは、周辺の画素群で個数データを生成することで生じた階調誤差ＥＲが拡散されて蓄積されている誤差である。個数データを生成することで生じる階調誤差ＥＲの内容、および階調誤差ＥＲを拡散させる処理については後述する。
【０１０５】
処理中の画素群に拡散されている拡散誤差ＥＲdfを読み出したら、今度は、その画素群の画素群階調値ＤＴrpを算出する（ステップＳ２０６）。画素群階調値ＤＴdfとは、画素群を代表する階調値であって、画素群としてまとめられた各画素の画像データＤＴpxと、その画素群の拡散誤差ＥＲdfとから、次のようにして算出される階調値である。
【０１０６】
図１１は、画素群階調値ＤＴrpの算出方法を示した説明図である。図中で、ＤＴpxは画素群を構成する画素の画像データを示している。図１１に示すように、画素群を構成する各画素の画像データＤＴpx(i) （ｉ＝１〜ｎ、ここでｎは、画素群を構成する画素の個数）の合計値を、画素の個数ｎで除算することで平均値を算出し、得られた平均値に、後述する拡散誤差ＥＲdfを加算して、得られた値を画素群階調値ＤＴrpとすることができる。また、本実施例のように画素群が８つの画素で構成されている場合は、各画素の画像データの総和を求めて、得られた２進数データを３ビット分だけ右方向にシフトさせれば、画素群内の各画素についての画像データの平均値を得ることができる。２進数データを３ビット分だけ右方向にシフトさせることは、８で除算することに相当している。こうして得られた平均値に拡散誤差ＥＲdfを加算して、画素群階調値ＤＴrpを求めてもよい。図１０のステップＳ２０６では、以上のようにして、画素群についての画素群階調値ＤＴrpを算出する。
【０１０７】
次いで、ステップＳ２０２およびステップＳ２０６でそれぞれ求めた分類番号および画素群階調値に基づいて、後述する個数データ生成テーブルを参照することによって、その画素群についての個数データを決定する（ステップＳ２０８）。詳細には後述するが、個数データ生成テーブルには、画素群の分類番号と画素群階調値ＤＴrpとの組合せに対応付けて、適切な個数データが予め記憶されている。従って、画素群の分類番号と画素群階調値とを決定すれば、個数データ生成テーブルを参照することで直ちに個数データを求めることが可能である。この点についても、後ほど詳しく説明する。
【０１０８】
以上のようにして、１つの画素群について個数データを決定したら、その画素群で生じた階調誤差ＥＲを求めて、周辺の画素群に拡散する処理を行う（ステップＳ２１０）。画素群で生じる階調誤差ＥＲの内容については後ほど詳しく説明するが、ここでは、画素群階調値ＤＴrpを個数データに変換することに伴って、その画素群に生じる変換誤差であると考えておく。ステップＳ２１０では、画素群で生じた階調誤差ＥＲを算出して、その画素群の周辺にあって未だ個数データを生成していない画素群に、階調誤差ＥＲを拡散する処理を行う。階調誤差ＥＲの算出方法および拡散方法については、階調誤差ＥＲの説明と併せて後ほど詳しく説明する。
【０１０９】
こうして、１つの画素群について個数データを生成し、それに伴って生じた階調誤差ＥＲを拡散したら、こうした処理を画像中の全画素について行ったか否かを判断する（ステップＳ２１２）。そして、未処理の画素が残っている場合は（ステップＳ２１２：ｎｏ）、ステップＳ２００に戻って新たな画素群を生成し、続く一連の処理を繰り返す。こうした操作を繰り返し、全画素についての処理が終了したと判断されたら（ステップＳ２１２：ｙｅｓ）、各画素群について得られた個数データをカラープリンタ２００に出力して（ステップＳ２１４）、図１０に示す第１実施例の個数データ生成処理を終了する。
【０１１０】
以下では、画素群の分類番号を決定する方法（図１０のステップＳ２０２の処理内容）について説明し、次いで、分類番号および画素群階調値から個数データを生成する方法（図１０のステップＳ２０８の処理内容）について説明する。そして最後に、個数データを生成することで生じる階調誤差ＥＲの求め方および階調誤差を拡散させる方法（図１０のステップＳ２１０の処理内容）について説明する。
【０１１１】
Ｂ−４−１．分類番号の決定方法  ：
先ず初めに、上述の個数データ生成処理中で、画素群の分類番号を決定する方法について説明する。理解の便宜から、以下では、画素群に分類番号を付与する考え方を説明し、それを踏まえて、分類番号を付与する具体的な方法について説明する。
【０１１２】
図１２は、画素群毎の分類番号を決定するための考え方を示した説明図である。図１２（ａ）は、画像の一番左上隅の箇所において、横方向に４画素、縦方向に２画素の合計８画素をまとめることによって画素群を１つ生成した様子を概念的に示したものである。
【０１１３】
図６および図７を用いて前述したように、ディザ法では画素に割り当てられた画像データの階調値と、ディザマトリックスの対応する位置に設定されている閾値とを比較して、画素毎にドット形成の有無を判断している。一方、本実施例では、隣接する所定数の画素を画素群としてまとめているから、ディザマトリックスに設定されている閾値についても、画素群に対応する所定数ずつまとめてブロックを生成することにする。図１２（ｂ）は、図６に示したディザマトリックスに設定されている閾値を、横方向に４つ、縦方向に２つずつまとめて複数のブロックを生成した様子を示している。図６に示したディザマトリックスは、横方向（主走査方向）に１２８画素分、縦方向（副走査方向）に６４画素分の合計８１９２画素分の閾値が設定されているから、これら閾値を横方向に４つ、縦方向に２つずつブロックにまとめれば、ディザマトリックスは縦横それぞれ３２個ずつ、合計１０２４個のブロックに分割されることになる。
【０１１４】
今、図１２（ｂ）に示すように、これらブロックに１番〜１０２４番までの通し番号を付しておく。そして、画像データにディザマトリックスを適用した時に、各画素群の位置に適用されるブロックの通し番号によって、画素群を分類してやる。例えば、図１２（ｃ）に示したように、画像の一番左上隅にある画素群には、図１２（ｂ）中の通し番号１番のブロックが適用されるから、この画素群は分類番号１番の画素群に分類するのである。
【０１１５】
以上が、画素群を分類する際の基本的な考え方である。図１０のステップＳ２０２では、このように、画像データにディザマトリックスを適用したときに、画素群に適用されるブロックの通し番号によって各画素群を分類し、対応する分類番号を決定して画素群に付与する処理を行う。
【０１１６】
次に、画素群の分類番号を決定するための具体的な方法について説明する。図１３は、画素群の分類番号を決定する方法を示した説明図である。図１３（ａ）は、画像中で生成された１つの画素群を表している。ここでは、この画素群に着目して分類番号を決定する方法について説明する。尚、以下では、分類番号を決定するために着目している画素群を、着目画素群と呼ぶことにする。
【０１１７】
今、画像の一番左上隅にある画素を原点に取って、原点からの主走査方向および副走査方向への画素数によって画素位置を表すものとする。また、画素群の位置は、画素群の左上隅にある画素の画素位置によって表すものとする。図１３（ａ）では、着目画素群の位置を示す画素に黒丸を付して表示している。この画素の画素位置が（Ｘ，Ｙ）であったとする。すると、各画素群の大きさは、主走査方向に４画素、副走査方向に２画素としているから、
Ｘ＝４ｎ＋１、  Ｙ＝２ｍ＋１
となるようなｎ、ｍ（ここで、ｎ，ｍは０以上の正整数）が存在する。換言すれば、着目画素群の左側にはｎ個の画素群が並んでおり、着目画素群の上側にはｍ個の画素群が並んでいることになる。
【０１１８】
ここで、前述したように画素群は、画像データにディザマトリックスを適用したときに、着目画素群に適用されるブロックの通し番号に基づいて分類することとしているから（図１２参照のこと）、ディザマトリックスを移動させながら画像データに適用する方法によって、同じ画素群でも異なった分類番号に分類されることになる。実際には、ディザマトリックスを移動させながら画像データに適用する方法はどのような方法でも構わないが、ここでは説明の便宜から、最も単純な方法すなわちディザマトリックスを横方向に移動させるものとして説明する。図１３（ｂ）には、ディザマトリックスを横方向に少しずつ移動させながら、繰り返し画像データに適用している様子が概念的に示されている。
【０１１９】
図１３（ｃ）は、図１３（ｂ）に示すようにディザマトリックスを繰り返して用いながら、図１３（ａ）に示した着目画素群にディザマトリックスを適用している様子を概念的に表している。このようにディザマトリックスを移動させていくと、ディザマトリックス中のいずれかのブロックが、着目画素群に適用されることになる。ここでは、着目画素群には、ディザマトリックス中でＭ行Ｎ列目のブロックが適用されたものとする。すると、図１３（ａ）に示したように着目画素群の左側にはｎ個の画素群があり、上側にはｍ個の画素群があるから、Ｎとｎ、およびＭとｍとの間には、それぞれ
Ｎ＝ｎ  −  ｉｎｔ（ｎ／３２）×３２  ＋  １
Ｍ＝ｍ  −  ｉｎｔ（ｍ／３２）×３２  ＋  １
の関係が成り立っている。ここで、ｉｎｔは、小数点以下を切り捨てて整数化することを表す演算子である。すなわち、ｉｎｔ（ｎ／３２）は、ｎ／３２の計算結果に対して小数点以下の数値を切り捨てることによって得られた整数値を表している。このように、着目画素群の位置が分かれば、図１３（ｄ）に表示した上述の関係式から数値ＭおよびＮを求めて、ディザマトリックス中でＭ行Ｎ列目にあるブロックのブロック番号を、その着目画素群の分類番号としてやればよい。もっとも実際には、Ｍ，Ｎの値は、図１３（ｄ）に示すような計算を実行せずとも、極めて簡便に求めることができる。以下、この点について説明する。
【０１２０】
図１４は、着目画素群の分類番号を決定する方法を具体的に示した説明図である。着目画素群の位置を（Ｘ，Ｙ）として、Ｘ，Ｙが１０ビットで表現されているものとする。図１４（ａ）は、数値Ｘを表す１０ビットの２進数データを概念的に示している。図では、各ビットを識別するために、最上位ビットから最下位ビットに向かって１番から１０番までの通し番号を付して表示している。
【０１２１】
図１３を用いて前述したように、着目画素群の左側にある画素群の個数ｎは、数値Ｘから１を減算して４で除算すれば得ることができる。ここで、４での除算は、２ビット分だけ右方向にシフトさせることで実施することができるから、数値Ｘから１を減算して、得られた２進数データを右方向に２ビット分だけビットシフトさせればよい。更に、数値Ｘは任意の値を取るのではなく、４ｎ＋１の形式で表現可能な数値しか取り得ないから、１を減算せずに、単に２進数データを右方向に２ビット分だけビットシフトさせるだけで、画素群の個数ｎを得ることができる。図１４（ｂ）は、こうして数値Ｘをビットシフトして得られた個数ｎの２進数データを概念的に表している。
【０１２２】
次いで、ｉｎｔ（ｎ／３２）を算出する。すなわち、個数ｎを３２で除算して、小数点以下の数値を切り捨てる操作を行う。３２による除算は、２進数データを右方向に５ビット分だけビットシフトさせることで実行可能であり、また、データを整数形式で扱っていれば、小数点以下の数値は自動的に切り捨てられてしまう。結局、ｉｎｔ（ｎ／３２）の２進数データは、個数ｎの２進数データを、単に右方向に５ビット分だけビットシフトさせることで得ることができる。図１４（ｃ）は、個数ｎをビットシフトして得られたｉｎｔ（ｎ／３２）の２進数データを概念的に表している。
【０１２３】
こうして得られたｉｎｔ（ｎ／３２）に３２を乗算する。３２による乗算は、２進数データを５ビット分だけ左方向にビットシフトすることで実施することができる。図１４（ｄ）は、個数ｎをビットシフトして得られたｉｎｔ（ｎ／３２）×３２の２進数データを概念的に表している。
【０１２４】
次いで、個数ｎからｉｎｔ（ｎ／３２）×３２を減算すれば、前述の数値Ｎを得ることができる。個数ｎの２進数データ（図１４（ｂ）参照）とｉｎｔ（ｎ／３２）×３２の２進数データ（図１４（ｄ）参照）とを比較すれば明らかなように、これら２進数データは、上位の５ビットは共通しており、減算する側の数値の下位５ビットは全て「０」となっている。従って、減算される側の数値（個数ｎ）の下位５ビットをそのまま抜き出せば、求める数値Ｍを得ることができる。すなわち、図１４（ｂ）に示した２進数データに対して、図１４（ｆ）に示すようなマスクデータを作用させるだけで、極めて簡便に数値Ｎを得ることが可能である。あるいは、図１４（ａ）に示した着目画素群の位置を示す数値Ｘの２進数データに、図１４（ｇ）のようなマスクデータを作用させて、４番目〜８番目のビットデータを直接抜き出すことによっても、数値Ｎを得ることができる。
【０１２５】
図１４では、着目画素群の位置を示す座標値（Ｘ，Ｙ）の数値Ｘから、ディザマトリックス中でのブロック位置を示す数値Ｎを求める場合について説明したが、全く同様にして、ブロック位置を示す数値Ｍも数値Ｙから求めることができる。結局、着目画素群の位置が分かれば、２進数データから特定のビット位置のデータを抜き出すだけで、着目画素群がディザマトリックス中で何行何列目のブロックに対応するかを知ることができ、このブロックの通し番号によって、着目画素群の分類番号を迅速に決定することが可能なのである。
【０１２６】
Ｂ−４−２．個数データ生成テーブル  ：
次いで、第１実施例の個数データ生成処理中で、画素群の分類番号と画素群階調値ＤＴrpとから、個数データ生成テーブルを参照することによって個数データを取得する処理（図１０のステップＳ２０８）について説明する。
【０１２７】
図１５は、画素群の分類番号と画素群階調値ＤＴrpとから個数データを取得するために参照される個数データ生成テーブルを概念的に示した説明図である。図示されているように、個数データ生成テーブルには、画素群の分類番号と画素群階調値との組合せに対応付けて、適切な個数データが予め記憶されている。図１２を用いて前述したように、ここでは画素群は分類番号１番〜１０２４番のいずれかに分類され、また、画素群階調値は１バイトデータであるとすれば、０〜２５５のいずれかの階調値を取り得るから、分類番号と画素群階調値との組合せは、１０２４×２５６＝２６２１４４の組合せが存在する。個数データ生成テーブルには、この全ての組合せに対して個数データが設定されており、この個数データは次のようにして決定されている。
【０１２８】
図１６は、画素群の分類番号と画素群階調値ＤＴrpとの組合せに応じて、適切な個数データを決定する様子を概念的に示した説明図である。一例として、画素群の分類番号が１番であるとする。分類番号１番の画素群には、ディザマトリックス中で通し番号１番のブロックが適用される。図１６（ａ）には、通し番号１番のブロックに設定されている閾値が示されている。
【０１２９】
今、画素群階調値が０であるとする。画素群階調値とは画素群を代表する階調値であるから、画素群中の全画素が階調値０の画像データを有するものと考える。そして、各画素の階調値（すなわち「０」）と図１６（ａ）に示した閾値とを比較し、階調値の方が大きい（若しくは同じ）画素については、ドットを形成するものと判断する。画素群の全画素についてこうした判断を行った後、ドットの個数を数えて、得られた値を個数データとする。図１６（ａ）に示したいずれの閾値も、階調値０よりは大きいから、ドットを形成すると判断される画素は存在しない。そこで、分類番号が１番で画素群階調値が０の組合せについては、個数データ０を設定する。図１６（ｂ）は、画素群階調値が０の場合の個数データを決定している様子を概念的に表している。この場合は、画素群内のいずれの画素にもドットは形成されず、従って、個数データは０となる。
【０１３０】
図１６（ｃ）は、画素群階調値が１の場合に個数データを決定する様子を概念的に示している。この場合は、画素群内の全画素が階調値１の画像データを有するものとして、各画素の階調値を図１６（ａ）に示した閾値と比較する。その結果、画素群内で左上隅にある画素では、画像データの階調値と閾値とが等しくなってドットを形成すると判断され、他の画素についてはドットを形成しないと判断される。図１６（ｃ）に表示された斜線の付された丸印は、その画素にドットを形成すると判断されたことを表している。この結果、分類番号が１番で画素群階調値が１の組合せについては、個数データ１が設定される。
【０１３１】
こうした操作を、０〜２５５までの全ての画素群階調値について行うことにより、個数データを決定していく。例えば、画素群階調値が２の場合は、図１６（ｄ）に示したように、個数データは１となり、画素群階調値が１００の場合は、図１６（ｅ）に示すように個数データは３となる。図１６（ｆ）および図１６（ｇ）には、画素群階調値が２００の場合および画素群階調値が２５５の場合に、それぞれの個数データを決定する様子が概念的に示されている。図１５中で、分類番号１に該当する行（表中に示された横方向の欄）の部分に、各画素群階調値に対応付けて設定されている個数データは、このようにして決定された個数データである。こうした操作を、１番〜１０２４番までの全ての分類番号について行えば、最終的に、全ての分類番号と全ての画素群階調値とのあらゆる組合せに対応する個数データを決定することができる。図１５に示した個数データ生成テーブルには、分類番号と画素群階調値ＤＴrpとの組合せに応じて、対応する個数データが予め設定されている。そして、図１０に示したステップＳ２０８では、この個数データ生成テーブルを参照することによって、画素群階調値ＤＴrpを個数データに迅速に変換することが可能である。
【０１３２】
Ｂ−４−３．階調誤差の拡散方法  ：
以上のようにして、画素群階調値ＤＴrpを個数データに変換することに伴い、その画素群では階調誤差ＥＲが生じる。上述した個数データ生成処理では、この階調誤差ＥＲを周辺の画素群に拡散しておき（図１０のステップＳ２１０）、これら画素群では、周辺の画素群から拡散されてきた誤差（拡散誤差ＥＲdf）を考慮しながら画素群階調値ＤＴrpを算出する。以下では、画素群階調値ＤＴrpを個数データに変換することで生じる階調誤差ＥＲの意味するところと、その算出方法、更に階調誤差ＥＲを拡散する方法について説明する。
【０１３３】
図１５および図１６を用いて前述したように、画素群階調値ＤＴrpが最小値（階調値：０）の場合は個数データも「０」となり、画素群階調値ＤＴrpが最大値（階調値：２５５）の場合は個数データは「８」となる。その間の範囲では、画素群階調値が大きくなるに従って、個数データも大きな値となる。ここで、本実施例では画素群は８つの画素で構成されるものとしているから、個数データは０〜８の９階調しか取り得ない。これに対して、画素群階調値が１バイトデータであるとすると、画素群階調値は０〜２５５の２５６階調を取り得る。すなわち、２５６階調を有する画素群階調値を９階調の個数データに変換することになるから、何がしかの変換誤差が発生する。
【０１３４】
また、画素群が表現する階調値は、ドットが全く形成されない状態（個数データ「０」に相当）から、全ての画素にドットが形成された状態（個数データ「８」に相当）まで８段階で増加し得る。そこで、個数データ「０」の状態の画素群が表現する階調値を「０」として、ドットが１つ増える毎に表現する階調値が「３２」ずつ増加し、全画素にドットが形成された状態の画素群は階調値２５５を表現しているものとする。すると、画素群階調値ＤＴrpに対して、その画素群に表現される階調値（表現階調値）との間には誤差が発生することになる。階調誤差ＥＲとは、画素群階調値ＤＴrpを個数データに変換することに伴って発生するこのような誤差であり、画素群階調値から表現階調値を減算することによって求めることができる。すなわち、階調誤差ＥＲは、
ＥＲ  ＝  ＤＴrp  −  （ドット個数）×（ドット１つあたりの表現階調値）
によって算出することが可能である。
【０１３５】
図１７は、画素群階調値が増加するに従って画素群に表現される階調値（表現階調値）が段階的に増加し、それに伴って階調誤差ＥＲが発生する様子を概念的に示した説明図である。ここで、ある画素群階調値が与えられたときに何個のドットが発生するか、すなわち、画素群階調値に対する個数データは、ディザマトリックスの対応するブロックに設定された閾値によって異なってくる。そこで、図１７では、図８（ｂ）中に示した４つのブロックを例に用いて、対応する画素群で生じる階調誤差ＥＲを表示している。
【０１３６】
図１７（ａ）は、図８（ｂ）に示した４つのブロックの中の左上隅にあるブロック（図１２（ｂ）の通し番号によれば１番のブロック）を用いて、画素群階調値を０〜２５５まで増加させたときに、その画素群で表現される階調値と、その結果として生じる階調誤差ＥＲを示したものである。例えば、画素群階調値が４５であったとすると、通し番号１番のブロックでは、閾値１が設定された画素と、閾値４２の画素にドットが形成されるから、その画素群に表現される階調値は「６４」となる。画素群階調値４５に対して、実際に表現される階調値は６４であるから、その画素群では、４５−６４＝−９で、階調値「−９」の階調誤差ＥＲが生じることになる。図１７（ａ）は、このようにして、０〜２５５までのすべての画素群階調値に対して、発生する階調誤差ＥＲを求めた結果を示したものである。
【０１３７】
また、図１７（ｂ）は、上述したブロックの右隣のブロック（図１２の通し番号によれば、２番のブロック）について、画素群階調値に対する表現階調値および階調誤差ＥＲを示したものである。上述した１番のブロックと同様に、画素群階調値が４５である場合について説明する。画素群階調値４５に対しては、通し番号２番のブロックでは、閾値５が設定されている画素にのみドットが形成される。従って、その画素群に表現される階調値は「３２」であり、階調値１３の階調誤差ＥＲが生じることになる。
【０１３８】
図１７（ｃ）は、１番ブロックの真下のブロック（図１２の通し番号によれば３３番のブロック）について、同様にして階調誤差ＥＲを求めたものであり、図１７（ｄ）は、２番ブロックの真下のブロック（通し番号３４番のブロック）について、階調誤差ＥＲを求めたものである。図１７（ａ）〜（ｄ）を比較すれば明らかなように、階調誤差ＥＲの発生パターンは複雑に変化しており、また、同じ画素群階調値に対しても、発生する階調誤差ＥＲは画素群毎に異なった値となっている。
【０１３９】
尚、上述したように、画素群に表現される階調値は、階調値０〜階調値２５５の範囲で段階的に変化している。このことに着目すれば、画素群の個数データを決定することは、画素群の多値化と考えることもできる。すなわち、誤差を拡散させながら画素群内の画像データを多値化していると考えることもできる。このように誤差を拡散しながら多値化を行う場合、多値化結果に一定の繰り返しパターンが発生し画質に影響を与えることがある。しかし、図１７に示したように、本実施例の多値化では、画素群の分類番号が異なれば同じ画素群階調値に対しても多値化結果は異なっており、発生する階調誤差も異なったものとなる。そして、図１３を用いて前述した画素群の分類番号の決定方法から明らかなように、画素群には連続して同じ分類番号が付与されることはないから、階調誤差の発生パターンも複雑に変化することになるので、多値化結果に一定の繰り返しパターンが発生して画質を悪化させるおそれはない。
【０１４０】
以上のようにして、画素群に発生した階調誤差ＥＲを算出したら、得られた階調誤差ＥＲを、周辺にある未処理の画素群に拡散させる。図１８は、ある画素群で生じた階調誤差ＥＲを、周辺の画素群に拡散させている様子を概念的に示した説明図である。図中に示した矩形は画素群を模式的に示したものであり、実線の画素群は処理中の画素群を表している。また、ハッチングが施された破線の画素群は既に個数データを生成した画素群を表しており、ハッチングのない破線の画素群は未だ個数データを生成していない画素群を表している。図１８に示すように、処理中の画素群には隣接して４つの未処理の画素群が存在している。そこで、図１８（ａ）に示した例では、画素群で生じた階調誤差ＥＲを、これら４つの画素群に均等に分配する。図中に示した白抜きの矢印は、階調誤差ＥＲをこれら画素群に、均等に拡散誤差ＥＲdfとして分配している様子を概念的に表している。尚、階調誤差ＥＲは、隣接する画素群に、必ずしも均等に分配する必要はなく、所定の重みを付けて分配することとしても良い。あるいは、隣接する画素群だけではなく、より遠方の画素群に拡散させても構わない。拡散誤差ＥＲを拡散させるときの、周辺の各画素群への重み係数は、誤差拡散マトリックスとして予め設定しておくことができる。
【０１４１】
また、図１７に示した各ブロックについての例示から明らかなように、画素群で生じる階調誤差ＥＲの大きさは、単一画素で発生する階調誤差ほどには大きな値となることはない。例えば、単一画素の場合、階調誤差ＥＲは−２５４〜２５４までの値を取り得る。すなわち、画像データの階調値２５４の画素に対して、ディザマトリックスの閾値が「２５５」であった場合には、その画素にはドットは形成されないから、階調値２５４の階調誤差が生じる。また、画像データの階調値１に対してディザマトリックスの閾値「１」の場合には、その画素にはドットが形成されるから、階調値「−２５４」の誤差が生じる。これに対して画素群では、各画素で生じる階調誤差が、正または負のいずれか一方に偏って発生することは無いから、全体としては誤差が相殺し合う方向に働くため、画素群で生じる階調誤差ＥＲは比較的小さな値となる。このように、画素群で発生する階調誤差ＥＲは比較的小さな値となることに着目すれば、図１８（ｂ）に示すように、すべての階調誤差ＥＲを１つの画素群に拡散させることで、誤差を拡散する処理を簡素なものとすることも可能である。
【０１４２】
図１０に示したステップＳ２１０では、以上のようにして、画素群で生じた階調誤差ＥＲを算出し、得られた誤差を周辺の画素群に拡散させる処理を行う。周辺の画素群では、拡散されてきた誤差を拡散誤差ＥＲdfとして蓄積しておく。そして、その画素群について画素群階調値ＤＴrpを算出する際には、蓄積しておいた拡散誤差ＥＲdfを読み出して（ステップＳ２０４）、続くステップＳ２０６では、拡散誤差ＥＲdfを考慮しながら画素群階調値ＤＴrpを算出するのである。
【０１４３】
尚、拡散誤差ＥＲdfを拡散するに際しては、誤差を周辺の画素群に拡散するのではなく、各画素群の中で所定位置にある画素に拡散させることとしてもよい。すなわち、所定位置の画素に割り当てられている画像データに拡散誤差ＥＲdfを加算して補正画像データを求め、この補正画像データを含めて算出した画素群の平均画像データを画素群階調値とすることも可能である。
【０１４４】
Ｂ−５．第１実施例の画素位置決定処理  ：
次に、前述した第１実施例の画像印刷処理において、個数データから画素群内でドットを形成する画素位置を決定する処理（図５のステップＳ１０８）について説明する。図１９は、第１実施例の画素位置決定処理の流れを示すフローチャートである。かかる処理は、カラープリンタ２００の制御回路２６０に内蔵されたＣＰＵによって実行される処理である。以下では、前述した図９を参照しながら、図１９に示すフローチャートに従って、第１実施例の画素位置決定処理の内容について説明する。尚、図９は、個数データからドットを形成する画素位置を決定可能な原理を説明するために用いられたものである。
【０１４５】
画素位置決定処理を開始すると、先ず初めに、処理の対象とする画素群を１つ選択し（ステップＳ３００）、その画素群の個数データを取得する（ステップＳ３０２）。ここでは、図９（ａ）に示すような個数データが供給されたものとする。そして、処理対象の画素群として、図９（ａ）中で一番左上隅の画素群が選択されたものとする。この場合は、図１９のステップＳ３０２では、選択した画素群の個数データとして、「３」が取得されることになる。
【０１４６】
次いで、序列マトリックスを参照することにより、画素群内でドットが形成される画素位置を決定する（ステップＳ３０４）。序列マトリックスとは、図９（ｄ）に例示されているように、画素群内の各画素についてドットの形成され易さを示したマトリックスである。ここでは、処理対象の画素群は、画像中で一番左上隅にある画素群であるとしているから、序列マトリックスも該当する箇所のマトリックス（すなわち、図９（ｄ）で左上隅にある８画素分のマトリックス）を参照する。そして、個数データが「３」であるから、序列マトリックス中でドットの形成され易さが、１番から３番までの画素にドットが形成されるものと判断する。その結果、図９（ｃ）の一番左上隅の画素群に示されているように、処理対象の画素群については、ドットを形成する画素位置は一番左上隅の画素と、その２つ右隣の画素と、更に右下の画素の３つの画素位置に決定することができる。尚、図９（ｃ）では、ドットが形成される画素には斜線を付して表示している。図１９のステップＳ３０４では、このようにして序列マトリックスを参照しながら、個数データに基づいてドットを形成する画素位置を決定する。
【０１４７】
尚、ここでは序列マトリックスを参照して画素位置を決定するものとして説明した。しかし、図９においても前述したように、画素群内で各画素の序列を示している点については、ディザマトリックスも序列マトリックスと同様である。従って、序列マトリックスに代えて、ディザマトリックスを参照しても良いことはもちろんである。
【０１４８】
以上のようにして、ステップＳ３００において選択した画素群についての画素位置を決定したら、全ての画素群についての処理を終了したか否かを判断する（図１９のステップＳ３０６）。未処理の画素群が残っていれば（ステップＳ３０６：ｎｏ）、ステップＳ３００に戻って新たな画素群を選択し、続く一連の処理を行う。こうした処理を繰り返すことにより、図９（ａ）に例示した個数データは、図９（ｃ）に示すような、ドットを形成する画素位置を示すデータに変換されていく。そして、全ての画素群について処理が終了したら（ステップＳ３０６：ｙｅｓ）、図１９に示した画素位置決定処理を終了して、図５の画像印刷処理に復帰する。
【０１４９】
以上、第１実施例の画像印刷処理中で行われる個数データ生成処理（図５のステップＳ１０６）、および画素位置決定処理（図５のステップＳ１０８）の内容について詳しく説明した。上述した個数データ生成処理では、所定数の画素を画素群としてまとめて、画素群毎に個数データを生成する。個数データの生成に際しては、分類番号と画素群階調値とに基づいて個数データ生成テーブルを参照するだけで生成することができる。また、分類番号や画素群階調値も容易に求めることができるので、極めて容易に個数データを生成することが可能である。こうして生成された個数データは、画素毎にドット形成の有無を表すデータに比べて、データ量が遙かに小さくなっているため、コンピュータ１００からカラープリンタ２００に向かって極めて迅速にデータを出力することができる。すなわち、上述した個数データ生成処理では、個数データの生成および出力を高速に実行することが可能であり、その分だけ画像を迅速に印刷することが可能となる。
【０１５０】
また、上述した個数データ生成処理では、個数データの生成に伴って画素群毎に発生した階調誤差を周辺の画素群に拡散しておき、周辺の画素群で個数データを生成する際には、拡散されてきた誤差が解消されるようにして個数データを生成する。このため、個数データを生成することによって生じた階調誤差を速やかに解消することができ、画質を改善することが可能である。更に、図１７を用いて説明したように、画素群が切り換わるに伴って階調誤差の発生パターンは複雑に変化することから、個数データが一定のパターンで生成されてしまい、画質に悪影響を与えるおそれもない。
【０１５１】
加えて、個数データを生成する処理は、単に変換テーブルを参照する処理に過ぎず、変換テーブルを参照するために使用する分類番号や画素群階調値も、極めて簡便な処理で求めることができるので、コンピュータ１００のような高いデータ処理能力を備えていない機器を用いた場合でも、十分に実用的な速度で処理することができる。
【０１５２】
Ｂ−６．変形例  ：
上述した第１実施例の個数データ生成処理には、種々の変形例が存在する。以下では、これら変形例について簡単に説明する。
【０１５３】
Ｂ−６−１．第１の変形例  ：
以上に説明した第１実施例の個数データ生成処理では、画素群の分類番号と画素群階調値ＤＴrpとから、個数データ生成テーブルを参照することによって個数データを取得した。また、こうして画素群階調値ＤＴrpを個数データに変換することで、その画素群に生じた階調誤差ＥＲを算出して、周辺の画素群に拡散した。しかし、階調誤差ＥＲは画素群階調値ＤＴrpと個数データとが分かれば算出可能であり、また、その個数データは、分類番号と画素群階調値ＤＴrpとが分かれば、個数データ生成テーブルを参照することで決定することができる。こうした点に着目すれば、画素群で生じる階調誤差ＥＲは、その画素群の分類番号と画素群階調値ＤＴrpとを求めた時点で、既に決まっていることになる。換言すれば、画素群の分類番号と画素群階調値とが分かれば、個数データだけでなく、その画素群で生じる階調誤差ＥＲも決まってしまうことになる。従って、上述した第１実施例のように個数データから階調誤差ＥＲを算出するのではなく、階調誤差ＥＲも個数データ生成テーブルに記憶しておき、かかるテーブルを参照することで、個数データと同時に階調誤差ＥＲを取得することも可能である。
【０１５４】
図２０は、こうした第１の変形例における個数データ生成処理の流れを示すフローチャートである。かかる第１の変形例の個数データ生成処理は、図１０に示した第１実施例の個数データ生成処理に対して、個数データ生成テーブルを参照することで、個数データと階調誤差ＥＲとを一度に取得する点が大きく異なっている。以下では、かかる相違点に焦点をあてて、第１の変形例の個数データ生成処理について簡単に説明する。
【０１５５】
第１の変形例の個数データ生成処理を開始すると、互いに隣接する所定個数の画素をまとめて画素群を生成した後、その画素群の分類番号を決定する（ステップＳ３５０、Ｓ３５２）。そして、その画素群に拡散されている拡散誤差ＥＲdfを読み出して、画素群階調値ＤＴrpを算出する（ステップＳ３５４、Ｓ３５６）。これらの処理は、前述した第１実施例と同様であるため、ここでは詳細な説明は省略する。
【０１５６】
次いで、求めた分類番号および画素群階調値に基づいて、個数データ生成テーブルを参照することによって、その画素群についての個数データと、その画素群で生じる階調誤差ＥＲを取得する（ステップＳ３５８）。図１５に示した第１実施例の個数データ生成テーブルには、分類番号および画素群階調値の組合せ毎に個数データが記憶されていたが、第１の変形例の個数データ生成処理で参照するテーブルには、個数データに加えて、予め算出しておいた階調誤差ＥＲも記憶されている。このため、ステップＳ３５８においては、画素群の分類番号と画素群階調値ＤＴrpとに基づいて個数データ生成テーブルを参照することにより、その画素群の個数データと階調誤差ＥＲとを一度に取得することができる。
【０１５７】
次いで、得られた階調誤差ＥＲを周辺の画素群に拡散した後（ステップＳ３６０）、画像中の全画素について行ったか否かを判断する（ステップＳ３６２）。そして、未処理の画素が残っている場合は（ステップＳ３６２：ｎｏ）、ステップＳ３５０に戻って新たな画素群を生成し、続く一連の処理を繰り返す。こうした操作を繰り返し、全画素についての処理が終了したと判断されたら（ステップＳ３６２：ｙｅｓ）、各画素群について得られた個数データをカラープリンタ２００に出力して（ステップＳ３６４）、図２０に示す第１の変形例の個数データ生成処理を終了する。
【０１５８】
以上に説明した第１の変形例の個数データ生成処理では、個数データ生成テーブルを参照することで、画素群の個数データと階調誤差ＥＲとを同時に取得することができる。このため、誤差の算出が不要となるので、より迅速に個数データを生成することが可能となる。
【０１５９】
Ｂ−６−２．第２の変形例  ：
また、上述した各種の個数データ生成処理では、画素群階調値を個数データに変換することによって生じた階調誤差を、周辺の画素群に拡散させることとした。しかし、画素群の画像データから画素群階調値を算出する際には、何某かの丸め誤差が発生する。あるいは、画像処理装置に供給される画像データの分解能が画素群階調値の算出分解能よりも高い場合にも、丸め誤差が発生する。こうして発生した丸め誤差も、周辺の画素群に拡散させておき、周辺の画素群についての画素群階調値を算出する際には、これら考慮することとしても良い。以下では、こうした第２の変形例の個数データ生成処理について簡単に説明する。
【０１６０】
図２１は、第２の変形例において、画素群階調値を算出する際に生じた丸め誤差ＥＲrdを周辺の画素群に拡散しながら個数データを生成する処理の流れを示したフローチャートである。かかる第２の変形例における個数データ生成処理は、前述した第１の変形例における個数データ生成処理に対して、画素群で生じた階調誤差ＥＲに加えて丸め誤差ＥＲrdも拡散する点が異なっている。以下では、かかる相違点に焦点をあてながら、第２の変形例の個数データ生成処理について説明する。
【０１６１】
第２の変形例においても、第１の変形例と同様に、個数データ生成処理を開始すると、互いに隣接する所定個数の画素をまとめて画素群を生成した後、その画素群の分類番号を決定する（ステップＳ４００、Ｓ４０２）。そして、その画素群に拡散されている拡散誤差ＥＲdfを読み出してやる（ステップS４０４）。このとき読み出す拡散誤差ＥＲdfは、前述した各種実施例では、画素群で生じた階調誤差ＥＲが拡散された誤差であるのに対して、第２の変形例では、階調誤差ＥＲに後述する丸め誤差ＥＲrdを加えた合計誤差ＥＲtlが拡散された誤差である点が異なっている。
【０１６２】
次いで、拡散誤差ＥＲdfと、画素群の各画素の画像データとを用いて、画素群の画素群階調値ＤＴrpを算出するとともに、算出時に発生した丸め誤差ＥＲrdを取得する（ステップＳ４０６）。拡散誤差ＥＲdfおよび各画素の画像データから画素群階調値ＤＴrpを算出する方法は、前述した各種実施例と同様である。但し、第２の変形例では、画素群階調値ＤＴrpを算出することに併せて、画素群階調値ＤＴrpを算出するための除算の際に生じた丸め誤差ＥＲrdを取得しておく。
【０１６３】
次いで、求めた分類番号および画素群階調値に基づいて、個数データ生成テーブルを参照することによって、その画素群についての個数データと、その画素群で生じる階調誤差ＥＲを取得する（ステップＳ４０８）。ここで、第２の変形例においては、画素群階調値ＤＴrpを算出する際に生じた丸め誤差ＥＲrdも考慮するから、その画素群では階調誤差ＥＲに加えて丸め誤差ＥＲrdも生じていることになる。そこで、第２の変形例の個数データ生成処理では、個数データ生成テーブルを参照して階調誤差ＥＲを取得すると、この階調誤差ＥＲに、先に取得しておいた丸め誤差ＥＲrdを加算することによって、その画素群で生じた合計誤差ＥＲtlを算出する（ステップＳ４１０）。
【０１６４】
こうして得られた合計誤差ＥＲtlを、周辺の画素群に拡散誤差ＥＲdfとして拡散させる（ステップＳ４１２）。合計誤差ＥＲtlを拡散させる割合は、予め誤差拡散マトリックスに設定しておけばよい。また、階調誤差ＥＲの大きさが比較的小さな値となることと同様の理由により、合計誤差ＥＲtlの値も比較的小さな値しか取らないことから、合計誤差ＥＲtlを複数の画素群に分配するのではなく、隣接する１つの画素群にだけ拡散させることも可能である。
【０１６５】
以上のようにして、画素群で生じた合計誤差ＥＲtl、すなわち、階調誤差ＥＲと丸め誤差ＥＲrdとを周辺の画素群に拡散したら、画像中の全画素について行ったか否かを判断する（ステップＳ４１４）。そして、未処理の画素が残っている場合は（ステップＳ４１４：ｎｏ）、ステップＳ４００に戻って新たな画素群を生成し、続く一連の処理を繰り返す。こうした操作を繰り返し、全画素についての処理が終了したと判断されたら（ステップＳ４１４：ｙｅｓ）、各画素群について得られた個数データをカラープリンタ２００に出力して（ステップＳ４１６）、図２１に示す第２の変形例の個数データ生成処理を終了する。
【０１６６】
以上に説明したように、単に階調誤差ＥＲを拡散させるだけでなく、画素群階調値を算出する際に生じた丸め誤差ＥＲrdも拡散してやれば、それだけ画像データを正確に反映した個数データを生成することができるので、得られる画質を改善することが可能となる。
【０１６７】
また、画素群階調値の分解能に対して入力される画像データの分解能が高い場合などには、画素群階調値ＥＲrpを算出する際に丸め誤差ＥＲrd発生する。そこで、この丸め誤差ＥＲrdを周辺の画素群に拡散しておき、周辺の画素群における画素群階調値の算出に反映させれば、画素群階調値の分解能が画像データに対して不足していることを補って、より滑らかな階調変化を表現することが可能となる。従って、画素群の階調誤差ＥＲを拡散しない場合には、丸め誤差ＥＲrdだけでも拡散してやれば、分解能の不足を補って画質を改善することが可能である。
【０１６８】
Ｃ．第２実施例  ：
以上に説明した第１実施例では、カラープリンタ２００で形成可能なドットは１種類であるものとして説明した。しかし、今日では、印刷画質を向上させることを目的として、大きさの異なるドットや、インク濃度の異なるドットなど、多種のドットを形成可能なプリンタ（いわゆる多値ドットプリンタ）が広く使用されている。本願の発明は、こうした多値ドットプリンタに適用した場合にも、大きな効果を得ることができる。以下では、第２実施例として、本願発明を多値ドットプリンタに適用した場合について説明する。
【０１６９】
Ｃ−１．第２実施例の画像印刷処理の概要  ：
第２実施例の画像印刷処理は、フローチャートについては、図５に示した第１実施例の画像印刷処理と同様である。以下では、図５のフローチャートを流用しながら、第２実施例の画像印刷処理の概要について簡単に説明する。
【０１７０】
第２実施例の画像印刷処理を開始すると、先ず初めに、コンピュータ１００で画像データを読み込んだ後、色変換処理を行う（図５のステップＳ１００およびステップＳ１０２相当）。次いで、解像度変換処理を行って、画像データの解像度を印刷解像度に変換した後（ステップＳ１０４相当）、個数データ生成処理を開始する（ステップＳ１０６相当）。
【０１７１】
前述したように、第１実施例では、カラープリンタ２００が形成可能なドットは１種類であるものとしており、個数データ生成処理では、画素群内に形成されるドット個数を表す個数データを画素群毎に生成して、カラープリンタ２００に出力した。これに対して、第２実施例では、カラープリンタ２００は、大きさの異なる３種類のドット、すなわち大ドット、中ドット、小ドットを形成可能であるものとする。このことと対応して、第２実施例の個数データ生成処理では、画素群内に、大ドット、中ドット、小ドットがそれぞれ何個ずつ形成されるかを表す個数データを生成することになる。また、詳細には後述するが、個数データを少ないデータ量で効率よく出力するために、大ドット、中ドット、小ドットの個数をそのまま出力するのではなく、コード化された状態で出力する。第２実施例の個数データ生成処理の詳細については後述する。
【０１７２】
カラープリンタ２００の制御回路２６０に内蔵されたＣＰＵは、コンピュータ１００から供給された個数データを受け取ると、画素位置決定処理を開始する（図５のステップＳ１０８相当）。詳細には後述するが、第２実施例の画素位置決定処理では、コード化された状態で供給された個数データを、大ドット、中ドット、小ドットの個数を示すデータに復号した後、これらドットを形成する画素位置を決定する。
【０１７３】
こうして、大中小の各種ドットを形成すべき画素位置を決定したら、決定した画素位置にドットを形成する（図５のステップＳ１１０相当）。こうして大ドット、中ドット、小ドットを形成することにより、画像データに対応した画像が印刷される。
【０１７４】
Ｃ−２．第２実施例の個数データ生成処理  ：
次に、上述した第２実施例の画像印刷処理において、画素群内に形成される大ドット、中ドット、小ドットの個数がコード化された個数データを生成する処理について説明する。後述するように、コード化された個数データも、画素群の分類番号と画素群階調値とに基づいて変換テーブルを参照することにより、極めて容易に生成することができる。こうしたことが可能である理由を説明するために、先ず初めに、画素群内に形成される大中小ドットの個数を、いわゆるディザ法を用いて決定する処理について簡単に説明する。次いで、大中小ドットの個数をコード化する処理について説明し、その後に、第２実施例の個数データ生成処理で行われる詳細な処理内容について説明する。
【０１７５】
Ｃ−２−１．ディザ法を用いた大中小ドットの形成個数の決定処理  ：
図２２は、画素群内に形成される大ドット、中ドット、小ドットの個数を、ディザ法を適用して決定する処理の流れを示すフローチャートである。尚、かかる処理の詳細については、特許３２９２１０４号に開示されている。大中小ドットの個数を決定する場合も、処理を開始すると先ず初めに、互いに隣接する所定数の画素をまとめて画素群を形成する（ステップＳ４３０）。ここでは、前述した実施例と同様に、主走査方向に４画素、副走査方向に２画素の合計８つの画素を画素群としてまとめるものとする。
【０１７６】
次いで、画素群の中からドット形成の有無を判断するべく、処理対象とする画素を１つ選択して（ステップＳ４３２）、選択した処理画素について、大ドット、中ドット、小ドットの形成有無を判断する（ステップＳ４３４）。大中小ドットの形成有無は次のようにして判断する。
【０１７７】
図２３は、選択した１つの画素についてハーフトーン処理を行うことにより、大ドット、中ドット、小ドットの形成有無を判断する処理の流れを示すフローチャートである。大中小ドットのハーフトーン処理を開始すると、先ず初めに処理対象とする画素についての画像データを、大ドット、中ドット、小ドットの各ドットについての密度データに変換する（ステップＳ４６０）。ここで、密度データとは、ドットをどの程度の密度で形成するかを表すデータである。密度データは、大きな階調値となるほどドットが高い密度で形成されることを表している。例えば、密度データの階調値「２５５」は、ドットの形成密度が１００％、すなわち全ての画素にドットが形成されることを表しており、密度データの階調値「０」は、ドットの形成密度が０％、すなわちいずれの画素にもドットが形成されないことを表している。こうした密度データへの変換は、ドット密度変換テーブルと呼ばれる数表を参照することによって行うことができる。
【０１７８】
図２４は、画像データの階調値を大中小各ドットについての密度データに変換する際に参照されるドット密度変換テーブルを概念的に示した説明図である。図示されているように、ドット密度変換テーブルには、色変換によって得られた画像データの階調値に対して、小ドット・中ドット・大ドットの各ドットについての密度データが設定されている。画像データが階調値「０」近傍の領域では、中ドット・大ドットの密度データはいずれも階調値「０」に設定されている。小ドットの密度データは、画像データの階調値が大きくなるに連れて増加して行くが、画像データがある階調値に達すると今度は逆に減少し始め、代わりに中ドットの密度データが増加し始める。画像データの階調値が更に増加して、ある階調値に達すると、小ドットの密度データが階調値「０」となり、中ドットの密度データが減少し始めて、代わりに大ドットの密度データが少しずつ増加していく。図２３のステップＳ４６０では、このドット密度変換テーブルを参照しながら、画像データの階調値を、大ドットの密度データ、中ドットの密度データ、小ドットの密度データに変換する処理を行う。
【０１７９】
このようにして、処理対象とする画素について、大中小各ドットの密度データが得られたら、先ず初めに大ドットについての形成有無を判断する（図２３のステップＳ４６２）。かかる判断は、大ドットの密度データと、処理対象としている画素の対応する位置に設定されているディザマトリックスの閾値とを比較することによって行う。そして、密度データの方が大きい場合は処理対象の画素には大ドットを形成するものと判断される。判断の結果が大ドットを形成することになった場合は、ステップＳ４６４において「ｙｅｓ」と判断され、ハーフトーン処理を抜けて図２２のドット個数決定処理に復帰する。
【０１８０】
逆に、大ドットの密度データよりも閾値の方が大きければ、ステップＳ４６２において、処理対象の画素には大ドットは形成されないと判断される。その結果、大ドットが形成されない場合は、ステップＳ４６４において「ｎｏ」と判断され、今度は中ドットについて形成有無を判断する処理を開始する。中ドットの形成有無の判断には、大ドットの密度データと中ドットの密度データとを加算して、中ドット用の中間データを算出する（ステップＳ４６６）。そして、得られた中ドット用の中間データと、ディザマトリックスの閾値とを比較することにより、中ドットの形成有無を判断する（ステップＳ４６８）。中ドット用の中間データの方が大きい場合は、処理対象の画素には中ドットを形成するものと判断される。その結果、中ドットを形成することになった場合は、ステップＳ４７０において「ｙｅｓ」と判断され、ハーフトーン処理を抜けて図２２のドット個数決定処理に復帰する。
【０１８１】
逆に、中ドット用の中間データよりも閾値の方が大きかった場合は、ステップＳ４６８の処理では、処理対象の画素には中ドットを形成しないと判断される。その結果、中ドットも形成されない場合は、ステップＳ４７０において「ｎｏ」と判断され、今度は小ドットについて形成有無を判断する処理を開始する。小ドットの形成有無の判断には、中ドット用の中間データと小ドットの密度データとを加算して、小ドット用の中間データを算出する（ステップＳ４７２）。そして、得られた小ドット用の中間データと、ディザマトリックスの閾値とを比較することにより、小ドットの形成有無を判断する（ステップＳ４７４）。その結果、小ドット用の中間データの方が大きい場合は処理対象の画素には小ドットを形成するものと判断し、逆に、小ドット用の中間データよりも閾値の方が大きい場合には、いずれのドットも形成されないものと判断する。以上のような処理を行えば、処理対象としている画素について、大ドット、中ドット、小ドットのいずれのドットを形成するか、若しくは、いずれのドットも形成しないかを判断することができるので、図２３に示したハーフトーン処理を抜けて図２２のドット個数決定処理に復帰する。
【０１８２】
上述した処理を行いながら大中小の各ドットの形成有無を判断する様子について、図２５を参照しながら補足して説明する。図２５は、画素群内の各画素について、ディザ法を適用しながら大中小各ドットの形成有無を判断している様子を概念的に示した説明図である。ここでは、説明が煩雑となることを避けるために、画素群内の全画素が同じ階調値を有しており、従って、大中小各ドットの密度データも同じ階調値を有しているものとする。図２５（ａ）は、画素群内の各画素について得られた大中小ドットの密度データを示しており、いずれの画素も、大ドットの密度データが「２」、中ドットの密度データが「９０」、小ドットの密度データが「３２」であったものとする。
【０１８３】
図２５（ｂ）は、ディザマトリックス中で、画素群の対応する位置に記憶されている閾値を表している。大ドットの形成有無を判断する際には、大ドットの密度データと、これら閾値とを比較する。ここでは、いずれの画素についても、大ドットの密度データは「２」であるとしているから、大ドットを形成すると判断される画素は、閾値「１」が設定された画素だけである。図２５（ｂ）には、大ドットが形成されると判断された画素には、細かい斜線を付して表示している。その他の画素については、中ドットか小ドットのどちらかが形成されるか、若しくはいずれのドットも形成されないかのいずれかであると考えられる。そこで、中ドットの形成有無を判断する。
【０１８４】
中ドットの形成有無の判断に際しては、大ドットの密度データ「２」と中ドットの密度データ「９０」とを加算して中ドット用の中間データを算出し、得られた中間データ「９２」とディザマトリックスの閾値とを比較する。その結果、閾値「４２」が設定された画素と、閾値「５８」が設定された画素の２つの画素にのみ、中ドットが形成されるものと判断される。図２５（ｃ）には、中ドットが形成されると判断された画素には、少し細かい斜線を付して表示している。そして、大ドットも中ドットも形成されない画素については、小ドットが形成されるか、ドットが形成されないかのいずれかであると考えられる。そこで、中ドット用の中間データ「９２」に小ドットの密度データ「３２」を加算して、小ドット用の中間データを算出し、得られた中間データ「１２４」とディザマトリックスの閾値とを比較する。その結果、閾値「１０９」が設定された画素にのみ、小ドットが形成されるものと判断される。図２５（ｄ）には、小ドットが形成されると判断された画素には、粗い斜線を付して表示している。
【０１８５】
図２２に示したドット個数決定処理のステップＳ４３２〜Ｓ４３６では、以上のようにして画素群内の各画素について中間データを算出しながら、大中小の各ドットについての形成有無を判断していく。こうして、画素群内の全画素について判断を終了したら（ステップＳ４３６：ｙｅｓ）、画素群内に形成される大ドット、中ドット、小ドットの個数を取得する（ステップＳ４３８）。図２５に例示した画素群については、大ドット１個、中ドット２個、小ドット１個となる。
【０１８６】
こうして、大中小の各ドットのドット個数を取得したら、画像の全画素について以上の処理を行ったか否かを判断する（ステップＳ４４０）。そして、未処理の画素が残っている場合は、ステップＳ４３０に戻って続く一連の処理を繰り返し、画像の全画素について処理を終了したと判断されたら、図２２に示したディザ法によるドット個数決定処理を終了する。その結果、画像データは複数の画素群に分割され、各画素群に形成される大ドット、中ドット、小ドットの個数が得られることになる。図２６は、画素群毎に大ドット、中ドット、小ドットの形成個数が得られた様子を概念的に示した説明図である。
【０１８７】
Ｃ−２−２．大中小ドットの形成個数のコード化処理  ：
以上のようにして画素群毎に各ドットの個数が求められたら、求めたドットの個数をコード化した状態でプリンタに出力する。すなわち、例えば図２６に示すように、ドットの種類が大中小の３種類である場合、ドットの種類毎に形成する個数を出力したのでは、１つの画素群について３回ずつドット個数を出力しなければならない。これでは、コンピュータ１００からカラープリンタ２００にデータを迅速に出力することで画像を迅速に印刷するという効果が減殺されてしまう。そこで、各ドットの個数を個別に出力するのではなく、各ドットの個数の組合せ、例えば（大ドットがＫ個、中ドットがＬ個、小ドットがＮ個）という組合せを、組合せ毎に設定された個別のコードに変換した後、得られたコードを出力するのである。
【０１８８】
大中小各ドットの組合せをコード化する処理は、ドット個数の組合せとコードデータとを対応付けた状態で予め対応テーブルに記憶しておき、この対応テーブルを参照することで行う。図２７は、画素群に形成される大中小各ドットの個数の組合せと、コードデータとが対応付けて設定された対応テーブルを示す説明図である。図２７に例示の対応テーブルには、例えば大ドット、中ドット、小ドットの個数がいずれも０個である組合せには、コードデータ「０」が対応付けられている。また、大ドットが０個、中ドットが０個、小ドットが１個の組合せには、コードデータ「１」が対応付けられている。このように対応テーブルには、各ドットの個数の組合せ毎に、予め固有のコードデータが対応付けて設定されている。
【０１８９】
ここで、大中小ドットの個数の組合せ数は、次のようなものとなる。画素群内の各画素には、大ドット、中ドット、小ドットのいずれのドットも形成され得るが、１つの画素に複数のドットが形成されることはないから、ドット個数の合計が画素群内の画素数（上述した実施例では８個）を越えることはない。従って、これら大中小ドットの個数の組合せは、「大ドットを形成する」、「中ドットを形成する」、「小ドットを形成する」、「ドットを形成しない」の４つの状態の中から重複を許して８回選択するときの組合せの数に等しくなるから、
４Ｈ８  （＝４＋８−１Ｃ８）
によって求められ、１６５通りの組合せが存在していることになる。ここで、ｎＨｒは、ｎ種類の物の中から重複を許してｒ回選択したときに得られる組合せの数（重複組合せ数）を求める演算子である。また、ｎＣｒは、ｎ種類の物の中から重複を許さずにｒ回選択したときに得られる組合せの数を求める演算子である。
【０１９０】
このように、大中小各ドットの個数の組合せが１６５通り存在していることから、コードデータも「０」〜「１６４」の１６５通りあればよい。１６５通りであれば、８ビットのデータ長があれば表現することができる。結局、大ドットの個数、中ドットの個数、小ドットの個数と、３回出力する代わりに、８ビットのコード化された個数データを１回出力するだけで、画素群に形成する各種ドットの個数を出力することが可能となる。そこで、図２６に示すような画素群毎に得られたドット個数の組合せを、図２７に示すような対応テーブルを参照しながらコード化された個数データに変換してからプリンタに供給することで、個数データの供給を迅速化して画像を迅速に印刷するのである。
【０１９１】
Ｃ−２−３．第２実施例の個数データ生成処理  ：
以上では、画素群内に形成する大中小ドットの個数をディザ法を用いて決定した後、得られたドット個数の組合せをコード化してからプリンタに供給するという、言わば２段階の処理を経るものとして説明した。しかし、第２実施例の個数データ生成処理では、個数データ生成テーブルを参照することにより、画素群の画像データをコード化された個数データに直接変換して、カラープリンタ２００に出力する。このため、個数データを極めて迅速に生成することが可能となるとともに、個数データを生成する処理もたいへん簡素なものとすることができる。
【０１９２】
更に、第２実施例の個数データ生成処理においても、前述した第１実施例と同様に、個数データを生成することで画素群に生じた階調誤差を、周辺の画素群に拡散させることにより、誤差を速やかに解消することができ、延いては高画質な画像を得ることが可能となっている。以下では、こうした第２実施例の個数データ生成処理について説明する。
【０１９３】
図２８は、第２実施例の個数データ生成処理の流れを示すフローチャートである。尚、以下では、第２実施例の個数データ生成処理もコンピュータ１００で実施されるものとして説明するが、前述した第１実施例と同様に、第２実施例の個数データ生成処理も極めて簡素な処理とすることができるから、カラープリンタ２００あるいはデジタルカメラ１２０内で実施することも可能である。以下、フローチャートに従って説明する。
【０１９４】
第２実施例の個数データ生成処理を開始すると、先ず初めに、互いに隣接する所定個数の画素をまとめて画素群を生成する（ステップＳ５００）。ここでは、上述した実施例と同様に、主走査方向に４画素分、副走査方向に２画素分の合計８つの画素を画素群にまとめるものとする。次いで、画素群の分類番号を決定する（ステップＳ５０２）。画素群の分類番号の決定方法は、前述した第１実施例と同様であるため、ここでは説明は省略する。次いで、その画素群に拡散されている拡散誤差ＥＲdfを読み出して（ステップＳ５０４）、読み出した拡散誤差ＥＲdfと画素群の各画素の画像データとから、画素群階調値ＤＴrpを算出する（ステップＳ５０６）。画素群階調値の算出方法についても、上述した第１実施例と同様であるため、ここでは説明を省略する。
【０１９５】
次いで、画素群の分類番号と画素群階調値とから個数データ生成テーブルを参照することにより、コード化された個数データと、階調誤差ＥＲを取得する（ステップＳ５０８）。前述したように階調誤差ＥＲとは、画素群階調値を個数データに変換したことで画素群に生じた階調表現の誤差であり、個数データに従って画素群にドットを形成したときに、その画素群に表現される階調値（表現階調値）を、画素群階調値から減算することによって算出することができる。
【０１９６】
図２９は、第２実施例の個数データ生成処理において参照される個数データ生成テーブルを概念的に示した説明図である。図示されているように、第２実施例の個数データ生成テーブルには、画素群の分類番号と画素群階調値との組合せに対応付けて、コード化された個数データと、階調誤差ＥＲとが予め記憶されている。従って、第２実施例の個数データ生成処理においては、画素群の分類番号および画素群階調値を決定して変換テーブルを参照するだけで、直ちにコード化された状態の個数データと、階調誤差ＥＲとを求めることが可能である。
【０１９７】
次いで、個数データと同時に取得した階調誤差ＥＲを周辺の画素群に拡散する処理を行う（ステップＳ５１０）。すなわち、図１８を用いて前述したように、階調誤差ＥＲを周辺にあって未だ個数データを生成していない画素群に、所定の比率で分配して、拡散誤差ＥＲdfとして蓄積しておくのである。階調誤差ＥＲを各画素群へ拡散する際の比率は、誤差拡散マトリックスとして予め設定しておくことができる。もちろん、第１実施例と同様に、階調誤差ＥＲを１つの画素群にのみ分配したり、あるいは誤差を周辺の画素群に拡散するに際して、各画素群内の所定位置にある画素に拡散させることも可能である。図２８のステップＳ５０４で読み出した拡散誤差ＥＲdfは、以上のようにして、各画素群から拡散されて蓄積されている拡散誤差ＥＲdfである。
【０１９８】
以上のようにして、１つの画素群についてコード化された個数データを生成し、それに伴って生じる階調誤差を拡散したら、画像データの全画素について処理を終了したか否かを判断する（ステップＳ５１２）。そして、未処理の画素が残っている場合は（ステップＳ５１２：ｎｏ）、ステップＳ５００に戻って新たな画素群を生成し、続く一連の処理を繰り返す。こうした操作を繰り返し、全画素についての処理が終了したと判断されたら（ステップＳ５１２：ｙｅｓ）、各画素群について得られたコード化済みの個数データをカラープリンタ２００に出力して（ステップＳ５１４）、図２８に示す第２実施例の個数データ生成処理を終了する。
【０１９９】
Ｃ−３．第２実施例の画素位置決定処理  ：
次に、第２実施例のカラープリンタ２００において、コード化された個数データを受け取って大中小各ドットを形成する画素位置を決定する処理について説明する。図３０は、第２実施例の画素位置決定処理の流れを示すフローチャートである。かかる処理は、図１９を用いて前述した第１実施例の画素位置決定処理に対して、個数データを復号して大中小各ドットの形成個数を示すデータに変換する点と、大中小各ドットについて画素位置を決定する点とが大きく異なっている。以下では、これら相違点に焦点をあてながら、第２実施例の画素位置決定処理について説明する。
【０２００】
第２実施例の画素位置決定処理を開始すると、先ず初めに、画素位置を決定しようとする画素群を１つ選択し（ステップＳ６００）、その画素群の個数データを取得する（ステップＳ６０２）。こうして取得された個数データは、コード化されたデータとなっている。そこで、個数データを復号して、大ドット、中ドット、小ドットについての個数を示すデータに変換する処理を行う（ステップＳ６０４）。個数データを復号する処理は、復号テーブルを参照することによって行う。図３１は、第２実施例の画素位置決定処理中でコード化された個数データを復号するために参照される復号テーブルを概念的に示した説明図である。
【０２０１】
図示されるように、復号テーブルには、コード化された個数データに対応する大ドット、中ドット、小ドットのドット個数の組合せが設定されている。例えば、コード化された個数データが「１」である場合は、大ドットおよび中ドットの個数は０個で、小ドットの個数が１個であるドット個数の組合せに復号される。図３０のステップＳ６０４では、このような復号テーブルを参照することにより、コード化された個数データを大中小各ドットの個数を表すデータに変換する。
【０２０２】
次いで、処理中の画素群に対応する位置に記憶されている序列マトリックスを参照することにより、大中小各ドットの個数から、これらドットを形成する画素位置を決定する処理を行う（ステップＳ６０６）。序列マトリックスとは、図９（ｄ）に例示されているように、画素群内の各画素についてドットの形成され易さを示したマトリックスである。図３２は、序列マトリックスを参照しながら、大中小各ドットを形成する画素位置を決定している様子を概念的に示した説明図である。例えば、個数データを復号することにより、大ドットの個数が１個、中ドットの個数が２個、小ドットの個数が１個の組合せが得られたものとする。
【０２０３】
画素位置の決定に際しては、先ず初めに大ドットを形成する画素位置を決定する。ここでは、大ドットの個数は１個であるとしているから、最もドットの形成され易い画素、すなわち、序列マトリックスで順序値が「１」に設定されている画素に大ドットが形成されるものと判断する。ここで、大ドットの個数がＮ個である場合は、序列マトリックスで順序値が「１」から「Ｎ」までの値が設定されている画素に大ドットを形成するものと判断する。図３２では、大ドットを形成する画素位置には、細かい斜線を付して表示している。
【０２０４】
次いで、中ドットを形成する画素位置を決定する。中ドットの個数は２個であり、順序値「１」が設定されている画素位置には大ドットが形成されるから、中ドットは順序値「２」が設定された画素位置と順序値「３」が設定された画素位置とに形成される。図３２では、中ドットが形成される画素位置には、少し粗い斜線を付して表示している。
【０２０５】
最後に、小ドットを形成する画素位置を決定する。小ドットの個数は１個であり、順序値「１」の画素位置には大ドットが、順序値「２」および「３」の画素位置には中ドットが形成されるから、小ドットは順序値「４」が設定された画素位置に形成される。図３２では、小ドットが形成される画素位置には、粗い斜線を付して表示している。図３０のステップＳ６０６では、このようにして序列マトリックスを参照しながら、大ドット、中ドット、小ドットの順番でドットを形成する画素位置を決定する処理を行う。
【０２０６】
こうして、１つの画素群について、コード化された個数データを復号し、大中小の各ドットを形成する画素位置を決定したら、全画素群について処理を終了したか否かを判断する（図３０のステップＳ６０８）。そして、未処理の画素群が残っている場合は（ステップＳ６０８：ｎｏ）、ステップＳ６００に戻って、新たな画素群について続く一連の処理を繰り返す。こうして全ての画素群について画素位置を決定したと判断されたら（ステップＳ６０８：ｙｅｓ）、図３０に示す第２実施例の画素位置決定処理を抜けて、画像印刷処理に復帰した後、印刷用紙上に各種ドットを形成する。この結果、画像データに対応した画像が印刷されることになる。
【０２０７】
尚、以上の説明では、コード化された個数データを復号する際に、各種ドットのドット個数のデータに復号するものとして説明した。しかし、上述したように、大ドット、中ドット、小ドットの順番で画素位置を決定することから、各種ドットのドット個数ではなく、大ドットの個数、大ドットと中ドットの合計個数、大ドットと中ドットと小ドットの合計個数に復号することとしても良い。例えば、図３２に示した例では、大ドット１個、中ドット２個、小ドット１個と復号する代わりに、大ドット１個、大ドットと中ドットの合計が３個、大ドットと中ドットと小ドットの合計が４個と復号するのである。
【０２０８】
図３３は、コード化された個数データをこのように復号するために参照される復号テーブルを概念的に表した説明図である。このように復号しておけば、次のように画素位置を決定する処理を迅速化することができる。例えば、図３２において中ドットの画素位置を決定する場合について説明すると、大ドットと中ドットの合計個数が３個と復号されているので、順序値が「１」から「３」までの画素を選択する。そして、既に他のドット（大ドット）が形成されている画素を除いて、選択した画素に中ドットを形成すると判断する。
【０２０９】
大ドットが１個、中ドットが２個、小ドットが１個と復号した場合は、中ドットを形成する画素の順序値は大ドットの個数によって異なり、また、小ドットを形成する画素の順序値は大ドットおよび中ドットの個数によって異なってくる。このため、中ドットおよび小ドットを形成する画素位置を決定するに際しては、常に大ドット、あるいは大ドットおよび中ドットの個数を考慮しながら、適切な順序値の画素を選択する必要がある。これに対して、大ドットが１個、大ドットおよび中ドットの合計が３個、大ドットと中ドットと小ドットの合計が４個と復号しておけば、大ドット、あるいは大ドットおよび中ドットの個数を考慮せずとも、適切な順序値の画素を選択することができるので、画素位置を決定する処理を迅速化することが可能となる。
【０２１０】
以上に説明した第２実施例の個数データ生成処理では、画素群についての分類番号と画素群階調値とを決定したら、個数データ生成テーブルを参照するだけで、直ちにコード化された個数データと、その画素群で生じる階調誤差ＥＲとを求めることができる。従って、コード化された個数データを極めて迅速に生成することができるとともに、処理内容も極めて簡素なものとすることができる。また、階調誤差ＥＲを周辺の画素群に拡散し、周辺の画素群では、拡散されてきた誤差を考慮に入れながら画素群階調値ＤＴrpを算出することで、誤差を速やかに解消することが可能となり、延いては画質を改善することが可能となる。
【０２１１】
また、画素群をひとかたまりと見れば、前述した第１実施例の個数データ生成処理と同様に、上述した第２実施例の個数データ生成処理も、画素群階調値ＤＴrpを多値化する処理と考えることができる。もっとも、前述した第１実施例の個数データ生成処理では、いずれの画素群についても、ドット個数０〜８までの９階調に多値化されたのに対して、第２実施例の個数データ生成処理では、多値化される階調数が画素群毎に異なったものとなる。以下では、この点について若干補足して説明する。
【０２１２】
図３４は、第２実施例の個数データ生成処理において、画素群階調値が増加するに従って画素群に形成されるドット個数が切り替わり、それに伴って画素群に表現される階調値（表現階調値）が段階的に増加していく様子を示した説明図である。尚、前述した第１実施例と同様に、画素群の分類番号が異なれば、画素群階調値に対して形成されるドット個数も異なったものとなる。そこで、図３４では、任意に選んだある分類番号の画素群を例に用いて、画素群階調値に対する表現階調値の変化を表している。
【０２１３】
第２実施例では、画素群には大中小の３種類のドットを形成可能としているから、画素群階調値が増加するに従って、これらドットの個数の組合せが切り換わっていく。例えば、画素群階調値「０」のときには、画素群にドットが形成されることはない。従って、画素群に表現される階調値は「０」となる。画素群階調値が増加すると、やがて小ドットが形成される。図３４に示した画素群では、画素群階調値が「１」になった時点で小ドットが１つ形成されている。すなわち、この画素群については、画素群階調値が「１」の時には大ドット０個、中ドット０個、小ドット１個が形成されることになる。図中では、これらドット個数の組合せを、（大ドット個数，中ドット個数，小ドット個数）によって表示している。従って、図中に示された（０，０，１）という表示は、画素群に小ドットが１つだけ形成されることを示していることになる。
【０２１４】
尚、図３４に示した画素群では、画素群階調値が「１」になった時点で、早くも１つ目の小ドットが形成されたが、小ドットが形成され始める画素群階調値は、画素群の分類番号に応じて異なっている。すなわち、前述したように、画素群に形成されるドット個数は、画素群の分類番号と画素群階調値との組合せに応じて決まってくるので、分類番号が異なれば、同じ画素群階調値に対して形成されるドット個数も異なってくるからである。
【０２１５】
画素群に１つ目の小ドットが形成されると、その画素群で表現される階調値は、階調値０から小ドット１つ分だけ増加する。この増加量は、小ドットの大きさやインク濃度などによって異なるが、プリンタの仕様によって予め適切な値に設定されている。こうして、表現階調値が小ドット１つ分だけ増加すると、その画素群では階調誤差が発生する。図３４に示した例では、画素群階調値が「１」になった時点で早くも小ドットが形成されているから、画素群階調値よりも表現階調値の方が大きな値となっており、これに伴って負の階調誤差（すなわち、マイナスの階調値を有する階調誤差）が生じることになる。図３４では、負の階調誤差には、細かいハッチングを付して表している。
【０２１６】
画素群階調値「１」で小ドットが１つ形成された後は、画素群階調値が増加してもしばらくの間はドットが形成されることはない。すなわち、表現階調値が一定のまま、画素群階調値だけが増加することになるから、画素群で生じる階調誤差は負の階調値から次第に大きくなっていく。そして、画素群階調値が「１１」まで増加すると２つ目の小ドットが形成される。すなわち、画素群に形成されるドット個数が（０，０，１）から（０，０，２）に増加する。これに伴って、その画素群の表現階調値が小ドット１つ分だけ増加し、その結果、階調誤差が再びマイナス側に振れることになる。
【０２１７】
更に画素群階調値が増加すると、今度は画素群階調値が「２６」になった時点で中ドットが１つ形成され、代わりに小ドットの個数が１つ減少する。すなわち、ドット個数の組合せが（０，０，２）から（０，１，１）に変化する。中ドットが表現する階調値は小ドットが表現する階調値よりも大きいから、中ドットが小ドットに置き換わることで、その画素群の表現階調値も増加することになる。
【０２１８】
ここで、画素群階調値の増加に合わせて表現階調値を増加させる観点からは、小ドットに代えて中ドットを形成するのではなく、すなわちドット個数の組合せを（０，０，２）から（０，１，１）に変化させるのではなく、小ドットの形成個数を２個から３個に増やすことによって、すなわちドット個数の組合せを（０，０，２）から（０，０，３）に変化させることも可能である。しかし、図３４に示した画素群では、小ドットの形成個数を増加させるのではなく、小ドットを中ドットに置き換えることによって、画素群に表現される画素群階調値を増加させている。これは、図２４に示したドット密度データ変換テーブルの設定と、各画素群に対応するディザマトリックスの閾値の設定によるものであり、画素群の分類番号が異なれば、ドット個数の組合せを（０，０，２）から（０，０，３）に変化させることで、表現階調値を増加させる場合も生じ得る。
【０２１９】
更に画素群階調値が増加して、画素群階調値が「３９」になると、中ドットの形成個数が１つ増加して、ドット個数の組合せが（０，１，１）から（０，２，１）に変化する。中ドットが表現する階調値は小ドットが表現する階調値よりも大きいから、中ドットの形成個数が１つ増加することで、画素群の表現階調値は大きく増加することになる。もちろん、画素群の表現階調値を増加させるためには、このようにドット個数の組合せを（０，１，１）から（０，２，１）に変化させることに限られるものではなく、例えば、（０，１，１）から（０，１，２）に変化させたり、あるいは（０，２，０）にすることも可能である。図３４に示した画素群では、たまたま、ドット個数の組合せ（０，１，１）を（０，２，１）へと切り換えることで表現階調値を増加させている。
【０２２０】
このように、画素群階調値が増加するに合わせて、ドット個数の組合せがどのように切り換わっていくか、そして、それに伴い画素群の表現階調値がどのように増加していくかは、図２４に示したドット密度データ変換テーブルの設定と、各画素群に対応するディザマトリックスの閾値の設定によって決まるものである。従って、画素群の分類番号が異なれば、ドット個数の組合せが（０，１，１）から、（０，１，２）あるいは（０，２，０）に切り換わる画素群も生じ得る。そして、ドット個数の組合せが（０，２，１）または、（０，１，２）、（０，２，０）のいずれに切り換わるかによって、画素群の表現階調値も異なったものとなる。
【０２２１】
尚、図３４では、画素群階調値の増加に合わせて、表現階調値が直線的に増加するものとして表示している。しかし、画素群階調値が小さな値を取る範囲（すなわち、画像の明度が明るい場合）では、小ドットが主体として形成され、逆に画素群階調値が大きな値を取る範囲（すなわち、画像の明度が暗い場合）では、大ドットが主体として形成される。１つのドットが表現する階調値は、小ドットの方が大ドットよりも小さいから、小ドットを主体としてドットが形成される画素群階調値の低い領域では、大ドットを主体としてドットが形成される画素群階調値の高い領域よりも、細かな階調表現が要求される傾向にある。換言すれば、表現階調値の分解能に対する要求度合いは、画素群階調値が大きい領域よりも小さい領域の方が強い傾向にある。こうした点を考慮して、画素群階調値の増加に合わせて表現階調値を直線的に増加させるのではなく、表現階調値を下に凸の曲線に沿って増加させることとしても良い。こうすれば、画素群階調値が小さな値の領域では、表現階調値の分解能を向上させることができる。
【０２２２】
以上、図３４を用いて詳しく説明したように、第２実施例の個数データ生成処理では、画素群の表現階調値が段階的に増加する画素群階調値は、画素群の分類番号によって異なったものとなる。更に、画素群の分類番号が同じ場合であっても、表現階調値が段階的に増加する際の増加幅は、一定幅ずつ増加するわけではない。
【０２２３】
図３５は、異なる分類番号の３つの画素群について、画素群階調値が増加するに伴って画素群の表現階調値が増加する様子を例示した説明図である。図３５に示されているように、いずれの画素群についても表現階調値は段階的に増加しているが、表現階調値が増加する画素群階調値は画素群毎に異なっている。また、表現階調値の増加幅も一定ではなく、複雑に切り換わる。このことと対応して、画素群階調値を個数データに変換することにより生じる階調誤差も、複雑に発生パターンが変化することになる。
【０２２４】
更に、図３５に示した３つの例を比較すれば、表現階調値の切り換わる段階数も画素群毎に異なっていることが分かる。例えば、図３５（ａ）に例示した画素群では、階調値０〜２５５の範囲で、表現階調値が１９段階に変化している。このことは、階調値「０」の状態まで含めれば、画素群階調値を２０階調の表現階調値に多値化していると考えることもできる。また、図３５（ｂ）に示した画素群では、表現階調値が２０段階に変化しており、図３５（ｃ）に示した画素群では１６段階に変化している。それぞれ、画素群階調値を２１階調、１７階調に多値化していると考えることができる。
【０２２５】
以上のことから、第２実施例の個数データ生成処理は、これを一種の多値化処理と見た場合、次のような特色を有していることが分かる。すなわち、画素群の分類番号が異なれば、同じ画素群階調値に対しても異なった多値化結果が得られるという特色がある。加えて、画素群の分類番号が異なれば、多値化する際の階調数（表現階調値が切り換わる段階数）も異なるという特色がある。ここで、前述したように、画素群には連続して同じ分類番号が付与されることはないから、多値化後の階調値および多値化する際の階調数とが分類番号毎に異なれば、階調誤差の発生パターンは複雑に変化することになる。このため、第２実施例においても、多値化結果に一定の繰り返しパターンが発生して画質を悪化させることを確実に回避することが可能である。
【０２２６】
以上、各種の実施例について説明してきたが、本発明は上記すべての実施例に限られるものではなく、その要旨を逸脱しない範囲において種々の態様で実施することができる。例えば、以上の実施例では、印刷用紙上にドットを形成して画像を印刷する場合について説明したが、本発明の適用範囲は画像を印刷する場合に限られるものではない。例えば、液晶表示画面上で輝点を適切な密度で分散させることにより、階調が連続的に変化する画像を表現する液晶表示装置などにも、本発明を好適に適用することができる。
【図面の簡単な説明】
【０２２７】
【図１】印刷システムを例にとって本発明の概要を説明するための説明図である。
【図２】本実施例の画像処理装置としてのコンピュータの構成を示す説明図である。
【図３】本実施例のカラープリンタの概略構成を示す説明図である。
【図４】インク吐出用ヘッドにおけるインクジェットノズルの配列を示す説明図である。
【図５】第１実施例の画像印刷処理の全体的な流れを示すフローチャートである。
【図６】ディザマトリックスの一部を概念的に例示した説明図である。
【図７】ディザマトリックスを参照しながら各画素についてのドット形成の有無を判断している様子を概念的に示した説明図である。
【図８】ディザ法を用いて画像データをドット形成の有無を表すデータに変換している様子を示した説明図である。
【図９】個数のデータから画素毎にドット形成の有無を表すデータを生成する様子を示した説明図である。
【図１０】第１実施例の個数データ生成処理の流れを示すフローチャートである。
【図１１】画素群階調値の算出方法を例示した説明図である。
【図１２】画素群毎の分類番号を決定するための考え方を示した説明図である。
【図１３】画素群の分類番号を決定する方法を示した説明図である。
【図１４】着目画素群の分類番号を決定する方法を具体的に示した説明図である。
【図１５】画素群の分類番号および画素群階調値から個数データを取得するために参照される個数データ生成テーブルを概念的に示した説明図である。
【図１６】画素群の分類番号と画素群階調値との組合せに応じて適切な個数データを決定する様子を概念的に示した説明図である。
【図１７】画素群階調値が増加するに従って画素群の表現階調値および階調誤差が変化する様子を概念的に示した説明図である。
【図１８】画素群で生じた階調誤差を周辺の画素群に拡散させている様子を概念的に示した説明図である。
【図１９】第１実施例の画素位置決定処理の流れを示すフローチャートである。
【図２０】第１の変形例における個数データ生成処理の流れを示すフローチャートである。
【図２１】第２の変形例における個数データ生成処理の流れを示すフローチャートである。
【図２２】画素群内に形成される大ドット、中ドット、小ドットの個数をディザ法を適用して決定する処理の流れを示すフローチャートである。
【図２３】選択した１つの画素についてハーフトーン処理を行うことにより大ドット、中ドット、小ドットの形成有無を判断する処理の流れを示すフローチャートである。
【図２４】画像データの階調値を大中小各ドットについての密度データに変換する際に参照されるドット密度変換テーブルを概念的に示した説明図である。
【図２５】画素群内の各画素についてディザ法を適用しながら大中小各ドットの形成有無を判断している様子を概念的に示した説明図である。
【図２６】画素群毎に大ドット中ドット小ドットの形成個数が得られた様子を概念的に示した説明図である。
【図２７】画素群に形成される大中小各ドットの個数の組合せとコードデータとが対応付けて設定された対応テーブルを示す説明図である。
【図２８】第２実施例の個数データ生成処理の流れを示すフローチャートである。
【図２９】第２実施例の個数データ生成処理において参照される個数データ生成テーブルを概念的に示した説明図である。
【図３０】第２実施例の画素位置決定処理の流れを示すフローチャートである。
【図３１】第２実施例の画素位置決定処理中でコード化された個数データを復号するために参照される復号テーブルを概念的に示した説明図である。
【図３２】序列マトリックスを参照しながら大中小各ドットを形成する画素位置を決定している様子を概念的に示した説明図である。
【図３３】コード化された個数データを復号するために参照される復号テーブルを概念的に表した説明図である。
【図３４】第２実施例の個数データ生成処理において画素群階調値が増加するに従って画素群の表現階調値および階調誤差が変化する様子を概念的に示した説明図である。
【図３５】異なる分類番号の画素群について画素群階調値が増加するに伴って画素群の表現階調値が増加する様子を例示した説明図である。
【符号の説明】
【０２２８】
１０…コンピュータ、  ２０…カラープリンタ、  １００…コンピュータ、
１０８…周辺機器インターフェースＰＩＦ、
１０９…ディスクコントローラＤＤＣ、
１１０…ネットワークインターフェースカードＮＩＣ、
１１２…ビデオインターフェースＶＩＦ、
１１６…バス、  １１８…ハードディスク、  １２０…デジタルカメラ、
１２２…カラースキャナ、  １２４…フレキシブルディスク、
１２６…コンパクトディスク、  ２３０…キャリッジモータ、  ２３５…モータ、
２３６…プラテン、  ２４０…キャリッジ、  ２４１…印字ヘッド、
２４２…インクカートリッジ、  ２４３…インクカートリッジ、
２４４…インク吐出用ヘッド、  ２６０…制御回路、  ２００…カラープリンタ、
３００…通信回線、  ３１０…記憶装置
【図１】
2005303666.tif 000003
【図２】
2005303666.tif 000004
【図３】
2005303666.tif 000005
【図４】
2005303666.tif 000006
【図５】
2005303666.tif 000007
【図６】
2005303666.tif 000008
【図７】
2005303666.tif 000009
【図８】
2005303666.tif 000010
【図９】
2005303666.tif 000011
【図１０】
2005303666.tif 000012
【図１１】
2005303666.tif 000013
【図１２】
2005303666.tif 000014
【図１３】
2005303666.tif 000015
【図１４】
2005303666.tif 000016
【図１５】
2005303666.tif 000017
【図１６】
2005303666.tif 000018
【図１７】
2005303666.tif 000019
【図１８】
2005303666.tif 000020
【図１９】
2005303666.tif 000021
【図２０】
2005303666.tif 000022
【図２１】
2005303666.tif 000023
【図２２】
2005303666.tif 000024
【図２３】
2005303666.tif 000025
【図２４】
2005303666.tif 000026
【図２５】
2005303666.tif 000027
【図２６】
2005303666.tif 000028
【図２７】
2005303666.tif 000029
【図２８】
2005303666.tif 000030
【図２９】
2005303666.tif 000031
【図３０】
2005303666.tif 000032
【図３１】
2005303666.tif 000033
【図３２】
2005303666.tif 000034
【図３３】
2005303666.tif 000035
【図３４】
2005303666.tif 000036
【図３５】
2005303666.tif 000037