(57)【要約】【課題】セルの重心位置とドットの重心位置との位置ずれをなくし、ドットが固まって発生するのを防止して高画質で快適な印刷出力を得る。【解決手段】画素ごとにＮ（Ｎは整数）種のレベル値を有する第１の画像データをＭ種（Ｍ＜Ｎ、Ｍは整数）のレベル値を有する第２の画像データに変換して出力する画像処理装置において、前記第１の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、  前記画素群生成手段で選択した未処理画素のそれぞれから均等にレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、前記重心位置決定手段で決定した重心に位置する画素に対して前記Ｍ種のレベル値のうち所定の値を設定して前記第２の画像データを出力する出力手段と、を備えることを特徴とする画像処理装置。【選択図】図９
2004320374.tif 000002
【特許請求の範囲】
【請求項１】
画素ごとにＮ（Ｎは整数）種のレベル値を有する第１の画像データをＭ種（Ｍ＜Ｎ、Ｍは整数）のレベル値を有する第２の画像データに変換して出力する画像処理装置において、
前記第１の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、
前記重心位置決定手段で決定した重心に位置する画素に対して前記Ｍ種のレベル値のうち所定の値を設定して前記第２の画像データを出力する出力手段と、
を備えることを特徴とする画像処理装置。
【請求項２】
請求項１記載の画像処理装置において、
前記画素群生成手段は、前記隣接する複数の未処理画素により前記画素群を生成しても前記所定の画素のレベル値を含めた前記画素群のレベル値の総和が閾値以下のとき、さらに画素ごとのレベル値の総和が閾値以上になるまで、これまで生成した画素群の前記重心位置決定手段で決定した重心から最も近い画素を選択して前記画素群を生成することを特徴とする画像処理装置。
【請求項３】
請求項１記載の画像処理装置において、
前記重心位置決定手段は、前記画素群生成手段で選択した隣接する前記未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と前記所定の画素のレベル値との合計が前記閾値以下のとき、前記選択した未処理画素のレベル値のうち最小のレベル値を前記選択した未処理画素のそれぞれから均等に前記所定の画素のレベル値に加算して前記画素群の重心位置を決定する、ことを特徴とする画像処理装置。
【請求項４】
請求項１記載の画像処理装置において、
前記重心位置決定手段は、前記画素群生成手段で選択した隣接する前記未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と前記所定画素のレベル値との合計が前記閾値よりも大きいとき、前記所定の画素のレベル値が前記閾値となるように前記画素群生成手段で選択した隣接する未処理画素からそれぞれ均等にレベル値を前記所定の画素のレベル値に加算して重心を決定する、
ことを特徴とする画像処理装置。
【請求項５】
請求項１記載の画像処理装置において、
前記画素群生成手段は、前記重心位置決定手段で決定した重心から最も近い画素が複数存在するとき、ランダムに画素を選択することを特徴とする画像処理装置。
【請求項６】
請求項１記載の画像処理装置において、
前記画素群生成手段は、前記所定の画素に隣接する未処理画素を選択し、さらに当該隣接する未処理画素に隣接する未処理画素を選択して画素群を生成することを特徴とする画像処理装置。
【請求項７】
画素ごとにＮ（Ｎは整数）種のレベル値を有する第１の画像データをＭ種（Ｍ＜Ｎ、Ｍは整数）のレベル値を有する第２の画像データに変換して出力する画像処理方法において、
前記第１の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、
前記画素群生成ステップで選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定ステップと、
前記重心位置決定ステップで決定した重心に位置する画素に対して前記Ｍ種のレベル値のうち所定の値を設定して前記第２の画像データを出力する出力ステップと、を備えることを特徴とする画像処理方法。
【請求項８】
画素ごとにＮ（Ｎは整数）種のレベル値を有する第１の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成処理と、
前記画素群生成処理で選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定処理と、
前記重心位置決定処理で決定した重心に位置する画素に対して前記Ｍ種のレベル値のうち所定の値を設定して前記第２の画像データを出力する出力処理と、
をコンピュータに実行させるためのプログラム。
【請求項９】
画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷装置において、
前記画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、
前記重心位置決定手段で決定した重心に位置する画素に量子化データを付与する量子化データ付与手段と、
前記量子化データ付与手段で付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御手段と、
を備えることを特徴とする印刷装置。
【請求項１０】
画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷方法において、
前記画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、
前記画素群生成ステップで選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定ステップと、
前記重心位置決定ステップで決定した重心に位置する画素に量子化データを付与する量子化データ付与ステップと、
前記量子化データ付与ステップで付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御ステップと、
を備えることを特徴とする印刷方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、画素ごとに所定の階調値を有する画像データに対して、セルを構成しその重心位置にドットを生成させる画像処理装置、画像処理方法、印刷装置、印刷方法、及びプログラムに関する。
【０００２】
【従来の技術】
従来より、デジタル画像の１画素が多数の値を持ち得る連続階調のデータを少数の階調（例えば２値）に変換する、ハーフトーン処理が行われている。ハーフトーン処理の方法としては、誤差拡散法がよく知られている。誤差拡散法では、変調の周期（ドットを打つ位置の周期）が入力画像の階調値に応じて変化するため、その周期が閾値マトリックスで予め決められたディザ法に比べ、高い解像度を有している。
【０００３】
一方で、誤差拡散法は、入力画像の階調値が低濃度の値で分布していると、誤差が遠く離れた画素まで拡散する場合もあり、結果的にドットの分散性が劣化する問題があった。
【０００４】
そこで、入力画像を所定の大きさのセルに分割し、各セルの中心位置にドットを生成させるようにすることで、誤差拡散法の高解像性を保持したまま、ドットのつながりなどの画質劣化を防止する技術が開示されている（例えば、特許文献１）。
【０００５】
【特許文献１】
特開平１１−２７５２８号公報（図４、図７）
【０００６】
【発明が解決しようとする課題】
しかしながら、上述した特開平１１−２７５２８は、入力画像の中間階調領域においてすぐに閾値に達するため、セルサイズが小さくなってしまう。かかるサイズが小さいと、隣接するセルで最終的に生成されるドットが繋がったり離れたりドット間距離にばらつきが生じ、視覚的にドットが目立ち快適な印刷出力を得ることができない問題点があった。
【０００７】
また、ドットを生成させるためのセルの中心位置の計算についても、演算した中心位置は必ずしも整数値とならない。従って、その中心位置とドットの中心位置とのずれが発生し、例えば、複数のセルでドットが固まって発生するなど、視覚的に快適な印刷出力を得ることができない問題点があった。
【０００８】
そこで、本発明は、どのような階調値を有する入力画像に対しても、複数の画素から構成されるセルを円状に形成させてドット間距離を一定に保つよう処理を行う画像処理装置、画像処理方法、及びプログラム、さらに、高画質で快適な印刷出力を得る印刷装置、印刷方法を提供することを目的とする。
【０００９】
【課題を解決するための手段】
上記目的を達成するために、本発明は、画素ごとにＮ（Ｎは整数）種のレベル値を有する第１の画像データをＭ種（Ｍ＜Ｎ、Ｍは整数）のレベル値を有する第２の画像データに変換して出力する画像処理装置において、第１の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、重心位置決定手段で決定した重心に位置する画素に対して前記Ｍ種のレベル値のうち所定の値を設定して前記第２の画像データを出力する出力手段とを備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【００１０】
また、本発明は上記画像処理装置であって、上記画素群生成手段は、隣接する複数の未処理画素により画素群を生成しても所定の画素のレベル値を含めた画素群のレベル値の総和が閾値以下のとき、さらに画素ごとのレベル値の総和が閾値以上になるまで、これまで生成した画素群の重心位置決定手段で決定した重心から最も近い画素を選択して画素群を生成することを特徴としている。これにより、例えば、生成した画素群が円状に形成し、その重心にドットを生成させてもドット間の距離が一定に保たれ、快適な印刷出力を得る。
【００１１】
また、本発明は上記画像処理装置であって、上記重心位置決定手段は、画素群生成手段で選択した隣接する未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と所定の画素のレベル値との合計が閾値以下のとき、選択した未処理画素のレベル値のうち最小のレベル値を選択した未処理画素のそれぞれから均等に所定の画素のレベル値に加算して画素群の重心位置を決定することを特徴としている。これにより、例えば、所定の画素に均等にレベル値を取り込む際に未処理画素のレベル値以上のレベル値を取り込むことなく、重心位置のずれが少なくなる。
【００１２】
また、本発明は上記画像処理装置であって、上記重心位置決定手段は、画素群生成手段で選択した隣接する未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と所定画素のレベル値との合計が前記閾値よりも大きいとき、所定の画素のレベル値が閾値となるように画素群生成手段で選択した隣接する未処理画素からそれぞれ均等にレベル値を所定の画素のレベル値に加算して重心を決定することを特徴としている。これにより、所定の画素に閾値以上のレベル値を取り込んで重心位置を決定することがないので、重心位置のずれが少なくなる。
【００１３】
また、本発明は上記画像処理装置であって、上記画素群生成手段は、重心位置決定手段で決定した重心から最も近い画素が複数存在するとき、ランダムに画素を選択することを特徴としている。これにより、例えば、ドット間で周期パターンの発生を抑えて快適な印刷出力を得ることができる。
【００１４】
また、本発明は上記画像処理装置であって、上記重心位置決定手段は、画素群の位置と第１の画像データのレベル値とで重心位置を決定することを特徴としている。
【００１５】
また、本発明は、上記画像処理装置であって、前記画素群生成手段は、所定の画素に隣接する未処理画素を選択し、さらに当該隣接する未処理画素に隣接する未処理画素を選択して画素群を生成することを特徴としている。
【００１６】
さらに、上記目的を達成するために本発明は、画素ごとにＮ（Ｎは整数）種のレベル値を有する第１の画像データをＭ種（Ｍ＜Ｎ、Ｍは整数）のレベル値を有する第２の画像データに変換して出力する画像処理方法であって、第１の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、画素群生成ステップで選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定ステップと、重心位置決定ステップで決定した重心に位置する画素に対してＭ種のレベル値のうち所定の値を設定して第２の画像データを出力する出力ステップと、を備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【００１７】
さらに、上記目的を達成するために本発明は、画素ごとにＮ（Ｎは整数）種のレベル値を有する第１の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成処理と、画素群生成処理で選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定処理と、重心位置決定処理で決定した重心に位置する画素に対してＭ種のレベル値のうち所定の値を設定して第２の画像データを出力する出力処理とをコンピュータに実行させるためのプログラムであることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【００１８】
さらに、上記目的を達成するために本発明は、画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷装置において、画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定手段と、記重心位置決定手段で決定した重心に位置する画素に量子化データを付与する量子化データ付与手段と、量子化データ付与手段で付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御手段と、を備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【００１９】
さらに、上記目的を達成するために本発明は、画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷方法において、画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、画素群生成ステップで選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定ステップと、重心位置決定ステップで決定した重心に位置する画素に量子化データを付与する量子化データ付与ステップと、量子化データ付与ステップで付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御ステップと、を備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【００２０】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。
【００２１】
図１は、本発明による画像出力システムを入力画像に適用した場合のシステム全体構成図である。この例では、ホストコンピュータ１０において、生成した階調画像データ１６（各画素８ビットで表現）が、ページプリンタなどの画像出力装置２０に出力され、画像出力装置２０でホストコンピュータ１０からの画像データが出力されるようになっている。
【００２２】
ホストコンピュータ１０は、アプリケーション部１２とラスタライズ部１４とから構成される。
【００２３】
アプリケーション部１２は、ホストコンピュータ１０内に実装されたアプリケーションプログラムにより印刷対象となる、文字データ、図形データ、ビットマップデータ、その他の種々のデータが生成される。これらのデータは、例えばホストコンピュータに接続された表示装置や入力装置を介して生成させることができる。アプリケーション部１２で生成されたデータは、ラスタライズ部１４に出力される。
【００２４】
ラスタライズ部１４は、アプリケーション部１２から出力された印刷対象のデータをラスタライズし、各画素または各ドットごと８ビットの値からなる階調画像データ１６に変換される。８ビットのデータであるので、各画素は０から２５５までの値をとることができる。ラスタライズ部１４は、実際にはホストコンピュータ１０に実装されたドライバによって実行されることになる。８ビットのデータに変換された階調画像データ１６は、画像出力装置２０に出力される。
【００２５】
画像出力装置６０は、ハーフトーン処理部２６、パルス幅変調２８と、印刷エンジン３０とから構成される。
【００２６】
ハーフトーン処理部２６は、入力された階調画像データ１６に対して、より少数の階調の値（２値や４値など）に変換する処理を行う。この階調画像データ１６は、０から２５５までのレベル値を有する連続階調の値を有しており、例えばこれを２値のレベル値（０及び１など）に変換することで、画像出力装置２０で実際に用紙に印刷するときに、ドットをうつ又はうたない、という処理を行うことが可能になる。
【００２７】
ハーフトーン処理部２６によって所定の階調値に変換されたデータ３０は、パルス幅変調部２８に出力される。パルス幅変調部２８は、各画素ごと変換されたデータ３０を、レーザー駆動パルスあり又はなし等を示す駆動データ２９に変換する。生成された駆動データ２９は、印刷エンジン３０に出力される。
【００２８】
印刷エンジン３０は、レーザードライバ３２と、レーザーダイオード３４とから構成される。レーザードライバ３２は、入力された駆動データ２９から、駆動パルスあり又はなし等を示す制御データを生成し、レーザーダイオード３４に出力する。レーザーダイオード３４は、レーザードライバ３２からのこの制御データに基づいて駆動され、また図示しない感光ドラムや転写ベルトが駆動されて、実際に印刷用紙にホストコンピュータ１０からのデータが印刷されることになる。
【００２９】
次に画像出力装置２０の具体的構成を、図２を参照して説明する。
【００３０】
ここで、図１のハーフトーン処理部２６は、図２におけるＣＰＵ２１と、ＲＯＭ２５、及びＲＡＭ２７に対応し、パルス幅変調部２８は、ＣＰＵ２１と、ＲＯＭ２５及びＲＡＭ２７に対応する。また、図２の印刷エンジン３０と図１のエンジン３０は同じ構成を有する。
【００３１】
画像出力装置２０は、全体として、ＣＰＵ２１と、入力インターフェース（Ｉ／Ｆ）２３と、ＲＯＭ２５と、ＲＡＭ２７とから構成される。
【００３２】
ＣＰＵ２１は、内部バスを介して、入力Ｉ／Ｆ２３、ＲＯＭ２５、ＲＡＭ２７、印刷エンジン３０と互いに接続され、重心位置の演算や、未処理画素の選択、ドットの生成等、各種処理を実行するためのものである。詳細は後述する。
【００３３】
入力Ｉ／Ｆ２３は、ホストコンピュータ１０と画像出力装置２０とのインターフェースとしての役割を果たし、本実施例では、ホストコンピュータ１０から出力される、ラスタライズされた各画素ごとに所定の階調値を有する入力画像データが入力される。入力された画像データはＣＰＵ２１の制御により一旦ＲＡＭ２７に格納される。
【００３４】
ＲＯＭ２５は、各種プログラムなどが格納される。ＣＰＵ２１の制御によりプログラムが読み出されて、ＣＰＵ２１において各種処理が実行されることになる。
【００３５】
ＲＡＭ２７は、ＣＰＵ２１が処理を実行する際のワーキングメモリとしての役割を果たし、実行データ等が一時格納される。その詳細は後述する。
【００３６】
印刷エンジン３０は、図１のエンジン３０と同様の構成で、レーザードライバ３２及びＬＤ３４とから構成される。
【００３７】
次に、全体の動作について説明するが、本発明におけるセルの構成からドット生成までの原理について図３から図８を参照して説明する。
【００３８】
ホストコンピュータ１０から各画素ごとに所定の階調値を有するデータが入力される。この画像データの例を図３（ａ）に示す。これは、入力された画像データが入力Ｉ／Ｆ２３を介してＣＰＵ２１の制御によりＲＡＭ２７の入力バッファ領域２７１に格納された例を示している。入力バッファ２７１は、ｍ行ｎ列の２次元構造を有し、各バッファ内での位置はホストコンピュータ１０で生成された画像の画素位置に対応するものである。例えば、入力バッファの（ｎ、ｍ）の位置に格納されたデータは、全体画像における（ｎ、ｍ）の位置に位置する画素の階調値に対応するものである。入力バッファ２７１等のＲＡＭ２７の具体的構成は後述する。
【００３９】
ここでは、説明を簡単にするため、縦方向はｍからｍ＋２まで、横方向はｎからｎ＋３までの入力バッファ構造を示しているが、もちろん、１フレーム分全ての画素データを格納できるように入力バッファ２７１を構成することもできる。
【００４０】
ここで行う処理は、初期画素を選択し、その初期画素から等距離にある近傍の画素を選択する。例えば、初期画素を中心に上下左右の画素を選択する（以下このように選択された画素をターゲット画素と呼ぶ）。そして、そのターゲット画素群の各画素から、例えば均等に階調値を初期画素に取り込む。取り込んだ値とその初期画素の階調値との合計が所定の閾値に達した場合はその初期画素の重心にドットを生成させる処理を行う。このように、均等にまわりの画素から階調値を初期画素に取り込むようにしているので、ドットの重心位置と後述するセルの重心位置とのずれが少なくなり、ドットが固まって形成されたり、離れすぎたりすることを防止することができ、快適な印刷出力を得ることができる。
【００４１】
また、このように構成されたセルの重心にドットを生成させると、構成されたセルの形状が十字形になるなどより円に近い形状となり、隣り合うセルでドットが繋がったり、離れすぎたりバラつきを抑えて、均一なドット間距離を保ち、視覚的に快適な印刷出力を得ることができるのである。
【００４２】
近傍のターゲット画素群でセルを構成しても閾値に達しない場合は、さらに、セルの重心から一番近い距離にある画素を選択してその画素を含めたセルを構成し、閾値に達するまでこれを繰り返すことになる。
【００４３】
この場合でも、最初に十字形のセルから出発して、その重心を利用して順次画素を取り込む処理を行うため円に近い形状のセルを構成することが可能である。初期画素に対して４近傍の画素（左右上下の画素）のみならず、８近傍の画素（左右上下と、右斜め上、右斜め下、左斜め上、及び左斜め下の８つの画素）をターゲット画素とすれば、最初から４角形の形状で、より円状にセルが成長することが予想される。
【００４４】
ここで、順次画素を取り込む際に重心から近い画素が複数存在する場合がある。かかる場合は、ランダムにいづれか一の画素を選択することにしている。セルに取り込むべき画素が複数ある場合に固定順に選択すると、セルの形が一定でその重心にドットを形成しても全体としてドットの位置が周期的で印刷出力において周期パターンを発生させてしまうことになる。かかる周期パターンは、視覚に映りやすく印刷出力の画像が不自然なものとなってしまう。このパターンの発生を抑えるためにランダムに選択するのである。
【００４５】
図３の例に戻って、本発明の原理を説明する。まず初期画素を選択画素として決定する。初期画素は、ここでは、まだ処理されていない未処理画素のうち最も上でかつ最も左側にある画素とする。したがって、図３（ａ）に示す例では、図３（ｂ）に示すように（ｎ、ｍ）に位置する画素が最も上でかつ左側にある画素なので、この画素が初期画素となり、これを選択画素２７１ａとして選択することになる。
【００４６】
次に、その初期画素（ｎ、ｍ）に対して、隣接する近傍のターゲット画素（未処理画素）２７１ａを選択する。ここでは、初期画素（ｎ、ｍ）の右隣と下側にある２つの画素（（ｎ＋１、ｍ＋１）、（ｎ、ｍ＋１））とを選択する（図３（ｃ）参照）。セルを円状に生成させるためである。もちろん、さらに画素（ｎ＋１、ｍ＋１）も含めた３つの画素を選択してもよい。ここでは、２つの画素を選択した場合で以下説明する。そして、選択した画素の階調値を均等に選択画素（ｎ、ｍ）に取り込む（図４（ａ）参照）。セルの重心位置とドットの重心位置のずれを少なくするためである。この均等に取り込むべき値は、ここでは２つの画素の階調値の最小値である“５０”を両画素から取り込む。取り込むべき値の演算については、後述する。このようにして取り込まれた２つの画素は初期画素を含めて１つのセル２７１ｃとして図４（ｂ）に示すように構成される。ここでは、初期画素が（ｎ、ｍ）の位置にある画素として選択されているが、例えば画素（ｎ＋１、ｍ＋１）を初期画素として選択選択され、まわりの４つの画素（（ｎ＋１、ｍ）、（ｎ、ｍ＋１）、（ｎ＋２、ｍ＋１）、（ｎ＋１、ｍ＋２））を含めた画素でセル２７１ｃを構成すると十字形となり、より円に近いセル形状となる。
【００４７】
次に、構成したセル２７１ｃの重心位置を演算する。演算の具体的方法は、後述する。ここでは、図４（ｃ）に位置する重心２７１ｄに位置することになる。
【００４８】
次に、構成したセル２７１ｃの階調値の合計が所定の閾値に達したか否か判断し、達していないと、重心２７１から最も近い距離にある画素をセル２７１ｃに取り込むべき画素として選択する。図４（ｃ）に示す例では、閾値を“２５５”に設定するとすると、セル２７１ｃの階調値の合計は、“１５０”であるので、さらに画素を選択することになる。ここでは、閾値として“２５５”を選択したがそれ以外の値であってもよい。
【００４９】
重心２７１ｄから最も近い画素は、図５（ａ）に示すように、（ｎ＋１、ｍ＋１）に位置する画素である。これをセル２７１ｃに取り込み、この画素を含めた重心２７１ｄを演算すると、図５（ｂ）に示す位置２７１ｄとなる。
【００５０】
しかし、まだセル２７１ｃの階調値の合計は“２００”であるので、さらに画素を選択する必要がある。重心２７１ｄから最も近い距離にある画素は図５（ｃ）に示すように４つの画素（（ｎ＋２、ｍ）、（ｎ＋２、ｍ＋１）、（ｎ、ｍ＋２）、（ｎ＋１、ｍ＋２））がある。これら４つの画素のうちいづれか一つランダムに選択する。周期パターンの発生を抑えるためである。ここでは、図６（ａ）に示すように画素（ｎ、ｍ＋２）を選択する。そして、この画素をセル２７１ｃに取り込み、そのセル２７１ｃ内での重心を演算すると、図６（ａ）に示す重心２７１ｄに位置することになる。
【００５１】
さらに、セル２７１ｃの階調値は、“２５０”で閾値である“２５５”に達しないのでさらにその重心２７１ｄから最も近い距離にある画素を選択し、セル２７１ｃに取り込む。図６（ｂ）に示すように画素（ｎ＋１、ｍ＋２）を選択するとする。ここで、その選択した画素の階調値をそのまま取り込むとセル２７１ｃの階調値の合計は“３１５”で閾値を超えてしまう。そこで、丁度セルの階調値の合計が閾値に達するようにその画素の階調値を取り込み、残った階調値をその画素に戻しデータとして値を戻すことにする。このようにすることで、最終的に選択した画素の階調値が周辺の画素と大きく異なる値の場合でも、その階調値に影響されず重心を求めることができる。例えば画素に変化がある境目などでも、その変化に影響されずに重心が求まる。また、戻しデータとして当該画素にその残った階調値を戻すことで、入力階調値の分布に忠実にドットを生成することができる。戻しデータを、構成したセル２７１ｃ以外の画素に戻すと入力分布に忠実にドットを生成させることができなくなってしまう。
【００５２】
そして、最終的に構成したセル２７１ｃの重心に位置する画素にドットを生成させるための処理を行う。図６（ｃ）に示す例では、画素（ｎ、ｍ＋１）にドットを生成させるようにすることになる。
【００５３】
次に、階調値が高い画素が画像出力装置２０に入力された場合を考える（図７（ａ）参照）。この場合に、上述したように初期画素を中心に隣接する画素を選択してセルを構成するとすぐに閾値に達してしまう。例えば図７（ａ）にあるように２つの画素（ｎ、ｍ）、（ｎ＋１、ｍ）ですぐに閾値に達してしまう。これでは、セルの大きさを一定範囲まで保てず、ドットが隣り合うなど快適な印刷出力を得ることができない。そこで、その諧調値を変更して、処理を行うことによりセルの大きさを一定範囲に保つようにするのである。
【００５４】
図７（ａ）に示す階調値を有する入力画像データが入力された場合で説明する。まず、初期画素を選択するが上述した場合と同様に最も上にある画素のうち最も左側にある未処理画素を選択する。図７（ｂ）に示すように画素（ｎ、ｍ）を選択するとする。このとき、その階調値を閾値から減算した値をその画素の階調値として以下演算することにする。これによりセルの大きさをある程度まで確保することが可能になる。
【００５５】
次に、上述と同様に、初期画素（ｎ、ｍ）に隣接する近傍の未処理画素（ターゲット画素）２７１ａを選択する。図７（ｂ）に示す例は、２つの画素（ｎ＋１、ｍ）、（ｎ、ｍ＋１）をターゲット画素２７１ａとして選択する。このとき選択した画素の階調値を閾値から減算した値を当該画素の階調値とする。２つの画素の階調値は実際にはそれぞれ“２０５”であるが、閾値から減算した“５０”（２５５−２０５）をその画素の階調値として以後の処理を行う。そして、図４（ａ）と同様に均等にターゲット画素から階調値を取り込む。
【００５６】
取り込んだ後の階調値の合計は、図７（ｃ）に示すように“１５０”となる。閾値である“２５５”に達しないのでさらにセル２７１ｃに取り込むべき画素を選択する。選択は重心から最も近い未処理画素を選択するが、その重心位置は図８（ａ）に示す重心位置２７１ｄとなるので、図８（ａ）に示すように（ｎ＋１，ｍ＋１）を未処理画素として選択する。
【００５７】
選択した画素の階調値は同様に、閾値からその画素の階調値を減算した値（図８（ｂ）に示すように（ｎ＋１，ｍ＋１）の画素の階調値を“５０”とした値）をセル２７１ｃに取り込み、その階調値の合計を演算することにする。以後選択した画素を閾値から減算した値として図３から図６と同様にこれを繰り返すことで、図８（ｃ）に示すようにセル２７１ｃが構成される。その重心位置２７１ｄに位置する画素は（ｎ、ｍ＋１）なので、この位置に白ドットを生成させるようにする。また、このとき（ｎ＋１，ｍ＋１）の画素の階調値のセルへの取り込むべき量は、同様に丁度閾値（“２５５”）と等しくなる値（“５”）とする。そして、戻しデータとして“５”を加えた値を画素（ｎ＋１、ｍ＋２）に戻すことになる。
【００５８】
以上が本発明の概略である。以下、本発明の具体的動作を図９から図１７に示す図面を参照して説明する。図９及び図１０は、本発明の具体的動作を示すフローチャートを示す。
【００５９】
まず、本処理が開始される前に、入力画像データがホストコンピュータ１０から画像出力装置２０に入力され、ＣＰＵ２１の制御により入力インターフェース（Ｉ／Ｆ）２３を介してＲＡＭ２７に一時記憶されていることが前提である。ＲＡＭ２７の具体的構成を図１３（ａ）に示す。
【００６０】
ＲＡＭ２７は、入力バッファ領域２７１とワーキングメモリ２７２と、出力バッファ２７３とから構成される。入力バッファ２７１は、入力画像データが入力された一時記憶するための領域で、上述したように２次元構造を有し、各位置が入力画像の各画素位置に対応する。入力画像の位置（ｎ、ｍ）にある画素は、入力バッファ２７１の位置（ｎ、ｍ）に格納される。図１３（ａ）に示す例は、説明を簡単にするために３行４列の構成であるが、もちろん上述したように１フレーム分の各画素の階調値を格納する領域があってもよい。
【００６１】
ワーキングメモリ２７２は、主として３つの領域から構成され、重心位置の座標と階調値の合計値とが格納される。出力バッファ２７３は、入力バッファ２７１と同様の構成で２次元構成であり、出力バッファ２７３に対応する位置に印刷用紙上でドットが生成されるように対応している。もちろん、３行４列ではなく、種々の行数、列数を有し、例えば１フレーム分の画像に対応するように構成されていてもよい。
【００６２】
以上にように構成されたＲＡＭ２７に図１３（ｂ）の入力バッファ２７１に示す入力画像データが格納された場合で以下説明する。ここでは、説明を簡単にするため、（ｎ，ｍ）＝（０，０）として以下説明することにする。
【００６３】
図９に戻り、ＣＰＵ２１は、ＲＯＭ２５から本処理を実行するためのプログラムを読み出すことで、処理が開始される（ステップＳ１０）。
【００６４】
次いで、ＣＰＵ２１は、初期画素を決定し、その画素の重心を演算する（ステップＳ１１）。初期画素は、最も上にある画素のうち最も左側にある未処理画素を選択する。図１３（ｂ）に示す例では、入力バッファ２７１の位置（０、０）の画素が選択されることになる。そして、その重心位置を演算する。重心位置の演算は、横方向の重心位置をｘ、縦方向の重心位置をｙとすると、次に示す（式１）によって演算されることになる。
【００６５】
（式１）
2004320374.tif 000003
初期画素の重心位置を求めるときに、（式１）において、これまで構成したセルの重心位置ｘ、ｙは、ともに０、これまで構成したセルの階調値の合計は０として演算する。その結果、重心位置は（ｘ、ｙ）＝（０，０）となる。なお、この演算式は、ＲＯＭ２５に格納され、重心を演算する際にＣＰＵ２１がＲＯＭ２５から読み出して、ＲＡＭ２７に格納された重心位置、階調値の合計（ともにＲＡＭ２７のワーキングメモリ２７２に格納）等を読み出し（式１）に代入して演算することにより行なわれる。
【００６６】
演算した重心位置（ｘ、ｙ）は、ＣＰＵ２１によりＲＡＭ２７のワーキングメモリ２７２に格納される（図１３（ｃ）のワーキングメモリ２７２参照）。また、ＣＰＵ２１は、選択した初期画素が以後の未処理画素選択の際に選択されないように、すでに選択済みであることを示す“−１”を入力バッファ２７１の当該画素の位置に格納することになる（図１３（ｃ）の入力バッファ２７１参照）。もちろん、この値は入力画像データの階調値として存在しない値であればよく、例えば他の負の値でもよい。さらに、入力バッファ２７１と同様の構成のメモリ領域をさらに用意し、そのメモリ内でフラグにより当該画素が選択されたか否かを判別することも可能である。
【００６７】
次いで、ＣＰＵ２１は選択した初期画素が白成分が多く黒成分が少ない画素であるか、逆に白成分が多く黒成分が少ない画素であるかを判定する（ステップＳ１２）。白成分が多いとステップＳ１３に移行し、少ないとステップＳ２４の黒濃度処理への移行する。このように、２つの処理を分けているのは、それぞれドットの生成等で異なる処理を行わせる必要があるからである。すなわち、白成分が多い画素はセルの重心にドットを生成させる際にドットを打つ処理を行う必要があり、逆に黒成分が多いと階調値を反転（閾値から階調値を減算した値）させその重心位置に何もドットを生成しない白ドットを生成させる処理を行う必要がある。黒成分が多い画素に対してもステップＳ１３以下と同じ処理を行わせると少ない画素でセルが構成され、ドット間が一定距離保てないからである。
【００６８】
白成分が多いか少ないかは、ＣＰＵ２１がＲＯＭ２５に格納された、閾値、ここでは“１２７”を読み出し、入力バッファ２７１の初期画素の階調値と比較し、閾値“１２７”より少ないと白成分が多い画素と判断され、逆の場合は黒成分が多い画素と判断されることになる。
【００６９】
ＣＰＵ２１は、白成分が多い画素であると判断すると（ステップＳ１２で“ＹＥＳ”）、初期画素の４近傍に未処理画素があるか否か判断する（ステップＳ１３）。具体的には、ＣＰＵ２１は初期画素を中心に上下左右の４つの画素に対して入力バッファ２７１に“−１”が格納されているか否かで判断される。このように初期画素を中心に近傍の画素を選択することで、構成されたセルの形状が十字形で円状に近づくことになり、ドットが繋がったり離れすぎたりしてそのばらつきを抑え、視覚的に快適な印刷出力を得ることができる。もちろん、上下左右の近傍の画素のみならず、初期画素を中心に右斜め上、右斜め下、左斜め上、左斜め下の全８つの近傍画素を未処理画素として選択するようにしても、構成されたセルの形状が四角形で円状に近づくことになる。ここでは、初期画素が（０，０）に位置しており、上側と左側に画素が存在しないので、右側と下側の２つの画素の入力バッファ２７１に格納された値をＣＰＵ２１が確認する。そして、これらの値は“−１”ではないので、４近傍に未処理画素が存在することにより、本ステップＳ１３で“ＹＥＳ”と判定することになる。
【００７０】
初期画素近傍に未処理画素が存在すると（ステップＳ１３で“ＹＥＳ”の場合）、処理はステップＳ２０に移行し、ＣＰＵ２１は選択した複数の未処理画素をターゲット画素群として選択することになる。図１３（ｃ）に示す例では、２つの画素（１、０）と（０、１）に位置する画素をターゲット画素群として選択することになる。そして、ＣＰＵ２１は選択した画素に対応する出力バッファ２７３に“０”を代入する（図１４（ａ）の出力バッファ２７３参照）。
【００７１】
次いで、ＣＰＵ２１は選択したターゲット画素群の吸収処理を行う（ステップＳ２１）。この吸収処理の動作を示すフローチャートを図１１に示す。本処理に移行すると、まず選択したターゲット画素群をセルに取り込むべきか否か判断される。すなわち、ターゲット画素群として選択した画素の数を、ターゲット画素群の画素の内階調値が最小な値とで乗算し、その結果をこれまで構成したセルの階調値の合計との和を演算して、その演算値が閾値より低いか高いかを判定する（ステップＳ２１０）。
【００７２】
ここで閾値は、構成すべきセルの階調値の合計値、“２５５”とする。演算結果がこの閾値より低いとターゲット画素群の各画素からその最小値を均等に取り込んで以後の処理を行い、逆に高いとターゲット画素群の各画素から所定の階調値を均等に取り込み以後の処理を行うことになる。まわりの画素から均等に階調値を取り込むので、構成されたセルの重心位置とドットの重心位置とのずれが少なくなり、複数のセルでドットが固まって発生するのを防止することができる。これにより、快適な印刷出力を得ることができる。
【００７３】
図１３（ｃ）に示す例では、選択されたターゲット画素群の画素数は（１，０）と（０，１）の２つだけなので“２”、２つの画素の階調値の最小値は“５０”、これまで構成したセルの階調値の合計は“５０”であるから、その演算結果は“１５０”（＝（５０×２）＋５０）となる。この値は、閾値（“２５５”）より低い値なので、ステップＳ２１０で“ＮＯ”が選択される。
【００７４】
ＣＰＵ２１は、この演算結果が閾値よりも低いと判断されると（ステップＳ２１０で“ＮＯ”）、選択したターゲット画素群の各画素の階調値の最小値を選択する（ステップＳ２１４）。具体的には、ＣＰＵ２１は、ステップＳ２０で選択したターゲット画素群の各階調値を読出し、その最小値を演算することになる。演算の方法は、例えば、選択したターゲット画素群のいづれか一の画素の階調値と、他の画素の階調値とを比較し、低い方の画素を選択し、その選択した画素の階調値と他の画素の階調値とで同じ処理を繰り返し、これを選択したターゲット画素群の各画素すべてを比較することで演算することができる。図１３（ｃ）に示す例では、２つの画素（（１、０）と（０、１）に位置する画素））の階調値の最小値は、“５０”となるのでこの“５０”をＣＰＵ２１が選択することになる。選択すると、選択された近傍の画素の階調値は、もとの階調値から最小値を引いた値をターゲット画素の階調値として入力バッファ２７１に格納されることになる。図１３（ｃ）に示す例では、それぞれその階調値は“０”（＝５０−５０）となる（図１４（ａ）の入力バッファ２７１参照）。
【００７５】
次いで、ＣＰＵ２１は、選択したターゲット画素を含めた重心位置を演算する。重心位置の演算式は上述の（式１）に各値を代入することで行なわれる。図１３に示す例は、これまで構成したセルの重心位置と位置（１，０）の画素とで演算し、その結果をセルの重心位置としてさらに位置（０，１）の画素とで演算して、ターゲット画素群を含めたセルの重心を求める。ここで、これまで構成したセルの重心位置とその階調値の合計はワーキングメモリ２７２に格納されているので、ＣＰＵ２１はこの値を読み出して（式１）に代入し、位置（１、０）の座標とその階調値“５０”を（式１）に代入して、重心位置（ｘ、ｙ）＝（０．５，０）、を得る。そして、この重心位置と位置（０，１）の画素とで、同様の演算を行い、重心位置（ｘ，ｙ）＝（０．３３・・・、０．３３・・・）、及び階調値の合計“１５０”を得る。
【００７６】
ここで、重心位置は上述の（式１）で示されているように必ずしも整数値になるとは限らない。重心に最も近い画素を選択する場合のほかに、重心が位置する画素に最も近い画素を選択する場合でもよい。このようにすることで、重心位置は整数値として演算でき、ＣＰＵ２１の処理する計算量が減ることが期待できる。ただし、演算した重心位置が小数点を含む場合があるので、演算した重心位置のｘ、ｙ座標のそれぞれに０．５を足して、その位置に重心が位置する画素として、画素を選択することも可能である。
【００７７】
このように初期画素のまわりのターゲット画素から均等に階調値を取り込んで重心位置を演算するので、重心位置と最終的に生成されるドットの重心位置との位置ずれが少なくなる。
【００７８】
図１１に戻って、ＣＰＵ２１は、その演算した重心位置をワーキングメモリ２７１に格納し（ステップＳ２１５）、次いで、初期画素含めた各画素の階調値（最小値）の合計を同様にワーキングメモリ２７１に格納する（ステップＳ２１６）（図１４（ｂ）のワーキングメモリ２７２参照）。また、選択した画素は、これ以後未処理画素として選択されないようにするため、ＣＰＵ２１が、対応する入力バッファ２７１の位置に“−１”を格納する（図１４（ｂ）の入力バッファ２７１参照）。そして、ＣＰＵ２１は、ステップＳ２１へ移行することになる。
【００７９】
一方、ステップＳ２１０で閾値よりも演算結果が大きいとき（“ＹＥＳ”のとき）、処理はステップＳ２１１に移行し、閾値からワーキングメモリ２７２に格納された階調値を減算し、その値をターゲット画素群の画素数で除算した値を演算する。例えば、この時点で、初期画素の階調値が“５０”、ターゲット画素群として２つの画素が選択され、その階調値がそれぞれ“１５０”、“２００”であるとき、その演算結果は、“１０２．５”（＝（２５５−１５０）／２）となる。
【００８０】
次いで、ＣＰＵ２１は、ステップＳ２１１での演算結果を用いて、選択した画素を含めた重心を演算する（ステップＳ２１２）。上述の例では、２つの画素から“１０２．５”づつ、初期画素の階調値との合計を演算して、５０＋１０２．５×２＝２５５を得て、これを選択した画素の階調値として重心を演算する。重心の演算式は、（式１）を用い、演算した重心の位置座標は、ワーキングメモリ２７２にそれぞれ格納される。そして、その合計値（階調値の合計値）もワーキングメモリ２７２に格納され（ステップＳ２１３）、ステップＳ２２へと移行する。なお、この場合にターゲット画素群の階調値は、取り込まれた値から減算した値をその画素の階調値としてもとの画素に戻すことを行う。すなわち、上述の例ではターゲット画素群として選択された２つの画素の階調値はそれぞれ“１５０”と“２００”であるが、取り込んだ１０２．５を引いた値（それぞれ“４７．５”と“９７．５”）をその画素の階調値として以後の処理を行う。当該画素に残った階調値を戻しているため、ドットの生成が入力階調値に忠実に再現することができる。なお、この戻しデータがある画素に対してはその入力バッファ２７１に“−１”を格納せず、以後の処理で未処理画素として選択されることとなる。
【００８１】
ステップＳ２２では、ＣＰＵ２１は、ワーキングメモリ２７２に格納した階調値の合計がドット生成量、すなわち“２５５”とした閾値に達したか否かを判断する。ＣＰＵ２１は、ワーキングメモリ２７２から階調値の合計を読出し、ＲＯＭ２２５に予め格納された閾値“２５５”と比較して処理を行う。閾値に達した場合（“ＹＥＳ”の場合）、処理はステップＳ１８に移行し、閾値に達しない場合は、再びステップＳ１３へ移行することになる。
【００８２】
図１４（ｂ）に示す例では、その合計は“１５０”で閾値である“２５５”に達しないので、ステップＳ１３に以降することになる。
【００８３】
閾値に達しない場合は、ステップＳ１３に移行して、ＣＰＵ２１は、４近傍に未処理画素あるか否か判断する。ステップＳ２２から本ステップに移行した場合は、初期画素を中心に４近傍の画素は既に選択済みのため、“ＮＯ”が選択されて、ステップＳ１４に移行することになる。
【００８４】
ＣＰＵ２１は、ステップＳ１４において、重心に最も近い未処理画素を選択する。重心は、すでにステップＳ２１２或いはステップＳ２１５においてワーキングメモリ２７２にその値が格納されているので、その値をＣＰＵ２１が読み出して、未処理画素を選択することができる。また、重心位置を利用せずに、初期画素の位置自体に近い画素を選択するようにしてもよい。図１４（ｂ）に示す例では、未処理画素のうち、位置（１、１）の画素が重心（０．３３・・・，０．３３・・・）から最も近いので、この画素を選択する。このように重心を利用しているので、最終的に生成されるセルの構成は円状に成長するため、重心にドットを形成しても、ドット間で一定距離を保つことができる。ＣＰＵ２１は、選択した画素に対応する出力バッファ２７３の位置に“０”を格納する（図１４（ｃ）出力バッファ２７３参照）。
【００８５】
次いで、ＣＰＵ２１は、選択した画素を含めた重心を演算する（ステップＳ１５）。重心の演算は、（式１）を用いて行なう。これまで構成したセルの重心の座標と階調値の合計は、ワーキングメモリ２７２に格納されているので、これを読出し、（式１）はＲＯＭ２５に格納されているので同様にこれを読出し、選択画素の座標と階調値は、入力バッファ２７１に格納されているので、これを読み出して、（式１）に代入して演算することができる。図１４（ｂ）に示す例では、選択画素は（１、１）、その階調値は“５０”、ワーキングメモリ２７２に重心の座標（０．３３・・・、０．３３・・・）と階調値の合計“１５０”、これらを（式１）代入して演算を行なうと、重心位置は（０．５、０．５）を得る。演算した結果は、ＣＰＵ２１によってワーキングメモリ２７２に再び格納させることになる（図１４（ｃ）のワーキングメモリ２７２参照）。
【００８６】
次いで、ＣＰＵ２１は、選択した未処理画素を含めた階調値の合計をワーキングメモリ２７２に書き込み、選択した未処理画素に対応する入力バッファ２７１の位置に“−１”を書き込む（ステップＳ１６）（図１４（ｃ）入力バッファ２７１とワーキングメモリ２７２参照）。
【００８７】
次いで、ＣＰＵ２１は、これまで選択した画素の階調値の合計が、ドット生成量に達したか否か判断する（ステップＳ１７）。ステップＳ２２と同様に、階調値の合計が閾値“２５５”に達したか否かで判断される。図１４（ｃ）の例では、これまで選択した画素の階調値の合計は“２００”（階調値の合計値は、この時点でワーキングメモリ２７２に格納されている）で、閾値に達しないので、本ステップで“ＮＯ”が選択されて、再びステップＳ１４に移行する。
【００８８】
ステップＳ１４に移行すると上述の処理を閾値に達するまで、繰り返すことになる。図１４（ｃ）の例では、ステップＳ１４にて未処理画素を選択することになるが、重心（０．５、０．５）から最も近い画素は、複数存在することになる（（０、２）、（１、２）、（２、０）、（２、１）の４つの画素）。ここではランダムにいづれか一つ選択することにする。上述したように、ドットによる周期パターンの発生を抑えるためである。ここでは、位置（０、２）にある画素を選択することにする。
【００８９】
そして、ＣＰＵ２１は選択画素含めた重心位置を演算し（ステップＳ１５）、セルの階調値の合計を演算し、これらの結果をワーキングメモリ２７２に格納し、選択した画素の入力バッファ２７１に“−１”を格納する（ステップＳ１６）。位置（０，２）の画素を選択しても、その階調値の合計は“２５０”でまだドット生成量に達していない。よって、ステップＳ１７で“ＮＯ”が選択されて、再び未処理画素の選択を行う（ステップＳ１４）。この例の場合、重心位置から最も近い距離にある画素は（１、２）となる。
【００９０】
このとき画素（１、２）の階調値をこれまで構成したセルの階調値の合計との和をとると閾値“２５５”を超えて“３１５”となる。この場合は、上述したようにその画素（１、２）の階調値は、セルの階調値の合計が閾値となる値“５”として重心等の演算を行う。画像に変化のある領域でも、その変化に影響されずに重心を演算するためである。そして、（式１）を用いて重心を演算すると、（０．３８、０．８８）、階調値の合計は“２５５”を得て、ワーキングメモリ２７２にＣＰＵ２１によって格納されることになる（図１５（ａ）のワーキングメモリ２７２参照）。そして、最後に選択した画素の階調値を戻しデータとして“６０”（＝６５−５）を入力バッファ２７１に格納させることになる。構成したセル以外の画素に戻すと、入力階調値の分布に忠実にドットを生成させることができず、これを防止するためである。
【００９１】
そして、その階調値の合計が“２５５”となるので、ステップＳ１７で“ＹＥＳ”が選択されて、重心位置のドットを生成する処理を行う（ステップＳ１８）。具体的には、重心位置に位置する画素に黒ドットを打つことを示す“２５５”を対応する出力バッファ２７３にＣＰＵ２１によって格納されることになる（図１５（ａ）の出力バッファ２７３参照）。
【００９２】
次いで、ＣＰＵ２１は、未処理画素があるか否か判断する（ステップＳ１９）。具体的には、ＣＰＵ２１は、入力バッファに“−１”が格納されていない画素を選択することになり、すべて“−１”が格納されていればすべて上述の処理が終了しているので、本ステップで“ＮＯ”が選択されて処理が終了することになる（ステップＳ２０）。まだ、“−１”が格納されていない画素があれば、未処理画素が存在することになるので、再びステップＳ１１に移行し上述の処理を未処理画素がなくなるまで繰り返すことになる。図１５（ａ）に示す例では、まだ未処理画素があるので、初期画素を選択して（未処理画素のうち最も上側でかつ最も左側に位置する画素、位置（２、０）の画素を選択）、上述の処理を繰り返す。
【００９３】
一方、図９に戻り、ステップＳ１２で初期画素が白成分が少なく黒成分が多い画素であると判断されると（“ＮＯ”のとき）、黒濃度処理（ステップＳ２４）に移行する。黒濃度処理の動作を示すフローチャートを図１２に示す。このように白成分が多いか少ないかを判断しているのは、最終的なドット生成処理で、黒ドットを生成する場合（ステップＳ１３からＳ１８までの処理）と、何もドットを生成しない白ドットを生成させる場合とでは、処理が異なるからである。
【００９４】
また、黒ドット生成処理の場合と同様に、図１６（ａ）に示すよう入力画像データが入力バッファ２７１に格納されているとして以下説明する。また、その初期画素の重心位置及び階調値もすでにステップＳ１１によりワーキングメモリに格納されている（図１６（ｂ）参照）。
【００９５】
黒濃度処理に移行すると、ＣＰＵ２１は、黒ドット生成の場合と同様に、初期画素の４近傍に未処理画素があるか否か判断する（ステップＳ２４１）。これは黒ドット生成処理（ステップＳ１３からＳ１８）と同様に、初期画素を中心にすでに画素として選択されたことを示す“−１”が格納されているか否かで判断される。図１６（ｂ）の例では、初期画素（０、０）を中心に２つの画素（（０、１）と（１、０））には“−１”が書き込まれていないので未処理画素があると判断される（“ＹＥＳ”）。
【００９６】
未処理画素が４近傍にあると判断されると、ＣＰＵ２１は、選択された未処理画素をターゲット画素群として選択する（ステップＳ２４９）。図１６（ｂ）の例では、（ｎ＋１、ｍ）と（ｎ、ｍ＋１）に位置する２つの画素をターゲット画素群として選択することになる。なお、このターゲット画素群として選択された画素は、その入力バッファ２７１に格納された階調値を閾値から減算した値の階調値を有する画素として選択し、その値をＣＰＵ２１は入力バッファ２７１の選択された画素位置に格納することになる。そのまま以後の処理を行うと、構成されるセルの階調値がすぐに閾値に達してしまい、セルの大きさを確保できずに、ドット密度が多くなりすぎて、快適な印刷出力を得ることができなくなってしまうからである。図１６（ｂ）に示す例では、２つの画素（ｎ＋１、ｍ）、（ｎ、ｍ＋１）の階調値はそれぞれ“５０”（＝２５５−２０５）として以後、処理を行う。
【００９７】
次いで、ＣＰＵ２１は、ターゲット画素群の吸収処理に移行する（ステップＳ２５０）。ターゲット画素群の吸収処理の動作を示すフローチャートを図１１に示す。ほぼ、黒ドット生成処理の場合と同様である。
【００９８】
まず、黒ドットの生成処理と同様に、ターゲット画素群の画素数とその画素群の階調値の最小値との積をとり、その値とこれまで構成したセルの階調値の合計との和を取る。なお、このときの各画素の階調値は上述した閾値からの減算結果で演算される。その演算結果が閾値（“２５５”）より小さいと“ＮＯ”が選択され、そうでないと“ＹＥＳ”が選択される。図１６（ｂ）に示す例では、位置（ｎ＋１、ｍ）及び（ｎ、ｍ＋１）との階調値の最小値は“５０”、選択画素数は２、これまで構成したセルの階調値の合計は“５０”で、演算すると“１５０”で閾値“２５５”には達しないので本ステップで“ＮＯ”が選択される。
【００９９】
ステップＳ２１０で“ＮＯ”が選択されると、ＣＰＵ２１は、ターゲット画素群の最小値を選択する（ステップＳ２１４）。図１６（ｂ）に示す例では、“５０”が選択される。
【０１００】
次いで、ＣＰＵ２１は、選択した画素を含めた重心位置を演算する（ステップＳ２１５）。重心位置の演算式は、上述した（式１）により演算する。重心を演算した結果（もちろん、各画素の階調値は閾値から減算した値で演算する）は、同様にワーキングメモリ２７２に格納される（図１６（ｃ）のワーキングメモリ参照、“＊＊”で図面上記載しているが実際には、（ｎ＋０．３３・・・、ｍ＋０．３３・・・）となる）。
【０１０１】
次いで、ＣＰＵ２１は、ターゲット画素群の最小値を吸収して、ターゲット画素群を含めて構成されたセルの階調値の合計を演算し、その結果をワーキングメモリ２７２に格納する（図１６（ｃ）のワーキングメモリ参照）。また、ＣＰＵ２１は、選択したターゲット画素群の対応する入力バッファ２７１に以後未処理画素として選択されないことを示す“−１”を格納し、選択した画素の対応する出力バッファ２７３の位置にドットを打つ処理を行わせるための“２５５”を格納する。黒ドット生成処理のときは“０”を出力バッファ２７２に格納させたが、白ドットを生成するための処理は、まわりに黒ドットを生成させ、重心位置に白ドットを生成させるために、何もドットを打たないことを示す“０”を格納させて、白ドットを表現させるからである。そして、処理はステップＳ２５１に移行する。
【０１０２】
一方、ステップＳ２１０で、演算結果が閾値よりも大きいと、黒ドット生成処理と同様に、閾値からワーキングメモリ２７２に格納された階調値を減算し（ステップＳ２１１）、ターゲット画素群として選択された画素数で除した値を、ターゲット画素群から均等に階調値を取り込む（この場合も、その取り込む階調値は閾値から原階調値を減算した値として演算する）。そして、その値で（式１）を使用して重心の演算を行う（ステップＳ２１２）。演算結果は、黒ドット処理と同様に、ワーキングメモリ２７２に格納し、当該画素の階調値から選択したターゲット画素群に取り込まれた階調値を減算して、当該画素に戻すことになる。そして、処理はステップＳ２５１へ移行することになる。
【０１０３】
ＣＰＵ２１は、ステップＳ２５１に移行すると、選択したターゲット画素群含めたセルの階調値の合計が閾値（“２５５”）に達したか否か判断される。閾値に達しないと（“ＮＯ”）、再びステップＳ２４１に移行し、閾値に達した場合は（“ＹＥＳ”）、ステップＳ２４６に移行する。上述の図１６（ｃ）に示す例では、閾値に達しない（合計値は“１５０”）ので、ステップＳ２４１に移行する。
【０１０４】
そして、ＣＰＵ２１は、ステップＳ２４１にて初期画素の４近傍に未処理画素が存在するか否か判断されるが、すでに４近傍は以前の本ステップにて“ＹＥＳ”が選択されたので、ステップＳ２５１から戻って本ステップを判断すると“ＮＯ”が選択され、ステップＳ２４２に移行することになる。
【０１０５】
ＣＰＵ２１は、ステップＳ２４２で重心に最も近い未処理画素を選択する。円状にセルを成長させるためである。重心位置に最も近い画素が複数あるときは、ランダムに選択する。周期パターンの発生を抑えるためである。選択した画素の階調値は、原階調値を閾値から減算した値として入力バッファ２７１に再び書き込む。セルの大きさを一定範囲に保つためである。さらに、未処理画素として選択した画素に対応する出力バッファ２７３の位置に“２５５”を書き込む。黒ドットを打つ処理を行わせるためである。
【０１０６】
次いで、ＣＰＵ２１は、選択した未処理画素を含めた重心を演算する（ステップＳ２４３）。演算は、（式１）を用いる。これまで構成したセルの重心等は、ワーキングメモリ２７２に格納され、選択した画素の座標等は入力バッファ２７１に対応或いは格納され、（式１）はＲＯＭ２５に書き込まれているので、ＣＰＵ２１がそれぞれ読み出して演算を行う。演算した重心位置は、再びワーキングメモリ２７２に格納する。
【０１０７】
次いで、ＣＰＵ２１は、未処理画素をバッファに吸収する（ステップＳ２４４）。すなわち、ＣＰＵ２１は、未処理画素を含めたセルの階調値の合計をワーキングメモリ２７２に格納し、選択した画素の対応する入力バッファ２７１の位置に以後未処理画素として選択されないよう“−１”を格納する。
【０１０８】
次いで、ＣＰＵ２１は、セルの階調値の合計が閾値（“２５５”）に達したか否か判断され（ステップＳ２４５）、達しないと再びステップＳ２４４に移行し、閾値に達するまで処理が繰り返される。なお、ステップＳ２４２で未処理画素を選択し、その階調値とこれまで構成したセルの階調値との合計値が閾値を超えてしまう場合は、選択した未処理画素の階調値を、閾値となる値としてステップＳ２４３およびステップＳ２４４で演算を行う。黒ドット生成処理とこの点は同様である。
【０１０９】
閾値に達すると（ステップＳ２４５で“ＹＥＳ”のとき）、処理はステップＳ２４７に移行し、重心位置に白ドットの生成を行う（ステップＳ２４６）。重心位置はワーキングメモリ２７２に格納されているので、その位置に位置する画素に何もドットを打たないことを示す“０”を対応する出力バッファ２７３に格納する。これによりまわりに黒ドットが生成され、重心位置に何もドットを打たない画素が存在することで、白ドットを生成させることができる（図１７（ａ）参照）。
【０１１０】
次いで、ＣＰＵ２１は、未処理画素があるか否か判断する（ステップＳ２４７）。黒ドット生成と同様に、入力バッファ２７１のすべての画素が“−１”となれば“ＹＥＳ”が選択されて処理が終了し（ステップＳ２４８）、そうでないと、未処理画素を処理するため、再びステップＳ１１に移行し、上述の処理を繰り返すことになる。
【０１１１】
上述したすべての処理が終了するとＣＰＵ２１は、ＲＡＭ２７の出力バッファ２７３に書き込まれた値を読出し、ＲＯＭ２５に格納されたパルス幅生成のための処理を行い、駆動パルスデータとして、印刷エンジン３０に出力する。そして、印刷エンジン３０では、この駆動パルスデータをもとに駆動パルスあり又はなし等を示す制御データを生成し、この制御データに基づいて感光ドラムに影像が転写され、実際に印刷用紙にホストコンピュータ１０からのデータが印刷されることになる。
【０１１２】
上述した例は、閾値を“２５５”として処理を行ったがそれ以外の値であってもよい。また、上述の処理をホストコンピュータで実行させて、その処理後のデータを画像出力装置に出力して、印刷を行うようにしてもよい。また、画像出力装置としてレーザドライバを有するページプリンタで説明したが、インクジェットプリンタやバブルジェット（登録商標）プリンタなどでも実現することは可能である。さらに、ハーフトーン処理後のデータは、“０”か“２５５”の２値データとしたが、その他４値のデータ、複数種類の値を有するデータであってもよい。
【０１１３】
以上説明してきたように本発明によれば、どのような画像データが入力されても、円状にセルが成長し、その重心にドットを生成させると高画質で快適な印刷出力を得ることができる。
【０１１４】
なお、上述した例では、選択した初期画素に隣接する画素を選択して画素を取り込むようにしたが、さらにその隣接画素に隣接する画素を選択してその画素の階調値をセルに取り込むようにしてもよい。
【０１１５】
また、選択した隣接画素から均等にその階調値を取り込むようにしたが、必ずしも均等にではなく、例えば図１４（ａ）の初期画素に隣接する２つの画素からそれぞれ“２０”、“３０”の値を取り込むようにしてもよい。
【０１１６】
さらに、隣接する画素から階調値を取り込んだ後、閾値に達しない場合に、セルに取り込むべき画素をランダムに選択したが、ランダムではなく、さらに重心位置にある画素に隣接する画素やその画素に隣接する画素を選択するようにして同じ処理を繰り返すようにしてもよい。
【図面の簡単な説明】
【図１】本発明によるシステム全体の構成図である。
【図２】本発明の画像出力装置の構成を示す図である。
【図３】本発明によるセルの構成方法の一例を示す図である。
【図４】本発明によるセルの構成方法の一例を示す図である。
【図５】本発明によるセルの構成方法の一例を示す図である
【図６】本発明によるセルの構成方法の一例を示す図である
【図７】本発明によるセルの構成方法の一例を示す図である
【図８】本発明によるセルの構成方法の一例を示す図である
【図９】本発明の実施の形態の動作を示すフローチャートを示す図である。
【図１０】本発明の実施の形態の動作を示すフローチャートを示す図である
【図１１】ターゲット画素群の吸収処理の動作を示すフローチャートである。
【図１２】黒濃度処理の動作を示すフローチャートである。
【図１３】ＲＡＭ２７の構成と格納される値の例を示す図である。
【図１４】ＲＡＭ２７の構成と格納される値の例を示す図である。
【図１５】ＲＡＭ２７の構成と格納される値の例を示す図である。
【図１６】ＲＡＭ２７の構成と格納される値の例を示す図である。
【図１７】ＲＡＭ２７の構成と格納される値の例を示す図である。
【符号の説明】
１０  ホストコンピュータ  ２０  画像出力装置  ２１  ＣＰＵ  ２３  入力Ｉ／Ｆ  ２５  ＲＯＭ  ２６  ハーフトーン処理部  ２７  ＲＡＭ  ２７１  入力バッファ  ２７１ａ  未処理画素  ２７１ｃ  セル  ２７１ｄ  重心  ２７２  ワーキングメモリ  ２７３  出力バッファ  ２８  パルス幅変調部  ３０  印刷エンジン
【図１】
2004320374.tif 000004
【図２】
2004320374.tif 000005
【図３】
2004320374.tif 000006
【図４】
2004320374.tif 000007
【図５】
2004320374.tif 000008
【図６】
2004320374.tif 000009
【図７】
2004320374.tif 000010
【図８】
2004320374.tif 000011
【図９】
2004320374.tif 000012
【図１０】
2004320374.tif 000013
【図１１】
2004320374.tif 000014
【図１２】
2004320374.tif 000015
【図１３】
2004320374.tif 000016
【図１４】
2004320374.tif 000017
【図１５】
2004320374.tif 000018
【図１６】
2004320374.tif 000019
【図１７】
2004320374.tif 000020