JP2005064941A - 画像処理装置、画像処理方法、及びプログラム - Google Patents
画像処理装置、画像処理方法、及びプログラム Download PDFInfo
- Publication number
- JP2005064941A JP2005064941A JP2003293451A JP2003293451A JP2005064941A JP 2005064941 A JP2005064941 A JP 2005064941A JP 2003293451 A JP2003293451 A JP 2003293451A JP 2003293451 A JP2003293451 A JP 2003293451A JP 2005064941 A JP2005064941 A JP 2005064941A
- Authority
- JP
- Japan
- Prior art keywords
- data
- pixel
- component
- dot
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Color, Gradation (AREA)
- Image Processing (AREA)
- Facsimile Image Signal Circuits (AREA)
Abstract
【課題】サイズの異なるドット同士が重なり合う確率を下げて出力画像の粒状性を改善し、視覚的に快適な出力画像を得る。
【解決手段】入力階調データに対して分版関数を用いてS成分とL成分とに分離する。CC法によるハーフトーン処理は、ドット密度が低い方の成分から先に処理を行う。処理の際に各画素の階調値をドット密度の高い成分に加算する。密度の低い成分に対する処理が終了した後、加算したドット密度の高い成分に対する減算処理を行う。そして、減算後の成分に対してCC法による処理を行う。ディザ法、誤差拡散法によるハーフトーン処理は、分離したS成分、L成分に対して各画素位置ごとにドット密度を比較しS疎データ、L疎データ、S疎+L密データ、S密+L疎データを生成する。まず、S疎データに対してディザ又は誤差拡散法による処理を行い、その後S疎+L密データから処理後のS疎データを減算する。減算後のL密データをディザ又は誤差拡散法による処理を行う。同様にL疎データ、S密+L疎データに対して処理を行う。
【選択図】図3
【解決手段】入力階調データに対して分版関数を用いてS成分とL成分とに分離する。CC法によるハーフトーン処理は、ドット密度が低い方の成分から先に処理を行う。処理の際に各画素の階調値をドット密度の高い成分に加算する。密度の低い成分に対する処理が終了した後、加算したドット密度の高い成分に対する減算処理を行う。そして、減算後の成分に対してCC法による処理を行う。ディザ法、誤差拡散法によるハーフトーン処理は、分離したS成分、L成分に対して各画素位置ごとにドット密度を比較しS疎データ、L疎データ、S疎+L密データ、S密+L疎データを生成する。まず、S疎データに対してディザ又は誤差拡散法による処理を行い、その後S疎+L密データから処理後のS疎データを減算する。減算後のL密データをディザ又は誤差拡散法による処理を行う。同様にL疎データ、S密+L疎データに対して処理を行う。
【選択図】図3
Description
本発明は、プリンタなどの画像出力装置における階調画像データのハーフトーン処理に関する。
従来から、プリンタなどの画像出力装置は、各画素ごとに多値の階調値を有する画像データに対して、ドットの有無を表す2値の値に変換処理して印刷用紙に印刷を行うようになされている。一般には、多値の階調値を2値の値に変換する処理のことをハーフトーン処理と称されている。
かかるハーフトーン処理の方法としては、所定の閾値が格納された閾値マトリックスを利用して、入力階調値が閾値よりも大きいか小さいかにより2値化するディザ法や、同様に閾値を設定しその閾値よりも大きいか小さいかにより2値化するとともにその誤差分をまわりの画素の階調値に加算して処理を進める誤差拡散法などがある。
さらに、入力画像の各画素の階調値の合計が所定の閾値になるまでセルを構成する画素を選択し、セルの中心位置にドットを生成させるようにしたハーフトーン処理も知られている(例えば、特許文献1)。
特開平11−27528号公報
しかしながら、ドットサイズが異なる印刷出力を得ることのできる画像出力装置においては、異なるドットサイズのデータにそれぞれ同じハーフトーン処理を行うとドットの間隔がばらついて発生していた。かかるドットのばらつきは、視覚的に目立ち易いパターンとなり、いわゆる粒状的なドットが発生する原因となっていた。
また、上述した特開平11−27528においても、セルを構成する画素の選択を所定のテーブルを用いて行っているが、テーブル内で左側に存在する画素は既に処理済みの場合が多く、結果的に生成されるセルが歪んだ形となってしまう。かかる場合に、セルの中心にドットを生成させるとある部分では隣のドットと重なって形成されてしまうことになる。例えば、大ドットと小ドットとなるデータに、それぞれかかる処理を行うと、ある部分ではドットが重なったりあるいは近寄って発生するなど視覚的に不快な印刷出力となっていた。
そこで、本発明は、サイズの異なるドット同士が重なり合う確率を下げて出力画像の粒状性を改善し、視覚的に快適な出力画像を得ることを目的とするものである。
上記の目的を達成するために、本発明は、画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、階調データをドットサイズに応じた少なくとも2つのデータに分離し、分離された第1のデータと第2のデータのドット密度を検出する検出手段と、検出手段によりドット密度の低いとされた第1のデータ又は第2のデータから先に前記M種類のレベル値を有するデータに変換する第1の変換手段と、検出手段によりドット密度が高いとされた第2のデータ又は第1のデータに対して、第1の変換手段でM種類のレベル値に変換された画素に対応する画素において当該画素のレベル値から所定値を減算する減算手段と、減算手段で減算した第2のデータ又は第1のデータに対してM種類のレベル値を有するデータに変換する第2の変換手段とを備えることを特徴としている。これにより、例えば、サイズの異なるドット同士が重なる確率が低くなり、出力画像の粒状性が改善され、視覚的に快適な印刷出力を得ることができる。
また本発明は、上記画像処理装置において第1の変換手段及び第2の変換段は、所定の閾値が格納された閾値マトリックスを用いてN種類のレベル値をM種類のレベル値に変換することを特徴としている。これにより、ディザ法を用いてハーフトーン処理を行っても、視覚的に快適な画像出力を得ることができる。
さらに本発明は、上記画像処理装置において第1の変換手段は、検出手段による第1のデータと第2のデータとのドット密度を検出した結果、さらに第1のデータをドット密度の低い成分と高い成分に分離するとともに、第2のデータをドット密度の低い成分と高い成分に分離し、第1のデータ又は第2のデータのドット密度の低い成分から先にM種類のレベル値に変換することを特徴としている。これにより、例えば、ドットサイズに応じてドット密度の低い方から先に処理を進めることができ、入力階調値に忠実にドットが分布し、ドットサイズの異なるもの同士が重なって画像が出力される確率を下げることができる。
さらに本発明は、上記画像処理装置において、分離したドット密度の高い第1のデータ又は第2のデータの成分に対してそれぞれドット密度の低い第1のデータ又は第2のデータの成分を加算する加算手段をさらに備え、減算手段は加算手段で加算した第1のデータ又は第2のデータのドット密度の高い成分に対して減算することを特徴としている。これにより、例えば、ドット密度の高い領域に異なるサイズのドットが生成される確率を下げることができる。
さらに本発明は、上記画像処理装置において第1の変換手段及び第2の変換手段は、N種類の各レベル値を閾値とを比較してM種類のレベル値に変換するとともに、M種類のレベル値に変換したときの誤差を第1のデータ又は第2のデータの各レベル値に加算して閾値と比較することを特徴としている。これにより、例えば、誤差拡散法によるハーフトーン処理でも、サイズの異なるドット同士が重なる確率を下げて粒状性を改善し、視覚的に快適な印刷出力を得ることができる。
さらに本発明は、上記画像処理装置において第1の変換手段及び第2の変換手段は、拡散マトリックスに格納された誤差分の値を拡散させる比率に基づいて各画素に前記誤差分を拡散させることを特徴としている。これにより、例えば、マトリックスを利用して簡易にその誤差分を周囲の画素に拡散させることができる。
さらに本発明は、上記画像処理装置において第1の変換手段及び第2の変換手段は、ドット密度が低い第1のデータ又は第2のデータの画素を選択、又は減算後の第1のデータ又は第2のデータを選択し、選択した画素ごとのレベル値の総和が閾値となるまで未処理画素を選択して画素群を生成する生成手段と、生成した画素群の所定画素に対してM種類のレベル値を付与する付与手段と、をそれぞれ備えることを特徴としている。これにより、例えば、サイズの異なるドット同士でもドット間距離が一定に保たれ、快適な印刷出力を得ることができる。
さらに本発明は、上記画像処理装置において第1の変換手段及び前記第2の変換手段は、さらに、ドット密度が低い第1のデータ又は第2のデータの画素を選択、又は減算後の第1のデータ又は第2のデータを選択し、選択した画素ごとのレベル値の総和が閾値となるまで画素を選択して画素群を生成する画素群生成手段と、画素群生成手段で生成した画素群の重心位置を決定する重心位置決定手段と、重心位置決定手段で決定した重心に位置する画素にM種類のレベル値を付与する付与手段とをそれぞれ備え、画素群生成手段は、重心位置決定手段で決定した重心から最も近い画素を選択して前記画素群を生成することを特徴としている。これにより、例えば、サイズの異なるドット同士でもドット間距離が一定に保たれ、快適に印刷出力を得ることができる。
さらに本発明は、上記画像処理装置において画素群生成手段は、決定した画素が複数あるときはランダムに選択することを特徴としている。これにより、例えば、複数の画素から構成されるセルが円状に成長し、ドット間距離を一定に保つことができる。
また、上記目的を達成するために本発明は、画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、階調データに対してドット密度が低密度となる成分を検出する検出手段と、検出手段によって検出された低密度の成分から前記M種類のレベル値を有するデータに変換する変換手段と、を備えることを特徴としている。これにより、例えば、サイズの異なるドット同士が重なり合う確率を下げて出力画像の粒状性を改善し、視覚的に快適な出力画像を得ることができる。
また本発明は、上記画像処理装置において検出手段は低密度の成分を検出するとともにドット密度が高密度となる成分を検出し、さらに、検出手段で検出された高密度成分に対して低密度成分の階調値を加算する加算手段と、加算手段で加算した高密度成分に対して所定値を減算する減算手段と、減算手段により減算された高密度成分に対してM種類のレベル値を有するデータに変換する第2の変換手段と、を備えることを特徴としている。これにより、例えば、入力階調値に忠実なドット分布を得るとともに、サイズの異なるドット同士が重なる確率を下げることができる。
さらに、上記目的を達成するために本発明は、画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、階調データをドットサイズに応じた少なくとも2つのデータに分離し、分離された第1のデータと第2のデータのドット密度を検出する検出工程と、検出工程によりドット密度の低いとされた第1のデータ又は第2のデータから先にM種類のレベル値を有するデータに変換する第1の変換工程と、検出工程によりドット密度が高いとされた第2のデータ又は第1のデータに対して、第1の変換工程でM種類のレベル値に変換された画素に対応する画素において当該画素のレベル値から所定値を減算する減算工程と、減算工程で減算した第2のデータ又は第1のデータに対してM種類のレベル値を有するデータに変換する第2の変換工程とを備えることを特徴としている。これにより、例えば、サイズの異なるドット同士が重なり合う確率を下げて出力画像の粒状性を改善し、視覚的に快適な出力画像を得ることができる。
さらに、上記目的を達成するために本発明は、画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、階調データに対してドット密度が低密度となる成分を検出する検出工程と、検出工程によって検出された低密度の成分からM種類のレベル値を有するデータに変換する変換工程と、を備えることを特徴としている。これにより、例えば、サイズの異なるドット同士が重なり合う確率を下げて出力画像の粒状性を改善し、視覚的に快適な出力画像を得ることができる。
さらに、上記目的を達成するために本発明は、画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、階調データをドットサイズに応じた少なくとも2つのデータに分離し、分離された第1のデータと第2のデータのドット密度を検出する検出処理と、検出処理によりドット密度の低いとされた第1のデータ又は第2のデータから先にM種類のレベル値を有するデータに変換する第1の変換処理と、検出処理によりドット密度が高いとされた第2のデータ又は第1のデータに対して、第1の変換処理でM種類のレベル値に変換された画素に対応する画素において当該画素のレベル値から所定値を減算する減算処理と、減算処理で減算した第2のデータ又は第1のデータに対してM種類のレベル値を有するデータに変換する第2の変換処理とをコンピュータに実行させるためのプログラムであることを特徴としている。これにより、例えば、サイズの異なるドット同士が重なり合う確率を下げて出力画像の粒状性を改善し、視覚的に快適な出力画像を得ることができる。
さらに、上記目的を達成するために本発明は、画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、階調データに対してドット密度が低密度となる成分を検出する検出処理と、検出処理によって検出された低密度の成分からM種類のレベル値を有するデータに変換する変換処理と、をコンピュータに実行させるためのプログラムであることを特徴としている。これにより、例えば、サイズの異なるドット同士が重なり合う確率を下げて出力画像の粒状性を改善し、視覚的に快適な出力画像を得ることができる。
以下、図面を参照して本発明の実施の形態例を説明する。図1は、本発明が適用されるシステム全体の構成を示す図である。全体としてホストコンピュータ10と、画像出力装置20とから構成される。
ホストコンピュータ10は、アプリケーション部11とラスタライズ12とから構成される。アプリケーション部11では、文字データ、図形データ、ビットマップデータ等の印刷対象のデータが生成される。例えば、ホストコンピュータ10でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどが生成される。生成されたこれらのデータは、ラスタライズ部12へ出力される。
ラスタライズ12は、アプリケーション部11から出力された印刷対象のデータを画素ごと(又はドットごと)にモノクロデータからなる階調画像データに変換する。本実施例では、画素ごと0から255までの階調値(レベル値)を有する(8ビット)ことになる。ラスタライズ12における階調画像データの生成は、実際にはホストコンピュータ10に実装されたドライバによって処理が行われる。ラスタライズ12から出力される階調画像データは、画像出力装置20に出力される。
画像出力装置20は、全体として画像処理部21と印刷エンジン22とから構成される。画像処理部21は、ハーフトーン処理部211とパルス幅変調部212とから構成される。ハーフトーン処理部211は、ホストコンピュータ10から出力された階調画像データに対して、2値(或いは4値)の値(レベル値)に変換し、量子化データとして印刷エンジン22に出力する。ハーフトーン処理としては、ディザ処理、誤差拡散処理、複数の画素からなるセルを構成してその重心にドットを生成させる重心利用した処理(Circular Cell法、以下CC法)がある。各処理の具体的な内容は後述する。
パルス幅変調部212は、ハーフトーン処理部211から出力された量子化データが入力され、この量子化データ対してドットごと(或いは画素ごと)にレーザ駆動パルス有る又は無しの駆動データを生成する。そして、駆動データが印刷エンジン22に出力される。
印刷エンジン22は、レーザドライバ221とレーザダイオード(LD)222とから構成される。レーザドライバ221は、入力された駆動データから駆動パルス有り又は無し等を示す制御データを生成し、レーザダイオード222に出力する。レーザダイオード222は、この制御データに基づいて駆動され、さらに図示しない感光ドラムや転写ベルトが駆動されて、印刷用紙等の記録媒体にホストコンピュータ10からのデータが印刷されることになる。
次に図2を参照して、画像出力装置20の具体的構成について説明する。ここで、図1の画像出力装置20のうち、ハーフトーン処理部211及びパルス幅変調部212は、図2におけるCPU24、ROM25、及びRAM26に対応する。また、図1の印刷エンジン22は図2の印刷エンジン22に対応する。
画像出力装置20は、全体として、入力インターフェース(I/F)23、CPU24、ROM25、RAM26、印刷エンジン22とから構成され、バスを介して互いに接続されている。入力I/F23は、ホストコンピュータ10と画像出力装置20とのインターフェースの役割を果たす。入力I/F23は、所定の伝送方式により伝送された、ホストコンピュータ10からの階調画像データが入力され、画像出力装置20で処理できるデータに変換される。階調画像データは、一旦RAM26に格納される。
CPU24は、バスを介して入力I/F23、ROM25、RAM26、印刷エンジン22と接続され、ROM25に格納されたプログラムを読み出して、ハーフトーン処理等の各種処理を行う。その詳細は後述する。RAM26は、CPU24で実行される各処理のワーキングメモリとして役割を果たし、処理後の各種データが格納される。そして、印刷エンジン22のレーザドライバ221を駆動させるための駆動データも格納される。RAM26の具体的構成、格納される各種データの詳細についでは後述する。
印刷エンジン22は、図1の印刷エンジンと同様の構成で、RAM26に格納された駆動データがCPU24の制御により入力されて、上述した印刷が行われることになる。
次に、以上のように構成された画像出力装置20における処理の動作について説明する。なお、処理対象の階調画像データは、入力I/F23に入力され、CPU24の制御によりRAM26に格納されたものとして説明する。また、ハーフトーン処理として、CC法、ディザ法、及び誤差拡散法の3つの方法を用いた処理についてそれぞれ説明することにする。
[CC法を用いたハーフトーン処理]
まず具体的な処理を説明する前に、CC法についての概要を説明する。CC法によるハーフトーン処理は、まず初期画素を選択し、所定の閾値に達するまで初期画素周辺の未処理画素を選択して、複数画素からなるセルを構成する。セルを構成する未処理画素選択の際、それまで構成したセルの重心位置から最も近い画素を選択する。そして、閾値に達するとそのセルの重心位置に位置する画素にドット生成を示す値(例えば“255”)を割り当て、それ以外の画素はドットの生成を行わないことを示す値(例えば“0”)を割り当てる。CC法は、以上の処理を入力画像の全てのデータに対して行うことで、量子化されたデータを得るのである。
[CC法を用いたハーフトーン処理]
まず具体的な処理を説明する前に、CC法についての概要を説明する。CC法によるハーフトーン処理は、まず初期画素を選択し、所定の閾値に達するまで初期画素周辺の未処理画素を選択して、複数画素からなるセルを構成する。セルを構成する未処理画素選択の際、それまで構成したセルの重心位置から最も近い画素を選択する。そして、閾値に達するとそのセルの重心位置に位置する画素にドット生成を示す値(例えば“255”)を割り当て、それ以外の画素はドットの生成を行わないことを示す値(例えば“0”)を割り当てる。CC法は、以上の処理を入力画像の全てのデータに対して行うことで、量子化されたデータを得るのである。
上述した特開平11−27528では、セルに取り込むべき未処理画素の選択にテーブルを利用して予め決められた位置の画素を選択するようにしている。一方、CC法は重心位置を利用してセルに取り込むべき未処理画素を選択するようにしているため、特開平11−27528と比較して、セルが円状に成長し、ドット間距離を一定に保つことができ、ドットの分散性を向上させて視覚的に快適な印刷出力を得ることができる。
次に本発明によるCC法を利用したハーフトーン処理の動作の概略を説明する。まず、入力画像データに対して分版関数を用いて異なるサイズのドット成分に分離する。以下ではLargeドット成分(以下L成分)とSmallドット成分(以下S成分)に分離することとして説明する。そして、分離された各成分に対してドット密度の比較を行う。ドット密度が低くなる成分から先に処理を進めるためである。
比較した結果、例えばSドット成分の方がLドット成分よりも密度が低いとき、Sドット成分から先にCC法によるハーフトーン処理を行う。このとき、セルに取り込まれたSドット成分の画素の階調値をLドット成分の対応する画素の階調値に加算して処理を進める。その後、Sドット成分のセルの階調値の合計が閾値に達すると重心位置にある画素にSドット生成を示す“200”を割り当てる。次に、階調値が加算されたLドット成分に対して加算した分だけ減算処理を行うが、Sドット成分でドットが発生する位置に対応する画素から減算する。これにより、Sドットが発生する位置と重なってLドットが発生する確率が下がることになる。また、減算しても加算した分の階調値に達しないときは、さらに対応する画素のまわりから階調値を減算することになる。そして、減算後のLドット成分に対してCC法によるハーフトーン処理を行うことでLドットの生成の有無を示す値(本実施例では“255”)を割り当てることになる。
逆に、先にドット密度の高い成分から処理を進めると、減算処理の過程で、確率的にドットが生成されない位置に対して減算処理を行い、結果的に入力階調値がさらに分散されて、入力分布に忠実でない階調値からなるデータに処理を行うことになる。その後に生成されるドット分布も入力階調値に忠実でないものとなってしまう。以上の理由から、ドット密度の低い成分から先に処理を進めるようにしているのである。
次に上述した処理の詳細について、図3乃至図15を用いて説明することにする。このうち、図3乃至図7は処理の動作を示すフローチャートである。図8は、入力階調画像データをLドット、Sドットの2成分に分離するときの分版関数の一例を示す図である。図9乃至図15は、RAM26に格納された階調画像データの例を示す。以下フローチャートに沿って詳細に本処理について説明する。
まず、図3に示すように、CPU24は本処理を実行するためのプログラムをROM25から読み出して、処理が開始されることになる(ステップS10)。次いで、CPU24は、入力画像データをL成分とS成分に分離する(ステップS11)。具体的には、分版関数を用いることによって各画素の階調値をL成分とS成分とに分離する。図8に分版関数の一例を示す。この図で横軸が入力階調値、縦軸が出力階調値を示し、Sドット用の関数とLドット用の関数の2つのグラフを示している。例えば、入力階調値が“30”のときは、Sドット関数からS成分の出力値として“30”を得る。また、入力階調値が“80”のときは、Sドット用関数からSドット成分として“20”、Lドット用関数からLドット成分として“60”を得る。また、入力階調値が“128”のときは、Lドット成分として“128”を得ることになる。かかる分版関数は、例えばROM25などに格納され、CPU24がこの分版関数を読み出すことによって出力値を得ることができる。
その後、2つの成分に分離された各データは、CPU24の制御によってRAM26のSmall入力データ(以下S成分入力データ)格納領域261a、Large入力データ(以下L成分入力データ)格納領域261bに格納されることになる。その例を図9(a)に示す。この図で示す例では、各領域261a、261bは、6行6列で構成されているが、説明を容易にするためであって、例えば画像1フレーム分のデータを格納できる構成でもよい。また、各座標位置に入力される階調値は、全体画像の画素位置に対応するもので、例えばL成分入力データ格納領域261aで(0,0)の位置は、全体画像の(0,0)に位置する画素に対応するものである。図9(a)に示すように、入力階調値“80”を有する階調画像データに対して、CPU24は分版関数を用いて、S成分として“20”、L成分として“60”に分版することになる。
さらに、RAM26には、図9(a)に示すようにワーキングメモリ領域270と、Small出力データ(S成分出力データ)格納領域268a、及びLarge出力データ(L成分出力データ)格納領域269bを有する。ワーキングメモリ270は、演算によって算出した重心位置とセルを構成する画素の階調値の合計値とが格納される。また、S成分、L成分の各出力データ格納領域268a、269bには、それぞれSドット(小ドット)、Lドット(大ドット)の生成の有無を示す値が格納される。この出力データ格納領域268a、269bも各画素位置(n、m)はホストコンピュータ10で生成された全体画像の画素位置(n、m)に対応するものである。各領域に格納される値は後述する。
図3に戻り、次いでCPU24は、L成分とS成分の各成分について未処理画素を決定する(ステップS12)。未処理画素の決定は、ラスター方向に探索して決定する。すなわち、未処理画素のうち全体画像上で最も上側にある画素のうち最も左側にある画素を選択することになる。このように決定することで、生成されるドットが全体的に斜め方向に形成され、人間の視覚に知覚されにくいものとなり、快適な画像出力を得ることができるのである。各入力データ格納領域261a、261b上、図9(a)に示す例では、まだ全ての画素について処理を行っていない状態なので、2つの成分とも未処理画素(この場合は初期画素となる)として、(0,0)に位置する画素が選択されることになる。
次いで、図3に戻り、CPU24は、決定した2つの未処理画素に対してドット密度の比較を行う(ステップS13)。ドット密度の低い成分から先に処理を進めて入力階調値に忠実にLドット、Sドットを生成させるためである。ここでドット密度の比較は、ステップS12で選択した未処理画素(初期画素)に対して、(階調値)/(ドットの閾値)を演算して、小さい値の方を選択する。本実施例においてL成分は閾値として“255”、S成分は“200”として処理を行うようにしている。図9(a)の例で演算すると、(0,0)に位置する未処理画素に対してSドット成分のドット密度は20/200で、Lドット成分のドット密度は60/255となり、Sドットの方が小さい値となるので、Sドット成分のドット密度が低くなるであろうことが推定される。よって、Sドット成分から先に処理を進めることになる(ステップS13で“YES”が選択される)。選択された例を図9(b)に示す。一方、ドット密度を未処理画素に対して演算してL成分の方が低くなるとL成分から先に処理を進めることになる(ステップS13で“NO”が選択される)。
Sドット成分から先に処理を進めることになるとCPU24は、Sドット生成処理に移行する(ステップS14)。Sドット生成処理の処理のフローチャートを図4に示す。この処理は全体としてドット生成処理と、減算処理の2つの処理から構成される。ドット生成処理は、ステップS141からS148で、減算処理がステップS152からS157となる。
まず、Sドット生成処理に移行すると、CPU24はSドットの未処理画素を初期画素として初期濃度重心を計算する(ステップS141)。ここで、初期画素はステップS12で選択した未処理画素である。また、濃度重心の演算は以下の演算式により演算されることになる。
(式1)
x重心={{(セルの重心のx座標)×(セルの階調値の合計)}
+{(選択した未処理画素のx座標)×(選択した未処理画素の階調値)}}
/(セルの階調値の合計+選択した未処理画素の階調値)
y重心={{(セルの重心のy座標)×(セルの階調値の合計)}
+{(選択した未処理画素のy座標)×(選択した未処理画素の階調値)}}
/(セルの階調値の合計+選択した未処理画素の階調値)
(x重心、y重心は重心位置の座標)
この演算式はROM25に格納され、重心位置の演算のときにCPU24が読み出して演算を行うことになる。ちなみに、初期画素の場合は、セルの重心のx、y座標、及びセルの階調値はともに0として演算される。なお、上式で“セルの重心”とあるのはこれまで構成したセルの重心のことであり、“セルの階調値の合計”とはこれまで構成したセルの階調値の合計である。図9(b)の例で初期濃度の重心を演算すると、x重心=0、y重心=0となる。演算した重心位置は、CPU24によってワーキングメモリ270に格納されることになる(図9(c)の中央図参照)。また、CPU24は、初期画素の階調値もワーキングメモリ270に格納する。図9(c)の例では、S成分の(0,0)に位置する画素の階調値は、“20”だから、この値が階調値の合計としてワーキングメモリ270に格納されることになる。そして、CPU24は、対応するS出力データ格納領域268aの位置(図9(c)の例では、(0,0)の位置)にドットを生成しないことを示す“0”を格納する(同じく図9(c)の右から2番目の図参照)。
(式1)
x重心={{(セルの重心のx座標)×(セルの階調値の合計)}
+{(選択した未処理画素のx座標)×(選択した未処理画素の階調値)}}
/(セルの階調値の合計+選択した未処理画素の階調値)
y重心={{(セルの重心のy座標)×(セルの階調値の合計)}
+{(選択した未処理画素のy座標)×(選択した未処理画素の階調値)}}
/(セルの階調値の合計+選択した未処理画素の階調値)
(x重心、y重心は重心位置の座標)
この演算式はROM25に格納され、重心位置の演算のときにCPU24が読み出して演算を行うことになる。ちなみに、初期画素の場合は、セルの重心のx、y座標、及びセルの階調値はともに0として演算される。なお、上式で“セルの重心”とあるのはこれまで構成したセルの重心のことであり、“セルの階調値の合計”とはこれまで構成したセルの階調値の合計である。図9(b)の例で初期濃度の重心を演算すると、x重心=0、y重心=0となる。演算した重心位置は、CPU24によってワーキングメモリ270に格納されることになる(図9(c)の中央図参照)。また、CPU24は、初期画素の階調値もワーキングメモリ270に格納する。図9(c)の例では、S成分の(0,0)に位置する画素の階調値は、“20”だから、この値が階調値の合計としてワーキングメモリ270に格納されることになる。そして、CPU24は、対応するS出力データ格納領域268aの位置(図9(c)の例では、(0,0)の位置)にドットを生成しないことを示す“0”を格納する(同じく図9(c)の右から2番目の図参照)。
さらに、CPU24は、S入力データ格納領域261aの選択した初期画素の位置に、当該画素が選択されたことを示す“−1”を格納する(図9(c)の左図参照)。以後、この画素がセルを構成する画素として選択されないようにするためである。そして、CPU24は、選択したS成分の初期画素に対応するL成分入力階調データに、S成分の階調値を加算して、領域261bの対応する位置に格納する(図9(c)左から2番目の図参照)。図9の例では、(0,0)に位置する画素においては、L成分の“60”に対してS成分の“20”が加算され、“80”の階調値が当該位置に格納される。
図4に戻り、次いでCPU24は、セルを構成するS成分の未処理画素を選択する(ステップS142)。未処理画素の選択は、ワーキングメモリ270に格納した重心位置の座標をもとに最も近い位置にある画素を選択する。重心を利用してセルを構成する未処理画素を選択するため、上述したようにセルは円状となり、その重心にドットを形成させることで、SドットとMドットとのドット間距離が一定で快適な印刷出力を得ることができるのである。
図9(c)の例では、ワーキングメモリ270には重心位置として、x=0、y=0が格納されているので、この位置から最も近い位置にある画素は、(1,0)、(0,1)の2つ存在することになる。複数の選択すべき画素がある場合、CPU24は、いずれか1つの画素をランダムに選択することにする。固定順に選択する方法も考えられるが、最終的に構成されるセルが規則的に並びすぎることによって、印刷出力のある領域でドットが周期的に発生する周期パターンを生じてしまう。このようなパターンは視覚に入り易く快適な印刷出力を得ることができない。従って、選択すべき画素が複数あれば、ランダムに選択するのである。図9(c)の例では、CPU24は、(0,1)に位置する画素を選択することにする。また、CPU24は、未処理画素の選択を行うと選択画素の階調値として“−1”を格納する。以後未処理画素として選択されないためである。さらに、選択画素に対応するS出力データ格納領域268aの画素位置にSドットを生成しないことを示す“0”を格納する(図10(a)の左図、右から2番目の図参照)。
図4に戻り、次いでCPU24は濃度の合計、すなわち選択した階調値の合計がSドットの閾値である“200”を超えるか否か判断する(ステップS143)。図9(c)の例では、ステップS142で未処理画素として(0,1)が選択されたため、階調値の合計は“40”となる。Sドットの場合の閾値は上述したように本実施例では“200”としたため、2つの画素を選択しただけでは閾値を超えずに本ステップで“NO”が選択されることになる。
ステップS143で閾値を超えないとき(“NO”のとき)、CPU24は、ステップS144に移行し、未処理画素を含めたセルの重心位置を演算する。図9(c)に示す例では、初期画素として(0,0)に位置する画素、未処理画素として(0,1)に位置する画素が選択され、この2つの画素から重心を演算することになる。新たにセル内に取り込んだ画素を含めたセル全体の重心の計算をし直すためである。重心の演算式は上述の(式1)を用いる。この結果、重心位置はx=0、y=0.5となる。演算結果は、CPU24の制御によりRAM26のワーキングメモリ270に格納される。その格納された例を図10(a)の中央に示す。
次いでCPU24は、セルの階調値の合計を演算する(ステップS145)。新たにセル内に取り込んだ画素を含めたセル全体の階調値を計算するためである。上述の例では、2つの画素((0,0)と(0,1)に位置する画素)の階調値の合計は、“40”となり、同様にCPU24の制御によりワーキングメモリ270に格納される(図10(a)の中央図参照)。
次いでCPU24は、選択画素の階調値をL成分に対応する画素の階調値に加算する(ステップS146)。後で減算処理を行い、最終的に生成されるSドットとLドットとが重なる確率を低くし粒状的なドットの生成を抑えて、快適な印刷出力を得るためである。上述の例では、(0,1)に位置するS成分の画素の階調値は“20”で、これをL成分の(0,1)に位置する画素の階調値に加算することになる(図10(a)の左から2番目の図参照)。
図4に戻り、次いでCPU24は、S成分におけるセルを構成する画素の階調値の合計が閾値である“200”と等しいか否か判断する(ステップS147)。ワーキングメモリ270に格納された階調値の合計をCPU24が読み出して閾値と等しいか否か判断することになる。図10(a)の例では、合計値は“40”となるので閾値である“200”と等しくない。よって、本ステップで“NO”が選択され、ステップS142に移行し再び未処理画素の選択を行うことになる。以後上述した処理を繰り返すことになるが、図10(a)の例で説明すると以下のようになる。
ステップS142に移行するとCPU24は、S成分の未処理画素を選択する。未処理画素の選択は重心位置から最も近い未処理画素を選択する。重心位置は、ワーキングメモリ270に格納され、x=0、y=0.5なので、(1,0)と(1,1)に位置する画素が選択対象である。複数あればランダムに選択する。ここでは、(1,0)の画素を選択することにする。CPU24は、選択画素の階調値を“−1”とし、対応するS成分出力データ格納領域268aに“0”を格納する(図10(b)の左図、右から2番目の図参照)。
次いでCPU24は、濃度の合計が閾値である“200”を超えるか否か判断する(ステップS143)。選択した未処理画素を含めた階調値の合計は、“60”となり閾値を超えないので“NO”が選択され、ステップS144に移行する。次いで、CPU24はセルの重心を(式1)を用いて演算し、階調値の合計を演算する(ステップS144、S145)。演算結果は、ワーキングメモリ270に格納される(図10(b)の中央図参照)。次いでCPU24は、ステップS146に移行し、L成分に選択した未処理画素の階調値を加算する(図10(b)の左から2番目の図参照)。次いでCPU24は、階調値の合計が閾値と等しいか否か判断するが、合計値は“60”なので“NO”が選択される。そして、再びステップS142に移行し、上述の処理が繰り返される。その結果を図10(c)に示す。
図10(c)の場合でも、階調値の合計は“80”となるので、ステップS147で“NO”が選択され再び上述の処理が繰り返されることになる。この処理が繰り返された結果、9個の未処理画素によってセルが構成されて、L成分入力データ格納領域261b、ワーキングメモリ270、及び出力データ格納領域268a、268bに図11(a)に示す値が格納された場合で以後説明する。
この場合でも、またセルを構成する画素の階調値の合計値は、“180”で閾値に達していないのでステップS147が選択され、CPU24はステップS142に移行し未処理画素の選択を行う。重心位置はx=1.0、y=1.0となっているので、この位置から最も近い画素を選択することになるが、選択すべき画素が複数あるのでランダムにいずれか1つを選択する。図11(a)に示すように、ここでは(1,3)に位置する画素を選択することにする。CPU24は、選択画素の階調値として“−1”を格納し、対応するS出力データ格納領域268aの位置に“0”を格納する(図11(b)の左図、右から2番目の図参照)。
次いで、CPU24は濃度の合計が閾値を越えるか否か判断する(ステップS143)が、合計値は“200”で閾値 “200”を越えないので本ステップでは“NO”が選択される。そして、セルの重心と階調値の合計を演算し(ステップS144、S145)、図11(b)の中央に示すように演算結果がワーキングメモリ270に格納される。さらに、対応するLドット成分の階調値に加算して(ステップS146)、図11(b)の左から2番目に示すようなL成分の入力データを得る。
次いでCPU24は、階調値の合計が閾値と等しいか否か判断する(ステップS147)が、ここでは階調値の合計が閾値と等しくなるので、本ステップで“YES”が選択されステップS148に移行する。ステップS148でCPU24は、重心位置にSドット生成を示す“200”を割り当てる。すなわち、S出力データ格納領域268aにおいて重心位置に位置する画素に、ドット生成を示す“200”を格納する。この例では、重心位置はワーキングメモリ270からx=1.0、y=1.2となるので、重心位置に位置する画素は(1,1)となる。図11(c)にその例を示す。
一方、図4のステップS143で濃度の合計、すなわちセルを構成する階調値の合計が閾値を超えると“YES”が選択され、閾値を超えた場合の重心演算処理を行う(ステップS149)。ここでも重心演算のための演算式を用いて重心を得ることになるが、その演算式は以下を用いる。
(式2)
x重心={{(セルの重心のx座標)×(セルの階調値の合計)}
+{(選択した未処理画素のx座標)×(閾値までに必要な階調値)}}
/(セルの階調値の合計+閾値まで必要な階調値)
y重心={{(セルの重心のy座標)×(セルの階調値の合計)}
+{(選択した未処理画素のy座標)×(閾値までに必要な演算値)}}
/(セルの階調値の合計+閾値まで必要な階調値)
(x重心、y重心は重心位置の座標)
(式1)との違いは、選択した未処理画素の階調値をそのまま用いるのではなく、セルの階調値の合計が閾値と同じになるような値を用いる点が異なる。例えば、これまで選択した画素の階調値の合計が“180”で、最後に選択した未処理画素の階調値が“60”とすると、閾値までに必要な階調値は“20”となり、最後の画素の階調値は“20”として重心を演算するのである。この演算式は、(式1)の場合と同様に予めROM25に格納されており、CPU24が本ステップを実行する際にROM25から読み出すことで実行される。
(式2)
x重心={{(セルの重心のx座標)×(セルの階調値の合計)}
+{(選択した未処理画素のx座標)×(閾値までに必要な階調値)}}
/(セルの階調値の合計+閾値まで必要な階調値)
y重心={{(セルの重心のy座標)×(セルの階調値の合計)}
+{(選択した未処理画素のy座標)×(閾値までに必要な演算値)}}
/(セルの階調値の合計+閾値まで必要な階調値)
(x重心、y重心は重心位置の座標)
(式1)との違いは、選択した未処理画素の階調値をそのまま用いるのではなく、セルの階調値の合計が閾値と同じになるような値を用いる点が異なる。例えば、これまで選択した画素の階調値の合計が“180”で、最後に選択した未処理画素の階調値が“60”とすると、閾値までに必要な階調値は“20”となり、最後の画素の階調値は“20”として重心を演算するのである。この演算式は、(式1)の場合と同様に予めROM25に格納されており、CPU24が本ステップを実行する際にROM25から読み出すことで実行される。
次いでCPU24は、閾値に達するのに必要な値をL成分の階調値に加算する(ステップS150)。上述の例では、“20”を最後に選択した画素に対応するL成分の画素に加算することになる。そして、CPU24は残った階調値を選択した未処理画素に戻す(ステップS151)。上述の例では、最後に選択した画素の階調値は“60”であるが“20”として重心演算したので、残りの“40”を当該画素の階調値として戻すのである。セルを構成する画素とは異なる画素に戻すことも考えられるがそれでは入力階調値に忠実にドットを生成させることができなくなるからである。そして、処理はステップS148に移行し上述した重心位置でSドットの生成処理を行うことになる。
次に、CPU24は減算処理を行う。すなわち、ステップS146においてセルを構成するS成分の階調値をL成分に加算したので、それを減算する処理を行うのである。ここで減算処理は、Sドットが打たれる位置から行うことにする。SドットとLドットとが重なる確率を下げることになり、粒状的なドットの生成を抑え快適な印刷出力を得ることができるからである。
具体的に説明すると、まず、Sドットに最も近いL成分の入力データを選択する(ステップS152)。すなわち、Sドットが生成される画素位置にあるL成分の画素を選択することになる。図12(a)の左から2番目の図に示すように、Sドットが生成されるのは、(1,1)に位置する画素なので、選択すべきL成分の入力データは、(1,1)に位置する画素となる。そして、選択した画素の階調値をワーキングメモリ270に格納する(図12(b)中央図参照)。なお、このワーキングメモリ270は、減算処理のため、以前の処理で格納された重心位置等の値は初期化されているものとする。勿論、ワーキングメモリ270としてさらに減算処理のための階調値を格納する領域を別個設けていてもよい。
次いでCPU24は、選択したL画素の階調値の合計がSドットの閾値を超えるか否か判断する(ステップS153)。ワーキングメモリ270に格納したL成分の階調値の合計がSドットの閾値である“200”を超えるか否かで判断されることになる。図12(a)の例では選択画素の階調値は“80”で、閾値に達しないことになるので、本ステップでは“NO”が選択される。
次いでCPU24は、ステップS152で選択したL成分の画素位置に階調値“0”を格納する(ステップS154)。これにより、Sドット生成でS成分からL成分に加算した階調値のうち、ステップS152で選択した画素の階調値が減算されることになる。図12(b)にその例を示す。
次いでCPU24は、選択したL成分の画素の階調値の合計が閾値と等しいか否かを判断する(ステップS155)。閾値と等しくないとき(“NO”のとき)は、ステップS152に移行して上述の処理を繰り返すことになり、L成分に加算したSドットの閾値分の階調値をL成分から減算することになる。図12(b)の例では、閾値である“200”と等しくないため再びステップS152に移行することになる。
CPU24は、ステップS152に移行すると、再びSドットに最も近いL成分の画素を選択することになる。Sドットが生成される画素位置のL成分は既に選択しているため、選択すべき画素はSドットが生成される画素位置の上下左右の画素を選択することになる。Sドット周辺からL成分を減算すれば、Sドットが打たれる画素位置にLドットが打たれる確率が少なくなるからである。図12(b)の例では、(1,0)、(0,1)、(2,1)、(1,2)の4つの画素が選択されることになる。選択された状態を図12(c)に示す。なお、選択の対象画素をドットが生成される画素位置の上下左右としたが、これに拘泥せずさらに斜め方向の画素を含めて選択するようにしてもよい(例えば、図12(c)の例では、(0,0)、(2,0)、(0,2)、(2,2)に位置する画素)。さらに、上下左右の4つの画素を選択して処理を進め、ステップS155から再び本ステップS52に戻ったときに、この斜め方向の画素を選択するようにしてもよい。
次いでCPU24は、選択した画素の階調値の合計が閾値である“200”を超えるか否か判断される(ステップS153)。図12(c)の例では選択した4つの画素を含めた階調値の合計は、80+80×4=400となるので閾値を超えることになる。よって、本ステップで“YES”が選択され、処理はステップS156に移行することになる。
CPU24は、ステップS156に移行すると、減算すべき階調値の演算を行う。選択したL成分の画素の階調値がSドットの閾値を超える場合に、選択した画素の階調値すべて減算するのは減算しすぎである。そこで、加算した閾値分だけ均等に各画素から減算するように処理を行うのである。図12(c)の例では、すでに選択した(1,1)に位置する画素の階調値“80”を減算したので、閾値である“200”になるには“120”分の階調値を減算すればよいことになる。よって、選択した(1,0)、(0,1)、(2,1)、(1,2)に位置する各画素から“30”(=120/4)づつ階調値を減算すればよい。
次いでCPU24は、減算後の残った階調値を選択したL成分に戻す処理を行う(ステップS157)。図12(c)の例では、均等に4つの画素から“30”の階調値を減算したので、各画素とも残りの階調値として“50”を有することになる。この階調値を選択した画素位置に戻すのである。戻した後のL成分の入力データの例を図13(a)に示す。
そして、CPU24はステップS15に移行しSドットの生成処理が終了することになる。一方、ステップS155で閾値と等しい場合(本ステップで“YES”の場合)は、減算した(L成分を“0”にした)選択画素の階調値が閾値と等しいのでこれ以上減算処理をしなくてもよいことになるので、同様にSドットの生成処理が終了しステップS15に移行することになる。
図3に戻り、Sドット生成処理が終了すると、CPU24はL成分、S成分ともに未処理画素があるか否か判断する(ステップS15)。処理済みの画素には、上述したように“−1”が格納されるのでこれにより判断することになる。図13(a)に示す例では、まだ未処理画素が存在するので、再びステップS12に移行し処理を繰り返すことになる。すなわち、ステップS12で未処理画素のうち最も上側の最も左側に位置するS成分、L成分の画素を選択して、ドット密度を比較する(ステップS13)。図13(b)の例では、20/200<60/255で、S成分の方がドット密度が低いと推定されるのでS成分から先に処理が行われる(ステップS13で“YES”の場合、図13(c)参照)。その後上述した処理が繰り返されることになる。その結果を図14(a)に示す。この図に示すようにS成分から先にすべてCC法によるハーフトーン処理が行われている。ドット密度の比較からS成分の方がドット密度が低いからである。またL成分は、Sドットの発生位置周辺の階調値が減算された値が格納されることになる。なお、初期画素選択のときに、L成分の方がドット密度が低いとL成分から先にCC法による処理が行われることになる。さらに、一部の領域でL成分から先に処理が行われたり、S成分から先に処理が行われたりする場合も考えられる。
そして、再びステップS15に移行することになる。図14(a)に示す場合はすべてのS成分の処理が終了したことになるので、S成分については未処理画素が存在しないことになり、ステップS15では“NO”が選択される。次いで、CPU24はステップS16に移行し、残ったL成分のCC法によるハーフトーン処理を行う。すなわち、未処理画素をラスター方向に探索し初期画素を選択する(図14(b)参照)。次いで閾値である“255”となるまでセルを構成する画素を選択し、閾値と等しい又閾値を超えると選択は終了してセルの重心位置に存在する画素にドット生成を示す“255”を割り当てる。以後これをすべてのL成分に対して行うことになる。その結果を図14(c)に示す。
次いでCPU24は、残ったS成分のCC法によるハーフトーン処理を行う(ステップS17)。図14(c)の例では、残りのS成分は存在しないので、処理はステップS18に移行して、一連のCC法によるハーフトーン処理が終了することになる。
一方、ステップS13においてドット密度に関しL成分の方がS成分よりも低いときは“NO”が選択されてLドット生成処理を行う(ステップS19)。Lドット生成処理のフローチャートを図6乃至図7に示す。例えば、図15(a)に示すS成分の入力データとL成分の入力データとがそれぞれS成分入力データ格納領域261a、L成分入力データ格納領域261bに格納されたとき、未処理画素である(0,0)に位置する画素のドット密度を比較すると、60/200>20/255であるのでL成分から先に処理を行うべくLドット生成処理(ステップS19)に移行することになる。Lドット生成処理もSドット生成処理(ステップS14、図4乃至図5参照)とほぼ同じ処理であり、全体としてCC法によるハーフトーン処理(ステップS191からS201)、減算処理(ステップS202からS207)とから構成される。Sドット生成処理と重複している処理もあるため、簡単に以下説明することにする。
図6に示すようにLドット生成処理に移行すると、CPU24はL成分の未処理画素を初期画素として濃度の重心を演算する(ステップS191)。図15(a)に示す例では、L成分のうち初期画素として(0,0)に位置する画素が選択される。また重心位置は、(式1)を用いる。CPU24は、演算した重心位置、階調値の値をワーキングメモリ270に格納する。また、選択された画素は“−1”が格納され以後未処理画素として選択されないようにする。さらに、対応する位置のL成分出力データ格納領域268bに“0”を格納する。
次いでCPU24は、L成分の未処理画素を選択する(ステップS192)。選択は、重心位置から最も近い画素を選択する。セルを円状に成長させ、ドット間距離を一定に保つためである。複数の画素が存在すればランダムに選択する。規則的にドットが並びすぎることによるドットの周期パターンの発生を抑えるためである。図15(a)に示す例では、(0,1)に位置する画素を選択するものとする。
次いでCPU24は、濃度の合計、すなわち階調値の合計がLドットの閾値を超えるか否か判断する(ステップS193)。ここではLドットの閾値として“255”として処理を行うものとする。図15(a)の例では階調値の合計は“40”で閾値に達しないので、“NO”が選択される。
次いでCPU24は、これまで選択した画素により構成したセルの重心位置を演算し(ステップS194)、階調値の合計を演算し(ステップS195)、選択画素の階調値をS成分の入力データに加算する(ステップS196)。重心位置の演算は、(式1)を用い、CPU24は演算した重心位置と階調値の合計値をワーキングメモリ270に格納する。
以上の処理を閾値と等しくなるまで繰り返す(ステップS197)ことになる。閾値と等しくなったとき(“YES”のとき)は、CPU24はその重心位置に位置する画素にLドット生成を示す“255”を割り当てる。一方、ステップS193でセルを構成する画素の階調値の合計が閾値を超えると(“YES”のとき)、閾値を超えた重心演算処理を行う(ステップS199)。図15(a)に示す例では、全部で13個の画素を選択すると、階調値の合計が“260”となり閾値を超えるためステップS199に移行することになる(図15(b)の左から2番目の図参照)。
ステップS199においてCPU24は、上述した(式2)を用いて重心の演算を行う。この場合に、階調値の合計が閾値となるように最後に選択した画素の階調値を演算して、重心位置を決定することになる。そして、その値を対応するS成分の画素の階調値に加算し(ステップS200)、残った階調値は最後に選択した当該画素に戻すことになる(ステップS201)。図15(b)の左から2番目に示すようにL成分の(1,4)に位置する画素についでは、その階調値として、合計値値が閾値である“255”となる値、すなわち“15”として重心位置等の演算で処理を行い、残りの階調値“5”を当該位置の画素に戻している。その後、重心に位置する画素にLドット生成を示す“255”を格納することになる(図15(b)の右図参照)。
次いで、CPU24は減算処理を行う。すなわち、Lドットが生成される位置のS成分の画素を選択し(ステップS202)、選択した画素の階調値がLドットの閾値を超えないと(ステップS203で“NO”のとき)、選択したS成分の画素の階調値を“0”とする(ステップS204)。そして、Lドットの閾値と等しくなるまで処理が繰り返される(ステップS205で“NO”のとき)ことになる。ステップS202において最初にLドットが生成される位置の画素を選択し、再びステップS202に移行したときは、選択すべき画素としてLドットの生成されるべき画素位置の上下左右の画素を選択する。図15(b)の左図に例を示す。もちろん、Sドットの生成処理のときと同様に上下左右のみならずさらに斜め方向を含めた8つの画素を選択してもよいし、再びステップS202に戻ったときに斜め方向の画素を選択するようにしてもよい。
一方、ステップS203で選択した画素の階調値の合計が閾値を超えるとき(“YES”のとき)、CPU24は減算量を演算し(ステップS206)、減算後の残った階調値を選択したS成分の画素に戻す(ステップS207)。減算量の演算は階調値を“0”にした画素の階調値を閾値から減算し、残りの値を選択した4つの画素で均等に減算することなる。図15(b)に示す例では、(1,2)の画素の階調値“80”を閾値“255”から減算し、残りの“175”を4で除算することになる。その結果、“43.75”を得るが、4つの画素に均等にするよう各画素から43、43、43、44の値を減算することにする。従って、減算後の4つの画素の階調値は、37、37、37、36となる(図15(b)の左図参照)。そして、Lドット生成処理が終了してステップS15に移行することになる。ステップS205で閾値と等しい場合、減算量が加算した値分に達することになるので、減算処理は終了してステップS15に移行することになる。
その後、図3に戻り残りの成分の処理を進めると(ステップS16、S17)図15(c)に示すS出力データ、L出力データを得ることができる。そして、このS出力データ、L出力データがハーフトーン処理部211からパルス幅変調部212に出力され駆動データが生成される。さらに、この駆動データが印刷エンジン22に出力されて印刷が行われることになる。
上述の例は、生成されるドットとしてLargeとSmallの2種類であったが、Large、Smallの他、Middleのドットサイズを出力することのでき画像出力装置20であっても、本発明を適用して同様の効果を得ることができる。すなわち、入力データを分版関数により3つの成分に分離し、ドット密度の低い方から先にCC法によるハーフトーン処理を行う。このとき、階調値を他の2つの成分に加算し、先に行った処理が終了した後に加算した階調値の減算処理を行う。この場合も、ドット生成される位置の周辺の画素から階調値を減算するようにすることで、他のドットがその位置に打たれる確率が少なくなる。その後、残る2つの成分でラスター方向に未処理画素を選択し、ドット密度が少なくなるであろうサイズの方から先に処理を行い、加算及び減算処理を行う。最後に残ったサイズの処理を行う。このような処理を行うことで、入力成分の階調値の合計値を変えることなく、2つのドットサイズの場合と同様に、ドット間距離をドットサイズに応じて最適な位置に確保することができるとともに、粒状感の少ない視覚的に快適な画像出力を得ることができる。
なお、このような加算、減算処理により、異なるドットサイズの単位面積あたりのドット密度(濃度)を均一に保つという効果も得ることができる。すなわち、図9(c)以降で説明したように、セルに取り込むべきS成分の画素を選択後、その階調値をL成分に次々に加算しているが、加算すべき値自体はL成分をS成分に加算する場合よりも小さい値である。その後図12(b)で説明したように減算処理を行っているがこれも減算量自体小さい値(“200”)である。その結果、L成分の階調値自体の変化はS成分に対する加算、減算に比べ少ないものとなり、Sドットが生成される比較的近い位置にLドットが生成されることになる。逆に、S成分に加算される値は大きな値で減算される量も大きい。その結果、Lドットが生成される位置から比較的遠い位置にSドットが生成されることになる。以上から、濃度の小さいSドット周辺には狭い空乏の白領域、濃度の大きいLドット周辺には広い空乏の白領域が確保されることになる。従って、結果的にドットサイズが異なるものであっても、出力画像の単位面積あたりの濃度を均一に保ち、濃度ムラのない快適な画像出力を得るという効果も得ることができるのである。
[ディザ法を用いたハーフトーン処理]
次にディザ法を用いたハーフトーン処理について説明する。一般にディザ法とは、濃淡画像の階調を再現する2値化の手法の1つである。各画素の入力階調値に対して、閾値マトリックスと呼ばれる変換テーブルを用いて、テーブル内に格納された閾値とを比較する。その結果、その入力階調値の方が大きいとドット生成を示す再生データ(量子化データ)と、そうでないとドットなしを示す再生データとを生成する。そして、この再生データをもとに印刷用紙等に印刷を行うようにするものである。
[ディザ法を用いたハーフトーン処理]
次にディザ法を用いたハーフトーン処理について説明する。一般にディザ法とは、濃淡画像の階調を再現する2値化の手法の1つである。各画素の入力階調値に対して、閾値マトリックスと呼ばれる変換テーブルを用いて、テーブル内に格納された閾値とを比較する。その結果、その入力階調値の方が大きいとドット生成を示す再生データ(量子化データ)と、そうでないとドットなしを示す再生データとを生成する。そして、この再生データをもとに印刷用紙等に印刷を行うようにするものである。
本実施例においても、同様に閾値マトリックスを用いてディザ処理を行うものである。ただし、最初に入力データに対して、分版関数を用いてS成分とL成分に分版し、ドット密度が低くなるであろう成分のデータ(例えばS成分)に対して先にディザ処理を行う。そして、ドット密度の低い成分のデータとドット密度が高い異なるサイズの成分(例えばL成分)のデータとの和から、このディザ処理後の成分(例えばS成分)のデータを減算して、ドット密度の高い成分(例えばL成分)のデータを生成する。
このようにドット密度が低くなるであろうものから先にディザ処理を行い、その後減算処理を行って、サイズの異なる方のドット密度の高いデータを得る。そして、このデータにディザ処理を行い、再生データを得るのである。
このようにドット密度が低くなるであろう方から優先的に処理し、その後減算処理をしているのは、ドット密度の低い成分のデータに対して生成されるドット周辺にドット密度の高い、サイズの異なる成分のドットを生成させないようにするためである。これにより、印刷出力おいて、ある部分だけSドットとLドットとが重なり合うことによる粒状的なドット生成を抑えることができ、快適な印刷出力を得ることが可能となる。
逆にドット密度の高い方から先にディザ処理を行うと、CC法による場合と同様に確率的にドットが生成されない位置に対して減算処理を行ってしまうことになる。これにより、入力階調値に忠実でないドット分布が生成されてしまうことになるのである。
その後同様に、ドット密度が低くなるであろう他の成分(例えばL成分)のデータにディザ処理を行い、ドット密度の低い成分のデータとドット密度の高いサイズの異なる成分(S成分)のデータとの和から、ディザ処理後の成分のデータを減算処理する。この場合も、ドット密度が低いL成分のデータに対して生成されるドット周辺に、ドット密度の高いS成分のドットを生成させないようにすることができる。その後、減算後に得られるドット密度の高いS成分のデータにディザ処理を行う。
最終的に得られた、4つのディザ処理後のデータ、すなわち、ドット密度が高低の2つのS成分の再生データと、ドット密度が高低の2つのL成分の再生データに対して、それぞれ和を取って、S成分の再生データとL成分の再生データとを生成することになる。この再生データに基づいて、印刷エンジン22にて印刷が行われることになる。
以上述べた内容についての具体的な処理について以下説明することにする。図16乃至図18は、その動作を示すフローチャートである。図19乃至図27は、RAM26に格納された各データの内容を示す。なお、入力画像データはCC法による場合と同様に分版関数(図8参照)によって、S成分の入力データとL成分の入力データに分版されるものとする。その例を図19(a)に示す。
このRAM26は、CC法による場合と同様に複数の領域を有し、図19(a)に示す例は、S成分の入力階調データと、L成分の入力階調データが各領域の各座標位置に格納されている例を示す。それぞれ、S成分入力データ格納領域261aと、L成分入力データ格納領域261bとする。各領域261a、261bは、それぞれm行n列の2次元構造を有し、各座標位置はホストコンピュータ10で生成された画像の画素位置に対応するものである。例えば、S成分の入力階調データが入力された領域の(n、m)の位置は、全体画像における(n、m)の位置に対応するものである。L成分の場合も全く同様である。ここでは、説明を簡単にするため各領域とも6行6列で表現されているが、画像1フレーム分の各階調値を格納できる構成であってもよいし、これよりも少ない構成であってもよい。以下フローチャートに沿って説明する。
図16に示すようにCPU24は、本処理を実行するためのプログラムをROM25から読出すことによって、処理が開始されることになる(ステップS30)。次いでCPU24は、入力データを分版関数を用いてS成分とL成分に分離し、さらにS成分をドット密度の低い成分(以下S疎データ)と高い成分(以下S密データ)とに分離し、L成分をドット密度の低い成分(以下L疎データ)と高い成分(以下L密データ)とに分離する(ステップS31)。
上述した分版関数により入力階調データを分版した結果、図19(a)に示すように、入力階調値が“80”であるデータをS成分“50”とL成分“30”とに分離し、入力階調値が“120”であるデータをS成分“40”とL成分“80”とに分離している。
そして、分離したS成分とL成分とをそれぞれドット密度が高い成分と低い成分とに分離している。このドット密度の高低は、分離したS成分とL成分とで同じ画素位置にある画素に対して、CC法による場合と同様に、(各成分の階調値)/(ドット生成のための閾値)により比較することで高低を判定する。すなわち、図19(a)に示す例では、(0,0)に位置するS成分とL成分の画素とから、50/200>30/255となるので、当該位置ではS成分の方がドット密度が高く、L成分の方がドット密度が低くなる。本実施例においても、CC法による場合と同様にSドット生成のための閾値として“200”、Lドット生成のための閾値として“255”を用いるものとする。一方、(0,3)の位置では、40/200<80/255でS成分の方がドット密度が低く、L成分がドット密度が高いものとなる。この高低を各画素位置で判定し、例えばS成分でドット密度が低いときはその階調値を、高いときは“0”を対応する画素位置に格納したものがS疎データとなる。逆にS成分でドット密度が高いときはその階調値を、低いときは“0”を対応する画素位置に格納したものがS密データとなる。同様にL疎データ、L密データとを生成する。生成したこれらのうちS疎データとL疎データとをそれぞれS疎データ格納領域262a、L疎データ格納領域262bに格納する。その例を図19(b)に示す。この領域262a、262bも同様に2次元構造を有し、各座標位置が全体画像の画素位置に対応する。
なお、このステップS31で生成したS密データとL密データは、その後本実施例ではディザ処理等は行わない(ただし、減算処理後に生成したS密データとL密データに対してディザ処理は行う)。そのため、この2のデータをRAM26に格納せず、演算のみCPU24で行うようにしている。もちろん、別途S密データ格納領域262c、L密データ格納領域262dを用意し図19(b)に示すようにS密データとL密データとをそれぞれ各領域262c、262dに格納するようにしてもよい。
図16に戻り、次いでCPU24は、S疎データとL密データとの和(S疎+L密)と、S密データとL疎データとの和(S密+L疎)の各データを生成する(ステップS32)。図19(c)にその例を示す。S疎+L密データは、上述のステップS31で生成したS疎データとL密データとを対応する各座標位置でその階調値の和をとったデータである。また、S密+L疎データも生成したS密データとL疎データとを対応する各座標位置でその階調値の和をとったデータである。この各データもRAM26の領域263a、263bに格納されるが、この領域も全体画像の画素位置に対応するように配置されている。
次いでCPU24は、S疎データに対してディザ処理を行う(ステップS33)。この場合のディザ処理は、Sドット用のディザ(閾値)マトリックスの各値とS疎データの各階調値とを比較し、S疎データの方がマトリックス内の閾値よりも大きいとドット打つことを示す“200”を当該画素位置に割り当て、そうでないとドットを打たないことを示す“0”を当該画素位置に割り当てる。Sドット用閾値マトリックスの例を図20に示す。また、Lドット用のディザマトリックスも用意されL疎データ、L密データに対してはかかるマトリックスにより処理が行われる。なお、これらのマトリックスは例えばROM25に格納されCPU24が処理の際に読み出して各階調値と比較することで処理が進められるものとする。処理の具体例を図21乃至図23を参照して説明する。
まずCPU24は、S疎データ格納領域262aの(0,0)に格納された階調値とマトリックスの(0,0)に格納された閾値とを比較する。図21(a)に示すように領域262aの(0,0)に格納された階調値は“0”、マトリックスの(0,0)に格納された閾値は“180”、よって閾値の方が高い値となっているので、(0,0)の位置ではSドットを生成しないことになる。ここでRAM26にはさらにS疎出力データ格納領域264を備え、(0,0)の位置にSドットを生成しないことを示す“0”が格納されることになる(図21(a)の右図参照)。この領域264も、同様に2次元構造で全体画像の画素位置に対応するように配置されている。
次にCPU24は、S疎データ領域262aの(1,0)に位置する階調値“0”と、マトリックスの(1,0)に位置する閾値“60”とを比較し、S疎データ出力領域264の(1,0)の位置にSドットを生成しないことを示す“0”を格納する(図21(b)参照)。次に、(2,0)に位置するS疎データとマトリックス内の閾値とを比較して対応する領域264の(2,0)に“0”を格納する(図22(a)参照)。次は、(3,0)のS疎データと(0,0)の閾値とを比較する。以下これを繰り返すことになる(図22(b)から図23(a)参照)。ラスター方向に順次閾値を比較し終えると、次にすぐ下の行にあるS疎データとマトリックス内の閾値とを比較することになる。その結果を、図23(b)に示す。ここで、S疎データ領域の(4,1)に位置する階調値“40”はマトリックス内の(1,1)の閾値“20”より大きい値を有しているので、S疎出力データ領域264の位置(4,1)にはSドット生成を示す“200”が格納されることになる。以下、これを繰り返すことで図23(c)に示す出力結果を得る。図23(c)に示すようにSドットが生成されるのは、(4,1)と(4,4)に位置する画素となる。
図6に戻り、S疎データに対するディザ処理が終了するとCPU24は、S疎+L密データ(図19(c)の左図参照)からS疎ドット周囲の階調値の減算処理を行う(ステップS34)。その後生成されるL密データにおいてS疎ドット周辺の階調値を小さくなるようにして、Sドット周囲にLドットが打たれないようにするためである。これにより、SドットとLドットでドット間距離を一定に保ち、ドットの重なりを防ぐことができる。
減算処理の具体的な処理のフローチャートを図18に示す。まずCPU24は、S疎+L密データにおいてS疎ドットの生成される画素位置を選択する(ステップS340)。図24(a)に示す例では、S疎ドットは(4,1)の位置に生成されるため、S疎+L密データが格納された領域263aの(4,1)の画素位置を選択することになる。なお、RAM26にはさらに減算した階調値の合計を格納する合計値格納領域265を有している。CPU24によって適宜合計値が格納される。
次いでCPU24は、選択した画素の階調値がSドットの閾値である“200”を超えるか否か判断する(ステップS341)。図24(a)に示す例では、選択したS疎+L密データの画素の階調値は“120”となっているので、閾値を超えずに本ステップでは“NO”が選択される。
次いでCPU24は、選択画素の階調値をすべて減算する(ステップS342)。選択画素の階調値が閾値を超えないので、階調値すべて減算することになる。図24(b)に示すように、(4,1)に位置するS疎+L密データの画素の階調値“120”をすべて減算する。減算した階調値は、CPU24によって合計値格納領域265に格納される(図24(b)参照)。
次いでCPU24は、周囲の未減算画素を選択する(ステップS343)。ドットが生成する画素位置の近い位置の画素を選択することになる。図24(c)に示すようにこの例では、上下左右の画素を選択している((4,0)、(3,1)、(5,1)、(4,2)に位置する画素)。もちろん、これ以外にも斜め方向に隣接する画素を選択してもよい(例えば図24(c)の例では(3,0)、(5,0)、(3,2)、(5,2)に位置する画素を選択)し、これを含めた8つの画素を選択してもよい。
図18に戻り、次いでCPU24は、選択画素の階調値の合計がドットの生成を示す値を超えるか否か判断する(ステップS344)。ドット生成を示す値分減算したか否か判断するためである。本実施例では、ドットの生成を示す値としてLドットの場合は“255”、Sドットの場合は“200”としている。図24(c)の例では、ドットが生成される画素位置を含めた選択画素の階調値の合計は、120+120×4=600でSドット生成を示す値“200”を超える。よって、本ステップで“YES”が選択され、処理はステップS345に移行する。
ステップS345でCPU24は、各選択画素から均等に階調値を減算する処理を行う。本実施例において減算処理は、ドット生成を示す値から合計値格納領域265に格納された値を減算し、残った値をステップS343で選択した未処理画素の数で除算して均等に減算する。図24(c)に示す例では、ドットの生成を示す値“200”から合計値格納領域265に格納された値“120”を減算すると“80”、これを選択した画素の数4で除算すると“20”、この値を各画素から均等に減算するようにする。減算後の例を図25(a)に示す。ステップS343で選択された各画素((4,0)、(3,1)、(5,1)、(4,2)の画素)の階調値が減算されて“100”となっている。
次いでCPU24は、他にS疎ドットがあるか否か判断する(ステップS346)。他にS疎ドットがあれば再びステップS340に移行して上述の減算処理を繰り返すことになる。他にS疎ドットがなければ減算処理は終了し図16のステップS35に移行する。図25(a)の例では、さらに(4,4)の位置にS疎ドットが打たれるので、当該位置のS疎+L密データに対してさらに減算処理を行うことになる。
一方、ステップS344で選択画素の階調値の合計がドット生成を示す値を超えないと(“NO”のとき)、さらに未処理画素の選択を行う(ステップS347)。ステップS343で選択されなかった未減算画素が選択される。選択の方法として図24等に示す例では、ステップS343で上下左右の画素が選択されたので、例えば斜め方向に隣接する画素((3,0)、(5,0)、(3,2)、(5,2)の画素)を選択するようにする。さらに、それでも階調値の合計がドット生成を示す値を超えないと(再びステップS344で“NO”が選択された場合)、さらに外側に位置する16個の画素を適宜選択する(16個全て選択してもよいし、そのうちから選択したものでもよい)等が考えられる。
また、ステップS341で選択画素の階調値がドット生成を示す値を超えると(“YES”のとき)、選択画素の階調値をドット生成の値分減算する(ステップS348)。そして処理は、ステップS346に移行して上述の減算処理を繰り返すことになる。
このように、S疎ドットが生成される画素位置を中心にS疎+L密データを減算するようにしたので、その後生成されるL密データからのL密ドットはS疎ドットの位置と重なって生成される確率が低くなり、粒状的なドット生成の発生を抑えて視覚的に快適な画像出力を得ることができるのである。なお、上述したように最初にS密データから先にディザ処理を行うと、ドット密度の低いL疎成分を減算したときに、本来ドットが打たれる位置にない位置に対しても階調値を減算してしまい、入力階調値に忠実でないドットが生成される可能性がある。よって疎データから先に処理を行うのである。図16のフローチャートでは、S疎データから先に処理をしているが、以上の理由からL疎データから先に処理をしても構わない。
図16に戻り、減算処理後CPU24は、減算済みL密データに対してディザ処理を行う(ステップS35)。上述の減算処理により、S疎+L密データからS疎出力データを減算したことになるので、その減算後のデータはL密データとなる。この減算後のL密データに対してディザ処理を行うのである。L成分のデータに対しては、図20の右図に示すようにLarge用マトリックスを利用して処理が行われる。具体的には、図21乃至図23で説明したS疎データに対する処理と同様に、L密データの各画素位置の階調値とL用マトリックスの各閾値とを比較し階調値が閾値より大きな値のときはドット生成を示す“255”を割り当て、そうでないときはドットを生成しないことを示す“0”を割り当てることになる。なお、RAM26にはL密出力データ格納領域266を有し、各位置にこのドット生成の有無を示す値が格納されることになる。この領域266も同様に各位置が全体画像の画素位置に対応するように配列されている。図25(c)にその結果の例を示す。
図16に戻り、次いでCPU24は、L疎データに対してディザ処理を行う(ステップS36)。L疎データはステップS31で生成されたものである。閾値マトリックスはL用のものを用い、処理は上述した内容と同じで各階調値とマトリックス内の対応する閾値とを比較することで処理が進められる。その結果を図26(a)に示す。なお、RAM26には、さらにL疎出力データ格納領域267を有し、各位置にL疎ドットの生成の有無を示す値が格納される。この領域267も全体画像の画素位置に対応するように配列されている。図26(a)に示す例では、(1,1)、(1,4)にLドットが打たれることを示している。
次いでCPU24は、S密+L疎データからL疎ドット周囲の減算処理を行う(ステップS37)。L疎ドット周辺にS密ドットが生成されるのを防ぐためである。具体的な処理は、S疎ドットの減算処理をほぼ同じ内容で、図18にその処理のフローチャートを示す。以下、図面を参照して簡単に説明する。
まず、CPU24はS密+L疎データのL疎ドットが打たれる画素位置を選択する(ステップS340)。図26(b)に例では、(1,1)の画素を選択する。次いでCPU24は、選択した画素の階調値がLドット生成を示す“255”を超えるか否か判断する(ステップS341)。図26(b)の例では、階調値は“80”で“NO”が選択される。
次いでCPU24は、選択画素の階調値をすべて減算して(ステップS342)、その値を合計値格納領域265に格納する。図26(b)の例では、(1,1)に位置する画素の階調値“80”をすべて減算することになる。減算した値は、領域265に格納される。そして、CPU24は周囲の未処理画素を選択する(ステップS342)。本実施例では、L疎ドットが打たれる画素位置を中心に上下左右の画素を選択する。上述したようにその他の選択方法でもよい。次いでCPU24は、選択画素の階調値の合計が“255”を超えるか否か判断する(ステップS344)。図26(b)の例では、80+80×4=400で“255”を超えるので“YES”が選択される。
次いでCPU24は、各選択画素から均等に階調値の減算を行う(ステップS345)。図26(b)の例では、255−80=175を選択した画素数4で除算すると、43.75となる。そこで、3つの画素に対して“44”づつ減算し、残りの画素を“43”だけ減算すれば丁度“175”となる。減算した結果を図26(c)に示す。
次いでCPU24は、他にL疎ドットがあれば上述の減算処理を繰り返し(ステップS346で“YES”の場合)、ないと減算処理が終了しステップS38に移行する(ステップS346で“NO”の場合)。図27(a)の例では、さらに(1,4)にL疎ドットが存在するので、S密+L疎データに対しさらに上述の減算処理を繰り返すことになる。その結果、図27(b)に示す状態となる。
一方、ステップS344で選択画素の階調値の合計が“255”を超えないとさらに周囲の未減算画素を選択し(ステップS347)、“255”を超えるまで処理が繰り返される。選択は、S疎ドットの減算処理のときと同様に斜め方向にある画素や、さらに周囲の画素を適宜選択するようにする。また、ステップS341で最初に選択したL疎ドットに対応する画素の階調値の合計が“255”を超えると(“YES”のとき)、選択画素を“255”だけ減算し、周囲の未減算画素の選択等を行わずにステップS346に移行することになる。以上により減算処理が終了する。その結果を図27(a)に示す。
図17に戻り、次いでCPU24は、減算済みS密データに対してディザ処理を行う(ステップS38)。S密+L疎データからL疎出力データを減算したので、減算後はS密データとなる。このS密データに対してディザ処理を行うのである。S成分に対しては、S用閾値マトリックスを使用し、処理内容は上述と同様に各S密成分の階調値とマトリックス内の閾値とを順次比較してS密ドットの有無を生成する。この有無を示す値は、RAM26内のS密出力データ格納領域268の対応位置に格納される。この領域268も同様に全体画像の画素位置に対応するように配列されている。図27(b)にその結果を示すように、S密データに対するディザ処理の結果、(2,2)、(2,5)にSドットが打たれることになる。
図17に戻り、次いでCPU24は、S疎出力データとS密出力データとを合成する(ステップS39)。S疎出力データはステップS33で生成され(図23(c)参照)、S密出力データはステップS38で生成されている(図27(b)参照)ので、これを対応する画素位置ごとに加算する。加算した各値は、Sドット出力データ格納領域269aに格納される。この領域269aも各位置が全体画像の各画素位置に対応するものである。その結果を図27(c)の左図に示す。合成した結果は、Sドットの出力データとなる。
次いでCPU24は、L疎出力データとL密出力データとを合成する(ステップS40)。L疎出力データはステップS36で生成され(図26(a)参照)、L密出力データはステップS35で生成されている(図25(c)参照)ので、これを対応する画素位置ごとに加算する。加算した値は、Lドット出力データ格納領域269bに格納される。この領域269bも全体画像の各画素位置に対応するように配列されている。その結果を図27(c)の右図に示す。合成した結果は、Lドットの出力データとなる。
以上により、ディザ法によるハーフトーン処理が終了し、SドットとLドットの出力データが、パルス幅変調部212に出力されて以後印刷出力を得ることができる。
なお上述の処理では、LドットとSドットの2つのドットサイズで説明したが、他にもMiddleサイズのドットを含めた3つのサイズでも同様に本発明が適用でき同様の効果を得ることができる。例えば、入力階調値をLドット、Sドットのほか、Mドット用の分版関数により、Lドット、Mドット、Sドットの3つの各成分に分離する。分離した各成分を密度順に疎、中密、密の各成分に分けて、各ドットごとに疎成分と、(疎+中密)成分、(疎+密)成分を生成する。まず、疎成分に対して上述したディザ法によるハーフトーン処理を行い、疎ドット出力を得る。(疎+中密)成分、(疎+密)成分のそれぞれから疎ドット出力を減算する処理を行う。そして、減算後の中密成分、密成分を加算して(中密+密)成分を生成する。次に、減算後の中密成分に対してディザ法によるハーフトーン処理を行い、中密ドット出力を得る。そして、減算後に加算した(中密+密)成分から中密ドット出力を減算して、密成分を得る。次に、この減算後の密成分に対してディザ法によるハーフトーン処理を行い、密ドット出力を得る。最後に、各ドットごとに生成した疎ドット出力、中密ドット出力、密ドット出力を合成して、Lドット、Mドット、Sドットを得てハーフトーン処理が終了する。その後、この出力結果がパルス幅変調部212に出力され印刷出力を得る。
以上の処理後の印刷出力は、SドットとLドットとが重なる確率が少なくなるため粒状的なドットの発生を抑え、視覚的に快適な印刷出力となる。
[誤差拡散法によるハーフトーン処理]
次に本発明が適用される誤差拡散法を用いたハーフトーン処理について説明する。この誤差拡散法も、所定の階調値を有する画素に対してドット生成の有無を示す値にする2値化手法の一つである。例えば、閾値を“127”とし、ある入力画素の階調値が“50”のとき、閾値よりも少ない値となるので2値化すると“0”となる。この場合に、量子化値“0”に対して“50”の誤差が生じている。そこで、誤差拡散法ではこの誤差を周辺の画素に拡散させて以後閾値と階調値とを比較して、再生データを得るのである。
[誤差拡散法によるハーフトーン処理]
次に本発明が適用される誤差拡散法を用いたハーフトーン処理について説明する。この誤差拡散法も、所定の階調値を有する画素に対してドット生成の有無を示す値にする2値化手法の一つである。例えば、閾値を“127”とし、ある入力画素の階調値が“50”のとき、閾値よりも少ない値となるので2値化すると“0”となる。この場合に、量子化値“0”に対して“50”の誤差が生じている。そこで、誤差拡散法ではこの誤差を周辺の画素に拡散させて以後閾値と階調値とを比較して、再生データを得るのである。
この誤差拡散法による処理は、ディザ法による処理と同様にS疎データに対して誤差拡散処理を行い、S疎出力データを得る。そして、S疎+L密データに対して減算処理を行い、L密データを得る。このL密データに誤差拡散処理を行い、L密出力データを得る。また、L疎データに誤差拡散処理を行い、L疎出力データを得る。そして、S密+L疎データに減算処理を行い、S密データを得て誤差拡散処理によりS密出力データを得る。最後に、S疎出力データとS密出力データとを合成してSドッドの出力データを得、L疎出力データとL密出力データとを合成してLドットの出力データを得るのである。その後、この出力ドットデータから印刷出力を得るのである。
このようにドット密度が低くなるであろうものから先に誤差拡散処理を行い、その後減算処理をして、サイズの異なる方の密度の高い成分を得る。このような減算処理により、異なるサイズで互いに重なってドットが打たれる確率が低くなり、ディザ処理等のときと同様に粒状的なドットの生成を抑えることができるのである。
逆にドット密度の高い方から先に誤差拡散法による処理を行うと、CC法やディザ法による処理の場合と同様に、確率的にドットが生成されない位置に対して減算処理を行ってしまうことになる。これにより、入力階調値に忠実でないドット分布となってしまうのである。
この誤差拡散法を利用した本発明のハーフトーン処理のフローチャートを図16乃至図18に示す。また、RAM26に格納されたデータの例を図28乃至図34に示す。フローチャートに示すように誤差拡散法による本発明の処理は、ディザ法による場合とほぼ同様である。なお、本処理においてもCC法やディザ法による場合と同様に処理開始前に分版関数(図8参照)によって、入力データがS成分の入力データとL成分の入力データに分版されるものとする。その例を図28(a)に示す。また、このRAM26は、CC法による場合と同様に複数の領域を有し、S成分の入力階調データとL成分の入力階調データとがそれぞれ、S成分入力データ格納領域261aと、L成分入力データ格納領域261bに格納される。各領域261a、261bは、それぞれm行n列の2次元構造を有し、各座標位置はホストコンピュータ10で生成された画像の画素位置に対応するものである。説明を簡単にするため各領域とも6行6列で表現されているが、画像1フレーム分の各階調値を格納できる構成であってもよいし、これよりも少ない構成であってもよい。以下フローチャートに沿って説明する。
図16に示すようにCPU24は、本処理を実行するためのプログラムをROM25から読出すことによって、処理が開始されることになる(ステップS30)。次いで、ディザ処理の場合と同様にS成分、L成分のデータをS疎、S密、L疎、L密の4つのデータに分離する(ステップS31)。ここで各4つのデータはディザ処理のときと同様に、S成分のうちドット密度の低い成分がS疎データ、高い成分がS密データで、L成分のうちドット密度の低い成分がL疎データ、高い成分がL密データである。
まず、ディザ法と同様に図8に示す分版関数を用いて入力階調値をS成分とL成分とに分離する。図28(a)に示す例では、入力値が“80”であるデータをS成分“50”とL成分“30”とに分離し、入力値が“120”であるデータをS成分“40”とL成分“80”とに分離している。
また、ドット密度の高低は、分離したS成分とL成分とで同じ画素位置にある画素に対して、ディザ法と同様に(各成分の階調値)/(ドット生成のための閾値)により比較することで判定する。本実施例においてもドット生成のための閾値として、Sドットの場合は“200”、Lドットの場合は“255”を用いている。すなわち、図28(a)に示す例では、(0,0)に位置するS成分とL成分の画素から、50/200>30/255となるので、当該位置ではS成分の方がドット密度が高く、L成分の方がドット密度が低くなる。一方、(0,3)の位置では、40/200<80/255でS成分の方がドット密度が低く、L成分がドット密度が高いものとなる。この高低を各画素位置で判定し、S成分でドット密度が低いときはその階調値を、高いときは“0”を対応する画素位置に格納したものがS疎データとなる。逆にS成分でドット密度が高いときはその階調値を、低いときは“0”を対応する画素位置に格納したものがS密データとなる。同様にL疎データ、L密データとを生成する。生成したこれらのうちS疎データとL疎データとをそれぞれS疎データ格納領域262a、L疎データ格納領域262bに格納する。その例を図28(b)に示す。この領域262a、262bも同様に2次元構造を有し、各座標位置が全体画像の画素位置に対応する。
なお、生成したS密データとL密データは、ディザ処理の同様に減算処理後に生成するようにしているため、このステップS31で生成した2つのS密、L密の両データをRAM26に格納せず、演算のみCPU24で行うようにしている。もちろん、別途S密データ格納領域262c、L密データ格納領域262dを用意し図28(b)に示すようにS密データとL密データとをそれぞれ各領域262c、262dに格納するようにしてもよい。
図16に戻り、次いでCPU24は、S疎データとL密データとの和(S疎+L密)と、S密データとL疎データとの和(S密+L疎)の各データを生成する(ステップS32)。図28(c)にその例を示す。この各データもRAM26の領域263a、263bに格納されるが、この領域も全体画像の画素位置に対応するように配置されている。
次いでCPU24は、S疎データに対して誤差拡散処理を行う(ステップS33)。この場合の誤差拡散処理は、S成分に対しては閾値として“100”を用い、L成分に対しては“127”を用い、この閾値と各成分とを比較して処理を進めるものとする。また、拡散すべき誤差が発生したとき、各画素に対して図29(a)に示す拡散マトリックスを使用して拡散させる。このマトリックス内の値は比率を示し、“X”は処理対象の画素位置を示す。例えば、“60”の誤差が発生したときは、処理対象の画素の右と下の画素に“20”、右下と左下の画素には“10”の階調値を拡散させることになる。ここでマトリックス内で現在処理中の画素に対して上や左側に比率が示されていないのは、画素をラスター方向に左から順番に処理を進めていくからである。この処理も、ROM25にマトリックス内の各値が格納され、CPU24が処理の際に適宜読み出して演算を行うことになる。
以後、この拡散された値を当該画素の階調値に加算して閾値と比較して処理が進められることになる。そして、閾値と各データの階調値とを比較し、階調値の方が閾値よりも大きいとSドット打つことを示す“200”(Lドットの場合は“155”)、そうでないとドットを打たないことを示す“0”を当該画素位置に割り当てる。
図29を参照して、誤差拡散処理を説明する。まず、初期画素である(0,0)に位置する画素を選択し、その階調値“0”と閾値である“100”とを比較する。閾値の方が値が大きいので、その位置にはドットを生成しないことを示す値“0”を割り当てることになる。この値はRAM26内のS出力データ格納領域264の(0,0)の位置に格納される。この領域264も同様に各画素位置が全体画像の画素位置に対応するように配列され、CPU24の制御により値が格納される。この場合、階調値はもともと“0”なので誤差は発生しないことになる。
次にラスター方向に右隣の画素(1,0)に対して、その階調値と閾値とを比較する。閾値の方が大きいので、S出力データ格納領域264の(1,0)に“0”が格納される(図29(c)参照)。さらに、(2,0)に位置する画素の階調値と閾値と比較して領域の(2,0)の位置に“0”が格納される(図29(d)参照)。
次に、(3,0)に位置する画素の階調値は“40”で閾値よりも低い値であるが、“0”を領域264に格納した場合に“40”の誤差が発生することになる。ここで拡散マトリックスを用いて、“40”の値分まわりの画素に拡散させる必要がある。図29(a)の拡散マトリックスから(4,0)、(3,1)の画素には、2/6×40=13.33・・・、(4,1)、(2,1)の画素には、1/6×40=6.6・・・となる。ただし、マトリックスの比率からそれぞれ2:1に拡散させる必要があるので、演算したこの値内でこの比率になる数値、すなわち“12”と“6”とを拡散誤差領域270の各位置に格納することになる。図30(a)の中央に例を示す。この図に示すようにRAM26には拡散誤差格納領域270を有し、拡散すべき階調値が格納される。そして、画素の階調値と閾値とを比較するときにこの領域269に格納された値と当該画素の階調値とを加算した値で閾値と比較するようにする。
次に、(4,0)に位置する画素に対して処理を行うが、もともとの階調値は“40”で、領域269の(4,0)の位置には誤差分“12”が格納されているので加算した“52”と閾値“100”とを比較する。閾値の方が値が大きいので、Sドットを生成しないことを示す値“0”がS出力データ格納領域264に格納されることになる。この場合も“52”の誤差が発生するので、拡散マトリックスを用いてこの誤差分を拡散させる。誤差の演算は上述の方法により行い、図30(a)での誤差分も加算して図30(b)の中央に示す誤差が領域270に格納されることになる。
以上の処理を繰り返し、1行目を終了すると図30(c)に示すようにS疎出力データを得ることができる。次いでこれらの処理を2行目、3行目と繰り返し、すべての行に対して処理を行うと図31(a)に示すようにS疎出力データを得ることができる。この図に示すように、(4,2)と(4,4)に位置する画素にSドットを打つことを示す“200”が格納されることになる。
図16に戻り、次いでCPU24は、S疎+L密データからS疎出力データの減算処理を行う(ステップS34)。サイズの異なるドットが重なって打たれる確率を低くして、粒状性を改善するためである。具体的には、図31(b)に示すようにS疎ドットが生成される画素位置にL密ドットが打たれないようにS疎+L密データのS疎ドット周辺からドット生成を示す“200”分の階調値を減算する。処理自体はディザ処理のときと同様であり、そのフローチャートを図18に示す。
すなわち、まずS疎+L密データのS疎ドットが生成される画素位置を選択する(ステップS340)。図31(b)の例では、(4,2)に位置する画素が選択されることになる。なお、この場合もRAM26に減算値を合計した値が格納される領域265を有し、CPU24の制御により適宜その値が格納されることになる。
次いでCPU24は、選択画素の階調値が“200”を超えるか否か判断する(ステップS341)。Sドッド生成を示す“200”の値分だけ減算処理を行うためである。図31(b)の例では、選択画素の階調値が“120”であるので、本ステップでは“NO”が選択され、ステップS342に移行する。
ステップS342においてCPU24は、選択画素の階調値をすべて減算する。図31(b)の例では、選択画素(4,2)の階調値“120”をすべて減算することになる。また、このとき減算した値はCPU24によって合計値格納領域265に格納されることになる。
次いでCPU24は、周囲の未減算画素を選択する(ステップS343)。ディザ処理と同様に上下左右の画素を選択することにする。もちろん、ディザ処理と同様にそれ以外の画素を選択するようにしてもよい。図31(b)に示す例では、(4,1)、(3,2)、(5,2)、(4,3)の画素を選択する。
次いでCPU24は、選択した画素の階調値の合計が“200”を超えるか否か判断する。図31(b)の例では、ドット生成する画素と周りの4つの画素との階調値の合計が、120+120×4=600でSドット生成を示す閾値“200”を超えることになるので、本ステップでは“YES”が選択されステップS345に移行することになる。選択画素の階調値が“200”を超えないときは(“NO”のとき)、ステップS347に移行し、さらに周囲の未減算画素を選択し(ステップS347)、“200”を超えるまでこの処理が繰り返される。このステップS347における未減算画素の選択もディザ処理の場合と同様に、斜め方向やさらにそのまわりの未減算画素を選択すればよい。
選択画素の階調値が“200”を超えると(ステップS344で“YES”のとき)、CPU24は各画素から均等に階調値を減算する処理を行う(ステップS345)。図31(b)の例では、S疎ドットが生成される画素位置の階調値は“120”で“200”に達するにはあと“80”分の階調値を4つの画素から減算すればよいことになる。よって、各画素から“20”づつの階調値を減算する。
次いでCPU24は、他にS疎ドットがあれば上述の減算処理を行うことになる(ステップS346で“YES”のとき)。図31(b)に示す例では、さらに(4,4)の画素位置にもS疎ドットが生成されるので、この位置に対しても減算処理を行うことになる(図32(c)参照)。そして、他にS疎ドットがないと(ステップS346で“NO”のとき)、減算処理が終了し、図16のステップS35に移行することになる。なお、S疎+L密データからS疎出力データを減算したので、減算後のS疎+L密データは、L密データとなる。
一方、ステップS341で選択画素の階調値が“200”を超えるときは、この“200”分だけ減算処理を行うことになる。S疎ドットが打たれる画素位置の階調値が“200”を越える場合である。その後、ステップS346に移行して上述の処理を行うことになる。以上により、S疎+L密データに対する減算処理が終了することになる。
図16に戻り、CPU24は減算済みL密データに対して誤差拡散処理を行う(ステップS35)。L成分に対しては、閾値を“127”とし、誤差拡散マトリックスは図29(a)に示すものを用いる。処理はS疎成分に対するものと同様に初期画素からラスター方向に各画素の階調値と閾値とを比較して、誤差があればマトリックスを利用して周辺に拡散させる。その結果、図31(c)に示すL密データに対して図32(a)に示すL密出力データを得ることができる。なお、このL密出力データは、RAM26のL密出力データ格納領域266に格納される。この領域266も他のRAM26内の領域と同様に、各画素位置は全体画像の画素位置に対応するように配列されている。
図16に戻り、CPU24は、L疎データに対して誤差拡散処理を行う(ステップS36)。L疎データはステップS31で生成され、L成分に対しては閾値“127”、拡散マトリックスは図29(a)を用いて処理を行う。RAM26内には拡散誤差領域270、L疎出力データ格納領域267も同様にしてRAM26内におき、各値が格納されるようにする(図32(b)参照)。各領域267、270も全体画像の各画素位置に対応するように配列されている。初期画素からラスター方向に検索し、閾値“127”と各画素位置の階調値とを比較することで同様に処理を行うことになる。そして、その処理の結果を図32(c)に示す。この例の場合は、(2,4)の位置にLドットを打つことを示す“255”が格納されることになる。
図16に戻り、次いでCPU24は、S密+L疎データに対してL疎ドット周囲の減算処理を行う(ステップS37)。L疎ドット周囲にS密ドットが重なって打たれないようにするためである。これも、ステップS34と同様に図18に示すフローチャートに従って処理が行われることになる。
すなわち、CPU24は、L疎出力ドットが打たれる位置に対応するS密+L疎データの位置を選択する(ステップS340)。図33(a)に示す例では、(2,4)の位置にある画素を選択することになる。次いで、CPU24は、選択画素の階調値がL疎ドットを示す“255”を超えるか否か判断する(ステップS341)。図33(a)に示す例では、選択画素の階調値が“80”となっているので、閾値“255”を超えず本ステップで“NO”が選択される。
次いでCPU24は、選択画素の階調値をすべて減算する(ステップS342)。図33(a)の例では、(2,4)に位置する画素の階調値“80”を全て減算することになる。減算した階調値は、減算値の合計が格納される領域265に、CPU24によって格納される。次いで、周囲の未処理画素を選択する(ステップS343)。S疎+L密データに対する減算処理等(図31(b)、(c)等参照)と同様に処理対象の画素の上下左右の画素を選択する。図33(a)の例では、(2,3)、(1,4)、(2,5)の3つの画素を選択する。この場合、(3,4)の画素も選択対象となるが、もともと階調値が“0”となっているので、減算処理の対象とはしないことにして処理を進める。
次いでCPU24は、周囲の画素を選択した後、その階調値の合計がLドット生成を示す“255”を超えるか否か判断する(ステップS344)。図33(a)の例では、80+80×3=320で“255”を超えるので“YES”が選択される。次いでCPU24は、各選択画素から閾値である“255”を超えないように均等に階調値を減算する(ステップS346)。図33(a)の例では、ステップS342で、(2,4)の画素の階調値を減算したので、閾値“255”からの残りの値“175”(=255−80)を3つの画素で均等に減算させることになる。よって、175/3=58.33・・・となるので、3画素から58、58、59の階調値を減算させればよいことになる。その減算結果を図33(b)に示す。この場合も、1つだけ“59”の階調値を減算させる画素が存在するが、ランダムに選択することにする。
図18に戻り、次いでCPU24は、他にL疎ドットがあるか否か判断(ステップS346)して、かかるドットがなくなるまで上述の処理を繰り返すことになる。一方、ステップS344で選択画素の階調値の合計が“255”を超えないとき(“NO”のとき)、さらに周囲の未減算画素を選択する(ステップS347)。S疎+L密データ等に対する減算処理と同様に、斜め方向の隣接画素やさらにまわりの画素を選択するようにすればよい。さらに、ステップS341で選択画素の階調値が“255”を超えるときは(“NO”のとき)、選択画素の階調値から閾値分“255”を減算して処理を進めればよいことになる。以上により、S密+L疎データに対する減算処理が終了することになる。なお、減算処理後のS密+L疎データは、L疎出力データから減算したので、S密データとなる。
図17に戻り、次いでCPU24は、減算済みS密データに対して誤差拡散処理を行う(ステップS38)。これも、ステップS33、S35、S36と同様に各座標位置に格納された階調値と閾値(この場合はSドット生成を示す“100”)とを比較し、閾値よりも大きいとSドット生成を示す“100”、そうでないと“0”とし、また誤差分は図29(a)に示すマトリックスを使用してまわりの画素に拡散させる。閾値との比較は、拡散された誤差があれば本来の階調値に加算して処理をする。これを、S密データの(0,0)からラスター方向に順に比較し、すべての画素の階調値に対して処理を行う。その結果を図33(c)に示す。この各値も、RAM26内のS密出力データ格納領域268に格納される。この図に示すようにS密データに対するSドットとして、(1,0)、(1,1)、(1,2)、(1,3)、(0,5)に位置する5つの画素に打たれることになる。
次いでCPU24は、S疎ドットとS密ドットとを合成する(ステップS39)。すなわち、ステップS33で生成したS疎出力データ(図31(a)参照)と、ステップS38で生成したS密出力データ(図33(c)参照)とを対応する各座標位置どうしでその和を演算する。演算した各値は、CPU24の制御により、Sドット出力データ格納領域269aに格納される。この領域269aも全体画像の各画素位置に対応するように配列されている。その結果を図34(a)の左図に示す。この合成データがSドットの出力データとなる。
次いでCPU24は、L疎ドットとL密ドットとを合成する(ステップS40)。すなわち、ステップS35で生成したL密出力データ(図32(a)参照)とステップS36で生成したL疎出力データ(図32(c)参照)とを対応する各座標位置どうしでその和を演算する。演算した各値は、CPU24の制御により、RAM26内のLドット出力データ格納領域269bに格納される。この領域269aも全体画像の各画素位置に対応するように配列されている。その結果を図34(b)の右図に示す。この合成データがLドットの出力データとなる。
このSドットとLドットの出力データがハーフトーン処理部211からパルス幅変調部212に入力されて、以後ホストコンピュータ10からのデータの印刷出力を得ることができるのである。
この図34に示す2つのサイズのドット生成位置は、互いに重なる部分がなく、よって粒状的なドットの発生を抑え、SドットをLドットとでドット間距離が一定に保たれ、快適な画像出力を得ることができる。
このSドット、Lドットの出力データは、印刷エンジン22に出力され、この出力データをもとにインク量が制御され、ホストコンピュータ10で生成された画像の印刷出力を得ることができるのである。
なお上述の処理では、LドットとSドットの2つのドットサイズで説明したが、他にもMiddleサイズのドットを含めた3つのサイズでも同様に本発明が適用でき同様の効果を得ることができる。具体的にはディザ法による3つのサイズのドットと同様である。すなわち、入力階調値を分版関数によりLドット、Mドット、Sドットの3つの各成分に分離し、各成分を密度順に疎、中密、密の各成分に分けて、加算、減算処理を行い、得られた疎ドット、中密ドット、密ドットの各出力を合成して出力ドットを得るのである。
以上のように本発明では、CC法、ディザ法、誤差拡散法いずれのハーフトーン処理においても、サイズの異なるドット同士が重なり合う確率を下げて出力画像の粒状性を改善し、視覚的に快適な出力画像を得ることができる。
上述の実施例では、図1に示す画像出力装置10を用いて処理が行われるものとして説明したが、例えば図35に示すような他のシステムにおいても適用される。すなわち、図35に示すように、ホストコンピュータ10内に、ハーフトーン処理部211を備え、処理後のデータを画像出力装置20に出力するようにしている。この場合、上述したCC法、ディザ法、誤差拡散法による処理は、いづれもホストコンピュータ10内のハーフトーン処理部211で処理が行われることになる。
また、画像出力装置20としてレーザープリンタを用いた例で説明したが、他にもインクを用いたインクジェットプリンタやバブルジェットプリンタを用いても本発明が適用され同様の効果を得ることができる。
10 ホストコンピュータ 20 画像出力装置 21 画像処理部 211 ハーフトーン処理部 22 印刷エンジン 24 CPU 25 ROM 26 RAM 261a S成分入力データ格納領域 261b L成分入力データ格納領域 262a S疎成分入力データ格納領域 263a S疎+L密データ格納領域 263b S密+L疎データ格納領域 264 S疎出力データ格納領域 265 減算値格納領域 266 L密出力データ格納領域 267 L疎出力データ格納領域 268 S密出力データ格納領域 269a S疎+L密出力データ格納領域 269b S密+L疎出力データ格納領域 270 拡散誤差格納領
Claims (15)
- 画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、
前記階調データをドットサイズに応じた少なくとも2つのデータに分離し、前記分離された第1のデータと第2のデータのドット密度を検出する検出手段と、
前記検出手段によりドット密度が低いとされた前記第1のデータ又は前記第2のデータから先に前記M種類のレベル値を有するデータに変換する第1の変換手段と、
前記検出手段によりドット密度が高いとされた前記第2のデータ又は前記第1のデータに対して、前記第1の変換手段で前記M種類のレベル値に変換された画素に対応する画素において当該画素のレベル値から所定値を減算する減算手段と、
前記減算手段で減算した前記第2のデータ又は前記第1のデータに対して前記M種類のレベル値を有するデータに変換する第2の変換手段と
を備えることを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1の変換手段及び前記第2の変換手段は、所定の閾値が格納された閾値マトリックスを用いて、前記N種類のレベル値を前記M種類のレベル値に変換する、ことを特徴とする画像処理装置。 - 請求項2記載の画像処理装置において、
前記第1の変換手段は、前記検出手段による前記第1のデータと前記第2のデータとのドット密度を検出した結果、さらに前記第1のデータをドット密度の低い成分と高い成分に分離するとともに、前記第2のデータをドット密度の低い成分と高い成分に分離し、前記第1のデータ又は前記第2のデータのドット密度の低い成分から先に前記M種類のレベル値に変換する、ことを特徴とする画像処理装置。 - 請求項3記載の画像処理装置において、
さらに、前記分離したドット密度の高い前記第1のデータ又は前記第2のデータの成分に対して、それぞれドット密度の低い前記第1のデータ又は前記第2のデータの成分を加算する加算手段を備え、
前記減算手段は、前記加算手段で加算した前記第1のデータ又は前記第2のデータのドット密度の高い成分に対して減算する、ことを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1の変換手段及び前記第2の変換手段は、前記N種類の各レベル値と閾値とを比較して前記M種類のレベル値に変換するとともに、前記M種類のレベル値に変換したときの誤差を前記第1のデータ又は前記第2のデータの各レベル値に加算して前記閾値と比較する、ことを特徴とする画像処理装置。 - 請求項5記載の画像処理装置において、
前記第1の変換手段及び前記第2の変換手段は、拡散マトリックスに格納された誤差分の値を拡散させる比率に基づいて各画素に前記誤差分を拡散させる、ことを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1の変換手段及び前記第2の変換手段は、さらに、
前記ドット密度が低い第1のデータ又は第2のデータの画素を選択、又は前記減算後の前記第1のデータ又は前記第2のデータを選択し、選択した画素ごとのレベル値の総和が閾値となるまで未処理画素を選択して画素群を生成する生成手段と、生成した画素群の所定画素に対して前記M種類のレベル値を付与する付与手段と、をそれぞれ備えることを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1の変換手段及び前記第2の変換手段は、さらに、
前記ドット密度が低い第1のデータ又は第2のデータの画素を選択、又は前記減算後の前記第1のデータ又は前記第2のデータを選択し、選択した画素ごとのレベル値の総和が閾値となるまで画素を選択して画素群を生成する画素群生成手段と、
前記画素群生成手段で生成した画素群の重心位置を決定する重心位置決定手段と、
前記重心位置決定手段で決定した重心に位置する画素に前記M種類のレベル値を付与する付与手段とをそれぞれ備え、
前記画素群生成手段は、前記重心位置決定手段で決定した重心から最も近い画素を選択して前記画素群を生成することを特徴とする画像処理装置。 - 請求項8記載の画像処理装置において、
前記画素群生成手段は、決定した画素が複数あるときはランダムに選択することを特徴とする画像処理装置。 - 画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理装置において、
前記階調データに対してドット密度が低密度となる成分を検出する検出手段と、
前記検出手段によって検出された前記低密度の成分から前記M種類のレベル値を有するデータに変換する変換手段と、
を備えることを特徴とする画像処理装置。 - 請求項10の画像処理装置において、
前記検出手段は、前記低密度の成分を検出するとともにドット密度が高密度となる成分を検出し、
さらに、前記検出手段で検出された高密度成分に対して前記低密度成分の階調値を加算する加算手段と、
前記加算手段で加算した高密度成分に対して所定値を減算する減算手段と、
前記減算手段により減算された前記高密度成分に対して前記M種類のレベル値を有するデータに変換する第2の変換手段と、を備えることを特徴とする画像処理装置。 - 画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、
前記階調データをドットサイズに応じた少なくとも2つのデータに分離し、前記分離された第1のデータと第2のデータのドット密度を検出する検出工程と、
前記検出工程によりドット密度の低いとされた前記第1のデータ又は前記第2のデータから先に前記M種類のレベル値を有するデータに変換する第1の変換工程と、
前記検出工程によりドット密度が高いとされた前記第2のデータ又は前記第1のデータに対して、前記第1の変換工程で前記M種類のレベル値に変換された画素に対応する画素において当該画素のレベル値から所定値を減算する減算工程と、
前記減算工程で減算した前記第2のデータ又は前記第1のデータに対して前記M種類のレベル値を有するデータに変換する第2の変換工程と
を備えることを特徴とする画像処理方法。 - 画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する画像処理方法において、
前記階調データに対してドット密度が低密度となる成分を検出する検出工程と、
前記検出工程によって検出された前記低密度の成分から前記M種類のレベル値を有するデータに変換する変換工程と、
を備えることを特徴とする画像処理方法。 - 画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、
前記階調データをドットサイズに応じた少なくとも2つのデータに分離し、前記分離された第1のデータと第2のデータのドット密度を検出する検出処理と、
前記検出処理によりドット密度の低いとされた前記第1のデータ又は前記第2のデータから先に前記M種類のレベル値を有するデータに変換する第1の変換処理と、
前記検出処理によりドット密度が高いとされた前記第2のデータ又は前記第1のデータに対して、前記第1の変換処理で前記M種類のレベル値に変換された画素に対応する画素において当該画素のレベル値から所定値を減算する減算処理と、
前記減算処理で減算した前記第2のデータ又は前記第1のデータに対して前記M種類のレベル値を有するデータに変換する第2の変換処理と
をコンピュータに実行させるためのプログラム。 - 画素ごとにN(Nは正の整数)種類以上のレベル値を有する階調データに対して、画素ごとにM(M<N、Mは正の整数)種類のレベル値を有するデータを出力する処理をコンピュータに実行させるためのプログラムにおいて、
前記階調データに対してドット密度が低密度となる成分を検出する検出処理と、
前記検出処理によって検出された前記低密度の成分から前記M種類のレベル値を有するデータに変換する変換処理と、
をコンピュータに実行させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003293451A JP2005064941A (ja) | 2003-08-14 | 2003-08-14 | 画像処理装置、画像処理方法、及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003293451A JP2005064941A (ja) | 2003-08-14 | 2003-08-14 | 画像処理装置、画像処理方法、及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005064941A true JP2005064941A (ja) | 2005-03-10 |
Family
ID=34370397
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003293451A Pending JP2005064941A (ja) | 2003-08-14 | 2003-08-14 | 画像処理装置、画像処理方法、及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2005064941A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007194688A (ja) * | 2006-01-17 | 2007-08-02 | Seiko Epson Corp | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 |
JP2008228314A (ja) * | 2005-05-16 | 2008-09-25 | Seiko Epson Corp | 画像処理装置,画像処理方法,及び画像処理プログラム |
-
2003
- 2003-08-14 JP JP2003293451A patent/JP2005064941A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008228314A (ja) * | 2005-05-16 | 2008-09-25 | Seiko Epson Corp | 画像処理装置,画像処理方法,及び画像処理プログラム |
JP4492723B2 (ja) * | 2005-05-16 | 2010-06-30 | セイコーエプソン株式会社 | 画像処理装置,画像処理方法,及び画像処理プログラム |
JP2007194688A (ja) * | 2006-01-17 | 2007-08-02 | Seiko Epson Corp | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 |
JP4539567B2 (ja) * | 2006-01-17 | 2010-09-08 | セイコーエプソン株式会社 | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4062175B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP2007060111A (ja) | 階調処理装置および方法 | |
US7599097B2 (en) | Method and system for designing multilevel halftone screens using spot functions | |
US7286266B2 (en) | Printer and image processing device for the same | |
JP4783566B2 (ja) | カラー・イメージ・データを処理するシステム及び方法 | |
US7433083B2 (en) | Halftone-image processing device | |
JP4479663B2 (ja) | 固定セルによるハーフトーン処理を行う画像処理装置,画像処理方法,及び画像処理プログラム | |
JP2005064941A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP3302223B2 (ja) | 画像処理装置 | |
JP2005182824A (ja) | イメージ・データを処理する方法 | |
JPWO2005109851A1 (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2005039413A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2005117642A (ja) | ハーフトーン処理方法、画像処理装置、画像処理方法、及びプログラム | |
JP2004048194A (ja) | 画像処理装置及び方法 | |
JP4274102B2 (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP3951953B2 (ja) | 印刷装置、画像処理装置、印刷方法、画像処理方法及びプログラム | |
JP2004320374A (ja) | 画像処理装置、画像処理方法、印刷装置、印刷方法及びプログラム | |
JP3928576B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP3896982B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP2005080217A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP3740732B2 (ja) | ディザマトリックス作成方法 | |
JP2006025220A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JP4062176B2 (ja) | 画像処理装置、方法、プログラムおよび該プログラムを記録した記録媒体 | |
JP4965378B2 (ja) | 画像形成方法および画像形成システム | |
JP2005341142A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 |