画像処理装置、画像処理方法、画像処理プログラムおよび画像処理プログラムを記録した記録媒体
【課題】 プリンタなどの画像出力装置において、入力画像の階調データに対して所定の階調変換を行い、画質に優れた出力画像を取得する画像処理技術を提供すること。
【解決手段】 入力画像の階調データから、所定の閾値を超えるまで画素を次々に選択してセルを生成し、セル内の画素の階調値および位置に基づいて、ドットを生成するハーフトーン処理において、セルごとに閾値の大きさをランダムに変更する閾値制御処理を行う。セルごとに閾値の大きさをランダムに変更することにより、セルごとにセルの大きさがバラツくので、セルの位置および形状に特定の周期性が低減する。周期性の少ない位置および形状をもつセルからドットを生成する。
【解決手段】 入力画像の階調データから、所定の閾値を超えるまで画素を次々に選択してセルを生成し、セル内の画素の階調値および位置に基づいて、ドットを生成するハーフトーン処理において、セルごとに閾値の大きさをランダムに変更する閾値制御処理を行う。セルごとに閾値の大きさをランダムに変更することにより、セルごとにセルの大きさがバラツくので、セルの位置および形状に特定の周期性が低減する。周期性の少ない位置および形状をもつセルからドットを生成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プリンタなどの画像出力装置において、入力画像の階調データに対して所定の階調変換を行い、画質に優れた出力画像を取得する画像処理技術に関する。
【背景技術】
【0002】
従来より、レーザープリンタやインクジェットプリンタなど画像出力装置では、入力画像の階調データを画素ごとに所定の閾値で2値化を行うことによって、所定の階調値が付与された画素の位置に、所定の大きさのドットを形成していた。このようにして、ドットを印刷用紙上に形成することにより印刷が行われ、出力画像を印刷物として出力することが行われている。ここで、多値の階調データを、2値化した階調データに変換する処理のことをハーフトーン処理と一般に称している。
【0003】
ハーフトーン処理については、形成するドットの位置によって、出力画像に、例えばドットが鎖状につながるなど、入力画像には存在しなかった特異パターンが発生することがある。そこで、このような特異パターンの発生を抑えるため、ドットのつながりを少なくする技術が特許文献1に開示されている。
【0004】
【特許文献1】特開平11−27528号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
特許文献1におけるハーフトーン処理では、誤差拡散法における特異パターンの発生を抑えるため、複数の画素から構成されるセルを生成する際に、セルを構成する画素の探索を所定の探索順(特許文献1、図4参照)を記録したテーブルを用いて行う方法が提案されている。しかし、特許文献1にある画素の探索順では、テーブルに従って常に画素の右側の画素から選択するので、結果的に生成されるセルの形状に一定の偏りが生じ、歪んだ形となってしまう。そして、セル形状が歪むことにより、ドット間の距離にバラツキが発生し、粒状性が悪化する課題があった。
【0006】
また、複数の色成分ごとにハーフトーン処理を行った後に、処理後の色成分を重ね合わせてカラー表示を行う場合であっては、セル形状が一定であり、またセルに含まれる画素数もほぼ一定となるため、各色成分ごとに所定の周期性を有した位置にドットが生成されることになる。このドットを重ね合わせたとき、各色成分のドットは互いの相対位置が比較的大きな領域ごとにずれることになる。このずれが発生した領域と、発生していない領域では色が異なるため、それぞれの領域の色の差が色ムラとなって現れる。この色ムラは各色成分のドットがもつ周期性が干渉して発生したモアレとみなすこともできる。この色ムラ(モアレ)は人間の視覚にとって不快なパターンであるため、画質の劣化につながる大きな課題となっていた。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本発明では、画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理装置であって、画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて入力データの画素を次々に選択することにより、画素群を生成する画素群生成部と、生成した画素群ごとに、画素群の所定の画素に対して所定の階調値を付与する階調値付与部とを備え、画素群生成部は、閾値または画素選択条件の少なくとも一方を、画素群ごとに変更することを要旨とする。
【0008】
このようにすれば、生成される画素群(以下、「セル」と呼ぶ。)は、互いに、その大きさまたは形状の少なくとも一方が異なり、セルごとに、大きさまたは形状がバラツくことになる。例えば、入力画像に同じ大きさの多数のセルを敷き詰めるように生成して、セルの所定の位置に、階調値を付与することを考えると、同じ大きさのセルが規則的に並ぶことになり、生成されるドットの位置に周期性が生じる。しかし、セルの大きさまたは形状自体の少なくとも一方にバラツキを与えれば、各セルが生成される位置がバラツくことになるので、各セルの周期性を弱めることができる。したがって、各セルに所定の階調値を付与して生成するドットの位置の周期性が弱くなるので、複数の色成分を持つ画像を表示した際の干渉の発生を抑えることができ、色ムラのない視覚的に快適な出力画像を得ることができる。
【0009】
ここで、画素群生成部は、画素群ごとに閾値の大きさを変更する制御を行う閾値制御部を有することが好ましい。
【0010】
このようにすれば、閾値の大きさをセルごとに変化させることにより、セルに選択された画素の数が変化するので、セルの大きさが変化する。セルの大きさを変化することにより、セル間の距離がバラツくことになる。したがって、各セルの位置がバラツき、ドットを生成する位置の周期性が低減するので、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【0011】
ここで、閾値制御部は、画素群の内に位置する画素の階調値に基づいて、閾値の大きさを変更する制御を行うことが好ましい。
【0012】
このようにすれば、セル内に位置する画素の階調値に基づいて、セル内の画素の数、すなわち、セルの大きさをおおむね決定することができる。すなわち、画素ごとに不均一な階調値を有した入力画像を用いた場合であっても、生成されるセルの大きさをおおむね一定にすることができるので、画素の階調値の大小に関わらずおおむね一定の間隔で、ドットを生成することができる。したがって、ドットの分散性に優れ、滑らかに階調表現された出力画像を得ることができる。
なお、セル内の画素の階調値の平均値に基づいて、閾値を制御することがより望ましい。このようにすれば、セル内に含まれる画素の数を制御して、例えば一定にすることができる。もっとも、セル内の画素のうち、初めに選択した画素または重心に位置する画素など、所定の画素の階調値に基づいて閾値を制御するとしてもよい。
【0013】
ここで、閾値制御部は、閾値の大きさにランダム性を付与する制御を行うことが好ましい。
【0014】
このようにすれば、セル内の画素の数、すなわち、セルの大きさにランダム性が加わることによって、各セルの位置がランダムにバラツくので、階調値を付与する位置の周期性がさらに低減する。したがって、生成されるドットの位置の周期性が小さくなり、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【0015】
ここで、画素群生成部は、画素群の内に位置する画素に基づいた位置を基準にして、画素群が異方性を有した形状となるように画素群生成部が選択する画素を決定する画素選択条件を、画素群ごとに決定する画素選択条件決定部を有することとしてもよい。
【0016】
このようにすれば、画素選択条件に基づいてセルを生成することにより、セル形状に異方性をもたせることができる。ここで、異方性を有した形状とは、全方向に等方的である円形形状に比べて、所定の方向に偏りのある形状のことである。例えば、楕円形などがこれにあたる。セル形状に所定の方向に偏りが生じてしまうような場合であっても、この偏りを打ち消すように異方性を持たせた画素の選択を行うことにより、生成するドット位置の偏りを減少することができる。すなわち、セル形状が一定の方向に偏らないように、画素選択を行うことができる。したがって、生成されるドット位置の周期性が小さくなり、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【0017】
ここで、画素選択条件決定部は、画素群のもつ異方性の方向または強さのうち少なくとも一方を、画素群ごとに変更した画素選択条件を決定することが好ましい。
【0018】
このようにすれば、セルごとに画素選択条件がもつ異方性の方向または強さの少なくとも一方が異なるので、セルごとに形状がバラツくことになる。したがって、ドットを生成する位置の周期性が減少し、複数の色成分を持つ画像を表示した際に、視覚的にムラの少ない快適な出力画像を得ることができる。
【0019】
ここで、画素選択条件決定部は、画素群ごとに、異方性の方向または強さのうち少なくとも一方を、ランダムに変更した画素選択条件を決定することが好ましい。
【0020】
このようにすれば、セルごとに異方性の方向または強さがランダムなセル形状となる。すなわち、セル形状がランダムに変化することになる。そして、セル形状がランダムに変化することにより、生成されるセルの位置もランダムにバラツき、ドットを生成する位置がバラツくことになる。したがって、周期性が少なくなるため、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【0021】
ここで、階調値付与部は、生成した画素群における階調値の総和が閾値を超えたとき、階調値と閾値とを差分した階調値を、画素群生成部が最後に選択した画素に戻すことが好ましい。
【0022】
このようにすれば、閾値を超えたセルに最後に組み入れられた画素に、閾値を超えた分の階調値を戻しているため、入力データの階調値が失われることがなく、元の画像とほぼ同じ位置に階調値が残るため、入力データに忠実なドットを形成させることができる。
【0023】
ここで、画素選択条件決定部は、生成した前記画素群の重心位置に基づいて画素を選択する画素選択条件を決定し、階調値付与部は、画素群の重心に基づいて決定した画素に階調値を付与することが好ましい。
【0024】
このようにすれば、セルの生成処理に際して、常にセルの重心に基づいて画素を選択してセルに組み入れていくため、生成されるセルの形状はセルの重心を中心とした所定の形状をもつようになる。そして、その所定の形状の重心、すなわち、おおよそ中心位置に階調値を付与することとなる。したがって、例えば、画素ごとに均一な階調値をもつデータに対して階調変換を行い階調値を付与してドットを形成する場合、生成されたドット間の間隔がほぼ均一となる。こうして、生成されるドットの位置について分散性が良くなるので、快適な出力画像を得ることができる。
【0025】
ここで、本発明は、画像処理方法とすることもできる。すなわち、本発明の画像処理方法は、画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理方法であって、画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて入力データの画素を次々に選択することにより、画素群を生成する画素群生成ステップと、生成した画素群ごとに、画素群の所定の画素に対して所定の階調値を付与する階調値付与ステップとを備え、画素群生成ステップは、閾値または画素選択条件の少なくとも一方を、画素群ごとに変更することを要旨とする。
【0026】
ここで、本発明は、コンピュータに処理を行わせる画像処理プログラムまたは画像処理プログラムを記憶した記録媒体としてもよい。すなわち、本発明の画像処理プログラムは、画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理プログラムであって、コンピュータを、画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて入力データの画素を次々に選択することにより、画素群を生成すると共に、画素群生成部は、閾値または画素選択条件の少なくとも一方を、画素群ごとに変更する画素群生成部、生成した画素群ごとに、画素群の所定の画素に対して所定の階調値を付与する階調値付与部、として機能させることを要旨とする。また、このプログラムを記録した記録媒体としては、フレキシブルディスクやCD−ROM、ICカード、パンチカードなど、コンピュータが読み取り可能な種々の媒体を利用することができる。
【発明を実施するための最良の形態】
【0027】
(第1の実施形態)
以下、本発明を具体化した第1の実施形態を図面に従って説明する。
【0028】
図1は、本発明が適用されるシステム全体を示す構成図である。本システムは、全体としてホストコンピュータ10と、画像出力装置20とを備えている。
【0029】
ホストコンピュータ10は、アプリケーション部11とラスタライズ部12とを備えている。アプリケーション部11は、文字データ、図形データ、ビットマップデータ等の入力画像を印刷対象として生成する。例えば、ホストコンピュータ10でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどを生成する。そして生成したこれらのデータを、ラスタライズ部12へ出力する。もっとも、ホストコンピュータ10は、スキャナなどの画像入力装置(図示せず)から出力されるデータを受け付け、このデータをアプリケーション部11が生成するデータとしてラスタライズ部12へ出力するものとしても差し支えない。
【0030】
ラスタライズ部12は、アプリケーション部11から出力された印刷対象のデータを画素ごと(又はドットごと)に8ビットの階調データに変換する。本実施形態では、R(レッド)、G(グリーン)、B(ブルー)の色毎で、画素ごとに8ビットの階調データを出力する。したがって、出力される階調データは、画素ごとに“0”から“255”までの256種類の値(階調値)を有することになる。ラスタライズ部12における階調データの生成処理は、実際にはホストコンピュータ10に実装されたドライバによって行われる。ラスタライズ部12から出力される階調データは、画像出力装置20に出力される。
【0031】
画像出力装置20は、画像処理部30と印刷エンジン40とを備えている。画像処理部30では、ホストコンピュータ10から出力された階調データに対して、まず色補正処理および色変換処理を行ったのち、ハーフトーン処理、パルス幅変調処理を行い、処理後のデータを印刷エンジン40に出力する。
【0032】
画像処理部30は、大別して、色補正・色変換部31と、ハーフトーン処理部(階調変換手段)33と、パルス幅変調部34と、を有している。
【0033】
色補正・色変換部31は、ホストコンピュータ10より入力される256種類の階調値を有するRGB各8ビット(計24ビット)の階調データを受け取り、印刷エンジン40にて実際に印刷された印刷物が良好な色を表現できるように、色補正表32を用いてRGBの階調データの色補正処理を行う。その後、補正したRGBの階調データを、CMYKの階調データに変換する色変換処理を行う。ここで、Cはシアン、Mはマゼンタ、Yはイエロー、Kはブラックを示している。色変換処理を終えると、CMYKの階調データをハーフトーン処理部33に出力する。
【0034】
ハーフトーン処理部33は、色補正・色変換部31から入力されたCMYKの階調データに対して、所定の種類の階調値をもつ量子化データ(2値あるいは4値などの多値の値)に変換し、その量子化データを出力する。本実施形態では、ハーフトーン処理として、複数の画素からなるセル(画素群)の重心に基づいて画素を新たに選択してセルを構成し、その重心にドットを生成させる処理(Circular Cell法、以下CC法)を用いる。CC法の具体的な内容については後述する。
【0035】
図2は、ハーフトーン処理部33の構成を示した図である。このように、ハーフトーン処理部33は、セル内の画素の階調値の重心を用いてセルを生成する画素群生成部35と、セルの重心に階調値を付与してドットを生成する階調値付与部36と、を備えている。また、画素群生成部35には、画素群を生成する際に用いる閾値の大きさを制御する閾値制御処理を行う閾値制御部37を有している。閾値制御処理の詳細については、後述する。
【0036】
図1に示すパルス幅変調部34は、ハーフトーン処理部33から出力された量子化データを入力し、この量子化データの値に対応して所定のパルス幅をもったレーザ駆動パルスを、駆動データとして生成する。そして、この駆動データを印刷エンジン40に出力する。
【0037】
印刷エンジン40は、レーザドライバ41と、レーザーダイオード(LD)42とを備えている。レーザドライバ41は、入力された駆動データから、レーザーダイオード42を駆動する制御データを生成し、レーザーダイオード42に出力する。レーザーダイオード42は、レーザドライバ41から出力された制御データに基づいて駆動され、さらに図示しない露光ユニット、感光ドラムおよび転写ベルトなどが駆動されて、実際に印刷用紙等の記録媒体にホストコンピュータ10からのデータが印刷されることになる。
【0038】
次に、図3を参照して、画像出力装置20の具体的構成について説明する。ここで、図1の画像出力装置20のうち、色補正・色変換部31、色補正表32、ハーフトーン処理部33およびパルス幅変調部34は、図3におけるCPU22、ハードディスク23、ROM24、およびRAM25に対応している。画像出力装置20は、全体として、入力インターフェース(I/F)21、CPU22、ハードディスク23、ROM24、RAM25、印刷エンジン40とを備えており、それらはバスを介して互いに接続されている。入力I/F21は、ホストコンピュータ10と画像出力装置20とのインターフェースの役割を果たす。入力I/F21には、所定の伝送方式により伝送されたホストコンピュータ10からのRGB階調データが入力され、画像出力装置20が処理を行うことのできるデータに変換される。ここで、RGB階調データは、一旦RAM25に格納される。
【0039】
CPU22は、ハードディスク23またはROM24に格納されたプログラムを読み出して、後述するハーフトーン処理等の各種処理を行う。これらの処理を記録したプログラムは、予めハードディスク23やROM24に格納されていることとしてもよいし、例えばCD−ROMなどのコンピュータが読み取り可能な記録媒体によって外部から供給され、図示しないCD−R/RWドライブを介して画像出力装置20に備えられたハードディスク23に記憶することによって格納されるものとしてもよい。もとより、インターネットなどのネットワーク手段を介して、プログラムを供給するサーバー等にアクセスし、データをダウンロードすることによって格納されるものとしてもよい。
【0040】
本画像出力装置20は、所定のオペレーションシステムの下、CPU22が、ハードディスク23、ROM24、RAM25にアクセスして動作することによって、後述するハーフトーン処理を行うハーフトーン処理部33として機能する。
【0041】
RAM25は、CPU22の制御によって実行される各処理のワーキングメモリとしての役割を果たし、そのバッファ領域に処理に必要な各種データを格納する。また、RAM25は、印刷エンジン40のレーザドライバ41を駆動するための駆動データも格納する。
【0042】
印刷エンジン40は、図1の印刷エンジンと同様の構成で、CPU22の制御によりRAM25に格納された駆動データを入力し、上述した印刷処理を行う。
【0043】
本実施形態におけるハーフトーン処理を実行するプログラムについて説明する。図4は、ハーフトーン処理を行うプログラムの処理の流れを示すフローチャートである。このプログラムは、画像出力装置20内部に備わるRAM25に格納され、所定のオペレーションシステムの下で、CPU22が実行する。プログラムが実行されると、画像出力装置20の各構成要素が動作し、それぞれの機能を果たすことができる。なお、図4のフローチャートにおいて、ステップS10およびステップS20の処理は色補正・色変換部31が行い、ステップ30の処理はハーフトーン処理部33、ステップS40の処理はパルス幅変調部34が行う。
【0044】
処理が開始されると、まずステップS10にて、色補正・色変換部31は、ホストコンピュータ10が出力した画像データを受け付ける入力処理を行う。
【0045】
次に、ステップS20において、色補正・色変換部31は色補正・色変換処理を行う。ここでは、色補正・色変換部31が、ホストコンピュータ10より出力された画像データ(RGBデータ)を取得し、色補正表32に基づいて、色補正を行う(色補正処理)。このとき、実際には、ホストコンピュータ10から入力I/F21を介してRAM25に取り込むことで画像データの読み込みが行われる。また、このステップでは、色補正を行った画像データに対してRGBデータからCMYKデータへの色座標変換を行う処理(色変換処理)も行っている。色変換処理は通常所定の色変換表(図示せず)を用いて行われる。ここでは、入力した画像データをC(シアン)・M(マゼンタ)・Y(イエロー)・K(ブラック)の各色について、8ビット(256階調)で表現された階調データを取得し、CPU22は、RAM25の所定のバッファ領域に格納する。
【0046】
次に、ステップS30において、ハーフトーン処理部33は、CC法によるハーフトーン処理を行う。ここで、ステップS20において取得した階調データの各色のデータを、それぞれ(ハーフトーン処理部に対する)入力データと呼ぶことにする。そして、各入力データに対してハーフトーン処理を行う。ハーフトーン処理の詳細な内容については、後述する。
【0047】
CC法によるハーフトーン処理を、階調データCMYKの各色全てについて実施するとステップS30を終了し、各色ごとに“0”または“255”の階調値を有する量子化データを出力する。
【0048】
ステップS40では、階調値“255”の量子化データが付与された画素の位置にドットを形成するため、パルス幅変調部34は、所定の駆動パルス幅を持ったレーザ駆動パルスを駆動データとして生成する。そして、この駆動データを印刷エンジン40に出力することによって所定の色と大きさのドットを印刷用紙などに形成して印刷物として出力する。このようにして、所定のドットにより印刷対象のデータを再現した印刷物を得ることができる。
【0049】
ここで、本実施形態にある画像出力装置20は、ハーフトーン処理を行うにあたって、ハーフトーン処理部33に備わる閾値制御部37により、セル生成の際に用いる閾値の大小を変化させて生成されるセルの大きさを制御することとしている。以下に、図4のステップS30において、ハーフトーン処理において閾値制御を行うとした処理方法について説明する。
【0050】
図5は、閾値制御を行うCC法によるハーフトーン処理の処理の流れを示すフローチャートである。以下に、図5のフローチャートに従って処理の説明を行う。なお、ステップS100〜S120の処理は画素群生成部35が行うものであるが、特に、ステップS110の処理は、画素群生成部35にある閾値制御部37が行っている。ステップS125〜S150の処理は階調値付与部36が行う。また、ハーフトーン処理を行うに際して、CPU22は、RAM25の記憶領域上に、入力データの階調値を記憶する入力バッファ領域(図示なし)とは別に、入力データの画素ごとに処理が行われたか否かを判別するための判別用バッファ領域(図示なし)を設けている。そして、ハーフトーン処理が行われていない画素(以下、「未処理画素」と呼ぶ)に対応する判別用バッファ領域には“0”を示すビットが割り当てられ、処理が行われた画素(以下、「処理済画素」と呼ぶ)に対応する判別用バッファ領域には“1”を示すビットを割り当てる。このようにして、いずれの画素について処理済みであるかの判別は、CPU22がRAM25の判別用バッファ領域を参照することによって都度行い、処理済みの画素に更に処理を行うことがないようにしている。また、RAM25の記憶領域上には、ハーフトーン処理を行うことにより取得した量子化データを記憶する出力バッファ領域(図示なし)を設けている。
【0051】
ハーフトーン処理を開始すると、始めにステップS100において、CPU22は、ハードディスク23またはROM24に格納されたプログラムを読み出して、入力画像の読み込みを行う処理を行う。入力画像の読み込みは、ホストコンピュータ10から入力データを入力I/F21を介してRAM25に取り込むことで行う。このとき、CMYK各色成分の入力データは、RAM25の入力バッファ領域に格納される。
【0052】
次に、ステップS105では、CPU22は、セル生成の最初の未処理画素となる画素を探索し、初期画素に決定する。このとき、探索する順番としては、入力画像の左上から主走査方向(X方向)に探索した後、副走査方向に1ラインずらして再び主走査方向の探索を行い、これを繰り返すようにして未処理画素を探索する。実際には、RAM25の判別用バッファ領域を参照して、未処理画素であることを示す“0”が格納されている画素を探索して行う。未処理画素がある場合(Yes)は、この未処理画素を初期画素に設定し、RAM25の判別用バッファ領域にその階調値と処理済画素であることを示す“1”を記憶して、ステップS110に進む。未処理画素がない場合(No)はステップS150に進む。
【0053】
ステップS110では、閾値制御処理を行う。閾値制御処理とは、セル内の画素の階調値に基づいて、ハーフトーン処理に用いる閾値の大きさを決定する処理のことである。以下、図6に示した閾値制御処理の処理の流れを示したフローチャートに従って、閾値制御処理について説明する。
【0054】
閾値制御処理を開始すると、ステップS200において、CPU22は、初期画素周辺にある画素の階調値を平均して、平均階調値Vaを算出する。本実施形態では、初期画素を中心とした3×3の領域内にある未処理画素の階調値を平均して、次式により平均階調値Vaを算出することとしている。もっとも、これより大きい領域を設定し、平均階調値Vaを求めるとしてもよい。
Va=(ΣiVi)/N …(1)
ここで、Vは階調値、iは初期画素周辺にある画素を示す数、Nは3×3の領域内の未処理画素の数である。
【0055】
次に、ステップS210では、CPU22は、ROM24より所定の変換テーブルを読み出し、ステップS200で算出した平均階調値Vaに基づいて平均閾値Raを決定する。ここで用いる変換テーブルとは、図7に示した平均値Vaと平均閾値Raとの関係を示したテーブルである。図7に示した関係は、変換テーブルとしてROM24に記憶されており、ステップS210では、CPU22が、この変換テーブルを参照することにより平均閾値Raを取得する。取得した平均閾値Raは、RAM25に格納する。
【0056】
ここで、図7について説明する。図7では、平均階調値Va(横軸)と平均閾値Ra(縦軸)との関係が示されている。そして、その関係は、平均階調値Vaが小さい領域では、平均階調値Vaが大きくなるにつれて、これに比例して平均閾値Raも大きくなるようにしている。そして、平均階調値Vaが所定の値となったところで平均閾値Raの値が最大値をとり、以降は平均階調値Vaにかかわらず平均閾値Raは一定の値となっている。そして、これらの平均階調値Vaと平均閾値Raとの関係が連続して変化するようになっている。例えば、平均階調値Vaが“100”のときは、図7によれば、平均閾値Raの値としてとりうる最大値である“1020”が平均閾値Raの値となる。ここで、レーザプリンタでは、露光ユニット内のレーザ光を感光体ドラムに照射することで潜像を形成している。しかし、1画素分のドットを形成させるときレーザ光の特質により正確に1画素分の大きさのドットを形成させることができない。すなわち、レーザー光の光量分布は一定ではなく、隣接画素から除々に光量が多くなり照射すべき画素内で最も高い光量となり、また照射すべき画素から離れるにつれ、除々に少ない光量となるため、隣接画素に跨って光が照射されてしまうのである。例えば、1ドットおきにドットを生成する場合には、この漏れ光の影響を多く受けることになる。一方、複数のドットを隣接して生成することにより、隣接画素への漏れ光の影響が少なくなる。さらに、照射した光量と、感光体表面に付着するトナー量の間には非線形があり、安定して生成できるドットサイズは、印刷エンジンごとに異なるという特性を持っている。
以上に述べた理由により、レーザープリンタには、ハードウェア特性に依存して、各階調を表現するのに最適な、各ドットのサイズ、すなわち、各ドットを構成する互いに隣接した画素の数が存在する。本実施形態では、図7において平均閾値Raに最大値を設けることによって、平均階調値Vaに対応して、レーザプリンタのハードウェアの構造上から最適なドットサイズ(画素数)に対応した平均閾値Raをとるように制御している。図7では、レーザープリンタが、ドットの有無に対応して“0”および“255”の2値の階調値を表現できることとから、隣接して生成する最適なドットサイズを“4”として、4画素分に相当する“1020(=4×255)”が、平均閾値Raの最大値となるようにしている。
【0057】
次に、ステップS220では、CPU22は、RAM25より読み出した平均閾値Raに基づいて、次式に従ってランダム成分を加えた閾値Rを算出する。
Nc=int(Ra/Vs+Nw×rand()+0.5) …(2)
R=Nc×Vs …(3)
ここで、int()は、小数点以下の値を切り捨て整数を出力する関数、rand()は、“1”〜“−1”の間のランダムな値をとる乱数を出力する関数である。Vsは、ハードウェア上ドットを生成することに最適な階調値である。上述したように、レーザープリンタでは、ドットの有無に対応して“0”および“255”の2値の階調値を表現できることから、本実施形態ではVsを階調値“255”としている。式(3)に示したように、Ncは、閾値Rの階調値“Vs”に対する係数であり、後述するセルCLごとに生成する1ドットを構成する画素の数に対応する。Nwは、Ncの値をランダムに変化させるふり幅を決定する値である。さらに、式(2)において、0.5を加えた値に対してint()演算を行うとしたことにより四捨五入の演算を行い、閾値RがVsの整数倍になるようにしている。
【0058】
このように、本実施形態では、Vsは“255”であり、Nwを“3”としたので、以下に示す式(2’)および式(3’)が得られる。
Nc=int(Ra/255+3×rand()+0.5) …(2’)
R=Nc×255 …(3’)
したがって、式(2’)および式(3’)により、閾値Rは、平均閾値Raを中心としてバラツキながら、Ncが整数となるような閾値Rが得られることになる。例えば、平均閾値Raが“1020(=4×255)”であった場合、Ncの値は、1〜7の各整数値をとることになる。また、例えば、平均閾値Raが、“918(=3.6×255)”の場合も、やはり、Ncの値は1〜7のうちいずれかの整数値をとることになる。さらに、この場合では、式(2’)に基づきNcのとる各値の発生確率が各々異なることになるので、結局、閾値Rの期待値は平均閾値Raの値に一致することになる。このように、式(2’)および式(3’)を用いることにより、閾値Rは、255の倍数でありながら、結果として閾値Rの期待値が図7で求めた平均閾値Raに一致するようにしている。すなわち、閾値Rは、平均閾値Raを中心としてランダムに変化する値となる。なお、式(2’)および式(3’)の演算式はROM24に格納されており、CPU22が必要なときに呼び出すことによって演算を行うようにしている。そして、CPU22は、求めた閾値Rの値をRAM25に格納して、記憶する。
【0059】
次に、ステップS230では、CPU22は、閾値Rの値が“255”未満であるか否かを判断する。“255”未満の場合(Yes)ステップS240に進む。“255”以上であった場合(No)、閾値制御処理を終了する。
【0060】
ステップS240では、CPU22は、“255”未満である閾値Rの値を下限値の値に置き換える設定を行う。ここで、本実施形態では、下限値を“255”としている。例えば、ステップS210において、平均閾値Raとして“663(=2.6×255)”が得られた場合、式(2’)および式(3’)に基づいて演算を行うと、閾値Rが負の値または“0”となる可能性がある。正の階調値をもっている階調データに対して、セルCLを拡大する際に用いる閾値Rが、負または“0”であった場合、適切にセルCLを拡大することができないので、この状態を回避する必要がある。したがって、ステップS240において、“255”未満の値である閾値Rを下限値である“255”に置き換える処理を行う。実際には、CPU22は、RAM25に記憶されている閾値Rの値に上書きして、閾値Rとしての階調値“255”を格納するようにして処理を行っている。
本実施形態では、下限値を“255”としたが、レーザーエンジンの特性上、安定して出力できるドットサイズに下限値が存在することがある。例えば、レーザーエンジンの特性を解析した結果、安定して出力可能なドットサイズの下限値が2画素の場合は、閾値Rの下限値を“510”として設定するとよい。その場合、ステップS240においては、”510”未満の値である閾値Rを、下限値である“510”に置き換える処理を行う。ステップS240を終えると、閾値制御処理を終了する。
【0061】
閾値制御処理を終了すると、図5のフローチャートに戻って、ステップS115において、セルCLの拡大を終了するか否かを判断する。実際には、CPU22は、セル内の画素の階調値の合計が閾値Rを超えているか否かによって判断する。ただし、ステップS110より処理が移行している場合には、初期画素のみをセル内の画素として判断を行う。具体的には、ステップS220でRAM25に格納した閾値Rを読出し、セル内の画素の階調値と比較することにより処理を行う。ステップS115において、セル内の画素の階調値の合計が閾値Rよりも小さい場合(No)はステップS120に進み、セルCLを拡大する処理を行う。閾値Rと同じまたは大きい場合(Yes)は、セルCLを拡大する処理を終了し、ステップS125に進む。
【0062】
ステップS120では、ステップS115において、セル内の階調値の合計が閾値Rより小さいと判断された場合(No)について、CPU22は、新たな未処理画素をセルCLに組み入れてセルCLを拡大する処理を行う。ここで、本実施形態の未処理画素の選択には、セルCLの重心GCを利用して、重心GCから最も近い画素を選択することとしている。すなわち、重心GCからの変位が(x,y)であるとして、次式により求められる距離Lが最も小さくなる画素を選択する。
L=(x2+y2)1/2 …(4)
式(4)の演算式はROM24に格納され、CPU22が必要なときに呼び出すことによって、任意に用いるようにしている。このように、重心GCから最も近い画素を選択することによって、最終的に生成されるセルCLの形状は、円状に近い形状となる。
【0063】
CPU22は、RAM25のバッファ領域より初期画素の位置する画素の階調値と座標とを読み出し、新たな未処理画素を組み入れたときのセル内の画素の重心GCを演算する。CPU22は、具体的には、以下の演算式によりセルCLの重心GCを求める。ここで、xGC,yGCはそれぞれ重心位置のx,y座標である。
xGC={{(セルCLの重心GCのx座標)×(セル内の画素の階調値合計)}
+{(選択した未処理画素のx座標)×(選択した未処理画素の階調値)}}
/{(セル内の画素の階調値合計)+(選択した未処理画素の階調値)} …(5)
yGC={{(セルCLの重心GCのy座標)×(セル内の画素の階調値合計)}
+{(選択した未処理画素のy座標)×(選択した未処理画素の階調値)}}
/{(セル内の画素の階調値合計)+(選択した未処理画素の階調値)} …(6)
これらの演算式はROM24に格納され、CPU22が読み出して演算を行うことになる。もっとも、セルCLが初期画素のみからなる場合は、セルCLの重心GCのx,y座標は初期画素の座標と一致するため、初期画素の座標が用いられる。
【0064】
また、セルCLの重心GCおよびセル内の画素の階調値合計は、新たな未処理画素を組み入れるたび式(5)および式(6)により算出し、最新の値をRAM25に記憶する。こうすることによって、新たな未処理画素を組み入れたとき式(5)および式(6)において、新たな未処理画素を組み入れる前の重心GCおよび階調値合計を計算する必要がなくなり、RAM25から直接取得するので処理の高速化を図ることができる。そして、セルCLを拡大する処理を終えると、セル内の画素に対応するRAM25の判別用バッファ領域に、処理済画素であることを示す“1”を格納する。
【0065】
以上に述べたように、未処理画素を選択して新たにセルCLに組み入れる処理(ステップS120)は、CPU22がセル内の画素の重心GCから最も近い距離にある画素を選択することによって行っている。しかし、重心GCから等距離に複数の画素が存在する可能性がある。こうした場合、本実施形態では走査方向に探索される順に従ってCPU22が画素を選択して、セルCLを拡大するようにしている。
【0066】
次に、ステップS120を経てステップS115へ至っている場合、CPU22は、再びセル内の画素の階調値の合計が閾値Rを超えているか否かを判断する。すなわち、新たに選択した未処理画素の階調値を含めたセル内の画素の階調値合計が、所定の閾値未満であるか否かの判断を行う。閾値Rを超えていない場合(No)は、再びステップS120に進み、新たな未処理画素をセルCLに組み入れる処理を行う。閾値Rを超えている場合(Yes)は、ステップS125へ進む。
【0067】
このように、ステップS115とS120の処理を繰り返すたびに、CPU22は、ステップS120で演算したセル内にある画素の階調値の合計が、閾値Rと等しいか否かを判断しながら閾値Rに達するまでセルCLを拡大していくことになる。
【0068】
ステップS125では、セル内にある画素の階調値の合計が閾値Rに等しいか否かを判断する。上述したように、RAM25に記憶されているステップS120で演算した値を参照することによりセル内にある画素の階調値の合計を取得し、閾値Rに等しい場合(Yes)、ステップS130へ進む。階調値の合計が閾値Rに等しくない場合(No)、ステップS135へ進む。
【0069】
ステップS130では、重心GCの位置を算出する。すなわち、CPU22は、選択した未処理画素を含めセル内の画素について、再び重心GCの演算を行う。具体的なCPU22の演算は、上述した式(5)および式(6)の演算式をROM24より読み出して、行うことになる。そして、このステップS130で演算した重心GCの位置は、CPU22の制御によってRAM25のバッファ領域に記憶されたセルCLの階調値の合計とともに格納される。このとき、ステップS110およびS115で用いた閾値Rと同等の階調値を付与する。ステップS130の処理を終えると、次にステップS145へ進む。
【0070】
ステップS135では、閾値Rを超える階調値分を無視してセルCLの重心GCを算出する処理を行う。このためまず、CPU22は、ステップS110で求めたセル内の階調値合計から閾値Rの値を減算する演算を行う。この演算値を戻りデータと呼ぶ。
【0071】
このときの重心GCの演算は、戻りデータ(ステップS135の演算値)を用いて以下の演算式により求められる。
【0072】
xGC={{(セルCLの重心GCのx座標)×(セル内の画素の階調値合計)}
−{(最後に選択した未処理画素のx座標)×(ステップS135の演算値)}}
/{(セル内の画素の階調値合計)−(ステップS135の演算値)} …(7)
yGC={{(セルCLの重心GCのy座標)×(セル内の画素の階調値合計)}
−{(最後に選択した未処理画素のy座標)×(ステップS135の演算値)}}
/{(セル内の画素の階調値合計)−(ステップS135の演算値)} …(8)
ここで、式(5)、式(6)とは異なる点として、セル内にある画素の階調値をそのまま用いるのではなく、階調値の過剰分である戻りデータを引くことでセル内の階調値の合計が閾値Rと同じ値になるようにしている。
【0073】
この演算式は、式(5)および式(6)と同様に予めROM24に格納されており、CPU22が、本ステップを実行する際にROM24から読み出すことによって実行される。ここでは、最終的にステップS115で選択した画素の階調値は、これまで演算した階調値の合計が、閾値Rと等しくなるように演算して、それをもとに重心GC位置を求めることになる。そしてCPU22は、演算した重心GCの位置データを再びRAM25のバッファ領域に書き込む。
【0074】
次に、ステップS140では、CPU22は、戻りデータを再び、最後にセルCLに選択した画素の階調値を記憶する入力バッファ領域に書き込む。これにより、戻りデータが当該画素の階調値に格納される。なお、このとき、階調値を戻された画素は、RAM25の処理済み画素を示している判別用バッファ領域には“0”が付与されて、戻りデータの階調をもつ未処理画素として扱われる。すなわち、階調値を戻された画素は、再び階調値を有するので、再びステップS105〜S120の処理の対象になる。このように、戻りデータは、戻りデータを発生した元の画素に再び格納して階調値とすることによって、セル内の階調値の合計が閾値を超えた場合であっても、入力データ全体としての階調値が保たれたドット分布が得られることになる。したがって、入力データに忠実なドット分布を形成することができる。
【0075】
ステップS145では、重心GCに位置する画素に、階調値の付与を行うドット生成処理を行う。以下、図8のフローチャートを用いて、ドット生成処理を説明する。
【0076】
ドット生成処理では、閾値Rに対応したドットを生成する場合において、生成するドットを構成する画素の数および座標を決定する。ドット生成処理を開始すると、始めに、ステップS300において、ドットを構成する画素の数Ndを決定する。ここでは、閾値Rの値および生成するドットに相当する階調値に基づいて、次式により生成するドットを構成する画素の数Ndを決定することができる。本実施形態では、生成するドットに含まれる各画素の階調値は“255”としているので、閾値Rを“255”で除算した値、すなわち、Ncが生成するドットを構成する画素の数になる。もっとも、ハードウェア上の制約に合わせて、ドットを生成するために最適な各画素の階調値をVsとすればよく、例えば階調値“127”が最適な場合、閾値Rを“127”で除算して、ドットを構成する画素の数Ndを求めてもよい。
Nd=R/Vs
=R/255=Nc …(9)
【0077】
次に、ステップS310において、ステップS130またはステップS135で求めたセル内の画素の階調値の重心GCに基づいて、ドットを生成する座標を決定する。ここでは、重心GCの座標は、式(5)〜(8)の演算の結果、端数(小数部分)を有した値となっている。しかし、以上の処理でいう画素とは、印刷エンジンがドットを生成することのできる最小単位の座標を示したものであるので、この最小単位より小さな単位でドットの座標を制御することができない。そこで、未処理画素のうち、重心位置GCから最も近い画素を選択して、ドットを生成する画素に決定する。実際には、CPU22は、セルCL内にある画素について、式(4)により重心GCからの距離Lを演算する。そして、セル内にある画素のうち距離Lが最も小さくなる画素を判断し、その画素をドットを生成する画素に選択する。
【0078】
次に、ステップS320において、選択した画素がNd個となっているか否かを判断する。ドットを生成する位置を決定した画素の数がNd個より少ない場合(No)、ステップS330へ進む。ドットを生成する(階調値“255”を出力する)位置を決定した画素の数がNdであった場合(Yes)、ステップS340へ進む。。
【0079】
ステップS330では、ステップS310で求めたセル内の画素についての重心GCからの距離Lを参照して、1つ先に選択した画素の次に重心より近い画素を選択し、更にドットを構成する(階調値“255”を出力する)画素の座標を決定する処理を行う。このとき、既に選択した画素を重ねて選択することのないように、先に選択した画素の次に距離Lが小さい画素を選択する。ステップS330の処理を終えると、ステップS320へ進む。
【0080】
こうして、ステップS320およびステップS330の処理を繰り返し行うことによって、ドットを構成するNd個の画素が選択される。
【0081】
ステップS340では、ステップS310において選択された画素にドットを生成する。実際には、CPU22は、ドットを生成する画素に対応するRAM25の出力バッファ領域に“255”の量子化データを格納させる。ここで、選択した画素以外の画素に対応する出力バッファ領域には、ドットを生成しないので“0”が格納される。ステップS340を終えると、ドット生成処理を終了する。
【0082】
図5のフローチャートに戻り、ステップS145におけるドット生成処理を終了すると、次にステップS105へ進み、再び未処理画素を探索する。ステップS105において、未処理画素がないと判断された場合(No)、ステップS150へ進む。
【0083】
ステップS150では、CPU22は、ハーフトーン処理によって生成した量子化データを出力バッファ領域より読み取り、ドットのオンオフに対応した量子化データとして、印刷エンジン40に出力する。ステップS150を終えると、ハーフトーン処理を終了する。
【0084】
以上で述べた処理を行うことによって、平均閾値Raを中心としてランダムに変化させた閾値Rを用いたCC法によるハーフトーン処理を行い、ドットを生成することができる。次に、図9および図10を用いて、本実施形態にあるハーフトーン処理の処理例について説明する。
【0085】
図9は、図9(a)に示された3行(m〜m+2)×4列(n〜n+3)のマトリクスで表された入力データに対して、本実施形態にあるハーフトーン処理を施した場合の処理例を示した図である。なお、ここでは、3行×4列の入力データに対して、階調値“100”が与えられた場合について説明を行うが、入力データの大きさはこれに限られることなく、実際に行われる処理ではより大きなデータに対して行うとするものである。
【0086】
まず、図9(a)に示した入力データに対して、初期画素の探索順に従って、画素(n,m)を初期画素に設定する。
【0087】
次に、ステップS200で述べたように、初期画素の周辺3×3の領域に含まれる未処理画素より平均階調値Vaを算出する。図9(a)の例では、初期画素が入力データの左上端に位置しているので、初期画素を中心とした3×3の画素のうち、存在しない画素があるのでこれを無視して、画素(n,m)、画素(n+1,m)、画素(n,m+1)および画素(n+1,m+1)の4つの画素についての平均階調値Vaを算出する。図9(a)の例では、初期画素(n,m)について、平均階調値“100”が求められる。
【0088】
次に、ステップS220で述べたように、図7に示した変換テーブルを用いて、平均閾値Raを取得する。ここでは、平均階調値Vaが“100”であるので、これに対応する平均閾値Raとして、“1020(=4×255)”が取得されることになる。
【0089】
次に、平均閾値Raと式(2’)および式(3’)を用いて、閾値Rを取得する。ここでは、閾値Rをランダムに変化させた結果、閾値Rが“510(=2×255)”になったものとして説明する。
【0090】
次に、図9(a)において、初期画素である画素(n,m)をセルCL1に組み入れて、セル内の画素の階調値の合計が、閾値R(=510)より大きいか否かを判断する。ここでは、まだ、閾値Rより小さいので、次にセルCL1を拡大する。
【0091】
セルCLを拡大する際には、ステップS120で述べたように重心GCより最も近い画素を選択する。図9(a)では、セルCL1(=画素(n,m))の重心GCより最も近い画素として、画素(n+1,m)および画素(n,m+1)の2つの画素が挙げられるが、この場合、初期画素の探索順にしたがって優先順位を定めるとよい。したがって、ここでは画素(n+1,m)が選択される。
【0092】
画素(n+1,m)がセルCL1に組み入れられると、図9(b)に示した状態となる。ここで、セルCL1内の階調値の合計は“200(=100+100)”であり、閾値Rに満たないので、セルCL1の重心に基づいて、更にセルCL1を拡大する処理を行う。
【0093】
次に、画素(n,m+1)がセルCL1に組み入れられる(図9(c)参照)。このときの、セル内の画素の合計は“300”であるので、更にセルCL1を拡大する。
【0094】
次に、画素(n+1,m+1)がセルCL1に組み入れられる(図9(d)参照)。このときの、セル内の画素の合計は“400”であるので、更にセルCL1を拡大する。
【0095】
次に、画素(n+2,m)がセルCL1に組み入れられる(図9(e)参照)。このときの、セル内の画素の合計は“500”であるので、更にセルCL1を拡大する。
【0096】
次に、画素(n+2,m+1)がセルCL1に組み入れられる(図9(f)参照)。このときの、セル内の画素の合計は“600”であるので、閾値Rより大きくなっている。したがって、セルCL1の拡大を終了し、画素(n+2,m+2)の階調値のうち、階調値“10”だけをセルCL1に残して、残りの階調値“90”を戻りデータとして元の画素(n+2,m+1)に戻す。このとき、重心の位置は、画素(n+1,m)の内部にありながら、画素(n+1,m+1)寄りに位置している(図9(f)の白丸参照)。
【0097】
次に、式(8)に従って、生成するドットの数Ndを決定する。図9の例では、生成するドットの数Ndは、“2(=510/255)”となる。したがって、図9(f)に示したセルCL1の重心からより近い2つの画素を選択し、画素(n+1,m)および画素(n+1,m+1)にドットが生成される(図9(g)参照)。
【0098】
以上のようにして、閾値Rの制御を行いながらハーフトーン処理を行うことができる。
【0099】
なお、実際には、図9に示した3×4の入力データより更に大きいデータについて処理を行うものであって、例えば、9×9の入力データに対して処理を行った例を図10に示した。図10は、9行9列(m〜m+8,n〜n+8)の入力データに対して、ハーフトーン処理を行う例であって、図9と同様、入力データの全ての画素に階調値“100”を与えた場合の処理結果の例である。ここで、図10(a)の左上端の領域は、図9にある処理例に対応して、既にドットが生成されたものが示されている。セルCL1の次のセルCL2についての処理は、画素(n+3,m)を初期画素として行うことになる。
【0100】
図10(a)の状態にあるデータに本実施形態によるハーフトーン処理を行った処理結果を、図10(b)に示す。図10(b)に示したように、セルCL1以降、CL2、CL3と順番にCL9までのセルが生成されている。そして、セルCL1〜CL9の各セルごとに閾値制御が行われているので、各セルCLの大きさがバラツいている。そして、各セルの階調値合計(大きさ)に対応して、複数のドットからなる塊状のドットが適度に分散したドット分布が得られている。
【0101】
以上、CC法によるハーフトーン処理において閾値制御を行った場合の処理例について説明した。CC法では常にセルCLの重心に最も近い画素を組み入れてセルCLを生成するため、階調値を付与する画素の位置を中心としてほぼ円状となるセルCLを生成する。したがって、階調値が付与された画素位置にドットを形成した場合、隣り合うドットとの距離が必要以上に近づくことがないため、ドットの分散性、すなわち粒状性の優れた出力を得ることができる。
【0102】
しかし、閾値制御を行うことなく、閾値Rを固定値としてCC法によるハーフトーン処理を行った場合、セルCLに新たな画素を組み入れる際に、初期画素の探索方向を一定としているために、セルCLの配置位置に一定の周期性が現れる傾向がある。図11は、均一な階調値をもつ入力データに対して、CC法によるハーフトーン処理を行った場合に、生成されるセルCLの例を示した図である。図11(a)には、閾値制御を行うことなく、閾値を“255”で固定とした場合のセルCLを示している。図11(b)は、閾値制御を行い、閾値が255〜7×255の範囲で、セル毎にランダムに変化させた場合の、セルCLを示している。図11(a)に示すように、閾値Rを固定とした場合では、初期画素の探索方向に起因して、セルの配置位置に一定の周期性がみられる。この場合、セル内の画素の重心位置にドットを生成すると、ドットの位置にも周期性が生じることとなっていた。また、複数の色成分ごとに処理を行った後に、処理後の色成分を重ね合わせて色を再現する場合、各色成分ごとに所定の周期性を有したドット分布が生成されることになる。したがって、各色成分のドットは互いの位置が周期的にずれるために、画像に色ムラ、すなわちモアレが生じるという課題があった。(図13(a)参照)。
【0103】
そこで、本実施形態では、閾値Rの大きさをセルCLごとに変化させることにより、セルCLの大きさにバラツキを与えた。こうすることによって、図11(b)に示したように、セルCLごとに大きさがバラツいたセルCLが並ぶことにより、セルCLの並び方に周期性が発生しなくなる。したがって、セル形状に基づいて生成されるドットの分布に周期性が表れることがないため、複数の色成分を重ね合わせて色を再現する場合では、各色ドットごとの相対的なドット位置がずれた場合であっても、ずれ方に周期性がないので、各色ドットが適度にバラツき、目立った色ムラ、すなわちモアレとなって現れることがない。つまり、色ムラ、モアレの目立たない、画質に優れたカラー画像を得ることができる(図13(b)参照)。
【0104】
図12に、各画素の階調値が均一な入力画像のC(シアン)データに対して、本実施形態の閾値制御を行うハーフトーン処理を実際に適用してドットを生成した処理結果を、一例として示す。図12(a)には閾値制御を行うことなく閾値“255”で固定としてハーフトーン処理を行った場合の処理結果である出力画像を示し、図12(b)には閾値を“255〜7×255”の範囲で閾値制御を行うハーフトーン処理を適用した場合の処理結果である出力画像を示している。図12(a)に示すように、閾値固定とした場合では、入力画像の各画素は均一な階調値を有していたにもかかわらず、その出力画像には、周期性が見られる。一方、図12(b)に示したように、閾値制御を行った場合では、周期性のない、かつドット分散性も優れた出力画像となっている。
【0105】
図13に、C(シアン)、M(マゼンタ)各色成分ごとに、各画素の階調値が均一な入力画像に本実施形態の閾値制御を行うハーフトーン処理を実際に適用し、求めた色成分を合成してカラー画像としての出力画像を出力した場合の処理結果を、一例として示す。すなわち、図12に示したCデータに加えて、別途同様の処理を行って求めたMデータを同時に重ねて出力したものである。図13(a)には閾値制御を行うことなく閾値“255”で固定としてハーフトーン処理を行った場合の処理結果を示し、図13(b)には閾値を“255”〜“7×255”の範囲で閾値制御を行うハーフトーン処理を適用した場合の出力画像(2値化画像)を示している。図13(a)では、各色成分がそれぞれもっているドット位置の周期性のために、各色のドットを重ね合わせたときに、周期性をもった色ムラ、すなわちモアレとなって周期的な特異パターンが現れている。一方、図13(b)に示したように、閾値制御を行うことにより、色ムラすなわちモアレによる特異パターンがなくなっている。すなわち、閾値制御を行うことにより、モアレが発生せず、かつドット分散性も優れたカラー画像が得られている。
【0106】
以下、第1の実施形態の効果を記載する。
(1)閾値Rの大きさを、セルCLごとに切り替えることによって、各セルCLの大きさにバラツキを与えた。こうすることにより、セルCLの配列に周期性が低減することとなって、出力画像に生成されるドット位置に現れる周期性が低減する。したがって、重ねあわせによるモアレの発生を抑え、かつドット分散性に優れた、視覚的に快適な画像を得ることができる。
(2)閾値Rの大きさを、平均閾値Raを中心としてランダムに変化させることによって、各セルCLの大きさにランダムなバラツキを与えた。こうすることにより、ドット位置に現れる周期性が更に低減する。したがって、視覚的に快適な画像を得ることができる。
(3)平均閾値Raの大きさを、セル内の画素の階調値の平均値に対応して変化するようにした。こうすることによって、セル内に含まれる画素の数をおおむね一定の範囲に収めることができる。そして、画素の数をおおむね一定とした各セルはその大きさがおおむね一定の範囲に収まり、異なるセル間のドット間隔がおおむね一定の範囲に収まることになる。すなわち、平均閾値Raの大きさを、セル内の画素の階調値の平均値(平均階調値Va)に対応させることにより、生成されるドット間隔をおおむね一定の範囲に収まるように平均閾値Raを定めることができる。こうすることによって、レーザープリンタの特性によって異なる、安定したドット生成が可能な、最適なドット間隔及びドットサイズを設定することができる。
(4)平均閾値Raの大きさを、セル内の画素の平均階調値Vaに対応して変化させながら、一定の値以上となる平均階調値Vaに対しては平均閾値Raの値を最大値とした。ここで、最大値の値は、ドットを生成するときに最適なドットサイズに基づいて設定している。例えば、レーザープリンタの特性上、1つのドットを構成する隣接した画素の数に最適な値がある場合、この最適なドットサイズを中心として、バラツかせたドットサイズをもつドットを生成することになる。このようにして、ハードウェアの特性上最適なドットサイズをもつドットを生成する確率が高まる。
【0107】
(第2の実施形態)
次に、本発明を具体化した第2の実施形態について説明する。
【0108】
図14は第2の実施形態におけるハーフトーン処理部33の構成を示した図である。図に示すように、ハーフトーン処理部33は、画素群生成部35と階調値付与部36とを備えている。また、第2の実施形態における画素群生成部35は、後述するように評価関数(画素選択条件)をランダムに切り替えて、制御する評価関数制御部38を有している。
【0109】
第2の実施形態では、新たにセルCLに組み入れる画素を選択する際に、セルCLの選択に用いる評価関数に異方性を与える。こうすることによって、セルCLの形状に異方性を与えられ、セルCLの形状が円形でなくなることになる。そして、セルCLごとに、評価関数の異方性を有した方向を変化させることによって、セル形状を変化させる。以下、セル形状に異方性を加え、楕円形とした場合の評価関数を算出し、説明を行う。
【0110】
まず、一般に、原点まわりの楕円形の式は以下の式で与えられる。
x2/a2+y2/b2=1 …(10)
次に、原点(楕円形の中心)周りにΘ回転させたxy方向座標をそれぞれx’,y’とすると、以下の式が得られる。
x=x’cosΘ+y’sinΘ …(11)
y=−x’sinΘ+y’cosΘ …(12)
式(11)および(12)を式(10)に代入すると以下の式が得られる。
(x’cosΘ+y’sinΘ)2/a2+(−x’sinΘ+y’cosΘ)2/b2
=1 …(13)
式(13)に示した楕円形の内部の領域から画素を選択するためには、回転後の座標(x’,y’)を(x,y)で置き換えて、次式の評価関数fが最も小さくなる画素(x,y)を選択すればよい。
f=(xcosΘ+ysinΘ)2/a2+(−xsinΘ+ycosΘ)2/b2
…(14)
ここで、例えば、楕円形の形状を長径:短径=√2:1とすると、式(14)に、a=√2b,b=bを代入し、評価関数fは次式で与えられる。
f=((xcosΘ+ysinΘ)2)/2+(−xsinΘ+ycosΘ)2
=1/2×(1+sin2Θ)x2−(sinΘcosΘ)xy+1/2×(1+cos2Θ)y2 …(15)
ここで、Θを0度から45度刻みに切り替えるとすると、それぞれの関数f0〜f3が得られる。
f0=1/2x2+y2 (Θ=0°) …(16)
f1=3/4x2−1/2xy+3/4y2 (Θ=45°) …(17)
f2=x2+1/2y2 (Θ=90°) …(18)
f3=3/4x2+1/2xy+3/4y2 (Θ=135°) …(19)
第2の実施形態では、式(4)に示された重心からの距離L=(x2+y2)1/2に替えて、上記式f0〜f3のうちいずれかをランダムに選択して、選択した評価関数fの値がもっとも小さくなる画素をセルCLに組み入れる。こうすることによってセルCLに組み入れる画素の選択に異方性が加わることになり、生成されるセルCLの形状にバラツキを与えることができる。なお、式(16)〜式(19)の演算式は、ROM24に記憶され、必要なときに、CPU22がROM24から読み取るようにして、演算式が取得される。
【0111】
図15は、評価関数fの制御を行ったときのCC法によるハーフトーン処理の処理の流れを示すフローチャートである。以下に、図15のフローチャートに従って処理の説明を行う。なお、ステップS400〜S420の処理は画素群生成部35が行う。特に、ステップS410の処理は、画素群生成部35の評価関数制御部38が行っている。ステップS425〜S450の処理は階調値付与部36が行う。
【0112】
処理を開始すると、始めにステップS400において、CPU22は、ハードディスク23またはROM24に格納されたプログラムを読み出して、入力画像の読み込み処理を開始する。入力画像の読み込みは、ホストコンピュータ10から入力データを入力I/F21を介してRAM25に取り込むことで行う。
【0113】
次に、ステップS405では、CPU22は、セル生成の最初の未処理画素となる画素を探索し、初期画素に決定する。このとき、入力データの左上から主走査方向(X方向)に探索した後、副走査方向に1ラインずらして再び主走査方向の探索を行い、これを繰り返すようにして探索する。実際には、RAM25の判別用バッファ領域を参照して、入力データの画素のうち未処理画素であることを示す“0”が格納されている画素を探索する。未処理画素がある場合(Yes)は、この未処理画素を初期画素に設定し、RAM25の判別用バッファ領域にその階調値と処理済画素であることを示す“1”を記憶して、ステップS410に進む。未処理画素がない場合(No)はステップS450に進む。
【0114】
ステップS410では、評価関数制御処理を行う。ここでは、画素の選択に用いる評価関数をセルCLごとに決定する。以下、図16に示した評価関数制御処理の処理の流れを示したフローチャートを用いて、説明する。
【0115】
評価関数制御処理を開始すると、ステップS500において、傾き角度をランダムに決定する。実際には、CPU22が、0°、45°、90°、135°の角度のうちいづれを用いるかをランダムに選択して、選択した角度をRAM25に記憶する。
【0116】
次に、ステップS510では、ステップS500で決定した角度に対応する評価関数fを選択する。ここで選択される評価関数fは、式(16)〜式(19)で示したf0〜f3の評価関数のうちいずれかである。実際には、ROM24に記憶された評価関数f0〜f3から、選択した評価関数fを読み出して取得する。取得した評価関数fはRAM25に記憶する。このようにして、評価関数のもつ異方性の切り替えをランダムに行っている。閾値制御処理を終えると、図15のフローチャートに戻り、ステップS415に進む。
【0117】
このように、本実施形態では、予めROM24に容易しておいた評価関数fをランダムに用いることとした。もっとも、ステップS500において、0°から180°の範囲で、例えば、30°刻みの角度からランダムに選択して角度Θを求め、ステップS410において、求めた角度Θを式(15)を代入して評価関数fを取得するとしてもよい。
【0118】
次に、図15のフローチャートへ戻って、ステップS415において、セルCLの拡大を終了するか否かを判断する。ここでは、CPU22は、セル内の画素の階調値の合計が閾値を超えているか否かの判断をステップS115と同様にして行う。ステップS415において、セル内の画素の階調値の合計が閾値よりも小さい場合(No)は、ステップS420に進み、セルCLの拡大を行う。閾値と同じまたは大きい場合(Yes)は、セルCLの拡大を終了してステップS425に進む。
【0119】
ステップS420では、ステップS415において、セル内の階調値の合計が閾値Rより小さいと判断された場合(No)について、CPU22は、新たな未処理画素をセルCLに組み入れてセルCLを拡大する処理を行う。ここで、第2の実施形態では、未処理画素の選択には、ステップS410で求めた評価関数fの値が最も小さい画素を選択する。
【0120】
CPU22は、RAM25のバッファ領域より初期画素の位置する画素の階調値と座標とを読み出し、新たな未処理画素を組み入れたときのセル内の画素の重心GCを式(4)および式(5)にしたがって演算する。
【0121】
以上に述べたように、未処理画素を選択して新たにセルCLに組み入れる処理(ステップS420)は、CPU22がセル内の画素の重心GCから評価関数の値が最も小さくなる画素を選択することによって行っている。
【0122】
次に、ステップS420を経てステップS415へ至っている場合、CPU22は、再びセル内の画素の階調値の合計が閾値Rを越えているか否かを判断する。すなわち、新たに選択した未処理画素の階調値を含めたセル内の画素の階調値合計が、所定の閾値未満であるか否かを判断する。閾値未満である場合(No)、再びステップS420に進み、新たな未処理画素をセルCLに組み入れる処理を行う。閾値以上である場合(Yes)、ステップS425へ進む。
【0123】
ステップS425以降の処理については、第1の実施形態とおおむね同様の処理を行う。処理の内容が異なる点は、ステップS420の画素選択において、式(3)の演算式に替えて、ステップS410で取得した評価関数fを用いるとする点である。したがって、ステップS425〜ステップS450の処理については、ステップS125〜ステップS150と同様の処理を行えばよい。
【0124】
図17は、図17(a)に示されたm行n列のマトリクスで表された入力データに対して、第2の実施形態にあるハーフトーン処理を施した場合の処理例を示した図である。
【0125】
まず、図17(a)に示した入力データに対して、初期画素の探索順に従って、画素(n,m)を初期画素に設定する。
【0126】
次に、ステップS410で行う評価関数fの制御処理を行う。ここでは、式(16)から式(19)に示した評価関数f0〜f3のうちいずれかをランダムに選択を行った結果、評価関数f1(=3/4x2−1/2xy+3/4y2)が選択されたものとして説明を行う。なお、画素選択の閾値は“255”としている。
【0127】
次に、選択した評価関数fに基づいて、セルCL1に組み入れる画素の選択を行う。図17(b)では、セルCL1として、初期画素である画素(n,m)が選択された状態が示されている。ここで、セル内の階調値の合計は“50”であり、閾値である“255”に満たないので、セルCLの重心位置に基づいて次にセルCLに取り込む画素を選択する。ここでは、初期画素(n,m)に対して、この周辺にある画素(n+1,m)、画素(n,m+1)、画素(n+1,m+1)を選択する画素の候補とする。そして、それぞれの画素に対して評価関数の値を算出すると、それぞれ“0.75”、“0.75”、“1”となる。したがって、評価関数fの値が最も小さい画素が2つ存在することになる、このようなときは、初期画素の探索順にしたがって画素(n+1,m)を選択して、セルCL1に組み入れる(図17(c)参照)。このとき、セル内の階調値の合計は“100(=50+50)”となり、閾値である“255”に満たないので、更にセルCL1を拡大する処理を行う。
【0128】
次に、図17(c)にあるセルCL1の周辺にある4つの画素(画素(n+2,m)、画素(n,m+1)、画素(n+1,m+1)、画素(n+2,m+1))のうち、セルCL1の重心位置に基づいて、評価関数f2を用いて次にセルCLに取り込む画素を選択する。この結果、画素(n,m+1)が選択され、セルCL1に組み入れられる(図17(d)参照)。このとき、セル内の階調値の合計は“150”となり、閾値である“255”未満であるので、更にセルCLを拡大する処理を行う。
【0129】
次に、図17(d)にあるセルCL1の周辺にある5つの画素(画素(n+2,m)、画素(n+2,m+1)、画素(n+1,m+1)、画素(n+1,m+2)、画素(n,m+2))のうち、セルCL1の重心位置に基づいて、評価関数f2を用いて次にセルCLに取り込む画素を選択する。この結果、画素(n+1,m+1)が選択され、セルCL1に組み入れられる(図17(e)参照)。このとき、セル内の階調値の合計は“205”となり、閾値である“255”未満であるので、更にセルCLを拡大する処理を行う。
【0130】
次に、図17(e)にあるセルCL1の周辺にある5つの画素(画素(n+2,m)、画素(n+2,m+1)、画素(n+2,m+2)、画素(n+1,m+2)、画素(n,m+2))のうち、セルCL1の重心位置に基づいて、評価関数f2を用いて次にセルCLに取り込む画素を選択する。この結果、画素(n+2,m)が選択され、セルCL1に組み入れられる(図17(f)参照)。このとき、セル内の階調値の合計は“255”となり、閾値である“255”以上であるので、セルCLを拡大する処理を終了し、セルCL1の重心位置に階調値“255”の付与を行う。こうして、セルCL1の処理が終了する。
【0131】
図18は、図17(f)の状態に続けて処理を行った一例を示した図である。以下図18を用いて、処理について説明する。
【0132】
図17の説明において、セルCL1の処理を終了しているので、次に、新たなセルCL2についての処理を行う。まず、図18(a)に示したように、残っている未処理画素のうち、所定の探索順にある画素を選択して、画素(n+3,m)が初期画素に選択され、セルCL2に組み入れられる。セルCL2内の階調値の合計は“50”であるので、セルCLを拡大する処理を行う。なお、セルCL2に対しては、ランダムに選択した結果、評価関数f2(=x2+1/2y2)が選択されたとして以下説明する。
【0133】
次に、図18(b)に示すように、評価関数に基づいて、画素(n+3,m+1)が選択され、セルCL2に組み入れられる。ここで、セル内の階調値の合計は“105”であるので、更にセルCL2を拡大する。
【0134】
次に、図18(c)に示すように、画素(n+3,m+2)が選択され、セルCL2に組み入れられる。ここで、セル内の階調値の合計が“165”であるので、さらにセルCL2を拡大する処理を行う。
【0135】
次に、図18(d)に示すように、画素(n+2,m+1)が選択され、セルCL2に組み入れられる。ここで、セル内の階調値の合計が“215”であるので、さらにセルCL2を拡大する処理を行う。
【0136】
次に、図18(e)に示すように、画素(n+2,m+2)が選択され、セルCL2に組み入れられる。ここで、セル内の階調値の合計が“265”となり、閾値“255”以上となったので、セルCL2を拡大する処理を終了する。
【0137】
次に、図18(f)に示すように、セル内の階調値の合計“265”のうち、閾値“255”を超える分の階調値“10”については、戻りデータとして最後にセルCL2に組み入れた画素(n+2,m+2)に戻す。こうして、セルCL2の処理が終了する。
【0138】
以上、3×4の大きさの入力データに対して処理を行う例を示したが、図17および図18の例では、例えばセルCL1に見られるように、評価関数をf1(Θ=45°)としたことにより斜めに傾いた楕円形に近いセル形状となった。一方、セルCL2では、評価関数f2(Θ=90°)としたことにより、セル形状が縦長の楕円形となるようにセルCLが拡大した。このように、評価関数をセルCLごとにランダムに切り替えることによって、生成されるセル形状を意図的にバラツかせることができる。そして、形状のバラツいたセルCLが並ぶことになりセル配列の周期性が低減する。したがって、生成されるドットの周期性が低減する。
【0139】
以下、第2の実施形態の効果を記載する。
(5)評価関数を、セルCLごとに切り替えることによって、各セルの形状にバラツキを与えた。このようにすれば、セルCLの周期性が低減し、生成されるドット位置に現れる周期性が低減するので、複数の色成分を持つ画像を表示した際の干渉を抑え、視覚的に快適な画像を得ることができる。
(6)評価関数を、ランダムに切り替えるとしたことにより、セルCLの周期性がさらに低減する。したがって、ドットの位置に周期性が少なくなるので、複数の色成分を持つ画像を表示した際の干渉を抑え、視覚的に快適な出力画像を得ることができる。
【0140】
以上、本発明の一実施形態を説明したが、本発明はこうした実施の形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内において様々な形態で実施することもできる。以下、変形例を挙げて説明する。
【0141】
(変形例1)第2の実施形態において、楕円形を回転させる角度を変化させることに対応する評価関数に異方性を与えた。評価関数に異方性を与える方法としては、これに限られることなく様々な方法が考えられる。例えば、楕円形の長径と短経との比を変化させた評価関数を設定するとしてもよい。これによれば、評価関数のもつ異方性の方向だけでなく異方性の強さも変化させることができる。また、その形状についても楕円形に限られることなく、例えば、長方形に対応する評価関数とすることもできる。ここでは、第1の変形例として、楕円形の形状(長径と短径との比)を変化させることにより評価関数を設定した例について述べる。
【0142】
まず、求める評価関数に異方性を与えるため、長径aおよび短径bの比率の異なる楕円形を複数求めて、それぞれの楕円形に対応する評価関数を以下のようにして求める。
【0143】
長径:短径=1:1とした場合、a=bおよびb=bを式(9)に代入し、以下の式を得る。
x2+y2=b2 …(20)
このとき、式(20)に表される楕円形に対応した評価関数f0は、次式で与えられる。
f0=b2=x2+y2 …(21)
【0144】
同様にして、長径:短径の比が√2:1である場合、a=√2b,b=bを代入して、評価関数f1が次式で与えられる。
f1=b2=x2/2+y2 …(22)
【0145】
以下同様にして、長径:短径の比が2:1,1:√2,1:2である場合、それぞれに対応する評価関数f2〜f4が次式で与えられる。
f2=b2=x2/4+y2 …(23)
f3=b2=x2+y2/2 …(24)
f4=b2=x2+y2/4 …(25)
第1の変形例では、前記第2の実施形態にある式(16)〜式(19)に替えて、上記式(22)〜(25)のうちいずれかの評価関数をランダムに選択して、セルCLに組み入れる画素の選択に使用する。このようにすれば、様々な形状をもつ楕円形が並ぶようにして、形状のばらついたセルCLが生成されることになる。したがって、生成されるセルCLに一定の周期性が生じる可能性が低減する。
【0146】
(変形例2)前記第1の実施形態として、図6のフローチャートのステップS200において、初期画素を中心として3×3のセルCLから平均階調値Vaを算出した。しかし、第2の変形例の平均階調値Vaの求め方としては、処理をより簡略して、例えば初期画素の階調値を平均階調値Vaとして用いて、平均閾値Raを求めるとしてもよい。このようにすれば、CPU22の演算量が減少することにより処理の高速化を図ることができる。
また、初期画素の階調値とこれを平均階調値Vaとして求めた平均閾値Raとからセル内の画素数をおおよそ推定し、平均階調値Vaを求めるとしてもよい。すなわち、初期画素の画素値を平均階調値Vaとして、図7の関係により対応する平均閾値Raを求める。そして、この平均閾値Raを初期画素の階調値で割った値が、セルCLに含まれると推定される画素数になる。初期画素周辺から、この画素数に対応する数の画素を選択して、各画素の階調値を平均することにより平均階調値Vaを求めるとしてもよい。このようにすれば、入力画像の階調値に合わせて、適切な閾値設定を行うことができる。もっとも、平均階調値Vaの求め方としては、セル内の全画素の階調値から平均階調値Vaをより正確に求めるようにしてもよい。
【0147】
(変形例3)前記第2の実施形態においては、楕円形としたセルCLについて、長径と短径の比を変化させることにより処理を行った。ここで、長径と短径の比を変化させ、さらに、閾値制御を行なうとしてもよい。すなわち、楕円形のセル内の画素の値に基づいて平均階調値Vaを求めて、平均階調値Vaに基づいて楕円形のセルCLの閾値Rを求める。このようにすれば、生成されるセルCLの大きさおよびドット間隔を最適な値とすることができるので、ドットの分散性に優れた出力画像を生成することができる。
【0148】
(変形例4)前記第1の実施形態では、図7において、平均階調値Vaが小さい範囲では、平均閾値Raは平均階調値Vaに比例し、平均階調値Vaが所定の値より大きくなる範囲に対しては、一定の平均閾値Raとなるようにした。これは、平均閾値Raが平均階調値Vaに比例する領域では、各セルCLがおおむね同じ大きさになるようにして、生成されるドット間隔をおおむね一定の範囲に収めるためである。一方、平均閾値Raが一定となる範囲では、レーザープリンタのハードウェア特性上、安定して形成できるドットサイズに適した値を閾値Rとして設定するためである。第5の変形例として、平均階調値Vaと平均閾値Raとの関係は、図7に示した関係に限られず様々な関係とすることができる。例えば、ドット間隔すなわち、ドットの分散性をより重視する場合では、平均階調値Vaに対応して平均閾値Raが比例する範囲をより大きくすることが効果的であり、平均階調値Vaの全範囲について平均閾値Raが比例関係をもたせることもできる。
また、ドットが安定して形成することを重視する場合、平均閾値Raが一定となる平均階調値Vaの範囲を更に大きくすればよい。
さらに、ドットが安定して形成される最適な階調値が複数個ある場合では、この複数個の最適な階調値に対応した平均閾値Raが得られるような平均階調値Vaと平均閾値Raの関係としてもよい。例えば、濃いインクおよび淡いインクのドットを形成して印刷を行うインクジェットプリンタでは、各インクのドットに対応して2つの最適な階調値を有することになる。このような場合の平均階調値Vaと平均閾値Raの関係では、平均閾値Raが一定となる範囲を2つもたせ、それぞれの範囲の閾値Rの値が、各濃度のドットに対応した値となるようにすればよい。このようにすれば、平均階調値Vaがある範囲の領域では、淡いインクのドットに対応した平均閾値Raで一定となる。さらに、平均階調値Vaが大きくなると、今度は、濃いインクのドットに対応した平均閾値Raで一定となることになる。このように、平均閾値Raが一定となる領域を2つもつことによって、濃いインクのドットおよび淡いインクのドットを生成するために最適な値とした平均閾値Raを取得し、濃いインクのドットおよび淡いインクのドットを打ち分けることができる。
また、ハーフトーン処理におけるドットサイズはより小さく設定したほうが、解像度を上げられるため、好ましいが、レーザープリンタのハードウェア特性上、安定して形成できるドットサイズの下限値は、各平均階調値Vaによって異なる。よって、各入力階調値について、各ドットサイズを設定した際のドット形成の安定性、すなわち出力濃度の安定性を解析し、その解析結果に応じた最適な値が出力されるように、平均閾値制御テーブルを作成し、平均閾値Raを制御することもできる。
【0149】
(変形例5)前記実施形態では、画素選択の基準点を重心位置にして毎回画素選択時に更新するようにしていたが、第5の変形例では、画素選択の基準点を、画素の階調値には関係なく、画素の座標位置を利用した中心位置とする。例えば、中心位置は、セル内の画素の座標位置を利用した中心位置であって、その位置座標を(x,y)とすると、中心位置の座標は以下の式により求められる(以下の式で、Nはセル内の画素数、iはセル内の画素を示す数字である)。
x=Σixi/N …(26)
y=Σiyi/N …(27)
そして、この中心位置を毎回画素選択時に更新しながら、未処理画素を選択することによりセルCLを生成すると、毎回重心位置を計算することがないので、他の処理を含めた全体の処理速度を上げることができる。
【0150】
(変形例6)また、第6の変形例として、所定の画素に階調値を付与する際に、セルCLの重心位置を演算することなく、第4の変形例において、未処理画素の選択に用いたセルCLの中心位置にある画素に階調値を付与し、ドットを生成するようにしてもよい。こうすれば、重心の計算を行う必要がないので、演算量を減らすことができる。この場合、中心位置が複数の画素の間に位置することも考えられるが、かかる場合には、例えば走査方法と同じ優先順序に従ってセル内のいずれか1つの画素を選択するようにしてもよい。
【0151】
(変形例7)さらに、第7の変形例として、画素選択のための基準点を毎回更新するのではなく、1回おきに更新したり、2回おきに更新したり、予め回数を決めてその回数のときに更新するようにしてもよい。毎回、画素選択の基準点を更新するのではなく、1回おきに更新することによりさらに演算量を減らすことができ、他の処理を含めた画像処理装置全体の処理速度の向上を図ることができる。さらに、初期画素の選択から4回目の未処理画素選択のときに基準点を更新し、さらにそれから3回目、2回目と順次変更し、当該回数となるときに更新することとしてもよい。
【0152】
(変形例8)前記実施形態では、ハーフトーン処理によって、“0”と“255”の2種類の階調値に階調変換した。これは、以降のドットを形成する処理において、階調値“255”に対応した大きさのドットを打つことを想定したためである。第8の変形例としては、複数種類の大きさのドットを打つこととし、その複数種類の大きさのドットに対応した複数の種類の階調値に階調変換するものとしてもよい。また、同様にインクの濃度についても複数種類の濃度のドットを打つこととし、複数種類の階調値に階調変換するものとしてもよい。
【0153】
(変形例9)また、第9の変形例として、前記実施形態における画像処理装置は、レーザプリンタにて構成するようにしたが、本発明はこれに限定されるものでなく、ハーフトーン処理を行う様々な機器に適用することができる。したがって、例えば、インクジェットプリンタやサーマルプリンタなど種々のプリンタや電子写真などにおいて構成するようにしてもよい。あるいは、このようなプリンタなどの機能が組み込まれたコピー機やコンピュータ、ワープロ、ファックスなど種々の機器において本発明の画像処理装置を構成するようにしてもよい。
【図面の簡単な説明】
【0154】
【図1】本発明の第1の実施形態のシステム全体を示す構成図。
【図2】ハーフトーン処理部の構成を示した模式図。
【図3】画像出力装置の構成を示した模式図。
【図4】画像出力装置の行う全体の処理の流れを示したフローチャート。
【図5】CC法によるハーフトーン処理の処理の流れを示したフローチャート。
【図6】閾値制御処理の処理の流れを示したフローチャート。
【図7】ドット生成処理処理の流れを示したフローチャート。
【図8】平均階調値および平均閾値の関係を示した図。
【図9】ハーフトーン処理の処理例を示した図、(a)〜(f)は処理の経過を示した図。
【図10】ハーフトーン処理の処理例を示した図、(a)は図9(f)に続けて処理を行う状態を示した図、(b)は処理を終えた状態を示した図。
【図11】セル生成の処理結果を示した模式図、(a)は閾値固定としたときの図、(b)は閾値制御を行ったときの図。
【図12】シアン単色についてハーフトーン処理を行った実際の処理結果を示した図、(a)は閾値固定としたときの図、(b)は閾値制御を行ったときの図。
【図13】CMYについてハーフトーン処理を行った実際の処理結果を示した図、(a)は閾値固定としたときの図、(b)は閾値制御を行ったときの図。
【図14】第2の実施形態におけるハーフトーン処理部の構成を示した図。
【図15】CC法によるハーフトーン処理の処理の流れを示したフローチャート。
【図16】評価関数制御処理の処理の流れを示したフローチャート。
【図17】ハーフトーン処理の処理例を示した図、(a)〜(f)は処理の経過を示した図。
【図18】ハーフトーン処理の処理例を示した図、(a)〜(f)は処理の経過を示した図。
【符号の説明】
【0155】
10…ホストコンピュータ、11…アプリケーション部、12…ラスタライズ部、20…画像処理装置としての画像出力装置、21…入力インターフェース、22…CPU、x…重心からの変位、y…重心からの変位、X…回転変換後のx座標、Y…回転変換後のy座標、xGC…重心のx座標、yGC…重心のy座標、23…ハードディスク、24…ROM、25…RAM、30…画像処理部、31…色補正・色変換部、32…色補正表、33…ハーフトーン処理部、35…画素群生成部、36…階調値付与部、37…閾値制御部、38…評価関数制御部、40…印刷エンジン、41…レーザドライバ、42…レーザーダイオード、CL…画素群としてのセル、GC…重心、V…階調値、Va…階調値の平均値としての平均階調値、R…閾値、Ra…平均閾値、Vs…ドットの再現上最適な階調値、i…各画素を示す数字、Nc…係数、Nw…ランダム成分のふり幅、Nd…1ドットを構成する画素の数、Θ…楕円形の回転角度。
【技術分野】
【0001】
本発明は、プリンタなどの画像出力装置において、入力画像の階調データに対して所定の階調変換を行い、画質に優れた出力画像を取得する画像処理技術に関する。
【背景技術】
【0002】
従来より、レーザープリンタやインクジェットプリンタなど画像出力装置では、入力画像の階調データを画素ごとに所定の閾値で2値化を行うことによって、所定の階調値が付与された画素の位置に、所定の大きさのドットを形成していた。このようにして、ドットを印刷用紙上に形成することにより印刷が行われ、出力画像を印刷物として出力することが行われている。ここで、多値の階調データを、2値化した階調データに変換する処理のことをハーフトーン処理と一般に称している。
【0003】
ハーフトーン処理については、形成するドットの位置によって、出力画像に、例えばドットが鎖状につながるなど、入力画像には存在しなかった特異パターンが発生することがある。そこで、このような特異パターンの発生を抑えるため、ドットのつながりを少なくする技術が特許文献1に開示されている。
【0004】
【特許文献1】特開平11−27528号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
特許文献1におけるハーフトーン処理では、誤差拡散法における特異パターンの発生を抑えるため、複数の画素から構成されるセルを生成する際に、セルを構成する画素の探索を所定の探索順(特許文献1、図4参照)を記録したテーブルを用いて行う方法が提案されている。しかし、特許文献1にある画素の探索順では、テーブルに従って常に画素の右側の画素から選択するので、結果的に生成されるセルの形状に一定の偏りが生じ、歪んだ形となってしまう。そして、セル形状が歪むことにより、ドット間の距離にバラツキが発生し、粒状性が悪化する課題があった。
【0006】
また、複数の色成分ごとにハーフトーン処理を行った後に、処理後の色成分を重ね合わせてカラー表示を行う場合であっては、セル形状が一定であり、またセルに含まれる画素数もほぼ一定となるため、各色成分ごとに所定の周期性を有した位置にドットが生成されることになる。このドットを重ね合わせたとき、各色成分のドットは互いの相対位置が比較的大きな領域ごとにずれることになる。このずれが発生した領域と、発生していない領域では色が異なるため、それぞれの領域の色の差が色ムラとなって現れる。この色ムラは各色成分のドットがもつ周期性が干渉して発生したモアレとみなすこともできる。この色ムラ(モアレ)は人間の視覚にとって不快なパターンであるため、画質の劣化につながる大きな課題となっていた。
【課題を解決するための手段】
【0007】
上記課題を解決するために、本発明では、画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理装置であって、画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて入力データの画素を次々に選択することにより、画素群を生成する画素群生成部と、生成した画素群ごとに、画素群の所定の画素に対して所定の階調値を付与する階調値付与部とを備え、画素群生成部は、閾値または画素選択条件の少なくとも一方を、画素群ごとに変更することを要旨とする。
【0008】
このようにすれば、生成される画素群(以下、「セル」と呼ぶ。)は、互いに、その大きさまたは形状の少なくとも一方が異なり、セルごとに、大きさまたは形状がバラツくことになる。例えば、入力画像に同じ大きさの多数のセルを敷き詰めるように生成して、セルの所定の位置に、階調値を付与することを考えると、同じ大きさのセルが規則的に並ぶことになり、生成されるドットの位置に周期性が生じる。しかし、セルの大きさまたは形状自体の少なくとも一方にバラツキを与えれば、各セルが生成される位置がバラツくことになるので、各セルの周期性を弱めることができる。したがって、各セルに所定の階調値を付与して生成するドットの位置の周期性が弱くなるので、複数の色成分を持つ画像を表示した際の干渉の発生を抑えることができ、色ムラのない視覚的に快適な出力画像を得ることができる。
【0009】
ここで、画素群生成部は、画素群ごとに閾値の大きさを変更する制御を行う閾値制御部を有することが好ましい。
【0010】
このようにすれば、閾値の大きさをセルごとに変化させることにより、セルに選択された画素の数が変化するので、セルの大きさが変化する。セルの大きさを変化することにより、セル間の距離がバラツくことになる。したがって、各セルの位置がバラツき、ドットを生成する位置の周期性が低減するので、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【0011】
ここで、閾値制御部は、画素群の内に位置する画素の階調値に基づいて、閾値の大きさを変更する制御を行うことが好ましい。
【0012】
このようにすれば、セル内に位置する画素の階調値に基づいて、セル内の画素の数、すなわち、セルの大きさをおおむね決定することができる。すなわち、画素ごとに不均一な階調値を有した入力画像を用いた場合であっても、生成されるセルの大きさをおおむね一定にすることができるので、画素の階調値の大小に関わらずおおむね一定の間隔で、ドットを生成することができる。したがって、ドットの分散性に優れ、滑らかに階調表現された出力画像を得ることができる。
なお、セル内の画素の階調値の平均値に基づいて、閾値を制御することがより望ましい。このようにすれば、セル内に含まれる画素の数を制御して、例えば一定にすることができる。もっとも、セル内の画素のうち、初めに選択した画素または重心に位置する画素など、所定の画素の階調値に基づいて閾値を制御するとしてもよい。
【0013】
ここで、閾値制御部は、閾値の大きさにランダム性を付与する制御を行うことが好ましい。
【0014】
このようにすれば、セル内の画素の数、すなわち、セルの大きさにランダム性が加わることによって、各セルの位置がランダムにバラツくので、階調値を付与する位置の周期性がさらに低減する。したがって、生成されるドットの位置の周期性が小さくなり、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【0015】
ここで、画素群生成部は、画素群の内に位置する画素に基づいた位置を基準にして、画素群が異方性を有した形状となるように画素群生成部が選択する画素を決定する画素選択条件を、画素群ごとに決定する画素選択条件決定部を有することとしてもよい。
【0016】
このようにすれば、画素選択条件に基づいてセルを生成することにより、セル形状に異方性をもたせることができる。ここで、異方性を有した形状とは、全方向に等方的である円形形状に比べて、所定の方向に偏りのある形状のことである。例えば、楕円形などがこれにあたる。セル形状に所定の方向に偏りが生じてしまうような場合であっても、この偏りを打ち消すように異方性を持たせた画素の選択を行うことにより、生成するドット位置の偏りを減少することができる。すなわち、セル形状が一定の方向に偏らないように、画素選択を行うことができる。したがって、生成されるドット位置の周期性が小さくなり、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【0017】
ここで、画素選択条件決定部は、画素群のもつ異方性の方向または強さのうち少なくとも一方を、画素群ごとに変更した画素選択条件を決定することが好ましい。
【0018】
このようにすれば、セルごとに画素選択条件がもつ異方性の方向または強さの少なくとも一方が異なるので、セルごとに形状がバラツくことになる。したがって、ドットを生成する位置の周期性が減少し、複数の色成分を持つ画像を表示した際に、視覚的にムラの少ない快適な出力画像を得ることができる。
【0019】
ここで、画素選択条件決定部は、画素群ごとに、異方性の方向または強さのうち少なくとも一方を、ランダムに変更した画素選択条件を決定することが好ましい。
【0020】
このようにすれば、セルごとに異方性の方向または強さがランダムなセル形状となる。すなわち、セル形状がランダムに変化することになる。そして、セル形状がランダムに変化することにより、生成されるセルの位置もランダムにバラツき、ドットを生成する位置がバラツくことになる。したがって、周期性が少なくなるため、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【0021】
ここで、階調値付与部は、生成した画素群における階調値の総和が閾値を超えたとき、階調値と閾値とを差分した階調値を、画素群生成部が最後に選択した画素に戻すことが好ましい。
【0022】
このようにすれば、閾値を超えたセルに最後に組み入れられた画素に、閾値を超えた分の階調値を戻しているため、入力データの階調値が失われることがなく、元の画像とほぼ同じ位置に階調値が残るため、入力データに忠実なドットを形成させることができる。
【0023】
ここで、画素選択条件決定部は、生成した前記画素群の重心位置に基づいて画素を選択する画素選択条件を決定し、階調値付与部は、画素群の重心に基づいて決定した画素に階調値を付与することが好ましい。
【0024】
このようにすれば、セルの生成処理に際して、常にセルの重心に基づいて画素を選択してセルに組み入れていくため、生成されるセルの形状はセルの重心を中心とした所定の形状をもつようになる。そして、その所定の形状の重心、すなわち、おおよそ中心位置に階調値を付与することとなる。したがって、例えば、画素ごとに均一な階調値をもつデータに対して階調変換を行い階調値を付与してドットを形成する場合、生成されたドット間の間隔がほぼ均一となる。こうして、生成されるドットの位置について分散性が良くなるので、快適な出力画像を得ることができる。
【0025】
ここで、本発明は、画像処理方法とすることもできる。すなわち、本発明の画像処理方法は、画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理方法であって、画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて入力データの画素を次々に選択することにより、画素群を生成する画素群生成ステップと、生成した画素群ごとに、画素群の所定の画素に対して所定の階調値を付与する階調値付与ステップとを備え、画素群生成ステップは、閾値または画素選択条件の少なくとも一方を、画素群ごとに変更することを要旨とする。
【0026】
ここで、本発明は、コンピュータに処理を行わせる画像処理プログラムまたは画像処理プログラムを記憶した記録媒体としてもよい。すなわち、本発明の画像処理プログラムは、画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理プログラムであって、コンピュータを、画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて入力データの画素を次々に選択することにより、画素群を生成すると共に、画素群生成部は、閾値または画素選択条件の少なくとも一方を、画素群ごとに変更する画素群生成部、生成した画素群ごとに、画素群の所定の画素に対して所定の階調値を付与する階調値付与部、として機能させることを要旨とする。また、このプログラムを記録した記録媒体としては、フレキシブルディスクやCD−ROM、ICカード、パンチカードなど、コンピュータが読み取り可能な種々の媒体を利用することができる。
【発明を実施するための最良の形態】
【0027】
(第1の実施形態)
以下、本発明を具体化した第1の実施形態を図面に従って説明する。
【0028】
図1は、本発明が適用されるシステム全体を示す構成図である。本システムは、全体としてホストコンピュータ10と、画像出力装置20とを備えている。
【0029】
ホストコンピュータ10は、アプリケーション部11とラスタライズ部12とを備えている。アプリケーション部11は、文字データ、図形データ、ビットマップデータ等の入力画像を印刷対象として生成する。例えば、ホストコンピュータ10でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどを生成する。そして生成したこれらのデータを、ラスタライズ部12へ出力する。もっとも、ホストコンピュータ10は、スキャナなどの画像入力装置(図示せず)から出力されるデータを受け付け、このデータをアプリケーション部11が生成するデータとしてラスタライズ部12へ出力するものとしても差し支えない。
【0030】
ラスタライズ部12は、アプリケーション部11から出力された印刷対象のデータを画素ごと(又はドットごと)に8ビットの階調データに変換する。本実施形態では、R(レッド)、G(グリーン)、B(ブルー)の色毎で、画素ごとに8ビットの階調データを出力する。したがって、出力される階調データは、画素ごとに“0”から“255”までの256種類の値(階調値)を有することになる。ラスタライズ部12における階調データの生成処理は、実際にはホストコンピュータ10に実装されたドライバによって行われる。ラスタライズ部12から出力される階調データは、画像出力装置20に出力される。
【0031】
画像出力装置20は、画像処理部30と印刷エンジン40とを備えている。画像処理部30では、ホストコンピュータ10から出力された階調データに対して、まず色補正処理および色変換処理を行ったのち、ハーフトーン処理、パルス幅変調処理を行い、処理後のデータを印刷エンジン40に出力する。
【0032】
画像処理部30は、大別して、色補正・色変換部31と、ハーフトーン処理部(階調変換手段)33と、パルス幅変調部34と、を有している。
【0033】
色補正・色変換部31は、ホストコンピュータ10より入力される256種類の階調値を有するRGB各8ビット(計24ビット)の階調データを受け取り、印刷エンジン40にて実際に印刷された印刷物が良好な色を表現できるように、色補正表32を用いてRGBの階調データの色補正処理を行う。その後、補正したRGBの階調データを、CMYKの階調データに変換する色変換処理を行う。ここで、Cはシアン、Mはマゼンタ、Yはイエロー、Kはブラックを示している。色変換処理を終えると、CMYKの階調データをハーフトーン処理部33に出力する。
【0034】
ハーフトーン処理部33は、色補正・色変換部31から入力されたCMYKの階調データに対して、所定の種類の階調値をもつ量子化データ(2値あるいは4値などの多値の値)に変換し、その量子化データを出力する。本実施形態では、ハーフトーン処理として、複数の画素からなるセル(画素群)の重心に基づいて画素を新たに選択してセルを構成し、その重心にドットを生成させる処理(Circular Cell法、以下CC法)を用いる。CC法の具体的な内容については後述する。
【0035】
図2は、ハーフトーン処理部33の構成を示した図である。このように、ハーフトーン処理部33は、セル内の画素の階調値の重心を用いてセルを生成する画素群生成部35と、セルの重心に階調値を付与してドットを生成する階調値付与部36と、を備えている。また、画素群生成部35には、画素群を生成する際に用いる閾値の大きさを制御する閾値制御処理を行う閾値制御部37を有している。閾値制御処理の詳細については、後述する。
【0036】
図1に示すパルス幅変調部34は、ハーフトーン処理部33から出力された量子化データを入力し、この量子化データの値に対応して所定のパルス幅をもったレーザ駆動パルスを、駆動データとして生成する。そして、この駆動データを印刷エンジン40に出力する。
【0037】
印刷エンジン40は、レーザドライバ41と、レーザーダイオード(LD)42とを備えている。レーザドライバ41は、入力された駆動データから、レーザーダイオード42を駆動する制御データを生成し、レーザーダイオード42に出力する。レーザーダイオード42は、レーザドライバ41から出力された制御データに基づいて駆動され、さらに図示しない露光ユニット、感光ドラムおよび転写ベルトなどが駆動されて、実際に印刷用紙等の記録媒体にホストコンピュータ10からのデータが印刷されることになる。
【0038】
次に、図3を参照して、画像出力装置20の具体的構成について説明する。ここで、図1の画像出力装置20のうち、色補正・色変換部31、色補正表32、ハーフトーン処理部33およびパルス幅変調部34は、図3におけるCPU22、ハードディスク23、ROM24、およびRAM25に対応している。画像出力装置20は、全体として、入力インターフェース(I/F)21、CPU22、ハードディスク23、ROM24、RAM25、印刷エンジン40とを備えており、それらはバスを介して互いに接続されている。入力I/F21は、ホストコンピュータ10と画像出力装置20とのインターフェースの役割を果たす。入力I/F21には、所定の伝送方式により伝送されたホストコンピュータ10からのRGB階調データが入力され、画像出力装置20が処理を行うことのできるデータに変換される。ここで、RGB階調データは、一旦RAM25に格納される。
【0039】
CPU22は、ハードディスク23またはROM24に格納されたプログラムを読み出して、後述するハーフトーン処理等の各種処理を行う。これらの処理を記録したプログラムは、予めハードディスク23やROM24に格納されていることとしてもよいし、例えばCD−ROMなどのコンピュータが読み取り可能な記録媒体によって外部から供給され、図示しないCD−R/RWドライブを介して画像出力装置20に備えられたハードディスク23に記憶することによって格納されるものとしてもよい。もとより、インターネットなどのネットワーク手段を介して、プログラムを供給するサーバー等にアクセスし、データをダウンロードすることによって格納されるものとしてもよい。
【0040】
本画像出力装置20は、所定のオペレーションシステムの下、CPU22が、ハードディスク23、ROM24、RAM25にアクセスして動作することによって、後述するハーフトーン処理を行うハーフトーン処理部33として機能する。
【0041】
RAM25は、CPU22の制御によって実行される各処理のワーキングメモリとしての役割を果たし、そのバッファ領域に処理に必要な各種データを格納する。また、RAM25は、印刷エンジン40のレーザドライバ41を駆動するための駆動データも格納する。
【0042】
印刷エンジン40は、図1の印刷エンジンと同様の構成で、CPU22の制御によりRAM25に格納された駆動データを入力し、上述した印刷処理を行う。
【0043】
本実施形態におけるハーフトーン処理を実行するプログラムについて説明する。図4は、ハーフトーン処理を行うプログラムの処理の流れを示すフローチャートである。このプログラムは、画像出力装置20内部に備わるRAM25に格納され、所定のオペレーションシステムの下で、CPU22が実行する。プログラムが実行されると、画像出力装置20の各構成要素が動作し、それぞれの機能を果たすことができる。なお、図4のフローチャートにおいて、ステップS10およびステップS20の処理は色補正・色変換部31が行い、ステップ30の処理はハーフトーン処理部33、ステップS40の処理はパルス幅変調部34が行う。
【0044】
処理が開始されると、まずステップS10にて、色補正・色変換部31は、ホストコンピュータ10が出力した画像データを受け付ける入力処理を行う。
【0045】
次に、ステップS20において、色補正・色変換部31は色補正・色変換処理を行う。ここでは、色補正・色変換部31が、ホストコンピュータ10より出力された画像データ(RGBデータ)を取得し、色補正表32に基づいて、色補正を行う(色補正処理)。このとき、実際には、ホストコンピュータ10から入力I/F21を介してRAM25に取り込むことで画像データの読み込みが行われる。また、このステップでは、色補正を行った画像データに対してRGBデータからCMYKデータへの色座標変換を行う処理(色変換処理)も行っている。色変換処理は通常所定の色変換表(図示せず)を用いて行われる。ここでは、入力した画像データをC(シアン)・M(マゼンタ)・Y(イエロー)・K(ブラック)の各色について、8ビット(256階調)で表現された階調データを取得し、CPU22は、RAM25の所定のバッファ領域に格納する。
【0046】
次に、ステップS30において、ハーフトーン処理部33は、CC法によるハーフトーン処理を行う。ここで、ステップS20において取得した階調データの各色のデータを、それぞれ(ハーフトーン処理部に対する)入力データと呼ぶことにする。そして、各入力データに対してハーフトーン処理を行う。ハーフトーン処理の詳細な内容については、後述する。
【0047】
CC法によるハーフトーン処理を、階調データCMYKの各色全てについて実施するとステップS30を終了し、各色ごとに“0”または“255”の階調値を有する量子化データを出力する。
【0048】
ステップS40では、階調値“255”の量子化データが付与された画素の位置にドットを形成するため、パルス幅変調部34は、所定の駆動パルス幅を持ったレーザ駆動パルスを駆動データとして生成する。そして、この駆動データを印刷エンジン40に出力することによって所定の色と大きさのドットを印刷用紙などに形成して印刷物として出力する。このようにして、所定のドットにより印刷対象のデータを再現した印刷物を得ることができる。
【0049】
ここで、本実施形態にある画像出力装置20は、ハーフトーン処理を行うにあたって、ハーフトーン処理部33に備わる閾値制御部37により、セル生成の際に用いる閾値の大小を変化させて生成されるセルの大きさを制御することとしている。以下に、図4のステップS30において、ハーフトーン処理において閾値制御を行うとした処理方法について説明する。
【0050】
図5は、閾値制御を行うCC法によるハーフトーン処理の処理の流れを示すフローチャートである。以下に、図5のフローチャートに従って処理の説明を行う。なお、ステップS100〜S120の処理は画素群生成部35が行うものであるが、特に、ステップS110の処理は、画素群生成部35にある閾値制御部37が行っている。ステップS125〜S150の処理は階調値付与部36が行う。また、ハーフトーン処理を行うに際して、CPU22は、RAM25の記憶領域上に、入力データの階調値を記憶する入力バッファ領域(図示なし)とは別に、入力データの画素ごとに処理が行われたか否かを判別するための判別用バッファ領域(図示なし)を設けている。そして、ハーフトーン処理が行われていない画素(以下、「未処理画素」と呼ぶ)に対応する判別用バッファ領域には“0”を示すビットが割り当てられ、処理が行われた画素(以下、「処理済画素」と呼ぶ)に対応する判別用バッファ領域には“1”を示すビットを割り当てる。このようにして、いずれの画素について処理済みであるかの判別は、CPU22がRAM25の判別用バッファ領域を参照することによって都度行い、処理済みの画素に更に処理を行うことがないようにしている。また、RAM25の記憶領域上には、ハーフトーン処理を行うことにより取得した量子化データを記憶する出力バッファ領域(図示なし)を設けている。
【0051】
ハーフトーン処理を開始すると、始めにステップS100において、CPU22は、ハードディスク23またはROM24に格納されたプログラムを読み出して、入力画像の読み込みを行う処理を行う。入力画像の読み込みは、ホストコンピュータ10から入力データを入力I/F21を介してRAM25に取り込むことで行う。このとき、CMYK各色成分の入力データは、RAM25の入力バッファ領域に格納される。
【0052】
次に、ステップS105では、CPU22は、セル生成の最初の未処理画素となる画素を探索し、初期画素に決定する。このとき、探索する順番としては、入力画像の左上から主走査方向(X方向)に探索した後、副走査方向に1ラインずらして再び主走査方向の探索を行い、これを繰り返すようにして未処理画素を探索する。実際には、RAM25の判別用バッファ領域を参照して、未処理画素であることを示す“0”が格納されている画素を探索して行う。未処理画素がある場合(Yes)は、この未処理画素を初期画素に設定し、RAM25の判別用バッファ領域にその階調値と処理済画素であることを示す“1”を記憶して、ステップS110に進む。未処理画素がない場合(No)はステップS150に進む。
【0053】
ステップS110では、閾値制御処理を行う。閾値制御処理とは、セル内の画素の階調値に基づいて、ハーフトーン処理に用いる閾値の大きさを決定する処理のことである。以下、図6に示した閾値制御処理の処理の流れを示したフローチャートに従って、閾値制御処理について説明する。
【0054】
閾値制御処理を開始すると、ステップS200において、CPU22は、初期画素周辺にある画素の階調値を平均して、平均階調値Vaを算出する。本実施形態では、初期画素を中心とした3×3の領域内にある未処理画素の階調値を平均して、次式により平均階調値Vaを算出することとしている。もっとも、これより大きい領域を設定し、平均階調値Vaを求めるとしてもよい。
Va=(ΣiVi)/N …(1)
ここで、Vは階調値、iは初期画素周辺にある画素を示す数、Nは3×3の領域内の未処理画素の数である。
【0055】
次に、ステップS210では、CPU22は、ROM24より所定の変換テーブルを読み出し、ステップS200で算出した平均階調値Vaに基づいて平均閾値Raを決定する。ここで用いる変換テーブルとは、図7に示した平均値Vaと平均閾値Raとの関係を示したテーブルである。図7に示した関係は、変換テーブルとしてROM24に記憶されており、ステップS210では、CPU22が、この変換テーブルを参照することにより平均閾値Raを取得する。取得した平均閾値Raは、RAM25に格納する。
【0056】
ここで、図7について説明する。図7では、平均階調値Va(横軸)と平均閾値Ra(縦軸)との関係が示されている。そして、その関係は、平均階調値Vaが小さい領域では、平均階調値Vaが大きくなるにつれて、これに比例して平均閾値Raも大きくなるようにしている。そして、平均階調値Vaが所定の値となったところで平均閾値Raの値が最大値をとり、以降は平均階調値Vaにかかわらず平均閾値Raは一定の値となっている。そして、これらの平均階調値Vaと平均閾値Raとの関係が連続して変化するようになっている。例えば、平均階調値Vaが“100”のときは、図7によれば、平均閾値Raの値としてとりうる最大値である“1020”が平均閾値Raの値となる。ここで、レーザプリンタでは、露光ユニット内のレーザ光を感光体ドラムに照射することで潜像を形成している。しかし、1画素分のドットを形成させるときレーザ光の特質により正確に1画素分の大きさのドットを形成させることができない。すなわち、レーザー光の光量分布は一定ではなく、隣接画素から除々に光量が多くなり照射すべき画素内で最も高い光量となり、また照射すべき画素から離れるにつれ、除々に少ない光量となるため、隣接画素に跨って光が照射されてしまうのである。例えば、1ドットおきにドットを生成する場合には、この漏れ光の影響を多く受けることになる。一方、複数のドットを隣接して生成することにより、隣接画素への漏れ光の影響が少なくなる。さらに、照射した光量と、感光体表面に付着するトナー量の間には非線形があり、安定して生成できるドットサイズは、印刷エンジンごとに異なるという特性を持っている。
以上に述べた理由により、レーザープリンタには、ハードウェア特性に依存して、各階調を表現するのに最適な、各ドットのサイズ、すなわち、各ドットを構成する互いに隣接した画素の数が存在する。本実施形態では、図7において平均閾値Raに最大値を設けることによって、平均階調値Vaに対応して、レーザプリンタのハードウェアの構造上から最適なドットサイズ(画素数)に対応した平均閾値Raをとるように制御している。図7では、レーザープリンタが、ドットの有無に対応して“0”および“255”の2値の階調値を表現できることとから、隣接して生成する最適なドットサイズを“4”として、4画素分に相当する“1020(=4×255)”が、平均閾値Raの最大値となるようにしている。
【0057】
次に、ステップS220では、CPU22は、RAM25より読み出した平均閾値Raに基づいて、次式に従ってランダム成分を加えた閾値Rを算出する。
Nc=int(Ra/Vs+Nw×rand()+0.5) …(2)
R=Nc×Vs …(3)
ここで、int()は、小数点以下の値を切り捨て整数を出力する関数、rand()は、“1”〜“−1”の間のランダムな値をとる乱数を出力する関数である。Vsは、ハードウェア上ドットを生成することに最適な階調値である。上述したように、レーザープリンタでは、ドットの有無に対応して“0”および“255”の2値の階調値を表現できることから、本実施形態ではVsを階調値“255”としている。式(3)に示したように、Ncは、閾値Rの階調値“Vs”に対する係数であり、後述するセルCLごとに生成する1ドットを構成する画素の数に対応する。Nwは、Ncの値をランダムに変化させるふり幅を決定する値である。さらに、式(2)において、0.5を加えた値に対してint()演算を行うとしたことにより四捨五入の演算を行い、閾値RがVsの整数倍になるようにしている。
【0058】
このように、本実施形態では、Vsは“255”であり、Nwを“3”としたので、以下に示す式(2’)および式(3’)が得られる。
Nc=int(Ra/255+3×rand()+0.5) …(2’)
R=Nc×255 …(3’)
したがって、式(2’)および式(3’)により、閾値Rは、平均閾値Raを中心としてバラツキながら、Ncが整数となるような閾値Rが得られることになる。例えば、平均閾値Raが“1020(=4×255)”であった場合、Ncの値は、1〜7の各整数値をとることになる。また、例えば、平均閾値Raが、“918(=3.6×255)”の場合も、やはり、Ncの値は1〜7のうちいずれかの整数値をとることになる。さらに、この場合では、式(2’)に基づきNcのとる各値の発生確率が各々異なることになるので、結局、閾値Rの期待値は平均閾値Raの値に一致することになる。このように、式(2’)および式(3’)を用いることにより、閾値Rは、255の倍数でありながら、結果として閾値Rの期待値が図7で求めた平均閾値Raに一致するようにしている。すなわち、閾値Rは、平均閾値Raを中心としてランダムに変化する値となる。なお、式(2’)および式(3’)の演算式はROM24に格納されており、CPU22が必要なときに呼び出すことによって演算を行うようにしている。そして、CPU22は、求めた閾値Rの値をRAM25に格納して、記憶する。
【0059】
次に、ステップS230では、CPU22は、閾値Rの値が“255”未満であるか否かを判断する。“255”未満の場合(Yes)ステップS240に進む。“255”以上であった場合(No)、閾値制御処理を終了する。
【0060】
ステップS240では、CPU22は、“255”未満である閾値Rの値を下限値の値に置き換える設定を行う。ここで、本実施形態では、下限値を“255”としている。例えば、ステップS210において、平均閾値Raとして“663(=2.6×255)”が得られた場合、式(2’)および式(3’)に基づいて演算を行うと、閾値Rが負の値または“0”となる可能性がある。正の階調値をもっている階調データに対して、セルCLを拡大する際に用いる閾値Rが、負または“0”であった場合、適切にセルCLを拡大することができないので、この状態を回避する必要がある。したがって、ステップS240において、“255”未満の値である閾値Rを下限値である“255”に置き換える処理を行う。実際には、CPU22は、RAM25に記憶されている閾値Rの値に上書きして、閾値Rとしての階調値“255”を格納するようにして処理を行っている。
本実施形態では、下限値を“255”としたが、レーザーエンジンの特性上、安定して出力できるドットサイズに下限値が存在することがある。例えば、レーザーエンジンの特性を解析した結果、安定して出力可能なドットサイズの下限値が2画素の場合は、閾値Rの下限値を“510”として設定するとよい。その場合、ステップS240においては、”510”未満の値である閾値Rを、下限値である“510”に置き換える処理を行う。ステップS240を終えると、閾値制御処理を終了する。
【0061】
閾値制御処理を終了すると、図5のフローチャートに戻って、ステップS115において、セルCLの拡大を終了するか否かを判断する。実際には、CPU22は、セル内の画素の階調値の合計が閾値Rを超えているか否かによって判断する。ただし、ステップS110より処理が移行している場合には、初期画素のみをセル内の画素として判断を行う。具体的には、ステップS220でRAM25に格納した閾値Rを読出し、セル内の画素の階調値と比較することにより処理を行う。ステップS115において、セル内の画素の階調値の合計が閾値Rよりも小さい場合(No)はステップS120に進み、セルCLを拡大する処理を行う。閾値Rと同じまたは大きい場合(Yes)は、セルCLを拡大する処理を終了し、ステップS125に進む。
【0062】
ステップS120では、ステップS115において、セル内の階調値の合計が閾値Rより小さいと判断された場合(No)について、CPU22は、新たな未処理画素をセルCLに組み入れてセルCLを拡大する処理を行う。ここで、本実施形態の未処理画素の選択には、セルCLの重心GCを利用して、重心GCから最も近い画素を選択することとしている。すなわち、重心GCからの変位が(x,y)であるとして、次式により求められる距離Lが最も小さくなる画素を選択する。
L=(x2+y2)1/2 …(4)
式(4)の演算式はROM24に格納され、CPU22が必要なときに呼び出すことによって、任意に用いるようにしている。このように、重心GCから最も近い画素を選択することによって、最終的に生成されるセルCLの形状は、円状に近い形状となる。
【0063】
CPU22は、RAM25のバッファ領域より初期画素の位置する画素の階調値と座標とを読み出し、新たな未処理画素を組み入れたときのセル内の画素の重心GCを演算する。CPU22は、具体的には、以下の演算式によりセルCLの重心GCを求める。ここで、xGC,yGCはそれぞれ重心位置のx,y座標である。
xGC={{(セルCLの重心GCのx座標)×(セル内の画素の階調値合計)}
+{(選択した未処理画素のx座標)×(選択した未処理画素の階調値)}}
/{(セル内の画素の階調値合計)+(選択した未処理画素の階調値)} …(5)
yGC={{(セルCLの重心GCのy座標)×(セル内の画素の階調値合計)}
+{(選択した未処理画素のy座標)×(選択した未処理画素の階調値)}}
/{(セル内の画素の階調値合計)+(選択した未処理画素の階調値)} …(6)
これらの演算式はROM24に格納され、CPU22が読み出して演算を行うことになる。もっとも、セルCLが初期画素のみからなる場合は、セルCLの重心GCのx,y座標は初期画素の座標と一致するため、初期画素の座標が用いられる。
【0064】
また、セルCLの重心GCおよびセル内の画素の階調値合計は、新たな未処理画素を組み入れるたび式(5)および式(6)により算出し、最新の値をRAM25に記憶する。こうすることによって、新たな未処理画素を組み入れたとき式(5)および式(6)において、新たな未処理画素を組み入れる前の重心GCおよび階調値合計を計算する必要がなくなり、RAM25から直接取得するので処理の高速化を図ることができる。そして、セルCLを拡大する処理を終えると、セル内の画素に対応するRAM25の判別用バッファ領域に、処理済画素であることを示す“1”を格納する。
【0065】
以上に述べたように、未処理画素を選択して新たにセルCLに組み入れる処理(ステップS120)は、CPU22がセル内の画素の重心GCから最も近い距離にある画素を選択することによって行っている。しかし、重心GCから等距離に複数の画素が存在する可能性がある。こうした場合、本実施形態では走査方向に探索される順に従ってCPU22が画素を選択して、セルCLを拡大するようにしている。
【0066】
次に、ステップS120を経てステップS115へ至っている場合、CPU22は、再びセル内の画素の階調値の合計が閾値Rを超えているか否かを判断する。すなわち、新たに選択した未処理画素の階調値を含めたセル内の画素の階調値合計が、所定の閾値未満であるか否かの判断を行う。閾値Rを超えていない場合(No)は、再びステップS120に進み、新たな未処理画素をセルCLに組み入れる処理を行う。閾値Rを超えている場合(Yes)は、ステップS125へ進む。
【0067】
このように、ステップS115とS120の処理を繰り返すたびに、CPU22は、ステップS120で演算したセル内にある画素の階調値の合計が、閾値Rと等しいか否かを判断しながら閾値Rに達するまでセルCLを拡大していくことになる。
【0068】
ステップS125では、セル内にある画素の階調値の合計が閾値Rに等しいか否かを判断する。上述したように、RAM25に記憶されているステップS120で演算した値を参照することによりセル内にある画素の階調値の合計を取得し、閾値Rに等しい場合(Yes)、ステップS130へ進む。階調値の合計が閾値Rに等しくない場合(No)、ステップS135へ進む。
【0069】
ステップS130では、重心GCの位置を算出する。すなわち、CPU22は、選択した未処理画素を含めセル内の画素について、再び重心GCの演算を行う。具体的なCPU22の演算は、上述した式(5)および式(6)の演算式をROM24より読み出して、行うことになる。そして、このステップS130で演算した重心GCの位置は、CPU22の制御によってRAM25のバッファ領域に記憶されたセルCLの階調値の合計とともに格納される。このとき、ステップS110およびS115で用いた閾値Rと同等の階調値を付与する。ステップS130の処理を終えると、次にステップS145へ進む。
【0070】
ステップS135では、閾値Rを超える階調値分を無視してセルCLの重心GCを算出する処理を行う。このためまず、CPU22は、ステップS110で求めたセル内の階調値合計から閾値Rの値を減算する演算を行う。この演算値を戻りデータと呼ぶ。
【0071】
このときの重心GCの演算は、戻りデータ(ステップS135の演算値)を用いて以下の演算式により求められる。
【0072】
xGC={{(セルCLの重心GCのx座標)×(セル内の画素の階調値合計)}
−{(最後に選択した未処理画素のx座標)×(ステップS135の演算値)}}
/{(セル内の画素の階調値合計)−(ステップS135の演算値)} …(7)
yGC={{(セルCLの重心GCのy座標)×(セル内の画素の階調値合計)}
−{(最後に選択した未処理画素のy座標)×(ステップS135の演算値)}}
/{(セル内の画素の階調値合計)−(ステップS135の演算値)} …(8)
ここで、式(5)、式(6)とは異なる点として、セル内にある画素の階調値をそのまま用いるのではなく、階調値の過剰分である戻りデータを引くことでセル内の階調値の合計が閾値Rと同じ値になるようにしている。
【0073】
この演算式は、式(5)および式(6)と同様に予めROM24に格納されており、CPU22が、本ステップを実行する際にROM24から読み出すことによって実行される。ここでは、最終的にステップS115で選択した画素の階調値は、これまで演算した階調値の合計が、閾値Rと等しくなるように演算して、それをもとに重心GC位置を求めることになる。そしてCPU22は、演算した重心GCの位置データを再びRAM25のバッファ領域に書き込む。
【0074】
次に、ステップS140では、CPU22は、戻りデータを再び、最後にセルCLに選択した画素の階調値を記憶する入力バッファ領域に書き込む。これにより、戻りデータが当該画素の階調値に格納される。なお、このとき、階調値を戻された画素は、RAM25の処理済み画素を示している判別用バッファ領域には“0”が付与されて、戻りデータの階調をもつ未処理画素として扱われる。すなわち、階調値を戻された画素は、再び階調値を有するので、再びステップS105〜S120の処理の対象になる。このように、戻りデータは、戻りデータを発生した元の画素に再び格納して階調値とすることによって、セル内の階調値の合計が閾値を超えた場合であっても、入力データ全体としての階調値が保たれたドット分布が得られることになる。したがって、入力データに忠実なドット分布を形成することができる。
【0075】
ステップS145では、重心GCに位置する画素に、階調値の付与を行うドット生成処理を行う。以下、図8のフローチャートを用いて、ドット生成処理を説明する。
【0076】
ドット生成処理では、閾値Rに対応したドットを生成する場合において、生成するドットを構成する画素の数および座標を決定する。ドット生成処理を開始すると、始めに、ステップS300において、ドットを構成する画素の数Ndを決定する。ここでは、閾値Rの値および生成するドットに相当する階調値に基づいて、次式により生成するドットを構成する画素の数Ndを決定することができる。本実施形態では、生成するドットに含まれる各画素の階調値は“255”としているので、閾値Rを“255”で除算した値、すなわち、Ncが生成するドットを構成する画素の数になる。もっとも、ハードウェア上の制約に合わせて、ドットを生成するために最適な各画素の階調値をVsとすればよく、例えば階調値“127”が最適な場合、閾値Rを“127”で除算して、ドットを構成する画素の数Ndを求めてもよい。
Nd=R/Vs
=R/255=Nc …(9)
【0077】
次に、ステップS310において、ステップS130またはステップS135で求めたセル内の画素の階調値の重心GCに基づいて、ドットを生成する座標を決定する。ここでは、重心GCの座標は、式(5)〜(8)の演算の結果、端数(小数部分)を有した値となっている。しかし、以上の処理でいう画素とは、印刷エンジンがドットを生成することのできる最小単位の座標を示したものであるので、この最小単位より小さな単位でドットの座標を制御することができない。そこで、未処理画素のうち、重心位置GCから最も近い画素を選択して、ドットを生成する画素に決定する。実際には、CPU22は、セルCL内にある画素について、式(4)により重心GCからの距離Lを演算する。そして、セル内にある画素のうち距離Lが最も小さくなる画素を判断し、その画素をドットを生成する画素に選択する。
【0078】
次に、ステップS320において、選択した画素がNd個となっているか否かを判断する。ドットを生成する位置を決定した画素の数がNd個より少ない場合(No)、ステップS330へ進む。ドットを生成する(階調値“255”を出力する)位置を決定した画素の数がNdであった場合(Yes)、ステップS340へ進む。。
【0079】
ステップS330では、ステップS310で求めたセル内の画素についての重心GCからの距離Lを参照して、1つ先に選択した画素の次に重心より近い画素を選択し、更にドットを構成する(階調値“255”を出力する)画素の座標を決定する処理を行う。このとき、既に選択した画素を重ねて選択することのないように、先に選択した画素の次に距離Lが小さい画素を選択する。ステップS330の処理を終えると、ステップS320へ進む。
【0080】
こうして、ステップS320およびステップS330の処理を繰り返し行うことによって、ドットを構成するNd個の画素が選択される。
【0081】
ステップS340では、ステップS310において選択された画素にドットを生成する。実際には、CPU22は、ドットを生成する画素に対応するRAM25の出力バッファ領域に“255”の量子化データを格納させる。ここで、選択した画素以外の画素に対応する出力バッファ領域には、ドットを生成しないので“0”が格納される。ステップS340を終えると、ドット生成処理を終了する。
【0082】
図5のフローチャートに戻り、ステップS145におけるドット生成処理を終了すると、次にステップS105へ進み、再び未処理画素を探索する。ステップS105において、未処理画素がないと判断された場合(No)、ステップS150へ進む。
【0083】
ステップS150では、CPU22は、ハーフトーン処理によって生成した量子化データを出力バッファ領域より読み取り、ドットのオンオフに対応した量子化データとして、印刷エンジン40に出力する。ステップS150を終えると、ハーフトーン処理を終了する。
【0084】
以上で述べた処理を行うことによって、平均閾値Raを中心としてランダムに変化させた閾値Rを用いたCC法によるハーフトーン処理を行い、ドットを生成することができる。次に、図9および図10を用いて、本実施形態にあるハーフトーン処理の処理例について説明する。
【0085】
図9は、図9(a)に示された3行(m〜m+2)×4列(n〜n+3)のマトリクスで表された入力データに対して、本実施形態にあるハーフトーン処理を施した場合の処理例を示した図である。なお、ここでは、3行×4列の入力データに対して、階調値“100”が与えられた場合について説明を行うが、入力データの大きさはこれに限られることなく、実際に行われる処理ではより大きなデータに対して行うとするものである。
【0086】
まず、図9(a)に示した入力データに対して、初期画素の探索順に従って、画素(n,m)を初期画素に設定する。
【0087】
次に、ステップS200で述べたように、初期画素の周辺3×3の領域に含まれる未処理画素より平均階調値Vaを算出する。図9(a)の例では、初期画素が入力データの左上端に位置しているので、初期画素を中心とした3×3の画素のうち、存在しない画素があるのでこれを無視して、画素(n,m)、画素(n+1,m)、画素(n,m+1)および画素(n+1,m+1)の4つの画素についての平均階調値Vaを算出する。図9(a)の例では、初期画素(n,m)について、平均階調値“100”が求められる。
【0088】
次に、ステップS220で述べたように、図7に示した変換テーブルを用いて、平均閾値Raを取得する。ここでは、平均階調値Vaが“100”であるので、これに対応する平均閾値Raとして、“1020(=4×255)”が取得されることになる。
【0089】
次に、平均閾値Raと式(2’)および式(3’)を用いて、閾値Rを取得する。ここでは、閾値Rをランダムに変化させた結果、閾値Rが“510(=2×255)”になったものとして説明する。
【0090】
次に、図9(a)において、初期画素である画素(n,m)をセルCL1に組み入れて、セル内の画素の階調値の合計が、閾値R(=510)より大きいか否かを判断する。ここでは、まだ、閾値Rより小さいので、次にセルCL1を拡大する。
【0091】
セルCLを拡大する際には、ステップS120で述べたように重心GCより最も近い画素を選択する。図9(a)では、セルCL1(=画素(n,m))の重心GCより最も近い画素として、画素(n+1,m)および画素(n,m+1)の2つの画素が挙げられるが、この場合、初期画素の探索順にしたがって優先順位を定めるとよい。したがって、ここでは画素(n+1,m)が選択される。
【0092】
画素(n+1,m)がセルCL1に組み入れられると、図9(b)に示した状態となる。ここで、セルCL1内の階調値の合計は“200(=100+100)”であり、閾値Rに満たないので、セルCL1の重心に基づいて、更にセルCL1を拡大する処理を行う。
【0093】
次に、画素(n,m+1)がセルCL1に組み入れられる(図9(c)参照)。このときの、セル内の画素の合計は“300”であるので、更にセルCL1を拡大する。
【0094】
次に、画素(n+1,m+1)がセルCL1に組み入れられる(図9(d)参照)。このときの、セル内の画素の合計は“400”であるので、更にセルCL1を拡大する。
【0095】
次に、画素(n+2,m)がセルCL1に組み入れられる(図9(e)参照)。このときの、セル内の画素の合計は“500”であるので、更にセルCL1を拡大する。
【0096】
次に、画素(n+2,m+1)がセルCL1に組み入れられる(図9(f)参照)。このときの、セル内の画素の合計は“600”であるので、閾値Rより大きくなっている。したがって、セルCL1の拡大を終了し、画素(n+2,m+2)の階調値のうち、階調値“10”だけをセルCL1に残して、残りの階調値“90”を戻りデータとして元の画素(n+2,m+1)に戻す。このとき、重心の位置は、画素(n+1,m)の内部にありながら、画素(n+1,m+1)寄りに位置している(図9(f)の白丸参照)。
【0097】
次に、式(8)に従って、生成するドットの数Ndを決定する。図9の例では、生成するドットの数Ndは、“2(=510/255)”となる。したがって、図9(f)に示したセルCL1の重心からより近い2つの画素を選択し、画素(n+1,m)および画素(n+1,m+1)にドットが生成される(図9(g)参照)。
【0098】
以上のようにして、閾値Rの制御を行いながらハーフトーン処理を行うことができる。
【0099】
なお、実際には、図9に示した3×4の入力データより更に大きいデータについて処理を行うものであって、例えば、9×9の入力データに対して処理を行った例を図10に示した。図10は、9行9列(m〜m+8,n〜n+8)の入力データに対して、ハーフトーン処理を行う例であって、図9と同様、入力データの全ての画素に階調値“100”を与えた場合の処理結果の例である。ここで、図10(a)の左上端の領域は、図9にある処理例に対応して、既にドットが生成されたものが示されている。セルCL1の次のセルCL2についての処理は、画素(n+3,m)を初期画素として行うことになる。
【0100】
図10(a)の状態にあるデータに本実施形態によるハーフトーン処理を行った処理結果を、図10(b)に示す。図10(b)に示したように、セルCL1以降、CL2、CL3と順番にCL9までのセルが生成されている。そして、セルCL1〜CL9の各セルごとに閾値制御が行われているので、各セルCLの大きさがバラツいている。そして、各セルの階調値合計(大きさ)に対応して、複数のドットからなる塊状のドットが適度に分散したドット分布が得られている。
【0101】
以上、CC法によるハーフトーン処理において閾値制御を行った場合の処理例について説明した。CC法では常にセルCLの重心に最も近い画素を組み入れてセルCLを生成するため、階調値を付与する画素の位置を中心としてほぼ円状となるセルCLを生成する。したがって、階調値が付与された画素位置にドットを形成した場合、隣り合うドットとの距離が必要以上に近づくことがないため、ドットの分散性、すなわち粒状性の優れた出力を得ることができる。
【0102】
しかし、閾値制御を行うことなく、閾値Rを固定値としてCC法によるハーフトーン処理を行った場合、セルCLに新たな画素を組み入れる際に、初期画素の探索方向を一定としているために、セルCLの配置位置に一定の周期性が現れる傾向がある。図11は、均一な階調値をもつ入力データに対して、CC法によるハーフトーン処理を行った場合に、生成されるセルCLの例を示した図である。図11(a)には、閾値制御を行うことなく、閾値を“255”で固定とした場合のセルCLを示している。図11(b)は、閾値制御を行い、閾値が255〜7×255の範囲で、セル毎にランダムに変化させた場合の、セルCLを示している。図11(a)に示すように、閾値Rを固定とした場合では、初期画素の探索方向に起因して、セルの配置位置に一定の周期性がみられる。この場合、セル内の画素の重心位置にドットを生成すると、ドットの位置にも周期性が生じることとなっていた。また、複数の色成分ごとに処理を行った後に、処理後の色成分を重ね合わせて色を再現する場合、各色成分ごとに所定の周期性を有したドット分布が生成されることになる。したがって、各色成分のドットは互いの位置が周期的にずれるために、画像に色ムラ、すなわちモアレが生じるという課題があった。(図13(a)参照)。
【0103】
そこで、本実施形態では、閾値Rの大きさをセルCLごとに変化させることにより、セルCLの大きさにバラツキを与えた。こうすることによって、図11(b)に示したように、セルCLごとに大きさがバラツいたセルCLが並ぶことにより、セルCLの並び方に周期性が発生しなくなる。したがって、セル形状に基づいて生成されるドットの分布に周期性が表れることがないため、複数の色成分を重ね合わせて色を再現する場合では、各色ドットごとの相対的なドット位置がずれた場合であっても、ずれ方に周期性がないので、各色ドットが適度にバラツき、目立った色ムラ、すなわちモアレとなって現れることがない。つまり、色ムラ、モアレの目立たない、画質に優れたカラー画像を得ることができる(図13(b)参照)。
【0104】
図12に、各画素の階調値が均一な入力画像のC(シアン)データに対して、本実施形態の閾値制御を行うハーフトーン処理を実際に適用してドットを生成した処理結果を、一例として示す。図12(a)には閾値制御を行うことなく閾値“255”で固定としてハーフトーン処理を行った場合の処理結果である出力画像を示し、図12(b)には閾値を“255〜7×255”の範囲で閾値制御を行うハーフトーン処理を適用した場合の処理結果である出力画像を示している。図12(a)に示すように、閾値固定とした場合では、入力画像の各画素は均一な階調値を有していたにもかかわらず、その出力画像には、周期性が見られる。一方、図12(b)に示したように、閾値制御を行った場合では、周期性のない、かつドット分散性も優れた出力画像となっている。
【0105】
図13に、C(シアン)、M(マゼンタ)各色成分ごとに、各画素の階調値が均一な入力画像に本実施形態の閾値制御を行うハーフトーン処理を実際に適用し、求めた色成分を合成してカラー画像としての出力画像を出力した場合の処理結果を、一例として示す。すなわち、図12に示したCデータに加えて、別途同様の処理を行って求めたMデータを同時に重ねて出力したものである。図13(a)には閾値制御を行うことなく閾値“255”で固定としてハーフトーン処理を行った場合の処理結果を示し、図13(b)には閾値を“255”〜“7×255”の範囲で閾値制御を行うハーフトーン処理を適用した場合の出力画像(2値化画像)を示している。図13(a)では、各色成分がそれぞれもっているドット位置の周期性のために、各色のドットを重ね合わせたときに、周期性をもった色ムラ、すなわちモアレとなって周期的な特異パターンが現れている。一方、図13(b)に示したように、閾値制御を行うことにより、色ムラすなわちモアレによる特異パターンがなくなっている。すなわち、閾値制御を行うことにより、モアレが発生せず、かつドット分散性も優れたカラー画像が得られている。
【0106】
以下、第1の実施形態の効果を記載する。
(1)閾値Rの大きさを、セルCLごとに切り替えることによって、各セルCLの大きさにバラツキを与えた。こうすることにより、セルCLの配列に周期性が低減することとなって、出力画像に生成されるドット位置に現れる周期性が低減する。したがって、重ねあわせによるモアレの発生を抑え、かつドット分散性に優れた、視覚的に快適な画像を得ることができる。
(2)閾値Rの大きさを、平均閾値Raを中心としてランダムに変化させることによって、各セルCLの大きさにランダムなバラツキを与えた。こうすることにより、ドット位置に現れる周期性が更に低減する。したがって、視覚的に快適な画像を得ることができる。
(3)平均閾値Raの大きさを、セル内の画素の階調値の平均値に対応して変化するようにした。こうすることによって、セル内に含まれる画素の数をおおむね一定の範囲に収めることができる。そして、画素の数をおおむね一定とした各セルはその大きさがおおむね一定の範囲に収まり、異なるセル間のドット間隔がおおむね一定の範囲に収まることになる。すなわち、平均閾値Raの大きさを、セル内の画素の階調値の平均値(平均階調値Va)に対応させることにより、生成されるドット間隔をおおむね一定の範囲に収まるように平均閾値Raを定めることができる。こうすることによって、レーザープリンタの特性によって異なる、安定したドット生成が可能な、最適なドット間隔及びドットサイズを設定することができる。
(4)平均閾値Raの大きさを、セル内の画素の平均階調値Vaに対応して変化させながら、一定の値以上となる平均階調値Vaに対しては平均閾値Raの値を最大値とした。ここで、最大値の値は、ドットを生成するときに最適なドットサイズに基づいて設定している。例えば、レーザープリンタの特性上、1つのドットを構成する隣接した画素の数に最適な値がある場合、この最適なドットサイズを中心として、バラツかせたドットサイズをもつドットを生成することになる。このようにして、ハードウェアの特性上最適なドットサイズをもつドットを生成する確率が高まる。
【0107】
(第2の実施形態)
次に、本発明を具体化した第2の実施形態について説明する。
【0108】
図14は第2の実施形態におけるハーフトーン処理部33の構成を示した図である。図に示すように、ハーフトーン処理部33は、画素群生成部35と階調値付与部36とを備えている。また、第2の実施形態における画素群生成部35は、後述するように評価関数(画素選択条件)をランダムに切り替えて、制御する評価関数制御部38を有している。
【0109】
第2の実施形態では、新たにセルCLに組み入れる画素を選択する際に、セルCLの選択に用いる評価関数に異方性を与える。こうすることによって、セルCLの形状に異方性を与えられ、セルCLの形状が円形でなくなることになる。そして、セルCLごとに、評価関数の異方性を有した方向を変化させることによって、セル形状を変化させる。以下、セル形状に異方性を加え、楕円形とした場合の評価関数を算出し、説明を行う。
【0110】
まず、一般に、原点まわりの楕円形の式は以下の式で与えられる。
x2/a2+y2/b2=1 …(10)
次に、原点(楕円形の中心)周りにΘ回転させたxy方向座標をそれぞれx’,y’とすると、以下の式が得られる。
x=x’cosΘ+y’sinΘ …(11)
y=−x’sinΘ+y’cosΘ …(12)
式(11)および(12)を式(10)に代入すると以下の式が得られる。
(x’cosΘ+y’sinΘ)2/a2+(−x’sinΘ+y’cosΘ)2/b2
=1 …(13)
式(13)に示した楕円形の内部の領域から画素を選択するためには、回転後の座標(x’,y’)を(x,y)で置き換えて、次式の評価関数fが最も小さくなる画素(x,y)を選択すればよい。
f=(xcosΘ+ysinΘ)2/a2+(−xsinΘ+ycosΘ)2/b2
…(14)
ここで、例えば、楕円形の形状を長径:短径=√2:1とすると、式(14)に、a=√2b,b=bを代入し、評価関数fは次式で与えられる。
f=((xcosΘ+ysinΘ)2)/2+(−xsinΘ+ycosΘ)2
=1/2×(1+sin2Θ)x2−(sinΘcosΘ)xy+1/2×(1+cos2Θ)y2 …(15)
ここで、Θを0度から45度刻みに切り替えるとすると、それぞれの関数f0〜f3が得られる。
f0=1/2x2+y2 (Θ=0°) …(16)
f1=3/4x2−1/2xy+3/4y2 (Θ=45°) …(17)
f2=x2+1/2y2 (Θ=90°) …(18)
f3=3/4x2+1/2xy+3/4y2 (Θ=135°) …(19)
第2の実施形態では、式(4)に示された重心からの距離L=(x2+y2)1/2に替えて、上記式f0〜f3のうちいずれかをランダムに選択して、選択した評価関数fの値がもっとも小さくなる画素をセルCLに組み入れる。こうすることによってセルCLに組み入れる画素の選択に異方性が加わることになり、生成されるセルCLの形状にバラツキを与えることができる。なお、式(16)〜式(19)の演算式は、ROM24に記憶され、必要なときに、CPU22がROM24から読み取るようにして、演算式が取得される。
【0111】
図15は、評価関数fの制御を行ったときのCC法によるハーフトーン処理の処理の流れを示すフローチャートである。以下に、図15のフローチャートに従って処理の説明を行う。なお、ステップS400〜S420の処理は画素群生成部35が行う。特に、ステップS410の処理は、画素群生成部35の評価関数制御部38が行っている。ステップS425〜S450の処理は階調値付与部36が行う。
【0112】
処理を開始すると、始めにステップS400において、CPU22は、ハードディスク23またはROM24に格納されたプログラムを読み出して、入力画像の読み込み処理を開始する。入力画像の読み込みは、ホストコンピュータ10から入力データを入力I/F21を介してRAM25に取り込むことで行う。
【0113】
次に、ステップS405では、CPU22は、セル生成の最初の未処理画素となる画素を探索し、初期画素に決定する。このとき、入力データの左上から主走査方向(X方向)に探索した後、副走査方向に1ラインずらして再び主走査方向の探索を行い、これを繰り返すようにして探索する。実際には、RAM25の判別用バッファ領域を参照して、入力データの画素のうち未処理画素であることを示す“0”が格納されている画素を探索する。未処理画素がある場合(Yes)は、この未処理画素を初期画素に設定し、RAM25の判別用バッファ領域にその階調値と処理済画素であることを示す“1”を記憶して、ステップS410に進む。未処理画素がない場合(No)はステップS450に進む。
【0114】
ステップS410では、評価関数制御処理を行う。ここでは、画素の選択に用いる評価関数をセルCLごとに決定する。以下、図16に示した評価関数制御処理の処理の流れを示したフローチャートを用いて、説明する。
【0115】
評価関数制御処理を開始すると、ステップS500において、傾き角度をランダムに決定する。実際には、CPU22が、0°、45°、90°、135°の角度のうちいづれを用いるかをランダムに選択して、選択した角度をRAM25に記憶する。
【0116】
次に、ステップS510では、ステップS500で決定した角度に対応する評価関数fを選択する。ここで選択される評価関数fは、式(16)〜式(19)で示したf0〜f3の評価関数のうちいずれかである。実際には、ROM24に記憶された評価関数f0〜f3から、選択した評価関数fを読み出して取得する。取得した評価関数fはRAM25に記憶する。このようにして、評価関数のもつ異方性の切り替えをランダムに行っている。閾値制御処理を終えると、図15のフローチャートに戻り、ステップS415に進む。
【0117】
このように、本実施形態では、予めROM24に容易しておいた評価関数fをランダムに用いることとした。もっとも、ステップS500において、0°から180°の範囲で、例えば、30°刻みの角度からランダムに選択して角度Θを求め、ステップS410において、求めた角度Θを式(15)を代入して評価関数fを取得するとしてもよい。
【0118】
次に、図15のフローチャートへ戻って、ステップS415において、セルCLの拡大を終了するか否かを判断する。ここでは、CPU22は、セル内の画素の階調値の合計が閾値を超えているか否かの判断をステップS115と同様にして行う。ステップS415において、セル内の画素の階調値の合計が閾値よりも小さい場合(No)は、ステップS420に進み、セルCLの拡大を行う。閾値と同じまたは大きい場合(Yes)は、セルCLの拡大を終了してステップS425に進む。
【0119】
ステップS420では、ステップS415において、セル内の階調値の合計が閾値Rより小さいと判断された場合(No)について、CPU22は、新たな未処理画素をセルCLに組み入れてセルCLを拡大する処理を行う。ここで、第2の実施形態では、未処理画素の選択には、ステップS410で求めた評価関数fの値が最も小さい画素を選択する。
【0120】
CPU22は、RAM25のバッファ領域より初期画素の位置する画素の階調値と座標とを読み出し、新たな未処理画素を組み入れたときのセル内の画素の重心GCを式(4)および式(5)にしたがって演算する。
【0121】
以上に述べたように、未処理画素を選択して新たにセルCLに組み入れる処理(ステップS420)は、CPU22がセル内の画素の重心GCから評価関数の値が最も小さくなる画素を選択することによって行っている。
【0122】
次に、ステップS420を経てステップS415へ至っている場合、CPU22は、再びセル内の画素の階調値の合計が閾値Rを越えているか否かを判断する。すなわち、新たに選択した未処理画素の階調値を含めたセル内の画素の階調値合計が、所定の閾値未満であるか否かを判断する。閾値未満である場合(No)、再びステップS420に進み、新たな未処理画素をセルCLに組み入れる処理を行う。閾値以上である場合(Yes)、ステップS425へ進む。
【0123】
ステップS425以降の処理については、第1の実施形態とおおむね同様の処理を行う。処理の内容が異なる点は、ステップS420の画素選択において、式(3)の演算式に替えて、ステップS410で取得した評価関数fを用いるとする点である。したがって、ステップS425〜ステップS450の処理については、ステップS125〜ステップS150と同様の処理を行えばよい。
【0124】
図17は、図17(a)に示されたm行n列のマトリクスで表された入力データに対して、第2の実施形態にあるハーフトーン処理を施した場合の処理例を示した図である。
【0125】
まず、図17(a)に示した入力データに対して、初期画素の探索順に従って、画素(n,m)を初期画素に設定する。
【0126】
次に、ステップS410で行う評価関数fの制御処理を行う。ここでは、式(16)から式(19)に示した評価関数f0〜f3のうちいずれかをランダムに選択を行った結果、評価関数f1(=3/4x2−1/2xy+3/4y2)が選択されたものとして説明を行う。なお、画素選択の閾値は“255”としている。
【0127】
次に、選択した評価関数fに基づいて、セルCL1に組み入れる画素の選択を行う。図17(b)では、セルCL1として、初期画素である画素(n,m)が選択された状態が示されている。ここで、セル内の階調値の合計は“50”であり、閾値である“255”に満たないので、セルCLの重心位置に基づいて次にセルCLに取り込む画素を選択する。ここでは、初期画素(n,m)に対して、この周辺にある画素(n+1,m)、画素(n,m+1)、画素(n+1,m+1)を選択する画素の候補とする。そして、それぞれの画素に対して評価関数の値を算出すると、それぞれ“0.75”、“0.75”、“1”となる。したがって、評価関数fの値が最も小さい画素が2つ存在することになる、このようなときは、初期画素の探索順にしたがって画素(n+1,m)を選択して、セルCL1に組み入れる(図17(c)参照)。このとき、セル内の階調値の合計は“100(=50+50)”となり、閾値である“255”に満たないので、更にセルCL1を拡大する処理を行う。
【0128】
次に、図17(c)にあるセルCL1の周辺にある4つの画素(画素(n+2,m)、画素(n,m+1)、画素(n+1,m+1)、画素(n+2,m+1))のうち、セルCL1の重心位置に基づいて、評価関数f2を用いて次にセルCLに取り込む画素を選択する。この結果、画素(n,m+1)が選択され、セルCL1に組み入れられる(図17(d)参照)。このとき、セル内の階調値の合計は“150”となり、閾値である“255”未満であるので、更にセルCLを拡大する処理を行う。
【0129】
次に、図17(d)にあるセルCL1の周辺にある5つの画素(画素(n+2,m)、画素(n+2,m+1)、画素(n+1,m+1)、画素(n+1,m+2)、画素(n,m+2))のうち、セルCL1の重心位置に基づいて、評価関数f2を用いて次にセルCLに取り込む画素を選択する。この結果、画素(n+1,m+1)が選択され、セルCL1に組み入れられる(図17(e)参照)。このとき、セル内の階調値の合計は“205”となり、閾値である“255”未満であるので、更にセルCLを拡大する処理を行う。
【0130】
次に、図17(e)にあるセルCL1の周辺にある5つの画素(画素(n+2,m)、画素(n+2,m+1)、画素(n+2,m+2)、画素(n+1,m+2)、画素(n,m+2))のうち、セルCL1の重心位置に基づいて、評価関数f2を用いて次にセルCLに取り込む画素を選択する。この結果、画素(n+2,m)が選択され、セルCL1に組み入れられる(図17(f)参照)。このとき、セル内の階調値の合計は“255”となり、閾値である“255”以上であるので、セルCLを拡大する処理を終了し、セルCL1の重心位置に階調値“255”の付与を行う。こうして、セルCL1の処理が終了する。
【0131】
図18は、図17(f)の状態に続けて処理を行った一例を示した図である。以下図18を用いて、処理について説明する。
【0132】
図17の説明において、セルCL1の処理を終了しているので、次に、新たなセルCL2についての処理を行う。まず、図18(a)に示したように、残っている未処理画素のうち、所定の探索順にある画素を選択して、画素(n+3,m)が初期画素に選択され、セルCL2に組み入れられる。セルCL2内の階調値の合計は“50”であるので、セルCLを拡大する処理を行う。なお、セルCL2に対しては、ランダムに選択した結果、評価関数f2(=x2+1/2y2)が選択されたとして以下説明する。
【0133】
次に、図18(b)に示すように、評価関数に基づいて、画素(n+3,m+1)が選択され、セルCL2に組み入れられる。ここで、セル内の階調値の合計は“105”であるので、更にセルCL2を拡大する。
【0134】
次に、図18(c)に示すように、画素(n+3,m+2)が選択され、セルCL2に組み入れられる。ここで、セル内の階調値の合計が“165”であるので、さらにセルCL2を拡大する処理を行う。
【0135】
次に、図18(d)に示すように、画素(n+2,m+1)が選択され、セルCL2に組み入れられる。ここで、セル内の階調値の合計が“215”であるので、さらにセルCL2を拡大する処理を行う。
【0136】
次に、図18(e)に示すように、画素(n+2,m+2)が選択され、セルCL2に組み入れられる。ここで、セル内の階調値の合計が“265”となり、閾値“255”以上となったので、セルCL2を拡大する処理を終了する。
【0137】
次に、図18(f)に示すように、セル内の階調値の合計“265”のうち、閾値“255”を超える分の階調値“10”については、戻りデータとして最後にセルCL2に組み入れた画素(n+2,m+2)に戻す。こうして、セルCL2の処理が終了する。
【0138】
以上、3×4の大きさの入力データに対して処理を行う例を示したが、図17および図18の例では、例えばセルCL1に見られるように、評価関数をf1(Θ=45°)としたことにより斜めに傾いた楕円形に近いセル形状となった。一方、セルCL2では、評価関数f2(Θ=90°)としたことにより、セル形状が縦長の楕円形となるようにセルCLが拡大した。このように、評価関数をセルCLごとにランダムに切り替えることによって、生成されるセル形状を意図的にバラツかせることができる。そして、形状のバラツいたセルCLが並ぶことになりセル配列の周期性が低減する。したがって、生成されるドットの周期性が低減する。
【0139】
以下、第2の実施形態の効果を記載する。
(5)評価関数を、セルCLごとに切り替えることによって、各セルの形状にバラツキを与えた。このようにすれば、セルCLの周期性が低減し、生成されるドット位置に現れる周期性が低減するので、複数の色成分を持つ画像を表示した際の干渉を抑え、視覚的に快適な画像を得ることができる。
(6)評価関数を、ランダムに切り替えるとしたことにより、セルCLの周期性がさらに低減する。したがって、ドットの位置に周期性が少なくなるので、複数の色成分を持つ画像を表示した際の干渉を抑え、視覚的に快適な出力画像を得ることができる。
【0140】
以上、本発明の一実施形態を説明したが、本発明はこうした実施の形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内において様々な形態で実施することもできる。以下、変形例を挙げて説明する。
【0141】
(変形例1)第2の実施形態において、楕円形を回転させる角度を変化させることに対応する評価関数に異方性を与えた。評価関数に異方性を与える方法としては、これに限られることなく様々な方法が考えられる。例えば、楕円形の長径と短経との比を変化させた評価関数を設定するとしてもよい。これによれば、評価関数のもつ異方性の方向だけでなく異方性の強さも変化させることができる。また、その形状についても楕円形に限られることなく、例えば、長方形に対応する評価関数とすることもできる。ここでは、第1の変形例として、楕円形の形状(長径と短径との比)を変化させることにより評価関数を設定した例について述べる。
【0142】
まず、求める評価関数に異方性を与えるため、長径aおよび短径bの比率の異なる楕円形を複数求めて、それぞれの楕円形に対応する評価関数を以下のようにして求める。
【0143】
長径:短径=1:1とした場合、a=bおよびb=bを式(9)に代入し、以下の式を得る。
x2+y2=b2 …(20)
このとき、式(20)に表される楕円形に対応した評価関数f0は、次式で与えられる。
f0=b2=x2+y2 …(21)
【0144】
同様にして、長径:短径の比が√2:1である場合、a=√2b,b=bを代入して、評価関数f1が次式で与えられる。
f1=b2=x2/2+y2 …(22)
【0145】
以下同様にして、長径:短径の比が2:1,1:√2,1:2である場合、それぞれに対応する評価関数f2〜f4が次式で与えられる。
f2=b2=x2/4+y2 …(23)
f3=b2=x2+y2/2 …(24)
f4=b2=x2+y2/4 …(25)
第1の変形例では、前記第2の実施形態にある式(16)〜式(19)に替えて、上記式(22)〜(25)のうちいずれかの評価関数をランダムに選択して、セルCLに組み入れる画素の選択に使用する。このようにすれば、様々な形状をもつ楕円形が並ぶようにして、形状のばらついたセルCLが生成されることになる。したがって、生成されるセルCLに一定の周期性が生じる可能性が低減する。
【0146】
(変形例2)前記第1の実施形態として、図6のフローチャートのステップS200において、初期画素を中心として3×3のセルCLから平均階調値Vaを算出した。しかし、第2の変形例の平均階調値Vaの求め方としては、処理をより簡略して、例えば初期画素の階調値を平均階調値Vaとして用いて、平均閾値Raを求めるとしてもよい。このようにすれば、CPU22の演算量が減少することにより処理の高速化を図ることができる。
また、初期画素の階調値とこれを平均階調値Vaとして求めた平均閾値Raとからセル内の画素数をおおよそ推定し、平均階調値Vaを求めるとしてもよい。すなわち、初期画素の画素値を平均階調値Vaとして、図7の関係により対応する平均閾値Raを求める。そして、この平均閾値Raを初期画素の階調値で割った値が、セルCLに含まれると推定される画素数になる。初期画素周辺から、この画素数に対応する数の画素を選択して、各画素の階調値を平均することにより平均階調値Vaを求めるとしてもよい。このようにすれば、入力画像の階調値に合わせて、適切な閾値設定を行うことができる。もっとも、平均階調値Vaの求め方としては、セル内の全画素の階調値から平均階調値Vaをより正確に求めるようにしてもよい。
【0147】
(変形例3)前記第2の実施形態においては、楕円形としたセルCLについて、長径と短径の比を変化させることにより処理を行った。ここで、長径と短径の比を変化させ、さらに、閾値制御を行なうとしてもよい。すなわち、楕円形のセル内の画素の値に基づいて平均階調値Vaを求めて、平均階調値Vaに基づいて楕円形のセルCLの閾値Rを求める。このようにすれば、生成されるセルCLの大きさおよびドット間隔を最適な値とすることができるので、ドットの分散性に優れた出力画像を生成することができる。
【0148】
(変形例4)前記第1の実施形態では、図7において、平均階調値Vaが小さい範囲では、平均閾値Raは平均階調値Vaに比例し、平均階調値Vaが所定の値より大きくなる範囲に対しては、一定の平均閾値Raとなるようにした。これは、平均閾値Raが平均階調値Vaに比例する領域では、各セルCLがおおむね同じ大きさになるようにして、生成されるドット間隔をおおむね一定の範囲に収めるためである。一方、平均閾値Raが一定となる範囲では、レーザープリンタのハードウェア特性上、安定して形成できるドットサイズに適した値を閾値Rとして設定するためである。第5の変形例として、平均階調値Vaと平均閾値Raとの関係は、図7に示した関係に限られず様々な関係とすることができる。例えば、ドット間隔すなわち、ドットの分散性をより重視する場合では、平均階調値Vaに対応して平均閾値Raが比例する範囲をより大きくすることが効果的であり、平均階調値Vaの全範囲について平均閾値Raが比例関係をもたせることもできる。
また、ドットが安定して形成することを重視する場合、平均閾値Raが一定となる平均階調値Vaの範囲を更に大きくすればよい。
さらに、ドットが安定して形成される最適な階調値が複数個ある場合では、この複数個の最適な階調値に対応した平均閾値Raが得られるような平均階調値Vaと平均閾値Raの関係としてもよい。例えば、濃いインクおよび淡いインクのドットを形成して印刷を行うインクジェットプリンタでは、各インクのドットに対応して2つの最適な階調値を有することになる。このような場合の平均階調値Vaと平均閾値Raの関係では、平均閾値Raが一定となる範囲を2つもたせ、それぞれの範囲の閾値Rの値が、各濃度のドットに対応した値となるようにすればよい。このようにすれば、平均階調値Vaがある範囲の領域では、淡いインクのドットに対応した平均閾値Raで一定となる。さらに、平均階調値Vaが大きくなると、今度は、濃いインクのドットに対応した平均閾値Raで一定となることになる。このように、平均閾値Raが一定となる領域を2つもつことによって、濃いインクのドットおよび淡いインクのドットを生成するために最適な値とした平均閾値Raを取得し、濃いインクのドットおよび淡いインクのドットを打ち分けることができる。
また、ハーフトーン処理におけるドットサイズはより小さく設定したほうが、解像度を上げられるため、好ましいが、レーザープリンタのハードウェア特性上、安定して形成できるドットサイズの下限値は、各平均階調値Vaによって異なる。よって、各入力階調値について、各ドットサイズを設定した際のドット形成の安定性、すなわち出力濃度の安定性を解析し、その解析結果に応じた最適な値が出力されるように、平均閾値制御テーブルを作成し、平均閾値Raを制御することもできる。
【0149】
(変形例5)前記実施形態では、画素選択の基準点を重心位置にして毎回画素選択時に更新するようにしていたが、第5の変形例では、画素選択の基準点を、画素の階調値には関係なく、画素の座標位置を利用した中心位置とする。例えば、中心位置は、セル内の画素の座標位置を利用した中心位置であって、その位置座標を(x,y)とすると、中心位置の座標は以下の式により求められる(以下の式で、Nはセル内の画素数、iはセル内の画素を示す数字である)。
x=Σixi/N …(26)
y=Σiyi/N …(27)
そして、この中心位置を毎回画素選択時に更新しながら、未処理画素を選択することによりセルCLを生成すると、毎回重心位置を計算することがないので、他の処理を含めた全体の処理速度を上げることができる。
【0150】
(変形例6)また、第6の変形例として、所定の画素に階調値を付与する際に、セルCLの重心位置を演算することなく、第4の変形例において、未処理画素の選択に用いたセルCLの中心位置にある画素に階調値を付与し、ドットを生成するようにしてもよい。こうすれば、重心の計算を行う必要がないので、演算量を減らすことができる。この場合、中心位置が複数の画素の間に位置することも考えられるが、かかる場合には、例えば走査方法と同じ優先順序に従ってセル内のいずれか1つの画素を選択するようにしてもよい。
【0151】
(変形例7)さらに、第7の変形例として、画素選択のための基準点を毎回更新するのではなく、1回おきに更新したり、2回おきに更新したり、予め回数を決めてその回数のときに更新するようにしてもよい。毎回、画素選択の基準点を更新するのではなく、1回おきに更新することによりさらに演算量を減らすことができ、他の処理を含めた画像処理装置全体の処理速度の向上を図ることができる。さらに、初期画素の選択から4回目の未処理画素選択のときに基準点を更新し、さらにそれから3回目、2回目と順次変更し、当該回数となるときに更新することとしてもよい。
【0152】
(変形例8)前記実施形態では、ハーフトーン処理によって、“0”と“255”の2種類の階調値に階調変換した。これは、以降のドットを形成する処理において、階調値“255”に対応した大きさのドットを打つことを想定したためである。第8の変形例としては、複数種類の大きさのドットを打つこととし、その複数種類の大きさのドットに対応した複数の種類の階調値に階調変換するものとしてもよい。また、同様にインクの濃度についても複数種類の濃度のドットを打つこととし、複数種類の階調値に階調変換するものとしてもよい。
【0153】
(変形例9)また、第9の変形例として、前記実施形態における画像処理装置は、レーザプリンタにて構成するようにしたが、本発明はこれに限定されるものでなく、ハーフトーン処理を行う様々な機器に適用することができる。したがって、例えば、インクジェットプリンタやサーマルプリンタなど種々のプリンタや電子写真などにおいて構成するようにしてもよい。あるいは、このようなプリンタなどの機能が組み込まれたコピー機やコンピュータ、ワープロ、ファックスなど種々の機器において本発明の画像処理装置を構成するようにしてもよい。
【図面の簡単な説明】
【0154】
【図1】本発明の第1の実施形態のシステム全体を示す構成図。
【図2】ハーフトーン処理部の構成を示した模式図。
【図3】画像出力装置の構成を示した模式図。
【図4】画像出力装置の行う全体の処理の流れを示したフローチャート。
【図5】CC法によるハーフトーン処理の処理の流れを示したフローチャート。
【図6】閾値制御処理の処理の流れを示したフローチャート。
【図7】ドット生成処理処理の流れを示したフローチャート。
【図8】平均階調値および平均閾値の関係を示した図。
【図9】ハーフトーン処理の処理例を示した図、(a)〜(f)は処理の経過を示した図。
【図10】ハーフトーン処理の処理例を示した図、(a)は図9(f)に続けて処理を行う状態を示した図、(b)は処理を終えた状態を示した図。
【図11】セル生成の処理結果を示した模式図、(a)は閾値固定としたときの図、(b)は閾値制御を行ったときの図。
【図12】シアン単色についてハーフトーン処理を行った実際の処理結果を示した図、(a)は閾値固定としたときの図、(b)は閾値制御を行ったときの図。
【図13】CMYについてハーフトーン処理を行った実際の処理結果を示した図、(a)は閾値固定としたときの図、(b)は閾値制御を行ったときの図。
【図14】第2の実施形態におけるハーフトーン処理部の構成を示した図。
【図15】CC法によるハーフトーン処理の処理の流れを示したフローチャート。
【図16】評価関数制御処理の処理の流れを示したフローチャート。
【図17】ハーフトーン処理の処理例を示した図、(a)〜(f)は処理の経過を示した図。
【図18】ハーフトーン処理の処理例を示した図、(a)〜(f)は処理の経過を示した図。
【符号の説明】
【0155】
10…ホストコンピュータ、11…アプリケーション部、12…ラスタライズ部、20…画像処理装置としての画像出力装置、21…入力インターフェース、22…CPU、x…重心からの変位、y…重心からの変位、X…回転変換後のx座標、Y…回転変換後のy座標、xGC…重心のx座標、yGC…重心のy座標、23…ハードディスク、24…ROM、25…RAM、30…画像処理部、31…色補正・色変換部、32…色補正表、33…ハーフトーン処理部、35…画素群生成部、36…階調値付与部、37…閾値制御部、38…評価関数制御部、40…印刷エンジン、41…レーザドライバ、42…レーザーダイオード、CL…画素群としてのセル、GC…重心、V…階調値、Va…階調値の平均値としての平均階調値、R…閾値、Ra…平均閾値、Vs…ドットの再現上最適な階調値、i…各画素を示す数字、Nc…係数、Nw…ランダム成分のふり幅、Nd…1ドットを構成する画素の数、Θ…楕円形の回転角度。
【特許請求の範囲】
【請求項1】
画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理装置であって、
前記画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて前記入力データの画素を次々に選択することにより、画素群を生成する画素群生成部と、
生成した前記画素群ごとに、前記画素群の所定の画素に対して所定の階調値を付与する階調値付与部とを備え、
前記画素群生成部は、前記閾値または前記画素選択条件の少なくとも一方を、前記画素群ごとに変更することを特徴とする画像処理装置。
【請求項2】
請求項1に記載の画像処理装置において、
前記画素群生成部は、前記画素群ごとに前記閾値の大きさを変更する制御を行う閾値制御部を有することを特徴とする画像処理装置。
【請求項3】
請求項1または2に記載の画像処理装置において、
前記閾値制御部は、前記画素群の内に位置する前記画素の階調値に基づいて、前記閾値の大きさを変更する制御を行うことを特徴とする画像処理装置。
【請求項4】
請求項1ないし3に記載の画像処理装置において、
前記閾値制御部は、前記閾値の大きさにランダム性を付与する制御を行うことを特徴とする画像処理装置。
【請求項5】
請求項1ないし4のいずれか一項に記載の画像処理装置において、
前記画素群生成部は、
前記画素群の内に位置する画素に基づいた位置を基準にして、前記画素群が異方性を有した形状となるように前記画素群生成部が選択する前記画素を決定する前記画素選択条件を、前記画素群ごとに決定する画素選択条件決定部を有することを特徴とする画像処理装置。
【請求項6】
請求項5に記載の画像処理装置において、
前記画素選択条件決定部は、前記画素群のもつ異方性の方向または強さのうち少なくとも一方を、前記画素群ごとに変更した前記画素選択条件を決定することを特徴とする画像処理装置。
【請求項7】
請求項5または6に記載の画像処理装置において、
前記画素選択条件決定部は、前記画素群ごとに、異方性の方向または強さのうち少なくとも一方を、ランダムに変更した前記画素選択条件を決定することを特徴とする画像処理装置。
【請求項8】
請求項1ないし7のいずれか一項に記載の画像処理装置において、
前記階調値付与部は、生成した前記画素群における階調値の総和が前記閾値を超えたとき、階調値と閾値とを差分した階調値を、前記画素群生成部が最後に選択した前記画素に戻すことを特徴とする画像処理装置。
【請求項9】
請求項1ないし8のいずれか一項に記載の画像処理装置において、
前記画素選択条件決定部は、生成した前記画素群の重心位置に基づいて画素を選択する画素選択条件を決定し、
前記階調値付与部は、前記画素群の重心に基づいて決定した画素に階調値を付与することを特徴とする画像処理装置。
【請求項10】
画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理方法であって、
前記画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて前記入力データの画素を次々に選択することにより、画素群を生成する画素群生成ステップと、
生成した前記画素群ごとに、前記画素群の所定の画素に対して所定の階調値を付与する階調値付与ステップとを備え、
前記画素群生成ステップは、前記閾値または前記画素選択条件の少なくとも一方を、前記画素群ごとに変更することを特徴とする画像処理方法。
【請求項11】
画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理プログラムであって、
コンピュータを、
前記画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて前記入力データの画素を次々に選択することにより、画素群を生成すると共に、前記閾値または前記画素選択条件の少なくとも一方を、前記画素群ごとに変更する画素群生成部、
生成した前記画素群ごとに、前記画素群の所定の画素に対して所定の階調値を付与する階調値付与部、として機能させることを特徴とする画像処理プログラム。
【請求項12】
請求項11に記載の画像処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項1】
画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理装置であって、
前記画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて前記入力データの画素を次々に選択することにより、画素群を生成する画素群生成部と、
生成した前記画素群ごとに、前記画素群の所定の画素に対して所定の階調値を付与する階調値付与部とを備え、
前記画素群生成部は、前記閾値または前記画素選択条件の少なくとも一方を、前記画素群ごとに変更することを特徴とする画像処理装置。
【請求項2】
請求項1に記載の画像処理装置において、
前記画素群生成部は、前記画素群ごとに前記閾値の大きさを変更する制御を行う閾値制御部を有することを特徴とする画像処理装置。
【請求項3】
請求項1または2に記載の画像処理装置において、
前記閾値制御部は、前記画素群の内に位置する前記画素の階調値に基づいて、前記閾値の大きさを変更する制御を行うことを特徴とする画像処理装置。
【請求項4】
請求項1ないし3に記載の画像処理装置において、
前記閾値制御部は、前記閾値の大きさにランダム性を付与する制御を行うことを特徴とする画像処理装置。
【請求項5】
請求項1ないし4のいずれか一項に記載の画像処理装置において、
前記画素群生成部は、
前記画素群の内に位置する画素に基づいた位置を基準にして、前記画素群が異方性を有した形状となるように前記画素群生成部が選択する前記画素を決定する前記画素選択条件を、前記画素群ごとに決定する画素選択条件決定部を有することを特徴とする画像処理装置。
【請求項6】
請求項5に記載の画像処理装置において、
前記画素選択条件決定部は、前記画素群のもつ異方性の方向または強さのうち少なくとも一方を、前記画素群ごとに変更した前記画素選択条件を決定することを特徴とする画像処理装置。
【請求項7】
請求項5または6に記載の画像処理装置において、
前記画素選択条件決定部は、前記画素群ごとに、異方性の方向または強さのうち少なくとも一方を、ランダムに変更した前記画素選択条件を決定することを特徴とする画像処理装置。
【請求項8】
請求項1ないし7のいずれか一項に記載の画像処理装置において、
前記階調値付与部は、生成した前記画素群における階調値の総和が前記閾値を超えたとき、階調値と閾値とを差分した階調値を、前記画素群生成部が最後に選択した前記画素に戻すことを特徴とする画像処理装置。
【請求項9】
請求項1ないし8のいずれか一項に記載の画像処理装置において、
前記画素選択条件決定部は、生成した前記画素群の重心位置に基づいて画素を選択する画素選択条件を決定し、
前記階調値付与部は、前記画素群の重心に基づいて決定した画素に階調値を付与することを特徴とする画像処理装置。
【請求項10】
画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理方法であって、
前記画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて前記入力データの画素を次々に選択することにより、画素群を生成する画素群生成ステップと、
生成した前記画素群ごとに、前記画素群の所定の画素に対して所定の階調値を付与する階調値付与ステップとを備え、
前記画素群生成ステップは、前記閾値または前記画素選択条件の少なくとも一方を、前記画素群ごとに変更することを特徴とする画像処理方法。
【請求項11】
画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理プログラムであって、
コンピュータを、
前記画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて前記入力データの画素を次々に選択することにより、画素群を生成すると共に、前記閾値または前記画素選択条件の少なくとも一方を、前記画素群ごとに変更する画素群生成部、
生成した前記画素群ごとに、前記画素群の所定の画素に対して所定の階調値を付与する階調値付与部、として機能させることを特徴とする画像処理プログラム。
【請求項12】
請求項11に記載の画像処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図14】
【図15】
【図16】
【図17】
【図18】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図14】
【図15】
【図16】
【図17】
【図18】
【図13】
【公開番号】特開2006−60645(P2006−60645A)
【公開日】平成18年3月2日(2006.3.2)
【国際特許分類】
【出願番号】特願2004−241928(P2004−241928)
【出願日】平成16年8月23日(2004.8.23)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
【公開日】平成18年3月2日(2006.3.2)
【国際特許分類】
【出願日】平成16年8月23日(2004.8.23)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
[ Back to top ]