JP2004320374A - 画像処理装置、画像処理方法、印刷装置、印刷方法及びプログラム - Google Patents
画像処理装置、画像処理方法、印刷装置、印刷方法及びプログラム Download PDFInfo
- Publication number
- JP2004320374A JP2004320374A JP2003110690A JP2003110690A JP2004320374A JP 2004320374 A JP2004320374 A JP 2004320374A JP 2003110690 A JP2003110690 A JP 2003110690A JP 2003110690 A JP2003110690 A JP 2003110690A JP 2004320374 A JP2004320374 A JP 2004320374A
- Authority
- JP
- Japan
- Prior art keywords
- pixel
- center
- gravity
- pixel group
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】セルの重心位置とドットの重心位置との位置ずれをなくし、ドットが固まって発生するのを防止して高画質で快適な印刷出力を得る。
【解決手段】画素ごとにN(Nは整数)種のレベル値を有する第1の画像データをM種(M<N、Mは整数)のレベル値を有する第2の画像データに変換して出力する画像処理装置において、前記第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、 前記画素群生成手段で選択した未処理画素のそれぞれから均等にレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、前記重心位置決定手段で決定した重心に位置する画素に対して前記M種のレベル値のうち所定の値を設定して前記第2の画像データを出力する出力手段と、
を備えることを特徴とする画像処理装置。
【選択図】図9
【解決手段】画素ごとにN(Nは整数)種のレベル値を有する第1の画像データをM種(M<N、Mは整数)のレベル値を有する第2の画像データに変換して出力する画像処理装置において、前記第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、 前記画素群生成手段で選択した未処理画素のそれぞれから均等にレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、前記重心位置決定手段で決定した重心に位置する画素に対して前記M種のレベル値のうち所定の値を設定して前記第2の画像データを出力する出力手段と、
を備えることを特徴とする画像処理装置。
【選択図】図9
Description
【0001】
【発明の属する技術分野】
本発明は、画素ごとに所定の階調値を有する画像データに対して、セルを構成しその重心位置にドットを生成させる画像処理装置、画像処理方法、印刷装置、印刷方法、及びプログラムに関する。
【0002】
【従来の技術】
従来より、デジタル画像の1画素が多数の値を持ち得る連続階調のデータを少数の階調(例えば2値)に変換する、ハーフトーン処理が行われている。ハーフトーン処理の方法としては、誤差拡散法がよく知られている。誤差拡散法では、変調の周期(ドットを打つ位置の周期)が入力画像の階調値に応じて変化するため、その周期が閾値マトリックスで予め決められたディザ法に比べ、高い解像度を有している。
【0003】
一方で、誤差拡散法は、入力画像の階調値が低濃度の値で分布していると、誤差が遠く離れた画素まで拡散する場合もあり、結果的にドットの分散性が劣化する問題があった。
【0004】
そこで、入力画像を所定の大きさのセルに分割し、各セルの中心位置にドットを生成させるようにすることで、誤差拡散法の高解像性を保持したまま、ドットのつながりなどの画質劣化を防止する技術が開示されている(例えば、特許文献1)。
【0005】
【特許文献1】
特開平11−27528号公報(図4、図7)
【0006】
【発明が解決しようとする課題】
しかしながら、上述した特開平11−27528は、入力画像の中間階調領域においてすぐに閾値に達するため、セルサイズが小さくなってしまう。かかるサイズが小さいと、隣接するセルで最終的に生成されるドットが繋がったり離れたりドット間距離にばらつきが生じ、視覚的にドットが目立ち快適な印刷出力を得ることができない問題点があった。
【0007】
また、ドットを生成させるためのセルの中心位置の計算についても、演算した中心位置は必ずしも整数値とならない。従って、その中心位置とドットの中心位置とのずれが発生し、例えば、複数のセルでドットが固まって発生するなど、視覚的に快適な印刷出力を得ることができない問題点があった。
【0008】
そこで、本発明は、どのような階調値を有する入力画像に対しても、複数の画素から構成されるセルを円状に形成させてドット間距離を一定に保つよう処理を行う画像処理装置、画像処理方法、及びプログラム、さらに、高画質で快適な印刷出力を得る印刷装置、印刷方法を提供することを目的とする。
【0009】
【課題を解決するための手段】
上記目的を達成するために、本発明は、画素ごとにN(Nは整数)種のレベル値を有する第1の画像データをM種(M<N、Mは整数)のレベル値を有する第2の画像データに変換して出力する画像処理装置において、第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、重心位置決定手段で決定した重心に位置する画素に対して前記M種のレベル値のうち所定の値を設定して前記第2の画像データを出力する出力手段とを備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0010】
また、本発明は上記画像処理装置であって、上記画素群生成手段は、隣接する複数の未処理画素により画素群を生成しても所定の画素のレベル値を含めた画素群のレベル値の総和が閾値以下のとき、さらに画素ごとのレベル値の総和が閾値以上になるまで、これまで生成した画素群の重心位置決定手段で決定した重心から最も近い画素を選択して画素群を生成することを特徴としている。これにより、例えば、生成した画素群が円状に形成し、その重心にドットを生成させてもドット間の距離が一定に保たれ、快適な印刷出力を得る。
【0011】
また、本発明は上記画像処理装置であって、上記重心位置決定手段は、画素群生成手段で選択した隣接する未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と所定の画素のレベル値との合計が閾値以下のとき、選択した未処理画素のレベル値のうち最小のレベル値を選択した未処理画素のそれぞれから均等に所定の画素のレベル値に加算して画素群の重心位置を決定することを特徴としている。これにより、例えば、所定の画素に均等にレベル値を取り込む際に未処理画素のレベル値以上のレベル値を取り込むことなく、重心位置のずれが少なくなる。
【0012】
また、本発明は上記画像処理装置であって、上記重心位置決定手段は、画素群生成手段で選択した隣接する未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と所定画素のレベル値との合計が前記閾値よりも大きいとき、所定の画素のレベル値が閾値となるように画素群生成手段で選択した隣接する未処理画素からそれぞれ均等にレベル値を所定の画素のレベル値に加算して重心を決定することを特徴としている。これにより、所定の画素に閾値以上のレベル値を取り込んで重心位置を決定することがないので、重心位置のずれが少なくなる。
【0013】
また、本発明は上記画像処理装置であって、上記画素群生成手段は、重心位置決定手段で決定した重心から最も近い画素が複数存在するとき、ランダムに画素を選択することを特徴としている。これにより、例えば、ドット間で周期パターンの発生を抑えて快適な印刷出力を得ることができる。
【0014】
また、本発明は上記画像処理装置であって、上記重心位置決定手段は、画素群の位置と第1の画像データのレベル値とで重心位置を決定することを特徴としている。
【0015】
また、本発明は、上記画像処理装置であって、前記画素群生成手段は、所定の画素に隣接する未処理画素を選択し、さらに当該隣接する未処理画素に隣接する未処理画素を選択して画素群を生成することを特徴としている。
【0016】
さらに、上記目的を達成するために本発明は、画素ごとにN(Nは整数)種のレベル値を有する第1の画像データをM種(M<N、Mは整数)のレベル値を有する第2の画像データに変換して出力する画像処理方法であって、第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、画素群生成ステップで選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定ステップと、重心位置決定ステップで決定した重心に位置する画素に対してM種のレベル値のうち所定の値を設定して第2の画像データを出力する出力ステップと、を備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0017】
さらに、上記目的を達成するために本発明は、画素ごとにN(Nは整数)種のレベル値を有する第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成処理と、画素群生成処理で選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定処理と、重心位置決定処理で決定した重心に位置する画素に対してM種のレベル値のうち所定の値を設定して第2の画像データを出力する出力処理とをコンピュータに実行させるためのプログラムであることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0018】
さらに、上記目的を達成するために本発明は、画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷装置において、画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定手段と、記重心位置決定手段で決定した重心に位置する画素に量子化データを付与する量子化データ付与手段と、量子化データ付与手段で付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御手段と、を備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0019】
さらに、上記目的を達成するために本発明は、画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷方法において、画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、画素群生成ステップで選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定ステップと、重心位置決定ステップで決定した重心に位置する画素に量子化データを付与する量子化データ付与ステップと、量子化データ付与ステップで付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御ステップと、を備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0020】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。
【0021】
図1は、本発明による画像出力システムを入力画像に適用した場合のシステム全体構成図である。この例では、ホストコンピュータ10において、生成した階調画像データ16(各画素8ビットで表現)が、ページプリンタなどの画像出力装置20に出力され、画像出力装置20でホストコンピュータ10からの画像データが出力されるようになっている。
【0022】
ホストコンピュータ10は、アプリケーション部12とラスタライズ部14とから構成される。
【0023】
アプリケーション部12は、ホストコンピュータ10内に実装されたアプリケーションプログラムにより印刷対象となる、文字データ、図形データ、ビットマップデータ、その他の種々のデータが生成される。これらのデータは、例えばホストコンピュータに接続された表示装置や入力装置を介して生成させることができる。アプリケーション部12で生成されたデータは、ラスタライズ部14に出力される。
【0024】
ラスタライズ部14は、アプリケーション部12から出力された印刷対象のデータをラスタライズし、各画素または各ドットごと8ビットの値からなる階調画像データ16に変換される。8ビットのデータであるので、各画素は0から255までの値をとることができる。ラスタライズ部14は、実際にはホストコンピュータ10に実装されたドライバによって実行されることになる。8ビットのデータに変換された階調画像データ16は、画像出力装置20に出力される。
【0025】
画像出力装置60は、ハーフトーン処理部26、パルス幅変調28と、印刷エンジン30とから構成される。
【0026】
ハーフトーン処理部26は、入力された階調画像データ16に対して、より少数の階調の値(2値や4値など)に変換する処理を行う。この階調画像データ16は、0から255までのレベル値を有する連続階調の値を有しており、例えばこれを2値のレベル値(0及び1など)に変換することで、画像出力装置20で実際に用紙に印刷するときに、ドットをうつ又はうたない、という処理を行うことが可能になる。
【0027】
ハーフトーン処理部26によって所定の階調値に変換されたデータ30は、パルス幅変調部28に出力される。パルス幅変調部28は、各画素ごと変換されたデータ30を、レーザー駆動パルスあり又はなし等を示す駆動データ29に変換する。生成された駆動データ29は、印刷エンジン30に出力される。
【0028】
印刷エンジン30は、レーザードライバ32と、レーザーダイオード34とから構成される。レーザードライバ32は、入力された駆動データ29から、駆動パルスあり又はなし等を示す制御データを生成し、レーザーダイオード34に出力する。レーザーダイオード34は、レーザードライバ32からのこの制御データに基づいて駆動され、また図示しない感光ドラムや転写ベルトが駆動されて、実際に印刷用紙にホストコンピュータ10からのデータが印刷されることになる。
【0029】
次に画像出力装置20の具体的構成を、図2を参照して説明する。
【0030】
ここで、図1のハーフトーン処理部26は、図2におけるCPU21と、ROM25、及びRAM27に対応し、パルス幅変調部28は、CPU21と、ROM25及びRAM27に対応する。また、図2の印刷エンジン30と図1のエンジン30は同じ構成を有する。
【0031】
画像出力装置20は、全体として、CPU21と、入力インターフェース(I/F)23と、ROM25と、RAM27とから構成される。
【0032】
CPU21は、内部バスを介して、入力I/F23、ROM25、RAM27、印刷エンジン30と互いに接続され、重心位置の演算や、未処理画素の選択、ドットの生成等、各種処理を実行するためのものである。詳細は後述する。
【0033】
入力I/F23は、ホストコンピュータ10と画像出力装置20とのインターフェースとしての役割を果たし、本実施例では、ホストコンピュータ10から出力される、ラスタライズされた各画素ごとに所定の階調値を有する入力画像データが入力される。入力された画像データはCPU21の制御により一旦RAM27に格納される。
【0034】
ROM25は、各種プログラムなどが格納される。CPU21の制御によりプログラムが読み出されて、CPU21において各種処理が実行されることになる。
【0035】
RAM27は、CPU21が処理を実行する際のワーキングメモリとしての役割を果たし、実行データ等が一時格納される。その詳細は後述する。
【0036】
印刷エンジン30は、図1のエンジン30と同様の構成で、レーザードライバ32及びLD34とから構成される。
【0037】
次に、全体の動作について説明するが、本発明におけるセルの構成からドット生成までの原理について図3から図8を参照して説明する。
【0038】
ホストコンピュータ10から各画素ごとに所定の階調値を有するデータが入力される。この画像データの例を図3(a)に示す。これは、入力された画像データが入力I/F23を介してCPU21の制御によりRAM27の入力バッファ領域271に格納された例を示している。入力バッファ271は、m行n列の2次元構造を有し、各バッファ内での位置はホストコンピュータ10で生成された画像の画素位置に対応するものである。例えば、入力バッファの(n、m)の位置に格納されたデータは、全体画像における(n、m)の位置に位置する画素の階調値に対応するものである。入力バッファ271等のRAM27の具体的構成は後述する。
【0039】
ここでは、説明を簡単にするため、縦方向はmからm+2まで、横方向はnからn+3までの入力バッファ構造を示しているが、もちろん、1フレーム分全ての画素データを格納できるように入力バッファ271を構成することもできる。
【0040】
ここで行う処理は、初期画素を選択し、その初期画素から等距離にある近傍の画素を選択する。例えば、初期画素を中心に上下左右の画素を選択する(以下このように選択された画素をターゲット画素と呼ぶ)。そして、そのターゲット画素群の各画素から、例えば均等に階調値を初期画素に取り込む。取り込んだ値とその初期画素の階調値との合計が所定の閾値に達した場合はその初期画素の重心にドットを生成させる処理を行う。このように、均等にまわりの画素から階調値を初期画素に取り込むようにしているので、ドットの重心位置と後述するセルの重心位置とのずれが少なくなり、ドットが固まって形成されたり、離れすぎたりすることを防止することができ、快適な印刷出力を得ることができる。
【0041】
また、このように構成されたセルの重心にドットを生成させると、構成されたセルの形状が十字形になるなどより円に近い形状となり、隣り合うセルでドットが繋がったり、離れすぎたりバラつきを抑えて、均一なドット間距離を保ち、視覚的に快適な印刷出力を得ることができるのである。
【0042】
近傍のターゲット画素群でセルを構成しても閾値に達しない場合は、さらに、セルの重心から一番近い距離にある画素を選択してその画素を含めたセルを構成し、閾値に達するまでこれを繰り返すことになる。
【0043】
この場合でも、最初に十字形のセルから出発して、その重心を利用して順次画素を取り込む処理を行うため円に近い形状のセルを構成することが可能である。初期画素に対して4近傍の画素(左右上下の画素)のみならず、8近傍の画素(左右上下と、右斜め上、右斜め下、左斜め上、及び左斜め下の8つの画素)をターゲット画素とすれば、最初から4角形の形状で、より円状にセルが成長することが予想される。
【0044】
ここで、順次画素を取り込む際に重心から近い画素が複数存在する場合がある。かかる場合は、ランダムにいづれか一の画素を選択することにしている。セルに取り込むべき画素が複数ある場合に固定順に選択すると、セルの形が一定でその重心にドットを形成しても全体としてドットの位置が周期的で印刷出力において周期パターンを発生させてしまうことになる。かかる周期パターンは、視覚に映りやすく印刷出力の画像が不自然なものとなってしまう。このパターンの発生を抑えるためにランダムに選択するのである。
【0045】
図3の例に戻って、本発明の原理を説明する。まず初期画素を選択画素として決定する。初期画素は、ここでは、まだ処理されていない未処理画素のうち最も上でかつ最も左側にある画素とする。したがって、図3(a)に示す例では、図3(b)に示すように(n、m)に位置する画素が最も上でかつ左側にある画素なので、この画素が初期画素となり、これを選択画素271aとして選択することになる。
【0046】
次に、その初期画素(n、m)に対して、隣接する近傍のターゲット画素(未処理画素)271aを選択する。ここでは、初期画素(n、m)の右隣と下側にある2つの画素((n+1、m+1)、(n、m+1))とを選択する(図3(c)参照)。セルを円状に生成させるためである。もちろん、さらに画素(n+1、m+1)も含めた3つの画素を選択してもよい。ここでは、2つの画素を選択した場合で以下説明する。そして、選択した画素の階調値を均等に選択画素(n、m)に取り込む(図4(a)参照)。セルの重心位置とドットの重心位置のずれを少なくするためである。この均等に取り込むべき値は、ここでは2つの画素の階調値の最小値である“50”を両画素から取り込む。取り込むべき値の演算については、後述する。このようにして取り込まれた2つの画素は初期画素を含めて1つのセル271cとして図4(b)に示すように構成される。ここでは、初期画素が(n、m)の位置にある画素として選択されているが、例えば画素(n+1、m+1)を初期画素として選択選択され、まわりの4つの画素((n+1、m)、(n、m+1)、(n+2、m+1)、(n+1、m+2))を含めた画素でセル271cを構成すると十字形となり、より円に近いセル形状となる。
【0047】
次に、構成したセル271cの重心位置を演算する。演算の具体的方法は、後述する。ここでは、図4(c)に位置する重心271dに位置することになる。
【0048】
次に、構成したセル271cの階調値の合計が所定の閾値に達したか否か判断し、達していないと、重心271から最も近い距離にある画素をセル271cに取り込むべき画素として選択する。図4(c)に示す例では、閾値を“255”に設定するとすると、セル271cの階調値の合計は、“150”であるので、さらに画素を選択することになる。ここでは、閾値として“255”を選択したがそれ以外の値であってもよい。
【0049】
重心271dから最も近い画素は、図5(a)に示すように、(n+1、m+1)に位置する画素である。これをセル271cに取り込み、この画素を含めた重心271dを演算すると、図5(b)に示す位置271dとなる。
【0050】
しかし、まだセル271cの階調値の合計は“200”であるので、さらに画素を選択する必要がある。重心271dから最も近い距離にある画素は図5(c)に示すように4つの画素((n+2、m)、(n+2、m+1)、(n、m+2)、(n+1、m+2))がある。これら4つの画素のうちいづれか一つランダムに選択する。周期パターンの発生を抑えるためである。ここでは、図6(a)に示すように画素(n、m+2)を選択する。そして、この画素をセル271cに取り込み、そのセル271c内での重心を演算すると、図6(a)に示す重心271dに位置することになる。
【0051】
さらに、セル271cの階調値は、“250”で閾値である“255”に達しないのでさらにその重心271dから最も近い距離にある画素を選択し、セル271cに取り込む。図6(b)に示すように画素(n+1、m+2)を選択するとする。ここで、その選択した画素の階調値をそのまま取り込むとセル271cの階調値の合計は“315”で閾値を超えてしまう。そこで、丁度セルの階調値の合計が閾値に達するようにその画素の階調値を取り込み、残った階調値をその画素に戻しデータとして値を戻すことにする。このようにすることで、最終的に選択した画素の階調値が周辺の画素と大きく異なる値の場合でも、その階調値に影響されず重心を求めることができる。例えば画素に変化がある境目などでも、その変化に影響されずに重心が求まる。また、戻しデータとして当該画素にその残った階調値を戻すことで、入力階調値の分布に忠実にドットを生成することができる。戻しデータを、構成したセル271c以外の画素に戻すと入力分布に忠実にドットを生成させることができなくなってしまう。
【0052】
そして、最終的に構成したセル271cの重心に位置する画素にドットを生成させるための処理を行う。図6(c)に示す例では、画素(n、m+1)にドットを生成させるようにすることになる。
【0053】
次に、階調値が高い画素が画像出力装置20に入力された場合を考える(図7(a)参照)。この場合に、上述したように初期画素を中心に隣接する画素を選択してセルを構成するとすぐに閾値に達してしまう。例えば図7(a)にあるように2つの画素(n、m)、(n+1、m)ですぐに閾値に達してしまう。これでは、セルの大きさを一定範囲まで保てず、ドットが隣り合うなど快適な印刷出力を得ることができない。そこで、その諧調値を変更して、処理を行うことによりセルの大きさを一定範囲に保つようにするのである。
【0054】
図7(a)に示す階調値を有する入力画像データが入力された場合で説明する。まず、初期画素を選択するが上述した場合と同様に最も上にある画素のうち最も左側にある未処理画素を選択する。図7(b)に示すように画素(n、m)を選択するとする。このとき、その階調値を閾値から減算した値をその画素の階調値として以下演算することにする。これによりセルの大きさをある程度まで確保することが可能になる。
【0055】
次に、上述と同様に、初期画素(n、m)に隣接する近傍の未処理画素(ターゲット画素)271aを選択する。図7(b)に示す例は、2つの画素(n+1、m)、(n、m+1)をターゲット画素271aとして選択する。このとき選択した画素の階調値を閾値から減算した値を当該画素の階調値とする。2つの画素の階調値は実際にはそれぞれ“205”であるが、閾値から減算した“50”(255−205)をその画素の階調値として以後の処理を行う。そして、図4(a)と同様に均等にターゲット画素から階調値を取り込む。
【0056】
取り込んだ後の階調値の合計は、図7(c)に示すように“150”となる。閾値である“255”に達しないのでさらにセル271cに取り込むべき画素を選択する。選択は重心から最も近い未処理画素を選択するが、その重心位置は図8(a)に示す重心位置271dとなるので、図8(a)に示すように(n+1,m+1)を未処理画素として選択する。
【0057】
選択した画素の階調値は同様に、閾値からその画素の階調値を減算した値(図8(b)に示すように(n+1,m+1)の画素の階調値を“50”とした値)をセル271cに取り込み、その階調値の合計を演算することにする。以後選択した画素を閾値から減算した値として図3から図6と同様にこれを繰り返すことで、図8(c)に示すようにセル271cが構成される。その重心位置271dに位置する画素は(n、m+1)なので、この位置に白ドットを生成させるようにする。また、このとき(n+1,m+1)の画素の階調値のセルへの取り込むべき量は、同様に丁度閾値(“255”)と等しくなる値(“5”)とする。そして、戻しデータとして“5”を加えた値を画素(n+1、m+2)に戻すことになる。
【0058】
以上が本発明の概略である。以下、本発明の具体的動作を図9から図17に示す図面を参照して説明する。図9及び図10は、本発明の具体的動作を示すフローチャートを示す。
【0059】
まず、本処理が開始される前に、入力画像データがホストコンピュータ10から画像出力装置20に入力され、CPU21の制御により入力インターフェース(I/F)23を介してRAM27に一時記憶されていることが前提である。RAM27の具体的構成を図13(a)に示す。
【0060】
RAM27は、入力バッファ領域271とワーキングメモリ272と、出力バッファ273とから構成される。入力バッファ271は、入力画像データが入力された一時記憶するための領域で、上述したように2次元構造を有し、各位置が入力画像の各画素位置に対応する。入力画像の位置(n、m)にある画素は、入力バッファ271の位置(n、m)に格納される。図13(a)に示す例は、説明を簡単にするために3行4列の構成であるが、もちろん上述したように1フレーム分の各画素の階調値を格納する領域があってもよい。
【0061】
ワーキングメモリ272は、主として3つの領域から構成され、重心位置の座標と階調値の合計値とが格納される。出力バッファ273は、入力バッファ271と同様の構成で2次元構成であり、出力バッファ273に対応する位置に印刷用紙上でドットが生成されるように対応している。もちろん、3行4列ではなく、種々の行数、列数を有し、例えば1フレーム分の画像に対応するように構成されていてもよい。
【0062】
以上にように構成されたRAM27に図13(b)の入力バッファ271に示す入力画像データが格納された場合で以下説明する。ここでは、説明を簡単にするため、(n,m)=(0,0)として以下説明することにする。
【0063】
図9に戻り、CPU21は、ROM25から本処理を実行するためのプログラムを読み出すことで、処理が開始される(ステップS10)。
【0064】
次いで、CPU21は、初期画素を決定し、その画素の重心を演算する(ステップS11)。初期画素は、最も上にある画素のうち最も左側にある未処理画素を選択する。図13(b)に示す例では、入力バッファ271の位置(0、0)の画素が選択されることになる。そして、その重心位置を演算する。重心位置の演算は、横方向の重心位置をx、縦方向の重心位置をyとすると、次に示す(式1)によって演算されることになる。
【0065】
(式1)
初期画素の重心位置を求めるときに、(式1)において、これまで構成したセルの重心位置x、yは、ともに0、これまで構成したセルの階調値の合計は0として演算する。その結果、重心位置は(x、y)=(0,0)となる。なお、この演算式は、ROM25に格納され、重心を演算する際にCPU21がROM25から読み出して、RAM27に格納された重心位置、階調値の合計(ともにRAM27のワーキングメモリ272に格納)等を読み出し(式1)に代入して演算することにより行なわれる。
【0066】
演算した重心位置(x、y)は、CPU21によりRAM27のワーキングメモリ272に格納される(図13(c)のワーキングメモリ272参照)。また、CPU21は、選択した初期画素が以後の未処理画素選択の際に選択されないように、すでに選択済みであることを示す“−1”を入力バッファ271の当該画素の位置に格納することになる(図13(c)の入力バッファ271参照)。もちろん、この値は入力画像データの階調値として存在しない値であればよく、例えば他の負の値でもよい。さらに、入力バッファ271と同様の構成のメモリ領域をさらに用意し、そのメモリ内でフラグにより当該画素が選択されたか否かを判別することも可能である。
【0067】
次いで、CPU21は選択した初期画素が白成分が多く黒成分が少ない画素であるか、逆に白成分が多く黒成分が少ない画素であるかを判定する(ステップS12)。白成分が多いとステップS13に移行し、少ないとステップS24の黒濃度処理への移行する。このように、2つの処理を分けているのは、それぞれドットの生成等で異なる処理を行わせる必要があるからである。すなわち、白成分が多い画素はセルの重心にドットを生成させる際にドットを打つ処理を行う必要があり、逆に黒成分が多いと階調値を反転(閾値から階調値を減算した値)させその重心位置に何もドットを生成しない白ドットを生成させる処理を行う必要がある。黒成分が多い画素に対してもステップS13以下と同じ処理を行わせると少ない画素でセルが構成され、ドット間が一定距離保てないからである。
【0068】
白成分が多いか少ないかは、CPU21がROM25に格納された、閾値、ここでは“127”を読み出し、入力バッファ271の初期画素の階調値と比較し、閾値“127”より少ないと白成分が多い画素と判断され、逆の場合は黒成分が多い画素と判断されることになる。
【0069】
CPU21は、白成分が多い画素であると判断すると(ステップS12で“YES”)、初期画素の4近傍に未処理画素があるか否か判断する(ステップS13)。具体的には、CPU21は初期画素を中心に上下左右の4つの画素に対して入力バッファ271に“−1”が格納されているか否かで判断される。このように初期画素を中心に近傍の画素を選択することで、構成されたセルの形状が十字形で円状に近づくことになり、ドットが繋がったり離れすぎたりしてそのばらつきを抑え、視覚的に快適な印刷出力を得ることができる。もちろん、上下左右の近傍の画素のみならず、初期画素を中心に右斜め上、右斜め下、左斜め上、左斜め下の全8つの近傍画素を未処理画素として選択するようにしても、構成されたセルの形状が四角形で円状に近づくことになる。ここでは、初期画素が(0,0)に位置しており、上側と左側に画素が存在しないので、右側と下側の2つの画素の入力バッファ271に格納された値をCPU21が確認する。そして、これらの値は“−1”ではないので、4近傍に未処理画素が存在することにより、本ステップS13で“YES”と判定することになる。
【0070】
初期画素近傍に未処理画素が存在すると(ステップS13で“YES”の場合)、処理はステップS20に移行し、CPU21は選択した複数の未処理画素をターゲット画素群として選択することになる。図13(c)に示す例では、2つの画素(1、0)と(0、1)に位置する画素をターゲット画素群として選択することになる。そして、CPU21は選択した画素に対応する出力バッファ273に“0”を代入する(図14(a)の出力バッファ273参照)。
【0071】
次いで、CPU21は選択したターゲット画素群の吸収処理を行う(ステップS21)。この吸収処理の動作を示すフローチャートを図11に示す。本処理に移行すると、まず選択したターゲット画素群をセルに取り込むべきか否か判断される。すなわち、ターゲット画素群として選択した画素の数を、ターゲット画素群の画素の内階調値が最小な値とで乗算し、その結果をこれまで構成したセルの階調値の合計との和を演算して、その演算値が閾値より低いか高いかを判定する(ステップS210)。
【0072】
ここで閾値は、構成すべきセルの階調値の合計値、“255”とする。演算結果がこの閾値より低いとターゲット画素群の各画素からその最小値を均等に取り込んで以後の処理を行い、逆に高いとターゲット画素群の各画素から所定の階調値を均等に取り込み以後の処理を行うことになる。まわりの画素から均等に階調値を取り込むので、構成されたセルの重心位置とドットの重心位置とのずれが少なくなり、複数のセルでドットが固まって発生するのを防止することができる。これにより、快適な印刷出力を得ることができる。
【0073】
図13(c)に示す例では、選択されたターゲット画素群の画素数は(1,0)と(0,1)の2つだけなので“2”、2つの画素の階調値の最小値は“50”、これまで構成したセルの階調値の合計は“50”であるから、その演算結果は“150”(=(50×2)+50)となる。この値は、閾値(“255”)より低い値なので、ステップS210で“NO”が選択される。
【0074】
CPU21は、この演算結果が閾値よりも低いと判断されると(ステップS210で“NO”)、選択したターゲット画素群の各画素の階調値の最小値を選択する(ステップS214)。具体的には、CPU21は、ステップS20で選択したターゲット画素群の各階調値を読出し、その最小値を演算することになる。演算の方法は、例えば、選択したターゲット画素群のいづれか一の画素の階調値と、他の画素の階調値とを比較し、低い方の画素を選択し、その選択した画素の階調値と他の画素の階調値とで同じ処理を繰り返し、これを選択したターゲット画素群の各画素すべてを比較することで演算することができる。図13(c)に示す例では、2つの画素((1、0)と(0、1)に位置する画素))の階調値の最小値は、“50”となるのでこの“50”をCPU21が選択することになる。選択すると、選択された近傍の画素の階調値は、もとの階調値から最小値を引いた値をターゲット画素の階調値として入力バッファ271に格納されることになる。図13(c)に示す例では、それぞれその階調値は“0”(=50−50)となる(図14(a)の入力バッファ271参照)。
【0075】
次いで、CPU21は、選択したターゲット画素を含めた重心位置を演算する。重心位置の演算式は上述の(式1)に各値を代入することで行なわれる。図13に示す例は、これまで構成したセルの重心位置と位置(1,0)の画素とで演算し、その結果をセルの重心位置としてさらに位置(0,1)の画素とで演算して、ターゲット画素群を含めたセルの重心を求める。ここで、これまで構成したセルの重心位置とその階調値の合計はワーキングメモリ272に格納されているので、CPU21はこの値を読み出して(式1)に代入し、位置(1、0)の座標とその階調値“50”を(式1)に代入して、重心位置(x、y)=(0.5,0)、を得る。そして、この重心位置と位置(0,1)の画素とで、同様の演算を行い、重心位置(x,y)=(0.33・・・、0.33・・・)、及び階調値の合計“150”を得る。
【0076】
ここで、重心位置は上述の(式1)で示されているように必ずしも整数値になるとは限らない。重心に最も近い画素を選択する場合のほかに、重心が位置する画素に最も近い画素を選択する場合でもよい。このようにすることで、重心位置は整数値として演算でき、CPU21の処理する計算量が減ることが期待できる。ただし、演算した重心位置が小数点を含む場合があるので、演算した重心位置のx、y座標のそれぞれに0.5を足して、その位置に重心が位置する画素として、画素を選択することも可能である。
【0077】
このように初期画素のまわりのターゲット画素から均等に階調値を取り込んで重心位置を演算するので、重心位置と最終的に生成されるドットの重心位置との位置ずれが少なくなる。
【0078】
図11に戻って、CPU21は、その演算した重心位置をワーキングメモリ271に格納し(ステップS215)、次いで、初期画素含めた各画素の階調値(最小値)の合計を同様にワーキングメモリ271に格納する(ステップS216)(図14(b)のワーキングメモリ272参照)。また、選択した画素は、これ以後未処理画素として選択されないようにするため、CPU21が、対応する入力バッファ271の位置に“−1”を格納する(図14(b)の入力バッファ271参照)。そして、CPU21は、ステップS21へ移行することになる。
【0079】
一方、ステップS210で閾値よりも演算結果が大きいとき(“YES”のとき)、処理はステップS211に移行し、閾値からワーキングメモリ272に格納された階調値を減算し、その値をターゲット画素群の画素数で除算した値を演算する。例えば、この時点で、初期画素の階調値が“50”、ターゲット画素群として2つの画素が選択され、その階調値がそれぞれ“150”、“200”であるとき、その演算結果は、“102.5”(=(255−150)/2)となる。
【0080】
次いで、CPU21は、ステップS211での演算結果を用いて、選択した画素を含めた重心を演算する(ステップS212)。上述の例では、2つの画素から“102.5”づつ、初期画素の階調値との合計を演算して、50+102.5×2=255を得て、これを選択した画素の階調値として重心を演算する。重心の演算式は、(式1)を用い、演算した重心の位置座標は、ワーキングメモリ272にそれぞれ格納される。そして、その合計値(階調値の合計値)もワーキングメモリ272に格納され(ステップS213)、ステップS22へと移行する。なお、この場合にターゲット画素群の階調値は、取り込まれた値から減算した値をその画素の階調値としてもとの画素に戻すことを行う。すなわち、上述の例ではターゲット画素群として選択された2つの画素の階調値はそれぞれ“150”と“200”であるが、取り込んだ102.5を引いた値(それぞれ“47.5”と“97.5”)をその画素の階調値として以後の処理を行う。当該画素に残った階調値を戻しているため、ドットの生成が入力階調値に忠実に再現することができる。なお、この戻しデータがある画素に対してはその入力バッファ271に“−1”を格納せず、以後の処理で未処理画素として選択されることとなる。
【0081】
ステップS22では、CPU21は、ワーキングメモリ272に格納した階調値の合計がドット生成量、すなわち“255”とした閾値に達したか否かを判断する。CPU21は、ワーキングメモリ272から階調値の合計を読出し、ROM225に予め格納された閾値“255”と比較して処理を行う。閾値に達した場合(“YES”の場合)、処理はステップS18に移行し、閾値に達しない場合は、再びステップS13へ移行することになる。
【0082】
図14(b)に示す例では、その合計は“150”で閾値である“255”に達しないので、ステップS13に以降することになる。
【0083】
閾値に達しない場合は、ステップS13に移行して、CPU21は、4近傍に未処理画素あるか否か判断する。ステップS22から本ステップに移行した場合は、初期画素を中心に4近傍の画素は既に選択済みのため、“NO”が選択されて、ステップS14に移行することになる。
【0084】
CPU21は、ステップS14において、重心に最も近い未処理画素を選択する。重心は、すでにステップS212或いはステップS215においてワーキングメモリ272にその値が格納されているので、その値をCPU21が読み出して、未処理画素を選択することができる。また、重心位置を利用せずに、初期画素の位置自体に近い画素を選択するようにしてもよい。図14(b)に示す例では、未処理画素のうち、位置(1、1)の画素が重心(0.33・・・,0.33・・・)から最も近いので、この画素を選択する。このように重心を利用しているので、最終的に生成されるセルの構成は円状に成長するため、重心にドットを形成しても、ドット間で一定距離を保つことができる。CPU21は、選択した画素に対応する出力バッファ273の位置に“0”を格納する(図14(c)出力バッファ273参照)。
【0085】
次いで、CPU21は、選択した画素を含めた重心を演算する(ステップS15)。重心の演算は、(式1)を用いて行なう。これまで構成したセルの重心の座標と階調値の合計は、ワーキングメモリ272に格納されているので、これを読出し、(式1)はROM25に格納されているので同様にこれを読出し、選択画素の座標と階調値は、入力バッファ271に格納されているので、これを読み出して、(式1)に代入して演算することができる。図14(b)に示す例では、選択画素は(1、1)、その階調値は“50”、ワーキングメモリ272に重心の座標(0.33・・・、0.33・・・)と階調値の合計“150”、これらを(式1)代入して演算を行なうと、重心位置は(0.5、0.5)を得る。演算した結果は、CPU21によってワーキングメモリ272に再び格納させることになる(図14(c)のワーキングメモリ272参照)。
【0086】
次いで、CPU21は、選択した未処理画素を含めた階調値の合計をワーキングメモリ272に書き込み、選択した未処理画素に対応する入力バッファ271の位置に“−1”を書き込む(ステップS16)(図14(c)入力バッファ271とワーキングメモリ272参照)。
【0087】
次いで、CPU21は、これまで選択した画素の階調値の合計が、ドット生成量に達したか否か判断する(ステップS17)。ステップS22と同様に、階調値の合計が閾値“255”に達したか否かで判断される。図14(c)の例では、これまで選択した画素の階調値の合計は“200”(階調値の合計値は、この時点でワーキングメモリ272に格納されている)で、閾値に達しないので、本ステップで“NO”が選択されて、再びステップS14に移行する。
【0088】
ステップS14に移行すると上述の処理を閾値に達するまで、繰り返すことになる。図14(c)の例では、ステップS14にて未処理画素を選択することになるが、重心(0.5、0.5)から最も近い画素は、複数存在することになる((0、2)、(1、2)、(2、0)、(2、1)の4つの画素)。ここではランダムにいづれか一つ選択することにする。上述したように、ドットによる周期パターンの発生を抑えるためである。ここでは、位置(0、2)にある画素を選択することにする。
【0089】
そして、CPU21は選択画素含めた重心位置を演算し(ステップS15)、セルの階調値の合計を演算し、これらの結果をワーキングメモリ272に格納し、選択した画素の入力バッファ271に“−1”を格納する(ステップS16)。位置(0,2)の画素を選択しても、その階調値の合計は“250”でまだドット生成量に達していない。よって、ステップS17で“NO”が選択されて、再び未処理画素の選択を行う(ステップS14)。この例の場合、重心位置から最も近い距離にある画素は(1、2)となる。
【0090】
このとき画素(1、2)の階調値をこれまで構成したセルの階調値の合計との和をとると閾値“255”を超えて“315”となる。この場合は、上述したようにその画素(1、2)の階調値は、セルの階調値の合計が閾値となる値“5”として重心等の演算を行う。画像に変化のある領域でも、その変化に影響されずに重心を演算するためである。そして、(式1)を用いて重心を演算すると、(0.38、0.88)、階調値の合計は“255”を得て、ワーキングメモリ272にCPU21によって格納されることになる(図15(a)のワーキングメモリ272参照)。そして、最後に選択した画素の階調値を戻しデータとして“60”(=65−5)を入力バッファ271に格納させることになる。構成したセル以外の画素に戻すと、入力階調値の分布に忠実にドットを生成させることができず、これを防止するためである。
【0091】
そして、その階調値の合計が“255”となるので、ステップS17で“YES”が選択されて、重心位置のドットを生成する処理を行う(ステップS18)。具体的には、重心位置に位置する画素に黒ドットを打つことを示す“255”を対応する出力バッファ273にCPU21によって格納されることになる(図15(a)の出力バッファ273参照)。
【0092】
次いで、CPU21は、未処理画素があるか否か判断する(ステップS19)。具体的には、CPU21は、入力バッファに“−1”が格納されていない画素を選択することになり、すべて“−1”が格納されていればすべて上述の処理が終了しているので、本ステップで“NO”が選択されて処理が終了することになる(ステップS20)。まだ、“−1”が格納されていない画素があれば、未処理画素が存在することになるので、再びステップS11に移行し上述の処理を未処理画素がなくなるまで繰り返すことになる。図15(a)に示す例では、まだ未処理画素があるので、初期画素を選択して(未処理画素のうち最も上側でかつ最も左側に位置する画素、位置(2、0)の画素を選択)、上述の処理を繰り返す。
【0093】
一方、図9に戻り、ステップS12で初期画素が白成分が少なく黒成分が多い画素であると判断されると(“NO”のとき)、黒濃度処理(ステップS24)に移行する。黒濃度処理の動作を示すフローチャートを図12に示す。このように白成分が多いか少ないかを判断しているのは、最終的なドット生成処理で、黒ドットを生成する場合(ステップS13からS18までの処理)と、何もドットを生成しない白ドットを生成させる場合とでは、処理が異なるからである。
【0094】
また、黒ドット生成処理の場合と同様に、図16(a)に示すよう入力画像データが入力バッファ271に格納されているとして以下説明する。また、その初期画素の重心位置及び階調値もすでにステップS11によりワーキングメモリに格納されている(図16(b)参照)。
【0095】
黒濃度処理に移行すると、CPU21は、黒ドット生成の場合と同様に、初期画素の4近傍に未処理画素があるか否か判断する(ステップS241)。これは黒ドット生成処理(ステップS13からS18)と同様に、初期画素を中心にすでに画素として選択されたことを示す“−1”が格納されているか否かで判断される。図16(b)の例では、初期画素(0、0)を中心に2つの画素((0、1)と(1、0))には“−1”が書き込まれていないので未処理画素があると判断される(“YES”)。
【0096】
未処理画素が4近傍にあると判断されると、CPU21は、選択された未処理画素をターゲット画素群として選択する(ステップS249)。図16(b)の例では、(n+1、m)と(n、m+1)に位置する2つの画素をターゲット画素群として選択することになる。なお、このターゲット画素群として選択された画素は、その入力バッファ271に格納された階調値を閾値から減算した値の階調値を有する画素として選択し、その値をCPU21は入力バッファ271の選択された画素位置に格納することになる。そのまま以後の処理を行うと、構成されるセルの階調値がすぐに閾値に達してしまい、セルの大きさを確保できずに、ドット密度が多くなりすぎて、快適な印刷出力を得ることができなくなってしまうからである。図16(b)に示す例では、2つの画素(n+1、m)、(n、m+1)の階調値はそれぞれ“50”(=255−205)として以後、処理を行う。
【0097】
次いで、CPU21は、ターゲット画素群の吸収処理に移行する(ステップS250)。ターゲット画素群の吸収処理の動作を示すフローチャートを図11に示す。ほぼ、黒ドット生成処理の場合と同様である。
【0098】
まず、黒ドットの生成処理と同様に、ターゲット画素群の画素数とその画素群の階調値の最小値との積をとり、その値とこれまで構成したセルの階調値の合計との和を取る。なお、このときの各画素の階調値は上述した閾値からの減算結果で演算される。その演算結果が閾値(“255”)より小さいと“NO”が選択され、そうでないと“YES”が選択される。図16(b)に示す例では、位置(n+1、m)及び(n、m+1)との階調値の最小値は“50”、選択画素数は2、これまで構成したセルの階調値の合計は“50”で、演算すると“150”で閾値“255”には達しないので本ステップで“NO”が選択される。
【0099】
ステップS210で“NO”が選択されると、CPU21は、ターゲット画素群の最小値を選択する(ステップS214)。図16(b)に示す例では、“50”が選択される。
【0100】
次いで、CPU21は、選択した画素を含めた重心位置を演算する(ステップS215)。重心位置の演算式は、上述した(式1)により演算する。重心を演算した結果(もちろん、各画素の階調値は閾値から減算した値で演算する)は、同様にワーキングメモリ272に格納される(図16(c)のワーキングメモリ参照、“**”で図面上記載しているが実際には、(n+0.33・・・、m+0.33・・・)となる)。
【0101】
次いで、CPU21は、ターゲット画素群の最小値を吸収して、ターゲット画素群を含めて構成されたセルの階調値の合計を演算し、その結果をワーキングメモリ272に格納する(図16(c)のワーキングメモリ参照)。また、CPU21は、選択したターゲット画素群の対応する入力バッファ271に以後未処理画素として選択されないことを示す“−1”を格納し、選択した画素の対応する出力バッファ273の位置にドットを打つ処理を行わせるための“255”を格納する。黒ドット生成処理のときは“0”を出力バッファ272に格納させたが、白ドットを生成するための処理は、まわりに黒ドットを生成させ、重心位置に白ドットを生成させるために、何もドットを打たないことを示す“0”を格納させて、白ドットを表現させるからである。そして、処理はステップS251に移行する。
【0102】
一方、ステップS210で、演算結果が閾値よりも大きいと、黒ドット生成処理と同様に、閾値からワーキングメモリ272に格納された階調値を減算し(ステップS211)、ターゲット画素群として選択された画素数で除した値を、ターゲット画素群から均等に階調値を取り込む(この場合も、その取り込む階調値は閾値から原階調値を減算した値として演算する)。そして、その値で(式1)を使用して重心の演算を行う(ステップS212)。演算結果は、黒ドット処理と同様に、ワーキングメモリ272に格納し、当該画素の階調値から選択したターゲット画素群に取り込まれた階調値を減算して、当該画素に戻すことになる。そして、処理はステップS251へ移行することになる。
【0103】
CPU21は、ステップS251に移行すると、選択したターゲット画素群含めたセルの階調値の合計が閾値(“255”)に達したか否か判断される。閾値に達しないと(“NO”)、再びステップS241に移行し、閾値に達した場合は(“YES”)、ステップS246に移行する。上述の図16(c)に示す例では、閾値に達しない(合計値は“150”)ので、ステップS241に移行する。
【0104】
そして、CPU21は、ステップS241にて初期画素の4近傍に未処理画素が存在するか否か判断されるが、すでに4近傍は以前の本ステップにて“YES”が選択されたので、ステップS251から戻って本ステップを判断すると“NO”が選択され、ステップS242に移行することになる。
【0105】
CPU21は、ステップS242で重心に最も近い未処理画素を選択する。円状にセルを成長させるためである。重心位置に最も近い画素が複数あるときは、ランダムに選択する。周期パターンの発生を抑えるためである。選択した画素の階調値は、原階調値を閾値から減算した値として入力バッファ271に再び書き込む。セルの大きさを一定範囲に保つためである。さらに、未処理画素として選択した画素に対応する出力バッファ273の位置に“255”を書き込む。黒ドットを打つ処理を行わせるためである。
【0106】
次いで、CPU21は、選択した未処理画素を含めた重心を演算する(ステップS243)。演算は、(式1)を用いる。これまで構成したセルの重心等は、ワーキングメモリ272に格納され、選択した画素の座標等は入力バッファ271に対応或いは格納され、(式1)はROM25に書き込まれているので、CPU21がそれぞれ読み出して演算を行う。演算した重心位置は、再びワーキングメモリ272に格納する。
【0107】
次いで、CPU21は、未処理画素をバッファに吸収する(ステップS244)。すなわち、CPU21は、未処理画素を含めたセルの階調値の合計をワーキングメモリ272に格納し、選択した画素の対応する入力バッファ271の位置に以後未処理画素として選択されないよう“−1”を格納する。
【0108】
次いで、CPU21は、セルの階調値の合計が閾値(“255”)に達したか否か判断され(ステップS245)、達しないと再びステップS244に移行し、閾値に達するまで処理が繰り返される。なお、ステップS242で未処理画素を選択し、その階調値とこれまで構成したセルの階調値との合計値が閾値を超えてしまう場合は、選択した未処理画素の階調値を、閾値となる値としてステップS243およびステップS244で演算を行う。黒ドット生成処理とこの点は同様である。
【0109】
閾値に達すると(ステップS245で“YES”のとき)、処理はステップS247に移行し、重心位置に白ドットの生成を行う(ステップS246)。重心位置はワーキングメモリ272に格納されているので、その位置に位置する画素に何もドットを打たないことを示す“0”を対応する出力バッファ273に格納する。これによりまわりに黒ドットが生成され、重心位置に何もドットを打たない画素が存在することで、白ドットを生成させることができる(図17(a)参照)。
【0110】
次いで、CPU21は、未処理画素があるか否か判断する(ステップS247)。黒ドット生成と同様に、入力バッファ271のすべての画素が“−1”となれば“YES”が選択されて処理が終了し(ステップS248)、そうでないと、未処理画素を処理するため、再びステップS11に移行し、上述の処理を繰り返すことになる。
【0111】
上述したすべての処理が終了するとCPU21は、RAM27の出力バッファ273に書き込まれた値を読出し、ROM25に格納されたパルス幅生成のための処理を行い、駆動パルスデータとして、印刷エンジン30に出力する。そして、印刷エンジン30では、この駆動パルスデータをもとに駆動パルスあり又はなし等を示す制御データを生成し、この制御データに基づいて感光ドラムに影像が転写され、実際に印刷用紙にホストコンピュータ10からのデータが印刷されることになる。
【0112】
上述した例は、閾値を“255”として処理を行ったがそれ以外の値であってもよい。また、上述の処理をホストコンピュータで実行させて、その処理後のデータを画像出力装置に出力して、印刷を行うようにしてもよい。また、画像出力装置としてレーザドライバを有するページプリンタで説明したが、インクジェットプリンタやバブルジェット(登録商標)プリンタなどでも実現することは可能である。さらに、ハーフトーン処理後のデータは、“0”か“255”の2値データとしたが、その他4値のデータ、複数種類の値を有するデータであってもよい。
【0113】
以上説明してきたように本発明によれば、どのような画像データが入力されても、円状にセルが成長し、その重心にドットを生成させると高画質で快適な印刷出力を得ることができる。
【0114】
なお、上述した例では、選択した初期画素に隣接する画素を選択して画素を取り込むようにしたが、さらにその隣接画素に隣接する画素を選択してその画素の階調値をセルに取り込むようにしてもよい。
【0115】
また、選択した隣接画素から均等にその階調値を取り込むようにしたが、必ずしも均等にではなく、例えば図14(a)の初期画素に隣接する2つの画素からそれぞれ“20”、“30”の値を取り込むようにしてもよい。
【0116】
さらに、隣接する画素から階調値を取り込んだ後、閾値に達しない場合に、セルに取り込むべき画素をランダムに選択したが、ランダムではなく、さらに重心位置にある画素に隣接する画素やその画素に隣接する画素を選択するようにして同じ処理を繰り返すようにしてもよい。
【図面の簡単な説明】
【図1】本発明によるシステム全体の構成図である。
【図2】本発明の画像出力装置の構成を示す図である。
【図3】本発明によるセルの構成方法の一例を示す図である。
【図4】本発明によるセルの構成方法の一例を示す図である。
【図5】本発明によるセルの構成方法の一例を示す図である
【図6】本発明によるセルの構成方法の一例を示す図である
【図7】本発明によるセルの構成方法の一例を示す図である
【図8】本発明によるセルの構成方法の一例を示す図である
【図9】本発明の実施の形態の動作を示すフローチャートを示す図である。
【図10】本発明の実施の形態の動作を示すフローチャートを示す図である
【図11】ターゲット画素群の吸収処理の動作を示すフローチャートである。
【図12】黒濃度処理の動作を示すフローチャートである。
【図13】RAM27の構成と格納される値の例を示す図である。
【図14】RAM27の構成と格納される値の例を示す図である。
【図15】RAM27の構成と格納される値の例を示す図である。
【図16】RAM27の構成と格納される値の例を示す図である。
【図17】RAM27の構成と格納される値の例を示す図である。
【符号の説明】
10 ホストコンピュータ 20 画像出力装置 21 CPU 23 入力I/F 25 ROM 26 ハーフトーン処理部 27 RAM 271 入力バッファ 271a 未処理画素 271c セル 271d 重心 272 ワーキングメモリ 273 出力バッファ 28 パルス幅変調部 30 印刷エンジン
【発明の属する技術分野】
本発明は、画素ごとに所定の階調値を有する画像データに対して、セルを構成しその重心位置にドットを生成させる画像処理装置、画像処理方法、印刷装置、印刷方法、及びプログラムに関する。
【0002】
【従来の技術】
従来より、デジタル画像の1画素が多数の値を持ち得る連続階調のデータを少数の階調(例えば2値)に変換する、ハーフトーン処理が行われている。ハーフトーン処理の方法としては、誤差拡散法がよく知られている。誤差拡散法では、変調の周期(ドットを打つ位置の周期)が入力画像の階調値に応じて変化するため、その周期が閾値マトリックスで予め決められたディザ法に比べ、高い解像度を有している。
【0003】
一方で、誤差拡散法は、入力画像の階調値が低濃度の値で分布していると、誤差が遠く離れた画素まで拡散する場合もあり、結果的にドットの分散性が劣化する問題があった。
【0004】
そこで、入力画像を所定の大きさのセルに分割し、各セルの中心位置にドットを生成させるようにすることで、誤差拡散法の高解像性を保持したまま、ドットのつながりなどの画質劣化を防止する技術が開示されている(例えば、特許文献1)。
【0005】
【特許文献1】
特開平11−27528号公報(図4、図7)
【0006】
【発明が解決しようとする課題】
しかしながら、上述した特開平11−27528は、入力画像の中間階調領域においてすぐに閾値に達するため、セルサイズが小さくなってしまう。かかるサイズが小さいと、隣接するセルで最終的に生成されるドットが繋がったり離れたりドット間距離にばらつきが生じ、視覚的にドットが目立ち快適な印刷出力を得ることができない問題点があった。
【0007】
また、ドットを生成させるためのセルの中心位置の計算についても、演算した中心位置は必ずしも整数値とならない。従って、その中心位置とドットの中心位置とのずれが発生し、例えば、複数のセルでドットが固まって発生するなど、視覚的に快適な印刷出力を得ることができない問題点があった。
【0008】
そこで、本発明は、どのような階調値を有する入力画像に対しても、複数の画素から構成されるセルを円状に形成させてドット間距離を一定に保つよう処理を行う画像処理装置、画像処理方法、及びプログラム、さらに、高画質で快適な印刷出力を得る印刷装置、印刷方法を提供することを目的とする。
【0009】
【課題を解決するための手段】
上記目的を達成するために、本発明は、画素ごとにN(Nは整数)種のレベル値を有する第1の画像データをM種(M<N、Mは整数)のレベル値を有する第2の画像データに変換して出力する画像処理装置において、第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、重心位置決定手段で決定した重心に位置する画素に対して前記M種のレベル値のうち所定の値を設定して前記第2の画像データを出力する出力手段とを備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0010】
また、本発明は上記画像処理装置であって、上記画素群生成手段は、隣接する複数の未処理画素により画素群を生成しても所定の画素のレベル値を含めた画素群のレベル値の総和が閾値以下のとき、さらに画素ごとのレベル値の総和が閾値以上になるまで、これまで生成した画素群の重心位置決定手段で決定した重心から最も近い画素を選択して画素群を生成することを特徴としている。これにより、例えば、生成した画素群が円状に形成し、その重心にドットを生成させてもドット間の距離が一定に保たれ、快適な印刷出力を得る。
【0011】
また、本発明は上記画像処理装置であって、上記重心位置決定手段は、画素群生成手段で選択した隣接する未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と所定の画素のレベル値との合計が閾値以下のとき、選択した未処理画素のレベル値のうち最小のレベル値を選択した未処理画素のそれぞれから均等に所定の画素のレベル値に加算して画素群の重心位置を決定することを特徴としている。これにより、例えば、所定の画素に均等にレベル値を取り込む際に未処理画素のレベル値以上のレベル値を取り込むことなく、重心位置のずれが少なくなる。
【0012】
また、本発明は上記画像処理装置であって、上記重心位置決定手段は、画素群生成手段で選択した隣接する未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と所定画素のレベル値との合計が前記閾値よりも大きいとき、所定の画素のレベル値が閾値となるように画素群生成手段で選択した隣接する未処理画素からそれぞれ均等にレベル値を所定の画素のレベル値に加算して重心を決定することを特徴としている。これにより、所定の画素に閾値以上のレベル値を取り込んで重心位置を決定することがないので、重心位置のずれが少なくなる。
【0013】
また、本発明は上記画像処理装置であって、上記画素群生成手段は、重心位置決定手段で決定した重心から最も近い画素が複数存在するとき、ランダムに画素を選択することを特徴としている。これにより、例えば、ドット間で周期パターンの発生を抑えて快適な印刷出力を得ることができる。
【0014】
また、本発明は上記画像処理装置であって、上記重心位置決定手段は、画素群の位置と第1の画像データのレベル値とで重心位置を決定することを特徴としている。
【0015】
また、本発明は、上記画像処理装置であって、前記画素群生成手段は、所定の画素に隣接する未処理画素を選択し、さらに当該隣接する未処理画素に隣接する未処理画素を選択して画素群を生成することを特徴としている。
【0016】
さらに、上記目的を達成するために本発明は、画素ごとにN(Nは整数)種のレベル値を有する第1の画像データをM種(M<N、Mは整数)のレベル値を有する第2の画像データに変換して出力する画像処理方法であって、第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、画素群生成ステップで選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定ステップと、重心位置決定ステップで決定した重心に位置する画素に対してM種のレベル値のうち所定の値を設定して第2の画像データを出力する出力ステップと、を備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0017】
さらに、上記目的を達成するために本発明は、画素ごとにN(Nは整数)種のレベル値を有する第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成処理と、画素群生成処理で選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定処理と、重心位置決定処理で決定した重心に位置する画素に対してM種のレベル値のうち所定の値を設定して第2の画像データを出力する出力処理とをコンピュータに実行させるためのプログラムであることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0018】
さらに、上記目的を達成するために本発明は、画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷装置において、画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定手段と、記重心位置決定手段で決定した重心に位置する画素に量子化データを付与する量子化データ付与手段と、量子化データ付与手段で付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御手段と、を備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0019】
さらに、上記目的を達成するために本発明は、画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷方法において、画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、画素群生成ステップで選択した未処理画素のそれぞれからレベル値を所定の画素のレベル値に加算して画素群の重心を決定する重心位置決定ステップと、重心位置決定ステップで決定した重心に位置する画素に量子化データを付与する量子化データ付与ステップと、量子化データ付与ステップで付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御ステップと、を備えることを特徴としている。これにより、例えば、複数の画素から構成される画素群の重心位置とドットの重心位置との位置ずれを防止し、ドットが固まって発生するなどドットのバラつきを抑え、快適な印刷出力を得ることができる。
【0020】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。
【0021】
図1は、本発明による画像出力システムを入力画像に適用した場合のシステム全体構成図である。この例では、ホストコンピュータ10において、生成した階調画像データ16(各画素8ビットで表現)が、ページプリンタなどの画像出力装置20に出力され、画像出力装置20でホストコンピュータ10からの画像データが出力されるようになっている。
【0022】
ホストコンピュータ10は、アプリケーション部12とラスタライズ部14とから構成される。
【0023】
アプリケーション部12は、ホストコンピュータ10内に実装されたアプリケーションプログラムにより印刷対象となる、文字データ、図形データ、ビットマップデータ、その他の種々のデータが生成される。これらのデータは、例えばホストコンピュータに接続された表示装置や入力装置を介して生成させることができる。アプリケーション部12で生成されたデータは、ラスタライズ部14に出力される。
【0024】
ラスタライズ部14は、アプリケーション部12から出力された印刷対象のデータをラスタライズし、各画素または各ドットごと8ビットの値からなる階調画像データ16に変換される。8ビットのデータであるので、各画素は0から255までの値をとることができる。ラスタライズ部14は、実際にはホストコンピュータ10に実装されたドライバによって実行されることになる。8ビットのデータに変換された階調画像データ16は、画像出力装置20に出力される。
【0025】
画像出力装置60は、ハーフトーン処理部26、パルス幅変調28と、印刷エンジン30とから構成される。
【0026】
ハーフトーン処理部26は、入力された階調画像データ16に対して、より少数の階調の値(2値や4値など)に変換する処理を行う。この階調画像データ16は、0から255までのレベル値を有する連続階調の値を有しており、例えばこれを2値のレベル値(0及び1など)に変換することで、画像出力装置20で実際に用紙に印刷するときに、ドットをうつ又はうたない、という処理を行うことが可能になる。
【0027】
ハーフトーン処理部26によって所定の階調値に変換されたデータ30は、パルス幅変調部28に出力される。パルス幅変調部28は、各画素ごと変換されたデータ30を、レーザー駆動パルスあり又はなし等を示す駆動データ29に変換する。生成された駆動データ29は、印刷エンジン30に出力される。
【0028】
印刷エンジン30は、レーザードライバ32と、レーザーダイオード34とから構成される。レーザードライバ32は、入力された駆動データ29から、駆動パルスあり又はなし等を示す制御データを生成し、レーザーダイオード34に出力する。レーザーダイオード34は、レーザードライバ32からのこの制御データに基づいて駆動され、また図示しない感光ドラムや転写ベルトが駆動されて、実際に印刷用紙にホストコンピュータ10からのデータが印刷されることになる。
【0029】
次に画像出力装置20の具体的構成を、図2を参照して説明する。
【0030】
ここで、図1のハーフトーン処理部26は、図2におけるCPU21と、ROM25、及びRAM27に対応し、パルス幅変調部28は、CPU21と、ROM25及びRAM27に対応する。また、図2の印刷エンジン30と図1のエンジン30は同じ構成を有する。
【0031】
画像出力装置20は、全体として、CPU21と、入力インターフェース(I/F)23と、ROM25と、RAM27とから構成される。
【0032】
CPU21は、内部バスを介して、入力I/F23、ROM25、RAM27、印刷エンジン30と互いに接続され、重心位置の演算や、未処理画素の選択、ドットの生成等、各種処理を実行するためのものである。詳細は後述する。
【0033】
入力I/F23は、ホストコンピュータ10と画像出力装置20とのインターフェースとしての役割を果たし、本実施例では、ホストコンピュータ10から出力される、ラスタライズされた各画素ごとに所定の階調値を有する入力画像データが入力される。入力された画像データはCPU21の制御により一旦RAM27に格納される。
【0034】
ROM25は、各種プログラムなどが格納される。CPU21の制御によりプログラムが読み出されて、CPU21において各種処理が実行されることになる。
【0035】
RAM27は、CPU21が処理を実行する際のワーキングメモリとしての役割を果たし、実行データ等が一時格納される。その詳細は後述する。
【0036】
印刷エンジン30は、図1のエンジン30と同様の構成で、レーザードライバ32及びLD34とから構成される。
【0037】
次に、全体の動作について説明するが、本発明におけるセルの構成からドット生成までの原理について図3から図8を参照して説明する。
【0038】
ホストコンピュータ10から各画素ごとに所定の階調値を有するデータが入力される。この画像データの例を図3(a)に示す。これは、入力された画像データが入力I/F23を介してCPU21の制御によりRAM27の入力バッファ領域271に格納された例を示している。入力バッファ271は、m行n列の2次元構造を有し、各バッファ内での位置はホストコンピュータ10で生成された画像の画素位置に対応するものである。例えば、入力バッファの(n、m)の位置に格納されたデータは、全体画像における(n、m)の位置に位置する画素の階調値に対応するものである。入力バッファ271等のRAM27の具体的構成は後述する。
【0039】
ここでは、説明を簡単にするため、縦方向はmからm+2まで、横方向はnからn+3までの入力バッファ構造を示しているが、もちろん、1フレーム分全ての画素データを格納できるように入力バッファ271を構成することもできる。
【0040】
ここで行う処理は、初期画素を選択し、その初期画素から等距離にある近傍の画素を選択する。例えば、初期画素を中心に上下左右の画素を選択する(以下このように選択された画素をターゲット画素と呼ぶ)。そして、そのターゲット画素群の各画素から、例えば均等に階調値を初期画素に取り込む。取り込んだ値とその初期画素の階調値との合計が所定の閾値に達した場合はその初期画素の重心にドットを生成させる処理を行う。このように、均等にまわりの画素から階調値を初期画素に取り込むようにしているので、ドットの重心位置と後述するセルの重心位置とのずれが少なくなり、ドットが固まって形成されたり、離れすぎたりすることを防止することができ、快適な印刷出力を得ることができる。
【0041】
また、このように構成されたセルの重心にドットを生成させると、構成されたセルの形状が十字形になるなどより円に近い形状となり、隣り合うセルでドットが繋がったり、離れすぎたりバラつきを抑えて、均一なドット間距離を保ち、視覚的に快適な印刷出力を得ることができるのである。
【0042】
近傍のターゲット画素群でセルを構成しても閾値に達しない場合は、さらに、セルの重心から一番近い距離にある画素を選択してその画素を含めたセルを構成し、閾値に達するまでこれを繰り返すことになる。
【0043】
この場合でも、最初に十字形のセルから出発して、その重心を利用して順次画素を取り込む処理を行うため円に近い形状のセルを構成することが可能である。初期画素に対して4近傍の画素(左右上下の画素)のみならず、8近傍の画素(左右上下と、右斜め上、右斜め下、左斜め上、及び左斜め下の8つの画素)をターゲット画素とすれば、最初から4角形の形状で、より円状にセルが成長することが予想される。
【0044】
ここで、順次画素を取り込む際に重心から近い画素が複数存在する場合がある。かかる場合は、ランダムにいづれか一の画素を選択することにしている。セルに取り込むべき画素が複数ある場合に固定順に選択すると、セルの形が一定でその重心にドットを形成しても全体としてドットの位置が周期的で印刷出力において周期パターンを発生させてしまうことになる。かかる周期パターンは、視覚に映りやすく印刷出力の画像が不自然なものとなってしまう。このパターンの発生を抑えるためにランダムに選択するのである。
【0045】
図3の例に戻って、本発明の原理を説明する。まず初期画素を選択画素として決定する。初期画素は、ここでは、まだ処理されていない未処理画素のうち最も上でかつ最も左側にある画素とする。したがって、図3(a)に示す例では、図3(b)に示すように(n、m)に位置する画素が最も上でかつ左側にある画素なので、この画素が初期画素となり、これを選択画素271aとして選択することになる。
【0046】
次に、その初期画素(n、m)に対して、隣接する近傍のターゲット画素(未処理画素)271aを選択する。ここでは、初期画素(n、m)の右隣と下側にある2つの画素((n+1、m+1)、(n、m+1))とを選択する(図3(c)参照)。セルを円状に生成させるためである。もちろん、さらに画素(n+1、m+1)も含めた3つの画素を選択してもよい。ここでは、2つの画素を選択した場合で以下説明する。そして、選択した画素の階調値を均等に選択画素(n、m)に取り込む(図4(a)参照)。セルの重心位置とドットの重心位置のずれを少なくするためである。この均等に取り込むべき値は、ここでは2つの画素の階調値の最小値である“50”を両画素から取り込む。取り込むべき値の演算については、後述する。このようにして取り込まれた2つの画素は初期画素を含めて1つのセル271cとして図4(b)に示すように構成される。ここでは、初期画素が(n、m)の位置にある画素として選択されているが、例えば画素(n+1、m+1)を初期画素として選択選択され、まわりの4つの画素((n+1、m)、(n、m+1)、(n+2、m+1)、(n+1、m+2))を含めた画素でセル271cを構成すると十字形となり、より円に近いセル形状となる。
【0047】
次に、構成したセル271cの重心位置を演算する。演算の具体的方法は、後述する。ここでは、図4(c)に位置する重心271dに位置することになる。
【0048】
次に、構成したセル271cの階調値の合計が所定の閾値に達したか否か判断し、達していないと、重心271から最も近い距離にある画素をセル271cに取り込むべき画素として選択する。図4(c)に示す例では、閾値を“255”に設定するとすると、セル271cの階調値の合計は、“150”であるので、さらに画素を選択することになる。ここでは、閾値として“255”を選択したがそれ以外の値であってもよい。
【0049】
重心271dから最も近い画素は、図5(a)に示すように、(n+1、m+1)に位置する画素である。これをセル271cに取り込み、この画素を含めた重心271dを演算すると、図5(b)に示す位置271dとなる。
【0050】
しかし、まだセル271cの階調値の合計は“200”であるので、さらに画素を選択する必要がある。重心271dから最も近い距離にある画素は図5(c)に示すように4つの画素((n+2、m)、(n+2、m+1)、(n、m+2)、(n+1、m+2))がある。これら4つの画素のうちいづれか一つランダムに選択する。周期パターンの発生を抑えるためである。ここでは、図6(a)に示すように画素(n、m+2)を選択する。そして、この画素をセル271cに取り込み、そのセル271c内での重心を演算すると、図6(a)に示す重心271dに位置することになる。
【0051】
さらに、セル271cの階調値は、“250”で閾値である“255”に達しないのでさらにその重心271dから最も近い距離にある画素を選択し、セル271cに取り込む。図6(b)に示すように画素(n+1、m+2)を選択するとする。ここで、その選択した画素の階調値をそのまま取り込むとセル271cの階調値の合計は“315”で閾値を超えてしまう。そこで、丁度セルの階調値の合計が閾値に達するようにその画素の階調値を取り込み、残った階調値をその画素に戻しデータとして値を戻すことにする。このようにすることで、最終的に選択した画素の階調値が周辺の画素と大きく異なる値の場合でも、その階調値に影響されず重心を求めることができる。例えば画素に変化がある境目などでも、その変化に影響されずに重心が求まる。また、戻しデータとして当該画素にその残った階調値を戻すことで、入力階調値の分布に忠実にドットを生成することができる。戻しデータを、構成したセル271c以外の画素に戻すと入力分布に忠実にドットを生成させることができなくなってしまう。
【0052】
そして、最終的に構成したセル271cの重心に位置する画素にドットを生成させるための処理を行う。図6(c)に示す例では、画素(n、m+1)にドットを生成させるようにすることになる。
【0053】
次に、階調値が高い画素が画像出力装置20に入力された場合を考える(図7(a)参照)。この場合に、上述したように初期画素を中心に隣接する画素を選択してセルを構成するとすぐに閾値に達してしまう。例えば図7(a)にあるように2つの画素(n、m)、(n+1、m)ですぐに閾値に達してしまう。これでは、セルの大きさを一定範囲まで保てず、ドットが隣り合うなど快適な印刷出力を得ることができない。そこで、その諧調値を変更して、処理を行うことによりセルの大きさを一定範囲に保つようにするのである。
【0054】
図7(a)に示す階調値を有する入力画像データが入力された場合で説明する。まず、初期画素を選択するが上述した場合と同様に最も上にある画素のうち最も左側にある未処理画素を選択する。図7(b)に示すように画素(n、m)を選択するとする。このとき、その階調値を閾値から減算した値をその画素の階調値として以下演算することにする。これによりセルの大きさをある程度まで確保することが可能になる。
【0055】
次に、上述と同様に、初期画素(n、m)に隣接する近傍の未処理画素(ターゲット画素)271aを選択する。図7(b)に示す例は、2つの画素(n+1、m)、(n、m+1)をターゲット画素271aとして選択する。このとき選択した画素の階調値を閾値から減算した値を当該画素の階調値とする。2つの画素の階調値は実際にはそれぞれ“205”であるが、閾値から減算した“50”(255−205)をその画素の階調値として以後の処理を行う。そして、図4(a)と同様に均等にターゲット画素から階調値を取り込む。
【0056】
取り込んだ後の階調値の合計は、図7(c)に示すように“150”となる。閾値である“255”に達しないのでさらにセル271cに取り込むべき画素を選択する。選択は重心から最も近い未処理画素を選択するが、その重心位置は図8(a)に示す重心位置271dとなるので、図8(a)に示すように(n+1,m+1)を未処理画素として選択する。
【0057】
選択した画素の階調値は同様に、閾値からその画素の階調値を減算した値(図8(b)に示すように(n+1,m+1)の画素の階調値を“50”とした値)をセル271cに取り込み、その階調値の合計を演算することにする。以後選択した画素を閾値から減算した値として図3から図6と同様にこれを繰り返すことで、図8(c)に示すようにセル271cが構成される。その重心位置271dに位置する画素は(n、m+1)なので、この位置に白ドットを生成させるようにする。また、このとき(n+1,m+1)の画素の階調値のセルへの取り込むべき量は、同様に丁度閾値(“255”)と等しくなる値(“5”)とする。そして、戻しデータとして“5”を加えた値を画素(n+1、m+2)に戻すことになる。
【0058】
以上が本発明の概略である。以下、本発明の具体的動作を図9から図17に示す図面を参照して説明する。図9及び図10は、本発明の具体的動作を示すフローチャートを示す。
【0059】
まず、本処理が開始される前に、入力画像データがホストコンピュータ10から画像出力装置20に入力され、CPU21の制御により入力インターフェース(I/F)23を介してRAM27に一時記憶されていることが前提である。RAM27の具体的構成を図13(a)に示す。
【0060】
RAM27は、入力バッファ領域271とワーキングメモリ272と、出力バッファ273とから構成される。入力バッファ271は、入力画像データが入力された一時記憶するための領域で、上述したように2次元構造を有し、各位置が入力画像の各画素位置に対応する。入力画像の位置(n、m)にある画素は、入力バッファ271の位置(n、m)に格納される。図13(a)に示す例は、説明を簡単にするために3行4列の構成であるが、もちろん上述したように1フレーム分の各画素の階調値を格納する領域があってもよい。
【0061】
ワーキングメモリ272は、主として3つの領域から構成され、重心位置の座標と階調値の合計値とが格納される。出力バッファ273は、入力バッファ271と同様の構成で2次元構成であり、出力バッファ273に対応する位置に印刷用紙上でドットが生成されるように対応している。もちろん、3行4列ではなく、種々の行数、列数を有し、例えば1フレーム分の画像に対応するように構成されていてもよい。
【0062】
以上にように構成されたRAM27に図13(b)の入力バッファ271に示す入力画像データが格納された場合で以下説明する。ここでは、説明を簡単にするため、(n,m)=(0,0)として以下説明することにする。
【0063】
図9に戻り、CPU21は、ROM25から本処理を実行するためのプログラムを読み出すことで、処理が開始される(ステップS10)。
【0064】
次いで、CPU21は、初期画素を決定し、その画素の重心を演算する(ステップS11)。初期画素は、最も上にある画素のうち最も左側にある未処理画素を選択する。図13(b)に示す例では、入力バッファ271の位置(0、0)の画素が選択されることになる。そして、その重心位置を演算する。重心位置の演算は、横方向の重心位置をx、縦方向の重心位置をyとすると、次に示す(式1)によって演算されることになる。
【0065】
(式1)
初期画素の重心位置を求めるときに、(式1)において、これまで構成したセルの重心位置x、yは、ともに0、これまで構成したセルの階調値の合計は0として演算する。その結果、重心位置は(x、y)=(0,0)となる。なお、この演算式は、ROM25に格納され、重心を演算する際にCPU21がROM25から読み出して、RAM27に格納された重心位置、階調値の合計(ともにRAM27のワーキングメモリ272に格納)等を読み出し(式1)に代入して演算することにより行なわれる。
【0066】
演算した重心位置(x、y)は、CPU21によりRAM27のワーキングメモリ272に格納される(図13(c)のワーキングメモリ272参照)。また、CPU21は、選択した初期画素が以後の未処理画素選択の際に選択されないように、すでに選択済みであることを示す“−1”を入力バッファ271の当該画素の位置に格納することになる(図13(c)の入力バッファ271参照)。もちろん、この値は入力画像データの階調値として存在しない値であればよく、例えば他の負の値でもよい。さらに、入力バッファ271と同様の構成のメモリ領域をさらに用意し、そのメモリ内でフラグにより当該画素が選択されたか否かを判別することも可能である。
【0067】
次いで、CPU21は選択した初期画素が白成分が多く黒成分が少ない画素であるか、逆に白成分が多く黒成分が少ない画素であるかを判定する(ステップS12)。白成分が多いとステップS13に移行し、少ないとステップS24の黒濃度処理への移行する。このように、2つの処理を分けているのは、それぞれドットの生成等で異なる処理を行わせる必要があるからである。すなわち、白成分が多い画素はセルの重心にドットを生成させる際にドットを打つ処理を行う必要があり、逆に黒成分が多いと階調値を反転(閾値から階調値を減算した値)させその重心位置に何もドットを生成しない白ドットを生成させる処理を行う必要がある。黒成分が多い画素に対してもステップS13以下と同じ処理を行わせると少ない画素でセルが構成され、ドット間が一定距離保てないからである。
【0068】
白成分が多いか少ないかは、CPU21がROM25に格納された、閾値、ここでは“127”を読み出し、入力バッファ271の初期画素の階調値と比較し、閾値“127”より少ないと白成分が多い画素と判断され、逆の場合は黒成分が多い画素と判断されることになる。
【0069】
CPU21は、白成分が多い画素であると判断すると(ステップS12で“YES”)、初期画素の4近傍に未処理画素があるか否か判断する(ステップS13)。具体的には、CPU21は初期画素を中心に上下左右の4つの画素に対して入力バッファ271に“−1”が格納されているか否かで判断される。このように初期画素を中心に近傍の画素を選択することで、構成されたセルの形状が十字形で円状に近づくことになり、ドットが繋がったり離れすぎたりしてそのばらつきを抑え、視覚的に快適な印刷出力を得ることができる。もちろん、上下左右の近傍の画素のみならず、初期画素を中心に右斜め上、右斜め下、左斜め上、左斜め下の全8つの近傍画素を未処理画素として選択するようにしても、構成されたセルの形状が四角形で円状に近づくことになる。ここでは、初期画素が(0,0)に位置しており、上側と左側に画素が存在しないので、右側と下側の2つの画素の入力バッファ271に格納された値をCPU21が確認する。そして、これらの値は“−1”ではないので、4近傍に未処理画素が存在することにより、本ステップS13で“YES”と判定することになる。
【0070】
初期画素近傍に未処理画素が存在すると(ステップS13で“YES”の場合)、処理はステップS20に移行し、CPU21は選択した複数の未処理画素をターゲット画素群として選択することになる。図13(c)に示す例では、2つの画素(1、0)と(0、1)に位置する画素をターゲット画素群として選択することになる。そして、CPU21は選択した画素に対応する出力バッファ273に“0”を代入する(図14(a)の出力バッファ273参照)。
【0071】
次いで、CPU21は選択したターゲット画素群の吸収処理を行う(ステップS21)。この吸収処理の動作を示すフローチャートを図11に示す。本処理に移行すると、まず選択したターゲット画素群をセルに取り込むべきか否か判断される。すなわち、ターゲット画素群として選択した画素の数を、ターゲット画素群の画素の内階調値が最小な値とで乗算し、その結果をこれまで構成したセルの階調値の合計との和を演算して、その演算値が閾値より低いか高いかを判定する(ステップS210)。
【0072】
ここで閾値は、構成すべきセルの階調値の合計値、“255”とする。演算結果がこの閾値より低いとターゲット画素群の各画素からその最小値を均等に取り込んで以後の処理を行い、逆に高いとターゲット画素群の各画素から所定の階調値を均等に取り込み以後の処理を行うことになる。まわりの画素から均等に階調値を取り込むので、構成されたセルの重心位置とドットの重心位置とのずれが少なくなり、複数のセルでドットが固まって発生するのを防止することができる。これにより、快適な印刷出力を得ることができる。
【0073】
図13(c)に示す例では、選択されたターゲット画素群の画素数は(1,0)と(0,1)の2つだけなので“2”、2つの画素の階調値の最小値は“50”、これまで構成したセルの階調値の合計は“50”であるから、その演算結果は“150”(=(50×2)+50)となる。この値は、閾値(“255”)より低い値なので、ステップS210で“NO”が選択される。
【0074】
CPU21は、この演算結果が閾値よりも低いと判断されると(ステップS210で“NO”)、選択したターゲット画素群の各画素の階調値の最小値を選択する(ステップS214)。具体的には、CPU21は、ステップS20で選択したターゲット画素群の各階調値を読出し、その最小値を演算することになる。演算の方法は、例えば、選択したターゲット画素群のいづれか一の画素の階調値と、他の画素の階調値とを比較し、低い方の画素を選択し、その選択した画素の階調値と他の画素の階調値とで同じ処理を繰り返し、これを選択したターゲット画素群の各画素すべてを比較することで演算することができる。図13(c)に示す例では、2つの画素((1、0)と(0、1)に位置する画素))の階調値の最小値は、“50”となるのでこの“50”をCPU21が選択することになる。選択すると、選択された近傍の画素の階調値は、もとの階調値から最小値を引いた値をターゲット画素の階調値として入力バッファ271に格納されることになる。図13(c)に示す例では、それぞれその階調値は“0”(=50−50)となる(図14(a)の入力バッファ271参照)。
【0075】
次いで、CPU21は、選択したターゲット画素を含めた重心位置を演算する。重心位置の演算式は上述の(式1)に各値を代入することで行なわれる。図13に示す例は、これまで構成したセルの重心位置と位置(1,0)の画素とで演算し、その結果をセルの重心位置としてさらに位置(0,1)の画素とで演算して、ターゲット画素群を含めたセルの重心を求める。ここで、これまで構成したセルの重心位置とその階調値の合計はワーキングメモリ272に格納されているので、CPU21はこの値を読み出して(式1)に代入し、位置(1、0)の座標とその階調値“50”を(式1)に代入して、重心位置(x、y)=(0.5,0)、を得る。そして、この重心位置と位置(0,1)の画素とで、同様の演算を行い、重心位置(x,y)=(0.33・・・、0.33・・・)、及び階調値の合計“150”を得る。
【0076】
ここで、重心位置は上述の(式1)で示されているように必ずしも整数値になるとは限らない。重心に最も近い画素を選択する場合のほかに、重心が位置する画素に最も近い画素を選択する場合でもよい。このようにすることで、重心位置は整数値として演算でき、CPU21の処理する計算量が減ることが期待できる。ただし、演算した重心位置が小数点を含む場合があるので、演算した重心位置のx、y座標のそれぞれに0.5を足して、その位置に重心が位置する画素として、画素を選択することも可能である。
【0077】
このように初期画素のまわりのターゲット画素から均等に階調値を取り込んで重心位置を演算するので、重心位置と最終的に生成されるドットの重心位置との位置ずれが少なくなる。
【0078】
図11に戻って、CPU21は、その演算した重心位置をワーキングメモリ271に格納し(ステップS215)、次いで、初期画素含めた各画素の階調値(最小値)の合計を同様にワーキングメモリ271に格納する(ステップS216)(図14(b)のワーキングメモリ272参照)。また、選択した画素は、これ以後未処理画素として選択されないようにするため、CPU21が、対応する入力バッファ271の位置に“−1”を格納する(図14(b)の入力バッファ271参照)。そして、CPU21は、ステップS21へ移行することになる。
【0079】
一方、ステップS210で閾値よりも演算結果が大きいとき(“YES”のとき)、処理はステップS211に移行し、閾値からワーキングメモリ272に格納された階調値を減算し、その値をターゲット画素群の画素数で除算した値を演算する。例えば、この時点で、初期画素の階調値が“50”、ターゲット画素群として2つの画素が選択され、その階調値がそれぞれ“150”、“200”であるとき、その演算結果は、“102.5”(=(255−150)/2)となる。
【0080】
次いで、CPU21は、ステップS211での演算結果を用いて、選択した画素を含めた重心を演算する(ステップS212)。上述の例では、2つの画素から“102.5”づつ、初期画素の階調値との合計を演算して、50+102.5×2=255を得て、これを選択した画素の階調値として重心を演算する。重心の演算式は、(式1)を用い、演算した重心の位置座標は、ワーキングメモリ272にそれぞれ格納される。そして、その合計値(階調値の合計値)もワーキングメモリ272に格納され(ステップS213)、ステップS22へと移行する。なお、この場合にターゲット画素群の階調値は、取り込まれた値から減算した値をその画素の階調値としてもとの画素に戻すことを行う。すなわち、上述の例ではターゲット画素群として選択された2つの画素の階調値はそれぞれ“150”と“200”であるが、取り込んだ102.5を引いた値(それぞれ“47.5”と“97.5”)をその画素の階調値として以後の処理を行う。当該画素に残った階調値を戻しているため、ドットの生成が入力階調値に忠実に再現することができる。なお、この戻しデータがある画素に対してはその入力バッファ271に“−1”を格納せず、以後の処理で未処理画素として選択されることとなる。
【0081】
ステップS22では、CPU21は、ワーキングメモリ272に格納した階調値の合計がドット生成量、すなわち“255”とした閾値に達したか否かを判断する。CPU21は、ワーキングメモリ272から階調値の合計を読出し、ROM225に予め格納された閾値“255”と比較して処理を行う。閾値に達した場合(“YES”の場合)、処理はステップS18に移行し、閾値に達しない場合は、再びステップS13へ移行することになる。
【0082】
図14(b)に示す例では、その合計は“150”で閾値である“255”に達しないので、ステップS13に以降することになる。
【0083】
閾値に達しない場合は、ステップS13に移行して、CPU21は、4近傍に未処理画素あるか否か判断する。ステップS22から本ステップに移行した場合は、初期画素を中心に4近傍の画素は既に選択済みのため、“NO”が選択されて、ステップS14に移行することになる。
【0084】
CPU21は、ステップS14において、重心に最も近い未処理画素を選択する。重心は、すでにステップS212或いはステップS215においてワーキングメモリ272にその値が格納されているので、その値をCPU21が読み出して、未処理画素を選択することができる。また、重心位置を利用せずに、初期画素の位置自体に近い画素を選択するようにしてもよい。図14(b)に示す例では、未処理画素のうち、位置(1、1)の画素が重心(0.33・・・,0.33・・・)から最も近いので、この画素を選択する。このように重心を利用しているので、最終的に生成されるセルの構成は円状に成長するため、重心にドットを形成しても、ドット間で一定距離を保つことができる。CPU21は、選択した画素に対応する出力バッファ273の位置に“0”を格納する(図14(c)出力バッファ273参照)。
【0085】
次いで、CPU21は、選択した画素を含めた重心を演算する(ステップS15)。重心の演算は、(式1)を用いて行なう。これまで構成したセルの重心の座標と階調値の合計は、ワーキングメモリ272に格納されているので、これを読出し、(式1)はROM25に格納されているので同様にこれを読出し、選択画素の座標と階調値は、入力バッファ271に格納されているので、これを読み出して、(式1)に代入して演算することができる。図14(b)に示す例では、選択画素は(1、1)、その階調値は“50”、ワーキングメモリ272に重心の座標(0.33・・・、0.33・・・)と階調値の合計“150”、これらを(式1)代入して演算を行なうと、重心位置は(0.5、0.5)を得る。演算した結果は、CPU21によってワーキングメモリ272に再び格納させることになる(図14(c)のワーキングメモリ272参照)。
【0086】
次いで、CPU21は、選択した未処理画素を含めた階調値の合計をワーキングメモリ272に書き込み、選択した未処理画素に対応する入力バッファ271の位置に“−1”を書き込む(ステップS16)(図14(c)入力バッファ271とワーキングメモリ272参照)。
【0087】
次いで、CPU21は、これまで選択した画素の階調値の合計が、ドット生成量に達したか否か判断する(ステップS17)。ステップS22と同様に、階調値の合計が閾値“255”に達したか否かで判断される。図14(c)の例では、これまで選択した画素の階調値の合計は“200”(階調値の合計値は、この時点でワーキングメモリ272に格納されている)で、閾値に達しないので、本ステップで“NO”が選択されて、再びステップS14に移行する。
【0088】
ステップS14に移行すると上述の処理を閾値に達するまで、繰り返すことになる。図14(c)の例では、ステップS14にて未処理画素を選択することになるが、重心(0.5、0.5)から最も近い画素は、複数存在することになる((0、2)、(1、2)、(2、0)、(2、1)の4つの画素)。ここではランダムにいづれか一つ選択することにする。上述したように、ドットによる周期パターンの発生を抑えるためである。ここでは、位置(0、2)にある画素を選択することにする。
【0089】
そして、CPU21は選択画素含めた重心位置を演算し(ステップS15)、セルの階調値の合計を演算し、これらの結果をワーキングメモリ272に格納し、選択した画素の入力バッファ271に“−1”を格納する(ステップS16)。位置(0,2)の画素を選択しても、その階調値の合計は“250”でまだドット生成量に達していない。よって、ステップS17で“NO”が選択されて、再び未処理画素の選択を行う(ステップS14)。この例の場合、重心位置から最も近い距離にある画素は(1、2)となる。
【0090】
このとき画素(1、2)の階調値をこれまで構成したセルの階調値の合計との和をとると閾値“255”を超えて“315”となる。この場合は、上述したようにその画素(1、2)の階調値は、セルの階調値の合計が閾値となる値“5”として重心等の演算を行う。画像に変化のある領域でも、その変化に影響されずに重心を演算するためである。そして、(式1)を用いて重心を演算すると、(0.38、0.88)、階調値の合計は“255”を得て、ワーキングメモリ272にCPU21によって格納されることになる(図15(a)のワーキングメモリ272参照)。そして、最後に選択した画素の階調値を戻しデータとして“60”(=65−5)を入力バッファ271に格納させることになる。構成したセル以外の画素に戻すと、入力階調値の分布に忠実にドットを生成させることができず、これを防止するためである。
【0091】
そして、その階調値の合計が“255”となるので、ステップS17で“YES”が選択されて、重心位置のドットを生成する処理を行う(ステップS18)。具体的には、重心位置に位置する画素に黒ドットを打つことを示す“255”を対応する出力バッファ273にCPU21によって格納されることになる(図15(a)の出力バッファ273参照)。
【0092】
次いで、CPU21は、未処理画素があるか否か判断する(ステップS19)。具体的には、CPU21は、入力バッファに“−1”が格納されていない画素を選択することになり、すべて“−1”が格納されていればすべて上述の処理が終了しているので、本ステップで“NO”が選択されて処理が終了することになる(ステップS20)。まだ、“−1”が格納されていない画素があれば、未処理画素が存在することになるので、再びステップS11に移行し上述の処理を未処理画素がなくなるまで繰り返すことになる。図15(a)に示す例では、まだ未処理画素があるので、初期画素を選択して(未処理画素のうち最も上側でかつ最も左側に位置する画素、位置(2、0)の画素を選択)、上述の処理を繰り返す。
【0093】
一方、図9に戻り、ステップS12で初期画素が白成分が少なく黒成分が多い画素であると判断されると(“NO”のとき)、黒濃度処理(ステップS24)に移行する。黒濃度処理の動作を示すフローチャートを図12に示す。このように白成分が多いか少ないかを判断しているのは、最終的なドット生成処理で、黒ドットを生成する場合(ステップS13からS18までの処理)と、何もドットを生成しない白ドットを生成させる場合とでは、処理が異なるからである。
【0094】
また、黒ドット生成処理の場合と同様に、図16(a)に示すよう入力画像データが入力バッファ271に格納されているとして以下説明する。また、その初期画素の重心位置及び階調値もすでにステップS11によりワーキングメモリに格納されている(図16(b)参照)。
【0095】
黒濃度処理に移行すると、CPU21は、黒ドット生成の場合と同様に、初期画素の4近傍に未処理画素があるか否か判断する(ステップS241)。これは黒ドット生成処理(ステップS13からS18)と同様に、初期画素を中心にすでに画素として選択されたことを示す“−1”が格納されているか否かで判断される。図16(b)の例では、初期画素(0、0)を中心に2つの画素((0、1)と(1、0))には“−1”が書き込まれていないので未処理画素があると判断される(“YES”)。
【0096】
未処理画素が4近傍にあると判断されると、CPU21は、選択された未処理画素をターゲット画素群として選択する(ステップS249)。図16(b)の例では、(n+1、m)と(n、m+1)に位置する2つの画素をターゲット画素群として選択することになる。なお、このターゲット画素群として選択された画素は、その入力バッファ271に格納された階調値を閾値から減算した値の階調値を有する画素として選択し、その値をCPU21は入力バッファ271の選択された画素位置に格納することになる。そのまま以後の処理を行うと、構成されるセルの階調値がすぐに閾値に達してしまい、セルの大きさを確保できずに、ドット密度が多くなりすぎて、快適な印刷出力を得ることができなくなってしまうからである。図16(b)に示す例では、2つの画素(n+1、m)、(n、m+1)の階調値はそれぞれ“50”(=255−205)として以後、処理を行う。
【0097】
次いで、CPU21は、ターゲット画素群の吸収処理に移行する(ステップS250)。ターゲット画素群の吸収処理の動作を示すフローチャートを図11に示す。ほぼ、黒ドット生成処理の場合と同様である。
【0098】
まず、黒ドットの生成処理と同様に、ターゲット画素群の画素数とその画素群の階調値の最小値との積をとり、その値とこれまで構成したセルの階調値の合計との和を取る。なお、このときの各画素の階調値は上述した閾値からの減算結果で演算される。その演算結果が閾値(“255”)より小さいと“NO”が選択され、そうでないと“YES”が選択される。図16(b)に示す例では、位置(n+1、m)及び(n、m+1)との階調値の最小値は“50”、選択画素数は2、これまで構成したセルの階調値の合計は“50”で、演算すると“150”で閾値“255”には達しないので本ステップで“NO”が選択される。
【0099】
ステップS210で“NO”が選択されると、CPU21は、ターゲット画素群の最小値を選択する(ステップS214)。図16(b)に示す例では、“50”が選択される。
【0100】
次いで、CPU21は、選択した画素を含めた重心位置を演算する(ステップS215)。重心位置の演算式は、上述した(式1)により演算する。重心を演算した結果(もちろん、各画素の階調値は閾値から減算した値で演算する)は、同様にワーキングメモリ272に格納される(図16(c)のワーキングメモリ参照、“**”で図面上記載しているが実際には、(n+0.33・・・、m+0.33・・・)となる)。
【0101】
次いで、CPU21は、ターゲット画素群の最小値を吸収して、ターゲット画素群を含めて構成されたセルの階調値の合計を演算し、その結果をワーキングメモリ272に格納する(図16(c)のワーキングメモリ参照)。また、CPU21は、選択したターゲット画素群の対応する入力バッファ271に以後未処理画素として選択されないことを示す“−1”を格納し、選択した画素の対応する出力バッファ273の位置にドットを打つ処理を行わせるための“255”を格納する。黒ドット生成処理のときは“0”を出力バッファ272に格納させたが、白ドットを生成するための処理は、まわりに黒ドットを生成させ、重心位置に白ドットを生成させるために、何もドットを打たないことを示す“0”を格納させて、白ドットを表現させるからである。そして、処理はステップS251に移行する。
【0102】
一方、ステップS210で、演算結果が閾値よりも大きいと、黒ドット生成処理と同様に、閾値からワーキングメモリ272に格納された階調値を減算し(ステップS211)、ターゲット画素群として選択された画素数で除した値を、ターゲット画素群から均等に階調値を取り込む(この場合も、その取り込む階調値は閾値から原階調値を減算した値として演算する)。そして、その値で(式1)を使用して重心の演算を行う(ステップS212)。演算結果は、黒ドット処理と同様に、ワーキングメモリ272に格納し、当該画素の階調値から選択したターゲット画素群に取り込まれた階調値を減算して、当該画素に戻すことになる。そして、処理はステップS251へ移行することになる。
【0103】
CPU21は、ステップS251に移行すると、選択したターゲット画素群含めたセルの階調値の合計が閾値(“255”)に達したか否か判断される。閾値に達しないと(“NO”)、再びステップS241に移行し、閾値に達した場合は(“YES”)、ステップS246に移行する。上述の図16(c)に示す例では、閾値に達しない(合計値は“150”)ので、ステップS241に移行する。
【0104】
そして、CPU21は、ステップS241にて初期画素の4近傍に未処理画素が存在するか否か判断されるが、すでに4近傍は以前の本ステップにて“YES”が選択されたので、ステップS251から戻って本ステップを判断すると“NO”が選択され、ステップS242に移行することになる。
【0105】
CPU21は、ステップS242で重心に最も近い未処理画素を選択する。円状にセルを成長させるためである。重心位置に最も近い画素が複数あるときは、ランダムに選択する。周期パターンの発生を抑えるためである。選択した画素の階調値は、原階調値を閾値から減算した値として入力バッファ271に再び書き込む。セルの大きさを一定範囲に保つためである。さらに、未処理画素として選択した画素に対応する出力バッファ273の位置に“255”を書き込む。黒ドットを打つ処理を行わせるためである。
【0106】
次いで、CPU21は、選択した未処理画素を含めた重心を演算する(ステップS243)。演算は、(式1)を用いる。これまで構成したセルの重心等は、ワーキングメモリ272に格納され、選択した画素の座標等は入力バッファ271に対応或いは格納され、(式1)はROM25に書き込まれているので、CPU21がそれぞれ読み出して演算を行う。演算した重心位置は、再びワーキングメモリ272に格納する。
【0107】
次いで、CPU21は、未処理画素をバッファに吸収する(ステップS244)。すなわち、CPU21は、未処理画素を含めたセルの階調値の合計をワーキングメモリ272に格納し、選択した画素の対応する入力バッファ271の位置に以後未処理画素として選択されないよう“−1”を格納する。
【0108】
次いで、CPU21は、セルの階調値の合計が閾値(“255”)に達したか否か判断され(ステップS245)、達しないと再びステップS244に移行し、閾値に達するまで処理が繰り返される。なお、ステップS242で未処理画素を選択し、その階調値とこれまで構成したセルの階調値との合計値が閾値を超えてしまう場合は、選択した未処理画素の階調値を、閾値となる値としてステップS243およびステップS244で演算を行う。黒ドット生成処理とこの点は同様である。
【0109】
閾値に達すると(ステップS245で“YES”のとき)、処理はステップS247に移行し、重心位置に白ドットの生成を行う(ステップS246)。重心位置はワーキングメモリ272に格納されているので、その位置に位置する画素に何もドットを打たないことを示す“0”を対応する出力バッファ273に格納する。これによりまわりに黒ドットが生成され、重心位置に何もドットを打たない画素が存在することで、白ドットを生成させることができる(図17(a)参照)。
【0110】
次いで、CPU21は、未処理画素があるか否か判断する(ステップS247)。黒ドット生成と同様に、入力バッファ271のすべての画素が“−1”となれば“YES”が選択されて処理が終了し(ステップS248)、そうでないと、未処理画素を処理するため、再びステップS11に移行し、上述の処理を繰り返すことになる。
【0111】
上述したすべての処理が終了するとCPU21は、RAM27の出力バッファ273に書き込まれた値を読出し、ROM25に格納されたパルス幅生成のための処理を行い、駆動パルスデータとして、印刷エンジン30に出力する。そして、印刷エンジン30では、この駆動パルスデータをもとに駆動パルスあり又はなし等を示す制御データを生成し、この制御データに基づいて感光ドラムに影像が転写され、実際に印刷用紙にホストコンピュータ10からのデータが印刷されることになる。
【0112】
上述した例は、閾値を“255”として処理を行ったがそれ以外の値であってもよい。また、上述の処理をホストコンピュータで実行させて、その処理後のデータを画像出力装置に出力して、印刷を行うようにしてもよい。また、画像出力装置としてレーザドライバを有するページプリンタで説明したが、インクジェットプリンタやバブルジェット(登録商標)プリンタなどでも実現することは可能である。さらに、ハーフトーン処理後のデータは、“0”か“255”の2値データとしたが、その他4値のデータ、複数種類の値を有するデータであってもよい。
【0113】
以上説明してきたように本発明によれば、どのような画像データが入力されても、円状にセルが成長し、その重心にドットを生成させると高画質で快適な印刷出力を得ることができる。
【0114】
なお、上述した例では、選択した初期画素に隣接する画素を選択して画素を取り込むようにしたが、さらにその隣接画素に隣接する画素を選択してその画素の階調値をセルに取り込むようにしてもよい。
【0115】
また、選択した隣接画素から均等にその階調値を取り込むようにしたが、必ずしも均等にではなく、例えば図14(a)の初期画素に隣接する2つの画素からそれぞれ“20”、“30”の値を取り込むようにしてもよい。
【0116】
さらに、隣接する画素から階調値を取り込んだ後、閾値に達しない場合に、セルに取り込むべき画素をランダムに選択したが、ランダムではなく、さらに重心位置にある画素に隣接する画素やその画素に隣接する画素を選択するようにして同じ処理を繰り返すようにしてもよい。
【図面の簡単な説明】
【図1】本発明によるシステム全体の構成図である。
【図2】本発明の画像出力装置の構成を示す図である。
【図3】本発明によるセルの構成方法の一例を示す図である。
【図4】本発明によるセルの構成方法の一例を示す図である。
【図5】本発明によるセルの構成方法の一例を示す図である
【図6】本発明によるセルの構成方法の一例を示す図である
【図7】本発明によるセルの構成方法の一例を示す図である
【図8】本発明によるセルの構成方法の一例を示す図である
【図9】本発明の実施の形態の動作を示すフローチャートを示す図である。
【図10】本発明の実施の形態の動作を示すフローチャートを示す図である
【図11】ターゲット画素群の吸収処理の動作を示すフローチャートである。
【図12】黒濃度処理の動作を示すフローチャートである。
【図13】RAM27の構成と格納される値の例を示す図である。
【図14】RAM27の構成と格納される値の例を示す図である。
【図15】RAM27の構成と格納される値の例を示す図である。
【図16】RAM27の構成と格納される値の例を示す図である。
【図17】RAM27の構成と格納される値の例を示す図である。
【符号の説明】
10 ホストコンピュータ 20 画像出力装置 21 CPU 23 入力I/F 25 ROM 26 ハーフトーン処理部 27 RAM 271 入力バッファ 271a 未処理画素 271c セル 271d 重心 272 ワーキングメモリ 273 出力バッファ 28 パルス幅変調部 30 印刷エンジン
Claims (10)
- 画素ごとにN(Nは整数)種のレベル値を有する第1の画像データをM種(M<N、Mは整数)のレベル値を有する第2の画像データに変換して出力する画像処理装置において、
前記第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、
前記重心位置決定手段で決定した重心に位置する画素に対して前記M種のレベル値のうち所定の値を設定して前記第2の画像データを出力する出力手段と、
を備えることを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記画素群生成手段は、前記隣接する複数の未処理画素により前記画素群を生成しても前記所定の画素のレベル値を含めた前記画素群のレベル値の総和が閾値以下のとき、さらに画素ごとのレベル値の総和が閾値以上になるまで、これまで生成した画素群の前記重心位置決定手段で決定した重心から最も近い画素を選択して前記画素群を生成することを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記重心位置決定手段は、前記画素群生成手段で選択した隣接する前記未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と前記所定の画素のレベル値との合計が前記閾値以下のとき、前記選択した未処理画素のレベル値のうち最小のレベル値を前記選択した未処理画素のそれぞれから均等に前記所定の画素のレベル値に加算して前記画素群の重心位置を決定する、ことを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記重心位置決定手段は、前記画素群生成手段で選択した隣接する前記未処理画素の最小のレベル値と選択した前記未処理画素の画素数との積と前記所定画素のレベル値との合計が前記閾値よりも大きいとき、前記所定の画素のレベル値が前記閾値となるように前記画素群生成手段で選択した隣接する未処理画素からそれぞれ均等にレベル値を前記所定の画素のレベル値に加算して重心を決定する、
ことを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記画素群生成手段は、前記重心位置決定手段で決定した重心から最も近い画素が複数存在するとき、ランダムに画素を選択することを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記画素群生成手段は、前記所定の画素に隣接する未処理画素を選択し、さらに当該隣接する未処理画素に隣接する未処理画素を選択して画素群を生成することを特徴とする画像処理装置。 - 画素ごとにN(Nは整数)種のレベル値を有する第1の画像データをM種(M<N、Mは整数)のレベル値を有する第2の画像データに変換して出力する画像処理方法において、
前記第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、
前記画素群生成ステップで選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定ステップと、
前記重心位置決定ステップで決定した重心に位置する画素に対して前記M種のレベル値のうち所定の値を設定して前記第2の画像データを出力する出力ステップと、を備えることを特徴とする画像処理方法。 - 画素ごとにN(Nは整数)種のレベル値を有する第1の画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成処理と、
前記画素群生成処理で選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定処理と、
前記重心位置決定処理で決定した重心に位置する画素に対して前記M種のレベル値のうち所定の値を設定して前記第2の画像データを出力する出力処理と、
をコンピュータに実行させるためのプログラム。 - 画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷装置において、
前記画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定手段と、
前記重心位置決定手段で決定した重心に位置する画素に量子化データを付与する量子化データ付与手段と、
前記量子化データ付与手段で付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御手段と、
を備えることを特徴とする印刷装置。 - 画素ごとに複数種類の階調値を有する画像データに従って、画像の印刷を行う印刷方法において、
前記画像データのうち、所定の画素を中心に隣接する複数の未処理画素を選択して画素群を生成する画素群生成ステップと、
前記画素群生成ステップで選択した未処理画素のそれぞれからレベル値を前記所定の画素のレベル値に加算して前記画素群の重心を決定する重心位置決定ステップと、
前記重心位置決定ステップで決定した重心に位置する画素に量子化データを付与する量子化データ付与ステップと、
前記量子化データ付与ステップで付与された量子化データに基づいてドットを生成して印刷用紙に画像の印刷を行う印刷制御ステップと、
を備えることを特徴とする印刷方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003110690A JP2004320374A (ja) | 2003-04-15 | 2003-04-15 | 画像処理装置、画像処理方法、印刷装置、印刷方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003110690A JP2004320374A (ja) | 2003-04-15 | 2003-04-15 | 画像処理装置、画像処理方法、印刷装置、印刷方法及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004320374A true JP2004320374A (ja) | 2004-11-11 |
Family
ID=33471485
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003110690A Pending JP2004320374A (ja) | 2003-04-15 | 2003-04-15 | 画像処理装置、画像処理方法、印刷装置、印刷方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004320374A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007194688A (ja) * | 2006-01-17 | 2007-08-02 | Seiko Epson Corp | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 |
CN100417176C (zh) * | 2004-12-16 | 2008-09-03 | 三星电子株式会社 | 图像处理装置和方法 |
JP2008205705A (ja) * | 2007-02-19 | 2008-09-04 | Seiko Epson Corp | 画像処理装置及び画像処理方法 |
JP2008228314A (ja) * | 2005-05-16 | 2008-09-25 | Seiko Epson Corp | 画像処理装置,画像処理方法,及び画像処理プログラム |
-
2003
- 2003-04-15 JP JP2003110690A patent/JP2004320374A/ja active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100417176C (zh) * | 2004-12-16 | 2008-09-03 | 三星电子株式会社 | 图像处理装置和方法 |
JP2008228314A (ja) * | 2005-05-16 | 2008-09-25 | Seiko Epson Corp | 画像処理装置,画像処理方法,及び画像処理プログラム |
JP4492723B2 (ja) * | 2005-05-16 | 2010-06-30 | セイコーエプソン株式会社 | 画像処理装置,画像処理方法,及び画像処理プログラム |
JP2007194688A (ja) * | 2006-01-17 | 2007-08-02 | Seiko Epson Corp | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 |
JP4539567B2 (ja) * | 2006-01-17 | 2010-09-08 | セイコーエプソン株式会社 | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 |
JP2008205705A (ja) * | 2007-02-19 | 2008-09-04 | Seiko Epson Corp | 画像処理装置及び画像処理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH0472433B2 (ja) | ||
US7961962B2 (en) | Method, apparatus and computer program for halftoning digital images | |
JP2000333010A (ja) | 階調依存型誤差拡散ハーフトーン化方法 | |
JP2006352837A (ja) | 画像処理装置,画像処理方法,及び画像処理プログラム | |
JP2004363639A (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP2003134339A (ja) | 画像形成装置 | |
JP4412248B2 (ja) | 画像処理装置、画像処理方法、及び画像処理プログラム | |
JP2004320374A (ja) | 画像処理装置、画像処理方法、印刷装置、印刷方法及びプログラム | |
JP4479663B2 (ja) | 固定セルによるハーフトーン処理を行う画像処理装置,画像処理方法,及び画像処理プログラム | |
Metaxas | Parallel digital halftoning by error-diffusion | |
JP4108517B2 (ja) | ハーフトーン化処理方法及びハーフトーン化処理システム | |
JP2015115957A (ja) | 二値周期からマルチビット非周期へのハーフトーン及び解像度の変換 | |
JP2005182824A (ja) | イメージ・データを処理する方法 | |
JP3951953B2 (ja) | 印刷装置、画像処理装置、印刷方法、画像処理方法及びプログラム | |
JP2020082694A (ja) | ディザマトリクスの生成装置、生成方法、当該ディザマトリクスを用いた画像処理装置、画像処理方法、及びプログラム | |
JP3112316B2 (ja) | 画像変換方法 | |
JP6651776B2 (ja) | 画像処理装置、画像処理方法、及び、プログラム | |
JP2977583B2 (ja) | 網点の閾値発生方法 | |
JP2005341142A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP4337670B2 (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2005318402A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP2003018404A (ja) | 閾値マトリックス、およびそれを利用した階調再現方法とその装置 | |
JP2005039413A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2005252807A (ja) | 画像処理方法、印刷システム及びプリンタ | |
JP4965378B2 (ja) | 画像形成方法および画像形成システム |