以下,図面を参照して本発明を実施するための最良の形態を説明する。図1は,本発明が適用されるシステム全体の構成を示す図である。本システムは,全体としてホストコンピュータ10と画像処理装置20とから構成される。
ホストコンピュータ10は,アプリケーション部11とラスタライズ部12とから構成される。
アプリケーション部11は,ワードプロセッサや図形ツールなどのアプリケーションプログラムにより文字データや図形データ等の印刷対象のデータを生成する。ラスタライズ部12は,印刷対象のデータを画素ごと(又はドットごと)に8ビットの入力画像データに変換して画像処理装置20に出力する。従って,入力画像データは各画素「0」から「255」までの階調値を有する。尚,入力画像データはモノクロデータとして以下説明する。
画像処理装置20は,画像処理部21と印刷エンジン22とから構成される。また,画像処理部21はハーフトーン処理部211とパルス幅変調部212とから構成される。
ハーフトーン処理部211は,ホストコンピュータ10から入力画像データが入力され,2種類以上の量子化データを有する出力画像データに変換する。パルス幅変調部212は,この量子化データに対してドットごとにレーザ駆動パルス有り又は無しを示す駆動データを生成し,印刷エンジン22に出力する。
印刷エンジン22は,レーザドライバ221とレーザダイオード(LD)222とから構成される。レーザドライバ221は,駆動データに対して駆動パルス有り又は無し等を示す制御データを生成してLD222に出力する。LD222は,制御データに基づいて駆動され,更に,感光体ドラム等の駆動により実際に印刷用紙にホストコンピュータ10で生成した印刷データが印刷される。
本発明は,図1に示すようにハードウェアとして構成された画像処理装置20に適用しても良いし,図2に示す画像処理装置20においてソフトウェアとして適用しても良い。ここで,CPU24,ROM25,及びRAM26が図1におけるハーフトーン処理部211やパルス幅変調部212に対応する。
次に,本発明に係るハーフトーン処理の詳細について説明するが,その前に簡単に本発明の概要について説明する。
図3に示すように,繰り返しマトリックスMを入力画像100に順次適用する。この繰り返しマトリックスMには複数の多値ディザマトリックス200(以下,「ディザマトリックス」と称す。図3の例では8個のディザマトリックス200)があり,各ディザマトリックス200を入力画像100のうち複数画素から構成される画素群(以下,「セル」と称す)に適用する。ディザマトリックス200にはテーブル番号(インデックス)が格納され,各画素位置において参照されるテーブル番号が決定される。
そして,図4に示すように,決定したテーブル番号からその番号のテーブルを参照することで,当該画素位置における入力階調値に対する出力階調値(量子化データ)を得る。
なお,ディザマトリックス200は,ドット集中型のマトリックスとなっている。ディザマトリックス200の中心ほど,番号の小さなインデックスが格納され,テーブル番号が小さい程,小さな階調値でもドットが生成され易くなるようにテーブルが構成される。
本発明では,このディザマトリックス200を適用する際に,そのまま入力画像100に適用するのではなく,セルに含まれる画素の入力階調値から重心位置を決定し,ディザマトリックス200の中で最もドットが生成され易い画素位置と,セルの重心位置とが一致するようにディザマトリックス200をシフトさせる(図5参照)。
このようにディザマトリックス200をセルの重心位置にシフトさせることで,入力画像を忠実に再現するのに最も適した位置にドットを生成させることができる。従って,入力に忠実なドットが生成される。従来のディザ法で問題となっていた解像度の低下を抑え,解像性の高い出力画像を得ることができる。
また,本発明では重心位置にディザマトリックス200をシフトさせた後,各画素位置でテーブルを参照して出力階調値を得るようにしている。従って,入力階調値「0」の画素位置では出力階調値は「0」となるため,当該画素位置にドットは形成されない。
前述したAAM法では,重心位置に近い画素から順に出力階調値が割り当てられるため,入力階調値「0」の画素位置に「0」以外の階調値が割り当てることがある(図6(A),(B)参照)。本発明ではかかる事態が発生しないため,AAM法で問題となる円形ドットは生成されず,出力画像にぼやけは生じない。
更に,本発明では,ディザマトリックス200内での処理を行っているときに,理想的なドットサイズ(又は理想階調値,例えばセルに含まれる画素の入力階調値の合計)が得られるとその時点で処理が終了する。理想階調値が得られた時点で処理が終了するため,必要以上にドットが大きく(太く)なるのを防止できる。即ち,入力画像100と出力画像との間で出力濃度が略一致し,従来のディザ法では備えていなかった入出力画像間での濃度保存性を満たすことになる。
逆に理想階調値が十分得られないとき,本発明では補足処理を行うことで理想的なドットサイズに近づけるようにしている。理想階調値が十分得られないときとは,例えば,セル内で入力階調値が偏在している場合である(図7(A)参照)。ディザマトリックス200の中心から離れた画素位置では番号の大きいテーブルが適用されるため,入力階調値よりも少ない出力階調値となり易く(図7(B)参照),その結果,セル内における出力階調値の合計が理想階調値より十分低い値となるからである。補足処理の詳細は後述する。
次に,本発明に係る処理の具体例を説明する。図8乃至図9は,全体処理の動作を示すフローチャートである。本処理は,CPU24によって行われるものとして説明する。勿論,ハーフトーン処理部211が行うものとしてもよい。
順次説明すると,まず,CPU24はROM25から本処理を実行するためのプログラムを読み出すことで処理を開始する(S10)。
次いで,CPU24は入力画像100を読み込む(S11)。例えば,CPU24は入力画像100をRAM26に格納する。
次いで,CPU24は繰り返しマトリックスMを入力画像100の左上に設定する(S12)。入力画像100に対して左上から順にラスタ方向に処理を進めるためである。なお,CPU24はディザマトリックス200の番号を示す「N」に「1」を格納する。
次いで,CPU24はN番目のディザマトリックス200が適用されるセル内の入力階調値の合計を演算する(S13)。重心演算の際に必要だからである。
次いで,CPU24はその合計が「0」より大きいか否か判断する(S14)。合計値が「0」とは,セル内の画素の入力階調値がすべて「0」の場合である。従って,この場合(NOの場合),ドット生成等の処理を何ら行うことなくS18(図9)に移行する。かかる領域すべて処理する場合と比較して処理がスキップされるためその分計算量を少なくすることができる。
一方,階調値の合計が「0」より大きいとき(S14でYES),CPU24はセル内の画素の重心を演算する(S15)。ディザマトリックス200をどの位置にシフトさせるかの判断に必要だからである。重心位置を(X重心,Y重心)としたとき,演算は以下の式を用いる。
これらの式は,例えばROM25に格納され,本処理の際にCPU24が読み出すことで式が適用される。例えば,図5(B)の場合,左上の画素を(0,0),右方向をX座標,下方向をY座標とすると,重心位置は,(X重心,Y重心)=(1,0)となる。
次いで,CPU24はドット生成処理を行う(S16)。このドット生成処理により,量子化データを得る。上述した重心位置へのシフトや,補足処理等もドット生成処理内で行われる。ドット生成処理の詳細を図10に示す。
まず,CPU24は,セル内に出力すべき理想階調値を演算する(S161)。理想階調値は,所定の関数によりセル内の画素の入力階調値の合計から求められる。例えば,理想階調値は,セル内の入力階調値の合計値である。
次いで,CPU24は濃度制限付多値ディザ処理を行う(S162)。濃度制限付き多値ディザ処理の詳細を図11に示す。
まず,CPU24はS15で求めたセルの重心位置にディザマトリックス200の中心をシフトさせる(S1621)。前述の例では,図5(D)のようにシフトさせる。
次いで,CPU24は重心位置に最も近いドット未出力画素を探索する(S1622)。図5(D)の例では,(1,0)の位置を探索する。
次いで,CPU24は探索した画素位置に対応するガンマテーブルを参照して出力階調値を得る(S1623)。例えば,CPU24は図4(B)に示すようなテーブルを参照する。
その際にCPU24は,出力階調値の合計が理想階調値を超えるか否か判断する(S1624)。前述したように,理想的なサイズのドットよりも大きなドットが生成される(理想階調値を超える出力階調値を得る)ことを防止するためである。
従って,その合計値が理想階調値よりも大きいと(YES),理想階調値と等しくなるように出力階調値を調整する(S1626)。その合計値が理想階調値を超えないと(S1624でNO),調整することなく処理はS1625に移行する。
そして,S1625でCPU24は,実際に探索した画素に出力階調値を出力する(S1625)。
次いで,CPU24は理想階調値に達したか否か判断し(S1627),達したときは濃度制限付き多値ディザ処理が終了する(S164へ)。この場合は,理想的なドットサイズが得られたことになる。
一方,理想階調値に達しておらず(S1627でNO),セル内の画素全て処理していないときは(S1628でNO),再びセル内のドット未出力画素を探索し(S1622),上述の処理が繰り返される。
理想階調値に達していなくても,ディザマトリックス200が適用されるセル内の画素全て処理したとき(S1628でYES)も濃度制限付き多値ディザ処理は終了する。この場合,理想階調値に達していないため,十分なサイズのドットが出力されない。後述の補足処理で調整される。
濃度制限付き多値ディザ処理が終了すると,図10に戻り,この処理で出力した出力階調値の合計と理想階調値とを比較して理想階調値全て出力したか否か判断する(S164)。
理想階調値全て出力したとき(YES)は,セル内で理想的なドットサイズ(例えば,セル内の入力階調値の合計と同じ出力階調値)が出力されたことになり,本発明に係る一連の処理が終了して,ディザマトリックス200の移動処理(図9のS18以降の処理)に移行する。例えば,図6(D)のような出力が得られた場合である。
一方,理想階調値全て出力できなかったとき(S164でNO),CPU24は上述した補足処理を行う。例えば,図7(B)のような出力を得た場合に処理が行われる。
補足処理は以下のようになる。まず,図10に示すように,CPU24は理想階調値のうち80%以上出力階調値を出力できたか否か判断する(S165)。出力できないと(NO),濃度制限付き多値ディザ処理(S162)で得られた出力階調値をリセットし(S168),別途出力階調値を得るために,CAPIX法を参考にした処理(S169)を行う。
図7(B)の例では,セル内の出力階調値の合計は「100」で,理想階調値をセル内の入力階調値の合計「400」とすると,50%しか出力階調値を出力できていない。この場合,CAPIX法を参考にした処理(S169)が行われる。
一方,80%以上出力できても(S165でYES),セル内において理想階調値全て出力できたわけではないため,CPU24はその不足分の階調値を追加する処理(S166)を行う。
なお,S165で「80%」以上としているがこれは一例であって,それ以外の数字でもよい。
まず,CAPIX法を参考にした処理(S169)について詳細に説明する。CAPIX法を参考にした処理とは,ディザマトリックス200が適用されるセル内の入力階調値の合計を求め,入力階調値の高い画素に優先して高い出力階調値を再配分する処理のことである。画素単位で出力階調値が割り当てられてドットが生成されるため,解像度の高い出力が得られる。
その詳細を図12に示す。まず,CPU24は,セル内の画素を入力階調値の大きい順にソートする(S1691)。例えば,図7(A)の例では,入力階調値「200」の2つの画素,次いで,「0」の7つの画素とする。
次いでCPU24は,理想階調値を残余階調値に代入する(S1692)。理想階調値を入力階調値の合計値とすると,図7(A)の例では,理想階調値は「400」となり,この値が残余階調値となる。
次いで,CPU24は,ソートした画素リストの先頭の未処理画素に残余階調値を加算し,その値が画素の出力最大値を超えるか否か判断する(S1693)。8ビット出力の出力最大値は,「255」となる。
そして,CPU24は,最大値を超えると(YES),最大値と等しくなるように加算する値を調整し(S1695),その値を先頭の未処理画素に加算する(S1696)。一方最大値を越えないと(S1693でNO),残余階調値を画素に加算する値とし(S1694),その値を先頭の未処理画素に加算する(S1696)。
図7(A)の例では,残余階調値「400」を入力階調値「200」のいずれか一方の画素に加算すると最大階調値「255」を超えるため(S1693でYES),加算値が「255」に調整され(S1695),当該画素に「255」が加算される(S1696)。
次いで,CPU24は残余階調値から加算した階調値を減算して(S1697),残余階調値が「0」になるまで処理が繰り返される(S1698)。
図7(A)の例では,残余階調値が「145」(=400−255)となり,入力階調値「200」の一方の未処理画素にこの値を加算して処理が終了する。処理後の出力例を図7(C)に示す。
なお,このCAPIX法を参考にした処理は,一例であって,例えば,図13に示す高線数ディザ処理(S170)を行うようにしてもよい。高線数多値ディザ処理では,サンプリングポイントが増加するようにテーブル番号が配置されたディザマトリックス200を用いる。例えば,図4(A)に示すディザマトリックス200でテーブル番号「1」のインデックスが番号「8」の位置にもあるようなディザマトリックス200である。複雑な入力でもドットとして再現され易く,解像度の高い出力を得ることができる。
高線数多値ディザ処理は,セルの重心位置にディザマトリックス200の中心をシフトする以外は濃度制限付き多値ディザ処理(図11)と略同じである。
CPU24は,セル中心に最も近いドット未出力画素を探索し(S1701),探索した画素についてテーブルを参照する(S1702)。そして,テーブルから出力階調値を得てその合計が理想階調値を超えると(S1703でYES),理想階調値と等しくなるように出力階調値を調整して(S1704),探索画素に出力階調値を出力する(S1705)。
一方,理想階調値を越えないと(S1703でNO),テーブルから得られた出力階調値を探索画素に出力する(S1705)。
そして,出力階調値の合計が理想階調値に達するか(S1707でYES),又は達しなくてもセル内の画素全て処理すると(S1707でNO,S1708でYES),高線数多値ディザ処理は終了する。
セル内の画素全て処理していないと(S1708でNO),再びドット未出力画素を探索して(S1701),上述の処理を繰り返す。なお,この高線数多値ディザ処理は,CAPIX法を参考にした処理と比較してソート処理(S1691)を行わない分処理が速い。
CAPIX法を参考にした処理(S169),高線数多値ディザ処理(S170)は,いずれも理想階調値を80%以上出力していない場合である。一方,80%以上出力した場合(図10のS165でYES)は不足分階調値の重心近傍画素への追加処理を行う(S166)。
追加処理の詳細を図14に示す。まず,CPU24は不足階調値を演算する(S1661)。理想階調値から実際にこれまでに出力した出力階調値の合計値を減算することで演算する。
次いで,CPU24は重心から最も近いドット未出力画素を探索して(S1662),探索した画素に不足階調値を加算する(S1663)。その際に,加算値が出力最大値(8ビット出力の場合は「255」)を超えると(S1664でYES),最大値に等しくなるように調整する(S1665)。
加算値が出力最大値を超えないとき(S1664でNO)や,出力値の調整(S1665)後,CPU24は不足階調値から加算値を減算する(S1666)。そして,減算後の不足階調値が「0」になるか(S1667でYES),「0」にならなくても(S1667でNO)セル内の画素全て処理したとき(S1668でYES)に本追加処理が終了し,それ以外は(S1668でNO),S1662に移行して処理が繰り返される。
この追加処理(S166)又はCAPIX法を参考にした処理(S169)若しくは高線数多値ディザ処理(S170)が終了すると,ドット生成処理が終了して(図10参照),ディザマトリックス200を他のセルの領域に適用するための移動処理(図9参照)が行われる。
即ち,CPU24はディザマトリックス200の番号「N」が「Nmax」か否か判断する(S18)。「Nmax」とは,繰り返しマトリックスMに含まれるディザマトリックス200の数である。図3の例では,「Nmax」は「8」となる。ここでは,繰り返しマトリックスM内のすべての画素に対してディザマトリックス200を適用して処理が終了したか否か判断している。
繰り返しマトリックスM内ですべてのディザマトリックス200の適用が終了していないと(NO),ディザマトリックス番号「N」に「1」を加算し,上述の処理を繰り返す(S13乃至S18)。
一方,繰り返しマトリックスM内ですべてのディザマトリックス200の適用が終了すると(S18でYES),繰り返しマトリックスM右端より右に未処理画素があるか否か判断する(S20)。もし,未処理画素があれば(YES),繰り返しマトリックスMを右に移動して,ディザマトリックス番号「N」を「1」として,上述の処理が繰り返される(S13乃至S18)。
未処理画素がなければ(S20でNO),入力画像100の1ライン分の処理が終了したことになり,次いでCPU24は繰り返しマトリックスM下端より下に未処理画素があるか否か判断する(S22)。
繰り返しマトリックスM下端より下に未処理画素があれば(YES),繰り返しマトリックスMを1段下の最左位置に移動して(S23),再び上述の処理が繰り返される(S13乃至S18)。一方,下端より下に未処理画素がなければ(S22でNO),1頁分の入力画像100すべての画素に対して処理が終了したことになり,上述した一連の処理が終了する(S24)。
図15は,入力画像に対する出力画像の例である。細線の入力画像(図15(A)参照)に対して,従来の多値ディザ法による出力画像は,図15(B)に示すように,所々で線が切れているが,本発明による出力画像は図15(C)に示すようにかかる事態は発生しない。
また,従来の多値ディザ法の出力画像(図15(B))では,入力画像に対して線が太くなっている部分が存在するが,本発明による出力画像はかかる事態も発生していない。即ち,本発明による出力画像は入力に忠実なものとなる。
なお,本発明のよる効果は上述した以外にも以下のものが上げられる。即ち,本発明はディザマトリックス200を適用するのは入力画像100の各セルに対して1回のみであるため,複数回繰り返す場合と比較して高速な処理を行い得る。
また,ドット成長特性の異なる複数のディザパターンを画像処理装置20のメモリ内(ROM25やRAM26等)に記録する必要がないため,メモリに記録容量の削減を図り装置20自体のコストダウンを実現できる。
上述した例は,本発明にかかるハーフトーン処理が画像処理装置20で行われるものとして説明したが,図16に示すようにホストコンピュータ10側で行われてもよい。この場合,ホストコンピュータ10が本発明に係る画像処理装置として機能する。
また,上述した例は入力画像データをモノクロデータとして説明した。それ以外にも,図17に示すようにCMYKのカラーデータに対して本発明が適用されてもよい。この場合に,ラスタライズ部12からはRGBカラーデータが出力され,画像処理装置20内の色変換処理部213によりCMYKのカラーデータに変換される。
この際に本発明は,CMYKのプレーンごとに繰り返しマトリックスMが適用され,プレーンごとに上述した処理が繰り返される。また,モアレ縞が発生しないように,マトリックスM内のディザマトリックス200が配列される。
更に,本発明は,色変換処理部213がホストコンピュータ10に設けられている場合や,色変換処理213とハーフトーン処理部211とがホストコンピュータ10に設けられている場合でもよい。いずれの場合も上述した例と同様の作用効果を奏する。
更に,上述した例では,多値ディザマトリックス200内に参照すべきテーブル番号が格納されている例を示したが,これ以外にもディザマトリックス200に閾値が直接格納されていてもよい。この場合でも上述した例と同様の作用効果を奏する。
更に,上述した例は,入力画像データの階調数は「0」から「255」までの256階調(8ビット),量子化データも同様に256階調(8ビット)として説明した。勿論,これ以外にも,128階調(7ビット)や512階調(9ビット)等種々の階調数であっても同様の作用効果を奏する。
更に,上述した例では,画像処理装置20の例としてプリンタを例にした説明した。勿論,複写機やファクシミリ,これらの機能を有する複合機等であってもよいし,また,ホストコンピュータ10も携帯電話やPDA(Personal Digital Assistance),デジタルカメラなどの情報携帯端末でもよい。
[第2の実施の形態]
図18は,第2の実施の形態における画像処理装置を含むシステム全体構成図である。このシステムは,画像入力装置10と,画像処理装置20と,画像出力装置30とから構成される。これらの装置は基本的にコンピュータまたはコンピュータによって制御される装置であり,所定のオペレーティングシステムのもとで所定のプログラムが実行されることによって動作する。
画像入力装置10は,アプリケーション部11とラスタライズ部12とから構成される。アプリケーション部11は,文字データ,図形データ,ビットマップデータ等の印刷対象となるデータを生成する。例えば,画像入力装置10でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用して,図示しないキーボード等の操作により文字データや図形データなどを生成する。そして生成したこれらのデータを,ラスタライズ部12へ出力する。画像入力装置10は,図示しないスキャナやデジタルスチルカメラなどの画像データ取得機器から出力される画像データを入力し,その入力画像データをラスタライズ部12へ供給する構成であってもよい。
ラスタライズ部12は,アプリケーション部11から供給された印刷対象のデータを,画素ごとに複数色の画像データに変換して出力する。本実施の形態では,R(レッド),G(グリーン),B(ブルー)の3色それぞれについて,画素ごとに8ビットの多階調値で表された画像データを出力する。つまり,各画素は24ビットの画像データになる。したがって,出力画像データは,画素ごとに「0」から「255」までの256階調を有する。ラスタライズ部12における画像データの生成処理は,画像入力装置10に実装された図示しないプリンタドライバなどによって行われる。そして,ラスタライズ部12から出力される画像データは,画像処理装置20に出力される。
画像処理装置20は,基本的にコンピュータであり,色変換部213とハーフトーン処理部211とで構成される。画像処理装置20は,画像入力装置10から出力された画像データに対して,色変換処理とハーフトーン処理を行い,所定の階調データDRを画像出力装置30へ出力する。
色変換部213は,画像入力装置10から出力される256種類の階調値を有するRGB各8ビット(計24ビット)の画像データを受信し,画像出力装置30が出力する色剤の色成分に合わせて色変換処理を行う。本実施の形態では,RGBからCMYKの画像データDTに色変換処理を行う。ここで,Cはシアン,Mはマゼンダ,Yはイエロー,Kはブラックを示す。ただし,モノクロ画像データの場合は,このような色変換処理は行わなくてもよい。
ハーフトーン処理部211は,色変換部213から出力されるCMYKの画像データDTを入力し,画素ごとに量子化データ(2値や128値など,2種類以上の多値の階調値)に変換し,この変換された量子化データ(所定の階調データDR)を,画素ごとの出力階調値として画像出力装置30に出力する。ハーフトーン処理部211が,本実施の形態にかかる種々の画像処理を行う。具体的な画像処理内容は後述する。
画像出力装置30は,パルス幅変調部31と印刷エンジン35とから構成され,印刷エンジン35は,レーザドライバ36とレーザダイオード(LD)37とから構成される。画像出力装置30では,画像処理装置20から出力された各画素の出力階調値に従って印刷エンジン35が駆動され,この印刷エンジン35によって印刷用紙等の記録媒体に各色成分のドットが,使用するAMスクリーンに応じた所定の網点位置に基づいて形成される。この形成されたドットによって,網点画像が生成され,印刷物として画像が出力される。
パルス幅変調部31は,ハーフトーン処理部211から出力された出力階調値を入力し,この出力階調値からレーザ駆動パルスのデータを生成する。そして,この駆動パルスデータをレーザドライバ36に出力する。レーザドライバ36は,入力された駆動パルスデータから,レーザダイオード37を駆動する駆動パルスを生成し,レーザダイオード37に出力する。レーザダイオード37は,レーザドライバ36から出力された制御パルスに基づいて駆動され,さらに図示しない感光ドラムや転写ベルトが駆動されて,最終的に印刷用紙等の記録媒体に,駆動パルスのパルス幅とパルス数に応じて所定の色成分のドットが所定の位置に所定数出力される。こうして,記録媒体に各色のドットが形成され画像入力装置10にて生成された印刷対象となるデータが印刷される。
図19は,本実施の形態における画像処理を行うハーフトーン処理部を含む画像処理装置の具体的なハードウェア構成図である。図18の画像処理装置20を構成する色変換部21,ハーフトーン処理部22は,図19におけるCPU24,RAM26およびROM25に対応する。
画像処理装置20は,入出力インターフェイス23,CPU24,RAM26,ROM25,ハードディスク29などから構成され,それらはバスを介して互いに接続されている。入出力インターフェイス23は,画像入力装置10と画像処理装置20とのインターフェイス,及び画像処理装置20と画像出力装置30のインターフェイスの機能を有する。入出力インターフェイス23には,所定の伝送方式により伝送された画像入力装置10からのRGBの画像データが入力され,画像処理装置20で処理可能なデータに変換される。RGBの画像データは,一旦RAM26に格納される。そして,入出力インターフェイス23から画像出力装置30に,画素ごとの出力階調データを所定の伝送方式で送出する。
CPU24は,バスを介してハードディスク29またはROM25に格納されたプログラムを読み出し,この読み出したプログラムを所定のオペレーティングシステムのもとで実行することによって,画像処理装置20として機能し,所定の処理を実行する。
ハーフトーン処理部211は,AMスクリーンに応じた網点位置に基づいて,入力画像データを複数画素からなるセルに分割する。さらに,セル内の各画素の入力階調値と座標からセルの重心位置を算出する。そして,所定のセルに対して算出された重心位置座標に所定値を加算若しくは減算して整数化処理を行って,重心位置の画素を決定する。そして,決定された重心位置の画素に階調変換用のディザマトリックスの中心を対応させる。さらに,対応させたディザマトリックスの階調変換テーブルを参照して,セル内の各画素の入力階調値を出力階調値に階調変換する。具体的には後述する図24および図25のフローチャートに示した処理を実行する。
これらの処理を実行するプログラムは,あらかじめハードディスク29やROM25内に格納されていてもよいし,例えばDVD−ROMやCD−ROMなどのコンピュータが読み取り可能な記録媒体によって外部から供給され,図示しないプログラム読み取り手段を介してハードディスク29に記憶することによって格納されてもよい。さらに,インターネットなどのネットワーク手段を介して,プログラムを供給するサーバー等にアクセスし,データをダウンロードすることによってハードディスク29やRAM26に格納されてもよい。
以上説明したように,本実施の形態では,色変換部213が出力するCMYKの画像データDTである入力画像データは,各色8ビットずつの多階調データであり,各色「0」から「255」まで256種類の階調値を有する。また,ハーフトーン処理部211が,各色成分について形成されるドットの大きさを制御する量子化データに変換する量子化処理を行う。画像出力装置30は,前述したように,階調変換された所定の階調データ,つまり画素ごとの出力階調値に対応して,駆動パルスを生成し,各色成分のドットの出力を制御して印刷を行う。
[階調変換処理の概略]
次に,ハーフトーン処理部211が行う階調変換処理について,その概要を図20〜図22を参照して説明する。この概略説明は,本実施の形態の画像処理について,後述する図23,図24の処理フローチャートの説明に対する理解を容易にするために行う。
図20は,本実施の形態におけるスクリーン構造を示している。マトリクス状の入力画像データ100に対して,スクリーンを構成する網点位置(図中,黒丸)の画素が規則的に設定され,この網点位置を中心に入力画像データ100が太線で示したセルCに分割される。図20では,マトリクス状の画素に対して,8画素からなるセルCが割り当てられている。そして,セル内の階調値が均一の場合は,各セルCの中心付近の画素(黒丸が示された画素)がセル内に形成される網点の中心画素に対応する。図20では8x8画素の入力画像データ100に対して13個のセルCが対応付けられている。
図21は,本実施の形態において図20のセルCに適用されるディザマトリクス200の例を示す図である。このディザマトリクスは,図21(A)のインデックスマトリクスと図21(B)ガンマテーブルとで構成される。インデックスマトリクスは,セル内の各画素がどのガンマテーブルを参照すべきかを示すテーブル番号を有し,ガンマテーブルは,入力階調値に対する出力階調値を対応付けた4種類のテーブル1,2,3,4を有する。テーブル1は入力階調値が低い領域で最高出力階調値になっているので,網点中心画素に対応付けられる。すなわち,図20の黒丸の網点位置に対応づけられる。テーブル2,3,4は,順に入力階調値がより高くなるにしたがって最高出力階調値になるので,網点位置の画素の周囲の画素に対応付けられる。したがって,入力階調値が40とすると,ガンマテーブル1では出力階調値が255になるが,ガンマテーブル2では出力階調値は16になり,ガンマテーブル3,4では出力階調値は0である。
ディザマトリクス200の対応するガンマテーブルを参照することで,セル内の各画素の入力階調値が,出力階調値に変換される。よって,ディザマトリクス200は,階調変換マトリクスとも称され,ガンマテーブルは階調変換テーブルとも称される。
本実施形態では、ガンマテーブルは,8ビットの入力階調値に対応して複数ビット(8ビット)の出力階調値を有するが、出力階調値が1ビットで構成されてもよい。この場合は,出力画像値は画素にドットを形成するまたは形成しないの情報になる。
出力階調値が複数ビットで構成される場合は,出力画像値は画素内のドット形成領域を示す多階調データになる。
ディザマトリクスによる出力階調値が画素にドットを形成するまたは形成しないの1ビット情報の場合は,ディザマトリクスの各画素には閾値データが格納されてもよい。その場合は,入力階調値と閾値データとが比較され,その大小関係に応じてドットを形成するまたは形成しないが決定される。また,出力階調値が1ビットの場合,ガンマテーブルの出力階調データが「1」「0」で構成されてもよい。そして,出力階調値が複数ビット,例えば8ビット,の場合は,ガンマテーブルの出力階調値も複数ビットのデータになる。
次に,セルの各画素について行われる階調変換処理を図22を参照して説明する。本実施の形態では,図20に示したようにマトリクス状の画素にディザマトリクス200を画一的に割り当てるのではなく,各セルCの重心画素にディザマトリクスの中心位置(ガンマテーブル1の画素)が対応付けられるようにする。そのために,セルの重心位置を求めて,ディザマトリクスをシフトする処理が必要になる。
図22(A)では,セルCに対して横方向のX軸と縦方向のY軸の座標が定義されている。そして,算出されたセルCの重心位置GC(図中白丸)が座標(3,2)であるのに対して,セルCに対応するディザマトリクス200の中心位置である網点位置AMTが座標(2,2)である。つまり,ディザマトリックス200の網点中心位置AMTとセルCの重心位置GCとがX軸方向に1つずれている。なお階調変換マトリックス200内の数字は,格納された階調変換用のガンマテーブル番号を示す。
上記の場合,本実施の形態では,図22(B)に示したように,セルCの重心位置GCにディザマトリックス200の中心位置AMTをシフトして,両者を対応付ける。つまり,この例では右に1画素,マトリックス200をシフトする。その結果,ディザマトリクス200の網点位置AMTとセルCの重心位置とが一致することになる。このようなシフト処理を行うことにより,入力画像の高い階調画素に対してより確実に網点が形成されることになり,出力画像において細い線がとぎれることなどが回避される。
シフトされたディザマトリックス200の周囲には,図22(B)で破線で例示したように,同じディザマトリックスが取り囲むように連続して存在しているものとして,セル内画素とディザマトリクスのガンマテーブル番号との対応を行う。そして,セル内の各画素の階調変換に際して,各画素の入力階調値が太線のディザマトリックス200または破線の隣接するディザマトリックスのガンマテーブルに基づいて出力階調値に階調変換される。
図22の例では,図22(A)では,重心画素GC(座標(3,2))が参照するテーブル番号は「2」であったが,図22(B)のシフト処理の結果,テーブル番号は「1」になっている。このようにディザマトリックス200をシフトすることによって,セルCの重心位置にドットが形成されやすくなり,重心位置が網点位置になる確率が高くなり,入力画像にできるだけ忠実な出力画像を得ることが可能となる。
本実施の形態の階調変換処理は,上記のシフト処理によるディザマトリクスの対応付けに加えて,セル内の出力階調値の合計が入力階調値から得られる理想的なドットサイズを超えないようにする出力制限処理を行う。この処理により,出力階調値により形成されるセル内のドットが必要以上に大きくなるのを防止し,入力画像と出力画像間の出力濃度をほぼ一致させることができる。
図23は,本実施の形態における理想出力合計値を説明する図である。図23には,セルの平均入力階調値と理想出力合計値との対応を示すテーブル例が示されている。このテーブルには,横軸の平均入力階調値0〜255(8ビット,256階調)に対応して,縦軸の理想出力合計値0〜2040(=255×8)が設定されている。理想出力合計値の最大値が2040(=255×8)となっているのは,画素の最大階調値255にセル内の画素数8を乗じた値である。
一点鎖線のテーブル300は,平均入力階調値に対して理想出力合計値がリニアな関係になっている。また,実線のテーブル310は,平均入力階調値に対応する理想出力合計値がノンリニアな関係になっていて,このノンリニアな関係は,印刷エンジンのデバイス特性(階調データに対する出力濃度の特性)を補正するように設定されている。図23の例では,低い平均入力階調値の領域では理想出力合計値はより低く,高い平均入力階調値の領域では理想出力合計値はより高く設定されている。これ以外にも,デバイス特性に依存して異なる特性の変換テーブルが利用可能である。
上記のように,理想出力合計値を平均入力階調値に対してリニアな関係にする以外に,実線310のようにデバイス特性を補正するように設定することで,出力階調値の濃度制限と共にデバイス特性に対応した濃度制限を行うことができる。
[階調変換処理の詳細]
次にハーフトーン処理部による階調変換処理をフローチャートなどを参照して詳細に説明する。図24は,本実施の形態における階調変換処理のフローチャート図である。また,図25は,階調変換処理内のドット生成処理のフローチャート図である。図24のフローチャートは,図8,9と同等である。また,図25のフローチャートは,図10,11と同等であり,ただし補足処理S164,S165,S166,S168,S169を有していない。よって,同じ処理には同じ引用番号を与えている。これらのフローチャートに示した各処理は,図19のCPU24が,本処理を実行するためのプログラムや演算式を,例えばROM25から適宜読み出したり,必要な処理データを例えばRAM26に適宜格納したり読み出したりして行われる。
まず,図24に示されるように,CPU24が本処理を実行するプログラムをROM25から読み出して処理を開始する(S10)。そして,ハーフトーン処理つまり階調変換処理の対象となる入力画像データを読み込む(S11)。入力画像データはマトリックス状の画素毎の入力階調データで構成され,ここでは一例として色成分シアンの画像データを入力画像データとして読み込む。ただし,階調変換処理は入力画像データの色成分シアンだけでなく全ての色成分の画像データに対して行なわれる。また,モノクロ画像の場合は単色の入力階調データに対して階調変換処理が行われる。
次に,読み込んだ入力画像データを複数の画素群からなるセルに分割する(S11a)。セルへの分割は,所定の間隔で配置された網点位置を基準にして,網点位置にセルの中心が一致するように行われる。前述したようにCMYKなどの複数の色成分の入力階調データを処理する場合は,各色成分の相互干渉によるモアレの発生を防止する目的のために,各色成分について使用するスクリーンを相互に回転したり又は位置をずらしたり,あるいは異なるスクリーンを使用したりすることがある。よって,各色成分毎に網点位置が異なり,各色成分の入力画像データが異なる形状のセルに分割されてもよい。
次に,分割された複数のセル群の左上のセルからラスタ順に,セル処理番号Nを設定するとともに,階調変換マトリックス200を入力画像データ100の左上のN=1のセルに対応させる(S12)。これ以降の処理S13〜S16が,全てのセルに対して繰り返される(S18,S19)。
まず,処理対象のセル内の画素の入力階調値の合計を算出し(S13),その入力階調の合計が「0」より大きいか否かを判定する(S14)。合計が「0」より大きくない場合(S14:NO)は,セル内の全ての画素の入力階調値が「0」であるので,ドット形成のための階調変換処理S15,S16を行うことなく,ステップS18に進む。この場合は入力階調値がそのまま出力階調値(全て「0」)となる。こうすることで,階調変換処理に関する負荷が軽減できる。
入力階調の合計が「0」より大きい場合(S14:YES)は,セル内の画素の重心位置を算出する(S15)。セルの重心位置の座標を(XG,YG)としたとき,以下の式により各座標が算出される。この式は,前述の式と同じである。
XG=〔Σ{(各画素のX座標)×(各画素の階調値)}〕/セルの階調値合計
YG=〔Σ{(各画素のY座標)×(各画素の階調値)}〕/セルの階調値合計
次に,セル内画素の階調変換処理を含むドット生成処理を行う(S16)。この処理では,セルにディザマトリックスを対応付け,セル内の各画素に対応する階調変換テーブルを参照して,各画素の入力階調値をドットを形成するための出力階調値に階調変換する。
次に,上記の処理S13,S14,S15,S16は,セル番号Nが最大値Nmaxになるまで繰り返される。図20の例ではNmax=13となる。セル番号Nが最大値Nmaxでない場合(S18:NO),セル番号NをN+1にインクリメントして(S19),ステップS13に戻り,次の階調変換対象となるセルについてステップS13からS16までの処理を繰り返す。一方,セル番号Nが最大値Nmaxに達すると(S18:YES),階調変換の対象となる全ての画素について,出力階調値への階調変換が終了したことになりハーフトーン処理が終了する。
図25のドット生成処理S16では,セル内で出力すべき理想出力合計階調値を求め(S16A),セル内の画素について重心画素に近い順に処理順を決定し(S16B),重心位置にディザマトリクスの中心をシフトして対応付ける(S16C)。そして,セル内の全ての画素(セル数m=8)に対して(S16D,S16I),対応付けられたガンマテーブルを参照して出力階調値を取得し(S16E),出力階調値をRAM内の出力バッファに出力する(S16G)。ただし,セルの出力階調値の合計が理想出力合計階調値を超えない範囲で出力階調値が出力され(S16FのNO),超える場合(S16FのYES)はその出力階調値は,出力合計値が理想出力合計階調値と等しくなるように調整されて出力される(S16J)。出力合計値が理想値を超えるか(S16FのYES),セル内の全ての画素について階調変換が終了すると(S16HのYES),ドット生成処理は終了する。
本実施の形態では,図10のステップS164以降に示した,出力合計値が理想値に達しない場合の補足処理(S169,S166)は行わない。
次に,具体例を示して上記のハーフトーン処理を説明する。
図26は,第1の入力階調データ例に対するハーフトーン処理を示す図である。図26(A)に示されるとおり,この入力階調データは全ての画素で階調値が「40」の均一画像に対するものである。したがって,図26(B)に示されるとおり,工程S13によりセルCの入力階調値の合計「320」が求められ,工程S15により重心座標(2.3,2)が求められる。さらに,工程S16Aにより図23の理想出力合計値テーブルを参照して理想出力合計値「320」が求められる。図26(C)にはセルCの重心110が黒点で示されている。
そして,図26(D)に示されるように,工程S16Bにて,重心画素に近い順に階調変換処理の順番が決定される。これによれば,中心画素が1番目で,その上下左右の画素が2〜5番目で,その斜めの画素が6,7番目で,最後の1つの画素が8番目になる。
さらに,セルの重心位置とディザマトリクスの中心位置を一致させるようにシフト処理S16Cが行われる。この例では,重心位置と中心位置が一致しているので,シフトする必要はない。その結果,図26(E)のように,ディザマトリクス200のインデックステーブルが割り当てられる。つまり,中心画素がテーブル「1」で,上下左右の画素がテーブル「2」で,斜めの画素がテーブル「3」で,残りの画素がテーブル「4」になっている。
そして,上記の処理の順番に各画素の入力階調値が出力階調値に変換される。処理順番「1」の画素では,図21のガンマテーブル1を参照して,入力階調値「40」が出力階調値「255」に変換されて(S16E),出力バッファに出力される(S16G)。図26(F)は出力階調値が出力される出力バッファ400を示している。次に,処理順番「2」〜「5」の画素では,図21のガンマテーブル2を参照して,入力階調値「40」が出力階調値「16」にそれぞれ変換される(S16E)。そして,これらの出力階調値の合計は,「319(=255+16x4)」であり,理想出力合計値「320」を超えていないので(S16FのNO),全て出力バッファに出力される(S16G)。残りの処理順番「6」「7」「8」の画素では,ガンマテーブル3または4が参照され,いずれも出力階調値「0」に変換され,出力バッファに出力される。全ての画素の変換処理が終了して,図24,25のハーフトーン処理における階調変換処理が終了する。
図27は,第2の入力階調データ例に対するハーフトーン処理を示す図である。図27(A)に示されるとおり,この入力階調データはセルC内の左端の2画素で階調値が「60」「40」で,残りの画素は全て階調値「0」の画像に対するものである。したがって,図27(B)に示されるとおり,工程S13によりセルCの入力階調値の合計「100」が求められ,工程S15により重心座標(1,2.4)が求められる。さらに,工程S16Aにより理想出力合計値「100」が求められる。図27(C)には左端の画素にセルCの重心110が黒点で示されている。
そして,図27(D)に示されるように,工程S16Bにて,重心画素に近い順に階調変換処理の順番が決定される。これによれば,左端の画素が1番目で,その右,下の画素が2,3番目で,その斜めの画素が4,5番目で,残りの3つの画素が6,7,8番目になる。
さらに,セルCの重心位置とディザマトリクス200の中心位置を一致させるようにシフト処理S16Cが行われる。この例では,重心位置が中心位置よりX軸方向に−1ずれているので,シフト量は(−1,0)となる。その結果,図27(E)のように,ディザマトリクス200のインデックステーブルが割り当てられる。つまり,左端画素がテーブル「1」で,上下左右の画素がテーブル「2」で,斜めの画素がテーブル「3」で,残りの画素がテーブル「3」「4」になっている。
そして,上記の処理の順番に各画素の入力階調値が出力階調値に変換される。処理順番「1」の画素では,ガンマテーブル1を参照して,入力階調値「60」が出力階調値「255」に変換され(S16E),その出力階調値「255」は理想出力合計値「100」を超えているので(S16FのYES),理想出力合計値「100」に一致するように出力階調値も「100」に調整される(S16J)。すでに出力階調値の合計が理想出力合計値を超えているので,残りの画素の階調変換を行われない。その結果,図17(F)の出力バッファ400の出力階調値の状態で,図24,25のハーフトーン処理における階調変換処理が終了する。入力階調データの高階調画素にドットが形成されるので,出力画像の画質は向上する。また,入力階調値の合計と出力階調値の合計が一致しているので,出力画像のセルの濃度は入力画像と同じ濃度に再生される。
図28は,第3の入力階調データ例に対するハーフトーン処理を示す図である。図28(A)に示されるとおり,この入力階調データはセルC内の左右両端の画素で階調値が「200」「255」の濃度が不均一な画像に対するものである。したがって,図28(B)に示されるとおり,工程S13によりセルCの入力階調値の合計「455」が求められ,工程S15により重心座標(2.7,2)が求められる。さらに,工程S16Aにより理想出力合計値「455」が求められる。図28(C)にはセルCの重心110が黒点で示されている。そして,図28(D)に示されるように,工程S16Bにて,重心画素に近い順に階調変換処理の順番が決定される。
さらに,セルの重心位置とディザマトリクスの中心位置を一致させるようにシフト処理S16Cが行われる。この例では,重心位置110が中心位置よりX軸方向に+1ずれているので,シフト量(1,0)でシフト処理される。その結果,図28(E)のように,ディザマトリクス200のインデックステーブルが割り当てられる。
そして,上記の処理の順番に各画素の入力階調値が出力階調値に変換される。処理順番「1」の画素では,ガンマテーブル1を参照して,入力階調値「0」が出力階調値「0」に変換されて(S16E),出力バッファに出力される(S16G)。次に,処理順番「2」の画素では,ガンマテーブル2を参照して,入力階調値「255」が出力階調値「255」に変換され(S16E),出力バッファに出力される(S16G)。さらに,処理順番「3」〜「7」の画素では,ガンマテーブル2または3を参照して,出力階調値「0」が出力される。最後に,処理順番「8」の画素では,ガンマテーブル4を参照して,入力階調値「200」が出力階調値「14」に変換され,出力合計値「269」が理想出力合計値「455」を超えていないので(S16FのNO),出力バッファに出力される(S16G)。これで全ての画素の処理が終了し,図25,図26のハーフトーン処理が終了する。図28(F)が階調変換された出力バッファ400の出力階調値である。
なお,上記の第3の入力階調データの場合,出力階調値の合計が「269」であり,理想出力値「455」よりもかなり小さい。このように,セル内の画素に高い階調値の画素が分かれて存在すると,このような結果になり,出力画像の濃度が入力画像の濃度と大きく異なってしまう。
このような場合は,図10で説明したような補足処理S169,S166を実行することで濃度の変動を最小限に抑えることができる。例えば,図12のCAPIX法により処理を行うと,以下のようになる。
CAPIX法の処理とは,ディザマトリックス200が適用されるセル内の入力階調値の合計を求め,入力階調値の高い画素に優先して高い出力階調値を再配分する処理である。つまり,セル内の網点中心位置を決めずに,画素単位で出力階調値が割り当てられるので,入力階調データの高階調値の画素にはそれに対応して高階調値の出力階調データが得られ,解像度を保って出力値を得ることができる。
図28の入力階調データを例にして図12を説明すると,CPU24は,セル内の画素を入力階調値の大きい順にソートし(S1691),入力階調値「255」「200」の2つの画素が先頭に,次いで,入力階調値「0」の6つの画素がその次の順番になる。次いでCPU24は,理想階調値「455」を残余階調値に代入する(S1692)。そして,CPU24は,ソートした画素リストの先頭の未処理画素に残余階調値を加算し,その値が画素の出力最大値を超えるか否か判断する(S1693)。画素の出力最大値は「255」である。最大値を超えていると(S1693のYES),出力最大値と等しくなるように加算する値を調整し(S1695),その値を先頭の未処理画素に加算する(S1696)。一方,出力最大値を越えないと(S1693でNO),残余階調値を画素に加算する値とし(S1694),その値を先頭の未処理画素に加算する(S1696)。
図28の入力階調データの例では,残余階調値「455」を入力階調値「255」の画素に加算すると最大階調値「255」を超えるため(S1693でYES),加算値が「255」に調整され(S1695),当該画素に出力階調値「255」が与えられる(S1696)。そして,CPU24は残余階調値「455」から与えた出力階調値「255」を減算して(S1697),残余階調値が「0」になるまで処理を繰り返す(S1698)。この例では,残余階調値が「200」(=400−255)となり,入力階調値「200」の画素にこの値を出力して処理が終了する。その結果,出力階調データは入力階調データと同じになり,濃度が大きく変動することが回避され解像度も維持される。
図13の高線数ディザ処理,図14の重心近傍画素への不足階調値の追加処理も同様にして行うことができる。
以上の通り,第2の実施の形態のハーフトーン処理では,セルの重心の画素にディザマトリクスの網点中心画素が対応するようにシフト処理を行い,各画素に対応するガンマテーブルを参照して入力階調値を出力階調値に変換処理を行う。そして,出力階調値の合計値が理想出力合計値を超えないように変換された出力階調値を調整する。そして,出力階調値の合計値が理想出力合計値に達しない場合でも,高速処理の観点から補足処理を行わなくても良い。
また,ガンマテーブルの出力階調値は1ビットであっても複数ビットであってもよい。さらに,ガンマテーブルには閾値データを格納して,入力階調値と閾値とを比較して1ビットの出力データを生成してもよい。
本実施の形態は,レーザプリンタ以外の他の印刷エンジン形式の画像形成装置にも適用可能である。
10 ホストコンピュータ,20 画像処理装置,24 CPU,25 ROM,26 RAM,100 入力画像,200 多値ディザマトリックス,211 ハーフトーン処理部,M 繰り返しマトリックス,N 多値ディザマトリックス番号