JP3951953B2 - 印刷装置、画像処理装置、印刷方法、画像処理方法及びプログラム - Google Patents
印刷装置、画像処理装置、印刷方法、画像処理方法及びプログラム Download PDFInfo
- Publication number
- JP3951953B2 JP3951953B2 JP2003104388A JP2003104388A JP3951953B2 JP 3951953 B2 JP3951953 B2 JP 3951953B2 JP 2003104388 A JP2003104388 A JP 2003104388A JP 2003104388 A JP2003104388 A JP 2003104388A JP 3951953 B2 JP3951953 B2 JP 3951953B2
- Authority
- JP
- Japan
- Prior art keywords
- pixel
- center
- pixel group
- output data
- gravity
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Color, Gradation (AREA)
- Image Processing (AREA)
- Fax Reproducing Arrangements (AREA)
- Facsimile Image Signal Circuits (AREA)
Description
【発明の属する技術分野】
本発明は、画素ごとに所定の階調値を有する画像データに対して、構成されたセルの重心位置を中心にドットを生成する印刷装置、画像処理装置、印刷方法、画像処理方法及びプログラムに関する。
【0002】
【従来の技術】
従来より、デジタル画像の1画素が多数の値を持ち得る連続階調のデータを少数の階調(例えば2値)に変換する、ハーフトーン処理が行われている。ハーフトーン処理の方法としては、誤差拡散法がよく知られている。誤差拡散法では、変調の周期(ドットを打つ位置の周期)が入力画像の階調値に応じて変化するため、その周期が閾値マトリックスで予め決められたディザ法に比べ、高い解像度を有している。
【0003】
一方で、誤差拡散法は、入力画像の階調値が低濃度の値で分布していると、誤差が遠く離れた画素まで拡散する場合もあり、結果的にドットの分散性が劣化する問題があった。
【0004】
そこで、入力画像を所定の大きさのセルに分割し、各セルの中心位置にドットを生成させるようにすることで、誤差拡散法の高解像性を保持したまま、ドットのつながりなどの画質劣化を防止する技術が開示されている(例えば、特許文献1)。
【0005】
【特許文献1】
特開平11−27528号公報(図4、図7)
【0006】
【発明が解決しようとする課題】
しかしながら、上述した特開平11−27528は、入力画像の中間階調領域においてすぐに閾値に達するため、セルサイズが小さくなってしまう。かかるサイズが小さいと、隣接するセルでドットが繋がったり離れたりなどドット間距離にばらつきが生じ、視覚的にドットが目立つなど快適な印刷出力を得ることができない問題点があった。
【0007】
そこで、本発明は、中間階調領域の入力画像に対しても高画質で快適な印刷出力を得る印刷装置、印刷方法、画像処理装置、画像処理方法及びプログラムを提供することを目的とする。
【0008】
【課題を解決するための手段】
上記目的を達成するために、本発明は、画素ごとに階調画像データ値を有する画像データに従って画像を印刷する印刷装置において、画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で生成した画素群の重心位置を決定する重心位置決定手段と、重心位置決定手段で決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定手段と、出力データ値設定手段で設定された画素の出力データ値を所定幅のパルスに変換するパルス幅変換手段と、パルス幅変換手段で変換されたパルスに基づいてドットを生成して印刷用紙に入力された画像の印刷を行う印刷制御手段と、を有し、画素群生成手段は重心位置決定手段で決定した重心位置から最も近い画素を選択することを特徴としている。これにより、例えば、重心位置とドットの中心位置との誤差が最小となるような、複数画素に跨るドットを生成でき、画質劣化なく視覚的に快適な印刷出力を得ることができる。
【0009】
また、本発明は、上記印刷装置であって、上記出力データ値は、少なくともパルスの幅情報についての値であることを特徴としている。これにより、例えば、印刷装置は、この幅情報を用いてドットを生成するためのパルスを容易に生成することができる。
【0010】
また、本発明は、上記印刷装置であって、上記画素群生成手段は、画素群重心決定手段で決定した重心位置から最も近い画素が複数存在するときにランダムに画素を選択することを特徴している。これにより、例えば、セルが円状に生成され重心にドットを生成しても、隣接するセルでドットが繋がって生成されることはなくなり、視覚的に快適な印刷出力を得ることができる。
【0011】
また、上記目的を達成するために本発明は、画素ごとにN(Nは正の整数)種類以上のレベルを有するN値画像データが入力され、画素ごとにM(M<N、Mは正の整数)種類のレベルを有するM値の画像データを出力する画像処理装置において、画素ごとの階調画像データ値の総和が閾値以上となるまで、画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で生成した画素群の重心位置を決定する重心位置決定手段と、重心位置決定手段で決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定手段と、出力データ値設定手段で設定された画素の出力データ値を、所定幅のパルスに変換するパルス幅変換手段と、を有し、画素群生成手段は重心位置決定手段で決定した重心位置から最も近い画素を選択することを特徴としている。これにより、例えば、重心位置とドットの中心位置との誤差が最小となるような、複数画素に跨るドットを生成でき、画質劣化なく視覚的に快適な出力画像を得ることができる。
【0012】
さらに、上記目的を達成するために、本発明は、画素ごとに階調画像データ値を有する画像データに従って画像を印刷する印刷方法において、画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成ステップと、画素群生成ステップで生成した画素群の重心位置を決定する重心位置決定ステップと、重心位置決定ステップで決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定ステップと、出力データ値設定ステップで設定された画素の出力データ値を、所定幅のパルスに変換するパルス幅変換ステップと、パルス幅変換ステップで変換されたパルスに基づいてドットを生成して印刷用紙に入力された画像の印刷を行う印刷制御ステップと、を有し、画素群生成ステップは重心位置決定ステップで決定した重心位置から最も近い画素を選択することを特徴としている。これにより、例えば、重心位置とドットの中心位置との誤差が最小となるような、複数画素に跨るドットを生成でき、画質劣化なく視覚的に快適な印刷出力を得ることができる。
【0013】
さらに、上記目的を達成するために、本発明は、画素ごとにN(Nは正の整数)種類以上のレベルを有するN値画像データが入力され画素ごとにM(M<N、Mは正の整数)種類のレベルを有するM値の画像データを出力する画像処理方法において、画素ごとの階調画像データ値の総和が閾値以上となるまで、画素を選択して画素群を生成する画素群生成ステップと、画素群生成ステップで生成した画素群の重心位置を決定する重心位置決定ステップと、重心位置決定ステップで決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定ステップと、出力データ値設定ステップで設定された画素の出力データ値を、所定幅のパルスに変換するパルス幅変換ステップと、を有し、画素群生成ステップは重心位置決定ステップで決定した重心位置から最も近い画素を選択することを特徴としている。これにより、例えば、重心位置とドットの中心位置との誤差が最小となるような、複数画素に跨るドットを生成でき、画質劣化なく視覚的に快適な出力画像を得ることができる。
【0014】
さらに、上記目的を達成するために、本発明は、画素ごとに階調画像データ値を有する画像データが入力され画素ごとの階調画像データ値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成処理と、画素群生成処理で生成した画素群の重心位置を決定する重心位置決定処理と、重心位置決定処理で決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定処理と、出力データ値設定処理で設定された画素の出力データ値を所定幅のパルスに変換するパルス幅変換処理と、パルス幅変換処理で変換されたパルスに基づいて前記ドットを生成して印刷用紙に前記入力された画像の印刷を行う印刷制御処理と、を有し、画素群生成処理は重心位置決定処理で決定した重心位置から最も近い画素を選択することをコンピュータに実行させるためのプログラムであることを特徴としている。これにより、例えば、重心位置とドットの中心位置との誤差が最小となるような、複数画素に跨るドットを生成でき、画質劣化なく視覚的に快適な印刷出力を得ることができる。
【0015】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。
【0016】
図1は、本発明による画像出力システムをモノクロ入力画像に適用した場合の処理の流れを示すシステム全体構成図である。この例では、ホストコンピュータ10において、生成した階調画像データ16(図1においてはモノクロである)が、ページプリンタなどの画像出力装置20に出力され、画像出力装置20でホストコンピュータ10からの画像データが出力されるようになっている。
【0017】
ホストコンピュータ10は、アプリケーション部12とラスタライズ部14とから構成される。
【0018】
アプリケーション部12は、ホストコンピュータ10内に実装されたアプリケーションプログラムにより印刷対象となる、文字データ、図形データ、ビットマップデータ、その他の種々のデータが生成される。これらのデータは、例えばホストコンピュータに接続された表示装置や入力装置を介して生成させることができる。アプリケーション部12で生成されたデータは、ラスタライズ部14に出力される。
【0019】
ラスタライズ部14は、アプリケーション部12から出力された印刷対象のデータをラスタライズし、各画素または各ドットごと8ビットの値からなる階調画像データ16に変換される。8ビットのデータであるので、各画素は0から255までの値をとることができる。ラスタライズ14は、実際にはホストコンピュータ10に実装されたドライバによって実行されることになる。8ビットのデータに変換された階調画像データ16は、画像出力装置20に出力される。
【0020】
画像出力装置60は、ハーフトーン処理部26、パルス幅変調28と、印刷エンジン30とから構成される。
【0021】
ハーフトーン処理部26は、入力された階調画像データ16に対して、より少数の階調の値(2値や4値など)に変換する処理を行う。この階調画像データ16は、0から255までの連続階調の値を有しており、例えばこれを2値の値(0及び1など)に変換することで、画像出力装置20で実際に用紙に印刷するときに、ドットをうつ又はうたない、という処理を行うことが可能になる。
【0022】
ハーフトーン処理部26によって所定の階調値に変換されたデータ30は、パルス幅変調部28に出力される。パルス幅変調部28は、各画素ごと変換されたデータ30を、レーザー駆動パルスあり又はなし、かつありの場合はそのパルス幅等からなる駆動データ29に変換する。生成された駆動データ29は、エンジン30に出力される。
【0023】
エンジン30は、レーザードライバ32と、レーザーダイオード34とから構成される。レーザードライバ32は、入力された駆動データ29から、駆動パルスあり又はなし等を示す制御データを生成し、レーザーダイオード34に出力する。レーザーダイオード34は、レーザードライバ32からのこの制御データに基づいて駆動され、また図示しない感光ドラムや転写ベルトが駆動されて、実際に印刷用紙にホストコンピュータ10からのデータが印刷されることになる。
【0024】
次に画像出力装置20の具体的構成を、図2を参照して説明する。
【0025】
ここで、図1のハーフトーン処理部26は、図2におけるCPU21と、ROM25、及びRAM27に対応し、パルス幅変調部28は、CPU21と、ROM25及びRAM27に対応する。
【0026】
画像出力装置20は、全体として、CPU21と、入力インターフェース(I/F)23と、ROM25と、RAM27とから構成される。
【0027】
CPU21は、内部バスを介して、入力I/F23、ROM25、RAM27、印刷エンジン30と互いに接続され、重心位置の演算や、未処理画素の選択、ドットの生成等、各種処理を実行するためのものである。詳細は後述する。
【0028】
入力I/F23は、ホストコンピュータ10と画像出力装置20とのインターフェースとしての役割を果たし、本実施例では、ホストコンピュータ10から出力される、ラスタライズされた各画素ごとに所定の階調値を有する入力画像データが入力される。入力された画像データはCPU21の制御により一旦RAM27に格納される。
【0029】
ROM25は、各種プログラムなどが格納される。CPU21の制御によりプログラムが読み出されて、各種処理が実行されることになる。
【0030】
RAM27は、CPU21が処理を実行する際のワーキングメモリとしての役割を果たし、実行データ等が一時格納される。
【0031】
印刷エンジン30は、図1のエンジン30と同様の構成で、レーザドライバ32及びLD34とから構成される。
【0032】
次に、全体の動作について説明するが、その前に本発明の重心を利用して未処理画素を探索し、ドット生成を行うまでの原理について図3から図6を参照して説明する。
【0033】
ホストコンピュータ10から各画素ごとに所定の階調値を有するデータが入力される。この画像データの例を図3(a)に示す。これは、入力された画像データが入力I/F23を介してCPU21の制御によりRAM27の入力バッファ領域271に格納された例を示している。入力バッファ271は、m行n列の2次元構造を有し、各位置はホストコンピュータ10で生成された画像の画素位置に対応するものである。例えば、入力バッファの(n、m)の位置に格納されたデータは、全体画像における(n、m)の位置に位置する画素の階調値に対応するものである。
【0034】
ここでは、説明を簡単にするため、縦方向はmからm+2まで、横方向はnからn+3までの入力バッファ構造を示しているが、実際には1画像(1フレーム)分の入力バッファの構成を有することになる。
【0035】
ここで行う処理は、初期画素から所定の閾値に達するまで順次画素を取り込んでいき、一定の大きさのセルを生成する。順次画素を取り込むときに選択される画素は、これまで取り込んだ画素の重心位置を利用して、その位置から最も近い画素を取り込むようにする。このように重心から次の画素を探索するため、生成したセルは円状に生成し、その重心にドットを形成しても、隣合うドットは均一の距離が保たれる。かかるドットの分散により視覚的に快適な印刷出力を得ることができる。
【0036】
また、重心から最も近い画素が複数存在するときは、ランダムに画素を選択するものとする。ランダムではなく固定順により選択すると最終的に生成されるセルの形が常に一定でその重心にドットを形成しても全体としてドットの位置が周期的で印刷出力において周期パターンを発生させてしまうことになる。かかる周期パターンは、視覚に映りやすく印刷出力の画像が不自然なものとなってしまう。一方、ランダムにより選択することで、生成されるセルの形状が常に一定とはならず、重心にドットを形成しても周期パターンが発生せず、視覚的に快適な印刷出力を得られるのである。図7(a)にランダムに選択した場合の印刷出力の例を示し、図7(b)にはランダムではなくテーブル等を利用して固定順で画素を選択した場合の印刷出力の例を示す。図7(b)に示すように固定順の場合、印刷部分の左下から右上にかけて一定の並び順でドットが形成されているため、周期パターンが発生し、このパターンが視覚に反映されて印刷出力が不自然なものとなっている。一方、図7(a)に示すようにランダムに選択した場合には、周期パターンが発生せず、視覚的に快適な印刷出力を得ることができる
そして、選択された画素が閾値に達すると、それまで選択した画素により構成されるセルが生成され、そのセルの重心にドットを生成させるよう処理を行う。
【0037】
図3の例に戻って、処理の流れを具体的に説明する。まず初期画素を選択画素として決定する。初期画素は、ここでは、まだ処理されていない未処理画素のうち最も上でかつ最も左側にある画素とする。したがって、図3(a)に示す例では、図3(b)に示すように(n、m)に位置する画素が最も上でかつ左側にある画素なので、この画素が初期画素となり、これを選択画素271aとして選択することになる。
【0038】
そして、これまで選択した画素の階調値の合計が閾値に達したか否か判断される。ここでは、閾値として例えば“255”を設定されているものとする。この時点では、初期画素271aのみの選択で、その階調値の合計は“50”であるため、閾値に達していないことになる。よって、さらに画素を選択する動作を行う。
【0039】
画素の選択は、上述したように重心を利用して、重心から最も近い画素を選択する。これまで選択されたセル271bは、この時点で初期画素のみなので、この重心を決定すると、図3(c)に示す位置271cに位置することになる。重心の決定方法は、後述する。そして、この位置271cから最も近い画素を選択する。ここでは、(n、m+1)と(n+1、m)の2つが重心から最も近い画素である。複数ある場合は、ランダムに選択するので、例えば図3(c)に示すように(n+1、m)に位置する画素を選択する。
【0040】
次いで、選択画素271aをセル271bに組み込み、その重心を決定すると、図4(a)に示す位置に重心271cが位置することになる。この重心271cから最も近い画素を選択画素271aとして選択すると、2つの画素(n,m+1)と(n+1,m+1)であるが、ランダムに選択して、図4(a)に示すように(n、m+1)に位置する画素を選択画素271aとする。
【0041】
以上の処理を繰り返して、図4(b)に示すように5つの画素((n、m)、(n、m+1)、(n+1、m)、(n+1、m+1)、(n+1、m+2))が選択されると、セル271bの階調値の合計(“265”)が閾値(“255”)に達するので、ここで画素の選択を終わらせる。そして、セル271bの重心位置を演算すると図4(b)に示す位置271cに重心が存在する。ここで、この重心が存在する画素にドットを生成させるようにするため、所定の値を設定する。ここでは“255”の値を(n+1、m+1)の位置に設定する。
【0042】
ここで、最終的に選択された画素が(n+1、m+2)とすると、その階調値の合計は、“265”となる。重心位置の決定に際して、セル271bの階調値の合計が“255”として演算を行う。すなわち、最後に選択された画素(n+1、m+2)は、その階調値が“55”として重心の演算を行う。この誤差分“10”(=65−55)は、再び画素(n+1、m+2)に戻し、セル271dに組み込ませずに再度初期画素からセル271bを構成させる際に選択対象の画素となるようにする。このように戻しデータ値をもとの画素(n+1、m+2)に戻すため、生成したセル以外の画素に戻して誤差を伝播させるときと比べて入力された画素の階調値のドット分布に忠実に出力ドットが形成されることになる。
【0043】
そして、再び、初期画素271aを選択して、上述の処理を繰り返すことで、図5(a)に示すような2つのセルが生成されることになる。ここで、各セルの重心位置271cに存在する画素に対してドットを生成させるようにすると、図5(b)に示すように、出力ドットが隣り合うセルで接触することになる。このため、印刷出力全体で見るとこのドットが目立ち、結果的に分散性が劣ったドットを生成することになってしまう。かかるドットにより視覚的に快適な印刷出力を得ることができなくなってしまう。とくに、入力画像データの階調値が中間階調領域(例えば“120”の値で連続した領域など)では、2つや3つの画素でセルが構成されることになるので、セルが小さく、図5(b)に示すようにドットが隣接したり、或いはドットが離れすぎたりするため、快適な印刷出力を得にくい状況となる。
【0044】
そこで、セルを構成する画素群の中で重心を決定すると、その重心位置を中心に複数の画素を跨いで正確に重心位置にドットを生成させるようにする。例えば図5(c)に例を示す。このようにドットを生成させれば、入力階調分布の重心位置と出力ドットの重心位置ずれをなくすことができるので、中間階調領域でも分散性を向上したドットを生成することができる。他にも、図6(a)に示すように、セルの重心位置とドットの重心位置は水平方向(n、n+1・・・の方向)では一致するが、鉛直方向(m、m+1・・・の方向)では若干ずれている場合でも、図5(b)の場合と比較して、ドットの分散性は向上していることになる。
【0045】
さらに図6(b)に示すように、水平方向の重心位置とドットの中心位置は一致するが、正確に重心位置とドットの中心位置とが一致するドット(図5(c)参照)が含まれる4つの画素にドットを生成するようにしてもよい。図5(b)と比較してドットの分散性が向上するからである。
【0046】
ここで、ドット全体の面積は1ドット分の面積(例えば1画素分の面積)となるように生成されている。これは、画素(n,m)と、画素(n+1,m)の境目からドットがうたれる領域割合はn方向では、図6(a)と同じであるがその面積は全体として1ドット分の大きさとなっている。さらに、重心が位置する画素に応じて、ドットの幅も変えている。すなわち、画素(n,m)と(n+1,m)との領域にうたれるドットn方向の幅と、画素(n,m+1)と(n+1,m+1)との領域にうたれるドットn方向の幅では、重心が位置する方の画素を含む領域(画素(n,m+1)と(n+1,m+1)の方の領域)の方を広げてドットをうっている。これにより重心に忠実なドットを生成させることができる。
【0047】
なお、以上の処理で、すでに構成されたセルの重心と、現在構成したセルの重心とが一致する場合も考えられる。かかる場合には、すでに構成されたセルの重心から生成されたドットの隣でかつ未だドットの生成が行われていない領域に、1ドット分の大きさのドットを生成させるようにすることが考えられる。全くドットを形成させないようにすることも考えられるが、入力階調値に忠実なドット分布を得るようにするためには、このようにドットを形成させることが望ましい。
【0048】
次に図8から図19を参照して、以上述べてきたセルの生成からドットの生成までの具体的処理について説明する。
【0049】
ここで前提として、ホストコンピュータ10から入力される階調画像データは、図3(a)に示すデータが入力されるものとする。そして、入力されたデータは、CPU21の制御によりRAM27の入力バッファ領域271に格納されるものとする。その例を図10に示す。
【0050】
図10(a)は、全体としてRAM27の構成を示す。RAM27は、入力バッファ領域271と、ワーキングメモリ領域272と、出力バッファ領域273とから構成され、CPU21に制御により、CPU21によって演算されたデータ等がそれぞれ入力バッファ271、ワーキングメモリ272、出力バッファ273に適宜、書き込みや読み出しが行われるようになされている。
【0051】
入力バッファ領域271は、上述したようにホストコンピュータ10から出力された入力画像データの階調値が格納される。2次元構造であり、各位置は入力画像全体の画素の位置に対応する。ワーキングメモリ272は、演算した重心位置や階調値の合計などを格納するためのものである。出力バッファ273も、入力バッファ271と同様に2次元構造で、画像全体の画素の位置に対応し、この各位置に格納された値によって印刷を行うことになる。
【0052】
図3(a)に示す画像データが入力されたときの例を図10(b)に示す。ここでは説明を簡単にするため、3行4列の入出力バッファ271、273で、(n、m)を(0、0)として以下説明することにする。
【0053】
図8、9は、セルの生成からドット生成までの処理全体の動作を示すフローチャートである。
【0054】
まず、処理が開始される(ステップS10)と、CPU21は初期画素を決定し、初期濃度重心を演算する(ステップS11)。図10(b)に示す例では、初期画素は未処理画素のうち最も上でかつ左側にある画素が選択されるため、(0,0)に位置する画素が選択される。そして、CPU21は初期画素の位置する画素の階調値と、そのアドレス位置とを読み出し、重心を演算する。CPU21が演算する重心は具体的には、以下の演算式を用いる。
【0055】
この演算式はROM25に格納され、ステップS11にてCPU21が読み出して演算を行うことになる。ちなみに、初期画素の場合は、量子化中画素群の重心のx、y座標、及び量子化中画素群の重心の階調値はともに0として演算される。(式1)にこれらの値と、読み出した初期画素の位置と階調値とを代入して演算すると、重心位置は(x重心、y重心)は(0,0)となる。なお、CPU21は、演算した重心位置と、初期画素の階調値とを上述した、ワーキングメモリ領域272に格納する(図10(c)参照)。その後の演算処理をスムーズに行うためである。そして、CPU21は、ステップS12で初期画素が低濃度と判断された場合は、その時点で初期画素に対応する出力バッファ273に“0”を格納し、ステップS12で初期画素が高濃度と判断された場合は、その時点で初期画素に対応する出力バッファ273に“255”を格納する。初期画素に(黒又は白)ドットが打たれなかった場合に、正しい出力を行うためである。また、CPU21は、選択した初期画素の入力バッファ271の階調値を“−1”にして格納する。後述する未処理画素の選択で、すでに選択された画素を選択しないようにするためである。なお、入力バッファ271に格納する値は、“−1"以外でも他の負の値を格納させてもよい。さらに、入力バッファ271と同様のメモリ構成で、選択した画素の対応する位置にフラグを立てるようにして選択画素が処理済みか否かを判断することも可能である。
【0056】
次いで、CPU21は、決定した画素が低濃度か否か判断する(ステップS12)。具体的には、ROM25に格納された閾値“127”を読出し、RAM27の入力バッファ271から読み出した階調値と比較し、閾値よりも低い場合はステップS13に移行し、閾値と同じか大きいときはステップS13に移行する。ここで、低濃度と判断される場合(ステップS12で“YES”の場合)とは、選択した画素が黒成分が少なくしろ成分が多い場合である。その後の処理で黒ドットを形成させる処理に移行させるためである。一方、低濃度ではないと判断された場合(ステップS12で“NO”の場合)は、選択した画素が白成分が少なく黒成分が多い場合で、その後の処理で白ドットを形成させる処理(ステップS53)に移行することになる。ここで、低濃度か否か判定しているのは、ドットの生成処理で黒ドットを生成する場合と、何もドットをうたない白ドットを生成する場合とでは処理が異なるからである。
【0057】
ステップS12で低濃度と判断された場合(ステップS12で“YES”の場合)、CPU21は、未処理画素の選択を行う(ステップS13)。ここで未処理画素の選択は、重心を利用して画素の選択を行う。最終的に生成されるセルの形状は、円状となり、その重心にドットを形成させることで、ドット間距離が均一となり、視覚的に快適な印刷出力を得ることができるからである。ここで、未処理画素の選択は、ステップS11で演算した重心から最も近い距離にある画素が選択される。図10(c)に示す例では、(1、0)に位置する画像データか、(0,1)に位置する画像データが選択される。2つの画素ともアドレス(0,0)から等距離にあるからである。ここで、いずれかの画素を選択する必要があるが、ランダムにCPU21が選択するものとする。ランダムではなく固定順に選択すると量子化済み画素群の形状が規則的に並び重心位置にドットを形成すると周期パターンが発生するからである。ランダムに選択することで周期パターンの発生を抑えて、視覚的に快適な印刷出力を得ることができる。図10(c)に示す例では(1,0)に位置する画素をCPU21が選択するものとする(図11(a)参照)。
【0058】
ここで、重心位置は上述の(式1)で示されているように必ずしも整数値になるとは限らない。重心に最も近い画素を選択する場合のほかに、重心が位置する画素に最も近い画素を選択する場合でもよい。このようにすることで、重心位置は整数値として演算でき、CPU21の処理する計算量が減ることが期待できる。ただし、演算した重心位置が小数点を含む場合があるので、演算した重心位置のx、y座標のそれぞれに0.5を足して、その位置に重心が位置する画素として、画素を選択することも可能である。CPU21は、選択した画素、ここでは(1,0)の画素に対応する入力バッファ271に“−1”を格納する。以後の未処理画素の選択で当該画素が選択されないようにするためである。さらに、CPU21は、選択した画素に対応する、RAM27の出力バッファ273に“0”を格納する(図11(b)の出力バッファ272参照)。
【0059】
次いで、CPU21は、閾値制御処理を行う(ステップS14)。後述するが閾値が一定の場合では、入力画像データの階調値が低い領域では出力ドットの密度は低くなり、また階調値が中間値(例えば“120”など)の領域では出力ドットの密度が高くなり、印刷出力全体としてのドットの分布密度が一定とならない。印刷出力のうち、ある領域では多くドットが打たれ、ある領域ではドットが少ないため全体として快適な印刷出力を得ることができない。そこで、かかる場合に閾値を変更することで、量子化済み画素群56aの大きさ、すなわち量子化済み画素群56aを構成する画素数が一定となり、一定密度のドット分布を得ることができる。閾値変更する場合の処理は、後述するが、選択した画素が所定個数(例えば5個)に達したか否かで閾値変更処理が行われる。上述の例では、(0、0)の画素と(1,0)の画素の2つの画素のみしか選択されていないので、閾値の変更は行われない。
【0060】
次いで、CPU21は、濃度の合計が閾値に達したか否か判断する(ステップS15)。すなわち、選択した未処理画素の階調値を含めた濃度の合計(階調値の合計)が閾値“255”に達したか否か判断される。具体的には、CPU21は、RAM27のワーキングメモリ272に書き込んだ画素の階調値と、ステップS13で選択した画素の入力バッファ271に格納された階調値とを読出し、その合計を演算して、ROM25に格納された閾値(ここでは“255”の値)とを比較する。例えば図11(a)の例では、ワーキングメモリ272には階調値“50”、画素(1,0)に格納されている階調値は“50”であるので、その合計は“100”となる。よって合計値は閾値に達しないことになる
階調値の合計が閾値を超えない場合(ステップS15で“NO”の場合)、CPU21は、選択した未処理画素を含めた重心の演算を行う(ステップS16)。具体的なCPU21の演算は、上述した(式1)の演算式を用いて行うことになる。これまで求めた重心の座標は、(0,0)で重心の階調値は“50”、未処理画素の座標は(1,0)で、その階調値は“50”とすると、演算される重心位置は(0.5,0)となる。演算した重心位置は、CPU21の制御によってRAM27のワーキングメモリ272に格納される。ステップS11でワーキングメモリ272には初期画素の重心位置が格納されていたが、ここではその位置に上書きして格納する。その格納後の例を図11(b)のワーキングメモリ272(左側と中央参照)に示す。
【0061】
次いで、CPU21は、階調値の演算を行う(ステップS17)。ここでの演算は、RAM27のワーキングメモリ272に書き込まれた階調値とステップS13で選択した画素の階調値との合計を演算する。演算した結果は、再びRAM27のワーキングメモリ272に上書きして書き込む。この例を図11(b)のワーキングメモリ272(右側参照)に示す。
【0062】
次いで、CPU21は、ステップS17で演算した階調値の合計が、閾値と等しいか否か判断する(ステップS18)。具体的には、ステップS17でRAM27のワーキングメモリ272に格納された階調値と、ROM25に格納された閾値とをCPU21が読み出して、両者を比較することで実行される。図11(b)の場合は、まだ閾値に達していない(ステップS18で“NO”の場合)ので、再び、未処理画素の選択(ステップS13)に移行し、上述の処理を繰り返すことになる。未処理画素をセルに次々と組み込み、その合計値が閾値(ここでは“255”)に達するまで処理が繰り返されることになる。これまでセルに組み込まれた画素の階調値の合計は、RAM27のワーキングメモリ272に格納されているので、その値と閾値とを比較することで、閾値に達するまでセルを構成していくことができる。なお、CPU21は、未処理画素の選択を行うと対応する出力バッファ273の位置に“0”を格納する。
【0063】
そして、閾値と等しいとCPU21が判断した場合(ステップS18で“YES”の場合)、処理はステップS19に移行し、すでに演算した重心位置を中心として複数画素にわたる黒ドットの生成を行う。
【0064】
例えば図11(c)に示すようにステップS13で最終的に(1,2)に位置する画素が選択されると、重心位置は(0.62,1.31)となる。この重心に位置する画素は(1,1)の位置の画素であるが、この画素のみドット生成を示す“255”を設定すると、図5(b)の左側にあるようにドットが生成される。中間階調領域では、セルの大きさが小さくなるため、隣りあうドットとつながったり、離れたりと、ドットが目立ってしまう。そこで、この重心位置を中心に画素が跨っても、セルの重心位置とドットの中心位置とが一致するようなドットを生成するようにすることで、かかるドットの発生を抑制することができる。
【0065】
通常、ハーフトーン処理後に行われるパルス幅変調は、所定の値に変換された各画素の階調値に対して、その階調値に対応したパルス幅を生成する。例えば、階調値が255なら生成されるパルスは、画素の幅に対してすべて“1”、階調値が127なら、画素の幅の半分だけ“1”でその他半分は“0”、階調値が63なら、画素の幅の4分の1だけ“1”、それ以外は“0”となるパルスを生成する。また、画素に対して右側が“1”となるか、左側が“1”となるかで、所望のパルスを生成できる。例えば、図6(a)に示す例では、画素(n、m+1)の右側に“1”となるパルス、画素(n+1、m+1)の左側に“1”となるパルスを生成させれば、2つの画素に跨るドットを生成させることが可能である。
【0066】
したがって、図6(a)や(b)に示すドットを生成させることができるのである。パルスの幅については、図13を参照して以下のように演算することができる。
【0067】
例えば、重心位置が図13に示すように(0.62,1.31)とすると、図13に示す黒点が重心位置271cとなる。ここで、重心位置271cに対して(0,0)となる点は、図13に示すように画素(0,0)の中心に位置する。この位置(0,0)から例えば水平方向(n、n+1・・・方向)に対して、0.5だけ進むと次の画素(1,0)の領域に入ることになる。したがって、n=0.62のときは、画素(0,0)から見ると右側にドットが生成され、画素(1,0)から見ると左側にドットを生成することになる。ここで、重心のy座標は1.31であるため、点(0,1)から見ると右側に、点(1,1)から見ると左側にドットを生成させることになる。この場合のパルス幅は、画素(0,1)の領域は右側に0.38(=1−0.62)の割合だけドット生成させるようにパルス幅を生成させ、画素(1,1)から見ると左側に0.62の割合だけドットを生成させるようにすればよいことになる。一般に重心位置が水平方向(n、n+1・・・方向)にα.β(β≠0)とあらわされたとき、画素(α,m)から見ると右側に、255×(1−0.β)のパルス幅をもたせ、画素(α+1,m)から見ると左側に255×0.βのパルス幅を持たせるようにすればよいことになる。なお、β=0のときは画素(α、m)の中心位置を中心にパルス幅を持たせるようにすればよい。
【0068】
したがって、重心位置が(α.β,γ.θ)であらわされたとき、画素(α,γ)から右側に255×(1−0.β)のパルス幅を生成させ、画素(α+1,γ)から見ると左側に255×0.βのパルス幅を生成させるようにすればよい。
【0069】
上述した重心位置は(0.62,1.31)であるので、画素(0,1)から見て右側に255×(1−0.62)≒96(小数点切捨て)、画素(1,1)から見て左側に255×0.62≒158のパルス幅をもたせればよいことになる。かかる処理により図6(a)のドットを生成させることができる。なお、この幅情報と右か左の情報は、ともに対応する画素の出力バッファ273に格納することになる。詳細は後述する。
【0070】
また、図6(a)に示すドットの生成の方法としては、正確な重心位置が(α.β,γ.θ)であった場合に(α.β,γ)を中心にしてその点の左右に等量(127.5:合計が255のとき)の画素幅を分配する方法によっても実現できる。すなわち、画素(α,γ)と画素(α+1,γ)との境界から見て右側に、(0.β−0.5)×255+127.5、画素(α,γ)と画素(α+1,γ)との境界から見て左側に、−(0.β−0.5)×255+127.5、の幅をもつドットを生成させるようにしてもよい。重心位置が(0.62,1.31)のときは、画素(0,1)と画素(1,1)との境界から見て右側に(0.62−0.5)×255+127.5=158、左側に−(0.62−0.5)×255+127.5=97の幅を持つドットを生成させることができ、図6(a)に示すドットを生成させることができる。
【0071】
さらに、これらを応用して、図5(c)に示す重心とドットの中心が一致したドットを生成することができる。すなわち、重心位置が(α.β,γ.θ)と表されたとき、上記n方向に加え、画素(α,γ)から見て下側に255×(1−θ)、画素(α,γ+1)から見て上側に255×θ、のそれぞれのパルス幅を持たせればよいことになる。かかる場合に、出力バッファ273の各内部構成は、上述したn方向の出力バッファ273のみならず、m方向の出力バッファ273を有するように構成させればよいことになる。
【0072】
図6(b)に示すドットの生成は、具体的には以下のようになる。境界を中心に生成される上下2つのドット(上に位置するドット271eと下に位置するドット271f)は、それぞれ幅が異なるが、ドット271eとドット271fとを合わせたときのm方向の重心位置は、“γ.θ”となるように2つのドットの面積の比率を計算しておく必要がある。
【0073】
すなわち、上にあるドット271eの幅をW、下にあるドット271fの幅を255−Wとし、2つのドットを合わせた重心位置が重心位置“γ.θ”となるようなWを求めることになる。m方向の2つのドットを合わせた重心Yは以下のように演算される。
【0074】
(式2)
Y= (ドット271eの幅×ドット271eの重心+ドット271fの幅×ドット271fの重心)/(ドット271eの幅+ドット271fの幅)
この合わせた重心Yが、セルのm方向の重心位置“γ.θ”となるWを求めれればよいことになる。すなわち、
(式3)
γ.θ=(W×ドット271eの重心+(255−W)×ドット271fの重心)/(W+(255−W))
上述した、セル271dの重心位置は(0.62,1.31)であったので、(式3)に値を代入すると、1.31=(W×1.0+(255−W)×2.0)/(W+(255−W))となり、W=176を得る。すなわち、ドット271eの幅は176で、ドット271fの幅は255−176=79の幅を有することになる。したがって、(0.62,1.0)を中心に左右に88(全部で176)づつ分配したドット、(0.62,2.0)を中心に左右に39,40(全部で79)づつ分配したドットを生成すれば、図6(b)に示すドットを生成することができる。かかる演算式(式3)は、ROM25に予め格納され、CPU21が読み出し、ワーキングメモリ272に格納された重心位置をこの演算式に代入して演算することで、実行される。
【0075】
図9に戻って、CPU21は、未処理画素があるか否か判断する(ステップS21)。すなわち、上述した処理をRAM27の入力バッファ271に書き込まれたすべての階調値に対して行ったか否かで判断し、未処理画素があれば(“YES”の場合)再び処理はステップS11に移行し、上述の処理を繰り返し、すべての画素に対して処理が終了すれば(“NO”)、CPU21はステップS22に移行し、処理が終了することになる。
【0076】
一方、ステップS15(図8参照)で濃度の合計が閾値を超える場合(“YES”の場合)、処理はステップS25に移行し、閾値超えた場合の重心演算処理を行う。これは、図11(c)に示すように、最終的にステップS13選択された画素が(1、2)に位置する画素であるとき、セルの階調値の合計を演算するとすると“265”になり、閾値“255”を超えることになる。したがって、このような場合はステップS15で“YES”が選択されてステップS25に移行することになる。
【0077】
図14は、閾値を超えた場合の重心演算処理の動作を示す。
【0078】
まず、CPU21は、閾値から濃度の合計、すなわち閾値からこれまでステップS16で演算した階調値の合計値を引く演算を行う(ステップS250)。例えば図11(c)に示す例では、閾値は“255”、ステップS16でこれまで演算した階調値の合計は“200”であるので、255−200=55の値を演算する。上述したようにこれまで選択した画素の階調値の合計は、RAM27のワーキングメモリ272に格納され、閾値はROM25に格納されているのでCPU21がこれらを読み出して演算することができる(図11(c)参照)。
【0079】
そして、CPU21は、この“55”の値を画素(2、1)の階調値として重心の演算を行う(ステップS251)。この閾値を超えた場合の重心演算処理における重心の演算は具体的には、以下の演算式を用いる。
【0080】
(式1)との違いは、選択した未処理画素の階調値をそのまま用いるのではなく、セルの階調値の合計が閾値と同じになるような階調値を用いる点が異なる。この演算式は、(式1)の場合と同様に予めROM25に格納されており、CPU21が本ステップを実行する際にROM25から読み出すことで実行される。ここでは、最終的にステップS13で選択した画素の階調値は、これまで演算した階調値の合計との和をとることで閾値と等しくなるように演算して、それをもとに重心位置を求めることになる。そしてCPU21は、演算した重心位置を再びRAM27のワーキングメモリ272に値を書き込む。上述したように実際には重心位置を演算すると(0.62,1.31)となり、これがワーキングメモリ272に格納される(図12(a)参照)。また、CPU21は、最終的に選択した画素の元の階調値からステップS250で演算した演算結果を引いた値を演算して、その値を再びその選択した画素の入力バッファに書き込む(ステップS20)。これにより、当該画素の階調値が、戻しデータとして格納される。図12(a)に示す例では、戻しデータとして “10”の値を求め、これをRAM27の入力バッファ271の(2、1)に再び書き込む(図12(a)の入力バッファ271参照)。そして、この画素は生成したセルに組み込まれず、再度セルを構成する際に利用されることになる。上述したように、戻しデータを生成したセル以外の画素に戻すのではなく、戻しデータが発生した画素に再び格納させることで、入力階調値に忠実なドット分布を形成することができる。
【0081】
そして、CPU21は、(式4)で求めた重心位置に黒ドットを形成する処理を行う(図9のステップS20)。これは上述したステップS19と同様の処理が行われることになる。ここで図12(b)に出力バッファ273の各セルの構成を示す。出力バッファ273は、9ビット構成で、1ビット目273aはドットを右側に生成させるか、左側に生成させるかの情報を示す値が格納される。残りの8ビット273bでパルスの幅の情報を示す値が格納される。重心位置は図12(a)の例では(0.62,1.31)となるので、画素(0,1)に対応する出力バッファ273の位置には、最初の1ビット目が右側にパルスを生成させることを示す“1”が格納され、その幅“96”(≒255×(1−0.62))を示す“00110000”が幅情報領域273bに格納される(図12(c)参照)。また画素(1,1)に対応する出力バッファの位置には、最初の1ビット目が左側にパルスを生成させることを示す“0”が格納され、その幅“158”(≒255×0.62)を示す“01001111”が幅情報領域273bに格納されることになる(図12(b)参照)。かかる演算は、ワーキングメモリ272に格納された重心位置をCPU21が読み出し、ROM25に格納された上述の演算を行うことで計算され、その結果を出力バッファ273へ格納させることで処理が行われる。なお、閾値に達したセルを構成する各入力バッファ271に対して“0”を格納させることで、閾値に達したセルであることを示し、以後の処理で“0”が格納された画素に対してセルを構成させないようにしている(図12(a)の入力バッファ271参照)。
【0082】
その後、処理はステップS21へ移行し、上述した処理が繰り返されることになる。
【0083】
一方、図8のステップS12で、決定した画素が低濃度でない場合(“NO”の場合)、処理は白濃度処理へと移行する(ステップS23)。この処理の詳細を図15に示す。本処理は、画素の階調値が白濃度よりも黒濃度の方が大きいため、その画素のまわりに白ドットを生成するために行われる処理である。なお、入力画素のデータは図16(a)に示すデータが入力されるものとして以下説明する。ここでは、初期画素は、図16(a)の(n,m)に位置する画素であるものとする。黒濃度の処理と同様に各画素の位置座標も入力バッファ271のアドレスに対応しているものとする。なお、白濃度前段の処理であるステップS11により初期画素は(n,m)が選択され、その重心位置は式1によりRAM27のワーキングメモリ272に既に格納され、その階調値“205”もメモリ272に格納されているとする(図16(b)参照)。また、初期画素の入力バッファ271には“−1”が格納され、対応する出力バッファ273にも“255”が格納されているものとする。
【0084】
まず、白濃度処理に移行すると、CPU21は、未処理画素の選択を行う(ステップS230)。ここでの未処理画素の選択も上述したステップS13と同様に重心を利用して選択する。ドット間距離を均一に保つためである。初期画素は、(n,m)であるので、重心を利用すると最も近い画素は(n+1,m)と(n,m+1)の2つの画素がある。CPU21は、ステップS13と同様にランダムに選択する。ドットの周期パターンの発生を抑えるためである。ここでは、(n+1,m)の画素を選択するとする。上述したように重心利用する場合に重心位置そのものを利用する以外にも、重心が位置する画素に最も近い画素を選択する場合でもよい。また、CPU21は、画素(n+1、m)に対応する入力バッファ271には“−1”を格納する。以後の未処理画素の選択で、未処理画素として選択されないようにするためである。
【0085】
次いで、CPU21は、入力階調値の最大値から、初期画素も含めステップS230で選択した未処理画素の階調値を減算する(ステップS231)。図16(a)に示す例では、(n+1,m)に位置する初期画素の階調値は、“205”なので、入力階調値の最大値である“255”から減算すると、“50”となる。また、ステップS230で選択した未処理画素は(n,m+1)であるとすると、その階調値“205”を最大値“255”から減算すると“50”を得る。この入力画素の階調値の最大値は、ROM25に格納されており、また、選択した画素の階調値は上述したようにRAM27の入力バッファ271に格納されているので、CPU21がこれらの値を読み出すことで、演算することができる。演算した結果はCPU21の制御によりRAM27のワーキングメモリ領域272に格納される(図16(b)参照)。
【0086】
このように各階調値の値を変更させているのは、黒の濃度のままセルを構成していくと、2つ又は3つなど少ない画素数ですぐに階調値の合計が閾値に達してしまうからである。これでは、セルが一定の大きさを保てず、隣り合ったセル同士でドットが隣接して生成され、全体としてドットが目立つため快適な印刷出力を得ることができなくなってしまう。そこで、白濃度演算処理として、入力階調値の最大値から選択した画素の階調値の減算処理を行うのである。
【0087】
なお、図8に示す処理のうちステップS12において画素が低濃度か否かを判定せず、黒成分が多く、白成分が少ない画素群に対しても低濃度の場合と同様の処理(ステップS13からステップS19)を行うと以下のような問題が生じる。すなわち、もともと黒成分が多い画素が多数存在するため、構成したセルは、すぐに閾値に達してしまう。例えば図16(a)の場合では、2つの画素((n,m)と(n+1,m))で閾値に達することになる。かかる場合に重心位置から黒ドットをうつべき画素は、2つの画素のいずれか(例えば(n,m))である。そして、余った戻りデータを、例えば(n+1,m)に戻して、再びこの画素を含めたセルを初期画素(例えばこの(n+1,m))から探索すると、重心利用して選択される画素は例えば(n,m+1)となる。これに初期画素の階調値を加えるとこの2つの画素でセルを形成して重心位置からいずれか1の画素に黒ドットを形成する。これを繰り返すことで、ほとんど黒ドットをうつことになり、白ドットは余りの戻しデータが少なくなるとようやく何もうたない白ドットを形成することになる。これでは、黒成分が多く、白成分が少ない画素群に対して生成した白ドットは、誤差拡散法で問題となるワーム状に配置され、視覚的に不快な印刷出力となる。かかる理由により、白成分が多く黒成分が少ない画素と、黒成分が多く白成分が少ない画素とでステップS12を境に異なる処理を行うようにしている。
【0088】
図15の処理に戻って、CPU21は、出力バッファ273に黒ドットの生成を行う(ステップS232)。これは、最終的に印刷エンジン70では、入力画像データに対して黒成分が多い画素にはドットをうつ処理を行い、重心位置にある画素に対してドットをうたないようにして印刷を行うためである。CPU21は、ステップS230で選択した画素に対して、上述したRAM27の出力バッファ273の対応する位置に入力階調値の最大値(図16(a)の場合は“255”)を格納することで処理が行われる(図16(c)参照)。
【0089】
次いで、CPU21は、閾値制御処理を行う(ステップS233)。上述したステップS14と同様に選択した未処理画素(ステップS230)を含めた入力階調値が低い領域などで、閾値を変更することで生成されるセルの大きさが一定となり、生成される白ドットが印刷出力全体として一定密度で分布することになる。詳細は後述するが、実際にはセルを構成する画素の個数等により判断されるが、この図16(c)に示す例では、まだ(n,m)と(n+1,m)に位置する画素しか選択されていないので、閾値の変更は行われない。
【0090】
次いで、CPU21は、階調値の合計が閾値を越えるか否か判断する(ステップS234)。ここでは、すでにワーキングメモリ272にこれまで選択した画素の階調値の合計が格納されているので、その値をメモリ272からCPU21が読み出し、閾値はROM25に格納されているので、この読み出した閾値と比較して判断する。図16(c)の例では、メモリ272に“50”が格納されているので、最大値“255”と比較すると、まだ閾値に達していないと判断される。
【0091】
閾値が超えないと判断された場合(ステップS234で“NO”の場合)は、処理はステップS235に移行して、CPU21は、未処理画素を含めた重心位置を演算する。重心の演算は、上述した(式1)と同様である。演算した重心位置は、ワーキングメモリ272にCPU21の制御により格納される。初期画素(n,m)と、選択画素(n+1,m)との重心位置を演算すると、(式1)により(n+0.5,m)となる。これを黒処理と同様にワーキングメモリ272にCPU21の制御により格納する。図17(a)に例を示す。
【0092】
次いで、CPU21は、階調値の合計を演算する(ステップS236)。ステップS231で演算した値とワーキングメモリ272に書き込まれた階調値との合計を演算する。演算した結果は、ワーキングメモリ272にCPU21の制御により格納される(図17(a)参照)。
【0093】
次いで、CPU21は、演算した階調値の合計が閾値と等しいか否か判断し(ステップS237)、等しくなるまで処理が繰り返されることになる(ステップS237で“NO”の場合)。
【0094】
階調値の合計が閾値と等しいと判断されると(“YES”の場合)、ステップS235で演算した重心位置を中心に複数画素にわたる白ドットを生成する処理を行う(ステップS238)。具体的には、図8のステップS19、S20に示す処理と同じである。すなわち、重心位置が(α.β,γ.θ)であらわされたとき、画素(α,γ)から右側に255×(1−0.β)のパルス幅を生成させ、画素(α+1,γ)から見ると左側に255×0.βのパルス幅を生成させるようにする。図17(a)に示す例では、5つの画素((n,m)、(n+1,m)、(n,m+1)、(n+1,m+1)、(n+1,m+2))で閾値に達し1つのセルが構成されると、その重心位置は(0.62,1.31)であるので、画素(0,1)から見て右側に255×(1−0.62)≒96(小数点切捨て)、画素(1,1)から見て255×0.62≒158のパルス幅をもたせればよいことになる。ただし、白ドットは何もドットをうたない処理となるため、CPU21は、この演算した結果からすべて反転させる処理を行うことになる。すなわち、画素(0,1)から見て左側に159(=255−96)、画素(1,1)から見て右側に97(=255−158)のパルス幅を持たせるドットを生成させるようにする。これにより、画素(0,1)から見て右側に96のパルス幅分の何もうたない領域が確保され、画素(1,1)から見て左側に158のパルス幅分何もドットをうたない領域が確保されることになる。この幅情報と右か左の情報は、上述したように、ともに対応する画素の出力バッファ273に格納することになる。
【0095】
次いで、図15に戻り、未処理画素があるか否か判断され(ステップS239)、未処理画素があればステップS11に再び移行して(“YES”の場合)、未処理画素がなくなるまで処理が繰り返される。未処理画素がなくなると(“NO”の場合)、処理が終了(ステップS239)することになる。
【0096】
一方、ステップS234で階調値の合計が閾値を超える場合(“YES”の場合)、処理はステップS241に移行し、CPU21は、閾値を超えた場合の重心演算処理を行う。ここでの重心演算処理は、上述したステップS25での演算処理と同様である(図14参照)。すなわち、CPU21は、ROM25から閾値(ここでは“255”)を読出し、RAM27のワーキングメモリ272に格納された階調値の合計から減算して(ステップS250)、その値をもとに(式4)に示す重心の演算を行う(ステップS251)。図17(b)に示す例では、最終的にステップS230で(n+1,m+2)が選択されると、これまで選択した画素の階調値の合計は、メモリ272に格納された“200”、選択画素の階調値は“190”で最大値“255”から引いた値が“65”、であるから階調値の合計は“265”となる。この値は閾値“255”を超えているので、ステップS234で“YES”が選択され、ステップS21に移行する。そして、(閾値)―(濃度の合計)、すなわち255−200で“55”を得る。この値を選択画素(n+1,m+2)の階調値としてステップS251で重心位置を演算することになる。
【0097】
演算した重心位置(0.62,1.31)は再びRAM27のワーキングメモリ領域272に格納させ(図17(c)のワーキングメモリ272参照)、戻しデータを演算してその値をRAM27の当該画素の入力バッファ271に上書きして格納する(図17(c)の入力バッファ271参照)。生成したセルに組み込まれないようにするためである。これにより入力階調値に忠実な白ドットを形成することができる。
【0098】
その後、CPU21は、図15のステップS242に移行して、演算した重心位置を中心に複数画素にわたる白ドットを生成して、残った階調値を選択画素に戻すことになる。複数画素にわたる白ドットの生成処理は、上述したステップS238と同様である。演算したパルス幅、右か左の情報は出力バッファ273の対応する画素の位置に格納される(図17(c)参照)。
【0099】
その後処理は再びステップS239に移行し、上述の処理が繰り返されることになる。
【0100】
次に、ステップS14(図8参照)、及びステップS233(図15参照)の閾値制御処理について図18のフローチャートを参照して説明する。
【0101】
上述したように、初期画素や未処理画素を含め選択した画素(ステップS13、ステップS230)の入力階調値が低い値や中間階調値が連続すると、セルの大きさは一定とならず、生成される黒ドットや白ドットの密度が一定とならない。かかる場合に、印刷出力のドット分布が一定とならずにある領域ではドットが目立ち、ある領域ではドットが少なく、快適な印刷出力を得ることができない。そこで、生成されるセルを、セルを構成する画素数により閾値を変更して一定の大きさのセルを構成し、ドット密度を一定にさせるようにする。
【0102】
具体的な処理は、図18に示すように閾値制御処理に移行すると(ステップS14、ステップS233)、閾値変更処理を行う(ステップS141)。ここでは毎回選択した未処理画素を含む画素数と、セルの階調値の合計とから、ステップS15、S234で使用する閾値を変更するものとする。変更のための演算式は、所定の関数により表現されており、CPU21がROM25に格納されたこの関数を読出し、ワーキングメモリ272の画素数と階調値の合計とをこの関数に入力させることにより、変更閾値を求めることができる。また、変更閾値を最初からROM25に格納させておきこの閾値変更の処理(ステップS142)でCPU21が読み出して処理を行うようにしてもよい。
【0103】
図19に示す例で具体的に説明する。画像データが入力されて、RAM27の入力バッファ271には図19(a)に示すように格納されるとする。そして、ステップS11で初期画素として(n,m)に位置する画素が選択されて、その重心を演算すると(n,m)となるため、その重心位置と階調値が図19(b)に示すワーキングメモリ272にCPU21によって格納される。さらに、初期画素(n,m)のみしか選択されていないため、この領域272aには“1”がCPU21によって格納される。
【0104】
次いで、ステップS13で未処理画素(n+1,m)が選択されると、ワーキングメモリ272の個数格納領域272aには、初期画素を含めた選択画素の個数の合計である“2”が格納される。そして、ステップS16、S17で未処理画素を含めた重心位置及び階調値の合計が演算されて、ワーキングメモリ272は図19(c)に示すように値が格納されることになる。また、選択した画素の個数“2”が格納領域272aに格納される。
【0105】
そして、ステップS13からステップS18を繰り返し、4つの画素((n,m)、(n+1,m)、(n,m+1)、及び(n+1,m+1))がセルに組み込まれるとする(図20(a)参照)。そして、再びステップS13で未処理画素(n+1,m+2)が選択されると、個数格納領域272aには選択した画素の個数 “5”が格納される(図20(b)参照)。ここで、ステップS141のROM25に記憶された所定の画素数を4個とすると、セルの画素数(5個)が所定の画素数(4個)を超えたため、閾値変更処理(ステップS141)により閾値変更をCPU21が演算することになる。
【0106】
ステップS142でCPU21は、選択画素数“5”と、これまでの階調値の合計値“40”とから、ROM25に記憶された関数を読出し、変更された閾値を演算する。その結果、例えば閾値を“255”から“50”に変更する。そして、これまでの階調値の合計“40”と閾値“50”とを比較して、閾値を超えないので、ステップS16、S17に移行し、最終的に選択された画素(n+1,m+2)を含めた重心位置と階調値の合計を演算する。演算結果は、上述したようにワーキングメモリ272に格納される。ステップS18で階調値の合計“50”が閾値“50”と等しいため、ステップS19以降への移行して、上述した重心位置を中心に画素を跨いでドットの生成を行う(図20(b)の出力バッファ273参照)。そして、一連の処理が終了することになる。なお、白濃度処理S23における閾値制御処理S233も同様の処理を行う。
【0107】
この例では、閾値を低くした場合を説明したが、入力階調値が中間階調値で連続する場合は、閾値が高くなるようにすることも可能である。
【0108】
このように、閾値をセルの個数と階調値で変化させているため、最終的に生成されたセルの大きさは、ほぼ一定であり、ドットが一定の密度で生成されることになる。しかも、重心を利用してドットの生成を行うようにしているので、入力画像の階調値の分布に忠実なドットの分布を生成することができる。
【0109】
上述したすべての処理が終了するとCPU21は、RAM27の出力バッファ273に書き込まれた値を読出し、実際に変調されたパルスを生成して、印刷エンジンに出力する。そして、印刷エンジン30は、このパルス幅をもとに、所定の印刷出力を得ることができるのである。
【0110】
以上説明してきたように本発明によれば、中間階調領域の入力画像に対しても重心位置とドットの中心との誤差が最小となるようにドットを生成するようにしているので、高画質で快適な印刷出力を得ることができる。
【図面の簡単な説明】
【図1】本発明によるシステム全体の構成図である。
【図2】本発明の画像出力装置の構成を示す図である。
【図3】本発明によるセルの構成方法の一例を示す図である。
【図4】本発明によるセルの構成方法の一例を示す図である。
【図5】隣接するセルに生成したドットを示す図である。
【図6】隣接するセルに生成したドットを示す図である。
【図7】固定順に画素を選択したときと、ランダムで画素を選択したときの印刷出力の例を示す図である。
【図8】本発明の実施の形態の動作を示すフローチャートを示す図である。
【図9】本発明の実施の形態の動作を示すフローチャートを示す図である。
【図10】RAM27の構成と格納される値の例を示す図である。
【図11】RAM27の構成と格納される値の例を示す図である。
【図12】RAM27の構成と、出力バッファ272の構成を示す図である。
【図13】重心位置と各画素の位置関係を示す図である。
【図14】閾値を超えた場合の重心演算処理の動作を示すフローチャートを示す図である。
【図15】白濃度演算処理の動作を示すフローチャートである。
【図16】白濃度処理のおけるRAM27の構成と格納される値の例を示す図である。
【図17】白濃度処理のおけるRAM27の構成と格納される値の例を示す図である。
【図18】閾値制御処理の動作を示すフローチャートである。
【図19】白濃度処理のおけるRAM27の構成と格納される値の例を示す図である。
【図20】白濃度処理のおけるRAM27の構成と格納される値の例を示す図である。
【符号の説明】
10 ホストコンピュータ 20 画像処理装置 21 CPU 23 入力I/F 25 ROM 26 ハーフトーン処理部 27 RAM 271 入力バッファ 272 ワーキングメモリ 273 出力バッファ 273a パルス位置データ格納部 273b パルス幅データ格納部 28 パルス幅変調部
30 印刷エンジン
Claims (7)
- 画素ごとに階調画像データ値を有する画像データに従って、前記画像を印刷する印刷装置において、
前記画素ごとの階調画像データ値の総和が閾値以上となるまで、画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で生成した画素群の重心位置を決定する重心位置決定手段と、
前記重心位置決定手段で決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定手段と、
前記出力データ値設定手段で設定された画素の出力データ値を、所定幅のパルスに変換するパルス幅変換手段と、
前記パルス幅変換手段で変換されたパルスに基づいて前記ドットを生成して印刷用紙に前記入力された画像の印刷を行う印刷制御手段と、
を有し、前記画素群生成手段は前記重心位置決定手段で決定した重心位置から最も近い画素を選択することを特徴とする印刷装置。 - 請求項1記載の印刷装置であって、
前記出力データ値は、少なくとも前記パルスの幅情報についての値であることを特徴とする印刷装置。 - 請求項1記載の印刷装置であって、
前記画素群生成手段は、前記画素群重心決定手段で決定した重心位置から最も近い画素が複数存在するときにランダムに画素を選択することを特徴とする印刷装置。 - 画素ごとにN(Nは正の整数)種類以上のレベルを有するN値画像データが入力され、画素ごとにM(M<N、Mは正の整数)種類のレベルを有するM値の画像データを出力する画像処理装置において、
前記画素ごとの階調画像データ値の総和が閾値以上となるまで、画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で生成した画素群の重心位置を決定する重心位置決定手段と、
前記重心位置決定手段で決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定手段と、
前記出力データ値設定手段で設定された画素の出力データ値を、所定幅のパルスに変換するパルス幅変換手段と、
を有し、前記画素群生成手段は前記重心位置決定手段で決定した重心位置から最も近い画素を選択することを特徴とする画像処理装置。 - 画素ごとに階調画像データ値を有する画像データに従って、前記画像を印刷する印刷方法において、
前記画素ごとの階調画像データ値の総和が閾値以上となるまで、画素を選択して画素群を生成する画素群生成ステップと、
前記画素群生成ステップで生成した画素群の重心位置を決定する重心位置決定ステップと、
前記重心位置決定ステップで決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定ステップと、
前記出力データ値設定ステップで設定された画素の出力データ値を、所定幅のパルスに変換するパルス幅変換ステップと、
前記パルス幅変換ステップで変換されたパルスに基づいて前記ドットを生成して印刷用紙に前記入力された画像の印刷を行う印刷制御ステップと、
を有し、前記画素群生成ステップは前記重心位置決定ステップで決定した重心位置から最も近い画素を選択することを特徴とする印刷方法。 - 画素ごとにN(Nは正の整数)種類以上のレベルを有するN値画像データが入力され、画素ごとにM(M<N、Mは正の整数)種類のレベルを有するM値の画像データを出力する画像処理方法において、
前記画素ごとの階調画像データ値の総和が閾値以上となるまで、画素を選択して画素群を生成する画素群生成ステップと、
前記画素群生成ステップで生成した画素群の重心位置を決定する重心位置決定ステップと、
前記重心位置決定ステップで決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定ステップと、
前記出力データ値設定ステップで設定された画素の出力データ値を、所定幅のパルスに変換するパルス幅変換ステップと、
を有し、前記画素群生成ステップは前記重心位置決定ステップで決定した重心位置から最も近い画素を選択することを特徴とする画像処理方法。 - 画素ごとに階調画像データ値を有する画像データが入力され、前記画素ごとの階調画像データ値の総和が閾値以上となるまで、画素を選択して画素群を生成する画素群生成処理と、
前記画素群生成処理で生成した画素群の重心位置を決定する重心位置決定処理と、
前記重心位置決定処理で決定した重心位置を中心に所定ドット分の大きさに含まれる画素に出力データ値を設定する出力データ値設定処理と、
前記出力データ値設定処理で設定された画素の出力データ値を、所定幅のパルスに変換するパルス幅変換処理と、
前記パルス幅変換処理で変換されたパルスに基づいて前記ドットを生成して印刷用紙に前記入力された画像の印刷を行う印刷制御処理と、
を有し、前記画素群生成処理は前記重心位置決定処理で決定した重心位置から最も近い画素を選択することをコンピュータに実行させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003104388A JP3951953B2 (ja) | 2003-04-08 | 2003-04-08 | 印刷装置、画像処理装置、印刷方法、画像処理方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003104388A JP3951953B2 (ja) | 2003-04-08 | 2003-04-08 | 印刷装置、画像処理装置、印刷方法、画像処理方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004312456A JP2004312456A (ja) | 2004-11-04 |
JP3951953B2 true JP3951953B2 (ja) | 2007-08-01 |
Family
ID=33467234
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003104388A Expired - Fee Related JP3951953B2 (ja) | 2003-04-08 | 2003-04-08 | 印刷装置、画像処理装置、印刷方法、画像処理方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3951953B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100618323B1 (ko) * | 2004-11-24 | 2006-08-31 | 삼성전자주식회사 | 다치화 처리장치 및 방법 |
CN103517723B (zh) | 2011-05-13 | 2016-08-17 | 碧奥克里内股份公司 | 用于机动化注射和抽吸的系统和方法 |
-
2003
- 2003-04-08 JP JP2003104388A patent/JP3951953B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004312456A (ja) | 2004-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2015015700A (ja) | 画像処理装置およびその方法 | |
JP7005314B2 (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP4062175B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
KR102307264B1 (ko) | 화상 처리 장치, 화상 처리 방법 및 저장 매체 | |
JP4412248B2 (ja) | 画像処理装置、画像処理方法、及び画像処理プログラム | |
US20090097074A1 (en) | Image processing apparatus and method thereof | |
JP7242272B2 (ja) | ディザマトリクスの生成装置、生成方法、当該ディザマトリクスを用いた画像処理装置、画像処理方法、及びプログラム | |
JP3951953B2 (ja) | 印刷装置、画像処理装置、印刷方法、画像処理方法及びプログラム | |
JP4479663B2 (ja) | 固定セルによるハーフトーン処理を行う画像処理装置,画像処理方法,及び画像処理プログラム | |
JPWO2005109851A1 (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2004320374A (ja) | 画像処理装置、画像処理方法、印刷装置、印刷方法及びプログラム | |
JP4748079B2 (ja) | 画像処理装置及び画像処理方法 | |
JPH07250240A (ja) | 画像形成装置 | |
JP4337670B2 (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2002103683A (ja) | 画像形成装置および画像形成方法ならびに記憶媒体 | |
JP3928576B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP2005318402A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP3896982B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP2005341142A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP4062176B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP2006025217A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP2006115369A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JPH07250246A (ja) | 画像形成装置 | |
JP2005311414A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP2005252807A (ja) | 画像処理方法、印刷システム及びプリンタ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041210 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20061226 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070116 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070403 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070416 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110511 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120511 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130511 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140511 Year of fee payment: 7 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |