JP2005039413A - 画像処理装置、画像処理方法、及びプログラム - Google Patents
画像処理装置、画像処理方法、及びプログラム Download PDFInfo
- Publication number
- JP2005039413A JP2005039413A JP2003198451A JP2003198451A JP2005039413A JP 2005039413 A JP2005039413 A JP 2005039413A JP 2003198451 A JP2003198451 A JP 2003198451A JP 2003198451 A JP2003198451 A JP 2003198451A JP 2005039413 A JP2005039413 A JP 2005039413A
- Authority
- JP
- Japan
- Prior art keywords
- data
- pixel
- value
- level value
- component
- 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
Landscapes
- Color, Gradation (AREA)
- Image Processing (AREA)
- Facsimile Image Signal Circuits (AREA)
- Color Image Communication Systems (AREA)
Abstract
【課題】シアンとマゼンダのドットが印刷用紙上である部分だけ高密度に発生することによる粒状的なドットの生成を抑えるとともに、シアンとマゼンダとのドット間距離を一定に保つことで、視覚的に快適な印刷出力を得る。
【解決手段】シアンとマゼンダそれぞれの入力データを画素ごとに比較し、シアン淡データ、マゼンダ淡データ、シアン濃+マゼンダ淡データ、シアン淡+マゼンダ濃データの4つのデータを生成する。シアン淡データをディザ処理又は誤差拡散処理し、シアン淡ドットを得る。シアン淡+マゼンダ濃データから、シアン淡ドット周囲の階調値を減算する。そして、減算後のマゼンダ濃データをディザ又は誤差拡散処理を行う。同様にマゼンダ淡データをディザ又は誤差拡散処理を行い、シアン濃+マゼンダ淡データから、マゼンダ淡ドット周囲の階調値を減算する。減算後のシアン濃データにディザ又は誤差拡散処理を行う。
【選択図】図1
【解決手段】シアンとマゼンダそれぞれの入力データを画素ごとに比較し、シアン淡データ、マゼンダ淡データ、シアン濃+マゼンダ淡データ、シアン淡+マゼンダ濃データの4つのデータを生成する。シアン淡データをディザ処理又は誤差拡散処理し、シアン淡ドットを得る。シアン淡+マゼンダ濃データから、シアン淡ドット周囲の階調値を減算する。そして、減算後のマゼンダ濃データをディザ又は誤差拡散処理を行う。同様にマゼンダ淡データをディザ又は誤差拡散処理を行い、シアン濃+マゼンダ淡データから、マゼンダ淡ドット周囲の階調値を減算する。減算後のシアン濃データにディザ又は誤差拡散処理を行う。
【選択図】図1
Description
【0001】
【発明の属する技術分野】
本発明は、カラープリンタなどの画像出力装置における階調画像データのハーフトーン処理に関する。詳しくは、入力階調値を加算し、ドット生成時にドット周辺から加算した階調値を減算して処理を行うハーフトーン処理に関する。
【0002】
【従来の技術】
従来から、プリンタなどの画像出力装置は、各画素ごとに多値の階調値を有する階調データに対して、ドットの有無を表す2値の値に変換処理して印刷用紙に印刷を行うようになされている。一般には、多値の階調値を2値の値に変換する処理のことをハーフトーン処理と称されている。
【0003】
かかるハーフトーン処理の方法としては、所定の閾値が格納された閾値マトリックスを利用して、入力階調値が閾値よりも大きいか小さいかにより2値化するディザ法や、同様に閾値を設定しその閾値よりも大きいか小さいかにより2値化するとともにその誤差分をまわりの画素の階調値に加算して処理を進める誤差拡散法などがある。
【0004】
さらに、入力画像の各画素の階調値の合計が所定の閾値になるまでセルを構成する画素を選択し、セルの中心位置にドットを生成させるようにしたハーフトーン処理も知られている(例えば、特許文献1)。
【0005】
【特許文献1】
特開平11−27528号公報
【0006】
【発明が解決しようとする課題】
しかしながら色変換後のハーフトーン処理において、シアン(C)とマゼンダ(M)とは、入力階調値がともに近接した値を有している場合が多く、シアンとマゼンダそれぞれにハーフトーン処理を行うと、印刷用紙上でシアンのドットとマゼンダのドットとが重なったりするなど粒状的なドットを発生させていた。かかるドットは人間の視覚に入り易く、視覚的に不快な印刷出力となっていた。
【0007】
また、上述した特開平11−27528においても、セルを構成する画素の選択を所定のテーブルを用いて行っているが、テーブル内で左側に存在する画素は既に処理済みの場合が多く、結果的に生成されるセルが歪んだ形となってしまう。かかる場合に、セルの中心にドットを生成させるとある部分では隣のドットを重なって形成されてしまうことになる。シアンとマゼンダに対して、それぞれかかる処理を行うと、ドットのばらつきが少ないため、同様にある部分では重なったり近寄って発生するなど視覚的に不快な印刷出力となっていた。
【0008】
そこで、本発明の目的は、シアンとマゼンダのドットが印刷用紙上である部分だけ高密度に発生することによる粒状的なドットの生成を抑えるとともに、シアンとマゼンダとのドット間距離を一定に保つことで、視覚的に快適な印刷出力を得ることを目的とするものである。
【0009】
【課題を解決するための手段】
上記の目的を達成するために、本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、第1のデータ又は第2のデータのうちレベル値の低い第1のデータ又は第2のデータの成分から先にM種類のレベル値を有するデータに変換する第1の変換手段と、レベル値の低い第1のデータ又は第2のデータの成分のレベル値をそれぞれレベル値の高い第2のデータ又は第1のデータの成分に加算する加算手段と、加算手段で加算した第1のデータ又は第2のデータの成分に対しM種類のレベル値に変換した画素に対応する画素において当該画素のレベル値から所定値を減算する減算手段と、減算手段で減算した第1のデータ又は第2のデータの成分に対して、M種類のレベル値を有するデータに変換する第2の変換手段と、を備えることを特徴としている。これにより、M種類のレベル値のうち、レベル値が0でない第1のデータ又は第2のデータの画素周辺に、それぞれ第2のデータ又は第1のデータのM種類の0でないレベル値が与えられた画素が存在する確率が少なくなり、例えば、このレベル値にドットを付与するよう印刷しても第1のデータと第2のデータのドットが重ならず、しかも2つのデータにおけるドット間距離が保たれ視覚的に快適な印刷出力を得ることが可能となる。
【0010】
さらに、本発明は、上記画像処理装置において上記第1の変換手段と上記第2の変換手段は、所定の閾値が格納された閾値マトリックスを用いて、レベル値の低い第1のデータ又は前記第2のデータの成分、及び減算手段で減算した第1のデータ又は第2のデータの成分に対して、それぞれ各レベル値と閾値とを比較してM種類のレベル値を有するデータに変換する、ことを特徴としている。これにより、例えば、閾値マトリックスを利用してディザ処理を行っても、同様に視覚的に快適な印刷出力を得ることができる。
【0011】
さらに、本発明は、上記画像処理装置において上記第1の変換手段は、第1のデータに対して第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、第2のデータに対して第1のデータのレベル値と比較したときのレベル値が低い成分と高い成分に分離し、レベル値の低い成分の第1のデータ又は第2のデータに対してM種類のレベル値を有するデータに変換する、こと特徴としている。これにより、例えば、レベル値の低い成分から先にディザ処理を行うことで、M種類のレベル値を先に与えることができ、後でレベル値の高い成分の減算処理を行うことで、ドットが重ならずしかも入力レベル値に忠実な印刷出力を得ることができる。
【0012】
さらに、本発明は、上記画像処理装置において上記加算手段は、第1の変換手段で変換を行わなかった第1のデータ又は第2のデータのうち、分離したレベル値の高い成分を有する第1のデータ又は第2のデータに対して、それぞれレベル値の低い前記第2のデータ又は前記第1のデータの成分を加算する、ことを特徴としている。これにより、例えば、M種類のレベル値が与えられた第1のデータ又は第2のデータとは異なる方の第2のデータ又は第1のデータに対して、後で減算処理を行うことで、同様にドットが重ならず、ドット間距離が保たれた快適な印刷出力を得ることができる。
【0013】
さらに、本発明は、上記画像処理装置において第1の変換手段と第2の変換手段は、レベル値の低い第1のデータ又は第2のデータの成分、及び減算手段で減算した第1のデータ又は第2のデータの成分に対して、それぞれ各レベル値と所定の閾値とを比較してM種類のレベル値を有するデータに変換するとともに、M種類のレベル値に変換したときの誤差分を第1のデータ又は前記第2のデータのレベル値に加算して前記閾値と比較する、ことを特徴としている。これにより、例えば、誤差拡散法によるハーフトーン処理を行っても同様に、ドットが重ならず、ドット間距離が一定に保たれた快適な印刷出力を得ることができる。
【0014】
さらに、本発明は、上記画像処理装置において第1の変換手段と第2の変換手段は、拡散マトリックスに格納された誤差分の値を拡散させる比率に基づいて各画素に前記誤差分を拡散させる、ことを特徴としている。これにより、例えば、拡散マトリックスの比率に忠実に誤算分をまわりの画素に拡散させることができる。
【0015】
さらに、本発明は、上記画像処理装置において第1の変換手段と第2の変換手段は、それぞれ、レベル値の低い第1のデータの画素若しくは第1のデータの画素を選択し、又は減算手段で減算した第1のデータの画素若しくは第1のデータの画素を選択し、選択した画素ごとのレベル値の総和が閾値となるまで未処理画素を選択して画素群を生成する生成手段と、生成した画素群の所定画素に対してM種類のレベル値を付与する付与手段と、をさらに備えることを特徴としている。これにより、例えば、ドット間距離が一定に保たれ快適な印刷出力を得る。
【0016】
さらに、本発明は、上記画像処理装置において第1の変換手段と第2の変換手段は、さらに、レベル値の低い第1のデータ又は第2のデータの画素を選択し、又は減算手段で減算した第1のデータ又は第2のデータの画素を選択し、選択した画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で生成した画素群の重心位置を決定する重心位置決定手段と、画素群重心決定手段で決定した重心に位置する画素に前記M種類のレベル値を付与する付与手段とを備え、画素群生成手段は、画素群重心決定手段で決定した重心から最も近い画素を画素ごとの階調画像データ値の総和が閾値以上となるまで選択し続けることにより画素群を生成する、ことを特徴としている。これにより、例えば、複数の画素から構成されるセルの重心にドットを生成させる方法によるハーフトーン処理を行っても、同様にドットが重ならずドット間距離が一定に保たれた快適な印刷出力を得ることが可能となる。
【0017】
さらに、本発明は、上記画像処理装置において画素群重心位置決定手段は、重心位置決定手段で決定した重心位置から最も近い画素が複数あるときは、ランダムに選択することを特徴としている。これにより、複数の画素から構成されるセルが円状に成長し、ドット間距離を一定に保つことができる。
【0018】
さらに、本発明は、上記画像処理装置において第1のデータ又は第2のデータは、シアンデータ又はマゼンダデータである、ことを特徴としている。これにより、例えば、シアンとマゼンダとでドットが重ならず、しかもシアンとマゼンダとでドット間距離が一定に保たれた快適な印刷出力を得ることができる。
【0019】
また、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、第1のデータを第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、第2のデータを第1のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離し、第1のデータのレベル値の低い成分と第2のデータのレベル値の高い成分とを加算して第3のデータを生成するとともに、第1のデータのレベル値の高い成分と第2のデータのレベル値の低い成分とを加算して第4のデータを生成する加算手段と、第1のデータのレベル値の低い成分又は第2のデータのレベル値の低い成分をM種類のレベル値を有するデータに変換する第1の変換手段と、M種類のレベル値に変換された画素に対応する、第3のデータ又は第4のデータの画素に対し当該画素のレベル値から所定値を減算する減算手段と、減算した第3のデータ又は第4のデータをM種類のレベル値を有するデータに変換する第2の変換手段と、を備えることを特徴としている。これにより、ディザ処理や誤差拡散処理によるハーフトーン処理によっても、M種類のレベル値を与えられた第1のデータ又は第2のデータの画素周辺に、それぞれ第2のデータ又は第1のデータのM種類のレベル値が与えられた画素が存在する確率が少なくなり、例えば、このレベル値にドットを付与するよう印刷しても第1のデータと第2のデータのドットが重ならず、しかも2つのデータにおけるドット間距離が保たれ視覚的に快適な印刷出力を得ることが可能となる。
【0020】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、第1のデータと第2のデータとでレベル値が低い方の初期画素を選択し、選択した初期画素の存在する第1のデータ又は第2のデータで画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素にM種類のうち所定のレベル値を付与する第1の付与手段と、画素群の生成で選択した画素のレベル値を、レベル値の高い第2のデータ又は第1のデータの成分に加算する加算手段と、所定のレベル値を付与された画素に対応する、加算手段で加算した第2のデータ又は第1のデータの画素に対してそのレベル値を減算する減算手段と、減算した第2のデータ又は第1のデータに対して、画素を選択し選択した画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第2の付与手段と、を備えることを特徴としている。これにより、重心を利用したハーフトーン処理によっても、M種類のレベル値を与えられた第1のデータ又は第2のデータの画素周辺に、それぞれ第2のデータ又は第1のデータのM種類のレベル値が与えられた画素が存在する確率が少なくなり、例えば、このレベル値にドットを付与するよう印刷しても第1のデータと第2のデータのドットが重ならず、しかも2つのデータにおけるドット間距離が保たれ視覚的に快適な印刷出力を得ることが可能となる。
【0021】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、第1のデータ又は第2のデータのうち、レベル値の低い第1のデータ又は第2のデータの成分から先にM種類のレベル値を有するデータに変換する第1の変換工程と、レベル値の低い第1のデータ又は第2のデータの成分のレベル値を、それぞれレベル値の高い第2のデータ又は第1のデータの成分に加算する加算工程と、加算手段で加算した第1のデータ又は第2のデータの成分に対し、M種類のレベル値に変換した画素に対応する画素において当該画素のレベル値から所定値を減算する減算工程と、減算手段で減算した第1のデータ又は第2のデータの成分に対して、M種類のレベル値を有するデータに変換する第2の変換工程と、を備えることを特徴としている。
【0022】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、第1のデータを第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、第2のデータを第1のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離し、第1のデータのレベル値の低い成分と第2のデータのレベル値の高い成分とを加算して第3のデータを生成するとともに、第1のデータのレベル値の高い成分と第2のデータのレベル値の低い成分とを加算して第4のデータを生成する加算工程と、第1のデータのレベル値の低い成分又は第2のデータのレベル値の低い成分をM種類のレベル値を有するデータに変換する第1の変換工程と、M種類のレベル値に変換された画素に対応する、第3のデータ又は第4のデータの画素に対し当該画素のレベル値から所定値を減算する減算工程と、減算した第3のデータ又は第4のデータをM種類のレベル値を有するデータに変換する第2の変換工程と、を備えることを特徴としている。
【0023】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、第1のデータと第2のデータとでレベル値が低い方の初期画素を選択し、選択した初期画素の存在する第1のデータ又は第2のデータで画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素にM種類のうち所定のレベル値を付与する第1の付与工程と、画素群の生成で選択した画素のレベル値を、レベル値の高い第2のデータ又は第1のデータの成分に加算する加算工程と、所定のレベル値を付与された画素に対応する、加算手段で加算した第2のデータ又は第1のデータの画素に対してそのレベル値を減算する減算工程と、減算した第2のデータ又は第1のデータに対して、画素を選択し選択した画素ごとのレベル値の総和が前記閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第2の付与工程と、を備えることを特徴としている。
【0024】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、第1のデータ又は第2のデータのうち、レベル値の低い第1のデータ又は第2のデータの成分から先にM種類のレベル値を有するデータに変換する第1の変換処理と、レベル値の低い第1のデータ又は第2のデータの成分のレベル値を、それぞれレベル値の高い第2のデータ又は第1のデータの成分に加算する加算処理と、加算手段で加算した第1のデータ又は第2のデータの成分に対し、M種類のレベル値に変換した画素に対応する画素において当該画素のレベル値から所定値を減算する減算処理と、減算手段で減算した第1のデータ又は第2のデータの成分に対して、M種類のレベル値を有するデータに変換する第2の変換処理と、をコンピュータに実行させるためのプログラムであることを特徴としている。
【0025】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、第1のデータを第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、第2のデータを第1のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離し、第1のデータのレベル値の低い成分と第2のデータのレベル値の高い成分とを加算して第3のデータを生成するとともに、第1のデータのレベル値の高い成分と第2のデータのレベル値の低い成分とを加算して第4のデータを生成する加算処理と、第1のデータのレベル値の低い成分又は第2のデータのレベル値の低い成分をM種類のレベル値を有するデータに変換する第1の変換処理と、M種類のレベル値に変換された画素に対応する、第3のデータ又は第4のデータの画素に対し当該画素のレベル値から所定値を減算する減算処理と、減算した第3のデータ又は第4のデータをM種類のレベル値を有するデータに変換する第2の変換処理と、をコンピュータに実行させるためのプログラムであることを特徴としている。
【0026】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるプログラムにおいて、第1のデータと第2のデータとでレベル値が低い方の初期画素を選択し、選択した初期画素の存在する第1のデータ又は第2のデータで画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素にM種類のうち所定のレベル値を付与する第1の付与処理と、画素群の生成で選択した画素のレベル値を、レベル値の高い第2のデータ又は第1のデータの成分に加算する加算処理と、所定のレベル値を付与された画素に対応する、加算手段で加算した第2のデータ又は第1のデータの画素に対してそのレベル値を減算する減算処理と、減算した第2のデータ又は第1のデータに対して、画素を選択し選択した画素ごとのレベル値の総和が前記閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第2の付与処理と、をコンピュータに実行させるためのプログラムであることを特徴としている。
【0027】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。図1は、本発明が適用されるシステム全体の構成を示す図である。全体としてホストコンピュータ10と、画像出力装置20とから構成される。
【0028】
ホストコンピュータ10は、アプリケーション部11とラスタライズ12とから構成される。アプリケーション部11では、文字データ、図形データ、ビットマップデータ等の印刷対象のデータが生成される。例えば、ホストコンピュータ10でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどが生成される。生成されたこれらのデータは、ラスタライズ部12へ出力される。
【0029】
ラスタライズ12では、アプリケーション部11から出力された印刷対象のデータを画素ごと(又はドットごと)に8ビットの階調データに変換される。本実施例では、R(レッド)、G(グリーン)、B(ブルー)の色毎で、各画素ごと8ビットの階調データが出力される。したがって、各画素ごと0から255までの値(レベル値)を有することになる。ラスタライズ12における階調データの生成は、実際にはホストコンピュータ10に実装されたドライバによって処理が行われる。ラスタライズ12から出力される階調データは、画像出力装置20に出力される。
【0030】
画像出力装置20は、全体として画像処理部21と印刷エンジン22とから構成される。画像処理部21では、ホストコンピュータ10から出力された階調データに対して色変換、ハーフトーン処理等を行い、処理後のデータが印刷エンジン22に出力され、この印刷エンジン22にて実際に印刷用紙等の記録媒体への印刷が行われる。
【0031】
画像処理部21は、色変換部211と、ハーフトーン処理部212と、パルス幅変換部213とから構成される。色変換部211は、ホストコンピュータ10から出力されるRGB階調画像データを受け取り、RGBからCMYKへの色変換を行う。ここで、Cはシアン、Mはマゼンダ、Yはイエロー、Kはブラックを示す。ここでは、CMYKの階調データは、各色8ビットづつの階調データであり、最大で256階調を有する。
【0032】
ハーフトーン処理部212は、色変換部211から出力されるCMYKの階調データに対して、2値(或いは4値)などの多値の値(レベル値)に変換し、量子化データを出力する。ハーフトーン処理としては、ディザ処理、誤差拡散処理、複数の画素からなるセルを構成してその重心にドットを生成させる重心利用した処理(Circular Cell法、以下CC法)がある。各処理の具体的な内容は後述する。
【0033】
パルス幅変調部213は、ハーフトーン処理部212から出力された量子化データが入力され、この量子化データに対してドットごとにレーザ駆動パルス有り又は無しの駆動データを生成する。そして、駆動データが印刷エンジン22に出力される。
【0034】
印刷エンジン22は、レーザドライバ221とレーザーダイオード(LD)222とから構成される。レーザドライバ221は、入力された駆動データから、駆動パルスあり又はなし等を示す制御データを生成し、レーザーダイオード222に出力する。レーザーダイオード222は、レーザドライバ221から出力された制御データに基づいて駆動され、さらに図示しない感光ドラムや転写ベルトが駆動されて、実際に印刷用紙等の記録媒体にホストコンピュータ10からのデータが印刷されることになる。
【0035】
次に図2を参照して、画像出力装置20の具体的構成について説明する。ここで、図1の画像出力装置20のうち、色変換処理部211、ハーフトーン処理部212及びパルス幅変調部213は、図2におけるCPU24、ROM25、及びRAM26に対応する。
【0036】
画像出力装置20は、全体として、入力インターフェース(I/F)23、CPU24、ROM25、RAM26、印刷エンジン22とから構成され、バスを介して互いに接続されている。入力I/F23は、ホストコンピュータ10と画像出力装置20とのインターフェースの役割を果たす。入力I/F23には、所定の伝送方式により伝送された、ホストコンピュータ20からのRGB階調データが入力され、画像出力装置20で処理できるデータに変換される。RGB階調データは、一旦RAM26に格納される。
【0037】
CPU24は、バスを介して入力I/F23、ROM25、RAM26、印刷エンジン22と接続され、ROM25に格納されたプログラムを読み出して、色変換、ハーフトーン処理等の各種処理を行う。その詳細は、後述する。RAM26は、CPU24で実行される各処理のワーキングメモリとして役割を果たし、処理後の各種データが格納される。そして、印刷エンジン22のレーザドライバ221を駆動させるための駆動データも格納される。RAM26の具体的構成等も後述する。
【0038】
印刷エンジン22は、図1の印刷エンジンと同様の構成で、RAM26に格納された駆動データがCPU24の制御により入力されて、上述した印刷が行われることになる。
【0039】
次に、以上のように構成された画像出力装置20における処理の動作について説明する。ここで処理の動作は、CMYKの階調データに変換された色変換処理後の階調データに対するハーフトーン処理について以下説明する。よって、以下に説明する動作において、入力I/F23にRGB階調データが入力され、CPU24の制御により、CMYK階調データがRAM26に格納されたものとして説明する。また、ハーフトーン処理として上述したように、ディザ法、誤差拡散法、及びCC法の3つの方法を用いた処理についてそれぞれ説明することにする。
[ディザ法を用いたハーフトーン処理]
まず、ディザ法を用いたハーフトーン処理について説明する。一般にディザ法とは、濃淡画像の階調を再現する2値化の手法の1つである。各画素の入力階調値に対して、閾値マトリックスと呼ばれる変換テーブルを用いて、テーブル内に格納された閾値より、その入力階調値の方が大きいとドット生成を示す再生データを生成し、そうでないとドットなしを示す再生データ(量子化データ)を生成する。そして、この再生データをもとに印刷用紙等に印刷を行うようにするものである。
【0040】
本実施例においても、同様に閾値マトリックスを用いてディザ処理を行うものである。ただし、最初にシアン入力に対して、入力階調値の小さい(ドット密度が低くなる)シアンデータを生成し、そのデータに対してディザ処理を行う。そして、入力階調値の小さいシアンデータと入力階調値の高い(ドット密度が高くなる)マゼンダデータの和から、このディザ処理後のシアンデータを減算して、入力階調値の高いマゼンダデータを生成する。
【0041】
このようにドット密度が低くなるであろう入力階調値の低い方から先にディザ処理を行い、その後減算処理を行って、色の異なる方の入力階調値の高いデータを得る。そして、このデータにディザ処理を行い、再生データを得るのである。
【0042】
このように階調値の小さい方を優先的に処理し、その後減算処理をしているのは、入力階調値の小さいシアンデータに対して生成されるドット周辺に入力階調値の高いマゼンダのドットを生成させないようにするためである。これにより、印刷出力おいて、ある部分だけシアンのドットとマゼンダのドットとが重なり合うことによる粒状的なドット生成を抑えることができ、さらにシアンドットとマゼンダドットによるモアレ縞の発生を抑えることができ、快適な印刷出力を得ることが可能となる。さらに、減算処理を行っているため、シアンとマゼンダのドット間距離が一定に保たれるのである。
【0043】
また、シアンとマゼンダのドットの重なりを制御すると、制御しない場合と比較して、同一のインク又はトナー量でも、彩度の強い鮮やかな色が得ることができる。これにより、画像出力装置20の色再現範囲を拡大することができる。そして、減算後に得られる入力階調値の高いマゼンダデータにディザ処理を行う。
【0044】
また、同様に、入力階調値の小さい(ドット密度の低い)マゼンダデータにディザ処理を行い、入力階調値の小さいマゼンダデータと階調値の高いシアンデータとの和から、ディザ処理後のそのマゼンダデータを減算処理する。この場合も、入力階調値の小さいマゼンダデータに対して生成されるドット周辺に、入力階調値の高いシアンデータのドットを生成させないようにするためである。その後、減算後に得られる階調値の大きいシアンデータにディザ処理を行う。
【0045】
最終的に得られた、4つのディザ処理後のデータ、すなわち、階調値の大小2つのシアンの再生データと、大小2つのマゼンダの再生データに対して、それぞれ和を取って、シアンの再生データとマゼンダの再生データとを生成することになる。この再生データに基づいて、パルス幅変調213を行い駆動データを得て、印刷エンジン22にてシアンとマゼンダのドットが印刷用紙に印刷されることになる。
【0046】
図3には、印刷用紙上のドットを模式的に表した図を示す。図3(a)は、シアン、マゼンダ各入力に対しそのままディザ処理を行った場合の例を示し、図3(b)は減算処理を行ってディザ処理を行った場合の例を示す。丸と十字はシアンドットとマゼンダドットを示すもので、四角は両者が重なっているドットを示すものである。図3(a)に示すように減算処理をしないと、シアンとマゼンダが重なってドットが打たれる場合もあり、ドットの密度がバラつき視覚に入り易く、これが粒状的なドットを生成させる原因となり、快適な印刷出力を得ることができない。一方、減算処理後のドットはほぼ均等に生成さるためドット間距離が一定に保たれ、ドットが重なり合う部分がなく視覚的に快適な印刷出力を得ることができるのである。
【0047】
なお、本実施例においては、シアンとマゼンダについての処理を説明し、イエロー(Y)とブラック(K)は、高低2つのデータに分離して減算処理等を行わずに、それぞれに示すハーフトーン処理(ディザ法、誤差拡散法、CC法による処理)を行って、再生データを得るものとする。
【0048】
以上述べた内容についての具体的な処理について以下説明することにする。図4及び図5は、その動作を示すフローチャートである。図6乃至図14は、RAM26に格納された各データの内容を示す。本処理が開始される前に、各CMYKの階調データがすでにRAM26に格納されているものとする。その例を図6(a)に示す。
【0049】
このRAM26は、複数の領域を有し、図6(a)に示す例は、シアンの入力階調データと、マゼンダの入力階調データが各領域の各座標位置に格納されている例を示す。それぞれ、シアン入力データ格納領域261aと、マゼンダ入力データ格納領域261bとする。各領域261a、261bは、それぞれm行n列の2次元構造を有し、各座標位置はホストコンピュータ10で生成された画像の画素位置に対応するものである。例えば、シアンの入力階調データが入力された領域の(n、m)の位置に格納されたデータは、全体画像における(n、m)の位置に位置する画素のシアンの階調値に対応するものである。マゼンダの場合も全く同様である。
【0050】
ここでは、説明を簡単にするため各領域とも6行6列で表現されているが、画像1フレーム分の各階調値を格納できる構成であってもよいし、これよりも少ない構成であってもよい。
【0051】
図4に戻り、CPU24は、本処理を実行するためのプログラムをROM25から読出すことによって、処理が開始されることになる(ステップS10)。次いで、CPU24は、シアン、マゼンダの各入力階調データに対して、シアン淡(Cyan淡)、シアン濃(Cyan濃)、マゼンダ淡(Magenta淡)、マゼンダ濃(Magenta濃)の4つのデータに分離する(ステップS11)。ここでシアン淡とは、シアンとマゼンダの各入力階調値を画素毎に比較して、マゼンダよりも淡い(入力階調値の低い)シアンのデータである。
【0052】
具体的には、図6(a)のシアン入力データ格納領域261aの各位置に格納された階調値と、マゼンダ入力データ格納領域261bの対応する位置に格納された階調値とを比較し、シアンの方がマゼンダより階調値が大きいと“0”、少ないとシアンの入力階調値を、CPU24によってシアン淡データ格納領域262aに格納されることになる。
【0053】
例えば、シアン入力の(0,0)とマゼンダ入力の(0,0)との階調値を比較すると、シアンの方がマゼンダよりも階調値が大きいので“0”、シアン入力の(3,0)とマゼンダ入力の(3,0)とでは、シアンの階調値“40”がマゼンダの階調値“60”より少ないので、シアンの階調値である“40”、となる。
【0054】
このように、演算されたシアン淡データは、同じRAM26内の所定領域内にあるシアン淡データ格納領域262aに、CPU24によって格納されることになる(図6(b)左図参照)。この領域262aも、シアン入力データ領域261aと同様に2次元構造を有し、各座標位置が全体画像の画素位置に対応するものである。
【0055】
また、マゼンダ淡データとは、シアンとマゼンダの各入力階調値を画素毎に比較して、シアンよりも淡いマゼンダのデータである。例えば、図6(a)で(0,0)に位置する画素の入力階調値は、シアンは“60”、マゼンダは“40”で、マゼンダの方がシアンより階調値が少ないので“40”となり、(3,0)に位置する画素の入力階調値は、シアンは“40”、マゼンダは“60”でマゼンダの方が大きいので“0”となる。この分離したシアン淡データも、同様にRAM26内のマゼンダ淡データ格納領域262bの対応する各座標位置に格納される(図6(b)左から2番目参照)。この領域262bも領域262aと同様に、各座標位置が全体画像の各画素位置に対応するものである。
【0056】
さらに、シアン濃データは、シアンとマゼンダの入力階調値を比較して、シアンの方が、階調値が大きいとその値、少ないと“0”を、シアン濃データ格納領域262cの対応する位置に格納したものである。マゼンダ濃データは、マゼンダの方が、階調値が大きいとその値、少ないと“0”を、マゼンダ濃データ格納領域262dの対応する画素位置に格納したデータである(図6(b)参照)。なお、このように生成したシアン濃データとマゼンダ濃データとは、その後本実施例ではディザ処理等は行わない(ただし、減算処理後に生成したシアン濃データとマゼンダ濃データに対してディザ処理は行う)。そのため、この2のデータをRAM26に格納せず、演算のみCPU24で行い、次のステップ(S12)でのデータ生成でRAM26に格納させるようにしてもよい。
【0057】
図4に戻り、これら4つのデータに分離した後CPU24は、シアン淡とマゼンダ濃の2つのデータの和(C淡+M濃)と、シアン濃とマゼンダ淡の2つのデータの和(C濃+M淡)の各データを生成する(ステップS12)。図6(b)に示すように4つのデータを生成して、シアン淡とマゼンダ濃の2つのデータの各画素位置に対応する階調値の和をとってシアン淡+マゼンダ濃(Cyan淡+Magennda濃)のデータを生成する(図6(c)左図参照)。同様にシアン濃とマゼンダ淡の各画素位置に対応する階調値の和からシアン濃+マゼンダ淡(Cyan濃+Magenda淡)のデータを生成する(図6(c)右図参照)。これら生成したデータは、図6(a)の場合と同様にCPU24によってRAM26の所定領域263a、263bに格納される。この領域263a、263bも同様に各座標位置が全体画像の各画素位置に対応するものである。
【0058】
図4に戻り、次いでCPU24は、ステップS11で生成したシアン淡データに対してディザ処理を行う(ステップS13)。本実施例においては、シアン淡データ格納領域262aに格納された階調値に対して、閾値マトリックスを使用してディザ処理を行う。
【0059】
このマトリックスの例を図7に示す。図7に示すように、このマトリックスは3行3列で構成される。そして、CPU24は、マトリックスの閾値と階調値とを各々比較し、階調値が閾値よりも大きいとドット生成を示す再生データ(量子化データ、ここでは、“255”)をRAM26のシアン淡出力が格納されるシアン淡出力データ格納領域264に格納する。シアン淡出力データ格納領域264も同様に各座標位置が全体画像の各画素位置に対応するものである。
【0060】
図8乃至図10にその具体例を示す。なお、このマトリックスは、例えばROM25に格納され、CPU24がROM25から閾値と、シアン淡データ格納領域262aに格納された階調値とを読み出して各々比較することで処理が行われる。
【0061】
まず、CPU24は、ROM25に格納された閾値マトリックスの(0,0)の位置に格納された閾値“225”と、RAM26のシアン淡データ格納領域262aに格納された(0,0)に位置する階調値“0”とを読み出す。そして、CPU24は両者を比較し、マトリックスの閾値の方が、値が大きいので、シアン淡出力データ格納領域264の対応する座標位置(0,0)にドットを生成しないことを示す“0”を格納する(図8(a)参照)。
【0062】
次に、CPU24は、シアン淡データ格納領域262aの(1,0)に格納された階調値“0”とROM25に格納された閾値マトリックスの(1,0)に位置する閾値“75”とを比較する。この場合も閾値の方が大きいので、CPU24は、シアン淡出力データ格納領域264の(1,0)の位置に“0”を格納することになる(図8(b)参照)。
【0063】
次いで、CPU24は、両者とも(2,0)に位置する値を読み出して、閾値“300”の方がシアン淡データ“0”よりも大きいので、シアン淡出力データ格納領域264に“0”を格納することになる(図9(a)参照)。
【0064】
次いで、CPU24は、シアン淡データ格納領域262aの(3,0)に位置する階調値“40”と、マトリックスの(0,0)に位置する閾値“0”とを比較する。閾値以下なので、シアン淡出力データ格納領域264の(3,0)に“0”を格納する(図9(b))。同様に、シアン淡データ格納領域262aの(4,0)と、マトリックスの(1,0)とに格納された値を比較して、閾値の方が大きいのでシアン淡出力データ格納領域264の(4,0)に“0”を格納されることになる(図9(c))。さらに、シアン淡格納領域262aの(5,0)とマトリックスの(2,0)に格納された値とを比較し、閾値の方が大きいので、シアン淡出力データ格納領域264の(5,0)の位置の双方に“0”が格納される(図10(a))。
【0065】
シアン淡入力データ格納領域262aの1行目の処理が終わると、CPU24は、次いで、2行目の処理を行う。この場合も1行目と同様に、シアン淡入力データ格納領域262aの(0,1)、(1,1)、(2,1)、(3,1)、(4,1)、(5,1)に格納された値と、マトリックスのそれぞれ(0,1)、(1,1)、(2,1)、(0,1)、(1,1)、(2,1)の閾値を比較する。ここで、シアン淡入力データ格納領域262aの(4,1)に格納された値は“40”で、マトリックスの閾値は“25”なので、階調値の方が閾値よりも大きいので、ドット生成を示す“255”を、CPU24によってシアン淡出力データ格納領域264の(4,1)の位置に格納されることになる。それ以外は、“0”となる(図10(b))。
【0066】
同様に、シアン淡入力データ格納領域262aの3行目、4行目と処理を進め、格納されたシアン淡データに対する処理が終了すると、シアン淡データである多値の階調データが2値のデータ(ここでは、0と255)に変換されることになる。但し、本実施例では、シアンそのものの入力階調値に対してではなく、マゼンダと比較した場合のシアンの淡いデータ(階調値が低いデータ)に対して行うことになる。後で、色が異なるマゼンダの濃いデータ(階調値が高いデータ)に減算処理を行って、シアンとマゼンダとでドット間距離を一定に保ち、ドットの重なりを防ぐためである。最初に濃いデータの方から行い、淡いデータに対して減算処理を行うと、淡いデータは生成されるドットの密度が低いため、本来ドットが打たれる位置にない位置に対しても減算処理を行う必要が生じ、入力階調値に忠実でないドットが生成される可能性があるからである。
【0067】
シアン淡データに対してディザ処理後のシアン淡出力データ格納領域264に格納された例を図10(c)に示す。図10(c)に示すようにシアン淡出力データ格納領域264の(4,1)と(4,4)の位置のみ、ドット生成を示す“255”が格納され、それ以外はドットを生成しないことを示す“0”が格納されることになる。
【0068】
図3に戻り、次いでCPU24は、シアン淡データとマゼンダ濃データとの和(C淡+M濃)から、シアン淡出力ドットの周囲の階調値を減算する処理を行う(ステップS14)。シアンのドット低密度の領域において生成されるドットと、マゼンダのドット高密度の領域で生成されるマゼンダのドットとが、重なってドットが打たれないようにするためである。このようにすることで、異なる色ドットの重なる確率を下げて、粒状的なドットの生成を抑え、快適な印刷出力を得ることが可能となる。
【0069】
具体的な処理について、図11にフローチャートを示し、RAM26への処理について図12乃至図13を用いて説明する。まず、CPU24は減算処理に移行すると(ステップS14)、C淡+M濃データの、C淡ドットに対応する位置の画素を選択する(ステップS15)。
【0070】
図12に具体例を示す。ステップS13で、シアン淡出力データを得て、シアン淡出力データ格納領域264に格納されたものが図12(a)の左図に示す。また、ステップS12で生成したシアン淡データとマゼンダ濃データの和を得て、領域263aに格納されたものが図12(a)の右図に示している。さらに、RAM26には、階調値の合計値を格納する合計値格納領域265を有し、CPU24によって選択した画素の階調値等が適宜この領域265に格納されるようになされている。
【0071】
このステップS140での対応画素の選択は、シアン淡出力データ格納領域264に格納された値の中で、ドット生成を示す“255”が格納された座標位置に対応するシアン淡とマゼンダ濃の和の画素を選択する。図12(a)に示す例では、領域263aのうち(4,1)に位置する画素が選択されることになる。
【0072】
図11に戻り、次いでCPU24は、選択画素の階調値が“255”を超えるか否か判断する(ステップS141)。図12(a)の例では、選択画素の階調値は“100”となるので、“255”を超えず、この場合は“NO”と判断される。
【0073】
“NO”が選択されると、次いでCPU24は、選択画素の階調値をすべて減算する(ステップS142)。図12(b)に示すようにシアン淡とマゼンダ濃のデータの和の対応する画素の階調値を“100”をすべて減算して“0”として、その位置に“0”を格納する。そして、CPU24は、減算済みの値である“100”を合計値格納領域265に格納する。
【0074】
次いで、CPU24は、減算した画素の周囲の未減算画素を選択する(ステップS143)。選択の方法としては、ここでは減算した画素の上下左右の未減算画素を選択することにする。図12(c)に示すように、選択すべき未減算画素として、(4,0)、(3,1)、(5,1)、(4,2)を選択することにする。もちろん、選択の方法として上下左右ではなく、右上、右下、左下、左上の4つの画素を選択するようにしてもよい。さらに、これら4つの画素と上下左右の4つの画素の計8つの画素を選択するようにしてもよい。
【0075】
次いで、CPU24は、選択した未減算画素の階調値の合計が、ステップS140で選択した画素の階調値を含めて“255”に達したか否か判断される(ステップS144)。図12(c)の例では、ステップS140で選択した画素の階調値は“100”、ステップS143で選択した画素の階調値の合計は、“400”で、“255”を超えるので、このステップS144では、“YES”が選択されることになる。
【0076】
次いで、CPU24は、各選択画素から均等に階調値を減算する(ステップS145)。減算は、例えば、“255”から合計値格納領域265に格納された値を減算し、残った値をステップS143で選択した未処理画素の数分で均等に振り分けるようにする。上述の例では、“255”から合計値格納領域265に格納された値“100”を減算すると、“155”となる。これをステップS143で選択した4つの画素で割り振ると、1画素あたり38.75となる。よって、4つの画素に対して39、39、39、38の階調値を減算するようにするようにすれば、均等に“155”だけ減算することになる。減算した後のシアン淡とマゼンダ濃データの例を図13(a)の中央に示す。シアン淡ドットの対応位置(4,1)は、“0”となり、まわりの画素((4,0)、(3,1)、(5,1)、(4,2)に位置する画素)の階調値も減算されていることを示す。
【0077】
次いで、CPU24は、ステップS146に移行し他のシアン淡ドットがあるか否か判断される。他にもシアン淡ドットがあれば、シアン淡とマゼンダ濃の和の対応位置の減算処理を行う必要があるからである。図13(b)に示すようにまだ、シアン淡出力データ格納領域264の位置(4,4)にドット生成を示す“255”が格納されているので、この場合“YESが選択され、処理は再びステップS140に移行し、上述の処理が繰り返されることになる。図13(b)の中央に同様に処理を行った結果を示す。
【0078】
図13(b)に示す場合では、再びステップS146に移行すると他にシアン淡ドットはないため、“NO”が選択されステップS15に移行することになる。一方、ステップS144で選択した未減算画素の階調値の合計が“255”を超えない場合(ステップS144で“NO”の場合)、さらに周囲の未減算画素を選択する(ステップS147)。選択の方法としては、例えば、シアン淡のドット生成位置の斜め周り方向を選択することが考えられる。図13(b)の中央の例では、(3,0)、(5,0)、(3,2)、(5,2)の位置する画素を選択する。選択した画素の階調値の合計が、“255”を超えれば、ステップS145に移行し、上述の処理が行われる。
【0079】
また、ステップS141で選択画素の階調値が“255”を超える場合(“YESの場合)、CPU24は、選択した画素の階調値を”255“だけ減算させる。同様にシアンのドット低密度の領域に打たれたドットの周辺に、マゼンダのドット高密度の領域でマゼンダのドットが打たれないようにするためである。さらに、シアンとマゼンダとでドット間距離を一定に保つためでもある。ここでは、シアン淡出力ドットの階調値の値”255“分だけ減算したので、処理は、ステップS146へ移行し、他にシアン淡ドットがあるか判断され、上述の処理が繰り返されることになる。
【0080】
ここで、減算処理を終了したシアン淡とマゼンダ濃データの和から、シアン淡出力データを減算したので、出力結果はマゼンダ濃データが出力されることになる(図13(c)の左図参照)。
【0081】
図4に戻り、CPU24は、このM濃データ(マゼンダ濃データ)に対してディザ処理を行う(ステップS15)。閾値マトリックスは、図13(c)の中央に示すもの(図7のマトリックスと同様)を用いて、ステップS13(図8乃至図10)と同様に各位置の階調値とマトリックス内の閾値との大小で、ドット生成か否かの値がマゼンダ濃出力データ格納領域266に格納されることになる。この領域266もRAM26の所定領域に存在し、各座標位置が全体画像の各画素位置に対応するものである。比較の結果、マゼンダ濃出力データ格納領域266で、(3,2)、(5,2)、(3,5)、(5,5)の位置にドット生成を示す“255”が格納され、それ以外はドットを生成しないことを示す“0”が格納される。
【0082】
次いで、CPU24は、マゼンダ淡(M淡)データに対してディザ処理を行う(ステップS16)。マゼンダ淡データは、ステップS11ですでに生成済みで、図14(a)の左図(図5(b)と同様)にその例を示す。このマゼンダ淡データに対しても、ステップS13(図8乃至図10)と同様に、図14(a)の中央に示す閾値マトリックスを使用(図7と同様)して、処理を行う。その結果を図14(a)の右図に示す。この出力結果は、RAM26の所定領域に設けられたマゼンダ淡出力データ格納領域267に格納される。この領域267も各座標位置は、全体画像の画素位置に対応するものである。マゼンダ淡の出力ドットは、(1,1)、(1,4)の位置に形成され、それ以外はドットを生成しない“0”が格納される。
【0083】
図4に戻り、次いでCPU24は、ステップS17に移行し、異なる色の濃い方のデータ、すなわち、シアン濃データを含む、シアン濃とマゼンダ淡の各データの和を取ったデータを用いて、減算処理を行う。減算処理のフローチャートを図11に示す。上述したステップS14での減算処理(シアン淡+マゼンダ濃からシアン淡出力を減算した場合の処理)と全く同様である。
【0084】
RAM26のメモリの状態を図14(b)から図15(a)に示す。図11のフローチャートを用いて順に説明する。まずCPU24は、減算処理に移行すると(ステップS17)、マゼンダ淡出力のドット生成を示す“255”の位置に位置する画素を選択する(ステップS140)。図14(b)に示す例では、(1,1)に位置する画素を選択することになる。
【0085】
次いで、CPU24は、ステップS140で選択した画素の階調値が“255”を超えるか否か判断する(ステップS141)。シアン濃とマゼンダ淡との和で対応する位置(1,1)の階調値は、“100”(図14(b)の中央参照)となっているので、 “NO”が選択される。
【0086】
次いで、CPU24は、ステップS142に移行し、ステップS140で選択した画素の階調値をすべて減算する。図14(b)の場合は、“100”すべて減算する。減算した値は、合計値格納領域265に格納されることになる。そして、まだ階調値の合計が“255”に達していないので、CPU24は、さらに未減算画素を選択する(ステップS143)。この場合も、選択対象は、ステップS140で選択された画素の上下左右の4つの未減算画素を選択する。図14(b)の場合は、シアン濃+マゼンダ淡データの(1,0)、(0,1)、(2,1)、(1,2)に位置する画素が選択される。
【0087】
次いで、CPU24は、ステップS144に移行し、選択画素の階調値の合計が“255”を超えるか否かを判断する。図14(b)に示す例では、マゼンダ淡出力の階調値は“255”で、シアン濃+マゼンダ淡データの選択した画素の階調値の合計は “500”(ステップS140で選択した画素の階調値“100”に、ステップS143で選択した画素の階調値“400”の和)となるので、“YES”が選択され、ステップS145に移行する。
【0088】
ステップS145において、CPU24は、ステップS143で選択した画素の階調値から均等に減算する。図14(c)に示す例では、シアン濃+マゼンダ淡データの(1,0)、(0,1)、(2,1)、(1,2)に位置する画素の階調値がそれぞれ、39、39、39、38だけ減算されて、61、61、61、62となる。なお、1つだけ38を減算する画素があるがこれはランダムで構わない。そして、減算した画素の階調値の合計“255”が合計値格納領域265に格納される。
【0089】
図11のフローチャートに戻り、次いで、CPU24は、他にマゼンダ淡出力データにドット生成を示す“255”があるか否か判断する(ステップS146)。図14(c)の例では、さらに、(1,4)の位置に“255”が格納されているので、“YES”が選択されて、ステップS140に移行する。そして、上述の処理を繰り返し、減算処理を行って、図15(a)の中央に示す状態に移行することになる。
【0090】
そして、ステップS146で他にマゼンダ淡出力データにドット生成を示すデータはないので、“NO”が選択されて、ステップS18に移行することになる。一方、ステップS144で選択画素の階調値の合計が“255”を超えないと(“NO”の場合)、ステップS147に移行しさらに周囲の未減算画素を選択する。これも上述の例と同様に、右上、右下、左下、左上にある画素を選択することになる。例えば図15(a)の例で、(1,4)にある画素の上下左右を選択しても“255”に達しないと、(0,3)、(2,3)、(0,5)、(2,5)の画素を選択する。さらに、この4つの画素を選択しても“255”に達しない場合には、さらに上下左右等を選択の幅を広げるようにすることでもよい。
【0091】
また、ステップS141で選択画素の階調値が“255”を超えると、ステップS140で選択した画素の階調値から“255”を減算した値が当該画素の階調値として以後の処理を行うことになる(ステップS148)。例えば、シアン濃+マゼンダ淡の(1,4)の画素の階調値が“300”のときは、“255”を減算した“45”が当該画素の階調値となる。そして、ステップS146へ移行し、上述の処理が繰り返されることになる。なお、図14(b)、(c)と同様に、シアン濃+マゼンダ淡データからマゼンダ淡出力データを減算したものは、シアン濃データとなる。
【0092】
次いで、CPU24は、減算済みシアン濃データにディザ処理を行う(図5、ステップS15)。閾値マトリックスを図15(b)の中央に、シアン濃データを左図に示す。マトリックスの各閾値は、図7等と同様である。また、処理自体もステップS13等と同様である。各閾値と階調値とを比較し、その出力結果をRAM26のシアン濃出力データ格納領域267に格納させる。この領域267も、各位置は全体画像の画素位置に対応している。図15(b)の右図がその出力結果であり、(0,2)、(2,2)、(0,5)、(2,5)にドット生成を示す“255”、それ以外の位置にはドットを生成しないことを示す“0”が、CPU24によって格納されることになる。
【0093】
次いで、CPU24は、ステップS19に移行し、ステップS13で処理を行ったディザ処理後のシアン淡出力データ(図10(c)の右図)と、ステップS18で処理したディザ処理後のシアン濃出力データ(図15(b)の右図)とを合成する。具体的には、CPU24は、ディザ後のシアン淡出力データとシアン濃出力データの対応する各座標位置で階調値の和を演算することになる。例えば、図10(c)に示すシアン淡出力データで(0,0)に格納された階調値“0”、同じ(0,0)に位置するシアン濃出力データ(図15(b)の右図)の階調値“0”であるので、この2つの階調値を加算すると“0”となり、シアン出力データ格納領域269aの(0,0)に格納する。同様に各位置の階調値をシアン濃出力とシアン淡出力とで階調値を加算すると、最終的には、図15(c)の左図の出力結果を得ることができる。
【0094】
図5のフローチャートに戻り、次いで、CPU24は、マゼンダ淡ドットとマゼンダ濃ドットとを合成する(ステップS20)。これも、ステップS19と同様にマゼンダ淡出力データ(図14(a)の右図参照)と、マゼンダ濃出力データ(図13(c)の右図参照)との対応する位置で階調値の和をとって、その値をマゼンダ出力データ格納領域269bに格納する。最終的には、図15(c)の右図の出力結果を得ることができる。
【0095】
シアン出力データ格納領域269aも、マゼンダ出力データ格納領域269bも、各座標位置が全体画像の各画素位置に対応するものである。図15(c)に示すように、シアンとマゼンダの出力ドットの位置(階調値“255”の位置)は、互いに重なり合っておらず、粒状的なドットの生成を防ぎ、ドット間距離が一定に保たれ、快適な印刷出力を得ることができるのである。
[誤差拡散法を用いたハーフトーン処理]
次に、本発明が適用される誤差拡散法を用いたハーフトーン処理について説明する。この誤差拡散法も、0から255までの256階調を有する画素に対して2値化(又は4値など)する場合の手法の一つである。例えば、閾値を“127”として、ある入力画素の階調値が“50”とすると、閾値以下なので2値化すると “0”となる。この場合、量子化値“0”に対して“50”(=50−0)の誤差が生じることになる。そこで、この誤差分をまわりの画素に拡散させて2値化を行う方法が、誤差拡散法である。以後これを繰り返し、閾値より大きいとドット生成を示す再生データを生成し、そうでないとドットなしを示す再生データを生成する。そして、この再生データをもとに印刷用紙等に印刷を行うようにするものである。
【0096】
この誤差拡散法の場合も、ディザ処理の場合と同様に、シアン淡入力データに誤差拡散処理を行ってシアン淡出力データをまず生成し、シアン淡出力ドットを得る。そして、シアン淡+マゼンダ濃データからシアン淡出力データの減算処理を行い、マゼンダ濃データを得る。このマゼンダ濃データに誤差拡散処理を行い、マゼンダ濃出力データを得る。さらに、マゼンダ淡入力データ対して誤差拡散処理を行い、マゼンダ淡出力データを得て、シアン濃+マゼンダ淡データから減算処理を行う。処理後のシアン濃データに対して誤差拡散処理を行い、シアン濃出力データを得る。そして、シアン淡出力データとシアン濃出力データの和からシアン出力データを得て、マゼンダ淡出力データとマゼンダ濃出力データとの和からマゼンダ出力データを得て、これらのデータからシアンとマゼンダのドットが印刷用紙に印刷されることになる。
【0097】
このようにドット密度が低くなるであろう入力階調値の低い方から先に誤差拡散処理を行い、その後減算処理を行って、色の異なる方の入力階調値の高いデータを得る。そして、このデータに誤差拡散処理を行い、再生データを得るのである。これらは、上述したディザ処理と同様である。例えば、入力階調値の小さいシアンデータに対して生成されるドット周辺に入力階調値の高いマゼンダのドットを生成させないようにするためである。これにより、印刷出力おいて、ある部分だけドットが高密度に生成されることによる粒状的なドット生成を抑えることができ、さらにシアンとマゼンダとでドット間距離が一定に保たれ、快適な印刷出力を得ることが可能となるのである。なお、ディザ処理のときの同様、誤差拡散処理でもシアン(C)とマゼンダ(M)に対してのみ、減算処理を含む処理を行い、ブラック(K)、イエロー(Y)に対しては減算処理を行わない通常の誤差拡散処理によりドット出力を得ることにする。
【0098】
この誤差拡散法による本発明のハーフトーン処理の動作を示すフローチャートを図4乃至図5、RAM26に格納されたデータの例を図16乃至図22に示す。このフローチャートに示すように、誤差拡散処理は、ディザ処理の場合とほぼ同様の処理を行うことになる。以下、詳細に説明する。
【0099】
本処理も同様に処理が開始される前に、各CMYKの各入力階調データがRAM26に格納されているものとする。そのうち、シアン(C)とマゼンダ(M)の例を図16(a)に示す。シアンの入力階調データは、シアン入力データ格納領域261aに格納され、マゼンダの入力階調データは、マゼンダ入力データ格納領域261bに格納される。各領域261a、261bともRAM26の所定の領域に存在し、各領域261a、261bの座標位置は、画像全体の画素位置に対応するものである。この場合も、6行6列で説明するが、勿論これよりも多くの位置から構成できるものでも、少ない構成でもよい。ディザ処理の場合と同様である。
【0100】
図4に示すように、CPU24は、本処理を実行するプログラムをROM25から読出し、処理を開始する(ステップS10)。次いで、ディザ処理の場合と同様に、シアン淡(Cyan淡)、マゼンダ淡(Magenta淡)、シアン濃(Cyan濃)、マゼンダ濃(Magenta濃)の4つのデータに分離する(ステップS11)。シアン淡データも、同様にシアン入力とマゼンダ入力とを比較し、階調値がシアンの方が低いとその値、逆の場合は“0”をシアン淡データ格納領域262aに格納する。その結果、図16(b)の最も左図の出力を得ることができる。
【0101】
同様に、マゼンダ淡データは、マゼンダの入力階調データとシアンの入力階調データとを比較し、マゼンダの方が、階調値が低いとその値、逆の場合は“0”をマゼンダ淡データ格納領域262bに格納する。その結果、図16(b)の左図から2番目の出力を得ることができる。
【0102】
シアン濃データは、シアン入力とマゼンダ入力とで階調値を比較して、シアンの方が大きいとその値、低いと“0”となるデータである。マゼンダ濃データも、シアン入力とマゼンダ入力とで階調値を比較して、マゼンダ入力の方が大きいとその値、低いと“0”となるデータである。それぞれ、領域262c、262dに格納することもできるが、その後の処理で使用するのは、分離したデータのうち、シアン淡データとマゼンダ淡データであるので、格納領域262c、262dを設けずに演算のみによって処理することも可能である。各領域262a、262b、262c、262dともにディザ処理の場合と同様に各座標位置が画像全体の画素位置に対応するものである。
【0103】
次いで、図4に戻り、CPU24はシアン淡データとマゼンダ濃データとの和(C淡+M濃)と、シアン濃データとマゼンダ淡データとの和(C濃+M淡)の各データを生成する(ステップS12)。図16(c)に示すように、上述のステップS11で分離した4つのデータを用いて、シアン淡+マゼンダ濃のデータと、シアン濃+マゼンダ淡のデータを生成する。
【0104】
データの生成は、ディザ処理と同様に、シアン淡データとマゼンダ濃データの各座標位置に格納されたそれぞれの階調値の和をとって、シアン淡+マゼンダ濃データを生成し、シアン濃データとマゼンダ淡データの各座標位置に格納されたそれぞれの階調値の和をとって、シアン濃+マゼンダ淡データを生成する。CPU24によって、生成した2つのデータは、それぞれRAM26の領域263a、263bに格納する(図16(c)参照)。この領域263a、263bも、同様に各座標位置が画像全体の画素位置に対応するものである。
【0105】
次いで、CPU24は、シアン淡(C淡)データに対して誤差拡散処理を行う(ステップS13)。この誤差拡散処理の具体例を図17乃至図19(a)に示す。この処理で使用されるRAM26の領域は、シアン淡データが格納されたシアン淡データ格納領域262a(図17(a)の左図)と、拡散誤差を格納するための拡散誤差領域270(図17(a)の中央)と、シアン淡出力データを格納するためのシアン淡出力データ格納領域264(図17(c)の右図)とである。
【0106】
拡散誤差領域270は、シアン淡データの階調値に対して閾値に達しない又は閾値を超える場合、周りの画素にその階調値を誤差として分散させるが、その分散された値が各座標位置に格納される。なお、本実施例において、誤差拡散処理における閾値は、“127”として処理することにする。この領域270の座標位置もシアン淡出力データ格納領域262aに対応するもので、各座標位置が画像全体の画素位置に対応するものである。
【0107】
また、シアン淡出力データ格納領域264も、同様に、各位置が画像全体の画素位置に対応し、CPU24によって、シアン淡データに対して閾値である“127”より大きい階調値を有するとドット生成を示す再生データ(量子化データ、ここでは“255”)を与え、低いとドット生成を行わないことを示す再生データ(これも、量子化データで、ここでは“0”)を与える。各再生データは、CPU24によってシアン淡出力データ格納領域264に格納されることになる。さらに、閾値より低い場合や閾値を超える場合には、その階調値を周りの画素に拡散させて、当該画素においてその分散された階調値を加算したものがその画素の階調値として閾値と比較することになる。
【0108】
本実施例で用いる拡散マトリックスを図17(b)に示す。“x”と表示された画素が現在処理されている画素を示し、図中の数字は比率を示す。すなわち、現在処理中の画素の右隣と下側の画素は“2”に対して、処理中の画素の右下と左下の画素は“1”となるように階調値を分散させるようにする。処理中の画素により近い画素に多くの誤差が分散されるようにマトリックスが構成されている。処理中の画素に対して左側や上に分散させる比率がないのは、画素をラスター方向に左側から順番に上から下に探索していくためである。
【0109】
図17(a)の左図に示すようにシアン淡データが領域262aに格納されていると、まず、CPU24は、(0,0)から処理を行う。この位置の階調値は“0”で、閾値“127”より少ない値なので、シアン淡出力データの(0,0)の位置では、ドットを生成しないことを示す“0”となる。この“0”が、シアン淡出力データ格納領域264の(0,0)の位置に格納される(図17(a)の右図参照)。ただし、階調値が“0”なので、誤差拡散は行わずに、誤差拡散領域270の対応する座標位置には値が格納されない。
【0110】
次いで、シアン淡データの(1,0)の位置の階調値は“0”で、閾値である“127”より少ない値なので、同様にシアン淡出力データ格納領域264の(1,0)に“0”を、CPU24によって格納されることになる。ここでも、階調値が“0”となるので誤差拡散は行わない(図17(c)参照)。同様に、シアン淡データの(2,0)の位置の階調値は、“0”、よって、シアン淡出力データ格納領域の(2,0)の位置に“0”を格納する(図17(d)参照)。
【0111】
次いで、シアン淡データの(3,0)の位置の階調値は“40”で、閾値より低い値なので、領域264の(3,0)の位置に“0”を格納する(図18(a)右図参照)。このとき、2値化した値と、入力階調値との間で誤差“40”が生じるので、拡散マトリックスを使用して、まわりの画素にその階調値を分散させる必要がある。減算処理中の画素の位置が(3,0)であるので、(4,0)には、2/6×40=13.33・・・、(4,1)には、1/6×40=6.66・・・、ただし、右側と右下の分散させる階調値の比率は、図17(b)に示すように2:1であるから、演算した値より少ない数値でこの比率になる数値、すなわち、12と6とをそれぞれ拡散誤差領域の(4,0)、(4,1)に、CPU24によって格納される。さらに、(3,1)は、(4,0)と同じ値、(2,1)は、(4,1)と同じ値が格納されるので、それぞれ“12”と“6”が領域270の当該座標位置に格納されることになる(図18(a)中央参照)。以降の処理においては、この誤差分を画素の階調値に加算して閾値と比較することになる。
【0112】
次いで、CPU24は、シアン淡データの(4,0)の処理を行うが、この位置の階調値は、“40”、拡散誤差領域270には“12”の誤差分が格納されているので、閾値との比較においては、“52”(=40+12)で“127”と比較する。閾値よりも少ない値であるので、シアン淡出力データ格納領域264の(4,0)には、CPU24によって“0”が格納される(図18(b)右図参照)。
【0113】
また、2値化した値“0”と、階調値“52”との間には、誤差“52があるので、この階調値“52”を拡散マトリックス(図17(b))を使用して誤差分として拡散する処理を行う必要がある。処理中の画素が(4,0)だから、その右隣の(5,0)の位置には、2/6×52=17.33・・・、右下の(5,1)の位置には、1/6×52=8.66・・・、となる。このうち、マトリックスの比率2:1を満たす値は、16:8となる。よって、拡散誤差格納領域270の(5,0)と(5,1)には、それぞれ“16”と“8”の誤差分の階調値が格納されることになる。さらに、(4,1)にも“16”の値を格納させる必要があるが、前回の処理で“6”の誤差分が格納されているので、この値との和をとった“22”(=16+6)が格納されることになる。同様に、(3,1)に“8”の誤差分を格納させる必要があるが前回の誤差分“12”との和をとって、“20”がこの位置に格納されることになる(図18(b)中央参照)。
【0114】
次に、CPU24は、シアン淡データの(5,0)に格納された階調値と閾値とを比較するが、これも同様に拡散誤差領域のその座標位置に“16”が格納されているので、この値との和をとった“56”と閾値“127”とが比較される。閾値の方が高いので、シアン淡出力データ領域264の(5,0)の位置には、“0”が格納される。同様に、拡散マトリックスを使用して、まわりの画素のこの“56”の誤差分を拡散させる必要がある。この場合に右隣や右下に画素が存在しないが、図17(b)のマトリックスの比率を維持したまま、誤差を拡散させることになる。下の(5,1)には“18”、左下の(4,1)には“9”の値を分散させ、すでに格納された値との和をとって、それぞれ“26”、“31”が拡散誤差領域270の当該位置に格納されることになる(図18(c)の中央参照)。
【0115】
次いで、この処理を2行目、3行目と順次のシアン淡データに対して行い、最終的に得られるシアン淡出力データは、図19(a)の右図のように格納されることになる。この図に示すように、(4,3)の位置にある画素だけが、ドット生成を示す“255”が格納され、それ以外は、ドットを生成しないことを示す“0”が格納されることになる。以上によりシアン淡データに対する誤差拡散処理が終了することになる(ステップS13が終了)。
【0116】
図4に戻り、次いで、CPU24は、シアン淡+マゼンダ濃データからシアン淡ドット周囲の階調値の減算処理を行う(ステップS14)。これも、ディザ処理と同様に、ステップS13で生成したシアン淡出力ドットのまわりに、異なる色であるマゼンダ濃データの出力ドットが生成されないように処理を行うことになる。異なる色のドットが重なる確率を下げて、モアレ等の不快な印刷出力を防ぐためである。
【0117】
具体的には、図19(b)の左図に示すように、シアン淡出力データ格納領域264に格納されたシアン淡出力データに対して、ステップS12で生成したシアン淡+マゼンダ濃データから、シアン淡出力ドットのまわりの階調値を減算する処理を行う。処理自体は、ディザ処理と同様であり、そのフローチャートを図11に示す。
【0118】
すなわち、図19(b)に示すように、シアン淡出力ドットが生成されるのは、(4,3)の位置にある画素である。よって、シアン淡+マゼンダ濃データの対応する(4,3)の画素を選択する(ステップS140)。選択した画素の階調値は、“100”なので、ステップS141にて“255”を超えないので“NO”が選択されて、ステップS142に移行する。
【0119】
次いで、CPU24は、選択画素である(4,3)の階調値“100”を全て減算し、その値“100”を合計値格納領域265に格納する。次いで、CPU24は、ステップS143に移行し、周囲の未減算画素を選択する。ディザ処理のときと同様に、選択画素の上下左右の画素を選択する。すなわち、図19(b)の例では、(4,2)、(3,3)、(5,3)、(4,4)の4つの画素を選択することにする。
【0120】
次いで、CPU24は、選択した画素の階調値の合計が、“255”を超えるか否か判断する。選択した画素は、ステップS140とステップS143で選択したものである。これらの画素の階調値の合計は、“500”で“255”を超えることになるので、ステップS144で“YES”が選択される。
【0121】
次いで、CPU24は、ステップS145に移行し、ステップS143で選択した画素から均等に階調値を減算する。減算もディザ処理の場合と同様に、ドット生成を示す“255”から合計値格納領域265に格納された値を減算し、残った値をステップS143で選択した未減算画素の数分で均等に振り分けるようにする。この場合は、合計値格納領域265に“100”が格納され、“255”から減算すると、“155”となり、これをステップS143で選択した未減算画素の数“4”で割ると、1画素あたり、38.75となる。よって、4つの画素、(4,2)、(3,3)、(5,3)、(4,4)に対して、それぞれ39、39、39、38だけ階調値を減算させるようにすれば、均等に“155”だけ減算することになる。この場合も、1つだけ“38”だけ減算する画素があるがランダムに選択してよい。
【0122】
図11に戻り、次いでCPU24は、ステップS146に移行し、他にシアン淡ドットがあるか否か判断する。図19(b)に示す例では、シアン淡出力データのうち(4,3)以外はドットを生成する画素は存在しないので、処理が終了して、図4のステップS15に移行することになる。
【0123】
一方、ステップS144で選択画素の階調値の合計が、“255”を超えた場合は、ディザ処理のときと同様に、処理対象の画素の右上、右下、左下、左上の斜め方向の4つの未減算画素を選択するようにすればよい。それでも、階調値の合計が“255”を超えないとさらにその右、さらに下、さらに左、さらに上等と選択画素を広げていくことも考えられる。階調値の合計が“255”を超えれば、上述のステップS145以降が実行されることになる。
【0124】
また、ステップS141で、最初に選択した選択画素の階調値が“255”を超えると、この場合もディザ処理のときと同様に、選択画素のついてのみ、その階調値から“255”を減算することになる(ステップS148)。この場合でも、異なる色のドットが重なる確率が減少し、ドット間距離が一定に保たれ、視覚的に快適な印刷出力を得ることが可能となる。その後、ステップS146に移行し、上述の処理が繰り返される。
【0125】
以上により、減算処理が終了すると、シアン淡+マゼンダ濃データの減算後の領域263aは、図19(c)の中央に示す状態となる。なお、ここで、シアン淡+マゼンダ濃データからシアン淡出力データを減算したものは、マゼンダ濃データとなるので、図19(c)の中央には、減算後のマゼンダ濃データとして図示している。
【0126】
図4に戻り、処理はステップS15に移行し、CPU24は、減算済みマゼンダ濃データに対して誤差拡散処理を行う。誤差拡散処理は、図17(a)から図19(a)に示したものと同様に処理を行う。すなわち、マゼンダ濃データの各座標位置に格納された階調値と閾値“127”とを、ラスター方向に左側から順に比較し、階調値の方が大きいとドット生成を示す“255”、そうでないと“0”とし、誤差分は、図17(b)に示す拡散マトリックスを使用してマトリックスに格納された値の比率でまわりの画素に階調値を分散させる。
【0127】
その結果、図20(a)の右図に示すマゼンダ濃出力データを得ることができる。このデータが格納される領域266も、ディザ処理の場合と同様に、各座標位置が全体画像における画素位置に対応するものである。図20(a)に示すようにマゼンダ濃出力ドットが生成される位置は、(4,0)、(5,1)、(3,2)、(4,4)、(4,5)の5つの位置である。
【0128】
次いで、図4に戻り、CPU24は、マゼンダ淡データに対して誤差拡散処理を行う(ステップS16)。マゼンダ淡データは、ステップS11で生成され(図16(b)の左から2番目に図示)ており、上述したステップS13と同様に拡散誤差領域270に、図17(b)に示すマトリックスを使用して誤差分を格納する。
【0129】
図20(b)に示すようにマゼンダ淡データ格納領域262bの各位置に各階調値が格納され、これに対して、各階調値と閾値“127”とを、ラスター方向に左側から順に比較し、階調値の方が大きい値のときは“255”、そうでないと“0”とする。もちろん、誤差分が以前の処理でその位置に格納されているとその誤差分を加算した値で比較する。処理が終了すると次の行と順次処理を進めるようにする。
【0130】
その結果、図20(c)の右図に示すように、マゼンダ淡出力データ格納領域267にマゼンダ淡出力データが生成されることになる。図20(c)に示すように、マゼンダ淡出力ドットが生成される画素位置は、(2,2)、(1,5)の2つの画素である。
【0131】
次いで、図4に戻り、このマゼンダ淡ドット周辺にシアン濃データの出力ドットが生成されないように、シアン濃+マゼンダ淡データからマゼンダ淡出力データの減算処理を行う(ステップS17)。これも、ディザ処理のときと同様(または、上述したステップS14と同様)に、図11に示すフローチャートに従って、処理が行われることになる。
【0132】
すなわち、CPU24は、まずマゼンダ淡出力ドットの位置に対応するシアン濃+マゼンダ淡データの位置を選択する(ステップS140)。図21(a)の例では、(2,2)を選択することになる。次いで、CPU24は、選択した画素の階調値は“100”で“255”に達しないのでステップS141で“NO”が選択される。
【0133】
次いで、CPU24は、選択した画素の階調値をすべて減算すると、シアン濃+マゼンダ淡データの(2,2)に位置する画素の階調値は“0”となる(ステップS142)。次いで、CPU24は、周囲の未処理画素を選択するが、上述の例と同様に上下左右の4つの画素、(2,1)、(1,2)、(3,2)、(2,3)を選択する(ステップS143)。
【0134】
次いで、CPU24は、選択画素の階調値の合計が“400”(ステップS140で選択した画素の階調値も含めて)となるので、ステップS144で“YES”が選択され、ステップS145に移行する。そして、CPU24は、均等に階調値を減算する。ここでも、“255”からステップS140で選択した画素の階調値“100”を減算した“155”をまわりの4画素から均等に階調値を減算させる処理を行う。ただし、(3,2)に位置する画素の階調値は、“0”となるので、減算処理を当該画素には行うことができないので、残りの3画素に対して均等に減算することにする。よって、155/3=51.66・・・となるので、3画素から52、52、51だけ階調値を減算させればよいことになる。したがって、図21(b)の中央に示すように、(2,1)、(1,2)、(2,3)に位置する画素の階調値は、それぞれ“48”、“48”、“49”となる。この場合も、1つだけ“51”を減算するものがあるがランダムに選択することにする。
【0135】
図11に戻り、CPU24は、他にシアン淡ドットがあるか否か判断する(ステップS146)が、図21(b)の左図に示すようにさらに、(1,5)の位置にもドット生成する画素が存在するので、本ステップでは“YES”が選択され、再びステップS140に移行することになる。そして、上述の処理を繰り返すことにより、最終的には図21(b)の中央に示すシアン濃データが生成されることになる。そして、処理は、ステップS18(図5参照)に移行することになる。
【0136】
図5に戻り、次いでCPU24は、減算済みシアン濃データに対して誤差拡散処理を行う(ステップS18)。これもステップS13、S15、S16と同様に、各座標位置に格納された階調値と閾値とを比較して、閾値よりも大きい値のときは“255”、低いと“0”とし、誤差分はまわりの画素に拡散させるようにする。また、閾値との比較で以前の処理で誤差分があればその値を本来の階調値に加算した値で比較することになる。これを、シアン濃データ格納領域263bの(0,0)からラスター方向に順に比較し、次の行へを順に移行し、すべての階調値に対して行うことになる。
【0137】
減算済みシアン濃データに対して、かかる誤差拡散処理を行うと、図21(c)の右図に示すようにシアン濃出力データを得る。このデータもディザ処理のときと同様にシアン濃出力データ格納領域267に各々CPU24によって格納されることになる。図21(c)に示すように、シアン濃出力ドットが生成されるのは、(1,0)、(0,2)、(1,3)、(2,4)の4つの画素位置となる。この場合も、ドット生成を示す“255”がこの4つの画素位置に格納されることになる。
【0138】
図5に戻り、次いでCPU24は、シアン淡ドットとシアン濃ドットとを合成する処理を行う(ステップS19)。ディザ処理の場合と同様に、ステップS13で生成した誤差拡散処理後のシアン淡出力データ(図19(b)右図参照)と、ステップS18で生成した誤差拡散処理後のシアン濃出力データ(図21(c)の右図参照)との和を対応する各座標位置どうしで演算する。その結果、図22(a)の左図に示すシアン出力データを得る。
【0139】
次いで、CPU24は、マゼンダ淡ドットとマゼンダ濃ドットを合成する処理を行う(ステップS20)。これも同様に、ステップS16で生成した誤差拡散処理後のマゼンダ淡出力データ(図20(c)の右図参照)と、ステップS15で生成した誤差拡散処理後のマゼンダ濃出力データ(図20(a)の右図参照)とで各座標位置どうしで階調値の和を演算する。その結果、図22(a)の右図にあるように、マゼンダ出力データを得る。
【0140】
これらシアン出力データ(図22(a)の左図)と、マゼンダ出力データ(図22(a)の右図)は、ディザ処理のときと同様に、それぞれシアン出力データ格納領域268aとマゼンダ出力データ格納領域268bに格納されることになる。領域268a、268bの各座標位置は、画像全体の画素位置に対応するのは、ディザ処理のときと同様である。
【0141】
この図22に示す2つのドット生成位置は、互いに重なる部分はなく、従って、異なる色どうしが重なることによる粒状的なノイズの発生を抑え、シアンとマゼンダとでドット間距離が一定に保たれ、快適な印刷出力を得ることが可能となるのである。
[CC法を用いたハーフトーン処理]
次に、CC(Circular Cell)法を用いたハーフトーン処理を用いた場合について以下説明する。このCC法も、多値の値をもつ各画素の階調値に対して、ドット生成を示す“255”とドット生成しない“0”によって2値化する点では、ディザ法や誤差拡散法と同様である。しかし、CC法においては、所定の閾値になるまで、画素を選択し、選択された複数の画素からなるセルを構成していき、その重心位置に位置する画素にドット生成を示す“255”を与え、セルを構成するそれ以外の画素に対しては“0”を与えるようにして、2値化する点で、他の処理と異なるものである。
【0142】
誤差拡散法と比較し、CC法は、ドット間距離を一定に保つことができ、ある領域だけドット密度が高くなったり、誤差が伝播することによるドットの繋がり(ワーム)の発生を抑え、ドットの分散性を向上させて視覚的に快適な印刷出力を得ることができる。
【0143】
このCC法においても、処理の方法は、ディザ法や誤差拡散法による場合と同様に、まずシアン淡データを生成し、CC法による処理を行う。そして、処理後のシアン淡出力ドットで異なる色であるマゼンダの濃い方のデータとで減算処理を行う。減算処理後のマゼンダ濃データにCC法による処理を行い、マゼンダ濃出力データを得る。
【0144】
次に、マゼンダ淡データに対してCC法で処理を行い、シアン濃データとの間で減算処理を行い、シアン濃データを得る。このデータにCC法による処理を行い、シアン濃出力データを得る。シアン淡出力データとシアン濃出力データとで合成してシアン出力データを得る。マゼンダ淡出力データとマゼンダ濃出力データとを合成してマゼンダ出力データを得る。
【0145】
これら2つの出力データは、それぞれ減算処理を行っているため、ドットが重なる確率が何も減算処理せずにCC法による処理をした場合と比較して低くなり、図3で説明した粒状的なドットの発生を抑え、シアンとマゼンダとでドット間距離が一定に保たれ、快適な印刷出力を得ることができる。
【0146】
ディザ処理の場合と同様に、先にドット密度が低くなるであろう階調値の低いものから先にCC法による処理を行い、その後ドット密度が高くなるであろうものから減算処理しているのは、入力階調値の小さい方の生成されるドット周辺に、入力階調値の高い方により生成されるドットが生成されないようにするためである。
【0147】
逆の場合、すなわち、先にドット密度が高くなるであろう、階調値の高い方から先に処理をすると、減算処理の過程で、確率的にドットが生成されない位置に対して減算処理を行い、結果的に入力階調値がさらに分散されて、入力分布に忠実でない階調値からなるデータに処理を行うことになる。その後に生成されるドット分布も入力階調値に忠実でないものとなってしまうため、これを防ぐ目的からである。
【0148】
CC法を用いたハーフトーン処理について、図23乃至図27に本処理の動作を示すフローチャートを示し、図28乃至図33にRAM26の各領域に格納された値の例について図示している。以下フローチャートに沿って詳細に本処理について説明する。
【0149】
まず、図23に示すように、CPU24は本処理を実行するためのプログラムをROM25から読み出して、処理が開始されることになる(ステップS30)。この場合も、ディザ処理の場合と同様に、処理が開始される前に、シアンの入力階調データがシアン入力データ格納領域261aに、マゼンダの入力階調データがマゼンダ入力データ格納領域261bに格納されているものとする(図28(a)の左図、左から2番目の図参照)。各領域261a、261bは、同様に、6行6列で構成されているが、説明を容易にするためであってこれ以外の構成でもよい。また、各座標位置に入力される階調値は、全体画像の画素位置に対応するもので、例えばシアン入力データ格納領域261aで(0,0)の位置は、全体画像の(0,0)に位置する画素に対応するものである。
【0150】
さらに、CC法では、重心を演算するためのワーキングメモリ領域280を備え、この領域280は、重心の位置座標(x座標とy座標で、例えば領域261aで(0,0)はx=0、y=0として表現される)と、これまで選択した画素の階調値の合計値が格納されるよう構成される。重心位置を格納するのは、その位置をもとにセルを構成する画素を選択したり、最終的なドットの位置を確定させるためである。階調値の合計は、セルを構成する画素の階調値の合計が閾値となるまで画素の選択を続けるのに必要だからである。
【0151】
また、ディザ処理等と同様にシアン出力データ格納領域268aと、マゼンダ出力データ格納領域268bもRAM26の所定領域に存在する。この2つの領域268a、268bも同様に各座標位置が全体画像の各画素位置に対応するものである。
【0152】
図23に戻り、処理が開始される(ステップS30)と、次いでCPU24は、ステップS31に移行し、シアンとマゼンダのそれぞれの未処理画素を選択する。未処理画素の選択は、まだ処理していない画素のうち、最も上側にあるものでかる最も左側にある画素を選択する(ラスター方向に選択する)。図28(a)に示す例では、まだ、すべての画素で処理が開始されていないので、両色とも未処理画素として(0,0)に位置する画素を未処理画素として選択することになる、
図23に戻り、次いでCPU24は、選択した未処理画素の階調値で、シアンの方がマゼンダよりも大きいか否か判断する(ステップS32)。シアンの方が大きいと、“YES”が選択され、マゼンダの方の処理を先に行い、マゼンダの方が大きいと、“NO”が選択され、シアンの方を先に処理することになる。この場合も、ドット密度が低くなるであろう階調値の小さい方を先に処理してドットを生成させ、後から減算処理を行うためである。
【0153】
図28(a)に示す例では、選択した未処理画素はともに(0,0)に位置する画素で、シアンの方の階調値は“20”、マゼンダの方の階調値は“40”となるので、ステップS32において、“NO”が選択されて、ステップS38に移行することになる。この例の場合は、シアンの方から先に処理をすることになる。
【0154】
ステップS38では、シアンドットの生成処理を行うが、その処理の詳細を示すフローチャートを図24に示す。
【0155】
シアンドット生成処理(ステップS38)に移行すると、まず、CPU24は、シアンの未処理画素を初期画素として初期濃度の重心を演算する(ステップS381)。ステップS31で選択した未処理画素を初期画素として選択したときのシアン入力データ格納領域261aの状態を図28(b)の左図に示す。そして、重心の演算は、以下の演算式を用いる。
(式1)
x重心={{(セルの重心のx座標)×(セルの階調値の合計)}
+{(選択した未処理画素のx座標)×(選択した未処理画素の階調値)
}}/(セルの階調値の合計+選択した未処理画素の階調値)
y重心={{(セルの重心のy座標)×(セルの階調値の合計)}
+{(選択した未処理画素のy座標)×(選択した未処理画素の階調値)
}}/(セルの階調値の合計+選択した未処理画素の階調値)
(x重心、y重心は重心位置の座標)
この演算式はROM25に格納され、重心位置の演算のときにCPU24が読み出して演算を行うことになる。ちなみに、初期画素の場合は、セルの重心のx、y座標、及びセルの階調値はともに0として演算される。なお、セルとは、上述したように複数の画素から構成される画素群で、セルの重心とあるのは、これまで構成したセルの重心のことである。初期濃度の重心を演算すると、x重心=0、y重心=0となる。演算した重心位置は、CPU24によってワーキングメモリ280に格納されることになる(図28(c)の中央図参照)。また、CPU24は、初期画素の階調値もワーキングメモリ280に格納する。図28(c)の例では、シアンの(0,0)に位置する画素の階調値は、“20”だから、この値が階調値の合計としてワーキングメモリ280に格納されることになる。そして、CPU24は、対応するシアン出力データ格納領域268aの位置にドットを生成しないことを示す“0”を格納する。
【0156】
さらに、CPU24は、シアン入力データ格納領域261aの選択した初期画素の位置に、当該画素が選択されたことを示す“−1”を格納する。以後、この画素がセルを構成する画素として選択されないようにするためである。そして、CPU24は、選択したシアンの初期画素に対応するマゼンダの入力階調データに、シアンの階調値を加算して、領域261bの対応する位置に格納する(図28(c)左から2番目の図参照)。
【0157】
このように階調値を加算しているのは、最終的にシアンドットが生成されるとき、セルを構成する階調値の合計は“255”となり、この値分をマゼンダの入力階調値に加算させることになるため、後で加算した“255”の階調値分を減算させるためである。この減算処理により、シアンドットとマゼンダドットとが重なる確率が低くなり、粒状的なドットの生成を抑えて、ドット間距離が一定に保たれ、快適な印刷出力を得ることが可能になるのである。
【0158】
図24に戻り、次いで、CPU24はステップS382に移行し、シアンの未処理画素を選択する。未処理画素の選択は、ワーキングメモリ280に格納した重心位置の座標をもとに最も近い位置にある画素を選択する。重心を利用してセルを構成する画素を選択するため、閾値に達したセルの形状は円状となり、その重心にドットを形成させることで、シアンとマゼンダとのドット間距離が一定で快適な印刷出力が得られるからである。
【0159】
図28(c)の例では、ワーキングメモリ280には重心位置として、x=0、y=0が格納されているので、この位置から最も近い位置にある画素は、(1,0)、(0,1)の2つ存在することになる。複数の選択すべき画素がある場合、CPU24は、いずれか1つの画素をランダムに選択することにする。固定順に選択する方法も考えられるが、最終的に構成されるセルが規則的に並び、印刷出力のある領域でドットの周期パターンを発生させてしまう。このようなパターンは視覚に入り易く快適な印刷出力を得ることができないので、ランダムに選択するのである。ここでは、図29(a)の左図にあるように(0,1)を選択することにする。
【0160】
CPU24は、シアンの未処理画素、すなわち、(0,1)に位置する画素を選択すると、マゼンダの入力階調データで対応する座標位置(ここでは、(0,1))にある画素の階調値に、シアンの階調値を加算し(階調値が“60”)、シアンの出力データ格納領域268aの対応する座標位置(ここでは、(0,1))にドットを生成しないことを示す“0”を格納する。そして、選択したシアンの入力データ格納領域268aの選択した画素位置に処理済みを示す“−1”を格納することになる(図29(a)参照)。
【0161】
図24に戻り、次いでCPU24は、選択した未処理画素を含めた階調値の合計(濃度の合計)が閾値を超えるか否かを判断する(ステップS383)。図29(a)の例では、選択した未処理画素((0,1)に位置する画素)の階調値は、“20”、ワーキングメモリ280に格納された階調値の合計(これまで選択した画素の階調値の合計)は、“20”、よって合計は“40”である。本実施例では、閾値を“255”とするとにする。この場合、閾値を超えないことになるので、この例の場合、本ステップで“NO”が選択される。
【0162】
ステップS383で“NO”が選択されると、CPU24は、ステップS384に移行し、未処理画素を含めたセルの重心を演算する。新たにセル内に取り込んだ画素を含めたセル全体の重心の計算をし直すためである。重心の演算は、上述した(式1)を用いて、CPU24によって演算される。その結果、重心座標は、(x重心,y重心)=(0,0.5)となる。この座標は、ワーキングメモリ280に格納される。
【0163】
次いで、CPU24は、ステップS385に移行し、セルの階調値の合計を演算する。新たにセル内に取り込んだ画素を含めたセル全体の階調値を計算するためである。図29(a)の例では、ワーキングメモリ280には、これまで選択した画素の階調値の合計値である“20”が格納され、ステップS382で画素(0,1)が選択され、その階調値が“20”なので、合計値は、“40”でその値がCPU24によって、ワーキングメモリ280に格納されることになる(図29(a)中央図参照)。
【0164】
次いで、CPU24は、ステップS386に移行し、選択画素の階調値をマゼンダの階調値に加算する。図29(a)の例では、シアンの選択画素の階調値“20”をマゼンダの対応する位置にある階調値“20”に加算して、当該位置の画素の階調値を“60”としている。この場合も同様に、後で減算処理を行い、シアンとマゼンダのドットが重なる確率を低くするためである。
【0165】
次いで、CPU24は、ワーキングメモリ280に格納した階調値の合計が閾値である“255”と等しいか否か判断する。図29(a)の例では、中央図に示すように合計値は“40”なので、閾値と等しくなく“NO”が選択され、再び、ステップS382に移行し、シアンの未処理画素を選択して、セルに取り込む画素の選択を続けることになる。
【0166】
図29(a)の例で処理を行うと、CPU24は、ステップS382でシアンの未処理画素を選択する。選択は、ワーキングメモリ280に格納した重心位置に最も近い位置にある画素を選択する。この図29(a)の例では、重心位置が(0,0.5)なので、最も近い位置にある画素は(1,0)と(1,1)の2つの画素があることになる。上述したように、ランダムにいずれか1つの画素をCPU24は選択するとして、ここでは、図29(b)の左図に示すように(1,0)を選択することにする。選択した画素の座標位置には、処理済みを示す“−1”が格納され、シアンの出力データ領域268aの対応する(1,0)の位置に、ドットを生成しないことを示す“0”が格納される(図29(b)の左図、右から2番目の図参照)。
【0167】
次いで、CPU24は、濃度の合計が閾値を超えるか否か判断する(ステップS383)。選択した画素の階調値は“20”で、階調値の合計は“40”だからその合計は“60”となり、閾値である“255”を超えないので、“NO”が選択される。
【0168】
次いで、CPU24は、未処理画素を含めたセルの重心を演算する(ステップS384)。CPU24は、ROM25に格納された(式1)を用いて、演算すると重心位置は(0.3,0.3)となる。この重心位置は、CPU24によってワーキングメモリ280に格納されることになる(図29(b)中央図参照)。
【0169】
次いで、CPU24は、セルの階調値の合計を演算する(ステップS385)。ステップS383で選択した画素の階調値は“20”、ワーキングメモリ280に格納された階調値の合計値は、“40”だから、その合計値は“60”となる。この値は、メモリ280に格納されることになる(図29(b)中央図参照)。
【0170】
次いで、CPU24は、選択画素の階調値をマゼンダの階調値に加算する処理を行う(ステップS386)。後で、減算処理を行い、シアンとマゼンダのドットの重なりを防ぐためである。選択した未処理画素の階調値は“20”で、対応する位置にあるマゼンダの階調値は“40”だから、(1,0)に位置するマゼンダの階調値は“60”となる。
【0171】
そして、CPU24は、メモリ280に格納した階調値の合計が閾値である“255”と等しいか否か判断する(ステップS387)。合計値は、“60”だから閾値を等しくなく、ここでも“NO”が選択され、再び、ステップS382に移行することになる。
【0172】
図29(b)の例で、再び処理を進めると、ステップS382で未処理画素を選択すると、重心(0.3,0.3)から最も近い画素は(1,1)なので、この画素を未処理画素として選択する(図29(c)の左図参照)。選択した画素の座標位置には、“−1”を格納し、対応する位置のシアン出力データ領域268aに“0”を格納する。
【0173】
次いで、選択した未処理画素の階調値とメモリ280に格納された階調値の合計は、“80”となり、閾値を越えないので、ステップS383で“NO”が選択され、重心を演算すると(0.5,0.5)(ステップS384)、階調値の合計は、“80”(ステップS385)、選択画素の階調値をマゼンダの階調値に加算(ステップS386)すると、図29(c)の各図に示す状態となる。
【0174】
次いで、ステップS387でセルの階調値の合計をメモリ280から読み出して、その値が“80”だから閾値と等しくなく、再び、ステップS387に移行して、セルに取り込む未処理画素の選択を行う。
【0175】
以上を繰り返し、シアンの入力階調データの(4,1)を未処理画素として選択し、ステップS387に移行した段階でのRAM26の状態を図30(a)に示す。この時点で、セルを構成する画素の階調値の合計は“240”となっている。ステップS387に移行して、閾値である“255”と比較すると等しくないので、再びステップS382に移行することになる。
【0176】
CPU24は、ステップS382で未処理画素を選択することになるが、重心位置はワーキングメモリから(1.25,1.32)なので、未処理画素として(3,2)が選択される(図30(b)の左図参照)。次いで、濃度の合計が閾値を超えるか否か判断される(ステップS383)。選択した未処理画素の階調値は、“20”で、これまで構成したセルの階調値の合計が“240”なので、その階調値の合計は、閾値である“255”を超えることになる。よって、このステップS383で“YES”が選択され、ステップS389へ移行することになる。
【0177】
ステップS389では、閾値を超えた場合の重心演算処理を行う。具体的には、閾値に達するのに必要な階調値を演算し、その値分だけ、最後に選択した未処理画素の階調値として重心を演算することになる。重心の演算は、(式1)を用いるが、この(式1)で(選択した未処理画素の階調値)は、閾値に達するのに必要な階調値であるとして、演算することになる。図30(b)に示す例では、これまで構成したセルの階調値が“240”だから、閾値に達するのに必要な階調値は、“15”(=255−240)で、これを選択した未処理画素の階調値として重心を演算することになる。その結果、重心位置は(x重心,y重心)=(1.32,1.34)となる。この重心位置は、再びワーキングメモリ280に格納される。また、セルの階調値の合計は、“255”として同様にワーキングメモリ280に格納されることになる(図30(c)中央図参照)。
【0178】
図24に戻り、CPU24は、次いで閾値に達するのに必要な値をマゼンダの階調値に加算する(ステップS390)。図30(c)の例では、閾値に達するのに必要な値は、“15”なので、この値をマゼンダの入力階調データの対応する画素に加算する(図30(c)左から2番目の図参照)。後で減算処理を行い、ドットの重なりを防ぐためである。
【0179】
次いで、CPU24は、残った階調値を最後に選択した未処理画素に戻す処理を行う(ステップS391)。最後に選択した(3,2)に位置する画素の階調値は、“20”であるが“15”として演算したため、残った値“5”の取り扱いが問題になるが、これは最後に選択した(3,2)の画素の階調値として戻すことにする(図30(c)左図参照)。以後、この位置にある画素は、入力階調値が“5”である未処理画素として、以降の処理においてセルを構成する画素として選択対象とする。このように、戻しデータを元の画素に戻すことで、入力階調値に忠実にドットの生成を行うことができる。この画素もセルに取り込み、残った階調値を他の未処理画素に戻すと入力階調分布に忠実にドットを生成することができないからである。
【0180】
そして、CPU24は、シアン出力データ格納領域268aの対応する位置に、ドットを生成しないことを示す“0”を格納する(図30(c)右から2番目の図参照)。
【0181】
次いで、CPU24は、ステップS388(図25)に移行し、重心位置にシアンドットを生成する処理を行う。具体的には、ワーキングメモリ280に格納された重心位置に位置する画素の出力データ格納領域268a、268bの位置にドットの生成を示す“255”が、CPU24によって格納される(図31(a)の右から2番目の図参照)。これにより、シアンにおいて1つのセル内にドットが生成されることになる。
【0182】
なお、ステップS337で閾値と等しいと判断されると(“YES”の場合)、同様に、ステップS388に移行し、ステップS334で演算した重心位置にシアンドットが生成されることになる。
【0183】
このシアンドット生成の過程において、マゼンダの入力階調データに全部で“255”の値を加算したため、このマゼンダ入力階調データから“255”の階調値を減算する処理を行う必要がある。
【0184】
具体的な処理は、図25のステップS392以下の処理となる。まず、CPU24は、シアンドットに最も近いマゼンダ画素を選択する(ステップS392)。図31(a)に示す例では、シアンドットは(1,1)の位置に存在するため、この位置にあるマゼンダ入力階調データを選択することになる(図31(b)の左から2番目の図参照)。なお、このとき、ワーキングメモリ280を減算した階調値の合計に使用するため、階調値の合計を“0”に初期化するものとする。
【0185】
次いで、CPU24は、選択したマゼンダの画素の階調値の合計が閾値を超えるか否か判断する(ステップS393)。図31(b)の例では、選択したマゼンダ画素は、(1,1)の1つでその階調値が“60”となるので、階調値の合計は“60”となり、“NO”が選択されることになる。
【0186】
次いで、CPU24は、選択したマゼンダ画素の階調値を“0”にする(ステップS394)。図31(b)の例では、左から2番目の図に示すように、(1,1)の画素の階調値を“0”にする。そして、CPU24は、選択したマゼンダの入力階調値の値をワーキングメモリ280に格納することにする(同図の中央図参照)。
【0187】
次いで、CPU24は、ワーキングメモリ280に格納した階調値の値が閾値に等しいか否か判断される(ステップS395)。図31(b)の例では、階調値の合計は“60”となっているので、閾値である“255”と等しくなく、“NO”が選択されて、ステップS392に移行する。
【0188】
次いで、CPU24は、シアンドットに最も近い画素を選択するが、シアンドットが生成される位置に最も近い未処理画素を選択することになる。図31(b)の例では、(1,1)に最も近い4つの画素、すなわち、(1,0)、(0,1)、(2,1)、(1,2)の位置にある画素を選択することにする(図31(c)の左から2番目の図参照)。
【0189】
次いで、選択したマゼンダ画素の階調値の合計が閾値を超えるか否か判断する(ステップS393)。この場合、4つの選択した未処理画素のうち、最小値となる階調値を選択し、この値と選択した未処理画素の数を乗算した値に、ワーキングメモリ280に既に格納されている値とを加算して、その値が閾値である“255”を超えるか否かで判断する。図31(c)に示す例では、選択した4つの画素すべて同じ階調値“60”を有するので、この値に選択した未処理画素の数、すなわち4を乗算し、“240”が得られ、これにメモリ280に格納された値“60”に加算すると“300”となり、閾値である“255”を超えることになる。よって、本ステップS393で“YES”が選択されて、ステップS396へ移行することになる。
【0190】
CPU24は、ステップS396において減算量を演算する。ここでの演算の方法は、閾値からワーキングメモリ280に格納された値を減算し、その値を選択した未処理画素で均等に減算するものである。図31(c)の例では、閾値である“255”からメモリ280に格納された階調値“60”を減算すると、“195”、これを選択した4つの画素で均等に減算するとすると、1画素あたり、48.75となる。4つの画素の減算量の合計が、“195”となればよいので、各画素から49、49、49、48を減算すればよいことになる。
【0191】
そして、CPU24は、実際に減算処理を行い(ステップS397)、その結果、図32(a)の左から2番目に示すマゼンダ入力階調データを得ることになる。また、このとき、減算した階調値の合計も“255”となるので、ワーキングメモリ280にも“255”が格納されることになる。この場合も、1つだけ“48”を減算することになるが、ランダムに選択することにする。
【0192】
この減算処理により、本来のマゼンダの入力階調データの合計と同じになるとともに、シアンのドット出力周辺の階調値が小さい値となっているため、シアンドットとマゼンダのドットが重なる確率が小さくなる。したがって、ディザ処理や誤差拡散処理の場合と同様に、異なる色どうしでドットが重なる確率が低くなり、粒状的なドットの発生、モアレの発生等を抑え、視覚的に快適な印刷出力を得ることが可能になるのである。
【0193】
次いで、CPU24は、ステップS397を終了すると、ステップS34に移行することになる。また、ステップS395で、選択したマゼンダ画素の階調値が閾値を越えずに、閾値と丁度等しい値であるときは、“YES”が選択されて、同様にステップS34に移行することになる。
【0194】
図23に戻り、次いでCPU23は、ステップS34に移行して、シアン、マゼンダともに未処理画素があるか否か判断される。この判断は、シアン入力階調データが格納されたシアン入力データ格納領域261aと、マゼンダ入力階調データが格納されたマゼンダ入力データ格納領域261bにおいて、処理済みを示す“−1”がすべての画素に対して格納されたか否かで判断されることになる。
【0195】
図32(a)に示す場合は、まだ、“−1”となっていない画素がシアン、マゼンダ双方あるので、再び、ステップS31に移行し、未処理画素の選択を行うことになる。未処理画素の選択は、上述したようにラスター方向に、すなわち、最も上の行にある、最も左側にある未処理画素(“−1”となっていない画素)を選択する。図32(a)の場合は、(3,0)に位置する画素が選択される。
【0196】
そして、上述の処理を繰り返すと、図32(b)の左図の状態になる。図示された場合は、シアンの方がマゼンダより入力階調値がすべての画素で少ない値となっていたので、シアンの入力データの方が先に処理が行われ、従って、シアン入力データ格納領域261aの値はすべて、マゼンダの処理よりも早く“−1”が格納されることになる。
【0197】
この図32(b)に示す状態で、図23のフローチャートでは、ステップS34で、シアンの未処理画素がなくなったので、“NO”が選択されて、ステップS35に移行することになる。ステップS35では、残ったシアンの入力階調データに対してCC法によるハーフトーン処理が行われる。この場合も、ラスター方向に、初期画素を探索し、閾値に達するまでセルを構成する画素を選択し、階調値の合計が閾値に達すると、その時点での重心にドット生成を示す“255”を与え、それ以外のセルの画素に対しては“0”を与える。図32(b)の例では、シアンはすべて処理済みなので、本ステップでの処理は行わないことになる。
【0198】
次いで、CPU24は、残ったマゼンダに対するCC法によるハーフトーン処理を行う(ステップS36)。図32(c)に示すように(0,0)を初期画素として、以後閾値に達するまでセルを構成して上述の処理を行うことになる。その結果を図33(a)に示す。
【0199】
図33(a)のシアン出力データ格納領域268aとマゼンダ出力データ格納領域268b(図33(a)右図から2番目と左図参照)に示すように、ドットを生成する“255”が位置する画素は、シアンとマゼンダとで重なり合う点がない。これにより、CC法においても異なる色でドットが重なる確率が低くなり、粒状的なドットの発生を抑えて、シアンとマゼンダとでドット間距離が一定に保たれ、視覚的に快適な印刷出力を得ることが可能になる。
【0200】
一方、ステップS32で階調値がシアンの方が大きく、マゼンダが小さい場合は、マゼンダの方を先にドット生成処理を行うことになる。例えば、図33(b)の左図と左から2番目の図にあるように、シアンとマゼンダとがかかる入力階調データで領域261a、261bに格納された場合で説明する。ステップS21でシアンとマゼンダの未処理画素を選択する。この場合は、(0,0)に位置する2つの階調値を比較すると、シアンが“40”でマゼンダが“20”となるので、マゼンダの方が小さいので、ステップS32で“YES”が選択され、マゼンダドット生成処理に移行することになる。
【0201】
マゼンダ処理の具体的なフローチャートを図26に示す。この内容は、シアンドット生成処理とほぼ同内容であり、シアンに対する処理がマゼンダに置き換わっているものである。図33(b)の入力階調データが格納されたものとして以下説明する。
【0202】
まず、CPU24は、マゼンダの未処理画素を初期画素として選択する(ステップS331)。(0,0)に位置するマゼンダの画素を選択することになる。そして、CPU24は初期濃度重心を計算する。計算式は上述の(式1)を使用する。初期濃度の重心位置演算は、セルの重心のx、y座標、及びセルの階調値はともに0として演算される。その結果、重心は(0,0)となり、ワーキングメモリ280に格納する。また、その初期画素の階調値もワーキングメモリ280に格納する。さらに、マゼンダ出力データ格納領域268bの(0,0)に位置に“0”を格納し、シアン入力データ格納領域261aの(0,0)へ、マゼンダの階調値を加算する。
【0203】
次いで、CPU24は、マゼンダの未処理画素を選択する(ステップS332)。メモリ280に格納した重心位置に最も近い画素を選択する。複数あれば、ランダムに選択する。例えば(0,1)に位置するマゼンダの画素を選択するものとする。次いで、濃度の合計が閾値を超えるか判断する(ステップS333)。選択した画素との階調値の合計は、“40”となり、この場合、閾値を越えないので“NO”が選択され、ステップS334に移行する。
【0204】
次いで、CPU24は、未処理画素を含めた重心を演算する。2つの画素(0,0)、(0,1)の重心を演算すると(0,0.5)となる。次いで、CPU24は、セルの階調値の合計を演算する(ステップS335)。2つの画素の階調値の合計は“40”となり、これをワーキングメモリ280に格納することになる。
【0205】
次いで、CPU24は、選択画素の階調値をシアンの階調値に加算する(ステップS336)。シアンドットとマゼンダドットとの重なりを防ぐためである。そして、マゼンダ出力データ格納領域268bの(0,1)に“0”を格納する。次いで、CPU24は、ワーキングメモリ280に格納した階調値の合計が閾値と等しいか否か判断される(ステップS337)。階調値の合計は、“40”で閾値と等しくないので、“NO”が選択され、再びステップS332に移行し、階調値の合計が閾値を超えるまで処理が繰り返されることになる。
【0206】
ステップS333で、濃度の合計(階調値の合計)が閾値を超えると、処理は、ステップS339に移行し、閾値超えた場合の重心演算処理を行う。シアンの場合と同様に、閾値に達するのに必要な値分が、最後に選択した画素の階調値として、重心の演算を行う。その値をシアンの対応する画素の位置の階調値に加算し(ステップS340)、残った階調値を最後に選択した未処理画素に戻す(ステップS341)。
【0207】
そして、処理はステップS338(図27)に移行し、重心位置にマゼンダドットを生成する処理を行う。ステップS337で閾値と等しい場合も同様にステップS338に移行し、マゼンダドットの生成を行う。重心位置は、すでにメモリ280に格納されているので、その重心に位置する画素をドットを生成すべく、当該位置のマゼンダ出力データ格納領域268bに“255”を格納する。
【0208】
次いで、シアン入力に対して減算処理を行う。まず、マゼンダドットの位置に対応するシアンの画素位置を選択する(ステップS342)。次いで、CPU24は、選択したシアン画素の階調値の合計が閾値を超えるか否か判断する(ステップS343)。マゼンダドットの発生する位置を(1,1)とすると対応するシアン入力の階調値は“40”なので、閾値“255”を超えずに“NO”が選択される。
【0209】
次いで、選択したシアンの画素位置を“0”にする(ステップS344)。そして、ワーキングメモリ280に減算した階調値“60”を格納する。次いで、メモリ280に格納した階調値が閾値と等しいか否か判断される(ステップS345)が、この場合は等しくないので、“NO”が選択され、再びステップS342に移行する。
【0210】
次いで、CPU24は、マゼンダドットに最も近いシアン画素を選択する(S342)が、これも階調値を“0”にした画素の上下左右の4画素を選択することにする。階調値の合計は、“300”で閾値を超えるので、ステップS343で“YES”が選択されて、ステップS346に移行する。
【0211】
ステップS346において、減算すべき減算量の演算を行うが、シアンの場合と同様に、均等に各画素から階調値を減算する。49、49、49、48づつ、選択した4つの画素から階調値を減算することにし、各画素から実際に階調値の減算を行う(ステップS347)。
【0212】
次いで、図23に戻り、上述と同様に処理を行うことになる。その結果、図33の右から2番目の図及び右図に示すようにシアン出力データと、マゼンダ出力データとを得ることができる。この場合も同様に、シアンとマゼンダとは互いに重なり合ってドットが生成されることがない。そのため、視覚的に快適な印刷出力を得ることができる。
【0213】
以上、3つの各処理によって得られた再生データは、CPU24によってパルス幅変調され、ドットごとにレーザーパルス駆動有り又は無しの駆動データに変換されて、印刷エンジン22に出力される。そして、印刷エンジン22において、この駆動データに基づいて印刷媒体への印刷が行われるのである。
【0214】
図34乃至図37は、実際に印刷を行った場合の印刷出力の例を示す。図34(a)は、入力階調値の小さい(ドット密度が低い)マゼンダを優先してハーフトーン処理をし、減算処理後のシアン濃出力データとシアン淡出力データとから構成されるシアン出力データの印刷出力の例である。図34(b)は、入力階調値の小さい(ドット密度が低い)シアンを優先してハーフトーン処理をし、減算処理後のマゼンダ濃出力データとマゼンダ淡出力データとから構成されるマゼンダ出力データの印刷出力の例である。そして、図35は、シアン出力データとマゼンダ出力データとを重ね合わせた印刷出力の例である。図35に示すように、2つの出力ドットを重ね合わせても、2つのドットが重なる部分が少なく、さらにシアンとマゼンダとのドット間距離も均一に保たれ、粒状的なドットの生成を抑えた快適な印刷出力を得ることが可能となる。
【0215】
これに対して、図36(a)は、入力階調値の大きい(ドット密度が高い)マゼンダを優先して処理をし、演算処理後のシアン濃出力データとシアン淡出力データとから構成されるシアン出力データの印刷出力の例である。図36(b)は、入力階調値の大きい(ドット密度が小さい)シアンを優先して処理をし、演算処理後のマゼンダ濃出力データとマゼンダ淡出力データとから構成されるマゼンダ出力データの印刷出力の例である。そして、図37は、この2つのデータを重ね合わせた印刷出力の例である。図37に示すように、ところどころにシアンとマゼンダのドットが重なり合って粒状的なドットが発生し、これが視覚に入り易く、図35と比較して、快適な印刷出力が得られているとはいえない。
【0216】
このように本発明では、シアンとマゼンダとでドットが重なることによる、粒状的な印刷出力を抑え、シアンとマゼンダとでドット間距離が一定に保たれ、視覚的に快適な印刷出力を得ることが可能になる。
【0217】
なお、上述したように本発明は、図1の画像出力装置にて処理が行われるとして説明したが、例えば図38に示すような他のシステムにおいても適用される。すなわち、図38に示すように、ホストコンピュータ10内で、色変換処理211、ハーフトーン処理212を行い、その処理後のデータを画像出力装置20に出力するようにしている。この場合、上述したディザ処理、誤差拡散処理、CC法による処理は、いずれもホストコンピュータ10内のハーフトーン処理部212で行われることになる。
【0218】
また、画像出力装置20としてレーザドライバ221等を利用したレーザプリンタの例で説明したが、他にもイエロー、マゼンダ、シアン、ブラックのインクを吐出させて印刷を行うインクジェットプリンタや、さらにバブルジェット(登録商標)プリンタでも本発明は適用され、同様の効果を奏することができる。
【図面の簡単な説明】
【図1】本発明が適用されるシステム全体の構成を示す図である。
【図2】画像出力装置の構成図を示す図である。
【図3】シアンとマゼンダの印刷出力を模式的に示した図である。
【図4】本発明が適用される処理全体の動作を示すフローチャートである。
【図5】本発明が適用される処理全体の動作を示すフローチャートである。
【図6】RAM26の内部構成の例を示す図である。
【図7】閾値マトリックスの例を示す図である。
【図8】RAM26の内部構成の例を示す図である。
【図9】RAM26の内部構成の例を示す図である。
【図10】RAM26の内部構成の例を示す図である。
【図11】減算処理の動作を示すフローチャートである。
【図12】RAM26の内部構成の例を示す図である。
【図13】RAM26の内部構成の例を示す図である。
【図14】RAM26の内部構成の例を示す図である。
【図15】RAM26の内部構成の例を示す図である。
【図16】RAM26の内部構成の例を示す図である。
【図17】RAM26の内部構成の例を示す図であると拡散マトリックスの例を示す図である。
【図18】RAM26の内部構成の例を示す図である。
【図19】RAM26の内部構成の例を示す図である。
【図20】RAM26の内部構成の例を示す図である。
【図21】RAM26の内部構成の例を示す図である。
【図22】RAM26の内部構成の例を示す図である。
【図23】CC法による処理の動作を示すフローチャートである。
【図24】シアンドット生成処理を示すフローチャートである。
【図25】シアンドット生成処理を示すフローチャートである。
【図26】マゼンダドット生成処理を示すフローチャートである。
【図27】マゼンダドット生成処理を示すフローチャートである。
【図28】RAM26の内部構成の例を示す図である。
【図29】RAM26の内部構成の例を示す図である。
【図30】RAM26の内部構成の例を示す図である。
【図31】RAM26の内部構成の例を示す図である。
【図32】RAM26の内部構成の例を示す図である。
【図33】RAM26の内部構成の例を示す図である。
【図34】本発明による印刷出力の例である。
【図35】本発明による印刷出力の例である。
【図36】入力階調値の高い方を優先した場合の印刷出力の例である。
【図37】入力階調値の高い方を優先した場合の印刷出力の例である。
【図38】本発明が適用される他のシステム全体の構成を示す図である。
【符号の説明】
10 ホストコンピュータ 20 画像出力装置 21 画像処理部 211 色変換部 212 ハーフトーン処理部 213 パルス幅変調部 22 印刷エンジン 24 CPU 25 ROM 26 RAM 261a シアン入力データ格納領域 261b マゼンダ入力データ格納領域 262a シアン淡データ格納領域 262b マゼンダ淡データ格納領域 263a シアン淡データ+マゼンダ濃データ格納領域 263b シアン濃データ+マゼンダ淡データ格納領域 264 シアン淡出力データ格納領域 265 合計階調値格納領域 266 マゼンダ濃出力データ格納領域 267 マゼンダ淡出力データ格納領域 268 シアン濃出力データ格納領域 269a シアン出力データ格納領域 269b マゼンダ出力データ格納領域 270 拡散誤差格納領域
【発明の属する技術分野】
本発明は、カラープリンタなどの画像出力装置における階調画像データのハーフトーン処理に関する。詳しくは、入力階調値を加算し、ドット生成時にドット周辺から加算した階調値を減算して処理を行うハーフトーン処理に関する。
【0002】
【従来の技術】
従来から、プリンタなどの画像出力装置は、各画素ごとに多値の階調値を有する階調データに対して、ドットの有無を表す2値の値に変換処理して印刷用紙に印刷を行うようになされている。一般には、多値の階調値を2値の値に変換する処理のことをハーフトーン処理と称されている。
【0003】
かかるハーフトーン処理の方法としては、所定の閾値が格納された閾値マトリックスを利用して、入力階調値が閾値よりも大きいか小さいかにより2値化するディザ法や、同様に閾値を設定しその閾値よりも大きいか小さいかにより2値化するとともにその誤差分をまわりの画素の階調値に加算して処理を進める誤差拡散法などがある。
【0004】
さらに、入力画像の各画素の階調値の合計が所定の閾値になるまでセルを構成する画素を選択し、セルの中心位置にドットを生成させるようにしたハーフトーン処理も知られている(例えば、特許文献1)。
【0005】
【特許文献1】
特開平11−27528号公報
【0006】
【発明が解決しようとする課題】
しかしながら色変換後のハーフトーン処理において、シアン(C)とマゼンダ(M)とは、入力階調値がともに近接した値を有している場合が多く、シアンとマゼンダそれぞれにハーフトーン処理を行うと、印刷用紙上でシアンのドットとマゼンダのドットとが重なったりするなど粒状的なドットを発生させていた。かかるドットは人間の視覚に入り易く、視覚的に不快な印刷出力となっていた。
【0007】
また、上述した特開平11−27528においても、セルを構成する画素の選択を所定のテーブルを用いて行っているが、テーブル内で左側に存在する画素は既に処理済みの場合が多く、結果的に生成されるセルが歪んだ形となってしまう。かかる場合に、セルの中心にドットを生成させるとある部分では隣のドットを重なって形成されてしまうことになる。シアンとマゼンダに対して、それぞれかかる処理を行うと、ドットのばらつきが少ないため、同様にある部分では重なったり近寄って発生するなど視覚的に不快な印刷出力となっていた。
【0008】
そこで、本発明の目的は、シアンとマゼンダのドットが印刷用紙上である部分だけ高密度に発生することによる粒状的なドットの生成を抑えるとともに、シアンとマゼンダとのドット間距離を一定に保つことで、視覚的に快適な印刷出力を得ることを目的とするものである。
【0009】
【課題を解決するための手段】
上記の目的を達成するために、本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、第1のデータ又は第2のデータのうちレベル値の低い第1のデータ又は第2のデータの成分から先にM種類のレベル値を有するデータに変換する第1の変換手段と、レベル値の低い第1のデータ又は第2のデータの成分のレベル値をそれぞれレベル値の高い第2のデータ又は第1のデータの成分に加算する加算手段と、加算手段で加算した第1のデータ又は第2のデータの成分に対しM種類のレベル値に変換した画素に対応する画素において当該画素のレベル値から所定値を減算する減算手段と、減算手段で減算した第1のデータ又は第2のデータの成分に対して、M種類のレベル値を有するデータに変換する第2の変換手段と、を備えることを特徴としている。これにより、M種類のレベル値のうち、レベル値が0でない第1のデータ又は第2のデータの画素周辺に、それぞれ第2のデータ又は第1のデータのM種類の0でないレベル値が与えられた画素が存在する確率が少なくなり、例えば、このレベル値にドットを付与するよう印刷しても第1のデータと第2のデータのドットが重ならず、しかも2つのデータにおけるドット間距離が保たれ視覚的に快適な印刷出力を得ることが可能となる。
【0010】
さらに、本発明は、上記画像処理装置において上記第1の変換手段と上記第2の変換手段は、所定の閾値が格納された閾値マトリックスを用いて、レベル値の低い第1のデータ又は前記第2のデータの成分、及び減算手段で減算した第1のデータ又は第2のデータの成分に対して、それぞれ各レベル値と閾値とを比較してM種類のレベル値を有するデータに変換する、ことを特徴としている。これにより、例えば、閾値マトリックスを利用してディザ処理を行っても、同様に視覚的に快適な印刷出力を得ることができる。
【0011】
さらに、本発明は、上記画像処理装置において上記第1の変換手段は、第1のデータに対して第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、第2のデータに対して第1のデータのレベル値と比較したときのレベル値が低い成分と高い成分に分離し、レベル値の低い成分の第1のデータ又は第2のデータに対してM種類のレベル値を有するデータに変換する、こと特徴としている。これにより、例えば、レベル値の低い成分から先にディザ処理を行うことで、M種類のレベル値を先に与えることができ、後でレベル値の高い成分の減算処理を行うことで、ドットが重ならずしかも入力レベル値に忠実な印刷出力を得ることができる。
【0012】
さらに、本発明は、上記画像処理装置において上記加算手段は、第1の変換手段で変換を行わなかった第1のデータ又は第2のデータのうち、分離したレベル値の高い成分を有する第1のデータ又は第2のデータに対して、それぞれレベル値の低い前記第2のデータ又は前記第1のデータの成分を加算する、ことを特徴としている。これにより、例えば、M種類のレベル値が与えられた第1のデータ又は第2のデータとは異なる方の第2のデータ又は第1のデータに対して、後で減算処理を行うことで、同様にドットが重ならず、ドット間距離が保たれた快適な印刷出力を得ることができる。
【0013】
さらに、本発明は、上記画像処理装置において第1の変換手段と第2の変換手段は、レベル値の低い第1のデータ又は第2のデータの成分、及び減算手段で減算した第1のデータ又は第2のデータの成分に対して、それぞれ各レベル値と所定の閾値とを比較してM種類のレベル値を有するデータに変換するとともに、M種類のレベル値に変換したときの誤差分を第1のデータ又は前記第2のデータのレベル値に加算して前記閾値と比較する、ことを特徴としている。これにより、例えば、誤差拡散法によるハーフトーン処理を行っても同様に、ドットが重ならず、ドット間距離が一定に保たれた快適な印刷出力を得ることができる。
【0014】
さらに、本発明は、上記画像処理装置において第1の変換手段と第2の変換手段は、拡散マトリックスに格納された誤差分の値を拡散させる比率に基づいて各画素に前記誤差分を拡散させる、ことを特徴としている。これにより、例えば、拡散マトリックスの比率に忠実に誤算分をまわりの画素に拡散させることができる。
【0015】
さらに、本発明は、上記画像処理装置において第1の変換手段と第2の変換手段は、それぞれ、レベル値の低い第1のデータの画素若しくは第1のデータの画素を選択し、又は減算手段で減算した第1のデータの画素若しくは第1のデータの画素を選択し、選択した画素ごとのレベル値の総和が閾値となるまで未処理画素を選択して画素群を生成する生成手段と、生成した画素群の所定画素に対してM種類のレベル値を付与する付与手段と、をさらに備えることを特徴としている。これにより、例えば、ドット間距離が一定に保たれ快適な印刷出力を得る。
【0016】
さらに、本発明は、上記画像処理装置において第1の変換手段と第2の変換手段は、さらに、レベル値の低い第1のデータ又は第2のデータの画素を選択し、又は減算手段で減算した第1のデータ又は第2のデータの画素を選択し、選択した画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で生成した画素群の重心位置を決定する重心位置決定手段と、画素群重心決定手段で決定した重心に位置する画素に前記M種類のレベル値を付与する付与手段とを備え、画素群生成手段は、画素群重心決定手段で決定した重心から最も近い画素を画素ごとの階調画像データ値の総和が閾値以上となるまで選択し続けることにより画素群を生成する、ことを特徴としている。これにより、例えば、複数の画素から構成されるセルの重心にドットを生成させる方法によるハーフトーン処理を行っても、同様にドットが重ならずドット間距離が一定に保たれた快適な印刷出力を得ることが可能となる。
【0017】
さらに、本発明は、上記画像処理装置において画素群重心位置決定手段は、重心位置決定手段で決定した重心位置から最も近い画素が複数あるときは、ランダムに選択することを特徴としている。これにより、複数の画素から構成されるセルが円状に成長し、ドット間距離を一定に保つことができる。
【0018】
さらに、本発明は、上記画像処理装置において第1のデータ又は第2のデータは、シアンデータ又はマゼンダデータである、ことを特徴としている。これにより、例えば、シアンとマゼンダとでドットが重ならず、しかもシアンとマゼンダとでドット間距離が一定に保たれた快適な印刷出力を得ることができる。
【0019】
また、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、第1のデータを第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、第2のデータを第1のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離し、第1のデータのレベル値の低い成分と第2のデータのレベル値の高い成分とを加算して第3のデータを生成するとともに、第1のデータのレベル値の高い成分と第2のデータのレベル値の低い成分とを加算して第4のデータを生成する加算手段と、第1のデータのレベル値の低い成分又は第2のデータのレベル値の低い成分をM種類のレベル値を有するデータに変換する第1の変換手段と、M種類のレベル値に変換された画素に対応する、第3のデータ又は第4のデータの画素に対し当該画素のレベル値から所定値を減算する減算手段と、減算した第3のデータ又は第4のデータをM種類のレベル値を有するデータに変換する第2の変換手段と、を備えることを特徴としている。これにより、ディザ処理や誤差拡散処理によるハーフトーン処理によっても、M種類のレベル値を与えられた第1のデータ又は第2のデータの画素周辺に、それぞれ第2のデータ又は第1のデータのM種類のレベル値が与えられた画素が存在する確率が少なくなり、例えば、このレベル値にドットを付与するよう印刷しても第1のデータと第2のデータのドットが重ならず、しかも2つのデータにおけるドット間距離が保たれ視覚的に快適な印刷出力を得ることが可能となる。
【0020】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、第1のデータと第2のデータとでレベル値が低い方の初期画素を選択し、選択した初期画素の存在する第1のデータ又は第2のデータで画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素にM種類のうち所定のレベル値を付与する第1の付与手段と、画素群の生成で選択した画素のレベル値を、レベル値の高い第2のデータ又は第1のデータの成分に加算する加算手段と、所定のレベル値を付与された画素に対応する、加算手段で加算した第2のデータ又は第1のデータの画素に対してそのレベル値を減算する減算手段と、減算した第2のデータ又は第1のデータに対して、画素を選択し選択した画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第2の付与手段と、を備えることを特徴としている。これにより、重心を利用したハーフトーン処理によっても、M種類のレベル値を与えられた第1のデータ又は第2のデータの画素周辺に、それぞれ第2のデータ又は第1のデータのM種類のレベル値が与えられた画素が存在する確率が少なくなり、例えば、このレベル値にドットを付与するよう印刷しても第1のデータと第2のデータのドットが重ならず、しかも2つのデータにおけるドット間距離が保たれ視覚的に快適な印刷出力を得ることが可能となる。
【0021】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、第1のデータ又は第2のデータのうち、レベル値の低い第1のデータ又は第2のデータの成分から先にM種類のレベル値を有するデータに変換する第1の変換工程と、レベル値の低い第1のデータ又は第2のデータの成分のレベル値を、それぞれレベル値の高い第2のデータ又は第1のデータの成分に加算する加算工程と、加算手段で加算した第1のデータ又は第2のデータの成分に対し、M種類のレベル値に変換した画素に対応する画素において当該画素のレベル値から所定値を減算する減算工程と、減算手段で減算した第1のデータ又は第2のデータの成分に対して、M種類のレベル値を有するデータに変換する第2の変換工程と、を備えることを特徴としている。
【0022】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、第1のデータを第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、第2のデータを第1のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離し、第1のデータのレベル値の低い成分と第2のデータのレベル値の高い成分とを加算して第3のデータを生成するとともに、第1のデータのレベル値の高い成分と第2のデータのレベル値の低い成分とを加算して第4のデータを生成する加算工程と、第1のデータのレベル値の低い成分又は第2のデータのレベル値の低い成分をM種類のレベル値を有するデータに変換する第1の変換工程と、M種類のレベル値に変換された画素に対応する、第3のデータ又は第4のデータの画素に対し当該画素のレベル値から所定値を減算する減算工程と、減算した第3のデータ又は第4のデータをM種類のレベル値を有するデータに変換する第2の変換工程と、を備えることを特徴としている。
【0023】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、第1のデータと第2のデータとでレベル値が低い方の初期画素を選択し、選択した初期画素の存在する第1のデータ又は第2のデータで画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素にM種類のうち所定のレベル値を付与する第1の付与工程と、画素群の生成で選択した画素のレベル値を、レベル値の高い第2のデータ又は第1のデータの成分に加算する加算工程と、所定のレベル値を付与された画素に対応する、加算手段で加算した第2のデータ又は第1のデータの画素に対してそのレベル値を減算する減算工程と、減算した第2のデータ又は第1のデータに対して、画素を選択し選択した画素ごとのレベル値の総和が前記閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第2の付与工程と、を備えることを特徴としている。
【0024】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、第1のデータ又は第2のデータのうち、レベル値の低い第1のデータ又は第2のデータの成分から先にM種類のレベル値を有するデータに変換する第1の変換処理と、レベル値の低い第1のデータ又は第2のデータの成分のレベル値を、それぞれレベル値の高い第2のデータ又は第1のデータの成分に加算する加算処理と、加算手段で加算した第1のデータ又は第2のデータの成分に対し、M種類のレベル値に変換した画素に対応する画素において当該画素のレベル値から所定値を減算する減算処理と、減算手段で減算した第1のデータ又は第2のデータの成分に対して、M種類のレベル値を有するデータに変換する第2の変換処理と、をコンピュータに実行させるためのプログラムであることを特徴としている。
【0025】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、第1のデータを第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、第2のデータを第1のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離し、第1のデータのレベル値の低い成分と第2のデータのレベル値の高い成分とを加算して第3のデータを生成するとともに、第1のデータのレベル値の高い成分と第2のデータのレベル値の低い成分とを加算して第4のデータを生成する加算処理と、第1のデータのレベル値の低い成分又は第2のデータのレベル値の低い成分をM種類のレベル値を有するデータに変換する第1の変換処理と、M種類のレベル値に変換された画素に対応する、第3のデータ又は第4のデータの画素に対し当該画素のレベル値から所定値を減算する減算処理と、減算した第3のデータ又は第4のデータをM種類のレベル値を有するデータに変換する第2の変換処理と、をコンピュータに実行させるためのプログラムであることを特徴としている。
【0026】
さらに、上記目的を達成するために本発明は、画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるプログラムにおいて、第1のデータと第2のデータとでレベル値が低い方の初期画素を選択し、選択した初期画素の存在する第1のデータ又は第2のデータで画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素にM種類のうち所定のレベル値を付与する第1の付与処理と、画素群の生成で選択した画素のレベル値を、レベル値の高い第2のデータ又は第1のデータの成分に加算する加算処理と、所定のレベル値を付与された画素に対応する、加算手段で加算した第2のデータ又は第1のデータの画素に対してそのレベル値を減算する減算処理と、減算した第2のデータ又は第1のデータに対して、画素を選択し選択した画素ごとのレベル値の総和が前記閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第2の付与処理と、をコンピュータに実行させるためのプログラムであることを特徴としている。
【0027】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。図1は、本発明が適用されるシステム全体の構成を示す図である。全体としてホストコンピュータ10と、画像出力装置20とから構成される。
【0028】
ホストコンピュータ10は、アプリケーション部11とラスタライズ12とから構成される。アプリケーション部11では、文字データ、図形データ、ビットマップデータ等の印刷対象のデータが生成される。例えば、ホストコンピュータ10でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどが生成される。生成されたこれらのデータは、ラスタライズ部12へ出力される。
【0029】
ラスタライズ12では、アプリケーション部11から出力された印刷対象のデータを画素ごと(又はドットごと)に8ビットの階調データに変換される。本実施例では、R(レッド)、G(グリーン)、B(ブルー)の色毎で、各画素ごと8ビットの階調データが出力される。したがって、各画素ごと0から255までの値(レベル値)を有することになる。ラスタライズ12における階調データの生成は、実際にはホストコンピュータ10に実装されたドライバによって処理が行われる。ラスタライズ12から出力される階調データは、画像出力装置20に出力される。
【0030】
画像出力装置20は、全体として画像処理部21と印刷エンジン22とから構成される。画像処理部21では、ホストコンピュータ10から出力された階調データに対して色変換、ハーフトーン処理等を行い、処理後のデータが印刷エンジン22に出力され、この印刷エンジン22にて実際に印刷用紙等の記録媒体への印刷が行われる。
【0031】
画像処理部21は、色変換部211と、ハーフトーン処理部212と、パルス幅変換部213とから構成される。色変換部211は、ホストコンピュータ10から出力されるRGB階調画像データを受け取り、RGBからCMYKへの色変換を行う。ここで、Cはシアン、Mはマゼンダ、Yはイエロー、Kはブラックを示す。ここでは、CMYKの階調データは、各色8ビットづつの階調データであり、最大で256階調を有する。
【0032】
ハーフトーン処理部212は、色変換部211から出力されるCMYKの階調データに対して、2値(或いは4値)などの多値の値(レベル値)に変換し、量子化データを出力する。ハーフトーン処理としては、ディザ処理、誤差拡散処理、複数の画素からなるセルを構成してその重心にドットを生成させる重心利用した処理(Circular Cell法、以下CC法)がある。各処理の具体的な内容は後述する。
【0033】
パルス幅変調部213は、ハーフトーン処理部212から出力された量子化データが入力され、この量子化データに対してドットごとにレーザ駆動パルス有り又は無しの駆動データを生成する。そして、駆動データが印刷エンジン22に出力される。
【0034】
印刷エンジン22は、レーザドライバ221とレーザーダイオード(LD)222とから構成される。レーザドライバ221は、入力された駆動データから、駆動パルスあり又はなし等を示す制御データを生成し、レーザーダイオード222に出力する。レーザーダイオード222は、レーザドライバ221から出力された制御データに基づいて駆動され、さらに図示しない感光ドラムや転写ベルトが駆動されて、実際に印刷用紙等の記録媒体にホストコンピュータ10からのデータが印刷されることになる。
【0035】
次に図2を参照して、画像出力装置20の具体的構成について説明する。ここで、図1の画像出力装置20のうち、色変換処理部211、ハーフトーン処理部212及びパルス幅変調部213は、図2におけるCPU24、ROM25、及びRAM26に対応する。
【0036】
画像出力装置20は、全体として、入力インターフェース(I/F)23、CPU24、ROM25、RAM26、印刷エンジン22とから構成され、バスを介して互いに接続されている。入力I/F23は、ホストコンピュータ10と画像出力装置20とのインターフェースの役割を果たす。入力I/F23には、所定の伝送方式により伝送された、ホストコンピュータ20からのRGB階調データが入力され、画像出力装置20で処理できるデータに変換される。RGB階調データは、一旦RAM26に格納される。
【0037】
CPU24は、バスを介して入力I/F23、ROM25、RAM26、印刷エンジン22と接続され、ROM25に格納されたプログラムを読み出して、色変換、ハーフトーン処理等の各種処理を行う。その詳細は、後述する。RAM26は、CPU24で実行される各処理のワーキングメモリとして役割を果たし、処理後の各種データが格納される。そして、印刷エンジン22のレーザドライバ221を駆動させるための駆動データも格納される。RAM26の具体的構成等も後述する。
【0038】
印刷エンジン22は、図1の印刷エンジンと同様の構成で、RAM26に格納された駆動データがCPU24の制御により入力されて、上述した印刷が行われることになる。
【0039】
次に、以上のように構成された画像出力装置20における処理の動作について説明する。ここで処理の動作は、CMYKの階調データに変換された色変換処理後の階調データに対するハーフトーン処理について以下説明する。よって、以下に説明する動作において、入力I/F23にRGB階調データが入力され、CPU24の制御により、CMYK階調データがRAM26に格納されたものとして説明する。また、ハーフトーン処理として上述したように、ディザ法、誤差拡散法、及びCC法の3つの方法を用いた処理についてそれぞれ説明することにする。
[ディザ法を用いたハーフトーン処理]
まず、ディザ法を用いたハーフトーン処理について説明する。一般にディザ法とは、濃淡画像の階調を再現する2値化の手法の1つである。各画素の入力階調値に対して、閾値マトリックスと呼ばれる変換テーブルを用いて、テーブル内に格納された閾値より、その入力階調値の方が大きいとドット生成を示す再生データを生成し、そうでないとドットなしを示す再生データ(量子化データ)を生成する。そして、この再生データをもとに印刷用紙等に印刷を行うようにするものである。
【0040】
本実施例においても、同様に閾値マトリックスを用いてディザ処理を行うものである。ただし、最初にシアン入力に対して、入力階調値の小さい(ドット密度が低くなる)シアンデータを生成し、そのデータに対してディザ処理を行う。そして、入力階調値の小さいシアンデータと入力階調値の高い(ドット密度が高くなる)マゼンダデータの和から、このディザ処理後のシアンデータを減算して、入力階調値の高いマゼンダデータを生成する。
【0041】
このようにドット密度が低くなるであろう入力階調値の低い方から先にディザ処理を行い、その後減算処理を行って、色の異なる方の入力階調値の高いデータを得る。そして、このデータにディザ処理を行い、再生データを得るのである。
【0042】
このように階調値の小さい方を優先的に処理し、その後減算処理をしているのは、入力階調値の小さいシアンデータに対して生成されるドット周辺に入力階調値の高いマゼンダのドットを生成させないようにするためである。これにより、印刷出力おいて、ある部分だけシアンのドットとマゼンダのドットとが重なり合うことによる粒状的なドット生成を抑えることができ、さらにシアンドットとマゼンダドットによるモアレ縞の発生を抑えることができ、快適な印刷出力を得ることが可能となる。さらに、減算処理を行っているため、シアンとマゼンダのドット間距離が一定に保たれるのである。
【0043】
また、シアンとマゼンダのドットの重なりを制御すると、制御しない場合と比較して、同一のインク又はトナー量でも、彩度の強い鮮やかな色が得ることができる。これにより、画像出力装置20の色再現範囲を拡大することができる。そして、減算後に得られる入力階調値の高いマゼンダデータにディザ処理を行う。
【0044】
また、同様に、入力階調値の小さい(ドット密度の低い)マゼンダデータにディザ処理を行い、入力階調値の小さいマゼンダデータと階調値の高いシアンデータとの和から、ディザ処理後のそのマゼンダデータを減算処理する。この場合も、入力階調値の小さいマゼンダデータに対して生成されるドット周辺に、入力階調値の高いシアンデータのドットを生成させないようにするためである。その後、減算後に得られる階調値の大きいシアンデータにディザ処理を行う。
【0045】
最終的に得られた、4つのディザ処理後のデータ、すなわち、階調値の大小2つのシアンの再生データと、大小2つのマゼンダの再生データに対して、それぞれ和を取って、シアンの再生データとマゼンダの再生データとを生成することになる。この再生データに基づいて、パルス幅変調213を行い駆動データを得て、印刷エンジン22にてシアンとマゼンダのドットが印刷用紙に印刷されることになる。
【0046】
図3には、印刷用紙上のドットを模式的に表した図を示す。図3(a)は、シアン、マゼンダ各入力に対しそのままディザ処理を行った場合の例を示し、図3(b)は減算処理を行ってディザ処理を行った場合の例を示す。丸と十字はシアンドットとマゼンダドットを示すもので、四角は両者が重なっているドットを示すものである。図3(a)に示すように減算処理をしないと、シアンとマゼンダが重なってドットが打たれる場合もあり、ドットの密度がバラつき視覚に入り易く、これが粒状的なドットを生成させる原因となり、快適な印刷出力を得ることができない。一方、減算処理後のドットはほぼ均等に生成さるためドット間距離が一定に保たれ、ドットが重なり合う部分がなく視覚的に快適な印刷出力を得ることができるのである。
【0047】
なお、本実施例においては、シアンとマゼンダについての処理を説明し、イエロー(Y)とブラック(K)は、高低2つのデータに分離して減算処理等を行わずに、それぞれに示すハーフトーン処理(ディザ法、誤差拡散法、CC法による処理)を行って、再生データを得るものとする。
【0048】
以上述べた内容についての具体的な処理について以下説明することにする。図4及び図5は、その動作を示すフローチャートである。図6乃至図14は、RAM26に格納された各データの内容を示す。本処理が開始される前に、各CMYKの階調データがすでにRAM26に格納されているものとする。その例を図6(a)に示す。
【0049】
このRAM26は、複数の領域を有し、図6(a)に示す例は、シアンの入力階調データと、マゼンダの入力階調データが各領域の各座標位置に格納されている例を示す。それぞれ、シアン入力データ格納領域261aと、マゼンダ入力データ格納領域261bとする。各領域261a、261bは、それぞれm行n列の2次元構造を有し、各座標位置はホストコンピュータ10で生成された画像の画素位置に対応するものである。例えば、シアンの入力階調データが入力された領域の(n、m)の位置に格納されたデータは、全体画像における(n、m)の位置に位置する画素のシアンの階調値に対応するものである。マゼンダの場合も全く同様である。
【0050】
ここでは、説明を簡単にするため各領域とも6行6列で表現されているが、画像1フレーム分の各階調値を格納できる構成であってもよいし、これよりも少ない構成であってもよい。
【0051】
図4に戻り、CPU24は、本処理を実行するためのプログラムをROM25から読出すことによって、処理が開始されることになる(ステップS10)。次いで、CPU24は、シアン、マゼンダの各入力階調データに対して、シアン淡(Cyan淡)、シアン濃(Cyan濃)、マゼンダ淡(Magenta淡)、マゼンダ濃(Magenta濃)の4つのデータに分離する(ステップS11)。ここでシアン淡とは、シアンとマゼンダの各入力階調値を画素毎に比較して、マゼンダよりも淡い(入力階調値の低い)シアンのデータである。
【0052】
具体的には、図6(a)のシアン入力データ格納領域261aの各位置に格納された階調値と、マゼンダ入力データ格納領域261bの対応する位置に格納された階調値とを比較し、シアンの方がマゼンダより階調値が大きいと“0”、少ないとシアンの入力階調値を、CPU24によってシアン淡データ格納領域262aに格納されることになる。
【0053】
例えば、シアン入力の(0,0)とマゼンダ入力の(0,0)との階調値を比較すると、シアンの方がマゼンダよりも階調値が大きいので“0”、シアン入力の(3,0)とマゼンダ入力の(3,0)とでは、シアンの階調値“40”がマゼンダの階調値“60”より少ないので、シアンの階調値である“40”、となる。
【0054】
このように、演算されたシアン淡データは、同じRAM26内の所定領域内にあるシアン淡データ格納領域262aに、CPU24によって格納されることになる(図6(b)左図参照)。この領域262aも、シアン入力データ領域261aと同様に2次元構造を有し、各座標位置が全体画像の画素位置に対応するものである。
【0055】
また、マゼンダ淡データとは、シアンとマゼンダの各入力階調値を画素毎に比較して、シアンよりも淡いマゼンダのデータである。例えば、図6(a)で(0,0)に位置する画素の入力階調値は、シアンは“60”、マゼンダは“40”で、マゼンダの方がシアンより階調値が少ないので“40”となり、(3,0)に位置する画素の入力階調値は、シアンは“40”、マゼンダは“60”でマゼンダの方が大きいので“0”となる。この分離したシアン淡データも、同様にRAM26内のマゼンダ淡データ格納領域262bの対応する各座標位置に格納される(図6(b)左から2番目参照)。この領域262bも領域262aと同様に、各座標位置が全体画像の各画素位置に対応するものである。
【0056】
さらに、シアン濃データは、シアンとマゼンダの入力階調値を比較して、シアンの方が、階調値が大きいとその値、少ないと“0”を、シアン濃データ格納領域262cの対応する位置に格納したものである。マゼンダ濃データは、マゼンダの方が、階調値が大きいとその値、少ないと“0”を、マゼンダ濃データ格納領域262dの対応する画素位置に格納したデータである(図6(b)参照)。なお、このように生成したシアン濃データとマゼンダ濃データとは、その後本実施例ではディザ処理等は行わない(ただし、減算処理後に生成したシアン濃データとマゼンダ濃データに対してディザ処理は行う)。そのため、この2のデータをRAM26に格納せず、演算のみCPU24で行い、次のステップ(S12)でのデータ生成でRAM26に格納させるようにしてもよい。
【0057】
図4に戻り、これら4つのデータに分離した後CPU24は、シアン淡とマゼンダ濃の2つのデータの和(C淡+M濃)と、シアン濃とマゼンダ淡の2つのデータの和(C濃+M淡)の各データを生成する(ステップS12)。図6(b)に示すように4つのデータを生成して、シアン淡とマゼンダ濃の2つのデータの各画素位置に対応する階調値の和をとってシアン淡+マゼンダ濃(Cyan淡+Magennda濃)のデータを生成する(図6(c)左図参照)。同様にシアン濃とマゼンダ淡の各画素位置に対応する階調値の和からシアン濃+マゼンダ淡(Cyan濃+Magenda淡)のデータを生成する(図6(c)右図参照)。これら生成したデータは、図6(a)の場合と同様にCPU24によってRAM26の所定領域263a、263bに格納される。この領域263a、263bも同様に各座標位置が全体画像の各画素位置に対応するものである。
【0058】
図4に戻り、次いでCPU24は、ステップS11で生成したシアン淡データに対してディザ処理を行う(ステップS13)。本実施例においては、シアン淡データ格納領域262aに格納された階調値に対して、閾値マトリックスを使用してディザ処理を行う。
【0059】
このマトリックスの例を図7に示す。図7に示すように、このマトリックスは3行3列で構成される。そして、CPU24は、マトリックスの閾値と階調値とを各々比較し、階調値が閾値よりも大きいとドット生成を示す再生データ(量子化データ、ここでは、“255”)をRAM26のシアン淡出力が格納されるシアン淡出力データ格納領域264に格納する。シアン淡出力データ格納領域264も同様に各座標位置が全体画像の各画素位置に対応するものである。
【0060】
図8乃至図10にその具体例を示す。なお、このマトリックスは、例えばROM25に格納され、CPU24がROM25から閾値と、シアン淡データ格納領域262aに格納された階調値とを読み出して各々比較することで処理が行われる。
【0061】
まず、CPU24は、ROM25に格納された閾値マトリックスの(0,0)の位置に格納された閾値“225”と、RAM26のシアン淡データ格納領域262aに格納された(0,0)に位置する階調値“0”とを読み出す。そして、CPU24は両者を比較し、マトリックスの閾値の方が、値が大きいので、シアン淡出力データ格納領域264の対応する座標位置(0,0)にドットを生成しないことを示す“0”を格納する(図8(a)参照)。
【0062】
次に、CPU24は、シアン淡データ格納領域262aの(1,0)に格納された階調値“0”とROM25に格納された閾値マトリックスの(1,0)に位置する閾値“75”とを比較する。この場合も閾値の方が大きいので、CPU24は、シアン淡出力データ格納領域264の(1,0)の位置に“0”を格納することになる(図8(b)参照)。
【0063】
次いで、CPU24は、両者とも(2,0)に位置する値を読み出して、閾値“300”の方がシアン淡データ“0”よりも大きいので、シアン淡出力データ格納領域264に“0”を格納することになる(図9(a)参照)。
【0064】
次いで、CPU24は、シアン淡データ格納領域262aの(3,0)に位置する階調値“40”と、マトリックスの(0,0)に位置する閾値“0”とを比較する。閾値以下なので、シアン淡出力データ格納領域264の(3,0)に“0”を格納する(図9(b))。同様に、シアン淡データ格納領域262aの(4,0)と、マトリックスの(1,0)とに格納された値を比較して、閾値の方が大きいのでシアン淡出力データ格納領域264の(4,0)に“0”を格納されることになる(図9(c))。さらに、シアン淡格納領域262aの(5,0)とマトリックスの(2,0)に格納された値とを比較し、閾値の方が大きいので、シアン淡出力データ格納領域264の(5,0)の位置の双方に“0”が格納される(図10(a))。
【0065】
シアン淡入力データ格納領域262aの1行目の処理が終わると、CPU24は、次いで、2行目の処理を行う。この場合も1行目と同様に、シアン淡入力データ格納領域262aの(0,1)、(1,1)、(2,1)、(3,1)、(4,1)、(5,1)に格納された値と、マトリックスのそれぞれ(0,1)、(1,1)、(2,1)、(0,1)、(1,1)、(2,1)の閾値を比較する。ここで、シアン淡入力データ格納領域262aの(4,1)に格納された値は“40”で、マトリックスの閾値は“25”なので、階調値の方が閾値よりも大きいので、ドット生成を示す“255”を、CPU24によってシアン淡出力データ格納領域264の(4,1)の位置に格納されることになる。それ以外は、“0”となる(図10(b))。
【0066】
同様に、シアン淡入力データ格納領域262aの3行目、4行目と処理を進め、格納されたシアン淡データに対する処理が終了すると、シアン淡データである多値の階調データが2値のデータ(ここでは、0と255)に変換されることになる。但し、本実施例では、シアンそのものの入力階調値に対してではなく、マゼンダと比較した場合のシアンの淡いデータ(階調値が低いデータ)に対して行うことになる。後で、色が異なるマゼンダの濃いデータ(階調値が高いデータ)に減算処理を行って、シアンとマゼンダとでドット間距離を一定に保ち、ドットの重なりを防ぐためである。最初に濃いデータの方から行い、淡いデータに対して減算処理を行うと、淡いデータは生成されるドットの密度が低いため、本来ドットが打たれる位置にない位置に対しても減算処理を行う必要が生じ、入力階調値に忠実でないドットが生成される可能性があるからである。
【0067】
シアン淡データに対してディザ処理後のシアン淡出力データ格納領域264に格納された例を図10(c)に示す。図10(c)に示すようにシアン淡出力データ格納領域264の(4,1)と(4,4)の位置のみ、ドット生成を示す“255”が格納され、それ以外はドットを生成しないことを示す“0”が格納されることになる。
【0068】
図3に戻り、次いでCPU24は、シアン淡データとマゼンダ濃データとの和(C淡+M濃)から、シアン淡出力ドットの周囲の階調値を減算する処理を行う(ステップS14)。シアンのドット低密度の領域において生成されるドットと、マゼンダのドット高密度の領域で生成されるマゼンダのドットとが、重なってドットが打たれないようにするためである。このようにすることで、異なる色ドットの重なる確率を下げて、粒状的なドットの生成を抑え、快適な印刷出力を得ることが可能となる。
【0069】
具体的な処理について、図11にフローチャートを示し、RAM26への処理について図12乃至図13を用いて説明する。まず、CPU24は減算処理に移行すると(ステップS14)、C淡+M濃データの、C淡ドットに対応する位置の画素を選択する(ステップS15)。
【0070】
図12に具体例を示す。ステップS13で、シアン淡出力データを得て、シアン淡出力データ格納領域264に格納されたものが図12(a)の左図に示す。また、ステップS12で生成したシアン淡データとマゼンダ濃データの和を得て、領域263aに格納されたものが図12(a)の右図に示している。さらに、RAM26には、階調値の合計値を格納する合計値格納領域265を有し、CPU24によって選択した画素の階調値等が適宜この領域265に格納されるようになされている。
【0071】
このステップS140での対応画素の選択は、シアン淡出力データ格納領域264に格納された値の中で、ドット生成を示す“255”が格納された座標位置に対応するシアン淡とマゼンダ濃の和の画素を選択する。図12(a)に示す例では、領域263aのうち(4,1)に位置する画素が選択されることになる。
【0072】
図11に戻り、次いでCPU24は、選択画素の階調値が“255”を超えるか否か判断する(ステップS141)。図12(a)の例では、選択画素の階調値は“100”となるので、“255”を超えず、この場合は“NO”と判断される。
【0073】
“NO”が選択されると、次いでCPU24は、選択画素の階調値をすべて減算する(ステップS142)。図12(b)に示すようにシアン淡とマゼンダ濃のデータの和の対応する画素の階調値を“100”をすべて減算して“0”として、その位置に“0”を格納する。そして、CPU24は、減算済みの値である“100”を合計値格納領域265に格納する。
【0074】
次いで、CPU24は、減算した画素の周囲の未減算画素を選択する(ステップS143)。選択の方法としては、ここでは減算した画素の上下左右の未減算画素を選択することにする。図12(c)に示すように、選択すべき未減算画素として、(4,0)、(3,1)、(5,1)、(4,2)を選択することにする。もちろん、選択の方法として上下左右ではなく、右上、右下、左下、左上の4つの画素を選択するようにしてもよい。さらに、これら4つの画素と上下左右の4つの画素の計8つの画素を選択するようにしてもよい。
【0075】
次いで、CPU24は、選択した未減算画素の階調値の合計が、ステップS140で選択した画素の階調値を含めて“255”に達したか否か判断される(ステップS144)。図12(c)の例では、ステップS140で選択した画素の階調値は“100”、ステップS143で選択した画素の階調値の合計は、“400”で、“255”を超えるので、このステップS144では、“YES”が選択されることになる。
【0076】
次いで、CPU24は、各選択画素から均等に階調値を減算する(ステップS145)。減算は、例えば、“255”から合計値格納領域265に格納された値を減算し、残った値をステップS143で選択した未処理画素の数分で均等に振り分けるようにする。上述の例では、“255”から合計値格納領域265に格納された値“100”を減算すると、“155”となる。これをステップS143で選択した4つの画素で割り振ると、1画素あたり38.75となる。よって、4つの画素に対して39、39、39、38の階調値を減算するようにするようにすれば、均等に“155”だけ減算することになる。減算した後のシアン淡とマゼンダ濃データの例を図13(a)の中央に示す。シアン淡ドットの対応位置(4,1)は、“0”となり、まわりの画素((4,0)、(3,1)、(5,1)、(4,2)に位置する画素)の階調値も減算されていることを示す。
【0077】
次いで、CPU24は、ステップS146に移行し他のシアン淡ドットがあるか否か判断される。他にもシアン淡ドットがあれば、シアン淡とマゼンダ濃の和の対応位置の減算処理を行う必要があるからである。図13(b)に示すようにまだ、シアン淡出力データ格納領域264の位置(4,4)にドット生成を示す“255”が格納されているので、この場合“YESが選択され、処理は再びステップS140に移行し、上述の処理が繰り返されることになる。図13(b)の中央に同様に処理を行った結果を示す。
【0078】
図13(b)に示す場合では、再びステップS146に移行すると他にシアン淡ドットはないため、“NO”が選択されステップS15に移行することになる。一方、ステップS144で選択した未減算画素の階調値の合計が“255”を超えない場合(ステップS144で“NO”の場合)、さらに周囲の未減算画素を選択する(ステップS147)。選択の方法としては、例えば、シアン淡のドット生成位置の斜め周り方向を選択することが考えられる。図13(b)の中央の例では、(3,0)、(5,0)、(3,2)、(5,2)の位置する画素を選択する。選択した画素の階調値の合計が、“255”を超えれば、ステップS145に移行し、上述の処理が行われる。
【0079】
また、ステップS141で選択画素の階調値が“255”を超える場合(“YESの場合)、CPU24は、選択した画素の階調値を”255“だけ減算させる。同様にシアンのドット低密度の領域に打たれたドットの周辺に、マゼンダのドット高密度の領域でマゼンダのドットが打たれないようにするためである。さらに、シアンとマゼンダとでドット間距離を一定に保つためでもある。ここでは、シアン淡出力ドットの階調値の値”255“分だけ減算したので、処理は、ステップS146へ移行し、他にシアン淡ドットがあるか判断され、上述の処理が繰り返されることになる。
【0080】
ここで、減算処理を終了したシアン淡とマゼンダ濃データの和から、シアン淡出力データを減算したので、出力結果はマゼンダ濃データが出力されることになる(図13(c)の左図参照)。
【0081】
図4に戻り、CPU24は、このM濃データ(マゼンダ濃データ)に対してディザ処理を行う(ステップS15)。閾値マトリックスは、図13(c)の中央に示すもの(図7のマトリックスと同様)を用いて、ステップS13(図8乃至図10)と同様に各位置の階調値とマトリックス内の閾値との大小で、ドット生成か否かの値がマゼンダ濃出力データ格納領域266に格納されることになる。この領域266もRAM26の所定領域に存在し、各座標位置が全体画像の各画素位置に対応するものである。比較の結果、マゼンダ濃出力データ格納領域266で、(3,2)、(5,2)、(3,5)、(5,5)の位置にドット生成を示す“255”が格納され、それ以外はドットを生成しないことを示す“0”が格納される。
【0082】
次いで、CPU24は、マゼンダ淡(M淡)データに対してディザ処理を行う(ステップS16)。マゼンダ淡データは、ステップS11ですでに生成済みで、図14(a)の左図(図5(b)と同様)にその例を示す。このマゼンダ淡データに対しても、ステップS13(図8乃至図10)と同様に、図14(a)の中央に示す閾値マトリックスを使用(図7と同様)して、処理を行う。その結果を図14(a)の右図に示す。この出力結果は、RAM26の所定領域に設けられたマゼンダ淡出力データ格納領域267に格納される。この領域267も各座標位置は、全体画像の画素位置に対応するものである。マゼンダ淡の出力ドットは、(1,1)、(1,4)の位置に形成され、それ以外はドットを生成しない“0”が格納される。
【0083】
図4に戻り、次いでCPU24は、ステップS17に移行し、異なる色の濃い方のデータ、すなわち、シアン濃データを含む、シアン濃とマゼンダ淡の各データの和を取ったデータを用いて、減算処理を行う。減算処理のフローチャートを図11に示す。上述したステップS14での減算処理(シアン淡+マゼンダ濃からシアン淡出力を減算した場合の処理)と全く同様である。
【0084】
RAM26のメモリの状態を図14(b)から図15(a)に示す。図11のフローチャートを用いて順に説明する。まずCPU24は、減算処理に移行すると(ステップS17)、マゼンダ淡出力のドット生成を示す“255”の位置に位置する画素を選択する(ステップS140)。図14(b)に示す例では、(1,1)に位置する画素を選択することになる。
【0085】
次いで、CPU24は、ステップS140で選択した画素の階調値が“255”を超えるか否か判断する(ステップS141)。シアン濃とマゼンダ淡との和で対応する位置(1,1)の階調値は、“100”(図14(b)の中央参照)となっているので、 “NO”が選択される。
【0086】
次いで、CPU24は、ステップS142に移行し、ステップS140で選択した画素の階調値をすべて減算する。図14(b)の場合は、“100”すべて減算する。減算した値は、合計値格納領域265に格納されることになる。そして、まだ階調値の合計が“255”に達していないので、CPU24は、さらに未減算画素を選択する(ステップS143)。この場合も、選択対象は、ステップS140で選択された画素の上下左右の4つの未減算画素を選択する。図14(b)の場合は、シアン濃+マゼンダ淡データの(1,0)、(0,1)、(2,1)、(1,2)に位置する画素が選択される。
【0087】
次いで、CPU24は、ステップS144に移行し、選択画素の階調値の合計が“255”を超えるか否かを判断する。図14(b)に示す例では、マゼンダ淡出力の階調値は“255”で、シアン濃+マゼンダ淡データの選択した画素の階調値の合計は “500”(ステップS140で選択した画素の階調値“100”に、ステップS143で選択した画素の階調値“400”の和)となるので、“YES”が選択され、ステップS145に移行する。
【0088】
ステップS145において、CPU24は、ステップS143で選択した画素の階調値から均等に減算する。図14(c)に示す例では、シアン濃+マゼンダ淡データの(1,0)、(0,1)、(2,1)、(1,2)に位置する画素の階調値がそれぞれ、39、39、39、38だけ減算されて、61、61、61、62となる。なお、1つだけ38を減算する画素があるがこれはランダムで構わない。そして、減算した画素の階調値の合計“255”が合計値格納領域265に格納される。
【0089】
図11のフローチャートに戻り、次いで、CPU24は、他にマゼンダ淡出力データにドット生成を示す“255”があるか否か判断する(ステップS146)。図14(c)の例では、さらに、(1,4)の位置に“255”が格納されているので、“YES”が選択されて、ステップS140に移行する。そして、上述の処理を繰り返し、減算処理を行って、図15(a)の中央に示す状態に移行することになる。
【0090】
そして、ステップS146で他にマゼンダ淡出力データにドット生成を示すデータはないので、“NO”が選択されて、ステップS18に移行することになる。一方、ステップS144で選択画素の階調値の合計が“255”を超えないと(“NO”の場合)、ステップS147に移行しさらに周囲の未減算画素を選択する。これも上述の例と同様に、右上、右下、左下、左上にある画素を選択することになる。例えば図15(a)の例で、(1,4)にある画素の上下左右を選択しても“255”に達しないと、(0,3)、(2,3)、(0,5)、(2,5)の画素を選択する。さらに、この4つの画素を選択しても“255”に達しない場合には、さらに上下左右等を選択の幅を広げるようにすることでもよい。
【0091】
また、ステップS141で選択画素の階調値が“255”を超えると、ステップS140で選択した画素の階調値から“255”を減算した値が当該画素の階調値として以後の処理を行うことになる(ステップS148)。例えば、シアン濃+マゼンダ淡の(1,4)の画素の階調値が“300”のときは、“255”を減算した“45”が当該画素の階調値となる。そして、ステップS146へ移行し、上述の処理が繰り返されることになる。なお、図14(b)、(c)と同様に、シアン濃+マゼンダ淡データからマゼンダ淡出力データを減算したものは、シアン濃データとなる。
【0092】
次いで、CPU24は、減算済みシアン濃データにディザ処理を行う(図5、ステップS15)。閾値マトリックスを図15(b)の中央に、シアン濃データを左図に示す。マトリックスの各閾値は、図7等と同様である。また、処理自体もステップS13等と同様である。各閾値と階調値とを比較し、その出力結果をRAM26のシアン濃出力データ格納領域267に格納させる。この領域267も、各位置は全体画像の画素位置に対応している。図15(b)の右図がその出力結果であり、(0,2)、(2,2)、(0,5)、(2,5)にドット生成を示す“255”、それ以外の位置にはドットを生成しないことを示す“0”が、CPU24によって格納されることになる。
【0093】
次いで、CPU24は、ステップS19に移行し、ステップS13で処理を行ったディザ処理後のシアン淡出力データ(図10(c)の右図)と、ステップS18で処理したディザ処理後のシアン濃出力データ(図15(b)の右図)とを合成する。具体的には、CPU24は、ディザ後のシアン淡出力データとシアン濃出力データの対応する各座標位置で階調値の和を演算することになる。例えば、図10(c)に示すシアン淡出力データで(0,0)に格納された階調値“0”、同じ(0,0)に位置するシアン濃出力データ(図15(b)の右図)の階調値“0”であるので、この2つの階調値を加算すると“0”となり、シアン出力データ格納領域269aの(0,0)に格納する。同様に各位置の階調値をシアン濃出力とシアン淡出力とで階調値を加算すると、最終的には、図15(c)の左図の出力結果を得ることができる。
【0094】
図5のフローチャートに戻り、次いで、CPU24は、マゼンダ淡ドットとマゼンダ濃ドットとを合成する(ステップS20)。これも、ステップS19と同様にマゼンダ淡出力データ(図14(a)の右図参照)と、マゼンダ濃出力データ(図13(c)の右図参照)との対応する位置で階調値の和をとって、その値をマゼンダ出力データ格納領域269bに格納する。最終的には、図15(c)の右図の出力結果を得ることができる。
【0095】
シアン出力データ格納領域269aも、マゼンダ出力データ格納領域269bも、各座標位置が全体画像の各画素位置に対応するものである。図15(c)に示すように、シアンとマゼンダの出力ドットの位置(階調値“255”の位置)は、互いに重なり合っておらず、粒状的なドットの生成を防ぎ、ドット間距離が一定に保たれ、快適な印刷出力を得ることができるのである。
[誤差拡散法を用いたハーフトーン処理]
次に、本発明が適用される誤差拡散法を用いたハーフトーン処理について説明する。この誤差拡散法も、0から255までの256階調を有する画素に対して2値化(又は4値など)する場合の手法の一つである。例えば、閾値を“127”として、ある入力画素の階調値が“50”とすると、閾値以下なので2値化すると “0”となる。この場合、量子化値“0”に対して“50”(=50−0)の誤差が生じることになる。そこで、この誤差分をまわりの画素に拡散させて2値化を行う方法が、誤差拡散法である。以後これを繰り返し、閾値より大きいとドット生成を示す再生データを生成し、そうでないとドットなしを示す再生データを生成する。そして、この再生データをもとに印刷用紙等に印刷を行うようにするものである。
【0096】
この誤差拡散法の場合も、ディザ処理の場合と同様に、シアン淡入力データに誤差拡散処理を行ってシアン淡出力データをまず生成し、シアン淡出力ドットを得る。そして、シアン淡+マゼンダ濃データからシアン淡出力データの減算処理を行い、マゼンダ濃データを得る。このマゼンダ濃データに誤差拡散処理を行い、マゼンダ濃出力データを得る。さらに、マゼンダ淡入力データ対して誤差拡散処理を行い、マゼンダ淡出力データを得て、シアン濃+マゼンダ淡データから減算処理を行う。処理後のシアン濃データに対して誤差拡散処理を行い、シアン濃出力データを得る。そして、シアン淡出力データとシアン濃出力データの和からシアン出力データを得て、マゼンダ淡出力データとマゼンダ濃出力データとの和からマゼンダ出力データを得て、これらのデータからシアンとマゼンダのドットが印刷用紙に印刷されることになる。
【0097】
このようにドット密度が低くなるであろう入力階調値の低い方から先に誤差拡散処理を行い、その後減算処理を行って、色の異なる方の入力階調値の高いデータを得る。そして、このデータに誤差拡散処理を行い、再生データを得るのである。これらは、上述したディザ処理と同様である。例えば、入力階調値の小さいシアンデータに対して生成されるドット周辺に入力階調値の高いマゼンダのドットを生成させないようにするためである。これにより、印刷出力おいて、ある部分だけドットが高密度に生成されることによる粒状的なドット生成を抑えることができ、さらにシアンとマゼンダとでドット間距離が一定に保たれ、快適な印刷出力を得ることが可能となるのである。なお、ディザ処理のときの同様、誤差拡散処理でもシアン(C)とマゼンダ(M)に対してのみ、減算処理を含む処理を行い、ブラック(K)、イエロー(Y)に対しては減算処理を行わない通常の誤差拡散処理によりドット出力を得ることにする。
【0098】
この誤差拡散法による本発明のハーフトーン処理の動作を示すフローチャートを図4乃至図5、RAM26に格納されたデータの例を図16乃至図22に示す。このフローチャートに示すように、誤差拡散処理は、ディザ処理の場合とほぼ同様の処理を行うことになる。以下、詳細に説明する。
【0099】
本処理も同様に処理が開始される前に、各CMYKの各入力階調データがRAM26に格納されているものとする。そのうち、シアン(C)とマゼンダ(M)の例を図16(a)に示す。シアンの入力階調データは、シアン入力データ格納領域261aに格納され、マゼンダの入力階調データは、マゼンダ入力データ格納領域261bに格納される。各領域261a、261bともRAM26の所定の領域に存在し、各領域261a、261bの座標位置は、画像全体の画素位置に対応するものである。この場合も、6行6列で説明するが、勿論これよりも多くの位置から構成できるものでも、少ない構成でもよい。ディザ処理の場合と同様である。
【0100】
図4に示すように、CPU24は、本処理を実行するプログラムをROM25から読出し、処理を開始する(ステップS10)。次いで、ディザ処理の場合と同様に、シアン淡(Cyan淡)、マゼンダ淡(Magenta淡)、シアン濃(Cyan濃)、マゼンダ濃(Magenta濃)の4つのデータに分離する(ステップS11)。シアン淡データも、同様にシアン入力とマゼンダ入力とを比較し、階調値がシアンの方が低いとその値、逆の場合は“0”をシアン淡データ格納領域262aに格納する。その結果、図16(b)の最も左図の出力を得ることができる。
【0101】
同様に、マゼンダ淡データは、マゼンダの入力階調データとシアンの入力階調データとを比較し、マゼンダの方が、階調値が低いとその値、逆の場合は“0”をマゼンダ淡データ格納領域262bに格納する。その結果、図16(b)の左図から2番目の出力を得ることができる。
【0102】
シアン濃データは、シアン入力とマゼンダ入力とで階調値を比較して、シアンの方が大きいとその値、低いと“0”となるデータである。マゼンダ濃データも、シアン入力とマゼンダ入力とで階調値を比較して、マゼンダ入力の方が大きいとその値、低いと“0”となるデータである。それぞれ、領域262c、262dに格納することもできるが、その後の処理で使用するのは、分離したデータのうち、シアン淡データとマゼンダ淡データであるので、格納領域262c、262dを設けずに演算のみによって処理することも可能である。各領域262a、262b、262c、262dともにディザ処理の場合と同様に各座標位置が画像全体の画素位置に対応するものである。
【0103】
次いで、図4に戻り、CPU24はシアン淡データとマゼンダ濃データとの和(C淡+M濃)と、シアン濃データとマゼンダ淡データとの和(C濃+M淡)の各データを生成する(ステップS12)。図16(c)に示すように、上述のステップS11で分離した4つのデータを用いて、シアン淡+マゼンダ濃のデータと、シアン濃+マゼンダ淡のデータを生成する。
【0104】
データの生成は、ディザ処理と同様に、シアン淡データとマゼンダ濃データの各座標位置に格納されたそれぞれの階調値の和をとって、シアン淡+マゼンダ濃データを生成し、シアン濃データとマゼンダ淡データの各座標位置に格納されたそれぞれの階調値の和をとって、シアン濃+マゼンダ淡データを生成する。CPU24によって、生成した2つのデータは、それぞれRAM26の領域263a、263bに格納する(図16(c)参照)。この領域263a、263bも、同様に各座標位置が画像全体の画素位置に対応するものである。
【0105】
次いで、CPU24は、シアン淡(C淡)データに対して誤差拡散処理を行う(ステップS13)。この誤差拡散処理の具体例を図17乃至図19(a)に示す。この処理で使用されるRAM26の領域は、シアン淡データが格納されたシアン淡データ格納領域262a(図17(a)の左図)と、拡散誤差を格納するための拡散誤差領域270(図17(a)の中央)と、シアン淡出力データを格納するためのシアン淡出力データ格納領域264(図17(c)の右図)とである。
【0106】
拡散誤差領域270は、シアン淡データの階調値に対して閾値に達しない又は閾値を超える場合、周りの画素にその階調値を誤差として分散させるが、その分散された値が各座標位置に格納される。なお、本実施例において、誤差拡散処理における閾値は、“127”として処理することにする。この領域270の座標位置もシアン淡出力データ格納領域262aに対応するもので、各座標位置が画像全体の画素位置に対応するものである。
【0107】
また、シアン淡出力データ格納領域264も、同様に、各位置が画像全体の画素位置に対応し、CPU24によって、シアン淡データに対して閾値である“127”より大きい階調値を有するとドット生成を示す再生データ(量子化データ、ここでは“255”)を与え、低いとドット生成を行わないことを示す再生データ(これも、量子化データで、ここでは“0”)を与える。各再生データは、CPU24によってシアン淡出力データ格納領域264に格納されることになる。さらに、閾値より低い場合や閾値を超える場合には、その階調値を周りの画素に拡散させて、当該画素においてその分散された階調値を加算したものがその画素の階調値として閾値と比較することになる。
【0108】
本実施例で用いる拡散マトリックスを図17(b)に示す。“x”と表示された画素が現在処理されている画素を示し、図中の数字は比率を示す。すなわち、現在処理中の画素の右隣と下側の画素は“2”に対して、処理中の画素の右下と左下の画素は“1”となるように階調値を分散させるようにする。処理中の画素により近い画素に多くの誤差が分散されるようにマトリックスが構成されている。処理中の画素に対して左側や上に分散させる比率がないのは、画素をラスター方向に左側から順番に上から下に探索していくためである。
【0109】
図17(a)の左図に示すようにシアン淡データが領域262aに格納されていると、まず、CPU24は、(0,0)から処理を行う。この位置の階調値は“0”で、閾値“127”より少ない値なので、シアン淡出力データの(0,0)の位置では、ドットを生成しないことを示す“0”となる。この“0”が、シアン淡出力データ格納領域264の(0,0)の位置に格納される(図17(a)の右図参照)。ただし、階調値が“0”なので、誤差拡散は行わずに、誤差拡散領域270の対応する座標位置には値が格納されない。
【0110】
次いで、シアン淡データの(1,0)の位置の階調値は“0”で、閾値である“127”より少ない値なので、同様にシアン淡出力データ格納領域264の(1,0)に“0”を、CPU24によって格納されることになる。ここでも、階調値が“0”となるので誤差拡散は行わない(図17(c)参照)。同様に、シアン淡データの(2,0)の位置の階調値は、“0”、よって、シアン淡出力データ格納領域の(2,0)の位置に“0”を格納する(図17(d)参照)。
【0111】
次いで、シアン淡データの(3,0)の位置の階調値は“40”で、閾値より低い値なので、領域264の(3,0)の位置に“0”を格納する(図18(a)右図参照)。このとき、2値化した値と、入力階調値との間で誤差“40”が生じるので、拡散マトリックスを使用して、まわりの画素にその階調値を分散させる必要がある。減算処理中の画素の位置が(3,0)であるので、(4,0)には、2/6×40=13.33・・・、(4,1)には、1/6×40=6.66・・・、ただし、右側と右下の分散させる階調値の比率は、図17(b)に示すように2:1であるから、演算した値より少ない数値でこの比率になる数値、すなわち、12と6とをそれぞれ拡散誤差領域の(4,0)、(4,1)に、CPU24によって格納される。さらに、(3,1)は、(4,0)と同じ値、(2,1)は、(4,1)と同じ値が格納されるので、それぞれ“12”と“6”が領域270の当該座標位置に格納されることになる(図18(a)中央参照)。以降の処理においては、この誤差分を画素の階調値に加算して閾値と比較することになる。
【0112】
次いで、CPU24は、シアン淡データの(4,0)の処理を行うが、この位置の階調値は、“40”、拡散誤差領域270には“12”の誤差分が格納されているので、閾値との比較においては、“52”(=40+12)で“127”と比較する。閾値よりも少ない値であるので、シアン淡出力データ格納領域264の(4,0)には、CPU24によって“0”が格納される(図18(b)右図参照)。
【0113】
また、2値化した値“0”と、階調値“52”との間には、誤差“52があるので、この階調値“52”を拡散マトリックス(図17(b))を使用して誤差分として拡散する処理を行う必要がある。処理中の画素が(4,0)だから、その右隣の(5,0)の位置には、2/6×52=17.33・・・、右下の(5,1)の位置には、1/6×52=8.66・・・、となる。このうち、マトリックスの比率2:1を満たす値は、16:8となる。よって、拡散誤差格納領域270の(5,0)と(5,1)には、それぞれ“16”と“8”の誤差分の階調値が格納されることになる。さらに、(4,1)にも“16”の値を格納させる必要があるが、前回の処理で“6”の誤差分が格納されているので、この値との和をとった“22”(=16+6)が格納されることになる。同様に、(3,1)に“8”の誤差分を格納させる必要があるが前回の誤差分“12”との和をとって、“20”がこの位置に格納されることになる(図18(b)中央参照)。
【0114】
次に、CPU24は、シアン淡データの(5,0)に格納された階調値と閾値とを比較するが、これも同様に拡散誤差領域のその座標位置に“16”が格納されているので、この値との和をとった“56”と閾値“127”とが比較される。閾値の方が高いので、シアン淡出力データ領域264の(5,0)の位置には、“0”が格納される。同様に、拡散マトリックスを使用して、まわりの画素のこの“56”の誤差分を拡散させる必要がある。この場合に右隣や右下に画素が存在しないが、図17(b)のマトリックスの比率を維持したまま、誤差を拡散させることになる。下の(5,1)には“18”、左下の(4,1)には“9”の値を分散させ、すでに格納された値との和をとって、それぞれ“26”、“31”が拡散誤差領域270の当該位置に格納されることになる(図18(c)の中央参照)。
【0115】
次いで、この処理を2行目、3行目と順次のシアン淡データに対して行い、最終的に得られるシアン淡出力データは、図19(a)の右図のように格納されることになる。この図に示すように、(4,3)の位置にある画素だけが、ドット生成を示す“255”が格納され、それ以外は、ドットを生成しないことを示す“0”が格納されることになる。以上によりシアン淡データに対する誤差拡散処理が終了することになる(ステップS13が終了)。
【0116】
図4に戻り、次いで、CPU24は、シアン淡+マゼンダ濃データからシアン淡ドット周囲の階調値の減算処理を行う(ステップS14)。これも、ディザ処理と同様に、ステップS13で生成したシアン淡出力ドットのまわりに、異なる色であるマゼンダ濃データの出力ドットが生成されないように処理を行うことになる。異なる色のドットが重なる確率を下げて、モアレ等の不快な印刷出力を防ぐためである。
【0117】
具体的には、図19(b)の左図に示すように、シアン淡出力データ格納領域264に格納されたシアン淡出力データに対して、ステップS12で生成したシアン淡+マゼンダ濃データから、シアン淡出力ドットのまわりの階調値を減算する処理を行う。処理自体は、ディザ処理と同様であり、そのフローチャートを図11に示す。
【0118】
すなわち、図19(b)に示すように、シアン淡出力ドットが生成されるのは、(4,3)の位置にある画素である。よって、シアン淡+マゼンダ濃データの対応する(4,3)の画素を選択する(ステップS140)。選択した画素の階調値は、“100”なので、ステップS141にて“255”を超えないので“NO”が選択されて、ステップS142に移行する。
【0119】
次いで、CPU24は、選択画素である(4,3)の階調値“100”を全て減算し、その値“100”を合計値格納領域265に格納する。次いで、CPU24は、ステップS143に移行し、周囲の未減算画素を選択する。ディザ処理のときと同様に、選択画素の上下左右の画素を選択する。すなわち、図19(b)の例では、(4,2)、(3,3)、(5,3)、(4,4)の4つの画素を選択することにする。
【0120】
次いで、CPU24は、選択した画素の階調値の合計が、“255”を超えるか否か判断する。選択した画素は、ステップS140とステップS143で選択したものである。これらの画素の階調値の合計は、“500”で“255”を超えることになるので、ステップS144で“YES”が選択される。
【0121】
次いで、CPU24は、ステップS145に移行し、ステップS143で選択した画素から均等に階調値を減算する。減算もディザ処理の場合と同様に、ドット生成を示す“255”から合計値格納領域265に格納された値を減算し、残った値をステップS143で選択した未減算画素の数分で均等に振り分けるようにする。この場合は、合計値格納領域265に“100”が格納され、“255”から減算すると、“155”となり、これをステップS143で選択した未減算画素の数“4”で割ると、1画素あたり、38.75となる。よって、4つの画素、(4,2)、(3,3)、(5,3)、(4,4)に対して、それぞれ39、39、39、38だけ階調値を減算させるようにすれば、均等に“155”だけ減算することになる。この場合も、1つだけ“38”だけ減算する画素があるがランダムに選択してよい。
【0122】
図11に戻り、次いでCPU24は、ステップS146に移行し、他にシアン淡ドットがあるか否か判断する。図19(b)に示す例では、シアン淡出力データのうち(4,3)以外はドットを生成する画素は存在しないので、処理が終了して、図4のステップS15に移行することになる。
【0123】
一方、ステップS144で選択画素の階調値の合計が、“255”を超えた場合は、ディザ処理のときと同様に、処理対象の画素の右上、右下、左下、左上の斜め方向の4つの未減算画素を選択するようにすればよい。それでも、階調値の合計が“255”を超えないとさらにその右、さらに下、さらに左、さらに上等と選択画素を広げていくことも考えられる。階調値の合計が“255”を超えれば、上述のステップS145以降が実行されることになる。
【0124】
また、ステップS141で、最初に選択した選択画素の階調値が“255”を超えると、この場合もディザ処理のときと同様に、選択画素のついてのみ、その階調値から“255”を減算することになる(ステップS148)。この場合でも、異なる色のドットが重なる確率が減少し、ドット間距離が一定に保たれ、視覚的に快適な印刷出力を得ることが可能となる。その後、ステップS146に移行し、上述の処理が繰り返される。
【0125】
以上により、減算処理が終了すると、シアン淡+マゼンダ濃データの減算後の領域263aは、図19(c)の中央に示す状態となる。なお、ここで、シアン淡+マゼンダ濃データからシアン淡出力データを減算したものは、マゼンダ濃データとなるので、図19(c)の中央には、減算後のマゼンダ濃データとして図示している。
【0126】
図4に戻り、処理はステップS15に移行し、CPU24は、減算済みマゼンダ濃データに対して誤差拡散処理を行う。誤差拡散処理は、図17(a)から図19(a)に示したものと同様に処理を行う。すなわち、マゼンダ濃データの各座標位置に格納された階調値と閾値“127”とを、ラスター方向に左側から順に比較し、階調値の方が大きいとドット生成を示す“255”、そうでないと“0”とし、誤差分は、図17(b)に示す拡散マトリックスを使用してマトリックスに格納された値の比率でまわりの画素に階調値を分散させる。
【0127】
その結果、図20(a)の右図に示すマゼンダ濃出力データを得ることができる。このデータが格納される領域266も、ディザ処理の場合と同様に、各座標位置が全体画像における画素位置に対応するものである。図20(a)に示すようにマゼンダ濃出力ドットが生成される位置は、(4,0)、(5,1)、(3,2)、(4,4)、(4,5)の5つの位置である。
【0128】
次いで、図4に戻り、CPU24は、マゼンダ淡データに対して誤差拡散処理を行う(ステップS16)。マゼンダ淡データは、ステップS11で生成され(図16(b)の左から2番目に図示)ており、上述したステップS13と同様に拡散誤差領域270に、図17(b)に示すマトリックスを使用して誤差分を格納する。
【0129】
図20(b)に示すようにマゼンダ淡データ格納領域262bの各位置に各階調値が格納され、これに対して、各階調値と閾値“127”とを、ラスター方向に左側から順に比較し、階調値の方が大きい値のときは“255”、そうでないと“0”とする。もちろん、誤差分が以前の処理でその位置に格納されているとその誤差分を加算した値で比較する。処理が終了すると次の行と順次処理を進めるようにする。
【0130】
その結果、図20(c)の右図に示すように、マゼンダ淡出力データ格納領域267にマゼンダ淡出力データが生成されることになる。図20(c)に示すように、マゼンダ淡出力ドットが生成される画素位置は、(2,2)、(1,5)の2つの画素である。
【0131】
次いで、図4に戻り、このマゼンダ淡ドット周辺にシアン濃データの出力ドットが生成されないように、シアン濃+マゼンダ淡データからマゼンダ淡出力データの減算処理を行う(ステップS17)。これも、ディザ処理のときと同様(または、上述したステップS14と同様)に、図11に示すフローチャートに従って、処理が行われることになる。
【0132】
すなわち、CPU24は、まずマゼンダ淡出力ドットの位置に対応するシアン濃+マゼンダ淡データの位置を選択する(ステップS140)。図21(a)の例では、(2,2)を選択することになる。次いで、CPU24は、選択した画素の階調値は“100”で“255”に達しないのでステップS141で“NO”が選択される。
【0133】
次いで、CPU24は、選択した画素の階調値をすべて減算すると、シアン濃+マゼンダ淡データの(2,2)に位置する画素の階調値は“0”となる(ステップS142)。次いで、CPU24は、周囲の未処理画素を選択するが、上述の例と同様に上下左右の4つの画素、(2,1)、(1,2)、(3,2)、(2,3)を選択する(ステップS143)。
【0134】
次いで、CPU24は、選択画素の階調値の合計が“400”(ステップS140で選択した画素の階調値も含めて)となるので、ステップS144で“YES”が選択され、ステップS145に移行する。そして、CPU24は、均等に階調値を減算する。ここでも、“255”からステップS140で選択した画素の階調値“100”を減算した“155”をまわりの4画素から均等に階調値を減算させる処理を行う。ただし、(3,2)に位置する画素の階調値は、“0”となるので、減算処理を当該画素には行うことができないので、残りの3画素に対して均等に減算することにする。よって、155/3=51.66・・・となるので、3画素から52、52、51だけ階調値を減算させればよいことになる。したがって、図21(b)の中央に示すように、(2,1)、(1,2)、(2,3)に位置する画素の階調値は、それぞれ“48”、“48”、“49”となる。この場合も、1つだけ“51”を減算するものがあるがランダムに選択することにする。
【0135】
図11に戻り、CPU24は、他にシアン淡ドットがあるか否か判断する(ステップS146)が、図21(b)の左図に示すようにさらに、(1,5)の位置にもドット生成する画素が存在するので、本ステップでは“YES”が選択され、再びステップS140に移行することになる。そして、上述の処理を繰り返すことにより、最終的には図21(b)の中央に示すシアン濃データが生成されることになる。そして、処理は、ステップS18(図5参照)に移行することになる。
【0136】
図5に戻り、次いでCPU24は、減算済みシアン濃データに対して誤差拡散処理を行う(ステップS18)。これもステップS13、S15、S16と同様に、各座標位置に格納された階調値と閾値とを比較して、閾値よりも大きい値のときは“255”、低いと“0”とし、誤差分はまわりの画素に拡散させるようにする。また、閾値との比較で以前の処理で誤差分があればその値を本来の階調値に加算した値で比較することになる。これを、シアン濃データ格納領域263bの(0,0)からラスター方向に順に比較し、次の行へを順に移行し、すべての階調値に対して行うことになる。
【0137】
減算済みシアン濃データに対して、かかる誤差拡散処理を行うと、図21(c)の右図に示すようにシアン濃出力データを得る。このデータもディザ処理のときと同様にシアン濃出力データ格納領域267に各々CPU24によって格納されることになる。図21(c)に示すように、シアン濃出力ドットが生成されるのは、(1,0)、(0,2)、(1,3)、(2,4)の4つの画素位置となる。この場合も、ドット生成を示す“255”がこの4つの画素位置に格納されることになる。
【0138】
図5に戻り、次いでCPU24は、シアン淡ドットとシアン濃ドットとを合成する処理を行う(ステップS19)。ディザ処理の場合と同様に、ステップS13で生成した誤差拡散処理後のシアン淡出力データ(図19(b)右図参照)と、ステップS18で生成した誤差拡散処理後のシアン濃出力データ(図21(c)の右図参照)との和を対応する各座標位置どうしで演算する。その結果、図22(a)の左図に示すシアン出力データを得る。
【0139】
次いで、CPU24は、マゼンダ淡ドットとマゼンダ濃ドットを合成する処理を行う(ステップS20)。これも同様に、ステップS16で生成した誤差拡散処理後のマゼンダ淡出力データ(図20(c)の右図参照)と、ステップS15で生成した誤差拡散処理後のマゼンダ濃出力データ(図20(a)の右図参照)とで各座標位置どうしで階調値の和を演算する。その結果、図22(a)の右図にあるように、マゼンダ出力データを得る。
【0140】
これらシアン出力データ(図22(a)の左図)と、マゼンダ出力データ(図22(a)の右図)は、ディザ処理のときと同様に、それぞれシアン出力データ格納領域268aとマゼンダ出力データ格納領域268bに格納されることになる。領域268a、268bの各座標位置は、画像全体の画素位置に対応するのは、ディザ処理のときと同様である。
【0141】
この図22に示す2つのドット生成位置は、互いに重なる部分はなく、従って、異なる色どうしが重なることによる粒状的なノイズの発生を抑え、シアンとマゼンダとでドット間距離が一定に保たれ、快適な印刷出力を得ることが可能となるのである。
[CC法を用いたハーフトーン処理]
次に、CC(Circular Cell)法を用いたハーフトーン処理を用いた場合について以下説明する。このCC法も、多値の値をもつ各画素の階調値に対して、ドット生成を示す“255”とドット生成しない“0”によって2値化する点では、ディザ法や誤差拡散法と同様である。しかし、CC法においては、所定の閾値になるまで、画素を選択し、選択された複数の画素からなるセルを構成していき、その重心位置に位置する画素にドット生成を示す“255”を与え、セルを構成するそれ以外の画素に対しては“0”を与えるようにして、2値化する点で、他の処理と異なるものである。
【0142】
誤差拡散法と比較し、CC法は、ドット間距離を一定に保つことができ、ある領域だけドット密度が高くなったり、誤差が伝播することによるドットの繋がり(ワーム)の発生を抑え、ドットの分散性を向上させて視覚的に快適な印刷出力を得ることができる。
【0143】
このCC法においても、処理の方法は、ディザ法や誤差拡散法による場合と同様に、まずシアン淡データを生成し、CC法による処理を行う。そして、処理後のシアン淡出力ドットで異なる色であるマゼンダの濃い方のデータとで減算処理を行う。減算処理後のマゼンダ濃データにCC法による処理を行い、マゼンダ濃出力データを得る。
【0144】
次に、マゼンダ淡データに対してCC法で処理を行い、シアン濃データとの間で減算処理を行い、シアン濃データを得る。このデータにCC法による処理を行い、シアン濃出力データを得る。シアン淡出力データとシアン濃出力データとで合成してシアン出力データを得る。マゼンダ淡出力データとマゼンダ濃出力データとを合成してマゼンダ出力データを得る。
【0145】
これら2つの出力データは、それぞれ減算処理を行っているため、ドットが重なる確率が何も減算処理せずにCC法による処理をした場合と比較して低くなり、図3で説明した粒状的なドットの発生を抑え、シアンとマゼンダとでドット間距離が一定に保たれ、快適な印刷出力を得ることができる。
【0146】
ディザ処理の場合と同様に、先にドット密度が低くなるであろう階調値の低いものから先にCC法による処理を行い、その後ドット密度が高くなるであろうものから減算処理しているのは、入力階調値の小さい方の生成されるドット周辺に、入力階調値の高い方により生成されるドットが生成されないようにするためである。
【0147】
逆の場合、すなわち、先にドット密度が高くなるであろう、階調値の高い方から先に処理をすると、減算処理の過程で、確率的にドットが生成されない位置に対して減算処理を行い、結果的に入力階調値がさらに分散されて、入力分布に忠実でない階調値からなるデータに処理を行うことになる。その後に生成されるドット分布も入力階調値に忠実でないものとなってしまうため、これを防ぐ目的からである。
【0148】
CC法を用いたハーフトーン処理について、図23乃至図27に本処理の動作を示すフローチャートを示し、図28乃至図33にRAM26の各領域に格納された値の例について図示している。以下フローチャートに沿って詳細に本処理について説明する。
【0149】
まず、図23に示すように、CPU24は本処理を実行するためのプログラムをROM25から読み出して、処理が開始されることになる(ステップS30)。この場合も、ディザ処理の場合と同様に、処理が開始される前に、シアンの入力階調データがシアン入力データ格納領域261aに、マゼンダの入力階調データがマゼンダ入力データ格納領域261bに格納されているものとする(図28(a)の左図、左から2番目の図参照)。各領域261a、261bは、同様に、6行6列で構成されているが、説明を容易にするためであってこれ以外の構成でもよい。また、各座標位置に入力される階調値は、全体画像の画素位置に対応するもので、例えばシアン入力データ格納領域261aで(0,0)の位置は、全体画像の(0,0)に位置する画素に対応するものである。
【0150】
さらに、CC法では、重心を演算するためのワーキングメモリ領域280を備え、この領域280は、重心の位置座標(x座標とy座標で、例えば領域261aで(0,0)はx=0、y=0として表現される)と、これまで選択した画素の階調値の合計値が格納されるよう構成される。重心位置を格納するのは、その位置をもとにセルを構成する画素を選択したり、最終的なドットの位置を確定させるためである。階調値の合計は、セルを構成する画素の階調値の合計が閾値となるまで画素の選択を続けるのに必要だからである。
【0151】
また、ディザ処理等と同様にシアン出力データ格納領域268aと、マゼンダ出力データ格納領域268bもRAM26の所定領域に存在する。この2つの領域268a、268bも同様に各座標位置が全体画像の各画素位置に対応するものである。
【0152】
図23に戻り、処理が開始される(ステップS30)と、次いでCPU24は、ステップS31に移行し、シアンとマゼンダのそれぞれの未処理画素を選択する。未処理画素の選択は、まだ処理していない画素のうち、最も上側にあるものでかる最も左側にある画素を選択する(ラスター方向に選択する)。図28(a)に示す例では、まだ、すべての画素で処理が開始されていないので、両色とも未処理画素として(0,0)に位置する画素を未処理画素として選択することになる、
図23に戻り、次いでCPU24は、選択した未処理画素の階調値で、シアンの方がマゼンダよりも大きいか否か判断する(ステップS32)。シアンの方が大きいと、“YES”が選択され、マゼンダの方の処理を先に行い、マゼンダの方が大きいと、“NO”が選択され、シアンの方を先に処理することになる。この場合も、ドット密度が低くなるであろう階調値の小さい方を先に処理してドットを生成させ、後から減算処理を行うためである。
【0153】
図28(a)に示す例では、選択した未処理画素はともに(0,0)に位置する画素で、シアンの方の階調値は“20”、マゼンダの方の階調値は“40”となるので、ステップS32において、“NO”が選択されて、ステップS38に移行することになる。この例の場合は、シアンの方から先に処理をすることになる。
【0154】
ステップS38では、シアンドットの生成処理を行うが、その処理の詳細を示すフローチャートを図24に示す。
【0155】
シアンドット生成処理(ステップS38)に移行すると、まず、CPU24は、シアンの未処理画素を初期画素として初期濃度の重心を演算する(ステップS381)。ステップS31で選択した未処理画素を初期画素として選択したときのシアン入力データ格納領域261aの状態を図28(b)の左図に示す。そして、重心の演算は、以下の演算式を用いる。
(式1)
x重心={{(セルの重心のx座標)×(セルの階調値の合計)}
+{(選択した未処理画素のx座標)×(選択した未処理画素の階調値)
}}/(セルの階調値の合計+選択した未処理画素の階調値)
y重心={{(セルの重心のy座標)×(セルの階調値の合計)}
+{(選択した未処理画素のy座標)×(選択した未処理画素の階調値)
}}/(セルの階調値の合計+選択した未処理画素の階調値)
(x重心、y重心は重心位置の座標)
この演算式はROM25に格納され、重心位置の演算のときにCPU24が読み出して演算を行うことになる。ちなみに、初期画素の場合は、セルの重心のx、y座標、及びセルの階調値はともに0として演算される。なお、セルとは、上述したように複数の画素から構成される画素群で、セルの重心とあるのは、これまで構成したセルの重心のことである。初期濃度の重心を演算すると、x重心=0、y重心=0となる。演算した重心位置は、CPU24によってワーキングメモリ280に格納されることになる(図28(c)の中央図参照)。また、CPU24は、初期画素の階調値もワーキングメモリ280に格納する。図28(c)の例では、シアンの(0,0)に位置する画素の階調値は、“20”だから、この値が階調値の合計としてワーキングメモリ280に格納されることになる。そして、CPU24は、対応するシアン出力データ格納領域268aの位置にドットを生成しないことを示す“0”を格納する。
【0156】
さらに、CPU24は、シアン入力データ格納領域261aの選択した初期画素の位置に、当該画素が選択されたことを示す“−1”を格納する。以後、この画素がセルを構成する画素として選択されないようにするためである。そして、CPU24は、選択したシアンの初期画素に対応するマゼンダの入力階調データに、シアンの階調値を加算して、領域261bの対応する位置に格納する(図28(c)左から2番目の図参照)。
【0157】
このように階調値を加算しているのは、最終的にシアンドットが生成されるとき、セルを構成する階調値の合計は“255”となり、この値分をマゼンダの入力階調値に加算させることになるため、後で加算した“255”の階調値分を減算させるためである。この減算処理により、シアンドットとマゼンダドットとが重なる確率が低くなり、粒状的なドットの生成を抑えて、ドット間距離が一定に保たれ、快適な印刷出力を得ることが可能になるのである。
【0158】
図24に戻り、次いで、CPU24はステップS382に移行し、シアンの未処理画素を選択する。未処理画素の選択は、ワーキングメモリ280に格納した重心位置の座標をもとに最も近い位置にある画素を選択する。重心を利用してセルを構成する画素を選択するため、閾値に達したセルの形状は円状となり、その重心にドットを形成させることで、シアンとマゼンダとのドット間距離が一定で快適な印刷出力が得られるからである。
【0159】
図28(c)の例では、ワーキングメモリ280には重心位置として、x=0、y=0が格納されているので、この位置から最も近い位置にある画素は、(1,0)、(0,1)の2つ存在することになる。複数の選択すべき画素がある場合、CPU24は、いずれか1つの画素をランダムに選択することにする。固定順に選択する方法も考えられるが、最終的に構成されるセルが規則的に並び、印刷出力のある領域でドットの周期パターンを発生させてしまう。このようなパターンは視覚に入り易く快適な印刷出力を得ることができないので、ランダムに選択するのである。ここでは、図29(a)の左図にあるように(0,1)を選択することにする。
【0160】
CPU24は、シアンの未処理画素、すなわち、(0,1)に位置する画素を選択すると、マゼンダの入力階調データで対応する座標位置(ここでは、(0,1))にある画素の階調値に、シアンの階調値を加算し(階調値が“60”)、シアンの出力データ格納領域268aの対応する座標位置(ここでは、(0,1))にドットを生成しないことを示す“0”を格納する。そして、選択したシアンの入力データ格納領域268aの選択した画素位置に処理済みを示す“−1”を格納することになる(図29(a)参照)。
【0161】
図24に戻り、次いでCPU24は、選択した未処理画素を含めた階調値の合計(濃度の合計)が閾値を超えるか否かを判断する(ステップS383)。図29(a)の例では、選択した未処理画素((0,1)に位置する画素)の階調値は、“20”、ワーキングメモリ280に格納された階調値の合計(これまで選択した画素の階調値の合計)は、“20”、よって合計は“40”である。本実施例では、閾値を“255”とするとにする。この場合、閾値を超えないことになるので、この例の場合、本ステップで“NO”が選択される。
【0162】
ステップS383で“NO”が選択されると、CPU24は、ステップS384に移行し、未処理画素を含めたセルの重心を演算する。新たにセル内に取り込んだ画素を含めたセル全体の重心の計算をし直すためである。重心の演算は、上述した(式1)を用いて、CPU24によって演算される。その結果、重心座標は、(x重心,y重心)=(0,0.5)となる。この座標は、ワーキングメモリ280に格納される。
【0163】
次いで、CPU24は、ステップS385に移行し、セルの階調値の合計を演算する。新たにセル内に取り込んだ画素を含めたセル全体の階調値を計算するためである。図29(a)の例では、ワーキングメモリ280には、これまで選択した画素の階調値の合計値である“20”が格納され、ステップS382で画素(0,1)が選択され、その階調値が“20”なので、合計値は、“40”でその値がCPU24によって、ワーキングメモリ280に格納されることになる(図29(a)中央図参照)。
【0164】
次いで、CPU24は、ステップS386に移行し、選択画素の階調値をマゼンダの階調値に加算する。図29(a)の例では、シアンの選択画素の階調値“20”をマゼンダの対応する位置にある階調値“20”に加算して、当該位置の画素の階調値を“60”としている。この場合も同様に、後で減算処理を行い、シアンとマゼンダのドットが重なる確率を低くするためである。
【0165】
次いで、CPU24は、ワーキングメモリ280に格納した階調値の合計が閾値である“255”と等しいか否か判断する。図29(a)の例では、中央図に示すように合計値は“40”なので、閾値と等しくなく“NO”が選択され、再び、ステップS382に移行し、シアンの未処理画素を選択して、セルに取り込む画素の選択を続けることになる。
【0166】
図29(a)の例で処理を行うと、CPU24は、ステップS382でシアンの未処理画素を選択する。選択は、ワーキングメモリ280に格納した重心位置に最も近い位置にある画素を選択する。この図29(a)の例では、重心位置が(0,0.5)なので、最も近い位置にある画素は(1,0)と(1,1)の2つの画素があることになる。上述したように、ランダムにいずれか1つの画素をCPU24は選択するとして、ここでは、図29(b)の左図に示すように(1,0)を選択することにする。選択した画素の座標位置には、処理済みを示す“−1”が格納され、シアンの出力データ領域268aの対応する(1,0)の位置に、ドットを生成しないことを示す“0”が格納される(図29(b)の左図、右から2番目の図参照)。
【0167】
次いで、CPU24は、濃度の合計が閾値を超えるか否か判断する(ステップS383)。選択した画素の階調値は“20”で、階調値の合計は“40”だからその合計は“60”となり、閾値である“255”を超えないので、“NO”が選択される。
【0168】
次いで、CPU24は、未処理画素を含めたセルの重心を演算する(ステップS384)。CPU24は、ROM25に格納された(式1)を用いて、演算すると重心位置は(0.3,0.3)となる。この重心位置は、CPU24によってワーキングメモリ280に格納されることになる(図29(b)中央図参照)。
【0169】
次いで、CPU24は、セルの階調値の合計を演算する(ステップS385)。ステップS383で選択した画素の階調値は“20”、ワーキングメモリ280に格納された階調値の合計値は、“40”だから、その合計値は“60”となる。この値は、メモリ280に格納されることになる(図29(b)中央図参照)。
【0170】
次いで、CPU24は、選択画素の階調値をマゼンダの階調値に加算する処理を行う(ステップS386)。後で、減算処理を行い、シアンとマゼンダのドットの重なりを防ぐためである。選択した未処理画素の階調値は“20”で、対応する位置にあるマゼンダの階調値は“40”だから、(1,0)に位置するマゼンダの階調値は“60”となる。
【0171】
そして、CPU24は、メモリ280に格納した階調値の合計が閾値である“255”と等しいか否か判断する(ステップS387)。合計値は、“60”だから閾値を等しくなく、ここでも“NO”が選択され、再び、ステップS382に移行することになる。
【0172】
図29(b)の例で、再び処理を進めると、ステップS382で未処理画素を選択すると、重心(0.3,0.3)から最も近い画素は(1,1)なので、この画素を未処理画素として選択する(図29(c)の左図参照)。選択した画素の座標位置には、“−1”を格納し、対応する位置のシアン出力データ領域268aに“0”を格納する。
【0173】
次いで、選択した未処理画素の階調値とメモリ280に格納された階調値の合計は、“80”となり、閾値を越えないので、ステップS383で“NO”が選択され、重心を演算すると(0.5,0.5)(ステップS384)、階調値の合計は、“80”(ステップS385)、選択画素の階調値をマゼンダの階調値に加算(ステップS386)すると、図29(c)の各図に示す状態となる。
【0174】
次いで、ステップS387でセルの階調値の合計をメモリ280から読み出して、その値が“80”だから閾値と等しくなく、再び、ステップS387に移行して、セルに取り込む未処理画素の選択を行う。
【0175】
以上を繰り返し、シアンの入力階調データの(4,1)を未処理画素として選択し、ステップS387に移行した段階でのRAM26の状態を図30(a)に示す。この時点で、セルを構成する画素の階調値の合計は“240”となっている。ステップS387に移行して、閾値である“255”と比較すると等しくないので、再びステップS382に移行することになる。
【0176】
CPU24は、ステップS382で未処理画素を選択することになるが、重心位置はワーキングメモリから(1.25,1.32)なので、未処理画素として(3,2)が選択される(図30(b)の左図参照)。次いで、濃度の合計が閾値を超えるか否か判断される(ステップS383)。選択した未処理画素の階調値は、“20”で、これまで構成したセルの階調値の合計が“240”なので、その階調値の合計は、閾値である“255”を超えることになる。よって、このステップS383で“YES”が選択され、ステップS389へ移行することになる。
【0177】
ステップS389では、閾値を超えた場合の重心演算処理を行う。具体的には、閾値に達するのに必要な階調値を演算し、その値分だけ、最後に選択した未処理画素の階調値として重心を演算することになる。重心の演算は、(式1)を用いるが、この(式1)で(選択した未処理画素の階調値)は、閾値に達するのに必要な階調値であるとして、演算することになる。図30(b)に示す例では、これまで構成したセルの階調値が“240”だから、閾値に達するのに必要な階調値は、“15”(=255−240)で、これを選択した未処理画素の階調値として重心を演算することになる。その結果、重心位置は(x重心,y重心)=(1.32,1.34)となる。この重心位置は、再びワーキングメモリ280に格納される。また、セルの階調値の合計は、“255”として同様にワーキングメモリ280に格納されることになる(図30(c)中央図参照)。
【0178】
図24に戻り、CPU24は、次いで閾値に達するのに必要な値をマゼンダの階調値に加算する(ステップS390)。図30(c)の例では、閾値に達するのに必要な値は、“15”なので、この値をマゼンダの入力階調データの対応する画素に加算する(図30(c)左から2番目の図参照)。後で減算処理を行い、ドットの重なりを防ぐためである。
【0179】
次いで、CPU24は、残った階調値を最後に選択した未処理画素に戻す処理を行う(ステップS391)。最後に選択した(3,2)に位置する画素の階調値は、“20”であるが“15”として演算したため、残った値“5”の取り扱いが問題になるが、これは最後に選択した(3,2)の画素の階調値として戻すことにする(図30(c)左図参照)。以後、この位置にある画素は、入力階調値が“5”である未処理画素として、以降の処理においてセルを構成する画素として選択対象とする。このように、戻しデータを元の画素に戻すことで、入力階調値に忠実にドットの生成を行うことができる。この画素もセルに取り込み、残った階調値を他の未処理画素に戻すと入力階調分布に忠実にドットを生成することができないからである。
【0180】
そして、CPU24は、シアン出力データ格納領域268aの対応する位置に、ドットを生成しないことを示す“0”を格納する(図30(c)右から2番目の図参照)。
【0181】
次いで、CPU24は、ステップS388(図25)に移行し、重心位置にシアンドットを生成する処理を行う。具体的には、ワーキングメモリ280に格納された重心位置に位置する画素の出力データ格納領域268a、268bの位置にドットの生成を示す“255”が、CPU24によって格納される(図31(a)の右から2番目の図参照)。これにより、シアンにおいて1つのセル内にドットが生成されることになる。
【0182】
なお、ステップS337で閾値と等しいと判断されると(“YES”の場合)、同様に、ステップS388に移行し、ステップS334で演算した重心位置にシアンドットが生成されることになる。
【0183】
このシアンドット生成の過程において、マゼンダの入力階調データに全部で“255”の値を加算したため、このマゼンダ入力階調データから“255”の階調値を減算する処理を行う必要がある。
【0184】
具体的な処理は、図25のステップS392以下の処理となる。まず、CPU24は、シアンドットに最も近いマゼンダ画素を選択する(ステップS392)。図31(a)に示す例では、シアンドットは(1,1)の位置に存在するため、この位置にあるマゼンダ入力階調データを選択することになる(図31(b)の左から2番目の図参照)。なお、このとき、ワーキングメモリ280を減算した階調値の合計に使用するため、階調値の合計を“0”に初期化するものとする。
【0185】
次いで、CPU24は、選択したマゼンダの画素の階調値の合計が閾値を超えるか否か判断する(ステップS393)。図31(b)の例では、選択したマゼンダ画素は、(1,1)の1つでその階調値が“60”となるので、階調値の合計は“60”となり、“NO”が選択されることになる。
【0186】
次いで、CPU24は、選択したマゼンダ画素の階調値を“0”にする(ステップS394)。図31(b)の例では、左から2番目の図に示すように、(1,1)の画素の階調値を“0”にする。そして、CPU24は、選択したマゼンダの入力階調値の値をワーキングメモリ280に格納することにする(同図の中央図参照)。
【0187】
次いで、CPU24は、ワーキングメモリ280に格納した階調値の値が閾値に等しいか否か判断される(ステップS395)。図31(b)の例では、階調値の合計は“60”となっているので、閾値である“255”と等しくなく、“NO”が選択されて、ステップS392に移行する。
【0188】
次いで、CPU24は、シアンドットに最も近い画素を選択するが、シアンドットが生成される位置に最も近い未処理画素を選択することになる。図31(b)の例では、(1,1)に最も近い4つの画素、すなわち、(1,0)、(0,1)、(2,1)、(1,2)の位置にある画素を選択することにする(図31(c)の左から2番目の図参照)。
【0189】
次いで、選択したマゼンダ画素の階調値の合計が閾値を超えるか否か判断する(ステップS393)。この場合、4つの選択した未処理画素のうち、最小値となる階調値を選択し、この値と選択した未処理画素の数を乗算した値に、ワーキングメモリ280に既に格納されている値とを加算して、その値が閾値である“255”を超えるか否かで判断する。図31(c)に示す例では、選択した4つの画素すべて同じ階調値“60”を有するので、この値に選択した未処理画素の数、すなわち4を乗算し、“240”が得られ、これにメモリ280に格納された値“60”に加算すると“300”となり、閾値である“255”を超えることになる。よって、本ステップS393で“YES”が選択されて、ステップS396へ移行することになる。
【0190】
CPU24は、ステップS396において減算量を演算する。ここでの演算の方法は、閾値からワーキングメモリ280に格納された値を減算し、その値を選択した未処理画素で均等に減算するものである。図31(c)の例では、閾値である“255”からメモリ280に格納された階調値“60”を減算すると、“195”、これを選択した4つの画素で均等に減算するとすると、1画素あたり、48.75となる。4つの画素の減算量の合計が、“195”となればよいので、各画素から49、49、49、48を減算すればよいことになる。
【0191】
そして、CPU24は、実際に減算処理を行い(ステップS397)、その結果、図32(a)の左から2番目に示すマゼンダ入力階調データを得ることになる。また、このとき、減算した階調値の合計も“255”となるので、ワーキングメモリ280にも“255”が格納されることになる。この場合も、1つだけ“48”を減算することになるが、ランダムに選択することにする。
【0192】
この減算処理により、本来のマゼンダの入力階調データの合計と同じになるとともに、シアンのドット出力周辺の階調値が小さい値となっているため、シアンドットとマゼンダのドットが重なる確率が小さくなる。したがって、ディザ処理や誤差拡散処理の場合と同様に、異なる色どうしでドットが重なる確率が低くなり、粒状的なドットの発生、モアレの発生等を抑え、視覚的に快適な印刷出力を得ることが可能になるのである。
【0193】
次いで、CPU24は、ステップS397を終了すると、ステップS34に移行することになる。また、ステップS395で、選択したマゼンダ画素の階調値が閾値を越えずに、閾値と丁度等しい値であるときは、“YES”が選択されて、同様にステップS34に移行することになる。
【0194】
図23に戻り、次いでCPU23は、ステップS34に移行して、シアン、マゼンダともに未処理画素があるか否か判断される。この判断は、シアン入力階調データが格納されたシアン入力データ格納領域261aと、マゼンダ入力階調データが格納されたマゼンダ入力データ格納領域261bにおいて、処理済みを示す“−1”がすべての画素に対して格納されたか否かで判断されることになる。
【0195】
図32(a)に示す場合は、まだ、“−1”となっていない画素がシアン、マゼンダ双方あるので、再び、ステップS31に移行し、未処理画素の選択を行うことになる。未処理画素の選択は、上述したようにラスター方向に、すなわち、最も上の行にある、最も左側にある未処理画素(“−1”となっていない画素)を選択する。図32(a)の場合は、(3,0)に位置する画素が選択される。
【0196】
そして、上述の処理を繰り返すと、図32(b)の左図の状態になる。図示された場合は、シアンの方がマゼンダより入力階調値がすべての画素で少ない値となっていたので、シアンの入力データの方が先に処理が行われ、従って、シアン入力データ格納領域261aの値はすべて、マゼンダの処理よりも早く“−1”が格納されることになる。
【0197】
この図32(b)に示す状態で、図23のフローチャートでは、ステップS34で、シアンの未処理画素がなくなったので、“NO”が選択されて、ステップS35に移行することになる。ステップS35では、残ったシアンの入力階調データに対してCC法によるハーフトーン処理が行われる。この場合も、ラスター方向に、初期画素を探索し、閾値に達するまでセルを構成する画素を選択し、階調値の合計が閾値に達すると、その時点での重心にドット生成を示す“255”を与え、それ以外のセルの画素に対しては“0”を与える。図32(b)の例では、シアンはすべて処理済みなので、本ステップでの処理は行わないことになる。
【0198】
次いで、CPU24は、残ったマゼンダに対するCC法によるハーフトーン処理を行う(ステップS36)。図32(c)に示すように(0,0)を初期画素として、以後閾値に達するまでセルを構成して上述の処理を行うことになる。その結果を図33(a)に示す。
【0199】
図33(a)のシアン出力データ格納領域268aとマゼンダ出力データ格納領域268b(図33(a)右図から2番目と左図参照)に示すように、ドットを生成する“255”が位置する画素は、シアンとマゼンダとで重なり合う点がない。これにより、CC法においても異なる色でドットが重なる確率が低くなり、粒状的なドットの発生を抑えて、シアンとマゼンダとでドット間距離が一定に保たれ、視覚的に快適な印刷出力を得ることが可能になる。
【0200】
一方、ステップS32で階調値がシアンの方が大きく、マゼンダが小さい場合は、マゼンダの方を先にドット生成処理を行うことになる。例えば、図33(b)の左図と左から2番目の図にあるように、シアンとマゼンダとがかかる入力階調データで領域261a、261bに格納された場合で説明する。ステップS21でシアンとマゼンダの未処理画素を選択する。この場合は、(0,0)に位置する2つの階調値を比較すると、シアンが“40”でマゼンダが“20”となるので、マゼンダの方が小さいので、ステップS32で“YES”が選択され、マゼンダドット生成処理に移行することになる。
【0201】
マゼンダ処理の具体的なフローチャートを図26に示す。この内容は、シアンドット生成処理とほぼ同内容であり、シアンに対する処理がマゼンダに置き換わっているものである。図33(b)の入力階調データが格納されたものとして以下説明する。
【0202】
まず、CPU24は、マゼンダの未処理画素を初期画素として選択する(ステップS331)。(0,0)に位置するマゼンダの画素を選択することになる。そして、CPU24は初期濃度重心を計算する。計算式は上述の(式1)を使用する。初期濃度の重心位置演算は、セルの重心のx、y座標、及びセルの階調値はともに0として演算される。その結果、重心は(0,0)となり、ワーキングメモリ280に格納する。また、その初期画素の階調値もワーキングメモリ280に格納する。さらに、マゼンダ出力データ格納領域268bの(0,0)に位置に“0”を格納し、シアン入力データ格納領域261aの(0,0)へ、マゼンダの階調値を加算する。
【0203】
次いで、CPU24は、マゼンダの未処理画素を選択する(ステップS332)。メモリ280に格納した重心位置に最も近い画素を選択する。複数あれば、ランダムに選択する。例えば(0,1)に位置するマゼンダの画素を選択するものとする。次いで、濃度の合計が閾値を超えるか判断する(ステップS333)。選択した画素との階調値の合計は、“40”となり、この場合、閾値を越えないので“NO”が選択され、ステップS334に移行する。
【0204】
次いで、CPU24は、未処理画素を含めた重心を演算する。2つの画素(0,0)、(0,1)の重心を演算すると(0,0.5)となる。次いで、CPU24は、セルの階調値の合計を演算する(ステップS335)。2つの画素の階調値の合計は“40”となり、これをワーキングメモリ280に格納することになる。
【0205】
次いで、CPU24は、選択画素の階調値をシアンの階調値に加算する(ステップS336)。シアンドットとマゼンダドットとの重なりを防ぐためである。そして、マゼンダ出力データ格納領域268bの(0,1)に“0”を格納する。次いで、CPU24は、ワーキングメモリ280に格納した階調値の合計が閾値と等しいか否か判断される(ステップS337)。階調値の合計は、“40”で閾値と等しくないので、“NO”が選択され、再びステップS332に移行し、階調値の合計が閾値を超えるまで処理が繰り返されることになる。
【0206】
ステップS333で、濃度の合計(階調値の合計)が閾値を超えると、処理は、ステップS339に移行し、閾値超えた場合の重心演算処理を行う。シアンの場合と同様に、閾値に達するのに必要な値分が、最後に選択した画素の階調値として、重心の演算を行う。その値をシアンの対応する画素の位置の階調値に加算し(ステップS340)、残った階調値を最後に選択した未処理画素に戻す(ステップS341)。
【0207】
そして、処理はステップS338(図27)に移行し、重心位置にマゼンダドットを生成する処理を行う。ステップS337で閾値と等しい場合も同様にステップS338に移行し、マゼンダドットの生成を行う。重心位置は、すでにメモリ280に格納されているので、その重心に位置する画素をドットを生成すべく、当該位置のマゼンダ出力データ格納領域268bに“255”を格納する。
【0208】
次いで、シアン入力に対して減算処理を行う。まず、マゼンダドットの位置に対応するシアンの画素位置を選択する(ステップS342)。次いで、CPU24は、選択したシアン画素の階調値の合計が閾値を超えるか否か判断する(ステップS343)。マゼンダドットの発生する位置を(1,1)とすると対応するシアン入力の階調値は“40”なので、閾値“255”を超えずに“NO”が選択される。
【0209】
次いで、選択したシアンの画素位置を“0”にする(ステップS344)。そして、ワーキングメモリ280に減算した階調値“60”を格納する。次いで、メモリ280に格納した階調値が閾値と等しいか否か判断される(ステップS345)が、この場合は等しくないので、“NO”が選択され、再びステップS342に移行する。
【0210】
次いで、CPU24は、マゼンダドットに最も近いシアン画素を選択する(S342)が、これも階調値を“0”にした画素の上下左右の4画素を選択することにする。階調値の合計は、“300”で閾値を超えるので、ステップS343で“YES”が選択されて、ステップS346に移行する。
【0211】
ステップS346において、減算すべき減算量の演算を行うが、シアンの場合と同様に、均等に各画素から階調値を減算する。49、49、49、48づつ、選択した4つの画素から階調値を減算することにし、各画素から実際に階調値の減算を行う(ステップS347)。
【0212】
次いで、図23に戻り、上述と同様に処理を行うことになる。その結果、図33の右から2番目の図及び右図に示すようにシアン出力データと、マゼンダ出力データとを得ることができる。この場合も同様に、シアンとマゼンダとは互いに重なり合ってドットが生成されることがない。そのため、視覚的に快適な印刷出力を得ることができる。
【0213】
以上、3つの各処理によって得られた再生データは、CPU24によってパルス幅変調され、ドットごとにレーザーパルス駆動有り又は無しの駆動データに変換されて、印刷エンジン22に出力される。そして、印刷エンジン22において、この駆動データに基づいて印刷媒体への印刷が行われるのである。
【0214】
図34乃至図37は、実際に印刷を行った場合の印刷出力の例を示す。図34(a)は、入力階調値の小さい(ドット密度が低い)マゼンダを優先してハーフトーン処理をし、減算処理後のシアン濃出力データとシアン淡出力データとから構成されるシアン出力データの印刷出力の例である。図34(b)は、入力階調値の小さい(ドット密度が低い)シアンを優先してハーフトーン処理をし、減算処理後のマゼンダ濃出力データとマゼンダ淡出力データとから構成されるマゼンダ出力データの印刷出力の例である。そして、図35は、シアン出力データとマゼンダ出力データとを重ね合わせた印刷出力の例である。図35に示すように、2つの出力ドットを重ね合わせても、2つのドットが重なる部分が少なく、さらにシアンとマゼンダとのドット間距離も均一に保たれ、粒状的なドットの生成を抑えた快適な印刷出力を得ることが可能となる。
【0215】
これに対して、図36(a)は、入力階調値の大きい(ドット密度が高い)マゼンダを優先して処理をし、演算処理後のシアン濃出力データとシアン淡出力データとから構成されるシアン出力データの印刷出力の例である。図36(b)は、入力階調値の大きい(ドット密度が小さい)シアンを優先して処理をし、演算処理後のマゼンダ濃出力データとマゼンダ淡出力データとから構成されるマゼンダ出力データの印刷出力の例である。そして、図37は、この2つのデータを重ね合わせた印刷出力の例である。図37に示すように、ところどころにシアンとマゼンダのドットが重なり合って粒状的なドットが発生し、これが視覚に入り易く、図35と比較して、快適な印刷出力が得られているとはいえない。
【0216】
このように本発明では、シアンとマゼンダとでドットが重なることによる、粒状的な印刷出力を抑え、シアンとマゼンダとでドット間距離が一定に保たれ、視覚的に快適な印刷出力を得ることが可能になる。
【0217】
なお、上述したように本発明は、図1の画像出力装置にて処理が行われるとして説明したが、例えば図38に示すような他のシステムにおいても適用される。すなわち、図38に示すように、ホストコンピュータ10内で、色変換処理211、ハーフトーン処理212を行い、その処理後のデータを画像出力装置20に出力するようにしている。この場合、上述したディザ処理、誤差拡散処理、CC法による処理は、いずれもホストコンピュータ10内のハーフトーン処理部212で行われることになる。
【0218】
また、画像出力装置20としてレーザドライバ221等を利用したレーザプリンタの例で説明したが、他にもイエロー、マゼンダ、シアン、ブラックのインクを吐出させて印刷を行うインクジェットプリンタや、さらにバブルジェット(登録商標)プリンタでも本発明は適用され、同様の効果を奏することができる。
【図面の簡単な説明】
【図1】本発明が適用されるシステム全体の構成を示す図である。
【図2】画像出力装置の構成図を示す図である。
【図3】シアンとマゼンダの印刷出力を模式的に示した図である。
【図4】本発明が適用される処理全体の動作を示すフローチャートである。
【図5】本発明が適用される処理全体の動作を示すフローチャートである。
【図6】RAM26の内部構成の例を示す図である。
【図7】閾値マトリックスの例を示す図である。
【図8】RAM26の内部構成の例を示す図である。
【図9】RAM26の内部構成の例を示す図である。
【図10】RAM26の内部構成の例を示す図である。
【図11】減算処理の動作を示すフローチャートである。
【図12】RAM26の内部構成の例を示す図である。
【図13】RAM26の内部構成の例を示す図である。
【図14】RAM26の内部構成の例を示す図である。
【図15】RAM26の内部構成の例を示す図である。
【図16】RAM26の内部構成の例を示す図である。
【図17】RAM26の内部構成の例を示す図であると拡散マトリックスの例を示す図である。
【図18】RAM26の内部構成の例を示す図である。
【図19】RAM26の内部構成の例を示す図である。
【図20】RAM26の内部構成の例を示す図である。
【図21】RAM26の内部構成の例を示す図である。
【図22】RAM26の内部構成の例を示す図である。
【図23】CC法による処理の動作を示すフローチャートである。
【図24】シアンドット生成処理を示すフローチャートである。
【図25】シアンドット生成処理を示すフローチャートである。
【図26】マゼンダドット生成処理を示すフローチャートである。
【図27】マゼンダドット生成処理を示すフローチャートである。
【図28】RAM26の内部構成の例を示す図である。
【図29】RAM26の内部構成の例を示す図である。
【図30】RAM26の内部構成の例を示す図である。
【図31】RAM26の内部構成の例を示す図である。
【図32】RAM26の内部構成の例を示す図である。
【図33】RAM26の内部構成の例を示す図である。
【図34】本発明による印刷出力の例である。
【図35】本発明による印刷出力の例である。
【図36】入力階調値の高い方を優先した場合の印刷出力の例である。
【図37】入力階調値の高い方を優先した場合の印刷出力の例である。
【図38】本発明が適用される他のシステム全体の構成を示す図である。
【符号の説明】
10 ホストコンピュータ 20 画像出力装置 21 画像処理部 211 色変換部 212 ハーフトーン処理部 213 パルス幅変調部 22 印刷エンジン 24 CPU 25 ROM 26 RAM 261a シアン入力データ格納領域 261b マゼンダ入力データ格納領域 262a シアン淡データ格納領域 262b マゼンダ淡データ格納領域 263a シアン淡データ+マゼンダ濃データ格納領域 263b シアン濃データ+マゼンダ淡データ格納領域 264 シアン淡出力データ格納領域 265 合計階調値格納領域 266 マゼンダ濃出力データ格納領域 267 マゼンダ淡出力データ格納領域 268 シアン濃出力データ格納領域 269a シアン出力データ格納領域 269b マゼンダ出力データ格納領域 270 拡散誤差格納領域
Claims (18)
- 画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、
前記第1のデータ又は前記第2のデータのうち、レベル値の低い第1のデータ又は第2のデータの成分から先にM種類のレベル値を有するデータに変換する第1の変換手段と、
前記レベル値の低い第1のデータ又は第2のデータの成分のレベル値を、それぞれレベル値の高い前記第2のデータ又は前記第1のデータの成分に加算する加算手段と、
前記加算手段で加算した第1のデータ又は第2のデータの成分に対し、前記M種類のレベル値に変換した前記画素に対応する画素において当該画素のレベル値から所定値を減算する減算手段と、
前記減算手段で減算した前記第1のデータ又は第2のデータの成分に対して、M種類のレベル値を有するデータに変換する第2の変換手段と
を備えることを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1の変換手段と前記第2の変換手段は、所定の閾値が格納された閾値マトリックスを用いて、前記レベル値の低い第1のデータ又は前記第2のデータの成分、及び前記減算手段で減算した前記第1のデータ又は前記第2のデータの成分に対して、それぞれ各レベル値と前記閾値とを比較してM種類のレベル値を有する前記データに変換する、ことを特徴とする画像処理装置。 - 請求項2記載の画像処理装置において、
前記第1の変換手段は、前記第1のデータに対して第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、前記第2のデータに対して第1のデータのレベル値と比較したときのレベル値が低い成分と高い成分に分離し、レベル値の低い成分の第1のデータ又は第2のデータに対して前記M種類のレベル値を有するデータに変換する、こと特徴とする画像処理装置。 - 請求項3記載の画像処理装置において、
前記加算手段は、前記第1の変換手段で変換を行わなかった前記第1のデータ又は前記第2のデータのうち、前記分離したレベル値の高い成分を有する前記第1のデータ又は第2のデータに対して、それぞれレベル値の低い前記第2のデータ又は前記第1のデータの成分を加算する、ことを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1の変換手段と前記第2の変換手段は、前記レベル値の低い第1のデータ又は前記第2のデータの成分、及び前記減算手段で減算した前記第1のデータ又は前記第2のデータの成分に対して、それぞれ各レベル値と所定の閾値とを比較してM種類のレベル値を有する前記データに変換するとともに、前記M種類のレベル値に変換したときの誤差分を前記第1のデータ又は前記第2のデータのレベル値に加算して前記閾値と比較する、ことを特徴とする画像処理装置。 - 請求項5記載の画像処理装置において、
前記第1の変換手段と前記第2の変換手段は、拡散マトリックスに格納された誤差分の値を拡散させる比率に基づいて各画素に前記誤差分を拡散させる、ことを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1の変換手段と前記第2の変換手段は、さらに
前記レベル値の低い第1のデータの画素若しくは第1のデータの画素を選択し、又は前記減算手段で減算した前記第1のデータの画素若しくは第1のデータの画素を選択し、選択した画素ごとのレベル値の総和が閾値となるまで未処理画素を選択して画素群を生成する生成手段と、生成した画素群の所定画素に対して前記M種類のレベル値を付与する付与手段と、をそれぞれ備えることを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1の変換手段と前記第2の変換手段は、さらに、
前記レベル値の低い第1のデータ又は第2のデータの画素を選択し、又は前記減算手段で減算した前記第1のデータ又は前記第2のデータの画素を選択し、選択した画素ごとの前記レベル値の総和が閾値以上となるまで画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で生成した画素群の重心位置を決定する重心位置決定手段と、
前記画素群重心決定手段で決定した重心に位置する画素に前記M種類のレベル値を付与する付与手段とをそれぞれ備え、
前記画素群生成手段は、前記画素群重心決定手段で決定した重心から最も近い画素を画素ごとの階調画像データ値の総和が閾値以上となるまで選択し続けることにより前記画素群を生成する、ことを特徴とする画像処理装置。 - 請求項8記載の画像処理装置において、
前記画素群重心位置決定手段は、前記重心位置決定手段で決定した重心位置から最も近い画素が複数あるときは、ランダムに選択することを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1のデータ又は前記第2のデータは、シアンデータ又はマゼンダデータである、ことを特徴とする画像処理装置。 - 画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、
前記第1のデータを前記第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、前記第2のデータを前記第1のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離し、前記第1のデータのレベル値の低い成分と前記第2のデータのレベル値の高い成分とを加算して第3のデータを生成するとともに、前記第1のデータのレベル値の高い成分と前記第2のデータのレベル値の低い成分とを加算して第4のデータを生成する加算手段と、
前記第1のデータのレベル値の低い成分又は前記第2のデータのレベル値の低い成分をM種類のレベル値を有するデータに変換する第1の変換手段と、
前記M種類のレベル値に変換された画素に対応する、前記第3のデータ又は前記第4のデータの画素に対し当該画素のレベル値から所定値を減算する減算手段と、
前記減算した第3のデータ又は第4のデータをM種類のレベル値を有するデータに変換する第2の変換手段と、
を備えることを特徴とする画像処理装置。 - 画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、
前記第1のデータと前記第2のデータとでレベル値が低い方の初期画素を選択し、選択した初期画素の存在する前記第1のデータ又は前記第2のデータで画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第1の付与手段と、
前記画素群の生成で選択した画素のレベル値を、前記レベル値の高い前記第2のデータ又は第1のデータの成分に加算する加算手段と、
前記所定のレベル値を付与された画素に対応する、前記加算手段で加算した前記第2のデータ又は第1のデータの画素に対してそのレベル値を減算する減算手段と、
前記減算した前記第2のデータ又は前記第1のデータに対して、画素を選択し選択した画素ごとのレベル値の総和が前記閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第2の付与手段と、
を備えることを特徴とする画像処理装置。 - 画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、
前記第1のデータ又は前記第2のデータのうち、レベル値の低い第1のデータ又は第2のデータの成分から先にM種類のレベル値を有するデータに変換する第1の変換工程と、
前記レベル値の低い第1のデータ又は第2のデータの成分のレベル値を、それぞれレベル値の高い前記第2のデータ又は前記第1のデータの成分に加算する加算工程と、
前記加算手段で加算した第1のデータ又は第2のデータの成分に対し、前記M種類のレベル値に変換した前記画素に対応する画素において当該画素のレベル値から所定値を減算する減算工程と、
前記減算手段で減算した前記第1のデータ又は第2のデータの成分に対して、M種類のレベル値を有するデータに変換する第2の変換工程と
を備えることを特徴とする画像処理方法。 - 画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、
前記第1のデータを前記第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、前記第2のデータを前記第1のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離し、前記第1のデータのレベル値の低い成分と前記第2のデータのレベル値の高い成分とを加算して第3のデータを生成するとともに、前記第1のデータのレベル値の高い成分と前記第2のデータのレベル値の低い成分とを加算して第4のデータを生成する加算工程と、
前記第1のデータのレベル値の低い成分又は前記第2のデータのレベル値の低い成分をM種類のレベル値を有するデータに変換する第1の変換工程と、
前記M種類のレベル値に変換された画素に対応する、前記第3のデータ又は前記第4のデータの画素に対し当該画素のレベル値から所定値を減算する減算工程と、
前記減算した第3のデータ又は第4のデータをM種類のレベル値を有するデータに変換する第2の変換工程と、
を備えることを特徴とする画像処理方法。 - 画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、
前記第1のデータと前記第2のデータとでレベル値が低い方の初期画素を選択し、選択した初期画素の存在する前記第1のデータ又は前記第2のデータで画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第1の付与工程と、
前記画素群の生成で選択した画素のレベル値を、前記レベル値の高い前記第2のデータ又は前記第1のデータの成分に加算する加算工程と、
前記所定のレベル値を付与された画素に対応する、前記加算手段で加算した前記第2のデータ又は第1のデータの画素に対してそのレベル値を減算する減算工程と、
前記減算した前記第2のデータ又は前記第1のデータに対して、画素を選択し選択した画素ごとのレベル値の総和が前記閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第2の付与工程と、
を備えることを特徴とする画像処理方法。 - 画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、
前記第1のデータ又は前記第2のデータのうち、レベル値の低い第1のデータ又は第2のデータの成分から先にM種類のレベル値を有するデータに変換する第1の変換処理と、
前記レベル値の低い第1のデータ又は第2のデータの成分のレベル値を、それぞれレベル値の高い前記第2のデータ又は前記第1のデータの成分に加算する加算処理と、
前記加算手段で加算した第1のデータ又は第2のデータの成分に対し、前記M種類のレベル値に変換した前記画素に対応する画素において当該画素のレベル値から所定値を減算する減算処理と、
前記減算手段で減算した前記第1のデータ又は第2のデータの成分に対して、M種類のレベル値を有するデータに変換する第2の変換処理と
をコンピュータに実行させるためのプログラム。 - 画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、
前記第1のデータを前記第2のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離するとともに、前記第2のデータを前記第1のデータのレベル値と比較したときのレベル値の低い成分と高い成分に分離し、前記第1のデータのレベル値の低い成分と前記第2のデータのレベル値の高い成分とを加算して第3のデータを生成するとともに、前記第1のデータのレベル値の高い成分と前記第2のデータのレベル値の低い成分とを加算して第4のデータを生成する加算処理と、
前記第1のデータのレベル値の低い成分又は前記第2のデータのレベル値の低い成分をM種類のレベル値を有するデータに変換する第1の変換処理と、
前記M種類のレベル値に変換された画素に対応する、前記第3のデータ又は前記第4のデータの画素に対し当該画素のレベル値から所定値を減算する減算処理と、
前記減算した第3のデータ又は第4のデータをM種類のレベル値を有するデータに変換する第2の変換処理と、
をコンピュータに実行させるためのプログラム。 - 画素ごとにともにN(Nは正の整数)種類以上のレベル値を有する第1のデータと第2のデータに対して、それぞれ画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるプログラムにおいて、
前記第1のデータと前記第2のデータとでレベル値が低い方の初期画素を選択し、選択した初期画素の存在する第1のデータ又は前記第2のデータで画素ごとのレベル値の総和が閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第1の付与処理と、
前記画素群の生成で選択した画素のレベル値を、前記レベル値の高い前記第2のデータ又は前記第1のデータの成分に加算する加算処理と、
前記所定のレベル値を付与された画素に対応する、前記加算手段で加算した前記第2のデータ又は前記第1のデータの画素に対してそのレベル値を減算する減算処理と、
前記減算した前記第2のデータ又は前記第1のデータに対して、画素を選択し選択した画素ごとのレベル値の総和が前記閾値以上となるまで画素を選択して画素群を生成し、生成した画素群の重心に位置する画素に前記M種類のうち所定のレベル値を付与する第2の付与処理と、
をコンピュータに実行させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003198451A JP2005039413A (ja) | 2003-07-17 | 2003-07-17 | 画像処理装置、画像処理方法、及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003198451A JP2005039413A (ja) | 2003-07-17 | 2003-07-17 | 画像処理装置、画像処理方法、及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005039413A true JP2005039413A (ja) | 2005-02-10 |
Family
ID=34208232
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003198451A Pending JP2005039413A (ja) | 2003-07-17 | 2003-07-17 | 画像処理装置、画像処理方法、及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2005039413A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010085602A (ja) * | 2008-09-30 | 2010-04-15 | Fuji Xerox Co Ltd | 画像形成装置 |
WO2018164942A1 (en) * | 2017-03-06 | 2018-09-13 | E Ink Corporation | Method for rendering color images |
-
2003
- 2003-07-17 JP JP2003198451A patent/JP2005039413A/ja active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010085602A (ja) * | 2008-09-30 | 2010-04-15 | Fuji Xerox Co Ltd | 画像形成装置 |
WO2018164942A1 (en) * | 2017-03-06 | 2018-09-13 | E Ink Corporation | Method for rendering color images |
US10467984B2 (en) | 2017-03-06 | 2019-11-05 | E Ink Corporation | Method for rendering color images |
AU2018230927B2 (en) * | 2017-03-06 | 2020-09-24 | E Ink Corporation | Method for rendering color images |
US11094288B2 (en) | 2017-03-06 | 2021-08-17 | E Ink Corporation | Method and apparatus for rendering color images |
AU2020227089B2 (en) * | 2017-03-06 | 2021-10-21 | E Ink Corporation | Method for Rendering Color Images |
US11527216B2 (en) | 2017-03-06 | 2022-12-13 | E Ink Corporation | Method for rendering color images |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7474443B2 (en) | Image formation using dots of different spatial density determined based on comparison of pixel value to threshold value matrix and error added by error diffusion | |
JP2007060111A (ja) | 階調処理装置および方法 | |
US7286266B2 (en) | Printer and image processing device for the same | |
KR102307264B1 (ko) | 화상 처리 장치, 화상 처리 방법 및 저장 매체 | |
JP4479663B2 (ja) | 固定セルによるハーフトーン処理を行う画像処理装置,画像処理方法,及び画像処理プログラム | |
US7369710B2 (en) | Image processing device, image processing method and image processing program | |
US7433083B2 (en) | Halftone-image processing device | |
JP2007088847A (ja) | 画像形成装置、画像形成方法及び画像形成プログラム | |
US9894245B2 (en) | Image processing device including image size adjustment unit | |
JP2005039413A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP3302223B2 (ja) | 画像処理装置 | |
JP4742871B2 (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP4492619B2 (ja) | プリンタ及びその画像処理装置 | |
US7394572B2 (en) | Method and apparatus for processing of half-tone image | |
JPH10229501A (ja) | 画像処理装置及び方法 | |
JP2005064941A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2005117642A (ja) | ハーフトーン処理方法、画像処理装置、画像処理方法、及びプログラム | |
JP2005295131A (ja) | 画像処理装置、画像処理方法および画像処理プログラム | |
JP4409883B2 (ja) | 画像印刷装置 | |
JP2005341142A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP2002027249A (ja) | ハーフトーン処理装置およびその処理手順を記録した媒体 | |
JP3896982B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP3928576B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP2005080217A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2005223462A (ja) | プルーフ画像生成装置、プルーフ画像生成方法およびプログラム |