(57)【要約】      （修正有）【課題】誤差拡散法で問題となる、ワームや、ドット生成の遅延、及び領域外のデータの歪み、が発生しないようにする。また、量子化する際に、その分布に対応させる。さらに、ドットの分散性を向上させ、ドットを人間の視覚に目立たなくする。【解決手段】各画素所定の階調値を有する画像データが入力され、初期画素から探索し、探索した画素を含めた画素の階調値の合計が所定の閾値以上になると量子化済み画素群としてその重心位置にドットを生成させる。初期画素は、主走査方向又は副走査方向に探索する。例えば、主走査方向で未処理画素のうち最も上の行の、最も左側にある画素を初期画素とする。探索は、当該画素を含めた重心位置から最も近い未処理画素を選択する。複数の未処理画素があれば、ランダムに選択する。閾値を超えた場合は、超えた分だけ最後に選択した画素に戻し、以後当該画素がその階調値を有する未処理画素として選択されるようにする。【選択図】図１８
2004266793.tif 000002
【特許請求の範囲】
【請求項１】
初期画素を主走査方向又は副走査方向に探索し、前記初期画素から画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で生成した画素群の重心の位置を決定する画素群重心決定手段と、
前記画素群重心決定手段で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与手段と、を備えることを特徴とする画像処理装置。
【請求項２】
請求項１記載の画像処理装置であって、
前記画素群生成手段は、未処理画素のうち主走査方向に最も上の行にある画素で、かつ、最も左側にある画素を初期画素として選択することを特徴とする画像処理装置。
【請求項３】
請求項１記載の画像処理装置であって、
前記画素群生成手段は、前記画素群重心決定手段で決定した重心から最も近い画素を画素ごとの前記階調画像データの総和が閾値以上になるまで画素を選択することを特徴とする画像処理装置。
【請求項４】
請求項３記載の画像処理装置であって、
前記画素群生成手段は、前記画素群重心手段で決定した重心から最も近い画素が複数存在するときに選択する画素をランダムに選択することを特徴とする画像処理装置。
【請求項５】
請求項１記載の画像処理装置であって、
前記画素群生成手段は、選択した前記画素群における階調画像データ値の総和が閾値を超えたとき、超えた分の前記階調画像データ値を最後に選択した前記画素に戻すことを特徴とする画像処理装置。
【請求項６】
初期画素を主走査方向又は副走査方向に探索し、前記初期画素から画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成工程と、
前記画素群生成工程で生成した画素群の重心の位置を決定する画素群重心決定工程と、
前記画素群重心決定工程で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与工程と、を備えることを特徴とする画像処理方法。
【請求項７】
初期画素を主走査方向又は副走査方向に探索し、前記初期画素から画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成処理と、
前記画素群生成処理で生成した画素群の重心の位置を決定する画素群重心決定処理と、
前記画素群重心決定処理で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与処理と、をコンピュータに実行させるためのプログラム。
【請求項８】
初期画素を主走査方向又は副走査方向に探索し、前記初期画素から画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成処理と、
前記画素群生成処理で生成した画素群の重心の位置を決定する画素群重心決定処理と、
前記画素群重心決定処理で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与処理と、をコンピュータに実行させるためのプログラムが格納された記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、画素の画像データを量子化する処理に関する。
【０００２】
【従来の技術】
従来より、階調画像データを量子化することが行われている。例えば、２５６階調の階調画像データを二値化することなどが行われている。この際、単に、階調画像データを閾値を用いて二値化したのでは誤差が大きい。例えば、階調画像データを０〜２５５、閾値を１２８としたと仮定する。この場合、ある画素のデータ（濃度）が５０であれば、閾値未満であるため、二値化すると０になる。よって、誤差が５０（＝５０−０）生ずる。
【０００３】
そこで、このような量子化の際の誤差を周辺の画素に拡散する誤差拡散法が行われている。誤差拡散法は、例えば、量子化の際の誤差を当該画素の右、下、左下および右下の画素のデータに加算する。誤差拡散法の概要は、例えば特許文献１に記載されている。
【０００４】
また、入力された画像データの階調値が閾値に達するまで所定のテーブルにより入力画素を探索してセルを生成し、セル内の中心位置にドットを生成する技術も開示されている（例えば特許文献２）。
【０００５】
【特許文献１】
特開平６−６２２５３号公報（図３０、図３１、図３２）
【０００６】
【特許文献２】
特開平１１−２７５２８（図４、図６）
【０００７】
【発明が解決しようとする課題】
しかしながら、誤差拡散法により量子化された画像には、画質上問題が発生することがある。例えば、階調画像データのハイライト付近などのドット密度が低い領域について、単純に画素を画面の左側から右側へ順番に行順に誤差拡散法により２値化していくと、誤差が右側の画素に伝播し結果的に生成されるドットが鎖状に連なって発生することがある。このような鎖状の特異なパターンをワーム（ｗｏｒｍ）という。また、ハイライト付近などのドット密度が低い領域において、ドットの生成が誤差拡散法の主走査方向および副走査方向に遅延することがある。すなわち、ハイライト付近の印刷された用紙の上部側では、誤差を伝播させても画素の階調値が閾値に中々達することができず、ドットがない領域が発生することがある。さらに、特定の階調領域の処理を終えた後で、この領域外のデータ（濃度）を歪ませることがある。すなわち、エッジの切り換わり部分（モノクロ印刷では黒色で印刷された部分と白色で印刷された部分の境目部分）では、切り換わり前に伝播された誤差が切り換わり後にも伝播され、結果的にドットの形成を歪ませてしまうことがある。
【０００８】
そこで、本発明の第１の目的は、誤差拡散法で問題となる、ワームや、ドット生成の遅延、及び領域外のデータ歪み、を発生させることなく高画質の出力ドットを得ることを目的とする。
【０００９】
また、上述した画質上の問題は、誤差拡散法においては、誤差拡散後の各画素のデータ（濃度）が、誤差拡散前の各画素の近傍のデータ（濃度）の分布に対応していないからであると考えられる。
【００１０】
そこで、本発明の第２の目的は、画素の画像データを量子化する際に、画像のデータ分布に対応するようにすることを目的とする。
【００１１】
さらに、上述した特開平１１−２７５２８では、セルの探索を所定のテーブルで行っている。しかし、実際には画素をテーブルにより左側に探索するとき確率的にすでに処理済みの画素となる場合が多く、生成されるセルが歪んだ形（例えば三角形）となる。かかる形状のセルの中心にドットを形成させても、ドットがある部分では隣のセルのドットと連なって形成される場合があり、出力ドットの偏りが発生する。
【００１２】
そこで、本発明の第３の目的は、ドットの分散性を向上させて視覚的に快適な印刷出力を得ることを目的とする。
【００１３】
さらに、本発明の第４の目的は、かかるドットを人間に視覚に目立たなくするようにして快適な印刷出力を得ることを目的とする。
【００１４】
【課題を解決するための手段】
上記目的を達成するために、本発明は、初期画素を主走査方向又は副走査方向に探索し、初期画素から画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で生成した画素群の重心の位置を決定する画素群重心決定手段と、画素群重心決定手段で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与手段と、を備える画像処理装置であることを特徴としている。これにより、例えば、ドットの配列で斜め成分が多いものとなり、ドットが知覚されにくい快適な印刷出力を得ることができる。
【００１５】
また、本発明は、上記画像処理装置であって、上記画素群生成手段は、未処理画素のうち主走査方向に最も上の行にある画素で、かつ、最も左側にある画素を初期画素として選択することを特徴としている。これにより、例えば、印刷出力において、ある行のドットで、ドット間の中間にそのすぐ下の行にあるドットが存在するように配列されるため、斜め成分の多いドットの配列を実現でき、快適な印刷出力を得ることができる。
【００１６】
さらに、本発明は、上記画像処理装置であって、上記画素群生成手段は、画素群重心決定手段で決定した重心から最も近い画素を画素ごとの階調画像データの総和が閾値以上になるまで画素を選択することを特徴としている。これにより、例えば、生成されるドットのドット間距離が均一で分散性が向上し、快適な印刷出力を得ることができる。
【００１７】
さらに、本発明は、上記画像処理装置であって、上記画素群生成手段は、画素群重心手段で決定した重心から最も近い画素が複数存在するときに選択する画素をランダムに選択することを特徴としている。これにより、例えば、周期パターンの発生を抑え、快適な印刷出力を得ることが可能となる。
【００１８】
さらに、本発明は、上記画像処理装置であって、上記画素群生成手段は、選択した画素群における階調画像データ値の総和が閾値を超えたとき、超えた分の階調画像データ値を最後に選択した画素に戻すことを特徴としている。これにより、例えば、入力画像の階調値に忠実なドットを生成させることができる。
【００１９】
また、上記目的を達成するために本発明は、初期画素を主走査方向又は副走査方向に探索し、初期画素から画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成工程と、画素群生成工程で生成した画素群の重心の位置を決定する画素群重心決定工程と、画素群重心決定工程で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与工程と、を備える画像処理方法であることを特徴としている。これにより、例えば、生成されるドットを人間に視覚に目立たなくするようにして快適な印刷出力を得ることができる。
【００２０】
さらに、上記目的を達成するために本発明は、初期画素を主走査方向又は副走査方向に探索し、初期画素から画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成処理と、画素群生成処理で生成した画素群の重心の位置を決定する画素群重心決定処理と、画素群重心決定処理で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与処理とをコンピュータに実行させるためのプログラムであることを特徴とする。これにより、例えば、生成されるドットを人間に視覚に目立たなくするようにして快適な印刷出力を得るプログラムを提供することができる。
さらに、上記目的を達成するために本発明は、初期画素を主走査方向又は副走査方向に探索し、初期画素から画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成処理と、画素群生成処理で生成した画素群の重心の位置を決定する画素群重心決定処理と、画素群重心決定処理で決定した重心に位置する画素に量子化画像データを付与する量子化画像データ付与処理と、をコンピュータに実行させるためのプログラムが格納された記録媒体であることを特徴とする。これにより、例えば、生成されるドットを人間に視覚に目立たなくするようにして快適な印刷出力を得るプログラムが格納された記録媒体を提供することができる。
【００２１】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。
［第１の実施例］
図１は、本発明による画像出力システムをモノクロ入力画像に適用したものの構成図である。この例では、ホストコンピュータ５０において、階調画像データ５６（図１においてはモノクロである）が生成され、ページプリンタなどの画像出力装置６０に与えられる。ページプリンタなどの画像出力装置６０は、供給された画像データ５６に基づきモノクロ画像を再現する。画像出力装置６０は、画像処理を行ってエンジン７０にレーザ駆動用データ６９を供給するコントローラ６２と、前記駆動用データ６９に従って画像の再生を行うエンジン７０とを有する。
【００２２】
ホストコンピュータ５０は、ワードプロセッサや図形ツールなどのアプリケーションプログラム５２により、文字データ、図形データ及びビットマップデータ等を生成する。これらのアプリケーションプログラム５２により生成されたそれぞれのデータは、ホストコンピュータ５０にインストールされている画像出力装置用のドライバ５４により、ラスタライズされ、画素またはドット毎のモノクロデータからなる階調画像データ５６に変換される。階調画像データ５６は、例えば、各画素ごとに８ビットすなわち０〜２５５までの値をとる階調画像データ値の集合体である。
【００２３】
画像出力装置６０も、図示しないマイクロプロセッサを備え、そのマイクロプロセッサとインストールされている制御プログラムにより、ハーフトーン処理部６６及びパルス幅変調部６８を有するコントローラ６２が構成される。ハーフトーン処理部６６は、階調画像データ５６を受けて、量子化画像データ３０を生成する。ハーフトーン処理部６６の構成は後で説明する。量子化画像データ３０はパルス幅変調部６８に与えられる。パルス幅変調部６８は、ドット毎にレーザ駆動パルス有りと無しからなる駆動データ６９を生成する。
【００２４】
エンジン７０内のレーザドライバ７２が、駆動用データ６９に基づいて、画像描画用のレーザダイオード７４を駆動する。エンジン７０には、感光ドラムや転写ベルト等とその駆動部が含まれるが、図１では省略されている。
【００２５】
本発明の実施形態にかかる画像処理装置は、階調画像データ５６を量子化画像データ３０に変換するハーフトーン処理部６６に相当するものである。
【００２６】
図２は、本発明の実施形態にかかる画像処理装置の構成を示すブロック図である。画像処理装置は、階調画像データ記録部１０、画像データ走査部（画素群生成手段）１２、画像データ累計部１４、閾値記録部１６、閾値比較部１８、画像群重心決定部２０、量子化画像データ付与部２２、量子化画像データ記録部２４を備える。
【００２７】
階調画像データ記録部１０は、ホストコンピュータ５０から出力された階調画像データ５６を受けて記録する。階調画像データ５６は、例えば、各画素が８ビット（０〜２５５）の値をとる。この値は、例えば黒の濃度を意味している。
【００２８】
画像データ走査部（画素群生成手段）１２は、階調画像データ５６を走査する。階調画像データ５６の走査法を図３を参照して説明する。
【００２９】
階調画像データ記録部１０に記録されている階調画像データ５６は図３（ａ）に示すようなものである。図３（ａ）には、階調画像データの内、画素がｍ〜ｍ＋２行かつｎ〜ｎ＋３列の範囲のものを示している。なお、以後、画素を（ｎ、ｍ）というように表記する。画素（ｎ、ｍ）は、ｍ行ｎ列の画素を意味する。階調画像データの内、量子化済み画素群５６ａ（画素（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１）、（ｎ＋２、ｍ＋１））は、量子化が済んでおり、画素（ｎ＋１、ｍ＋１）に量子化画像データ値”２５５”が与えられ
ているものとする。
【００３０】
走査法には二種類あり、量子化中画素群５６ｃが無いときは初期走査、量子化中画素群５６ｃが有るときは通常走査を行う。
【００３１】
初期走査の方法を図３（ｂ）を参照して説明する。初期走査は、量子化済み画素群５６ａを除いた画素において、最も上の行の内で、最も左にある画素を走査対象とするものである。ただし、主走査方向が左から右へ向かうものとする。図３（ｂ）においては、最も上の行はｍ行であり、その内で最も左にある画素（ｎ＋２、ｍ）が初期走査の走査対象である初期走査対象画素５６ｂである。なお、初期走査対象画素５６ｂは量子化中画素群５６ｃを構成する。
【００３２】
通常走査の方法を図３（ｃ）を参照して説明する。量子化中画素群５６ｃ（画素（ｎ＋２、ｍ）、（ｎ＋３、ｍ））の重心５６ｄは、画素（ｎ＋２、ｍ）および画素（ｎ＋３、ｍ）の階調画像データ値が等しいので、画素（ｎ＋２、ｍ）および画素（ｎ＋３、ｍ）の境界線の中点にある。ここで、重心５６ｄから最も近い画素（量子化済み画素群５６ａを除く）を走査対象とするのが通常走査である。このように重心５６ｄから次の画素を探索するため、生成した量子化済み画素群５６ａは円状に生成され、その重心５６ｄにドットを形成しても、隣合うドットは均一の距離が保たれる。かかるドットの分散により視覚的に快適な印刷出力を得ることができる。
【００３３】
図３（ｃ）では、重心５６ｄから最も近い画素は、画素（ｎ＋２、ｍ＋１）および画素（ｎ＋３、ｍ＋１）である。このように、重心５６ｄから最も近い画素が複数ある場合はランダムに走査対象を選ぶことが好ましい。ランダムではなく固定順により選択すると量子化済み画素群５６ａの形が特定の形になりやすくその重心５６ｄにドットを形成しても全体としてドットの位置が周期的で印刷出力において周期パターンを発生させてしまう。かかる周期パターンは、視覚に映りやすく印刷出力の画像が不自然なものとなってしまう。一方、ランダムにより選択することで、生成される量子化済み画素群５６ａの形状が一定とはならず、重心５６ｄにドットを形成しても上述のような周期パターンが発生せず、視覚的に快適な印刷出力を得られるのである。図４（ａ）にランダムに選択した場合の印刷出力の例を示し、図４（ｂ）にはランダムではなくテーブル等を利用して固定順で画素を選択した場合の印刷出力の例を示す。図４（ｂ）に示すように固定順の場合、印刷部分の左下から右上にかけて一定の並び順でドットが形成されているため、周期パターンが発生し、このパターンが視覚に反映されて印刷出力が不自然なものとなっている。一方、図４（ａ）に示すようにランダムに選択した場合には、周期パターンが発生せず、視覚的に快適な印刷出力を得ることができる。
【００３４】
図３（ｃ）の例では、画素（ｎ＋２、ｍ＋１）が通常走査の走査対象である通常走査対象画素５６ｅとして選ばれている。通常走査対象画素５６ｅが量子化中画素群５６ｃの一部となってから、次の通常走査が行われる。
【００３５】
初期走査が行われると量子化中画素群５６ｃが生成されるため、それから後は通常走査が繰り返し行われる。通常走査対象画素５６ｅは量子化中画素群５６ｃに組み入れられる。ただし、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値（例えば、２５５）以上になると、量子化中画素群５６ｃは、量子化済み画素群５６ａとなる。すなわち、量子化中画素群５６ｃとは、量子化済み画素群５６ａとなる前に走査対象となった画素の集合である。量子化中画素群５６ｃが量子化済み画素群５６ａになると、再び初期走査が行われる。
【００３６】
画像データ走査部１２は、画像データ累計部１４に量子化中画素群５６ｃの各画素の階調画像データ値を出力する。さらに、画像データ走査部１２は、画素群重心決定部２０に、量子化中画素群５６ｃの各画素の位置および階調画像データ値を出力する。
【００３７】
画像データ累計部１４は、画像データ走査部１２から量子化中画素群５６ｃの階調画像データ値を受けて総和をとって出力する。図３（ｃ）の例でいえば、量子化中画素群５６ｃ（画素（ｎ＋２、ｍ）、（ｎ＋３、ｍ））の階調画像データ値の総和＝５０＋５０＝１００である。
【００３８】
閾値記録部１６は、量子化中画素群５６ｃの各画素の階調画像データ値の総和と比較すべき閾値を記録する。閾値は、例えば２５５である。
【００３９】
閾値比較部１８は、画像データ累計部１４の出力を、閾値記録部１６から読み出した閾値と比較する。そして、比較結果（量子化中画素群５６ｃの各画素の階調画像データ値の総和が、閾値未満か、閾値以上か）を画素群重心決定部２０に送る。さらに、閾値比較部１８は、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上であるならば、量子化画像データ付与部２２に対し、量子化画像データの付与を要求する。
【００４０】
画素群重心決定部２０は、量子化中画素群５６ｃの重心５６ｄの位置を決定する。重心５６ｄの位置は、画像データ走査部１２に送られる。重心５６ｄの位置の決定法を図５を参照して説明する。重心５６ｄの位置の決定法は、閾値比較部１８の比較結果により異なる。
【００４１】
図５（ａ）を参照して、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値未満である場合の、重心５６ｄの位置の決定法を説明する。量子化中画素群５６ｃの各画素のデータ値の総和＝５０＋５０＋５０＋５０＝２００は、閾値（＝２５５）未満である。この場合は、量子化中画素群５６ｃの各画素の中心にデータが集約されているものとして、重心５６ｄの位置を決定する。図５（ａ）の場合は、量子化中画素群５６ｃの各画素（画素（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１））のデータ値はすべて等しいので、重心５６ｄの位置は、画素（ｎ、ｍ）の右下の角になる。
【００４２】
図５（ｂ）を参照して、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上である場合の、重心５６ｄの位置の決定法を説明する。量子化中画素群５６ｃの各画素のデータ値の総和＝５０＋５０＋５０＋５０＋６５＝２６５は、閾値（＝２５５）以上である。この場合は、閾値を超えた分の階調画像データ値を無視する。図５（ｂ）の例でいえば、画素（ｎ＋１、ｍ＋２）のデータ値の内、１０だけ無視し、画素（ｎ＋１、ｍ＋２）のデータ値が５５（＝６５−１０）であるとして重心５６ｄの位置を求める。重心５６ｄの位置は、図５（ａ）における重心５６ｄよりも、やや右下に動いて、画素（ｎ＋１、ｍ＋１）の内にある。
【００４３】
なお、無視した階調画像データ値”１０”（戻しデータ）は、画素（ｎ＋１、ｍ＋２）に戻す（図５（ｃ）参照）。すなわち、画素（ｎ＋１、ｍ＋２）に階調
画像データ値”１０”が残ることになる。画素（ｎ＋１、ｍ＋２）は、さらに他
の量子化中画素群５６ｃの構成要素となり得る。すなわち、画素（ｎ＋１、ｍ＋２）のうち階調画像データ値“１０”は、量子化済み画素群５６ａに組み込まれず、再び初期画素から探索するときに、量子化中画素群５６ｃとして重心からの探索対象となる。このように戻しデータ値をもとの画素（ｎ＋１、ｍ＋２）に戻ため、量子化済み画素群５６ａ以外の画素に戻して誤差を伝播させるときと比べて入力された画素の階調値のドット分布に忠実にドットが形成されることになる。なお、画素（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１）の階調画像データ値は無視されなかったので、階調画像データ値は残らない。
【００４４】
また、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上である場合は、重心５６ｄの位置を量子化画像データ付与部２２に送る。
【００４５】
図５（ｂ）を参照して、比較結果が、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上である場合の、重心５６ｄの位置の決定法を説明したが、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値と等しい場合もある。例えば、図５（ａ）〜（ｃ）において、画素（ｎ＋２、ｍ）、（ｎ＋３、ｍ）、（ｎ＋２、ｍ＋１）、（ｎ＋３、ｍ＋１）、（ｎ＋３、ｍ＋２）の階調画像データ値の総和は、２５５（＝閾値）である。このような場合は、図５（ｄ）（右半分）に示すように、重心５６ｄは画素（ｎ＋３、ｍ＋１）の内にある。そして、戻しデータは発生しない。
【００４６】
量子化画像データ付与部２２は、閾値比較部１８から送られた量子化画像データの付与要求を受けると、画素群重心決定部２０から送られた重心５６ｄの位置する画素に、閾値と等しい量子化画像データを付与する。図５（ｃ）を参照して、量子化済み画素群５６ａの重心５６ｄの位置する画素（ｎ＋１、ｍ＋１）に、閾値と等しい量子化画像データ”２５５”を付与する。なお、図５（ｃ）におい
て、量子化済み画素群５６ａとあるのは、すでに、量子化画像データ”２５５”
が付与されているからである。量子化画像データ付与部２２は、量子化画像データを付与すると、画像データ走査部１２に初期化要求、すなわち、画像データ走査部１２に初期走査を行うことを要求する。これにより、画像データ走査部１２は再び初期走査を行う。
【００４７】
ここで、量子化画像データの付与について説明する。一般に、プリンタは、各画素について２５６階調もの濃度を区別して印刷することができない。例えば、各画素について白（黒の濃度が０）、黒（黒の濃度が２５５）のいずれかしか印刷できない。そこで、量子化済み画素群５６ａについて、その重心が位置する画素に、閾値と等しい量子化画像データ”２５５”を付与する。すなわち、重心が
位置する画素に、黒のドットを印刷することを意味する。なお、ドットの形状は、任意である。例えば、円形が挙げられるが、他の形状でもよい。ただし、ドットが位置する画素内に、ドットの重心が位置するようにすることが好ましい。
【００４８】
また、白濃度を階調画像データとして使用する例を図６に示す。図６（ａ）を参照して、各画素には黒の濃度”２０５”等という比較的濃い黒を意味する階調
画像データ値が記録されている。このままでは、すぐに、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上になる。
【００４９】
そこで、図６（ｂ）に示すように、白濃度に変換する。白濃度＝２５５−黒の濃度、である。白濃度への変換は、例えば、画像データ走査部１２（白濃度変換手段に相当）により、初期走査対象画素５６ｂの周囲について行われる。白濃度への変換は、初期走査対象画素５６ｂの階調画像データ値が中程度の濃度（例えば、１２７≒２５５／２）超えれば行うようにすることが好ましい。図６（ｂ）においては、量子化中画素群５６ｃ（画素（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１））において、各画素のデータ値の総和は閾値未満である。これが、黒の濃度のまま（図６（ａ）参照）であれば、画素（ｎ、ｍ）、（ｎ＋１、ｍ）だけで、そのデータ値の総和（４１０＝２０５＋２０５）すでに閾値（２２５）を超えてしまう。
【００５０】
図６（ｃ）に示すように、戻しデータは２４５、付与される量子化画像データは０となる。これは、白濃度になおせば、それぞれ、戻しデータ”１０”、付与
される量子化画像データ”２５５”となり、図５（ｃ）に対応する。
【００５１】
なお、量子化画像データ０を付与した場合は、付与された画素の周囲の画素に黒のドットを印刷し、付与された画素にはドットを印刷をしないことになる。
【００５２】
量子化画像データ記録部２４は、量子化画像データ付与部２２により付与された量子化画像データを記録する。量子化画像データ記録部２４の記録内容は、量子化画像データ３０として出力される。
【００５３】
次に、本発明の実施形態の動作を図７のフローチャートおよび図８、９を参照して説明する。
【００５４】
まず、階調画像データ記録部１０から画像データ走査部１２が階調画像データ５６を読み出し、走査していない画素があるか否かを判定する（Ｓ１０）。ここで、走査していない画素が無い、すなわち走査が終了していれば（Ｓ１０、Ｙｅｓ）、処理を終了する。走査していない画素が有る、すなわち走査が終了していなければ（Ｓ１０、Ｎｏ）、画像データ走査部１２は初期走査を行う（Ｓ１２）。すなわち、初期走査対象画素５６ｂを決定する。例えば、図８（ａ）に示すような階調画像データ５６がある場合、画素（ｎ、ｍ）が初期走査対象画素５６ｂとなる。
【００５５】
次に、初期走査対象画素５６ｂに記録されている階調画像データ値が１２７以下か否かを画像データ走査部１２が判定する（Ｓ１４）。もし、階調画像データ値が１２７を超えれば（Ｓ１４、Ｎｏ）、画像データ走査部１２は、階調画像データ５６の各画素の階調画像データ値を白濃度に変換する（Ｓ１６）（図６（ａ）、（ｂ）参照）。その後、走査した画素の階調画像データ値を画像データ累計部１４に送る。なお、階調画像データ値が１２７以下であれば（Ｓ１４、Ｙｅｓ）、画像データ走査部１２は、走査した画素の階調画像データ値を画像データ累計部１４に送る。図８（ａ）の例では、初期走査対象画素５６ｂに記録されている階調画像データ値＝５０であるため、白濃度への変換は行われない。
【００５６】
画像データ累計部１４は、画像データ走査部１２から、走査した画素の階調画像データ値を受けると、データ値の累計を計算する（Ｓ１８）。データ値の累計は、閾値比較部１８に送られる。閾値比較部１８は、データ値の累計を、閾値記録部１６から読み出した閾値（＝２５５）と比較する。そして、データ値の累計が閾値（＝２５５）以上であるか否かを判定する（Ｓ２０）。判定の結果は、画像群重心決定部２０に送られる。判定の結果により、画素群重心決定部２０の動作が異なるからである。
【００５７】
データ値の累計が閾値未満であれば（Ｓ２０、Ｎｏ）、最後に走査した画素を量子化中画素群５６ｃに組み入れる。その後、画素群重心決定部２０は、量子化中画素群５６ｃの重心を決定する（Ｓ２２）。なお、画素群重心決定部２０は、量子化中画素群５６ｃの重心決定の前に、画像データ走査部１２から量子化中画素群５６ｃの各画素の位置および階調画像データ値を受ける。これらを重心決定に用いる。そして、画像データ走査部１２が通常走査を行う（Ｓ２４）。すなわち、通常走査対象画素５６ｅを決定する。そして、データ値の累計（Ｓ１８）に戻る。
【００５８】
図８（ａ）を参照して、初期走査対象画素５６ｂに記録された階調画像データ値＝５０である。ここで、画像データ累計部１４により、階調画像データ値の累計＝５０を得る（Ｓ１８）。累計は２５５未満なので（Ｓ２０、Ｎｏ）、初期走査対象画素５６ｂを量子化中画素群５６ｃに組み入れてから（図８（ｂ）参照）、量子化中画素群５６ｃの重心を決定する（Ｓ２２）。重心は、画素（ｎ、ｍ）の中心である。重心に最も近い画素は画素（ｎ＋１、ｍ）および画素（ｎ、ｍ＋１）である。上述したように量子化済み画素群５６ａに組み入れる次の画素を探索するのに重心からの距離を利用しているために、最終的に生成される量子化中画素群５６ｃの形状はほぼ円状に成長し、ドットの形成が互いに均一の距離を有し、ドットの分散性が向上する。ここで、ランダムに通常走査対象画素５６ｅを選択し、画素（ｎ＋１、ｍ）を通常走査対象画素５６ｅとする（Ｓ２４）（図８（ｂ）参照）。上述したようにランダムに選択することで、最終的に生成される量子化済み画素群５６ａの形状は常に同じ形状にならず、ドットの周期的パターンが現れない。
【００５９】
そして、データ値の累計（Ｓ１８）に戻り、データ値の累計＝５０＋５０＝１００が求められる。累計は２５５未満なので（Ｓ２０、Ｎｏ）、通常走査対象画素５６ｅを量子化中画素群５６ｃに組み入れてから（図８（ｃ）参照）、量子化中画素群５６ｃの重心を決定する（Ｓ２２）。重心５６ｄは、画素（ｎ＋１、ｍ）および画素（ｎ、ｍ＋１）の境界線上の中点である。以後、このようにして、走査を繰り返していく。
【００６０】
データ値の累計が閾値以上であれば（Ｓ２０、Ｙｅｓ）、最後に走査した画素を量子化中画素群５６ｃに組み入れる。その後、画素群重心決定部２０は、戻しデータを決定する（Ｓ３０）。そして、画素群重心決定部２０は、量子化中画素群５６ｃの重心を決定する（Ｓ３２）。なお、画素群重心決定部２０は、量子化中画素群５６ｃの重心決定の前に、画像データ走査部１２から量子化中画素群５６ｃの各画素の位置および階調画像データ値を受ける。これらを重心決定に用いる。また、戻しデータは重心決定の際に考慮しない。閾値比較部１８は、量子化画像データ付与部２２に量子化画像データの付与を要求する。また、画素群重心決定部２０は重心の位置を量子化画像データ付与部２２に送る。さらに、画像データ走査部１２は、黒の濃度を使用したか、白濃度を使用したかを量子化画像データ付与部２２に送る。量子化画像データ付与部２２は、量子化画像データの付与要求を受け、量子化中画素群５６ｃの重心が位置する画素に量子化画像データを付与する（Ｓ３４）。付与する量子化画像データは、黒の濃度を使用した場合は２５５、白濃度を使用した場合は０となる。そして、量子化画像データ付与部２２は画像データ走査部１２に初期化を要求し、走査していない画素があるか否かの判定（Ｓ１０）に戻る。
【００６１】
図９（ａ）を参照して、量子化中画素群５６ｃが画素（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１）により構成されている。このような量子化中画素群５６ｃは、例えば、画素（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ＋１、ｍ＋１）、（ｎ、ｍ＋１）の順に走査されることにより生成される。重心５６ｄは、画素（ｎ、ｍ）の右下の角にある。重心５６ｄに最も近い画素は画素（ｎ＋１、ｍ＋２）および画素（ｎ、ｍ＋２）である。ここで、ランダムに通常走査対象画素５６ｅを選択し、画素（ｎ、ｍ＋２）を通常走査対象画素５６ｅとする（Ｓ２４）。
【００６２】
そして、データ値の累計（Ｓ１８）に戻り、データ値の累計＝５０＋５０＋５０＋５０＋６５＝２６５が求められる。累計は２５５以上なので（Ｓ２０、Ｙｅｓ）、通常走査対象画素５６ｅを量子化中画素群５６ｃに組み入れてから（図９（ｂ）参照）、戻しデータを決定する（Ｓ３０）。戻しデータは、最後に走査した画素（ｎ、ｍ＋２）について計算する。データ値の累計−閾値＝２６５−２５５＝１０である。よって、戻しデータ＝１０とし、画素（ｎ、ｍ＋２）に戻す（図９（ｃ）参照）。画素（ｎ、ｍ＋２）の階調画像データは戻しデータを減じた値＝６５−１０＝５５として量子化中画素群５６ｃの重心５６ｄを決定する（Ｓ３２）。重心５６ｄの位置は、図５（ｃ）におけるものと同様である（図９（ｄ）参照）。そして、重心５６ｄの位置する画素（ｎ＋１、ｍ＋１）に、量子化画像データ付与部２２が量子化画像データ２５５を付与する（Ｓ３４）。
【００６３】
本発明の実施形態によれば、量子化済み画素群５６ａの重心５６ｄが位置する画素に量子化画像データを付与する。これにより、量子化画像データは、量子化済み画素群５６ａの階調画像データの濃度分布に対応したものとなる。しかも、量子化画像データの値は閾値（＝２５５）と等しく、量子化済み画素群５６ａにおける各画素の階調画像データの総和（戻しデータを除く）も閾値と等しいため、量子化済み画素群５６ａ単位で見れば、量子化誤差が無い。
【００６４】
このように、量子化誤差が無く、しかも階調画像データの濃度分布に対応した量子化が可能である。よって、誤差拡散法における、誤差拡散後の各画素のデータ（濃度）が、誤差拡散前の各画素の近傍のデータ（濃度）の分布に対応していないことによるワーム等の問題が解消される。
【００６５】
また、量子化済み画素群５６ａにおける戻しデータは重心５６ｄの決定の際に無視して画素に戻すので、量子化済み画素群５６ａにおける各画素の階調画像データの総和が閾値を超えても量子化誤差を起さなくてすむ。
【００６６】
ここで、戻しデータは元の画素に戻し、その画素を量子化済み画素群５６ａに組み込まれないようにし、初期画素から再度量子化中画素群５６ｃに組み込まれるようにしているため、入力階調値に忠実なドット分布を形成することができる。
【００６７】
さらに、黒の濃度が大きい場合は、白濃度を使用することにより（図６参照）、量子化済み画素群５６ａに組み入れられる画素の個数が激減することを防ぐことができる。
【００６８】
また、量子化中画素群５６ｃの重心の最も近い画素が複数ある場合は、通常走査対象画素５６ｅをどれにするかはランダムに決定するため、量子化後の画像の画質が向上する。
【００６９】
なお、本発明の実施形態には色々な変形例が考えられる。
【００７０】
例えば、主走査方向が左から右へという場合は、階調画素データ５６の右端付近において量子化中画素群５６ｃを生成していると、各画素の階調画像データ値の総和が閾値に達する前に、これ以上の画素を量子化中画素群５６ｃに組み入れられなくなることがある。この場合は、各画素の階調画像データ値の総和に最も近い量子化画像データを量子化中画素群５６ｃの重心に付与する。量子化画像データは２５６階調もの多階調にすることができないので、量子化画像データと総和との誤差が生ずることがあるが、考えないことにする。
【００７１】
図１０を参照して、通常走査対象画素５６ｅの選択法の変形例を説明する。図１０（ａ）に示すように、量子化中画素群５６ｃが画素（ｎ、ｍ）、（ｎ＋１、ｍ）（いずれも階調画素データ値＝５０）により構成されている場合、重心５６ｄは、画素（ｎ、ｍ）および画素（ｎ＋１、ｍ）の境界線の中点にある。すると、重心５６ｄから最も近い画素は画素（ｎ、ｍ＋１）および画素（ｎ＋１、ｍ＋１）である。この変形例では、ランダムに通常走査対象画素５６ｅを選択せずに、階調画素データ値が小さい方の画素を通常走査対象画素５６ｅとして選択する。図１０において、画素（ｎ、ｍ＋１）の階調画素データ値＝５０であり、画素（ｎ＋１、ｍ＋１）の階調画素データ値＝８０である。よって、画素（ｎ、ｍ＋１）の階調画素データ値の方が小さいため、画素（ｎ、ｍ＋１）を通常走査対象画素５６ｅとして選択する（図１０（ｂ）参照）。このようにすれば、量子化画像におけるエッジの再現性が向上する。すなわち、色変化が激しいエッジの部分では、階調値が高い画素ではなく低い画素を選択して、量子化中画素群５６ｃに組み込み、階調値の高い画素は組み入れないようにしているため、突然階調値の合計が閾値を超えてドットを生成させることなく、入力階調値に忠実にドットを生成することができるのである。
【００７２】
なお、図１０における各画素の濃度が白濃度であってもよい。図１０における各画素の濃度が白濃度である場合は、白濃度が低い方の画素を選択することになる。よって、黒濃度が高い方の画素を選択することになる。白濃度を使用するのは、初期走査対象画素５６ｂの黒の濃度が１２７を超える場合である。よって、初期走査対象画素５６ｂの黒の濃度が１２７を超える場合は、黒濃度が高い方の画素を通常走査対象画素５６ｅとして選択することになる。
【００７３】
図１１を参照して、閾値に関する変形例を説明する。階調画像データ５６が図１１（ａ）に示すようなものである場合、量子化中画素群５６ｃの画素の個数を増やしても閾値に到達しにくい。図１１（ａ）に示すような階調画像データ５６の場合、画素全部の階調画像データ値を合計しても１０×１２＝１２０であり、閾値（＝２５５）に達しない。そこで、閾値を変更する。例えば、閾値＝５０とする。すると、量子化中画素群５６ｃが、図１１（ｂ）に示すように、画素（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１）、（ｎ＋１、ｍ＋２）により構成される場合、階調画像データ値の総和が閾値（＝５０）に達する。この場合、重心５６ｄの位置する画素（ｎ＋１、ｍ＋１）に量子化画像データ”５０”が付与される（図１１（ｃ）参照）。これは、画素（ｎ＋１、ｍ＋１
）に量子化画像データ”２５５”の場合に比べて、およそ２０％（５０／２５５
）のサイズのドットを印刷することを意味する。
【００７４】
閾値の変更法としては、下記のようなものがある。ます、閾値記録部１６に閾値の候補を複数記録しておく。例えば、閾値の候補を、２５５および５０としておく。ここで、閾値の候補のうち、最高のもの（例えば、２５５）を閾値として使用する。そして、量子化中画素群５６ｃの画素の個数が所定値（例えば、１２個）に達しても、なお階調画像データ値の総和が閾値に達しない場合は、最高値の次に高い閾値の候補を閾値比較部１８が閾値として閾値記録部１６から読み出して使用する。なおも、量子化中画素群５６ｃの画素の個数が所定値に達しながら、階調画像データ値の総和が閾値に達しない場合は、その次に高い閾値の候補を閾値比較部１８が閾値として閾値記録部１６から読み出して使用する。このようにして、使用する閾値を次第に低くしていく。例えば、量子化中画素群５６ｃの画素の個数が１２個になっても、階調画像データ値の総和が２５５に達しない場合は、次に高い閾値の候補（＝５０）を閾値比較部１８が閾値として、閾値記録部１６から読み出して使用する。
【００７５】
このように、階調画像データ値の総和の低下に応じて閾値を低くしていけば、階調画像データ値が低い部分にも、ある程度の密度で黒色のドットが印刷できる。よって、階調画像データ５６において、階調画像データ値が低い部分があったとしても、その部分に黒色のドットがほとんど印刷されないということが防止できる。これは、印刷されるドットの間隔がほぼ一定となることを意味する。よって、ドットの分散性が向上する。これにより、低周波ノイズの発生が抑えられる。
【００７６】
また、入力画像の階調値が中間値で連続している領域では、（例えば階調値“１２０”が連続する場合など）閾値を一定にすると、量子化済み画像群５６ａはほぼ２画素で構成されることになる。量子化済み画素群５６ａに含まれる画素数が少ないと（量子化済み画素群５６ａの大きさが小さいと）、印刷されるドットの数が多くなり、それだけドットが目立つことになる。そこで、上述したように閾値を変更して、量子化済み画素群５６ａの大きさを一定に保つことで、ドットが一定の密度で生成されることになる。また、このように生成した量子化済み画素群５６ａでドットが生成される位置は、この画素群５６ａの重心位置である。したがって、入力画像の入力分布に忠実な出力ドットを得ることが可能となり、快適な印刷出力を得ることができるのである。
【００７７】
図１２を参照して、一つの量子化済み画素群５６ａについて、複数の画素に量子化データを付与する変形例を説明する。図１２（ａ）を参照して、量子化中画素群５６ｃが画素（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１）、（ｎ＋１、ｍ＋２）により構成されている。ここで、量子化中画素群５６ｃの各画素の階調画像データ値の総和は２５５であり、閾値（＝２５５）に達する。そこで、これまで説明してきた実施形態によれば量子化中画素群５６ｃの重心５６ｄが位置する画素（ｎ＋１、ｍ＋１）に量子化画像データ”２５５”が
付与される（図１２（ｂ）参照）。しかし、この変形例では、図１２（ｃ）に示すように、８５＝２５５／３の量子化画像データを、画素（ｎ＋１、ｍ）、（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋２）に付与する。この場合、これらの量子化画像データが付与された画素全体の重心は、画素（ｎ＋１、ｍ）の中心、画素（ｎ、ｍ＋１）の中心および画素（ｎ＋１、ｍ＋２）の中心を頂点とする直角二等辺三角形の重心であり、画素（ｎ＋１、ｍ＋１）に位置する。しかも、これらの量子化画像データが付与された画素の量子化画素データの総和＝８５×３＝２５５である。
【００７８】
このような変形例によっても、量子化画像データが付与された画素全体で見れば、量子化済み画素群５６ａの階調画像データの濃度分布に対応し、量子化誤差も無い。なお、このように複数の画素に量子化データを付与しても、パルス幅変調部６８を使用することにより印刷が可能である。
【００７９】
また、既に量子化済み画素群５６ａで決定した重心と、現在量子化済み画素群５６ａで決定した重心とに位置する画素が一致する場合も考えられる。図１３にその例を示す。図１３に示すように、（ｎ＋２、ｍ＋１）、（ｎ＋１、ｍ＋２）、（ｎ＋２、ｍ＋２）、（ｎ＋３、ｍ＋２）及び（ｎ＋２、ｍ＋３）の５つの画素以外のまわりの２０個の画素で量子化済み画素群５６ａが構成され、その画素群５６ａの重心に位置する画素（ｎ＋２、ｍ＋２）は、その５つの画素から構成される量子化済み画素群５６ａの重心に位置する画素（ｎ＋２、ｍ＋２）と一致している。これは、量子化済み画素群５６ａを構成する段階で、例えば最終的に残った画素から量子化済み画素群５６ａを構成すると（図１３の例では、まわりの２０個の画素から構成される画素群）、既に重心を演算した量子化済み画素群（図１３の例では、ほぼ中心に位置する５つの画素群）の重心と一致することがあるからである。かかる場合に、既にドットが形成された画素の位置に最も近い位置で、未だドットが形成されていない画素にドットを形成させるようにする。図１３の例では、中心付近にある５つの画素によって（ｎ＋２、ｍ＋２）の位置にドットが形成されるので、まわりにある２０個の画素による重心位置（ｎ＋２、ｍ＋２）で、その位置から最も近い位置であって未だドットが形成されない位置、例えばその隣の（ｎ＋３、ｍ＋２）や、（ｎ＋２、ｍ＋１）、（ｎ＋１、ｍ＋２）、又は（ｎ＋２、ｍ＋３）に“２５５”を与える。全くドットを形成させないようにすることも考えられるが、入力階調値に忠実なドット分布を得るようにするためには、このようにドットを形成させることが望ましい。
【００８０】
なお、これまで、本発明による画像出力システムをモノクロ入力画像に適用したものを前提として本発明の実施形態を説明してきた。しかし、本発明による画像出力システムをカラー入力画像に適用することもできる。図１４は、本発明による画像出力システムをカラー入力画像に適用したものの構成図である。
【００８１】
この例では、ホストコンピュータ５０において、ＲＧＢカラー画像データ５５が生成され、ページプリンタなどの画像出力装置６０に与えられる。ページプリンタなどの画像出力装置６０は、供給されたＲＧＢカラー画像データ５５に基づきカラー画像を再現する。画像出力装置６０は、画像処理を行ってエンジン７０にレーザ駆動用データ６９を供給するコントローラ６２と、前記駆動用データ６９に従って画像の再生を行うエンジン７０とを有する。
【００８２】
ホストコンピュータ５０は、ワードプロセッサや図形ツールなどのアプリケーションプログラム５２により、文字データ、図形データ及びビットマップデータ等を生成する。これらのアプリケーションプログラム５２により生成されたそれぞれのデータは、ホストコンピュータ５０にインストールされている画像出力装置用のドライバ５４により、ラスタライズされ、画素またはドット毎のＲＧＢデータからなるＲＧＢカラー画像データ５５に変換される。ＲＧＢカラー画像データ５５は、例えば、各画素における各色（赤：ＲＥＤ、緑：ＧＲＥＥＮ、青：ＢＬＵＥ）をそれぞれ８ビットすなわち０〜２５５までの値で示したＲＧＢデータの集合体である。
【００８３】
画像出力装置６０も、図示しないマイクロプロセッサを備え、そのマイクロプロセッサとインストールされている制御プログラムにより、色変換部６４、ハーフトーン処理部６６及びパルス幅変調部６８を有するコントローラ６２が構成される。
【００８４】
色変換部６４は、ＲＧＢカラー画像データ５５を受けて、Ｃ（シアン）、Ｍ（マゼンタ）、Ｙ（イエロー）、Ｋ（ブラック）の四色をそれぞれ８ビットで表現した合計８×４＝３２ビットの階調画像データ５６を生成する。階調画像データ５６は、例えば図３などに示したものと同様である。ただし、各画素には黒の濃度のかわりに、Ｃ（シアン）、Ｍ（マゼンタ）、Ｙ（イエロー）、Ｋ（ブラック）のうちのいずれか一つの色の濃度が記録されている。また、シアンなどの濃度が高すぎる場合に、白濃度に変換することもモノクロ画像の場合と同様である。
【００８５】
ハーフトーン処理部６６は、階調画像データ５６を受けて、量子化画像データ３０を生成する。ハーフトーン処理部６６（図２に示す画像処理装置に相当）の構成は前に説明した通りである。量子化画像データ３０はパルス幅変調部６８に与えられる。パルス幅変調部６８は、ドット毎にレーザ駆動パルス有りと無しからなる駆動データ６９を生成する。
【００８６】
エンジン７０内のレーザドライバ７２が、駆動用データ６９に基づいて、画像描画用のレーザダイオード７４を駆動する。エンジン７０には、感光ドラムや転写ベルト等とその駆動部が含まれるが、図１４では省略されている。
【００８７】
なお、ハーフトーン処理部６６（図２に示す画像処理装置に相当）は、ハーフトーン処理プログラムが画像出力装置６０によって実行されることによって構成されるようにしてもよい。このハーフトーン処理プログラムは、通常、画像出力装置６０が読取可能な形態でフロッピー（登録商標）ディスク、ＣＤ−ＲＯＭなどの記録媒体に記録されて流通する。当該プログラムは、メディア読取装置（ＣＤ−ＲＯＭドライブ、フロッピー（登録商標）ディスクドライブなど）によって読み取られてハードディスクにインストールされる。そして、ＣＰＵが所望のプログラムを適宜ハードディスクから読み出して所望の処理を実行するように構成されている。あるいは、画像出力装置６０がＲＯＭなどの記録媒体を有しており、ハーフトーン処理プログラムがこのＲＯＭに記録されるようにしてもよい。
【００８８】
上述した実施例では、初期走査により初期画素を探索するときに、量子化済み画素群５６ａを除いた未処理画素のうち、走査方向で最も上の行のうち最も左側にある画素を走査対象、選択対象としている。例えば図５（ｄ）において、初期画素を画素（ｎ、ｍ）として量子化済み画素群５６ａを構成し、次に初期走査を行って、初期画素を画素（ｎ＋２、ｍ）として量子化済み画素群５６ａを構成している。順次これを繰り返すと、最終的に１画像において図１５（ａ）に示す複数の量子化済み画素群５６ａが構成されることになる。
【００８９】
図１５（ａ）に示すように、最も上の行に位置する複数の量子化済み画素群５６ａとその下の行に位置する複数の量子化済み画素群５６ａとは、若干のずれを持って配置されている。そしてさらにその下の行に位置する量子化済み画素群５６ａもその上にある行から若干のずれをもって配置される。これは、量子化済み画素群５６ａが円状に構成され、未処理画素のうち最も上の行の、最も左側に位置する画素を選択すると、１つの行で隣合う量子化済み画素群５６ａの間（円と円の間の隙間）に初期画素を選択する可能性が高くなるためである。
【００９０】
このように構成された量子化済み画素群５６ａの重心にドットを生成させると、図１５（ｂ）に示すようにドットが形成される。このように、上の行でのドットの中間位置に、その次の行のドットが生成されるように構成される。これにより、全体的にドットが斜めに生成されるように見え、斜め方向は人間の視覚に知覚されにくく、視覚的に快適な印刷出力を得ることができるのである。
【００９１】
一方、初期走査で初期画素を選択するときに、順次斜め方向に検索するように選択するときを考える。例えば図５（ｃ）のように量子化済み画素群５６ａを構成した場合で説明する。順次斜め方向に検索するには、走査方向に対して初期画素（ｎ、ｍ）から順次左下に検索し、当該画素がなくなったら、最上行（１行目）の最も左の未処理画素を基準に順次左下の画素を検索してこれを繰り返す。もし、ここで１行目に未処理画素がなければ、画像右端（最右列）の最も上の未処理画素を基準に順次左下の画素を検索してこれを繰り返す。すでに検索した画素が量子化済み画素群５６ａに組み込まれていれば、それを除いたものとなる。図５（ｃ）の場合は、まず画素（ｎ、ｍ）から左下の画素を探索すると当該画素は存在しないので、画素（ｎ、ｍ）の右側の画素（ｎ＋１、ｍ）を探索する。これはすでに量子化済み画素群５６ａに組み入れられているため、当該画素は除き、次にこの画素の左下の画素（ｎ、ｍ＋１）を探索する。これも量子化済み画素群５６ａに含まれているため、さらに左下、当該画素が存在しないと、画素（ｎ＋２、ｍ）を探索し、この画素は量子化済み画素群５６ａに組み込まれていないため、この画素が初期画素として量子化済み画素群５６ａを構成していくことになる。
【００９２】
これを繰り返し、最終的に得られた１画像中の量子化済み画素群５６ａは、図１６（ａ）のように構成される。斜め方向に円状の量子化済み画素群５６ａが一定の大きさをもって構成されることになる。しかしながら、この重心位置にドットを生成させると、図１６（ｂ）に示すように各行、各列ほぼ一直線にドットが配置されることになる。このようなドットの形成は、図１５（ｂ）と比較してドットが目立ち易く快適な印刷出力とはいえない。
【００９３】
したがって、最も上の行の、最も左側に位置する未処理画素を探索するようにすることで、快適な印刷出力を得ることが可能となるのである。もちろん、走査方向に初期走査を行って初期画素を探索すれば、他の方法であってもよい。さらに、副走査方向に初期走査を行う場合であっても全く同様の効果を得ることができる。かかる場合は、例えば最も左側の列の最も上に位置する未処理画素を選択するようにすればよいことになる。
［第２の実施例］
次に本願発明の第２の実施例について、図１７から図２９を参照して説明する。
【００９４】
図１７は、本願発明が適用される画像出力装置６０のハード構成図を示す図である。画像出力装置６０は、全体としてＣＰＵ６１、入力インターフェース（入力Ｉ／Ｆ）６３、ＲＯＭ６５、ＲＡＭ６７、及び印刷エンジン７０とから構成されている。ここで、図１との対応関係は、ハーフトーン処理部６６が、ＣＰＵ６１、入力Ｉ／Ｆ６３、ＲＯＭ６５、及びＲＡＭ６７とから構成され、パルス変調６８がＣＰＵ６１、ＲＯＭ６５、及びＲＡＭ６７とから構成されることになる。また、エンジン７０は、印刷エンジン７０に対応している。
【００９５】
ＣＰＵ６１は、内部バスを介して、入力Ｉ／Ｆ６３、ＲＯＭ６５、ＲＡＭ６７、印刷エンジン７０と互いにに接続され、重心位置の演算や、未処理画素の選択等、各種処理を実行するためのものである。詳細は後述する。
【００９６】
入力Ｉ／Ｆ６３は、ホストコンピュータ５０と画像出力装置６０とのインターフェースとしての役割を果たし、本実施例では、ホストコンピュータ５０から出力される、ラスタライズされた各画素ごとに所定の階調値を有する入力画像データが入力される。入力された画像データはＣＰＵ６１の制御により一旦ＲＡＭ６７に格納される。
【００９７】
ＲＯＭ６５は、各種プログラムが格納される。ＣＰＵ６１の制御によりプログラムが読み出されて、各種処理が実行されることになる。
【００９８】
ＲＡＭ６７は、ＣＰＵ６１が処理を実行する際のワーキングメモリとしての役割を果たし、実行データ等が一時格納される。
【００９９】
印刷エンジン７０は、図１のエンジン７０と同様の構成で、レーザドライバ７２及びＬＤ７４とから構成される。
【０１００】
次に、入力された画像データからドットを形成するまでの、画像出力装置６０の動作について図１６から図２６を参照して説明する。
【０１０１】
まず、ＣＰＵ６１は、ＲＯＭ６５に格納されたプログラムを読み出して、処理が開始される（ステップＳ４０）。このとき、すでに入力画像データは入力Ｉ／Ｆ６３を介してＲＡＭ６７に格納されているものとする。もちろん、この処理の開始をトリガにしてホストコンピュータ５０から入力画像データを入力Ｉ／Ｆ６３を介してＲＡＭ６７に取り込まれるようにしてもよい。このとき、入力画像データは、ＲＡＭ６７の所定領域である入力バッファ領域に格納される。この例を図２０（ａ）に示す。
【０１０２】
ＲＡＭ６７は、図２０（ａ）に示すように、入力バッファ領域６７１と、ワーキングメモリ領域６７２と、出力バッファ領域６７３とから構成される。この入力バッファ領域６７１は、２次元構造を有しており、例えば上述の入力画素（ｎ、ｍ）に位置する画素は、入力バッファ領域の（ｎ、ｍ）のアドレスに格納される。入力画素の位置に対応するように入力バッファ領域６７１が構成される。実際には、このアドレスには入力画像データの階調値が格納されることになる。図５（ａ）や図８（ａ）に示す入力画素が入力されると、図２０（ｂ）に示すように入力バッファ６７１に各階調値が格納される。ワーキングメモリ領域６７２は、重心位置の演算結果と階調値の演算結果が格納され、出力バッファ領域６７３は入力バッファ６７１と同様に入力画素に対応するように構成される。詳細は後述する。
【０１０３】
次いで、ＣＰＵ６１は、初期画素を決定して、初期濃度重心を演算する（ステップＳ４１）。初期画素の決定は、ＲＡＭ６７の入力バッファ６７１に格納された入力画像データのうち、第１の実施例と同様に入力画素の位置で最も上の左側に位置する画素をＣＰＵ６１が選択する。すなわち、図２０（ｂ）に示す例では、（ｎ、ｍ）に対応する位置に位置する画素を初期画素としてＣＰＵ６１は判断する。そして、ＣＰＵ６１は初期画素の位置する画素の階調値と、そのアドレス位置とを読み出し、重心を演算する。以下、説明を簡単にするため、（ｎ、ｍ）＝（０，０）として説明する。ＣＰＵ６１が演算する重心は具体的には、以下の演算式を用いる。
【０１０４】
（式１）
2004266793.tif 000003
この演算式はＲＯＭ６５に格納され、ステップＳ４１にてＣＰＵ６１が読み出して演算を行うことになる。ちなみに、初期画素の場合は、量子化中画素群の重心のｘ、ｙ座標、及び量子化中画素群の重心の階調値はともに０として演算される。（式１）にこれらの値と、読み出した初期画素の位置と階調値とを代入して演算すると、重心位置は（ｘ重心、ｙ重心）は（０，０）となる。なお、ＣＰＵ６１は、演算した重心位置と、初期画素の階調値とを上述した、ワーキングメモリ領域６７２に格納する（図２０（ｃ）参照）。その後の演算処理をスムーズに行うためである。
【０１０５】
また、ＣＰＵ６１は、選択した初期画素に対応する入力バッファ６７１に“−１”を格納する。後述する未処理画素の選択で、すでに選択された画素の選択を回避するためである。さらに、ＣＰＵ６１は、ステップＳ４２で初期画素が低濃度と判断された場合は、その時点で初期画素に対応する出力バッファ２７３に“０”を格納し、ステップＳ４２で初期画素が高濃度と判断された場合は、その時点で初期画素に対応する出力バッファ２７３に“２５５”を格納する。初期画素に（黒又は白）ドットが打たれなかった場合に、正しい出力を行うためである。この画素にドットをうつ処理を行うためである。なお、入力バッファ６７１に“−１”を格納させているが、これに拘泥せず、他の負の値でもよい。さらに入力バッファ６７１と同様の構成のメモリ領域を用意して、選択した画素の対応する位置にフラグを立てて、選択画素が処理済みか否かを判別するようにしてもよい。
【０１０６】
次いで、ＣＰＵ６１は、決定した画素が低濃度か否か判断する（ステップＳ４２）。具体的には、ＲＯＭ６５に格納された閾値“１２７”を読出し、ＲＡＭ６７の入力バッファ６７１から読み出した初期画素の階調値と比較し、閾値よりも低い場合はステップＳ４３に移行し、閾値と同じか大きいときはステップＳ５３に移行する。ここで、低濃度と判断される場合（ステップＳ４２で“ＹＥＳ”の場合）とは、選択した画素が黒成分が少なく白成分が多い場合である。その後の処理で黒ドットを形成させる処理に移行させるためである。一方、低濃度ではないと判断された場合（ステップＳ４２で“ＮＯ”の場合）は、選択した画素が黒成分が多く白成分が少ない場合で、その後の処理で白ドットを形成させる処理（ステップＳ５３）に移行することになる。
【０１０７】
ステップＳ４２で低濃度と判断された場合（ステップＳ４２で“ＹＥＳ”の場合）、ＣＰＵ６１は、未処理画素の選択を行う（ステップＳ４３）。ここで未処理画素の選択は、第１の実施例で説明したように、重心を利用して画素の選択を行う。上述したように重心を利用して画素の選択を行うため、最終的に生成される量子化済み画素群の形状は、円状となり、その重心にドットを形成させることで、ドット間距離が均一となり、視覚的に快適な印刷出力を得ることができる。
ここで、未処理画素の選択は、ステップＳ４１で演算した重心から最も近い距離にある画素が選択されるが、入力画像データはＲＡＭ６７の入力バッファの所定位置に格納されているので、アドレス（１、０）にある画像データか、アドレス（０，１）にある画像データが選択される。２つの画素ともアドレス（０，０）から等距離にあるからである。ここで、いずれかの画素を選択する必要があるが、第１の実施例と同様にランダムにＣＰＵ６１が選択するものとする。上述したようにランダムではなく固定順に選択すると量子化済み画素群の形状が規則的に並び重心位置にドットを形成すると図４（ｂ）に示すように周期パターンが発生するからである。ランダムに選択することで視覚的に快適な印刷出力を得ることができる。ここでは、例えば（１，０）の画素をＣＰＵ６１が選択するとすると、図８（ｂ）に示すように選択した隣の画素が量子化中画素群５６ｃとして初期画素とともに組み込まれることになる。
【０１０８】
ここで、重心位置は上述の（式１）で示されているように必ずしも整数値になるとは限らない。重心に最も近い画素を選択する場合のほかに、重心が位置する画素に最も近い画素を選択する場合でもよい。このようにすることで、重心位置は整数値として演算でき、ＣＰＵ６１の処理する計算量が減ることが期待できる。ただし、演算した重心位置が小数点を含む場合があるので、演算した重心位置のｘ、ｙ座標のそれぞれに０．５を足して、その位置に重心が位置する画素として、画素を選択することも可能である。
【０１０９】
なお、選択した画素は、図２０（ｃ）や図２１（ａ）に示すように選択した画素に対応するＲＡＭ６７の出力バッファ６７３に“０”がＣＰＵ２１によって格納されることになる。
【０１１０】
次いで、ＣＰＵ６１は、閾値制御処理を行う（ステップＳ４４）。後述する閾値が一定の場合では、入力画像データの階調値が低い領域では出力ドットの密度は低くなり、また階調値が中間値（例えば“１２０”など）の領域では出力ドットの密度が高くなり、印刷出力全体としてのドットの分布密度が一定とならない。印刷出力のうち、ある領域では多くドットが打たれ、ある領域ではドットが少ないため全体として快適な印刷出力を得ることができない。そこで、閾値を変更することで、量子化済み画素群５６ａの大きさ、すなわち量子化済み画素群５６ａを構成する画素数が一定となり、一定密度のドット分布を得ることができる。
上述の例では、（０、０）の画素と（１，０）の画素の２つの画素のみしか選択されていないので、閾値の変更は行われず、ＣＰＵ６１は、次の処理に移行する。閾値変更する場合の処理は後述する。
【０１１１】
次いで、ＣＰＵ６１は、濃度の合計が閾値に達したか否か判断する（ステップＳ４５）。すなわち、選択した未処理画素の階調値を含めた濃度の合計（階調値の合計）が閾値“２５５”に達したか否か判断される。具体的には、ＣＰＵ６１は、ＲＡＭ６７のワーキングメモリ６７２に書き込んだ画素の階調値と、ステップＳ４３で選択した画素の入力バッファ６７１に格納された階調値とを読出し、その合計を演算して、ＲＯＭ６５に格納された閾値（ここでは“２５５”の値）とを比較する。例えば図２０（ｃ）の例では、ワーキングメモリ６７２には階調値“５０”、アドレス（１，０）格納されている階調値は“５０”であるので、その合計は“１００”となる。よって合計値は閾値に達しないことになる。
【０１１２】
階調値の合計が閾値を超えない場合（ステップＳ４５で“ＮＯ”の場合）、ＣＰＵ６１は、選択した未処理画素を含めた重心の演算を行う（ステップＳ４６）。具体的なＣＰＵ６１の演算は、上述した式（１）の演算式を用いて行うことになる。これまで求めた重心のｘ、ｙ座標は、（０，０）で重心の階調値は“５０”、未処理画素のｘ、ｙ座標は（１，０）で、その階調値は“５０”とすると、演算される重心位置は（０．５，０）となる。このステップＳ４６で演算した重心位置は、ＣＰＵ６１の制御によってＲＡＭ６７のワーキングメモリ６７２に格納される。ステップＳ４１でワーキングメモリ６７２には初期画素の重心位置が格納されていたが、ここではその位置に上書きして格納する。その格納後の例を図２１（ａ）に示す。
【０１１３】
次いで、ＣＰＵ６１は、階調値の演算を行う（ステップＳ４７）。ここでの演算は、ＲＡＭ６７のワーキングメモリ６７２に書き込まれた階調値とステップＳ４３で選択した画素の階調値との合計を演算する。演算した結果は、再びＲＡＭ６７のワーキングメモリ６７２に上書きして書き込む。この例を図２１（ｂ）に示す。
【０１１４】
ここで、ＣＰＵ６１は、未処理画素の選択（ステップＳ４３）で選択した画素に対応する入力バッファ６７１に“−１”を格納する。再度未処理画素の選択で、当該画素を選択されないようにするためである。この階調値の演算でこのような処理を行うのは、入力バッファ６７１に格納された階調値はその合計値としてワーキングメモリ６７２に格納され以後の処理で必要とされないからである。
【０１１５】
次いで、ＣＰＵ６１は、ステップＳ４６で演算した階調値の合計が、閾値と等しいか否か判断する（ステップＳ４８）。具体的には、ステップＳ４７でＲＡＭ６７のワーキングメモリ６７２に格納された階調値と、ＲＯＭ６５に格納された閾値とをＣＰＵ６１が読み出して、両者を比較することで実行される。図２１（ｂ）の場合は、まだ閾値に達していない（ステップＳ４８で“ＮＯ”の場合）ので、第１の実施例と同様に未処理画素を量子化中画素群５６ｃに次々を組み込み、その合計値が閾値（ここでは“２５５”）に達するまで処理が繰り返されることになる。すなわち、これまで量子化中画素群５６ｃに組み込まれた画素の階調値の合計は、ＲＡＭ６７のワーキングメモリ６７２に格納されているので、その値と閾値とを比較することで、閾値に達するまで量子化中画素群５６ｃを構成していくことができる。上述したようにＣＰＵ２１は、選択した未処理画素に対応する出力バッファ６７３の位置に“０”を格納する。
【０１１６】
そして、閾値と等しいとＣＰＵ６１が判断した場合（ステップＳ４８で“ＹＥＳ”の場合）、処理はステップＳ４９に移行し、すでに演算した重心位置に位置する画素に黒ドットを形成する処理を行う。具体的には、ＲＡＭ６７の出力バッファ６７３の入力画素の位置に対応するアドレス位置に“２５５”を書き込む。出力バッファの構造も入力バッファと同様に２次元構造で、入力画素の位置に対応するアドレス空間を有している。重心が位置するアドレスに“２５５”を書き込むことで、その後、実際にその位置に対応する位置にドットをうつことができる。
【０１１７】
次いで、ＣＰＵ６１は、未処理画素があるか否か判断する（ステップＳ５１）。すなわち、上述した処理をＲＡＭ６７の入力バッファ６７１に書き込まれたすべての階調値に対して行ったか否かで判断し、未処理画素があれば（“ＹＥＳ”の場合）再び処理はステップＳ４１に移行し、上述の処理を繰り返し、すべての画素に対して処理が終了すれば（“ＮＯ”）、ＣＰＵ６１はステップＳ５２に移行し、処理が終了することになる（ステップＳ５２）。
【０１１８】
一方、ステップＳ４５で濃度の合計が閾値を超える場合（“ＮＯ”の場合）、処理はステップＳ５５に移行し、閾値超えた場合の重心演算処理を行う（ステップＳ５５）。これは、図２１（ｃ）に示すように、最終的に選択された画素が（１、２）に位置する画素であるとき、すなわちステップＳ４３で選択した画素がこの画素であるとき、量子化中画素群の階調値の合計を演算するとすると“２６５”になり、閾値“２５５”を超えることになる。したがって、このような場合はステップＳ４５で“ＹＥＳ”が選択されてステップＳ５５に移行することになる。図２３は、閾値を超えた場合の重心演算処理の動作を示す。
【０１１９】
まず、ＣＰＵ６１は、閾値から濃度の合計、すなわち閾値からこれまでステップＳ４６で演算した階調値の合計値を引く演算を行う（ステップＳ５５０）。例えば図５（ｂ）に示す例では、閾値は“２５５”、ステップＳ４６でこれまで演算した階調値の合計は“２００”であるので、２５５−２００＝５５の値を演算する。上述したようにこれまで選択した画素の階調値の合計は、ＲＡＭ６７のワーキングメモリ６７２に格納され、閾値はＲＯＭ６５に格納されているのでＣＰＵ６１がこれらを読み出して演算することができる。
【０１２０】
そして、ＣＰＵ６１は、この“５５”の値を画素（１、２）の階調値として重心の演算を行う（ステップＳ５５１）。重心の演算は具体的には、以下の演算式を用いる。
【０１２１】
（式２）
2004266793.tif 000004
（式１）との違いは、選択した未処理画素の階調値をそのまま用いるのではなく、量子化画素群５６ｃの合計が閾値と同じになるような階調値を用いる点が異なる。この演算式は、（式１）の場合と同様に予めＲＯＭ６５に格納されており、ＣＰＵ６１が本ステップを実行する際にＲＯＭ６５から読み出すことで実行される。ここでは、最終的にステップＳ４３で選択した画素の階調値は、これまで演算した階調値の合計との和をとることで閾値と等しくなるように演算して、それをもとに重心位置を求めることになる。そしてＣＰＵ６１は、演算した重心位置を再びＲＡＭ６７のワーキングメモリ６７２に値を書き込む（図２２（ａ）のワーキングメモリ６７２参照）。また、ＣＰＵ６１は、最終的に選択した画素の元の階調値からステップＳ５５０で演算した演算結果を引いた値を演算して、その値を再びその選択した画素の入力バッファに書き込む（ステップＳ５０）。これにより、当該画素の階調値が、戻しデータとして格納される。図２２（ａ）に示す例では、ステップＳ５５０で演算した“５５”を最終的に選択した（１、２）の画素の階調値“６５”から引いて“１０”の値を求め、これをＲＡＭ６７の入力バッファ６７１のアドレス（１、２）に再び書き込む（図２２（ａ）の入力バッファ６７１参照）。そして、この画素は量子化済み画素群５６ａに組み込まれず、初期走査において量子化中画素群に組み入れられ重心位置の演算に利用されることになる。上述したように、戻しデータを量子化済み画素群５６ａ以外の画素に戻すのではなく、戻しデータが発生した画素に再び格納させることで、入力階調値に忠実なドット分布を形成することができる。そして、ＣＰＵ６１は、式２で求めた重心位置に黒ドットを形成する処理を行う。これは上述したように出力バッファの入力画素位置に対応するアドレスに“２５５”を書き込むことで処理が行われる。その後、処理はステップＳ５１へ移行し、上述した処理が繰り返されることになる。ちなみに、ＣＰＵ６１は、入力バッファ６７１の対象画素の階調値を“０”にすることで量子化画素群５６ａを構成している（図２２（ａ）の入力バッファ６７１参照）。そして、重心位置の存在する画素に対応する出力バッファ６７３に“２５５”を格納させる。これによりＣＰＵ６１は、その後の処理で重心位置の存在する画素にドットをうつことができる。その例を図２２（ａ）に示す。
【０１２２】
一方、ステップＳ４２で、決定した画素が低濃度でない場合（“ＮＯ”の場合）、処理は白濃度処理へと移行する（ステップＳ５３）。この処理の詳細を図２２に示す。本処理は、画素の階調値が白成分よりも黒成分の方が多いため、白ドットを生成するための処理である。なお、入力画素のデータは図６に示すデータが入力されるものとして以下説明する。ここでは、初期画素は、図６（ａ）の（ｎ、ｍ）に位置する画素であるものとし、図６（ａ）に示す階調値がそれぞれＲＡＭ６７の入力バッファ６７１に格納されているものとする（図２５（ａ）参照）。黒濃度の処理と同様に位置座標も入力バッファのアドレスに対応しているものとする。なお、白濃度前段の処理であるステップＳ４１により初期画素は（ｎ、ｍ）で、その重心位置は式１により（ｎ、ｍ）が演算され、その位置座標がＲＡＭ６７のワーキングメモリ６７２に既に格納され、その階調値“２０５”もメモリ６７２に格納されているとする。また、初期画素の位置に対応する入力バッファ６７１も同様に“−１”が格納される。
【０１２３】
まず、白濃度処理に移行すると、ＣＰＵ６１は、未処理画素の選択を行う（ステップＳ５３０）。ここでの未処理画素の選択も上述したステップＳ４３と同様に重心を利用して選択する。ドット間距離を均一に保つためである。初期画素は、（ｎ、ｍ）であるので、重心を利用すると最も近い画素は（ｎ＋１、ｍ）と（ｎ、ｍ＋１）の２つの画素がある。ＣＰＵ６１は、ステップＳ４３と同様にランダムに選択する。ドットの周期パターンの発生を抑えるためである。ここでは、（ｎ＋１、ｍ）の画素を選択するとする。上述したように重心利用する場合に重心位置そのものを利用する以外にも、重心が位置する画素に最も近い画素を選択する場合でもよい。
【０１２４】
次いで、ＣＰＵ６１は、入力階調値の最大値から、初期画素も含めステップＳ５３０で選択した未処理画素の階調値を減算する（ステップＳ５３１）。図６（ａ）に示す例では、（ｎ、ｍ）に位置する初期画素の階調値は、“２０５”なので、入力階調値の最大値である“２５５”から減算すると、“５０”となる。また、ステップＳ５３０で選択した未処理画素は（ｎ＋１、ｍ）であるとすると、その階調値“２０５”を最大値“２５５”から減算すると“５０”を得る。この入力画素の階調値の最大値は、ＲＯＭ６５に格納されており、また、選択した画素の階調値は上述したようにＲＡＭ６７の入力バッファ６７１に格納されているので、ＣＰＵ６１がこれらの値を読み出すことで、演算することができる。演算した結果はＣＰＵ６１の制御によりＲＡＭ６７のワーキングメモリ領域６７２に格納される（図２５（ｂ）参照）。
【０１２５】
なお、図１８に示す処理のうちステップＳ４２において画素が低濃度か否かを判定せず、黒成分が多く白成分が少ない画素群に対しても低濃度の場合と同様の処理（ステップＳ４３からステップＳ４９）を行うと以下のような問題が生じる。すなわち、もともと黒成分が多い画素が多数存在するため、初期画素から閾値に達するまで量子化中画素群から重心位置を決定すると、量子化中画素群はすぐに閾値に達してしまう。例えば図６（ａ）の場合では、２つの画素（（ｎ、ｍ）と（ｎ＋１、ｍ））で閾値に達することになる。かかる場合に重心位置から黒ドットをうつべき画素は、２つの画素のいずれか（例えば（ｎ、ｍ））である。そして、余った戻りデータを、例えば（ｎ＋１、ｍ）に戻して、再びこの画素を含めた量子化中画素群を初期画素（例えばこの（ｎ＋１、ｍ））から探索すると、重心利用して選択される画素は例えば（ｎ＋１、ｍ）となる。これに初期画素の階調値を加えるとこの２つの画素で量子化済み画素群を形成して重心位置からいずれか１の画素に黒ドットを形成する。これを繰り返すことで、ほとんど黒ドットをうつことになり、白ドットは余りの戻しデータが少なくなるとようやく何もうたない白ドットを形成することになる。これでは、黒成分が多く白成分が少ない画素群に対して構成した白ドットは、誤差拡散法で問題となるワーム状で配置され視覚的に不快な出力結果となる。かかる理由により、白濃度と黒濃度とでステップＳ４２を境に異なる処理を行うようにしている。
【０１２６】
次いで、ＣＰＵ６１は、黒ドットの生成を行う（ステップＳ５３２）。これは、ステップＳ５３０で選択された画素が黒成分が多く白成分が少ないためであり、最終的に印刷エンジン７０では、入力画像データに対して黒成分が多い画素にはドットをうつ処理を行うためだからである。そして、後述する白ドット生成処理（ステップＳ５３７）で、重心位置にある画素に対してドットをうたないようにして印刷を行うのである。ＣＰＵ６１は、ステップＳ５３０で選択した画素に対して、上述したＲＡＭ６７の出力バッファ６７３の対応するアドレス位置に入力階調値の最大値（図６（ａ）の場合は“２５５”）を格納することで処理が行われる（図２５（ｂ）及び（ｃ）参照）。
【０１２７】
次いで、ＣＰＵ６１は、閾値制御処理を行う（ステップＳ５３３）。上述したステップＳ４４と同様に選択した未処理画素（ステップＳ５３０）を含めた入力階調値が低い領域などで、閾値を変更することで量子化済み画素群５６ａの大きさを一定として生成される白ドットが印刷出力全体として一定密度で分布することになる。上述した例では、この段階ではまだ（ｎ、ｍ）と（ｎ＋１、ｍ）に位置する画素しか選択されていないので、閾値の変更は行われない。閾値制御処理の詳細は後述する。
【０１２８】
次いで、ＣＰＵ６１は、階調値の合計が閾値を越えるか否か判断する（ステップＳ５３４）。ここでは、すでにワーキングメモリ６７２にこれまで選択した画素の階調値の合計が格納されているので、その値をメモリ６７２からＣＰＵ６１が読み出し、閾値はＲＯＭ６５に格納されているので、この読み出した閾値と比較して判断する。図２５（ｂ）の例では、メモリ６７２に“５０”が格納されているので、最大値“２５５”と比較すると、まだ閾値に達していないと判断される。
【０１２９】
超えない場合（ステップＳ５３４で“ＮＯ”の場合）は、処理はステップＳ５３５に移行して、ＣＰＵ６１は、未処理画素を含めた重心位置を演算する。重心の演算は、上述した式（１）と同様である。演算した重心位置は、ワーキングメモリ６７２にＣＰＵ６１の制御により格納される。初期画素（ｎ、ｍ）と、選択画素（ｎ＋１、ｍ）との重心位置を演算すると、式１により（ｎ＋０．５、ｍ）となる。これを黒処理と同様にワーキングメモリ６７２にＣＰＵ６１の制御により格納する。図２６（ａ）に例を示す。
【０１３０】
次いで、ＣＰＵ６１は、階調値の合計を演算する（ステップＳ５３６）。選択した画素の入力バッファ６７１に書き込まれた階調値とワーキングメモリ６７２に書き込まれた階調値の合計を演算する。演算した結果は、ワーキングメモリ６７２にＣＰＵ６１の制御により格納される。また、ＣＰＵ６１は、上述した黒成分処理の場合と同様に、選択した未処理画素の対応する入力バッファ６７１に“−１”を格納する。以後の処理で当該画素が未処理画素として選択されないようにするためである（図２６（ａ）参照）。
【０１３１】
次いで、ＣＰＵ６１は、演算した階調値の合計が閾値と等しいか否か判断し（ステップＳ５３７）、等しいを判断すると（“ＹＥＳ”の場合）、ステップＳ５３５で演算した重心位置に位置する画素に白ドットを生成する処理を行う（ステップＳ５３８）。具体的には、ＣＰＵ６１は、重心位置に位置する出力バッファの所定のアドレスに“０”を格納する。上述したようにこの時点で、出力バッファには、量子化済み画素群のうち重心位置にある画素以外は、入力階調値の最大値（“２５５”）が格納されており、重心位置にある画素にはドットをうたないことを示す“０”を格納することになる。これらは、量子化中画素群５６ｃの階調値から最大値を引いた値の合計が閾値に達するまで処理が繰り返されることになる（ステップＳ５３７で“ＮＯ”の場合）。
【０１３２】
次いで、未処理画素があるか否か判断され（ステップＳ５３９）、未処理画素があればステップＳ４１に再び移行して（“ＹＥＳ”の場合）、未処理画素がなくなるまで処理が繰り返される。未処理画素がなくなると（“ＮＯ”の場合）、処理が終了（ステップＳ５３９）することになる。
【０１３３】
一方、ステップＳ５３４で階調値の合計が閾値を超える場合（“ＹＥＳ”の場合）、処理はステップＳ５４１に移行し、ＣＰＵ６１は、閾値を超えた場合の重心演算処理を行う。ここでの重心演算処理は、図２３に示すように、上述したステップＳ５５での演算処理と同様である。すなわち、ＣＰＵ６１は、ＲＯＭ６５から閾値（ここでは“２５５”）を読出し、ステップＳ５３４で演算してＲＡＭ６７のワーキングメモリ６７２に格納された階調値の合計から引いて（ステップＳ５５０）、その値をもとに式２に示す重心の演算を行う（ステップＳ５５１）。図２６に示す例では、最終的にステップＳ５５０で（ｎ＋１、ｍ＋２）が選択されると、これまで選択した画素の階調値の合計は、メモリ６７２に格納された“２００”、選択画素の階調値は“１９０”で最大値“２５５”から引いた値が“６５”、であるから階調値の合計は“２６５”となる。この値は閾値“２５５”を超えているので、ステップＳ５３４で“ＹＥＳ”が選択され、ステップＳ５４１に移行する。そして、（閾値）―（濃度の合計）、すなわち２５５−２００で“５５”を得る。この値を選択画素（ｎ＋１、ｍ＋２）の階調値としてステップＳ５５１で重心位置を演算することになる。
【０１３４】
演算した重心位置は再びＲＡＭ６７のワーキングメモリ領域６７２に格納させ（図２６（ｃ）のワーキングメモリ６７２参照）、戻しデータを演算してその値をＲＡＭ６７の当該画素の入力バッファ６７１に上書きして格納する（図２６（ｃ）のワーキングメモリ６７２参照）。量子化済み画素群に組み込まれないようにするためである。これにより入力階調値に忠実な白ドットを形成することができる。そして、演算した重心位置に白ドットを形成すべく、出力バッファの対応位置に“０”を格納する（ステップＳ５４２、図２６（ｃ）の出力バッファ参照）。その後処理は再びステップＳ５３９に移行し、上述の処理が繰り返されることになる。
【０１３５】
次に、ステップＳ４４、及びステップＳ５３３の閾値制御処理について図２７のフローチャートを参照して説明する。
【０１３６】
上述したように、初期画素や未処理画素を含め選択した画素（ステップＳ４３、ステップＳ５３０）の入力階調値が低い値や中間階調値が連続すると、量子化済み画素群５６ａの大きさは一定とならず、生成される黒ドットや白ドットの密度が一定とならない。かかる場合に、印刷出力のドット分布が一定とならずにある領域ではドットが目立ち、ある領域ではドットが少なく、快適な印刷出力を得ることができない。そこで、量子化中画素群４５ｃの画素数により閾値を変更して一定の大きさの量子化済み画素群５６ａを構成し、ドット密度を一定にさせるようにする。
【０１３７】
図２７に示すように、閾値制御処理に移行すると（ステップＳ４４、ステップＳ５３３）、閾値を変更する（ステップＳ４４１）処理を行う。ここでは、毎回選択した未処理画素を含む画素数と、量子化中画素群５６ｃの階調値の合計とから、ステップＳ４５、Ｓ５３４で使用する閾値を変更する。そして、この変更した閾値を用いてステップＳ４５やステップＳ５３４で階調値の合計が閾値を超えるか否かを判断するのである。具体的には、ＲＡＭ６７のワーキングメモリに格納された量子化中画素群５６ｃの画素数と、階調値の合計とから変更閾値を演算により求めることにする。この演算式は所定の関数により表現されており、ＣＰＵ６１がＲＯＭ６５に格納されたこの関数を読出し、ワーキングメモリ６７２の画素数と階調値の合計をこの関数に入力させることにより、閾値を求めることができる。また、変更閾値を最初からＲＯＭ６５に格納させておきこの閾値変更の処理（ステップＳ４４１）でＣＰＵ６１が読み出して処理を行うようにしてもよい。
【０１３８】
図２８に示す例で具体的に説明する。入力画像の階調値が図１１（ａ）に示すように入力された場合、ＲＡＭ６７の入力バッファ６７１には図２８（ａ）に示すように格納される。そして、ステップＳ４１で初期画素として（ｎ、ｍ）に位置する画素が選択されて、その重心を演算すると（ｎ、ｍ）となるため、その重心位置と階調値が図２８（ｂ）に示すワーキングメモリ６７２にＣＰＵ６１によって格納される。さらに、ワーキングメモリ６７２には選択した画素の個数を格納する領域６７２ａを設けている。このステップＳ４１で初期画素（ｎ、ｍ）のみしか選択されていないため、この領域６７２ａには“１”がＣＰＵ６１によって格納される（図２８（ｂ）参照）。
【０１３９】
次いで、ステップＳ４３で未処理画素（ｎ＋１、ｍ）が選択されると、ワーキングメモリ６７２の個数格納領域６７２ａには、初期画素を含めた選択画素の個数の合計である“２”が格納される。そして、ステップＳ４６、Ｓ４７で無処理画素を含めた重心位置及び階調値の合計が演算されて、ワーキングメモリ６７２は図２８（ｃ）に示すように値が格納されることになる。
【０１４０】
そして、ステップＳ４３からステップＳ４８を繰り返し、４つの画素（（ｎ、ｍ）、（ｎ＋１、ｍ）、（ｎ＋１、ｍ）、及び（ｎ＋１、ｍ＋１））が量子化中画素群５６ｃに組み込まれるとする。そして、再びステップＳ４３で未処理画素（ｎ＋１、ｍ＋２）が選択されると、個数格納領域６７２ａにはこれまで、５個の画素を選択したため“５”が格納される（図２９（ａ）参照）。ここで、ステップＳ４４１のＲＯＭ６４に記憶された所定の画素数を４個とすると、量子化中画素群５６ｃの画素数（５個）が所定の画素数（４個）を超えたため、閾値変更処理（ステップＳ４４１）により、閾値変更をＣＰＵ６１が演算することになる。
【０１４１】
ステップＳ４４２でＣＰＵ６１は、量子化中画素数“５”と、これまでの階調値の合計値“４０”とから、ＲＯＭ６５に記憶された関数を読出し、変更された閾値を演算する。その結果、例えば閾値を“２５５”から“５０”に変更する。
そして、これまでの階調値の合計“４０”が閾値“５０”を超えないので、ステップＳ４６、Ｓ４７に移行し、最終的に選択された画素（ｎ＋１、ｍ＋２）を含めた重心位置と階調値の合計を演算する。演算結果は、上述したようにワーキングメモリ６７２に格納され、ステップＳ４８で階調値の合計“５０”が閾値“５０”と等しいため、ステップＳ４９以降への移行して、図２９（ｂ）に示すように出力バッファに“２５５”を格納させて、この画素にドットを生成させるようにして一連の処理が終了することになる。なお、白濃度処理Ｓ５３における閾値制御処理Ｓ５７３も同様の処理を行う。
【０１４２】
この例では、閾値を低くした場合を説明したが、入力階調値が中間階調値で連続する場合は、閾値が高くなるように演算される。
【０１４３】
このように、閾値を量子化画素群５６ｃの個数と階調値で変化させているため、量子化済み画素群５６ａの大きさは、ほぼ一定であり、ドットが一定の密度で生成されることになる。しかも、重心を利用してドットのＯＮ／ＯＦＦを行うようにしているので、入力画像の階調値の分布に忠実なドットを分布を生成することができる。
【０１４４】
上述した一連の処理が終了するとＣＰＵ６１は、ＲＡＭ６７の出力バッファ６７３に書き込まれた“２５５”（黒ドット生成する場合）や“０”（白ドット生成する場合）を読出し、印刷エンジン７０に当該データを出力させて、所定の印刷出力を得ることができる。
【０１４５】
以上説明してきたように本発明によれば、誤差拡散法で問題となる、ワームや、ドット生成の遅延、及び領域外のデータを歪み、を発生させることなく高画質の出力ドットを得ることができる。さらに、本発明によれば、画素の画像データを量子化する際に、画像のデータ分布に対応するようにすることが可能となる。
さらに、本発明によれば、ドットの分散性を向上させて視覚的に快適な印刷出力を得ることができる。
【０１４６】
［第３の実施例］
次に本発明の第３の実施例について、図３０乃至４５を参照しながら説明する。第３の実施例は、画素選択のための基準点をもとにして未処理画素を選択して、所定の大きさのセルを構成してその重心位置にドットを生成させるようにしたものである。第２の実施例では、画素選択の基準点を重心位置にして毎回画素選択時に更新するようにしていたが、毎回更新するのではなく、ある一定の更新パターンにより更新されるようにしてセルを構成するようにする。これにより、毎回重心位置を計算することがなく、他の処理を含めた全体の処理速度を上げることができるととも、未処理画素選択の基準点を固定にしたときに比べて、最終的に生成されるセルの形状がより円状に近づき視覚的に快適な出力ドットを得ることができる。
【０１４７】
まず、その概要を図３０乃至３４を参照して説明する。このうち図３０乃至図３２が、画素選択のための基準点を量子化中画素群の中心位置として毎回未処理画素を選択するときに更新される例を示し、図３３乃至図３４が基準点を中心位置として１回おきに更新される例を示す。
【０１４８】
ここで、中心位置は、階調値を利用した重心位置ではなく、その座標位置を利用した中心位置であって、その位置座標を（ｘ、ｙ）とすると以下の式により演算される（以下の式でＮは量子化中画素群の画素数）。
【０１４９】
（式３）
ｘ  ＝  Σｉ  ｘ  ｉ  ／  Ｎ
ｙ  ＝  Σｉ  ｙ  ｉ  ／  Ｎ
入力画像データとして、各画素、図３０（ａ）に示す階調値が入力される場合で説明する。図３０（ａ）は、説明を簡単にするために縦３画素、横４画素分の画像データが入力されている例であって、１フレーム分の画像データが入力される場合であってもよい。
【０１５０】
図３０（ａ）の入力画像データが入力されると、まず初期画素を選択するが第１の実施例や第２の実施例と同様に未処理画素のうち最も上の最も左側にある画素を選択する。最終的に生成される量子化済み画素群（セル）が１画像中斜め方向に傾いて配置される確率が高くなり、ドットが斜め方向に打たれ知覚されにくくするためである。図３０（ａ）の例では、（ｎ、ｍ）の位置の画素を初期画素として選択する。
【０１５１】
そして、初期画素を量子化中画素群５６ｃに組み入れ、その中心位置を（式３）を用いて演算すると図３０（ｂ）に示す位置に中心位置５６ｆが位置することになる。次に、その中心位置から最も近い位置に位置する未処理画素５６ｅを選択することになるが、かかる画素が複数ある場合には、第１の実施例等と同様にランダムに選択する。第２の実施例で説明したように、周期パターンの発生（図４参照）を抑えるためである。図３０（ｂ）に示す例では、中心位置５６ｆに最も近い位置は（ｎ＋１、ｍ）と（ｎ、ｍ＋１）の２つ存在するが、ここでは（ｎ＋１、ｍ）を選択することにする。
【０１５２】
次に、図３０（ｃ）に示すように選択した未処理画素５６ｅを量子化中画素群５６ｃに組み入れ、量子化中画素群５６ｃの画素選択のための基準点、すなわち中心位置を演算すると図３０（ｃ）の位置５６ｆに位置することになる。量子化中画素群５６ｃの階調値の合計は、この時点で“１００”であるのでさらに未処理画素５６ｅを選択することになる。本実施例でも第１の実施例等と同様に閾値を“２５５”と設定し、この値になるまで未処理画素５６ｅを選択することにする。
【０１５３】
次いで、この基準点（中心位置）５６ｆから最も近い画素を選択することになるが、図３０（ｃ）に示す例では、２つの画素（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１）が存在することになるが、ランダムに選択して（ｎ、ｍ＋１）の画素を未処理画素５６ｅとして選択することにする。
【０１５４】
そして、図３１（ａ）に示すように選択した未処理画素５６ｅを量子化中画素群５６ｃに組み入れ、その中心位置を（式３）を用いて演算すると、位置５６ｆに位置することになる。この時点での量子化中画素群５６ｃの階調値の合計は“１６５”となり、閾値に達しないのでさらに未処理画素５６ｅを選択することになる。中心位置５６ｆから最も近い距離にある画素は、（ｎ＋１、ｍ＋１）に位置する画素であるので、この画素を未処理画素５６ｅとして選択する。
【０１５５】
次いで、選択した未処理画素５６ｅを量子化中画素群５６ｃに組み入れ、その中心位置５６ｆを（式３）を用いて演算すると、図３１（ｂ）に示す位置にすることになる。この時点での量子化中画素群５６ｃの階調値の合計は“２１５”で、閾値に達しない。よって、未処理画素５６ｅを選択する。中心位置５６ｆから最も近い位置にある未処理画素は、（ｎ、ｍ＋２）、（ｎ＋１、ｍ＋２）、（ｎ＋２、ｍ）、（ｎ＋２、ｍ＋１）の４つの画素があるがランダムに選択して、ここでは（ｎ、ｍ＋２）に位置する画素を選択することにする。
【０１５６】
そして、選択した未処理画素５６ｅを量子化中画素群５６ｃに組み入れることになるが、その階調値の合計は“２６５”となり、閾値を超えてしまう。この場合も第１実施例等と同様に、閾値に達する分の階調値を量子化中画素群５６ｃに組み入れ、この未処理画素５６ｅに残りの階調値を戻して以後当該画素が未処理画素として選択されるようにする。第２の実施例等と同様に、入力階調値に忠実なドットを生成させるためである。ここでは、（ｎ、ｍ＋２）に位置する画素に対して“１０”を戻しデータとして与えることになる（図３１（ｃ）参照）。
【０１５７】
次いで、ここまで構成した量子化中画素群５６ｃは、その階調値の合計が閾値に達したので、量子化済み画素群５６ａとしてその重心位置にドットを生成させる処理を行う。重心位置の演算は、第２の実施例の（式１）と同様に演算することになり、図３２（ａ）の重心位置５６ｄを得る。
【０１５８】
そして、重心位置５６ｄに位置する画素にドットを生成させると、図３２（ｂ）に示す位置に生成されることになる。第１の実施例や第２の実施例と同様に、毎回重心位置を計算すると、（式１）や（式２）に示すよう処理演算が多くなるが、画素選択のための基準点を中心位置として演算し、最後に重心を演算することで、演算量を減らすことができるとともに、量子化済み画素群が円状に成長してドット間距離を保ち視覚的に快適なドット出力を得ることをできる。
【０１５９】
さらに、画素選択のための基準点を毎回更新するのではなく、１回おきに更新したり、２回おきに更新したり、予め回数を決めてその回数のときに更新するようにしてもよい。１回おきに更新する例を図３３乃至図３４を参照してその概要を説明する。
【０１６０】
また、重心位置そのものを演算せずに、画素選択に用いた中心位置にある画素にドットを生成させるようにしてもよい。例えば図３２（ａ）に示す例では、図３２（ｃ）の位置にドットが生成されることになる。この場合、中心位置が複数の画素の間に位置することも考えられるが、かかる場合には、例えばランダムにいずれか１つの画素を選択するようにしてもよいし、所定のテーブルを用いて複数の画素からいずれか１つの画素を選択するようにしてもよい。
【０１６１】
次に、１回おきに基準点（この例では中心位置）を更新する場合の概要を、図３３乃至図３４を参照して説明する。図３０等のときと同様に入力画像データが図３３（ａ）のように入力された場合で説明することにする。図３０（ｂ）と同様に、初期画素を選択してその中心位置５６ｆを演算すると図３３（ｂ）に示す位置に位置する。そして、未処理画素５６ｅを基準点（中心位置５６ｆ）から最も近い画素をランダムに選択すると（ｎ＋１、ｍ）に位置する画素となる。
【０１６２】
次いで、選択した未処理画素５６ｅを量子化中画素群５６ｃに組み入れるが、次に選択する未処理画素５６ｅは、組み入れた量子化中画素群５６ｃから演算した中心位置５６ｆに基づいて選択するのではなく、組み入れる前の中心位置５６ｆに基づいて選択する。この時点で基準点を更新しないようにする。図３３（ｃ）に示すように中心位置５６ｆから最も近い画素は（ｎ、ｍ＋１）となりこの画素を未処理画素５６ｅとして選択する。
【０１６３】
次いで、選択した未処理画素５６ｅを組み入れた量子化中画素群５６ｃは図３４（ａ）のようになる。そして、１回おきに基準点を更新するようにするので、この時点で構成した量子化中画素群５６ｃの中心位置５６ｆを演算すると図３４（ａ）に示す位置に中心位置５６ｆが移動することになる。
【０１６４】
次いで、この更新した中心位置を基準にして、この位置から最も近い未処理画素５６ｅを選択してその画素を量子化中画素分５６ｃに組み入れると図３４（ｂ）に示すようになる。そして、基準点を更新せず、１つ前に演算した中心位置５６ｆから最も近い画素を未処理画素５６ｅとして選択（（ｎ、ｍ＋２）の位置の画素を選択）して、量子化中画素群５６ｃを構成する。
【０１６５】
図３０の例と同様に、この選択した画素を組み入れた階調値の合計は閾値を超えるので、超える分を戻しデータとして、選択した画素に戻す。そして、ドット生成のための重心位置を演算すると図３４（ｃ）の位置５６ｄに位置し、この位置にドットを生成させるようにする。そして、基準点を更新させると、図３４（ｃ）の位置に基準点５６ｆが移動することになる。
【０１６６】
このように毎回、画素選択の基準点を更新するのではなく、１回おきに更新することでさらに演算量を減らすことができ、他の処理を含めた画像処理装置全体の処理速度の向上を図ることができる。さらに、初期画素の選択から４回目の未処理画素選択のときに基準点を更新し、さらにそれから３回目、２回目、・・・と、減算するように、当該回数のときに更新するようにすることでもよい。
【０１６７】
以上が概要であるが、具体的な処理について図３５乃至図４０のフローチャート、さらに図４１乃至図４４のＲＡＭ６７の例を適宜参照しながら具体的に説明する。なお、この処理の例は１回おきに基準点を更新する場合の例で説明することにする。
【０１６８】
まず、図３５に示すように、本処理が開始（ステップＳ６０）されると、ＣＰＵ６１は、初期画素を決定し、未処理画素選択のための基準点を初期画素の座標に設定する（ステップＳ６１）。図４１に示すＲＡＭ６７の構成で具体的に説明すると、図４１（ａ）に示すように入力バッファ６７１に入力画像データが入力される。各画素の階調値は図３０と同様である。なお、このＲＡＭ６７の構成は、図２０とほぼ同様であるが、ワーキングメモリ６７２が２つの領域６７２（ｂ）、６７２（ｃ）から構成される。これらの領域６７２（ｂ）、６７２（ｃ）を含めたＲＡＭ６７に格納される値は、第２の実施例と同様にＣＰＵ６１の制御によって行われる。領域６７２（ｂ）は、後で重心位置を演算できるよう、選択した未処理画素の階調値が入力されるように構成される。また、領域６７２（ｃ）は、基準点の位置座標と階調値の合計、さらに未処理画素選択の回数値が格納されるように構成される。
【０１６９】
初期画素は、最も上にある未処理画素で最も左側にある未処理画素が選択されるので、図４１（ｂ）の入力バッファ６７１に示すように（ｎ、ｍ）の画素が選択される。選択された画素は、以後未処理画素として選択されないように、“−１”が格納され、選択した画素の階調値が領域６７２（ｂ）に格納される。そして、上述の（式３）を用いて基準点を演算すると（０，０）、階調値の合計は“５０”、選択回数は初期画素のみなので“１”が、それぞれ領域６７２（ｃ）に格納される。
【０１７０】
図３５に戻り、次いで、ＣＰＵ６１は、決定した画素が低濃度か否か判定する（ステップＳ６２）。第２の実施例と同様に、黒ドットを形成させる処理と白ドットを形成させる処理とで異なる処理を行わせる必要があるからである。閾値は第２の実施例と同様に“１２７”とし、ＲＯＭ６５に格納されたこの値と、ステップＳ６１で選択した画素の階調値とを比較することで行なわれる。図４１（ｂ）に示す例では、選択した初期画素の階調値は“５０”なので、低濃度と判定され（ステップＳ６２で“ＹＥＳ”）、ステップＳ６３に移行する。
【０１７１】
ステップＳ６３では、ＣＰＵ６１は未処理画素の選択を行う。本実施例では、ステップＳ６１で設定した基準点から最も近い位置にある画素が選択されることになる。図４１（ｂ）の例では、基準点である中心位置は（０，０）なので、この位置に最も近い画素は、（ｎ＋１、ｍ）と（ｎ、ｍ＋１）の２つの画素が存在するが、第２の実施例と同様にいずれか１つをランダムに選択し、（ｎ＋１、ｍ）の画素を選択することにする。周期パターン発生を抑えるためである。そして、図４１（ｃ）に示すように、ＣＰＵ６１は、選択された画素の入力バッファ６７１の位置に“−１”、ワーキングメモリ６７２の領域６７２（ｃ）にはこれまで選択した画素数である“２”を格納し、さらに出力バッファ６７３にも対応する画素位置に“０”を格納する。
【０１７２】
次いで、ＣＰＵ６１は、閾値制御処理を行う（ステップＳ６４）。これも第２の実施例と同様に、入力階調値の低い値が連続した領域では複数の画素を選択してもその階調値の合計が閾値になかなか達することができないので、量子化済み画素群の大きさが一定の大きさに保つことができず、これを防止するために、選択された画素数から閾値を変更する処理を行う。
【０１７３】
閾値制御処理の動作を示すフローチャートを図３７に示す。第２の実施例と同様に、まず、ＣＰＵ６１は量子化中画素群を構成する画素数が所定の画素数に達したか否か判断される（ステップＳ６４０）。所定の画素数よりも多いと、閾値変更処理を行い（ステップＳ６４１）、そうでないと変更処理は行わず、ステップＳ６５に移行することになる。図４１（ｃ）に示す例では、所定の画素数（例えば第２の実施例と同様に“４”）に達しないので閾値変更することはせずに、ステップＳ６５に移行することになる。
【０１７４】
次いで、図３５に戻り、ＣＰＵ６１は濃度の合計が閾値を超えるか否か判断する（ステップＳ６５）。第２の実施例と同様に、ＣＰＵ６１は、ワーキングメモリ６７２の領域６７２（ｃ）に格納された階調値の値と、ステップＳ６２で選択した未処理画素の階調値との合計値が、ＲＯＭ６５に格納された閾値“２５５”と比較することで処理が行われる。この結果、閾値を超えた場合はステップＳ７５に移行し、超えない場合はステップＳ６６に移行する。図４１（ｂ）に示す例では、初期画素の階調値が“５０”で、選択した未処理画素の階調値は“５０”であるので、その合計は“１００”となり、閾値である“２５５”に達しないので、処理はステップＳ６６に移行することになる。
【０１７５】
ステップＳ６６では、ＣＰＵ６１は、基準点を更新するか否か判断される。ここでは基準点の更新は、本実施例では１回おきに更新していくことしているため、領域６７２（ｃ）に格納された選択回数が奇数回数のとき（３、５、７・・・）のとき更新するようにする。もちろん、２回おきに更新するなら、選択回数が４、７、１０、・・・のときに更新するようにする。回数が固定であれば領域６７２（ｃ）に格納された値を読み出して、その回数時に更新するようにすればよいことになる。さらに、その更新されるパターンとして、例えば最初の初期画素選択から４回目で更新し、次に更新するのは３回目、・・・と、最初の更新回数から減算させるようにして当該回数時に更新することでもよい。図４１（ｃ）の例では、領域６７２（ｃ）の選択回数は“２”となっているので、奇数回数ではないので更新することはせず（ステップＳ６６で“ＮＯ”）、ステップＳ６８に移行することになる。更新時の回数を予めＲＯＭ６５に格納させ、ＣＰＵ６１がこの値と、領域６７２（ｃ）に格納された回数とを比較することで処理が行われることになる。
【０１７６】
ステップＳ６８では、ＣＰＵ６１は、階調値の演算処理を行う。ワーキングメモリの領域６７２（ｂ）に書き込まれた階調値とステップＳ６３で選択した階調値との合計を演算し、その値を領域６７２（ｃ）の階調値合計を格納する位置に格納する。ここでは、初期画素の階調値と選択した未処理画素の階調値との合計は“１００”であるので、その値を格納することになる。
【０１７７】
次いで、図３６に示すように階調値の合計が閾値“２５５”と等しいか否かＣＰＵ６１は判断することになる（ステップＳ６９）。図４１（ｃ）に示す例では、ワーキングメモリ６７２の領域６７２（ｃ）には階調値の合計として、“１００”が格納されているので比較すると、閾値に達しておらず、“ＮＯ”が選択されステップＳ６３に移行する。
【０１７８】
そして、再び未処理画素を選択する（ステップＳ６３）。選択は、中心位置を基準に選択し、複数あればランダムに選択する。図４２（ａ）に示すように、（ｎ、ｍ＋１）に位置する画素を選択する。選択した画素の階調値は領域６７２（ｂ）の対応する位置に格納され、出力バッファ６７３にも“０”が格納される。そして、選択回数“３”が領域６７２（ｃ）に格納される。また、選択画素の入力バッファ６７１に“−１”を格納する。
【０１７９】
次いで、ＣＰＵ６１は、閾値制御処理に移行する（ステップＳ６４）。所定の画素数（例えば第２の実施例と同様に“４”）に達していないので閾値変更することはせずに、ステップＳ６５に移行する。図４２（ａ）の例では、上述した場合と同様に濃度の合計を演算すると“１６５”で閾値に達しないので、ステップＳ６５で“ＮＯ”が選択されステップＳ６６に移行する。
【０１８０】
次いで、基準点更新するか否かをＣＰＵ６１が判断する（ステップＳ６６）。図４２（ａ）の例では、領域６７２（ｃ）に格納された選択回数は“３”で、更新回数である“３”に一致するので、“ＹＥＳ”が選択され基準点の演算を行うことになる。基準点の演算は、ＣＰＵ６１によって、上述した（式３）を用いて演算する。その結果である（０．３，０．３）（小数点四捨五入）は、図４２（ａ）に示すように領域６７２（ｃ）に格納されることになる。次に未処理画素の選択を行うときは、この基準点を用いて演算することになる。
【０１８１】
次いで、階調値の合計値“１６５”を領域６７２（ｃ）に格納して（ステップＳ６８）、閾値と等しいか否か判定する（ステップＳ６９）。閾値に達しないので、再びステップＳ６３へ移行し、未処理画素の選択等の処理を行う。図４２（ｂ）に示すように（ｎ＋１、ｍ＋１）が未処理画素として選択して、上述した処理を行い、領域６７２（ｂ）と６７２（ｃ）に演算した値が格納されることになる。ただし、未処理画素の選択回数は“４”であるので、基準点の更新はせずに図４２（ａ）で使用した中心位置を利用して次の未処理画素を選択することになる。
【０１８２】
そして、ステップＳ６４からステップＳ６９までの処理を行って、ステップＳ６３に再び移行したとき（階調値の合計は“２１５”となるので閾値に達しないのでステップＳ６３に移行）、ＲＡＭ６７の格納値が図４２（ｂ）の状態になっていると、基準点を用いて未処理画素の選択を行うと、ステップＳ６３で（ｎ、ｍ＋２）の位置にある画素が選択されることになる。この場合に濃度の合計値が“２６５”で、閾値である“２５５”を超えているのでステップＳ６５で“ＹＥＳ”が選択され、ステップＳ７５に移行することになる。
【０１８３】
閾値超えた場合の階調値演算処理のフローチャートを図３８に示す。これも第２の実施例と同様にまず、閾値から濃度の合計値を減算する処理を行う（ステップＳ７５０）。図４２（ｂ）に示す例では、領域６７２（ｃ）に格納された階調値の合計値は“２１５”、閾値は“２５５”であるので、“４０”を得る。そして、その最後に選択された未処理画素（ｎ、ｍ＋２）の階調値を“４０”として、この画素を含めた重心の演算を行うことになる（ステップＳ７５１）。入力階調値に忠実にドットを生成させるためである。
【０１８４】
重心の演算は、第２の実施例のときと同様に（式２）を用いて演算することになる。そして、演算した重心に位置する画素に対応する出力バッファ６７３の位置にドットを生成することを示す“２５５”を格納させ（図４３（ｃ）の出力バッファ６７３参照）、残った階調値を選択した画素（ｎ、ｍ＋１）に戻すことになる（図３６のステップＳ７７）。画素（ｎ、ｍ＋２）の階調値は、この戻しデータを有するものとして以後未処理画素の選択対象となる。
【０１８５】
そして、未処理画素があれば（ステップＳ７２で“ＹＥＳ”の場合）、再びステップＳ６１に戻り、上述の処理を繰り返すことになる。未処理画素がなくなると（ステップＳ７２で“ＮＯ”）、一連の処理は終了することになる。
【０１８６】
一方、ステップＳ６９で閾値と階調値の合計値（ワーキングメモリ６７２の領域６７２（ｃ）に格納された値）とが等しい場合、ステップＳ６９で“ＹＥＳ”が選択されて、ＣＰＵ６１は、ステップＳ７０に移行し重心位置の演算を行う。
重心位置の演算は、ワーキングメモリ６７２（ｂ）に格納された各階調値等を（式１）に代入することで処理を行う。
【０１８７】
そして、ＣＰＵ６１は、演算した重心位置に位置する画素に対してドットを生成させることを示す“２５５”を対応する出力バッファ６７３に格納する（ステップＳ７１）。その後、未処理画素がなくなるまで上述の処理を繰り返すことになる。
【０１８８】
一方、図３５に戻りステップＳ６２で、決定した画素が低濃度でない場合（“ＮＯ”）のとき、処理はステップＳ８０に移行し、白濃度処理を行う。その処理のフローチャートを図３９に示す。これも第２の実施例と同様に、画素の階調値が白成分よりも黒成分の方が多く、重心位置に白ドットを生成させるようにする処理を行うためである。ここでも同様に未処理画素選択のための基準点が１回おきに更新される場合で説明する。また、図４３（ａ）の入力バッファ６７１に示す入力画像データが格納された場合で説明し、ステップＳ６１で初期画素として（ｎ、ｍ）が選択され、基準点として（０，０）、未処理画素選択回数“１”が各領域６７２（ｂ）、６７２（ｃ）に格納される。
【０１８９】
また、ステップＳ６２で低濃度でないと判断されると、領域６７２（ｂ）の階調値は、入力階調値で“２０５”ではなく、入力階調値の最大値から入力階調値を減算した値“５０”が格納され、さらに対応する出力バッファ６７３は、“２５５”が格納されるものとする（図４３（ｂ）参照）。
【０１９０】
図３９に戻り、ＣＰＵ６１は、白濃度処理（ステップＳ８０）に移行すると、まず未処理画素の選択を行う（ステップＳ８０１）。この選択は、図３５の処理と同様に中心位置を基準点として最も近い位置にある画素を選択する。複数あればランダムに選択することになる。図４３（ｃ）に示すように（ｎ＋１、ｍ）の位置にある画素を未処理画素として選択することにする。選択された画素の入力バッファ６７１に格納された値は、以後未処理画素として選択されないよう“−１”を格納し、ワーキングメモリ６７２の領域６７２（ｃ）には選択回数である“２”を格納する。
【０１９１】
次いで、ＣＰＵ６１は、ステップＳ８０２に移行し、入力階調値の最大値から選択した画素の入力階調値を減算する処理を行う。ステップＳ８０１で選択した未処理画素の階調値は“２０５”、最大値は閾値である“２５５”よって、減算すると“５０”を得る。この値は、領域６７２（ｂ）の対応する位置に格納されることになる（図４３（ｃ）参照）。
【０１９２】
次いで、ＣＰＵ６１は、ステップＳ８０３に移行し、黒ドット生成の処理を行う。第２の実施例と同様にステップＳ８０２で選択した未処理画素の対応する出力バッファ６７３の位置に“２５５”を格納させることになる（図４３（ｃ）参照）。
【０１９３】
次いで、ＣＰＵ６１は、閾値制御処理に移行する（ステップＳ８０４）。図４３（ｃ）に示す例では、まだ所定の画素数等に達していないので、閾値の変更を行わないことになる。ちなみに、閾値制御処理の詳細は、前述した図３７と同様の処理を行うことになる。第２の実施例と同様に量子化済み画素群の大きさを一定の大きさに保つためである。
【０１９４】
次いで、ＣＰＵ６１は、基準点更新するか否か判断する（ステップＳ８０６）。図３５の処理と同様にこれまで選択した未処理画素の回数が、所定回数に達したか否かで判断される。この例も１回おきに更新するようにしているため、選択回数が３、５、７・・・のときに更新することにする。よって、図４３（ｃ）に示す時点では、領域６７２（ｃ）には選択回数“２”が格納されているため、基準点の更新を行わず、“ＮＯ”が選択されて、ステップＳ８０８に移行する。
【０１９５】
ＣＰＵ６１は、ステップＳ８０８で階調値の演算を行う。上述した例と同様に、ステップＳ８０１で選択した未処理画素の階調値と、ワーキングメモリ６７２の領域６７２（ｃ）に格納された階調値との合計を演算する。図４３（ｃ）に示す例では、選択した未処理画素の階調値は“５０”、領域６７２（ｃ）には初期画素の階調値“５０”のみが格納されているので、その合計値は“１００”となる。そして、この値が再び領域６７２（ｃ）に格納されることになる（図４３（ｃ）参照）。
【０１９６】
次いで、ＣＰＵ６１は、ステップＳ８０９に移行し、階調値の合計値が閾値である“２５５”と等しいか否か判断される。等しいと判断される（“ＹＥＳ”の場合）と、処理はステップＳ８１０に移行し、等しくない（“ＮＯ”の場合）と判断されると、処理は再びステップＳ８０１に移行して未処理画素の選択を行うことになる。
【０１９７】
図４３（ｃ）に示す例では、階調値の合計が“１００”であるので、“ＮＯ”が選択されて、再び未処理画素の選択を行うことになる（ステップＳ８０１）。未処理画素の選択は、基準点（領域６７２（ｃ）に格納された値）から選択すると、図４４（ａ）に示すように（ｎ、ｍ＋１）となる。図４４（ａ）に示すように選択回数“３”が領域６７２（ｃ）に格納される。そして、最大値から選択画素の階調値を減算し、その値“６５”（＝２５５−１９０）をワーキングメモリ６７２の領域６７２（ｂ）に格納する（ステップＳ８０２）。対応する出力バッファ６７３に“２５５”を格納し（ステップＳ８０４）、選択した画素を含めた階調値の合計が閾値に達したか否か判断され（ステップＳ８０５）、その合計値は、“１６５”なので“ＮＯ”が選択され、ステップＳ８０６に移行する。
【０１９８】
ステップＳ８０６では、領域６７２（ｃ）に“３”が格納されているので、更新するための所定回数“３”に一致するので、“ＹＥＳ”が選択され、未処理画素を含めた基準点の演算を行う（ステップＳ８０７）。演算式は、上述の（式３）を用いてこれまで選択した３つの画素位置をもとに演算され、（０．３，０．３）（小数点四捨五入）を得る。この値がワーキングメモリ６７２の領域６７２（ｃ）に格納される。未処理画素の選択は、この基準点をもとにステップＳ８０１で選択を行うことになる。
【０１９９】
次いで、ＣＰＵ６１は、階調値の合計値“１６５”を演算して領域６７２（ｃ）に格納し（ステップＳ８０８）、閾値と等しいか否か判断される（ステップＳ８０９）。階調値の合計はまだ閾値である“２５５”に達していないので再び、未処理画素の選択等の処理を行うことになる。そして、ステップＳ８０１からステップＳ８０８を経ると図４４（ｂ）に示すようにＲＡＭ６７にそれぞれ値が格納される。この時点で階調値の合計が“２１５”で閾値に達しないので、再び未処理画素の選択を行う（ステップＳ８０１）。
【０２００】
次いで、ＣＰＵ６１は、領域６７２（ｃ）に格納された中心位置を基準点として未処理画素を選択して（ｎ、ｍ＋２）の画素を選択する（図４４（ｃ）参照）。この場合も、更新されていない基準点をもとに未処理画素を選択することになる。
【０２０１】
次いで、ステップＳ８０２からステップＳ８０４まで上述の処理を行い、選択した未処理画素を含めた階調値の合計が閾値を超えるか否か判断される（ステップＳ８０５）。階調値の合計は、図４４（ｃ）の例では、その合計値が“２６５”で閾値を超えるので、“ＹＥＳ”が選択されステップＳ８１５に移行する。
【０２０２】
白濃度処理における閾値を超えた場合の階調値演算処理（ステップＳ８１５）は、図３５等に示す処理と同様の処理が行われる（図３８参照）。この処理に移行するとＣＰＵ６１は、閾値から濃度の合計（領域６７２（ｃ）に格納された階調値の合計）を減算して、その値“４０”（＝２５５−２１５）を最後に選択した画素の階調値として領域６７２（ｂ）の対応する位置に格納する（ステップＳ７５０、図４４（ｃ）参照）。
【０２０３】
次いで、領域６７２（ｂ）に格納された値を用いて重心の演算を行う（ステップＳ７５１）。重心の演算は、第２の実施例の（式２）を利用して演算することになる。そして、その重心位置にある画素に対応する出力バッファ６７３に白ドットを生成させるための“０”を格納させ（図４４（ｃ）参照）、残った濃度である階調値を最後に選択した画素に戻す（図４０のステップＳ８１７）。
【０２０４】
そして、処理は、ステップＳ８１２に移行し、未処理画素があれば（“ＹＥＳ”の場合）図３５のステップＳ６１に移行し、上述の処理を繰り返し、未処理画素がなくなるまで処理を行うことになる。ステップＳ８１２で未処理画素がなくなると（“ＮＯ”のとき）、一連の上述した処理が終了し、出力バッファ６７３に格納された値をもとに、印刷エンジン７０でドットを印刷媒体上に生成させ印刷出力を得ることになる。
【０２０５】
以上説明してきたように、基準点を用いて未処理画素を選択し、その基準点を一定の更新パターン（本実施例では回数）で更新するようにしたので、毎回重心演算するときと比較して、計算量が減り、本処理含めた画像出力装置６０全体の処理効率が向上することになる。さらに、最終的に生成される量子化済み画素群の形状が円状に生成され視覚的に快適な出力ドットを得ることが可能となる。
【０２０６】
また、基準点を重心にした場合、画像に変化のあるエッジの部分では、基準点を更新して量子化済み画素群を構成するので、基準点を固定にして未処理画素を選択して量子化済み画素群を構成する場合と比較して、より大きな階調値を持つ領域に基準点が移動していく特徴がある。すなわち、重心演算の際に各画素の階調値を用いて演算しているため、階調値の大きな画素に重心が移動する特徴がある。これにより、エッジの部分では境界に近づくように基準点が移動し、境界に近い画素にドットが生成される。したがって、エッジの境目の印刷出力が鮮明なものとなり、快適な印刷出力を得ることができるのである。
【０２０７】
さらに、基準点を重心にした場合に、線が描かれている細線の部分では、より細線に近い位置に移動することになる。これも同様に、細線の部分は階調値が大きく重心がその方向に移動するからである。また、一旦細線上に移動した基準点は、より大きな階調値を有する画素が周辺にない限り、細線から離れずに量子化中画素群を構成していくことになる。このため、より細線に近い画素、又は細線上にドットが生成されることになり、鮮明な線が表現された印刷出力を得ることが可能となる。
【０２０８】
上述の例では、最後に重心位置を演算してその位置にある画素にドットを生成させるようにしたが、重心位置を演算せずに未処理画素の選択で用いた中心位置にドットを生成させるようにしてもよい。この場合、図３６のステップＳ７０や、図３８のステップＳ７５１、図３９のステップＳ８１０で重心位置を演算したが、これを中心位置の演算として処理を行い、最終的にその中心位置にある画素に対応する出力バッファ６７３の位置に“２５５”或いは“０”を格納させて、ドット生成させることになる。
【０２０９】
さらに、未処理画素の選択として、図４５に示すような未処理画素選択のためのテーブルを予め用意し、これを用いて選択するようにしてもよい。すなわち、図４５（ａ）にあるように  “１”を基準点としてこれを基準に未処理画素の選択を行う。具体的には、図４５（ａ）の“１”の座標を（０，０）、“２”の座標を（０，−１）、“３”の座標を（０，１）、“４”を（１，０）、“５”を（−１，０）、“６”を（−１、−１）、“７”を（１，１）、“８”を（１，−１）、“９”を（−１，１）とし、“１”に位置する画素を基準点としてテーブルに示す数字の順番で未処理画素を選択するようにする。この位置座標は、基準点を基準にした相対位置を示すものであり、例えばＲＯＭ６５に記憶されているものとし、適宜ＣＰＵ６１が読み出して位置を決定するようにすればよい。
【０２１０】
例えば、図３３の１回おきに更新する例では、初期画素（ｎ、ｍ）をテーブルの“１”に位置する画素として設定し、次に選択すべき未処理画素をテーブルの“２”に位置する画素、すなわち図３３の（ｎ、ｍ＋１）の画素を選択する。次はテーブルの“３”の位置にある画素を選択するがこの場合は図３３に示すように対応する画素が存在しないので、次の“４”の位置にある画素を選択、すなわち（ｎ＋１、ｍ）の画素を選択する。そして、所定回数に達すると、基準点を移動させ、テーブルの“１”にある画素を例えば図３３の（ｎ＋１、ｍ）として、“２”の位置にある画素を選択するようにすることになる。
【０２１１】
このようにすることで、毎回（或いは所定回数ごと）中心位置を演算する必要なく、さらに演算量を減らせることができる。また、画素選択の基準点から近い画素を選択する演算をする必要がないので、さらに計算量を減らすことが可能となる。ただし、基準点はこの場合でも所定の更新パターンで更新させる必要がある。量子化済み画素群が円状に成長し、その中心（又は重心）にドットを打てば、ドット間距離が一定に保たれ快適な印刷出力を得ることができるからである。さらに、図４５（ｂ）に示すような別のパターンのテーブルでも全く同様の効果を得る。また、これらのテーブルを量子化済み画素群ごとに切換えて使用してもよい。
【０２１２】
また、上述の実施例では、更新パターンとして回数から判断したが、これ以外にも、量子化中画素群を構成する画素の階調値の合計値が所定値に達したときに基準点を更新するようにしてもよい。例えば、階調値の合計が５０、１００、１５０、・・・と一定間隔での当該値で基準点を更新する場合の他、１２７、１９０、２２１、２３６と、最初は大きな値をとって除々にその間隔を狭めるようにし、その値のときに基準点を更新するようにしても同様の効果を奏する。
【図面の簡単な説明】
【図１】本発明による画像出力システムをモノクロ入力画像に適用したものの構成図である。
【図２】本発明の実施形態にかかる画像処理装置の構成を示すブロック図である。
【図３】階調画像データ５６の走査法を説明するための図であり、階調画像データ５６（図３（ａ））、初期走査（図３（ｂ））、通常走査（図３（ｃ））を示す図である。
【図４】ランダムに画素を選択した場合の印刷出力の例（図４（ａ））と、固定順で画素を選択した場合の印刷出力の例（図４（ｂ））を示す図である。
【図５】重心５６ｄの位置の決定法を説明するための図であり、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値未満である場合の重心５６ｄの位置の決定法（図５（ａ））、量子化中画素群５６ｃの各画素の階調画像データ値の総和が閾値以上である場合の重心５６ｄの位置の決定法（図５（ｂ）〜（ｄ））を示す。
【図６】白濃度を階調画像データとして使用する例を説明するための図であり、黒濃度を示す図（図６（ａ））、白濃度への変換を示す図（図６（ｂ））、量子化画像データ付与後に黒濃度の階調画像データに戻したものを示す図（図６（ｃ））である。
【図７】本発明の実施形態の動作を示すフローチャートである。
【図８】初期走査（図８（ａ））、通常走査（図８（ｂ））、重心６５ｄの決定（図８（ｃ））を説明するための図である。
【図９】最後の通常走査（図９（ａ））、量子化中画素群５６ｃ（図９（ｂ））、戻しデータの決定（図９（ｃ））、重心６５ｄの決定および量子化画像データの付与（図９（ｄ））を説明するための図である。
【図１０】通常走査対象画素５６ｅの選択法の変形例を説明するための図であり、通常走査前（図１０（ａ））、通常走査後（図１０（ｂ））を示す。
【図１１】閾値に関する変形例を説明するための図であり、階調画像データ５６の一例（図１１（ａ））、閾値変更後の量子化中画素群５６ｃ（図１１（ｂ））、閾値変更後の量子化画像データの付与（図１１（ｃ））を示す。
【図１２】一つの量子化済み画素群５６ａについて、複数の画素に量子化データを付与する変形例を説明するための図であり、量子化中画素群５６ｃ（図１２（ａ））、本実施形態における量子化画像データの付与（図１２（ｂ））、複数の画素への量子化データの付与（図１２（ｃ））を示す。
【図１３】２つの量子化済み画素群の重心が一致するときの例を示す図である。
【図１４】本発明による画像出力システムをカラー入力画像に適用したものの構成図である。
【図１５】初期画素を主走査方向に探索した場合の印刷出力の例である。
【図１６】初期画素を斜め方向に探索した場合の印刷出力の例である。
【図１７】本発明が適用される画像出力装置の構成図の例を示す図である。
【図１８】本発明の実施形態の動作を示すフローチャートである。
【図１９】本発明の実施形態の動作を示すフローチャートである。
【図２０】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２１】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２２】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２３】閾値を超えた場合の重心演算処理の動作を示すフローチャートである。
【図２４】白濃度演算処理の動作を示すフローチャートである。
【図２５】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２６】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２７】閾値制御処理の動作を示すフローチャートである。
【図２８】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図２９】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図３０】画素選択の基準点からセルを構成する概念を示す図である。
【図３１】画素選択の基準点からセルを構成する概念を示す図である。
【図３２】画素選択の基準点からセルを構成する概念を示す図である。
【図３３】画素選択の基準点からセルを構成する概念を示す図である。
【図３４】画素選択の基準点からセルを構成する概念を示す図である。
【図３５】本発明の実施形態の動作を示すフローチャートである。
【図３６】本発明の実施形態の動作を示すフローチャートである。
【図３７】閾値制御処理の動作を示すフローチャートである。
【図３８】閾値を超えた場合の階調値演算処理の動作を示すフローチャートである。
【図３９】白濃度演算処理を示すフローチャートである。
【図４０】白濃度演算処理を示すフローチャートである。
【図４１】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図４２】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図４３】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図４４】ＲＡＭ６７の構成と格納される値の例を示す図である。
【図４５】未処理画素選択のためのテーブルの一例を示す図である。
【符号の説明】
１０  階調画像データ記録部  １２  画像データ走査部（画素群生成手段）１４画像データ累計部  １６  閾値記録部  １８  閾値比較部  ２０  画素群重心決定部  ２２  量子化画像データ付与部  ２４  量子化画像データ記録部  ５６階調画像データ  ５６ａ  量子化済み画素群  ５６ｂ  初期走査対象画素  ５６ｃ  量子化中画素群  ５６ｄ  重心  ５６ｅ  通常走査対象画素  ６０  画像出力装置  ６１  ＣＰＵ  ６５  ＲＯＭ  ６６  ハーフトーン処理部  ６７  ＲＡＭ  ６７１  入力バッファ  ６７２  ワーキングメモリ  ６７２ａ  画素数格納領域  ６７２（ｂ）  入力階調値格納領域  ６７２（ｃ）  基準点格納領域  ６７３  出力バッファ
【図１】
2004266793.tif 000005
【図２】
2004266793.tif 000006
【図３】
2004266793.tif 000007
【図４】
2004266793.tif 000008
【図５】
2004266793.tif 000009
【図６】
2004266793.tif 000010
【図７】
2004266793.tif 000011
【図８】
2004266793.tif 000012
【図９】
2004266793.tif 000013
【図１０】
2004266793.tif 000014
【図１１】
2004266793.tif 000015
【図１２】
2004266793.tif 000016
【図１３】
2004266793.tif 000017
【図１４】
2004266793.tif 000018
【図１５】
2004266793.tif 000019
【図１６】
2004266793.tif 000020
【図１７】
2004266793.tif 000021
【図１８】
2004266793.tif 000022
【図１９】
2004266793.tif 000023
【図２０】
2004266793.tif 000024
【図２１】
2004266793.tif 000025
【図２２】
2004266793.tif 000026
【図２３】
2004266793.tif 000027
【図２４】
2004266793.tif 000028
【図２５】
2004266793.tif 000029
【図２６】
2004266793.tif 000030
【図２７】
2004266793.tif 000031
【図２８】
2004266793.tif 000032
【図２９】
2004266793.tif 000033
【図３０】
2004266793.tif 000034
【図３１】
2004266793.tif 000035
【図３２】
2004266793.tif 000036
【図３３】
2004266793.tif 000037
【図３４】
2004266793.tif 000038
【図３５】
2004266793.tif 000039
【図３６】
2004266793.tif 000040
【図３７】
2004266793.tif 000041
【図３８】
2004266793.tif 000042
【図３９】
2004266793.tif 000043
【図４０】
2004266793.tif 000044
【図４１】
2004266793.tif 000045
【図４２】
2004266793.tif 000046
【図４３】
2004266793.tif 000047
【図４４】
2004266793.tif 000048
【図４５】
2004266793.tif 000049