(57)【要約】【課題】  プリンタなどの画像出力装置において、入力画像の階調データに対して所定の階調変換を行い、画質に優れた出力画像を取得する画像処理技術を提供すること。【解決手段】  入力画像の階調データから、所定の閾値を超えるまで画素を次々に選択してセルを生成し、セル内の画素の階調値および位置に基づいて、ドットを生成するハーフトーン処理において、セルごとに閾値の大きさをランダムに変更する閾値制御処理を行う。セルごとに閾値の大きさをランダムに変更することにより、セルごとにセルの大きさがバラツくので、セルの位置および形状に特定の周期性が低減する。周期性の少ない位置および形状をもつセルからドットを生成する。【選択図】      図５
2006060645.tif 000002
【特許請求の範囲】
【請求項１】
画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理装置であって、
前記画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて前記入力データの画素を次々に選択することにより、画素群を生成する画素群生成部と、
生成した前記画素群ごとに、前記画素群の所定の画素に対して所定の階調値を付与する階調値付与部とを備え、
前記画素群生成部は、前記閾値または前記画素選択条件の少なくとも一方を、前記画素群ごとに変更することを特徴とする画像処理装置。
【請求項２】
請求項１に記載の画像処理装置において、
前記画素群生成部は、前記画素群ごとに前記閾値の大きさを変更する制御を行う閾値制御部を有することを特徴とする画像処理装置。
【請求項３】
請求項１または２に記載の画像処理装置において、
前記閾値制御部は、前記画素群の内に位置する前記画素の階調値に基づいて、前記閾値の大きさを変更する制御を行うことを特徴とする画像処理装置。
【請求項４】
請求項１ないし３に記載の画像処理装置において、
前記閾値制御部は、前記閾値の大きさにランダム性を付与する制御を行うことを特徴とする画像処理装置。
【請求項５】
請求項１ないし４のいずれか一項に記載の画像処理装置において、
前記画素群生成部は、
前記画素群の内に位置する画素に基づいた位置を基準にして、前記画素群が異方性を有した形状となるように前記画素群生成部が選択する前記画素を決定する前記画素選択条件を、前記画素群ごとに決定する画素選択条件決定部を有することを特徴とする画像処理装置。
【請求項６】
請求項５に記載の画像処理装置において、
前記画素選択条件決定部は、前記画素群のもつ異方性の方向または強さのうち少なくとも一方を、前記画素群ごとに変更した前記画素選択条件を決定することを特徴とする画像処理装置。
【請求項７】
請求項５または６に記載の画像処理装置において、
前記画素選択条件決定部は、前記画素群ごとに、異方性の方向または強さのうち少なくとも一方を、ランダムに変更した前記画素選択条件を決定することを特徴とする画像処理装置。
【請求項８】
請求項１ないし７のいずれか一項に記載の画像処理装置において、
前記階調値付与部は、生成した前記画素群における階調値の総和が前記閾値を超えたとき、階調値と閾値とを差分した階調値を、前記画素群生成部が最後に選択した前記画素に戻すことを特徴とする画像処理装置。
【請求項９】
請求項１ないし８のいずれか一項に記載の画像処理装置において、
前記画素選択条件決定部は、生成した前記画素群の重心位置に基づいて画素を選択する画素選択条件を決定し、
前記階調値付与部は、前記画素群の重心に基づいて決定した画素に階調値を付与することを特徴とする画像処理装置。
【請求項１０】
画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理方法であって、
前記画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて前記入力データの画素を次々に選択することにより、画素群を生成する画素群生成ステップと、
生成した前記画素群ごとに、前記画素群の所定の画素に対して所定の階調値を付与する階調値付与ステップとを備え、
前記画素群生成ステップは、前記閾値または前記画素選択条件の少なくとも一方を、前記画素群ごとに変更することを特徴とする画像処理方法。
【請求項１１】
画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理プログラムであって、
コンピュータを、
前記画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて前記入力データの画素を次々に選択することにより、画素群を生成すると共に、前記閾値または前記画素選択条件の少なくとも一方を、前記画素群ごとに変更する画素群生成部、
生成した前記画素群ごとに、前記画素群の所定の画素に対して所定の階調値を付与する階調値付与部、として機能させることを特徴とする画像処理プログラム。
【請求項１２】
請求項１１に記載の画像処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンタなどの画像出力装置において、入力画像の階調データに対して所定の階調変換を行い、画質に優れた出力画像を取得する画像処理技術に関する。
【背景技術】
【０００２】
従来より、レーザープリンタやインクジェットプリンタなど画像出力装置では、入力画像の階調データを画素ごとに所定の閾値で２値化を行うことによって、所定の階調値が付与された画素の位置に、所定の大きさのドットを形成していた。このようにして、ドットを印刷用紙上に形成することにより印刷が行われ、出力画像を印刷物として出力することが行われている。ここで、多値の階調データを、２値化した階調データに変換する処理のことをハーフトーン処理と一般に称している。
【０００３】
ハーフトーン処理については、形成するドットの位置によって、出力画像に、例えばドットが鎖状につながるなど、入力画像には存在しなかった特異パターンが発生することがある。そこで、このような特異パターンの発生を抑えるため、ドットのつながりを少なくする技術が特許文献１に開示されている。
【０００４】
【特許文献１】特開平１１−２７５２８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１におけるハーフトーン処理では、誤差拡散法における特異パターンの発生を抑えるため、複数の画素から構成されるセルを生成する際に、セルを構成する画素の探索を所定の探索順（特許文献１、図４参照）を記録したテーブルを用いて行う方法が提案されている。しかし、特許文献１にある画素の探索順では、テーブルに従って常に画素の右側の画素から選択するので、結果的に生成されるセルの形状に一定の偏りが生じ、歪んだ形となってしまう。そして、セル形状が歪むことにより、ドット間の距離にバラツキが発生し、粒状性が悪化する課題があった。
【０００６】
また、複数の色成分ごとにハーフトーン処理を行った後に、処理後の色成分を重ね合わせてカラー表示を行う場合であっては、セル形状が一定であり、またセルに含まれる画素数もほぼ一定となるため、各色成分ごとに所定の周期性を有した位置にドットが生成されることになる。このドットを重ね合わせたとき、各色成分のドットは互いの相対位置が比較的大きな領域ごとにずれることになる。このずれが発生した領域と、発生していない領域では色が異なるため、それぞれの領域の色の差が色ムラとなって現れる。この色ムラは各色成分のドットがもつ周期性が干渉して発生したモアレとみなすこともできる。この色ムラ（モアレ）は人間の視覚にとって不快なパターンであるため、画質の劣化につながる大きな課題となっていた。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明では、画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理装置であって、画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて入力データの画素を次々に選択することにより、画素群を生成する画素群生成部と、生成した画素群ごとに、画素群の所定の画素に対して所定の階調値を付与する階調値付与部とを備え、画素群生成部は、閾値または画素選択条件の少なくとも一方を、画素群ごとに変更することを要旨とする。
【０００８】
このようにすれば、生成される画素群（以下、「セル」と呼ぶ。）は、互いに、その大きさまたは形状の少なくとも一方が異なり、セルごとに、大きさまたは形状がバラツくことになる。例えば、入力画像に同じ大きさの多数のセルを敷き詰めるように生成して、セルの所定の位置に、階調値を付与することを考えると、同じ大きさのセルが規則的に並ぶことになり、生成されるドットの位置に周期性が生じる。しかし、セルの大きさまたは形状自体の少なくとも一方にバラツキを与えれば、各セルが生成される位置がバラツくことになるので、各セルの周期性を弱めることができる。したがって、各セルに所定の階調値を付与して生成するドットの位置の周期性が弱くなるので、複数の色成分を持つ画像を表示した際の干渉の発生を抑えることができ、色ムラのない視覚的に快適な出力画像を得ることができる。
【０００９】
ここで、画素群生成部は、画素群ごとに閾値の大きさを変更する制御を行う閾値制御部を有することが好ましい。
【００１０】
このようにすれば、閾値の大きさをセルごとに変化させることにより、セルに選択された画素の数が変化するので、セルの大きさが変化する。セルの大きさを変化することにより、セル間の距離がバラツくことになる。したがって、各セルの位置がバラツき、ドットを生成する位置の周期性が低減するので、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【００１１】
ここで、閾値制御部は、画素群の内に位置する画素の階調値に基づいて、閾値の大きさを変更する制御を行うことが好ましい。
【００１２】
このようにすれば、セル内に位置する画素の階調値に基づいて、セル内の画素の数、すなわち、セルの大きさをおおむね決定することができる。すなわち、画素ごとに不均一な階調値を有した入力画像を用いた場合であっても、生成されるセルの大きさをおおむね一定にすることができるので、画素の階調値の大小に関わらずおおむね一定の間隔で、ドットを生成することができる。したがって、ドットの分散性に優れ、滑らかに階調表現された出力画像を得ることができる。
なお、セル内の画素の階調値の平均値に基づいて、閾値を制御することがより望ましい。このようにすれば、セル内に含まれる画素の数を制御して、例えば一定にすることができる。もっとも、セル内の画素のうち、初めに選択した画素または重心に位置する画素など、所定の画素の階調値に基づいて閾値を制御するとしてもよい。
【００１３】
ここで、閾値制御部は、閾値の大きさにランダム性を付与する制御を行うことが好ましい。
【００１４】
このようにすれば、セル内の画素の数、すなわち、セルの大きさにランダム性が加わることによって、各セルの位置がランダムにバラツくので、階調値を付与する位置の周期性がさらに低減する。したがって、生成されるドットの位置の周期性が小さくなり、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【００１５】
ここで、画素群生成部は、画素群の内に位置する画素に基づいた位置を基準にして、画素群が異方性を有した形状となるように画素群生成部が選択する画素を決定する画素選択条件を、画素群ごとに決定する画素選択条件決定部を有することとしてもよい。
【００１６】
このようにすれば、画素選択条件に基づいてセルを生成することにより、セル形状に異方性をもたせることができる。ここで、異方性を有した形状とは、全方向に等方的である円形形状に比べて、所定の方向に偏りのある形状のことである。例えば、楕円形などがこれにあたる。セル形状に所定の方向に偏りが生じてしまうような場合であっても、この偏りを打ち消すように異方性を持たせた画素の選択を行うことにより、生成するドット位置の偏りを減少することができる。すなわち、セル形状が一定の方向に偏らないように、画素選択を行うことができる。したがって、生成されるドット位置の周期性が小さくなり、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【００１７】
ここで、画素選択条件決定部は、画素群のもつ異方性の方向または強さのうち少なくとも一方を、画素群ごとに変更した画素選択条件を決定することが好ましい。
【００１８】
このようにすれば、セルごとに画素選択条件がもつ異方性の方向または強さの少なくとも一方が異なるので、セルごとに形状がバラツくことになる。したがって、ドットを生成する位置の周期性が減少し、複数の色成分を持つ画像を表示した際に、視覚的にムラの少ない快適な出力画像を得ることができる。
【００１９】
ここで、画素選択条件決定部は、画素群ごとに、異方性の方向または強さのうち少なくとも一方を、ランダムに変更した画素選択条件を決定することが好ましい。
【００２０】
このようにすれば、セルごとに異方性の方向または強さがランダムなセル形状となる。すなわち、セル形状がランダムに変化することになる。そして、セル形状がランダムに変化することにより、生成されるセルの位置もランダムにバラツき、ドットを生成する位置がバラツくことになる。したがって、周期性が少なくなるため、複数の色成分を持つ画像を表示した際に、視覚的に快適な出力画像を得ることができる。
【００２１】
ここで、階調値付与部は、生成した画素群における階調値の総和が閾値を超えたとき、階調値と閾値とを差分した階調値を、画素群生成部が最後に選択した画素に戻すことが好ましい。
【００２２】
このようにすれば、閾値を超えたセルに最後に組み入れられた画素に、閾値を超えた分の階調値を戻しているため、入力データの階調値が失われることがなく、元の画像とほぼ同じ位置に階調値が残るため、入力データに忠実なドットを形成させることができる。
【００２３】
ここで、画素選択条件決定部は、生成した前記画素群の重心位置に基づいて画素を選択する画素選択条件を決定し、階調値付与部は、画素群の重心に基づいて決定した画素に階調値を付与することが好ましい。
【００２４】
このようにすれば、セルの生成処理に際して、常にセルの重心に基づいて画素を選択してセルに組み入れていくため、生成されるセルの形状はセルの重心を中心とした所定の形状をもつようになる。そして、その所定の形状の重心、すなわち、おおよそ中心位置に階調値を付与することとなる。したがって、例えば、画素ごとに均一な階調値をもつデータに対して階調変換を行い階調値を付与してドットを形成する場合、生成されたドット間の間隔がほぼ均一となる。こうして、生成されるドットの位置について分散性が良くなるので、快適な出力画像を得ることができる。
【００２５】
ここで、本発明は、画像処理方法とすることもできる。すなわち、本発明の画像処理方法は、画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理方法であって、画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて入力データの画素を次々に選択することにより、画素群を生成する画素群生成ステップと、生成した画素群ごとに、画素群の所定の画素に対して所定の階調値を付与する階調値付与ステップとを備え、画素群生成ステップは、閾値または画素選択条件の少なくとも一方を、画素群ごとに変更することを要旨とする。
【００２６】
ここで、本発明は、コンピュータに処理を行わせる画像処理プログラムまたは画像処理プログラムを記憶した記録媒体としてもよい。すなわち、本発明の画像処理プログラムは、画素ごとに、多数の階調値のうちいずれかの階調値をもつ入力データに対して階調変換を行い、ドットを生成するための所定の階調値を付与する画像処理プログラムであって、コンピュータを、画素の階調値の総和が閾値以上となるまで、所定の画素選択条件に基づいて入力データの画素を次々に選択することにより、画素群を生成すると共に、画素群生成部は、閾値または画素選択条件の少なくとも一方を、画素群ごとに変更する画素群生成部、生成した画素群ごとに、画素群の所定の画素に対して所定の階調値を付与する階調値付与部、として機能させることを要旨とする。また、このプログラムを記録した記録媒体としては、フレキシブルディスクやＣＤ−ＲＯＭ、ＩＣカード、パンチカードなど、コンピュータが読み取り可能な種々の媒体を利用することができる。
【発明を実施するための最良の形態】
【００２７】
（第１の実施形態）
以下、本発明を具体化した第１の実施形態を図面に従って説明する。
【００２８】
図１は、本発明が適用されるシステム全体を示す構成図である。本システムは、全体としてホストコンピュータ１０と、画像出力装置２０とを備えている。
【００２９】
ホストコンピュータ１０は、アプリケーション部１１とラスタライズ部１２とを備えている。アプリケーション部１１は、文字データ、図形データ、ビットマップデータ等の入力画像を印刷対象として生成する。例えば、ホストコンピュータ１０でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどを生成する。そして生成したこれらのデータを、ラスタライズ部１２へ出力する。もっとも、ホストコンピュータ１０は、スキャナなどの画像入力装置（図示せず）から出力されるデータを受け付け、このデータをアプリケーション部１１が生成するデータとしてラスタライズ部１２へ出力するものとしても差し支えない。
【００３０】
ラスタライズ部１２は、アプリケーション部１１から出力された印刷対象のデータを画素ごと（又はドットごと）に８ビットの階調データに変換する。本実施形態では、Ｒ（レッド）、Ｇ（グリーン）、Ｂ（ブルー）の色毎で、画素ごとに８ビットの階調データを出力する。したがって、出力される階調データは、画素ごとに“０”から“２５５”までの２５６種類の値（階調値）を有することになる。ラスタライズ部１２における階調データの生成処理は、実際にはホストコンピュータ１０に実装されたドライバによって行われる。ラスタライズ部１２から出力される階調データは、画像出力装置２０に出力される。
【００３１】
画像出力装置２０は、画像処理部３０と印刷エンジン４０とを備えている。画像処理部３０では、ホストコンピュータ１０から出力された階調データに対して、まず色補正処理および色変換処理を行ったのち、ハーフトーン処理、パルス幅変調処理を行い、処理後のデータを印刷エンジン４０に出力する。
【００３２】
画像処理部３０は、大別して、色補正・色変換部３１と、ハーフトーン処理部（階調変換手段）３３と、パルス幅変調部３４と、を有している。
【００３３】
色補正・色変換部３１は、ホストコンピュータ１０より入力される２５６種類の階調値を有するＲＧＢ各８ビット（計２４ビット）の階調データを受け取り、印刷エンジン４０にて実際に印刷された印刷物が良好な色を表現できるように、色補正表３２を用いてＲＧＢの階調データの色補正処理を行う。その後、補正したＲＧＢの階調データを、ＣＭＹＫの階調データに変換する色変換処理を行う。ここで、Ｃはシアン、Ｍはマゼンタ、Ｙはイエロー、Ｋはブラックを示している。色変換処理を終えると、ＣＭＹＫの階調データをハーフトーン処理部３３に出力する。
【００３４】
ハーフトーン処理部３３は、色補正・色変換部３１から入力されたＣＭＹＫの階調データに対して、所定の種類の階調値をもつ量子化データ（２値あるいは４値などの多値の値）に変換し、その量子化データを出力する。本実施形態では、ハーフトーン処理として、複数の画素からなるセル（画素群）の重心に基づいて画素を新たに選択してセルを構成し、その重心にドットを生成させる処理（Ｃｉｒｃｕｌａｒ  Ｃｅｌｌ法、以下ＣＣ法）を用いる。ＣＣ法の具体的な内容については後述する。
【００３５】
図２は、ハーフトーン処理部３３の構成を示した図である。このように、ハーフトーン処理部３３は、セル内の画素の階調値の重心を用いてセルを生成する画素群生成部３５と、セルの重心に階調値を付与してドットを生成する階調値付与部３６と、を備えている。また、画素群生成部３５には、画素群を生成する際に用いる閾値の大きさを制御する閾値制御処理を行う閾値制御部３７を有している。閾値制御処理の詳細については、後述する。
【００３６】
図１に示すパルス幅変調部３４は、ハーフトーン処理部３３から出力された量子化データを入力し、この量子化データの値に対応して所定のパルス幅をもったレーザ駆動パルスを、駆動データとして生成する。そして、この駆動データを印刷エンジン４０に出力する。
【００３７】
印刷エンジン４０は、レーザドライバ４１と、レーザーダイオード（ＬＤ）４２とを備えている。レーザドライバ４１は、入力された駆動データから、レーザーダイオード４２を駆動する制御データを生成し、レーザーダイオード４２に出力する。レーザーダイオード４２は、レーザドライバ４１から出力された制御データに基づいて駆動され、さらに図示しない露光ユニット、感光ドラムおよび転写ベルトなどが駆動されて、実際に印刷用紙等の記録媒体にホストコンピュータ１０からのデータが印刷されることになる。
【００３８】
次に、図３を参照して、画像出力装置２０の具体的構成について説明する。ここで、図１の画像出力装置２０のうち、色補正・色変換部３１、色補正表３２、ハーフトーン処理部３３およびパルス幅変調部３４は、図３におけるＣＰＵ２２、ハードディスク２３、ＲＯＭ２４、およびＲＡＭ２５に対応している。画像出力装置２０は、全体として、入力インターフェース（Ｉ／Ｆ）２１、ＣＰＵ２２、ハードディスク２３、ＲＯＭ２４、ＲＡＭ２５、印刷エンジン４０とを備えており、それらはバスを介して互いに接続されている。入力Ｉ／Ｆ２１は、ホストコンピュータ１０と画像出力装置２０とのインターフェースの役割を果たす。入力Ｉ／Ｆ２１には、所定の伝送方式により伝送されたホストコンピュータ１０からのＲＧＢ階調データが入力され、画像出力装置２０が処理を行うことのできるデータに変換される。ここで、ＲＧＢ階調データは、一旦ＲＡＭ２５に格納される。
【００３９】
ＣＰＵ２２は、ハードディスク２３またはＲＯＭ２４に格納されたプログラムを読み出して、後述するハーフトーン処理等の各種処理を行う。これらの処理を記録したプログラムは、予めハードディスク２３やＲＯＭ２４に格納されていることとしてもよいし、例えばＣＤ−ＲＯＭなどのコンピュータが読み取り可能な記録媒体によって外部から供給され、図示しないＣＤ−Ｒ／ＲＷドライブを介して画像出力装置２０に備えられたハードディスク２３に記憶することによって格納されるものとしてもよい。もとより、インターネットなどのネットワーク手段を介して、プログラムを供給するサーバー等にアクセスし、データをダウンロードすることによって格納されるものとしてもよい。
【００４０】
本画像出力装置２０は、所定のオペレーションシステムの下、ＣＰＵ２２が、ハードディスク２３、ＲＯＭ２４、ＲＡＭ２５にアクセスして動作することによって、後述するハーフトーン処理を行うハーフトーン処理部３３として機能する。
【００４１】
ＲＡＭ２５は、ＣＰＵ２２の制御によって実行される各処理のワーキングメモリとしての役割を果たし、そのバッファ領域に処理に必要な各種データを格納する。また、ＲＡＭ２５は、印刷エンジン４０のレーザドライバ４１を駆動するための駆動データも格納する。
【００４２】
印刷エンジン４０は、図１の印刷エンジンと同様の構成で、ＣＰＵ２２の制御によりＲＡＭ２５に格納された駆動データを入力し、上述した印刷処理を行う。
【００４３】
本実施形態におけるハーフトーン処理を実行するプログラムについて説明する。図４は、ハーフトーン処理を行うプログラムの処理の流れを示すフローチャートである。このプログラムは、画像出力装置２０内部に備わるＲＡＭ２５に格納され、所定のオペレーションシステムの下で、ＣＰＵ２２が実行する。プログラムが実行されると、画像出力装置２０の各構成要素が動作し、それぞれの機能を果たすことができる。なお、図４のフローチャートにおいて、ステップＳ１０およびステップＳ２０の処理は色補正・色変換部３１が行い、ステップ３０の処理はハーフトーン処理部３３、ステップＳ４０の処理はパルス幅変調部３４が行う。
【００４４】
処理が開始されると、まずステップＳ１０にて、色補正・色変換部３１は、ホストコンピュータ１０が出力した画像データを受け付ける入力処理を行う。
【００４５】
次に、ステップＳ２０において、色補正・色変換部３１は色補正・色変換処理を行う。ここでは、色補正・色変換部３１が、ホストコンピュータ１０より出力された画像データ（ＲＧＢデータ）を取得し、色補正表３２に基づいて、色補正を行う（色補正処理）。このとき、実際には、ホストコンピュータ１０から入力Ｉ／Ｆ２１を介してＲＡＭ２５に取り込むことで画像データの読み込みが行われる。また、このステップでは、色補正を行った画像データに対してＲＧＢデータからＣＭＹＫデータへの色座標変換を行う処理（色変換処理）も行っている。色変換処理は通常所定の色変換表（図示せず）を用いて行われる。ここでは、入力した画像データをＣ（シアン）・Ｍ（マゼンタ）・Ｙ（イエロー）・Ｋ（ブラック）の各色について、８ビット（２５６階調）で表現された階調データを取得し、ＣＰＵ２２は、ＲＡＭ２５の所定のバッファ領域に格納する。
【００４６】
次に、ステップＳ３０において、ハーフトーン処理部３３は、ＣＣ法によるハーフトーン処理を行う。ここで、ステップＳ２０において取得した階調データの各色のデータを、それぞれ（ハーフトーン処理部に対する）入力データと呼ぶことにする。そして、各入力データに対してハーフトーン処理を行う。ハーフトーン処理の詳細な内容については、後述する。
【００４７】
ＣＣ法によるハーフトーン処理を、階調データＣＭＹＫの各色全てについて実施するとステップＳ３０を終了し、各色ごとに“０”または“２５５”の階調値を有する量子化データを出力する。
【００４８】
ステップＳ４０では、階調値“２５５”の量子化データが付与された画素の位置にドットを形成するため、パルス幅変調部３４は、所定の駆動パルス幅を持ったレーザ駆動パルスを駆動データとして生成する。そして、この駆動データを印刷エンジン４０に出力することによって所定の色と大きさのドットを印刷用紙などに形成して印刷物として出力する。このようにして、所定のドットにより印刷対象のデータを再現した印刷物を得ることができる。
【００４９】
ここで、本実施形態にある画像出力装置２０は、ハーフトーン処理を行うにあたって、ハーフトーン処理部３３に備わる閾値制御部３７により、セル生成の際に用いる閾値の大小を変化させて生成されるセルの大きさを制御することとしている。以下に、図４のステップＳ３０において、ハーフトーン処理において閾値制御を行うとした処理方法について説明する。
【００５０】
図５は、閾値制御を行うＣＣ法によるハーフトーン処理の処理の流れを示すフローチャートである。以下に、図５のフローチャートに従って処理の説明を行う。なお、ステップＳ１００〜Ｓ１２０の処理は画素群生成部３５が行うものであるが、特に、ステップＳ１１０の処理は、画素群生成部３５にある閾値制御部３７が行っている。ステップＳ１２５〜Ｓ１５０の処理は階調値付与部３６が行う。また、ハーフトーン処理を行うに際して、ＣＰＵ２２は、ＲＡＭ２５の記憶領域上に、入力データの階調値を記憶する入力バッファ領域（図示なし）とは別に、入力データの画素ごとに処理が行われたか否かを判別するための判別用バッファ領域（図示なし）を設けている。そして、ハーフトーン処理が行われていない画素（以下、「未処理画素」と呼ぶ）に対応する判別用バッファ領域には“０”を示すビットが割り当てられ、処理が行われた画素（以下、「処理済画素」と呼ぶ）に対応する判別用バッファ領域には“１”を示すビットを割り当てる。このようにして、いずれの画素について処理済みであるかの判別は、ＣＰＵ２２がＲＡＭ２５の判別用バッファ領域を参照することによって都度行い、処理済みの画素に更に処理を行うことがないようにしている。また、ＲＡＭ２５の記憶領域上には、ハーフトーン処理を行うことにより取得した量子化データを記憶する出力バッファ領域（図示なし）を設けている。
【００５１】
ハーフトーン処理を開始すると、始めにステップＳ１００において、ＣＰＵ２２は、ハードディスク２３またはＲＯＭ２４に格納されたプログラムを読み出して、入力画像の読み込みを行う処理を行う。入力画像の読み込みは、ホストコンピュータ１０から入力データを入力Ｉ／Ｆ２１を介してＲＡＭ２５に取り込むことで行う。このとき、ＣＭＹＫ各色成分の入力データは、ＲＡＭ２５の入力バッファ領域に格納される。
【００５２】
次に、ステップＳ１０５では、ＣＰＵ２２は、セル生成の最初の未処理画素となる画素を探索し、初期画素に決定する。このとき、探索する順番としては、入力画像の左上から主走査方向（Ｘ方向）に探索した後、副走査方向に１ラインずらして再び主走査方向の探索を行い、これを繰り返すようにして未処理画素を探索する。実際には、ＲＡＭ２５の判別用バッファ領域を参照して、未処理画素であることを示す“０”が格納されている画素を探索して行う。未処理画素がある場合（Ｙｅｓ）は、この未処理画素を初期画素に設定し、ＲＡＭ２５の判別用バッファ領域にその階調値と処理済画素であることを示す“１”を記憶して、ステップＳ１１０に進む。未処理画素がない場合（Ｎｏ）はステップＳ１５０に進む。
【００５３】
ステップＳ１１０では、閾値制御処理を行う。閾値制御処理とは、セル内の画素の階調値に基づいて、ハーフトーン処理に用いる閾値の大きさを決定する処理のことである。以下、図６に示した閾値制御処理の処理の流れを示したフローチャートに従って、閾値制御処理について説明する。
【００５４】
閾値制御処理を開始すると、ステップＳ２００において、ＣＰＵ２２は、初期画素周辺にある画素の階調値を平均して、平均階調値Ｖａを算出する。本実施形態では、初期画素を中心とした３×３の領域内にある未処理画素の階調値を平均して、次式により平均階調値Ｖａを算出することとしている。もっとも、これより大きい領域を設定し、平均階調値Ｖａを求めるとしてもよい。
Ｖａ＝（ΣiＶi）／Ｎ  …（１）
ここで、Ｖは階調値、ｉは初期画素周辺にある画素を示す数、Ｎは３×３の領域内の未処理画素の数である。
【００５５】
次に、ステップＳ２１０では、ＣＰＵ２２は、ＲＯＭ２４より所定の変換テーブルを読み出し、ステップＳ２００で算出した平均階調値Ｖａに基づいて平均閾値Ｒａを決定する。ここで用いる変換テーブルとは、図７に示した平均値Ｖａと平均閾値Ｒａとの関係を示したテーブルである。図７に示した関係は、変換テーブルとしてＲＯＭ２４に記憶されており、ステップＳ２１０では、ＣＰＵ２２が、この変換テーブルを参照することにより平均閾値Ｒａを取得する。取得した平均閾値Ｒａは、ＲＡＭ２５に格納する。
【００５６】
ここで、図７について説明する。図７では、平均階調値Ｖａ（横軸）と平均閾値Ｒａ（縦軸）との関係が示されている。そして、その関係は、平均階調値Ｖａが小さい領域では、平均階調値Ｖａが大きくなるにつれて、これに比例して平均閾値Ｒａも大きくなるようにしている。そして、平均階調値Ｖａが所定の値となったところで平均閾値Ｒａの値が最大値をとり、以降は平均階調値Ｖａにかかわらず平均閾値Ｒａは一定の値となっている。そして、これらの平均階調値Ｖａと平均閾値Ｒａとの関係が連続して変化するようになっている。例えば、平均階調値Ｖａが“１００”のときは、図７によれば、平均閾値Ｒａの値としてとりうる最大値である“１０２０”が平均閾値Ｒａの値となる。ここで、レーザプリンタでは、露光ユニット内のレーザ光を感光体ドラムに照射することで潜像を形成している。しかし、１画素分のドットを形成させるときレーザ光の特質により正確に１画素分の大きさのドットを形成させることができない。すなわち、レーザー光の光量分布は一定ではなく、隣接画素から除々に光量が多くなり照射すべき画素内で最も高い光量となり、また照射すべき画素から離れるにつれ、除々に少ない光量となるため、隣接画素に跨って光が照射されてしまうのである。例えば、１ドットおきにドットを生成する場合には、この漏れ光の影響を多く受けることになる。一方、複数のドットを隣接して生成することにより、隣接画素への漏れ光の影響が少なくなる。さらに、照射した光量と、感光体表面に付着するトナー量の間には非線形があり、安定して生成できるドットサイズは、印刷エンジンごとに異なるという特性を持っている。
以上に述べた理由により、レーザープリンタには、ハードウェア特性に依存して、各階調を表現するのに最適な、各ドットのサイズ、すなわち、各ドットを構成する互いに隣接した画素の数が存在する。本実施形態では、図７において平均閾値Ｒａに最大値を設けることによって、平均階調値Ｖａに対応して、レーザプリンタのハードウェアの構造上から最適なドットサイズ（画素数）に対応した平均閾値Ｒａをとるように制御している。図７では、レーザープリンタが、ドットの有無に対応して“０”および“２５５”の２値の階調値を表現できることとから、隣接して生成する最適なドットサイズを“４”として、４画素分に相当する“１０２０（＝４×２５５）”が、平均閾値Ｒａの最大値となるようにしている。
【００５７】
次に、ステップＳ２２０では、ＣＰＵ２２は、ＲＡＭ２５より読み出した平均閾値Ｒａに基づいて、次式に従ってランダム成分を加えた閾値Ｒを算出する。
Ｎｃ＝ｉｎｔ（Ｒａ／Ｖｓ＋Ｎｗ×ｒａｎｄ（）＋０．５）  …（２）
Ｒ＝Ｎｃ×Ｖｓ  …（３）
ここで、ｉｎｔ（）は、小数点以下の値を切り捨て整数を出力する関数、ｒａｎｄ（）は、“１”〜“−１”の間のランダムな値をとる乱数を出力する関数である。Ｖｓは、ハードウェア上ドットを生成することに最適な階調値である。上述したように、レーザープリンタでは、ドットの有無に対応して“０”および“２５５”の２値の階調値を表現できることから、本実施形態ではＶｓを階調値“２５５”としている。式（３）に示したように、Ｎｃは、閾値Ｒの階調値“Ｖｓ”に対する係数であり、後述するセルＣＬごとに生成する１ドットを構成する画素の数に対応する。Ｎｗは、Ｎｃの値をランダムに変化させるふり幅を決定する値である。さらに、式（２）において、０．５を加えた値に対してｉｎｔ（）演算を行うとしたことにより四捨五入の演算を行い、閾値ＲがＶｓの整数倍になるようにしている。
【００５８】
このように、本実施形態では、Ｖｓは“２５５”であり、Ｎｗを“３”としたので、以下に示す式（２’）および式（３’）が得られる。
Ｎｃ＝ｉｎｔ（Ｒａ／２５５＋３×ｒａｎｄ（）＋０．５）  …（２’）
Ｒ＝Ｎｃ×２５５  …（３’）
したがって、式（２’）および式（３’）により、閾値Ｒは、平均閾値Ｒａを中心としてバラツキながら、Ｎｃが整数となるような閾値Ｒが得られることになる。例えば、平均閾値Ｒａが“１０２０（＝４×２５５）”であった場合、Ｎｃの値は、１〜７の各整数値をとることになる。また、例えば、平均閾値Ｒａが、“９１８（＝３．６×２５５）”の場合も、やはり、Ｎｃの値は１〜７のうちいずれかの整数値をとることになる。さらに、この場合では、式（２’）に基づきＮｃのとる各値の発生確率が各々異なることになるので、結局、閾値Ｒの期待値は平均閾値Ｒａの値に一致することになる。このように、式（２’）および式（３’）を用いることにより、閾値Ｒは、２５５の倍数でありながら、結果として閾値Ｒの期待値が図７で求めた平均閾値Ｒａに一致するようにしている。すなわち、閾値Ｒは、平均閾値Ｒａを中心としてランダムに変化する値となる。なお、式（２’）および式（３’）の演算式はＲＯＭ２４に格納されており、ＣＰＵ２２が必要なときに呼び出すことによって演算を行うようにしている。そして、ＣＰＵ２２は、求めた閾値Ｒの値をＲＡＭ２５に格納して、記憶する。
【００５９】
次に、ステップＳ２３０では、ＣＰＵ２２は、閾値Ｒの値が“２５５”未満であるか否かを判断する。“２５５”未満の場合（Ｙｅｓ）ステップＳ２４０に進む。“２５５”以上であった場合（Ｎｏ）、閾値制御処理を終了する。
【００６０】
ステップＳ２４０では、ＣＰＵ２２は、“２５５”未満である閾値Ｒの値を下限値の値に置き換える設定を行う。ここで、本実施形態では、下限値を“２５５”としている。例えば、ステップＳ２１０において、平均閾値Ｒａとして“６６３（＝２．６×２５５）”が得られた場合、式（２’）および式（３’）に基づいて演算を行うと、閾値Ｒが負の値または“０”となる可能性がある。正の階調値をもっている階調データに対して、セルＣＬを拡大する際に用いる閾値Ｒが、負または“０”であった場合、適切にセルＣＬを拡大することができないので、この状態を回避する必要がある。したがって、ステップＳ２４０において、“２５５”未満の値である閾値Ｒを下限値である“２５５”に置き換える処理を行う。実際には、ＣＰＵ２２は、ＲＡＭ２５に記憶されている閾値Ｒの値に上書きして、閾値Ｒとしての階調値“２５５”を格納するようにして処理を行っている。
本実施形態では、下限値を“２５５”としたが、レーザーエンジンの特性上、安定して出力できるドットサイズに下限値が存在することがある。例えば、レーザーエンジンの特性を解析した結果、安定して出力可能なドットサイズの下限値が２画素の場合は、閾値Ｒの下限値を“５１０”として設定するとよい。その場合、ステップＳ２４０においては、”５１０”未満の値である閾値Ｒを、下限値である“５１０”に置き換える処理を行う。ステップＳ２４０を終えると、閾値制御処理を終了する。
【００６１】
閾値制御処理を終了すると、図５のフローチャートに戻って、ステップＳ１１５において、セルＣＬの拡大を終了するか否かを判断する。実際には、ＣＰＵ２２は、セル内の画素の階調値の合計が閾値Ｒを超えているか否かによって判断する。ただし、ステップＳ１１０より処理が移行している場合には、初期画素のみをセル内の画素として判断を行う。具体的には、ステップＳ２２０でＲＡＭ２５に格納した閾値Ｒを読出し、セル内の画素の階調値と比較することにより処理を行う。ステップＳ１１５において、セル内の画素の階調値の合計が閾値Ｒよりも小さい場合（Ｎｏ）はステップＳ１２０に進み、セルＣＬを拡大する処理を行う。閾値Ｒと同じまたは大きい場合（Ｙｅｓ）は、セルＣＬを拡大する処理を終了し、ステップＳ１２５に進む。
【００６２】
ステップＳ１２０では、ステップＳ１１５において、セル内の階調値の合計が閾値Ｒより小さいと判断された場合（Ｎｏ）について、ＣＰＵ２２は、新たな未処理画素をセルＣＬに組み入れてセルＣＬを拡大する処理を行う。ここで、本実施形態の未処理画素の選択には、セルＣＬの重心ＧＣを利用して、重心ＧＣから最も近い画素を選択することとしている。すなわち、重心ＧＣからの変位が（ｘ，ｙ）であるとして、次式により求められる距離Ｌが最も小さくなる画素を選択する。
Ｌ＝（ｘ2＋ｙ2）1/2  …（４）
式（４）の演算式はＲＯＭ２４に格納され、ＣＰＵ２２が必要なときに呼び出すことによって、任意に用いるようにしている。このように、重心ＧＣから最も近い画素を選択することによって、最終的に生成されるセルＣＬの形状は、円状に近い形状となる。
【００６３】
ＣＰＵ２２は、ＲＡＭ２５のバッファ領域より初期画素の位置する画素の階調値と座標とを読み出し、新たな未処理画素を組み入れたときのセル内の画素の重心ＧＣを演算する。ＣＰＵ２２は、具体的には、以下の演算式によりセルＣＬの重心ＧＣを求める。ここで、ｘGC，ｙGCはそれぞれ重心位置のｘ，ｙ座標である。
ｘGC＝｛｛（セルＣＬの重心ＧＣのｘ座標）×（セル内の画素の階調値合計）｝
＋｛（選択した未処理画素のｘ座標）×（選択した未処理画素の階調値）｝｝
／｛（セル内の画素の階調値合計）＋（選択した未処理画素の階調値）｝  …（５）
ｙGC＝｛｛（セルＣＬの重心ＧＣのｙ座標）×（セル内の画素の階調値合計）｝
＋｛（選択した未処理画素のｙ座標）×（選択した未処理画素の階調値）｝｝
／｛（セル内の画素の階調値合計）＋（選択した未処理画素の階調値）｝  …（６）
これらの演算式はＲＯＭ２４に格納され、ＣＰＵ２２が読み出して演算を行うことになる。もっとも、セルＣＬが初期画素のみからなる場合は、セルＣＬの重心ＧＣのｘ，ｙ座標は初期画素の座標と一致するため、初期画素の座標が用いられる。
【００６４】
また、セルＣＬの重心ＧＣおよびセル内の画素の階調値合計は、新たな未処理画素を組み入れるたび式（５）および式（６）により算出し、最新の値をＲＡＭ２５に記憶する。こうすることによって、新たな未処理画素を組み入れたとき式（５）および式（６）において、新たな未処理画素を組み入れる前の重心ＧＣおよび階調値合計を計算する必要がなくなり、ＲＡＭ２５から直接取得するので処理の高速化を図ることができる。そして、セルＣＬを拡大する処理を終えると、セル内の画素に対応するＲＡＭ２５の判別用バッファ領域に、処理済画素であることを示す“１”を格納する。
【００６５】
以上に述べたように、未処理画素を選択して新たにセルＣＬに組み入れる処理（ステップＳ１２０）は、ＣＰＵ２２がセル内の画素の重心ＧＣから最も近い距離にある画素を選択することによって行っている。しかし、重心ＧＣから等距離に複数の画素が存在する可能性がある。こうした場合、本実施形態では走査方向に探索される順に従ってＣＰＵ２２が画素を選択して、セルＣＬを拡大するようにしている。
【００６６】
次に、ステップＳ１２０を経てステップＳ１１５へ至っている場合、ＣＰＵ２２は、再びセル内の画素の階調値の合計が閾値Ｒを超えているか否かを判断する。すなわち、新たに選択した未処理画素の階調値を含めたセル内の画素の階調値合計が、所定の閾値未満であるか否かの判断を行う。閾値Ｒを超えていない場合（Ｎｏ）は、再びステップＳ１２０に進み、新たな未処理画素をセルＣＬに組み入れる処理を行う。閾値Ｒを超えている場合（Ｙｅｓ）は、ステップＳ１２５へ進む。
【００６７】
このように、ステップＳ１１５とＳ１２０の処理を繰り返すたびに、ＣＰＵ２２は、ステップＳ１２０で演算したセル内にある画素の階調値の合計が、閾値Ｒと等しいか否かを判断しながら閾値Ｒに達するまでセルＣＬを拡大していくことになる。
【００６８】
ステップＳ１２５では、セル内にある画素の階調値の合計が閾値Ｒに等しいか否かを判断する。上述したように、ＲＡＭ２５に記憶されているステップＳ１２０で演算した値を参照することによりセル内にある画素の階調値の合計を取得し、閾値Ｒに等しい場合（Ｙｅｓ）、ステップＳ１３０へ進む。階調値の合計が閾値Ｒに等しくない場合（Ｎｏ）、ステップＳ１３５へ進む。
【００６９】
ステップＳ１３０では、重心ＧＣの位置を算出する。すなわち、ＣＰＵ２２は、選択した未処理画素を含めセル内の画素について、再び重心ＧＣの演算を行う。具体的なＣＰＵ２２の演算は、上述した式（５）および式（６）の演算式をＲＯＭ２４より読み出して、行うことになる。そして、このステップＳ１３０で演算した重心ＧＣの位置は、ＣＰＵ２２の制御によってＲＡＭ２５のバッファ領域に記憶されたセルＣＬの階調値の合計とともに格納される。このとき、ステップＳ１１０およびＳ１１５で用いた閾値Ｒと同等の階調値を付与する。ステップＳ１３０の処理を終えると、次にステップＳ１４５へ進む。
【００７０】
ステップＳ１３５では、閾値Ｒを超える階調値分を無視してセルＣＬの重心ＧＣを算出する処理を行う。このためまず、ＣＰＵ２２は、ステップＳ１１０で求めたセル内の階調値合計から閾値Ｒの値を減算する演算を行う。この演算値を戻りデータと呼ぶ。
【００７１】
このときの重心ＧＣの演算は、戻りデータ（ステップＳ１３５の演算値）を用いて以下の演算式により求められる。
【００７２】
ｘGC＝｛｛（セルＣＬの重心ＧＣのｘ座標）×（セル内の画素の階調値合計）｝
−｛（最後に選択した未処理画素のｘ座標）×（ステップＳ１３５の演算値）｝｝
／｛（セル内の画素の階調値合計）−（ステップＳ１３５の演算値）｝  …（７）
ｙGC＝｛｛（セルＣＬの重心ＧＣのｙ座標）×（セル内の画素の階調値合計）｝
−｛（最後に選択した未処理画素のｙ座標）×（ステップＳ１３５の演算値）｝｝
／｛（セル内の画素の階調値合計）−（ステップＳ１３５の演算値）｝  …（８）
ここで、式（５）、式（６）とは異なる点として、セル内にある画素の階調値をそのまま用いるのではなく、階調値の過剰分である戻りデータを引くことでセル内の階調値の合計が閾値Ｒと同じ値になるようにしている。
【００７３】
この演算式は、式（５）および式（６）と同様に予めＲＯＭ２４に格納されており、ＣＰＵ２２が、本ステップを実行する際にＲＯＭ２４から読み出すことによって実行される。ここでは、最終的にステップＳ１１５で選択した画素の階調値は、これまで演算した階調値の合計が、閾値Ｒと等しくなるように演算して、それをもとに重心ＧＣ位置を求めることになる。そしてＣＰＵ２２は、演算した重心ＧＣの位置データを再びＲＡＭ２５のバッファ領域に書き込む。
【００７４】
次に、ステップＳ１４０では、ＣＰＵ２２は、戻りデータを再び、最後にセルＣＬに選択した画素の階調値を記憶する入力バッファ領域に書き込む。これにより、戻りデータが当該画素の階調値に格納される。なお、このとき、階調値を戻された画素は、ＲＡＭ２５の処理済み画素を示している判別用バッファ領域には“０”が付与されて、戻りデータの階調をもつ未処理画素として扱われる。すなわち、階調値を戻された画素は、再び階調値を有するので、再びステップＳ１０５〜Ｓ１２０の処理の対象になる。このように、戻りデータは、戻りデータを発生した元の画素に再び格納して階調値とすることによって、セル内の階調値の合計が閾値を超えた場合であっても、入力データ全体としての階調値が保たれたドット分布が得られることになる。したがって、入力データに忠実なドット分布を形成することができる。
【００７５】
ステップＳ１４５では、重心ＧＣに位置する画素に、階調値の付与を行うドット生成処理を行う。以下、図８のフローチャートを用いて、ドット生成処理を説明する。
【００７６】
ドット生成処理では、閾値Ｒに対応したドットを生成する場合において、生成するドットを構成する画素の数および座標を決定する。ドット生成処理を開始すると、始めに、ステップＳ３００において、ドットを構成する画素の数Ｎｄを決定する。ここでは、閾値Ｒの値および生成するドットに相当する階調値に基づいて、次式により生成するドットを構成する画素の数Ｎｄを決定することができる。本実施形態では、生成するドットに含まれる各画素の階調値は“２５５”としているので、閾値Ｒを“２５５”で除算した値、すなわち、Ｎｃが生成するドットを構成する画素の数になる。もっとも、ハードウェア上の制約に合わせて、ドットを生成するために最適な各画素の階調値をＶｓとすればよく、例えば階調値“１２７”が最適な場合、閾値Ｒを“１２７”で除算して、ドットを構成する画素の数Ｎｄを求めてもよい。
Ｎｄ＝Ｒ／Ｖｓ
＝Ｒ／２５５＝Ｎｃ  …（９）
【００７７】
次に、ステップＳ３１０において、ステップＳ１３０またはステップＳ１３５で求めたセル内の画素の階調値の重心ＧＣに基づいて、ドットを生成する座標を決定する。ここでは、重心ＧＣの座標は、式（５）〜（８）の演算の結果、端数（小数部分）を有した値となっている。しかし、以上の処理でいう画素とは、印刷エンジンがドットを生成することのできる最小単位の座標を示したものであるので、この最小単位より小さな単位でドットの座標を制御することができない。そこで、未処理画素のうち、重心位置ＧＣから最も近い画素を選択して、ドットを生成する画素に決定する。実際には、ＣＰＵ２２は、セルＣＬ内にある画素について、式（４）により重心ＧＣからの距離Ｌを演算する。そして、セル内にある画素のうち距離Ｌが最も小さくなる画素を判断し、その画素をドットを生成する画素に選択する。
【００７８】
次に、ステップＳ３２０において、選択した画素がＮｄ個となっているか否かを判断する。ドットを生成する位置を決定した画素の数がＮｄ個より少ない場合（Ｎｏ）、ステップＳ３３０へ進む。ドットを生成する（階調値“２５５”を出力する）位置を決定した画素の数がＮｄであった場合（Ｙｅｓ）、ステップＳ３４０へ進む。。
【００７９】
ステップＳ３３０では、ステップＳ３１０で求めたセル内の画素についての重心ＧＣからの距離Ｌを参照して、１つ先に選択した画素の次に重心より近い画素を選択し、更にドットを構成する（階調値“２５５”を出力する）画素の座標を決定する処理を行う。このとき、既に選択した画素を重ねて選択することのないように、先に選択した画素の次に距離Ｌが小さい画素を選択する。ステップＳ３３０の処理を終えると、ステップＳ３２０へ進む。
【００８０】
こうして、ステップＳ３２０およびステップＳ３３０の処理を繰り返し行うことによって、ドットを構成するＮｄ個の画素が選択される。
【００８１】
ステップＳ３４０では、ステップＳ３１０において選択された画素にドットを生成する。実際には、ＣＰＵ２２は、ドットを生成する画素に対応するＲＡＭ２５の出力バッファ領域に“２５５”の量子化データを格納させる。ここで、選択した画素以外の画素に対応する出力バッファ領域には、ドットを生成しないので“０”が格納される。ステップＳ３４０を終えると、ドット生成処理を終了する。
【００８２】
図５のフローチャートに戻り、ステップＳ１４５におけるドット生成処理を終了すると、次にステップＳ１０５へ進み、再び未処理画素を探索する。ステップＳ１０５において、未処理画素がないと判断された場合（Ｎｏ）、ステップＳ１５０へ進む。
【００８３】
ステップＳ１５０では、ＣＰＵ２２は、ハーフトーン処理によって生成した量子化データを出力バッファ領域より読み取り、ドットのオンオフに対応した量子化データとして、印刷エンジン４０に出力する。ステップＳ１５０を終えると、ハーフトーン処理を終了する。
【００８４】
以上で述べた処理を行うことによって、平均閾値Ｒａを中心としてランダムに変化させた閾値Ｒを用いたＣＣ法によるハーフトーン処理を行い、ドットを生成することができる。次に、図９および図１０を用いて、本実施形態にあるハーフトーン処理の処理例について説明する。
【００８５】
図９は、図９（ａ）に示された３行（ｍ〜ｍ＋２）×４列（ｎ〜ｎ＋３）のマトリクスで表された入力データに対して、本実施形態にあるハーフトーン処理を施した場合の処理例を示した図である。なお、ここでは、３行×４列の入力データに対して、階調値“１００”が与えられた場合について説明を行うが、入力データの大きさはこれに限られることなく、実際に行われる処理ではより大きなデータに対して行うとするものである。
【００８６】
まず、図９（ａ）に示した入力データに対して、初期画素の探索順に従って、画素（ｎ，ｍ）を初期画素に設定する。
【００８７】
次に、ステップＳ２００で述べたように、初期画素の周辺３×３の領域に含まれる未処理画素より平均階調値Ｖａを算出する。図９（ａ）の例では、初期画素が入力データの左上端に位置しているので、初期画素を中心とした３×３の画素のうち、存在しない画素があるのでこれを無視して、画素（ｎ，ｍ）、画素（ｎ＋１，ｍ）、画素（ｎ，ｍ＋１）および画素（ｎ＋１，ｍ＋１）の４つの画素についての平均階調値Ｖａを算出する。図９（ａ）の例では、初期画素（ｎ，ｍ）について、平均階調値“１００”が求められる。
【００８８】
次に、ステップＳ２２０で述べたように、図７に示した変換テーブルを用いて、平均閾値Ｒａを取得する。ここでは、平均階調値Ｖａが“１００”であるので、これに対応する平均閾値Ｒａとして、“１０２０（＝４×２５５）”が取得されることになる。
【００８９】
次に、平均閾値Ｒａと式（２’）および式（３’）を用いて、閾値Ｒを取得する。ここでは、閾値Ｒをランダムに変化させた結果、閾値Ｒが“５１０（＝２×２５５）”になったものとして説明する。
【００９０】
次に、図９（ａ）において、初期画素である画素（ｎ，ｍ）をセルＣＬ１に組み入れて、セル内の画素の階調値の合計が、閾値Ｒ（＝５１０）より大きいか否かを判断する。ここでは、まだ、閾値Ｒより小さいので、次にセルＣＬ１を拡大する。
【００９１】
セルＣＬを拡大する際には、ステップＳ１２０で述べたように重心ＧＣより最も近い画素を選択する。図９（ａ）では、セルＣＬ１（＝画素（ｎ，ｍ））の重心ＧＣより最も近い画素として、画素（ｎ＋１，ｍ）および画素（ｎ，ｍ＋１）の２つの画素が挙げられるが、この場合、初期画素の探索順にしたがって優先順位を定めるとよい。したがって、ここでは画素（ｎ＋１，ｍ）が選択される。
【００９２】
画素（ｎ＋１，ｍ）がセルＣＬ１に組み入れられると、図９（ｂ）に示した状態となる。ここで、セルＣＬ１内の階調値の合計は“２００（＝１００＋１００）”であり、閾値Ｒに満たないので、セルＣＬ１の重心に基づいて、更にセルＣＬ１を拡大する処理を行う。
【００９３】
次に、画素（ｎ，ｍ＋１）がセルＣＬ１に組み入れられる（図９（ｃ）参照）。このときの、セル内の画素の合計は“３００”であるので、更にセルＣＬ１を拡大する。
【００９４】
次に、画素（ｎ＋１，ｍ＋１）がセルＣＬ１に組み入れられる（図９（ｄ）参照）。このときの、セル内の画素の合計は“４００”であるので、更にセルＣＬ１を拡大する。
【００９５】
次に、画素（ｎ＋２，ｍ）がセルＣＬ１に組み入れられる（図９（ｅ）参照）。このときの、セル内の画素の合計は“５００”であるので、更にセルＣＬ１を拡大する。
【００９６】
次に、画素（ｎ＋２，ｍ＋１）がセルＣＬ１に組み入れられる（図９（ｆ）参照）。このときの、セル内の画素の合計は“６００”であるので、閾値Ｒより大きくなっている。したがって、セルＣＬ１の拡大を終了し、画素（ｎ＋２，ｍ＋２）の階調値のうち、階調値“１０”だけをセルＣＬ１に残して、残りの階調値“９０”を戻りデータとして元の画素（ｎ＋２，ｍ＋１）に戻す。このとき、重心の位置は、画素（ｎ＋１，ｍ）の内部にありながら、画素（ｎ＋１，ｍ＋１）寄りに位置している（図９（ｆ）の白丸参照）。
【００９７】
次に、式（８）に従って、生成するドットの数Ｎｄを決定する。図９の例では、生成するドットの数Ｎｄは、“２（＝５１０／２５５）”となる。したがって、図９（ｆ）に示したセルＣＬ１の重心からより近い２つの画素を選択し、画素（ｎ＋１，ｍ）および画素（ｎ＋１，ｍ＋１）にドットが生成される（図９（ｇ）参照）。
【００９８】
以上のようにして、閾値Ｒの制御を行いながらハーフトーン処理を行うことができる。
【００９９】
なお、実際には、図９に示した３×４の入力データより更に大きいデータについて処理を行うものであって、例えば、９×９の入力データに対して処理を行った例を図１０に示した。図１０は、９行９列（ｍ〜ｍ＋８，ｎ〜ｎ＋８）の入力データに対して、ハーフトーン処理を行う例であって、図９と同様、入力データの全ての画素に階調値“１００”を与えた場合の処理結果の例である。ここで、図１０（ａ）の左上端の領域は、図９にある処理例に対応して、既にドットが生成されたものが示されている。セルＣＬ１の次のセルＣＬ２についての処理は、画素（ｎ＋３，ｍ）を初期画素として行うことになる。
【０１００】
図１０（ａ）の状態にあるデータに本実施形態によるハーフトーン処理を行った処理結果を、図１０（ｂ）に示す。図１０（ｂ）に示したように、セルＣＬ１以降、ＣＬ２、ＣＬ３と順番にＣＬ９までのセルが生成されている。そして、セルＣＬ１〜ＣＬ９の各セルごとに閾値制御が行われているので、各セルＣＬの大きさがバラツいている。そして、各セルの階調値合計（大きさ）に対応して、複数のドットからなる塊状のドットが適度に分散したドット分布が得られている。
【０１０１】
以上、ＣＣ法によるハーフトーン処理において閾値制御を行った場合の処理例について説明した。ＣＣ法では常にセルＣＬの重心に最も近い画素を組み入れてセルＣＬを生成するため、階調値を付与する画素の位置を中心としてほぼ円状となるセルＣＬを生成する。したがって、階調値が付与された画素位置にドットを形成した場合、隣り合うドットとの距離が必要以上に近づくことがないため、ドットの分散性、すなわち粒状性の優れた出力を得ることができる。
【０１０２】
しかし、閾値制御を行うことなく、閾値Ｒを固定値としてＣＣ法によるハーフトーン処理を行った場合、セルＣＬに新たな画素を組み入れる際に、初期画素の探索方向を一定としているために、セルＣＬの配置位置に一定の周期性が現れる傾向がある。図１１は、均一な階調値をもつ入力データに対して、ＣＣ法によるハーフトーン処理を行った場合に、生成されるセルＣＬの例を示した図である。図１１（ａ）には、閾値制御を行うことなく、閾値を“２５５”で固定とした場合のセルＣＬを示している。図１１（ｂ）は、閾値制御を行い、閾値が２５５〜７×２５５の範囲で、セル毎にランダムに変化させた場合の、セルＣＬを示している。図１１（ａ）に示すように、閾値Ｒを固定とした場合では、初期画素の探索方向に起因して、セルの配置位置に一定の周期性がみられる。この場合、セル内の画素の重心位置にドットを生成すると、ドットの位置にも周期性が生じることとなっていた。また、複数の色成分ごとに処理を行った後に、処理後の色成分を重ね合わせて色を再現する場合、各色成分ごとに所定の周期性を有したドット分布が生成されることになる。したがって、各色成分のドットは互いの位置が周期的にずれるために、画像に色ムラ、すなわちモアレが生じるという課題があった。（図１３（ａ）参照）。
【０１０３】
そこで、本実施形態では、閾値Ｒの大きさをセルＣＬごとに変化させることにより、セルＣＬの大きさにバラツキを与えた。こうすることによって、図１１（ｂ）に示したように、セルＣＬごとに大きさがバラツいたセルＣＬが並ぶことにより、セルＣＬの並び方に周期性が発生しなくなる。したがって、セル形状に基づいて生成されるドットの分布に周期性が表れることがないため、複数の色成分を重ね合わせて色を再現する場合では、各色ドットごとの相対的なドット位置がずれた場合であっても、ずれ方に周期性がないので、各色ドットが適度にバラツき、目立った色ムラ、すなわちモアレとなって現れることがない。つまり、色ムラ、モアレの目立たない、画質に優れたカラー画像を得ることができる（図１３（ｂ）参照）。
【０１０４】
図１２に、各画素の階調値が均一な入力画像のＣ（シアン）データに対して、本実施形態の閾値制御を行うハーフトーン処理を実際に適用してドットを生成した処理結果を、一例として示す。図１２（ａ）には閾値制御を行うことなく閾値“２５５”で固定としてハーフトーン処理を行った場合の処理結果である出力画像を示し、図１２（ｂ）には閾値を“２５５〜７×２５５”の範囲で閾値制御を行うハーフトーン処理を適用した場合の処理結果である出力画像を示している。図１２（ａ）に示すように、閾値固定とした場合では、入力画像の各画素は均一な階調値を有していたにもかかわらず、その出力画像には、周期性が見られる。一方、図１２（ｂ）に示したように、閾値制御を行った場合では、周期性のない、かつドット分散性も優れた出力画像となっている。
【０１０５】
図１３に、Ｃ（シアン）、Ｍ（マゼンタ）各色成分ごとに、各画素の階調値が均一な入力画像に本実施形態の閾値制御を行うハーフトーン処理を実際に適用し、求めた色成分を合成してカラー画像としての出力画像を出力した場合の処理結果を、一例として示す。すなわち、図１２に示したＣデータに加えて、別途同様の処理を行って求めたＭデータを同時に重ねて出力したものである。図１３（ａ）には閾値制御を行うことなく閾値“２５５”で固定としてハーフトーン処理を行った場合の処理結果を示し、図１３（ｂ）には閾値を“２５５”〜“７×２５５”の範囲で閾値制御を行うハーフトーン処理を適用した場合の出力画像（２値化画像）を示している。図１３（ａ）では、各色成分がそれぞれもっているドット位置の周期性のために、各色のドットを重ね合わせたときに、周期性をもった色ムラ、すなわちモアレとなって周期的な特異パターンが現れている。一方、図１３（ｂ）に示したように、閾値制御を行うことにより、色ムラすなわちモアレによる特異パターンがなくなっている。すなわち、閾値制御を行うことにより、モアレが発生せず、かつドット分散性も優れたカラー画像が得られている。
【０１０６】
以下、第１の実施形態の効果を記載する。
（１）閾値Ｒの大きさを、セルＣＬごとに切り替えることによって、各セルＣＬの大きさにバラツキを与えた。こうすることにより、セルＣＬの配列に周期性が低減することとなって、出力画像に生成されるドット位置に現れる周期性が低減する。したがって、重ねあわせによるモアレの発生を抑え、かつドット分散性に優れた、視覚的に快適な画像を得ることができる。
（２）閾値Ｒの大きさを、平均閾値Ｒａを中心としてランダムに変化させることによって、各セルＣＬの大きさにランダムなバラツキを与えた。こうすることにより、ドット位置に現れる周期性が更に低減する。したがって、視覚的に快適な画像を得ることができる。
（３）平均閾値Ｒａの大きさを、セル内の画素の階調値の平均値に対応して変化するようにした。こうすることによって、セル内に含まれる画素の数をおおむね一定の範囲に収めることができる。そして、画素の数をおおむね一定とした各セルはその大きさがおおむね一定の範囲に収まり、異なるセル間のドット間隔がおおむね一定の範囲に収まることになる。すなわち、平均閾値Ｒａの大きさを、セル内の画素の階調値の平均値（平均階調値Ｖａ）に対応させることにより、生成されるドット間隔をおおむね一定の範囲に収まるように平均閾値Ｒａを定めることができる。こうすることによって、レーザープリンタの特性によって異なる、安定したドット生成が可能な、最適なドット間隔及びドットサイズを設定することができる。
（４）平均閾値Ｒａの大きさを、セル内の画素の平均階調値Ｖａに対応して変化させながら、一定の値以上となる平均階調値Ｖａに対しては平均閾値Ｒａの値を最大値とした。ここで、最大値の値は、ドットを生成するときに最適なドットサイズに基づいて設定している。例えば、レーザープリンタの特性上、１つのドットを構成する隣接した画素の数に最適な値がある場合、この最適なドットサイズを中心として、バラツかせたドットサイズをもつドットを生成することになる。このようにして、ハードウェアの特性上最適なドットサイズをもつドットを生成する確率が高まる。
【０１０７】
（第２の実施形態）
次に、本発明を具体化した第２の実施形態について説明する。
【０１０８】
図１４は第２の実施形態におけるハーフトーン処理部３３の構成を示した図である。図に示すように、ハーフトーン処理部３３は、画素群生成部３５と階調値付与部３６とを備えている。また、第２の実施形態における画素群生成部３５は、後述するように評価関数（画素選択条件）をランダムに切り替えて、制御する評価関数制御部３８を有している。
【０１０９】
第２の実施形態では、新たにセルＣＬに組み入れる画素を選択する際に、セルＣＬの選択に用いる評価関数に異方性を与える。こうすることによって、セルＣＬの形状に異方性を与えられ、セルＣＬの形状が円形でなくなることになる。そして、セルＣＬごとに、評価関数の異方性を有した方向を変化させることによって、セル形状を変化させる。以下、セル形状に異方性を加え、楕円形とした場合の評価関数を算出し、説明を行う。
【０１１０】
まず、一般に、原点まわりの楕円形の式は以下の式で与えられる。
ｘ2／ａ2＋ｙ2／ｂ2＝１  …（１０）
次に、原点（楕円形の中心）周りにΘ回転させたｘｙ方向座標をそれぞれｘ’，ｙ’とすると、以下の式が得られる。
ｘ＝ｘ’ｃｏｓΘ＋ｙ’ｓｉｎΘ  …（１１）
ｙ＝−ｘ’ｓｉｎΘ＋ｙ’ｃｏｓΘ  …（１２）
式（１１）および（１２）を式（１０）に代入すると以下の式が得られる。
（ｘ’ｃｏｓΘ＋ｙ’ｓｉｎΘ）2／ａ2＋（−ｘ’ｓｉｎΘ＋ｙ’ｃｏｓΘ）2／ｂ2
＝１  …（１３）
式（１３）に示した楕円形の内部の領域から画素を選択するためには、回転後の座標（ｘ’，ｙ’）を（ｘ，ｙ）で置き換えて、次式の評価関数ｆが最も小さくなる画素（ｘ，ｙ）を選択すればよい。
ｆ＝（ｘｃｏｓΘ＋ｙｓｉｎΘ）2／ａ2＋（−ｘｓｉｎΘ＋ｙｃｏｓΘ）2／ｂ2
…（１４）
ここで、例えば、楕円形の形状を長径：短径＝√２：１とすると、式（１４）に、ａ＝√２ｂ，ｂ＝ｂを代入し、評価関数ｆは次式で与えられる。
ｆ＝（（ｘｃｏｓΘ＋ｙｓｉｎΘ）2）／２＋（−ｘｓｉｎΘ＋ｙｃｏｓΘ）2
＝１／２×（１＋ｓｉｎ2Θ）ｘ2−（ｓｉｎΘｃｏｓΘ）ｘｙ＋１／２×（１＋ｃｏｓ2Θ）ｙ2                                                    …（１５）
ここで、Θを０度から４５度刻みに切り替えるとすると、それぞれの関数ｆ０〜ｆ３が得られる。
ｆ０＝１／２ｘ2＋ｙ2  （Θ＝０°）                              …（１６）
ｆ１＝３／４ｘ2−１／２ｘｙ＋３／４ｙ2  （Θ＝４５°）            …（１７）
ｆ２＝ｘ2＋１／２ｙ2  （Θ＝９０°）                            …（１８）
ｆ３＝３／４ｘ2＋１／２ｘｙ＋３／４ｙ2  （Θ＝１３５°）          …（１９）
第２の実施形態では、式（４）に示された重心からの距離Ｌ＝（ｘ2＋ｙ2）1/2に替えて、上記式ｆ０〜ｆ３のうちいずれかをランダムに選択して、選択した評価関数ｆの値がもっとも小さくなる画素をセルＣＬに組み入れる。こうすることによってセルＣＬに組み入れる画素の選択に異方性が加わることになり、生成されるセルＣＬの形状にバラツキを与えることができる。なお、式（１６）〜式（１９）の演算式は、ＲＯＭ２４に記憶され、必要なときに、ＣＰＵ２２がＲＯＭ２４から読み取るようにして、演算式が取得される。
【０１１１】
図１５は、評価関数ｆの制御を行ったときのＣＣ法によるハーフトーン処理の処理の流れを示すフローチャートである。以下に、図１５のフローチャートに従って処理の説明を行う。なお、ステップＳ４００〜Ｓ４２０の処理は画素群生成部３５が行う。特に、ステップＳ４１０の処理は、画素群生成部３５の評価関数制御部３８が行っている。ステップＳ４２５〜Ｓ４５０の処理は階調値付与部３６が行う。
【０１１２】
処理を開始すると、始めにステップＳ４００において、ＣＰＵ２２は、ハードディスク２３またはＲＯＭ２４に格納されたプログラムを読み出して、入力画像の読み込み処理を開始する。入力画像の読み込みは、ホストコンピュータ１０から入力データを入力Ｉ／Ｆ２１を介してＲＡＭ２５に取り込むことで行う。
【０１１３】
次に、ステップＳ４０５では、ＣＰＵ２２は、セル生成の最初の未処理画素となる画素を探索し、初期画素に決定する。このとき、入力データの左上から主走査方向（Ｘ方向）に探索した後、副走査方向に１ラインずらして再び主走査方向の探索を行い、これを繰り返すようにして探索する。実際には、ＲＡＭ２５の判別用バッファ領域を参照して、入力データの画素のうち未処理画素であることを示す“０”が格納されている画素を探索する。未処理画素がある場合（Ｙｅｓ）は、この未処理画素を初期画素に設定し、ＲＡＭ２５の判別用バッファ領域にその階調値と処理済画素であることを示す“１”を記憶して、ステップＳ４１０に進む。未処理画素がない場合（Ｎｏ）はステップＳ４５０に進む。
【０１１４】
ステップＳ４１０では、評価関数制御処理を行う。ここでは、画素の選択に用いる評価関数をセルＣＬごとに決定する。以下、図１６に示した評価関数制御処理の処理の流れを示したフローチャートを用いて、説明する。
【０１１５】
評価関数制御処理を開始すると、ステップＳ５００において、傾き角度をランダムに決定する。実際には、ＣＰＵ２２が、０°、４５°、９０°、１３５°の角度のうちいづれを用いるかをランダムに選択して、選択した角度をＲＡＭ２５に記憶する。
【０１１６】
次に、ステップＳ５１０では、ステップＳ５００で決定した角度に対応する評価関数ｆを選択する。ここで選択される評価関数ｆは、式（１６）〜式（１９）で示したｆ０〜ｆ３の評価関数のうちいずれかである。実際には、ＲＯＭ２４に記憶された評価関数ｆ０〜ｆ３から、選択した評価関数ｆを読み出して取得する。取得した評価関数ｆはＲＡＭ２５に記憶する。このようにして、評価関数のもつ異方性の切り替えをランダムに行っている。閾値制御処理を終えると、図１５のフローチャートに戻り、ステップＳ４１５に進む。
【０１１７】
このように、本実施形態では、予めＲＯＭ２４に容易しておいた評価関数ｆをランダムに用いることとした。もっとも、ステップＳ５００において、０°から１８０°の範囲で、例えば、３０°刻みの角度からランダムに選択して角度Θを求め、ステップＳ４１０において、求めた角度Θを式（１５）を代入して評価関数ｆを取得するとしてもよい。
【０１１８】
次に、図１５のフローチャートへ戻って、ステップＳ４１５において、セルＣＬの拡大を終了するか否かを判断する。ここでは、ＣＰＵ２２は、セル内の画素の階調値の合計が閾値を超えているか否かの判断をステップＳ１１５と同様にして行う。ステップＳ４１５において、セル内の画素の階調値の合計が閾値よりも小さい場合（Ｎｏ）は、ステップＳ４２０に進み、セルＣＬの拡大を行う。閾値と同じまたは大きい場合（Ｙｅｓ）は、セルＣＬの拡大を終了してステップＳ４２５に進む。
【０１１９】
ステップＳ４２０では、ステップＳ４１５において、セル内の階調値の合計が閾値Ｒより小さいと判断された場合（Ｎｏ）について、ＣＰＵ２２は、新たな未処理画素をセルＣＬに組み入れてセルＣＬを拡大する処理を行う。ここで、第２の実施形態では、未処理画素の選択には、ステップＳ４１０で求めた評価関数ｆの値が最も小さい画素を選択する。
【０１２０】
ＣＰＵ２２は、ＲＡＭ２５のバッファ領域より初期画素の位置する画素の階調値と座標とを読み出し、新たな未処理画素を組み入れたときのセル内の画素の重心ＧＣを式（４）および式（５）にしたがって演算する。
【０１２１】
以上に述べたように、未処理画素を選択して新たにセルＣＬに組み入れる処理（ステップＳ４２０）は、ＣＰＵ２２がセル内の画素の重心ＧＣから評価関数の値が最も小さくなる画素を選択することによって行っている。
【０１２２】
次に、ステップＳ４２０を経てステップＳ４１５へ至っている場合、ＣＰＵ２２は、再びセル内の画素の階調値の合計が閾値Ｒを越えているか否かを判断する。すなわち、新たに選択した未処理画素の階調値を含めたセル内の画素の階調値合計が、所定の閾値未満であるか否かを判断する。閾値未満である場合（Ｎｏ）、再びステップＳ４２０に進み、新たな未処理画素をセルＣＬに組み入れる処理を行う。閾値以上である場合（Ｙｅｓ）、ステップＳ４２５へ進む。
【０１２３】
ステップＳ４２５以降の処理については、第１の実施形態とおおむね同様の処理を行う。処理の内容が異なる点は、ステップＳ４２０の画素選択において、式（３）の演算式に替えて、ステップＳ４１０で取得した評価関数ｆを用いるとする点である。したがって、ステップＳ４２５〜ステップＳ４５０の処理については、ステップＳ１２５〜ステップＳ１５０と同様の処理を行えばよい。
【０１２４】
図１７は、図１７（ａ）に示されたｍ行ｎ列のマトリクスで表された入力データに対して、第２の実施形態にあるハーフトーン処理を施した場合の処理例を示した図である。
【０１２５】
まず、図１７（ａ）に示した入力データに対して、初期画素の探索順に従って、画素（ｎ，ｍ）を初期画素に設定する。
【０１２６】
次に、ステップＳ４１０で行う評価関数ｆの制御処理を行う。ここでは、式（１６）から式（１９）に示した評価関数ｆ０〜ｆ３のうちいずれかをランダムに選択を行った結果、評価関数ｆ１（＝３／４ｘ2−１／２ｘｙ＋３／４ｙ2）が選択されたものとして説明を行う。なお、画素選択の閾値は“２５５”としている。
【０１２７】
次に、選択した評価関数ｆに基づいて、セルＣＬ１に組み入れる画素の選択を行う。図１７（ｂ）では、セルＣＬ１として、初期画素である画素（ｎ，ｍ）が選択された状態が示されている。ここで、セル内の階調値の合計は“５０”であり、閾値である“２５５”に満たないので、セルＣＬの重心位置に基づいて次にセルＣＬに取り込む画素を選択する。ここでは、初期画素（ｎ，ｍ）に対して、この周辺にある画素（ｎ＋１，ｍ）、画素（ｎ，ｍ＋１）、画素（ｎ＋１，ｍ＋１）を選択する画素の候補とする。そして、それぞれの画素に対して評価関数の値を算出すると、それぞれ“０．７５”、“０．７５”、“１”となる。したがって、評価関数ｆの値が最も小さい画素が２つ存在することになる、このようなときは、初期画素の探索順にしたがって画素（ｎ＋１，ｍ）を選択して、セルＣＬ１に組み入れる（図１７（ｃ）参照）。このとき、セル内の階調値の合計は“１００（＝５０＋５０）”となり、閾値である“２５５”に満たないので、更にセルＣＬ１を拡大する処理を行う。
【０１２８】
次に、図１７（ｃ）にあるセルＣＬ１の周辺にある４つの画素（画素（ｎ＋２，ｍ）、画素（ｎ，ｍ＋１）、画素（ｎ＋１，ｍ＋１）、画素（ｎ＋２，ｍ＋１））のうち、セルＣＬ１の重心位置に基づいて、評価関数ｆ２を用いて次にセルＣＬに取り込む画素を選択する。この結果、画素（ｎ，ｍ＋１）が選択され、セルＣＬ１に組み入れられる（図１７（ｄ）参照）。このとき、セル内の階調値の合計は“１５０”となり、閾値である“２５５”未満であるので、更にセルＣＬを拡大する処理を行う。
【０１２９】
次に、図１７（ｄ）にあるセルＣＬ１の周辺にある５つの画素（画素（ｎ＋２，ｍ）、画素（ｎ＋２，ｍ＋１）、画素（ｎ＋１，ｍ＋１）、画素（ｎ＋１，ｍ＋２）、画素（ｎ，ｍ＋２））のうち、セルＣＬ１の重心位置に基づいて、評価関数ｆ２を用いて次にセルＣＬに取り込む画素を選択する。この結果、画素（ｎ＋１，ｍ＋１）が選択され、セルＣＬ１に組み入れられる（図１７（ｅ）参照）。このとき、セル内の階調値の合計は“２０５”となり、閾値である“２５５”未満であるので、更にセルＣＬを拡大する処理を行う。
【０１３０】
次に、図１７（ｅ）にあるセルＣＬ１の周辺にある５つの画素（画素（ｎ＋２，ｍ）、画素（ｎ＋２，ｍ＋１）、画素（ｎ＋２，ｍ＋２）、画素（ｎ＋１，ｍ＋２）、画素（ｎ，ｍ＋２））のうち、セルＣＬ１の重心位置に基づいて、評価関数ｆ２を用いて次にセルＣＬに取り込む画素を選択する。この結果、画素（ｎ＋２，ｍ）が選択され、セルＣＬ１に組み入れられる（図１７（ｆ）参照）。このとき、セル内の階調値の合計は“２５５”となり、閾値である“２５５”以上であるので、セルＣＬを拡大する処理を終了し、セルＣＬ１の重心位置に階調値“２５５”の付与を行う。こうして、セルＣＬ１の処理が終了する。
【０１３１】
図１８は、図１７（ｆ）の状態に続けて処理を行った一例を示した図である。以下図１８を用いて、処理について説明する。
【０１３２】
図１７の説明において、セルＣＬ１の処理を終了しているので、次に、新たなセルＣＬ２についての処理を行う。まず、図１８（ａ）に示したように、残っている未処理画素のうち、所定の探索順にある画素を選択して、画素（ｎ＋３，ｍ）が初期画素に選択され、セルＣＬ２に組み入れられる。セルＣＬ２内の階調値の合計は“５０”であるので、セルＣＬを拡大する処理を行う。なお、セルＣＬ２に対しては、ランダムに選択した結果、評価関数ｆ２（＝ｘ2＋１／２ｙ2）が選択されたとして以下説明する。
【０１３３】
次に、図１８（ｂ）に示すように、評価関数に基づいて、画素（ｎ＋３，ｍ＋１）が選択され、セルＣＬ２に組み入れられる。ここで、セル内の階調値の合計は“１０５”であるので、更にセルＣＬ２を拡大する。
【０１３４】
次に、図１８（ｃ）に示すように、画素（ｎ＋３，ｍ＋２）が選択され、セルＣＬ２に組み入れられる。ここで、セル内の階調値の合計が“１６５”であるので、さらにセルＣＬ２を拡大する処理を行う。
【０１３５】
次に、図１８（ｄ）に示すように、画素（ｎ＋２，ｍ＋１）が選択され、セルＣＬ２に組み入れられる。ここで、セル内の階調値の合計が“２１５”であるので、さらにセルＣＬ２を拡大する処理を行う。
【０１３６】
次に、図１８（ｅ）に示すように、画素（ｎ＋２，ｍ＋２）が選択され、セルＣＬ２に組み入れられる。ここで、セル内の階調値の合計が“２６５”となり、閾値“２５５”以上となったので、セルＣＬ２を拡大する処理を終了する。
【０１３７】
次に、図１８（ｆ）に示すように、セル内の階調値の合計“２６５”のうち、閾値“２５５”を超える分の階調値“１０”については、戻りデータとして最後にセルＣＬ２に組み入れた画素（ｎ＋２，ｍ＋２）に戻す。こうして、セルＣＬ２の処理が終了する。
【０１３８】
以上、３×４の大きさの入力データに対して処理を行う例を示したが、図１７および図１８の例では、例えばセルＣＬ１に見られるように、評価関数をｆ１（Θ＝４５°）としたことにより斜めに傾いた楕円形に近いセル形状となった。一方、セルＣＬ２では、評価関数ｆ２（Θ＝９０°）としたことにより、セル形状が縦長の楕円形となるようにセルＣＬが拡大した。このように、評価関数をセルＣＬごとにランダムに切り替えることによって、生成されるセル形状を意図的にバラツかせることができる。そして、形状のバラツいたセルＣＬが並ぶことになりセル配列の周期性が低減する。したがって、生成されるドットの周期性が低減する。
【０１３９】
以下、第２の実施形態の効果を記載する。
（５）評価関数を、セルＣＬごとに切り替えることによって、各セルの形状にバラツキを与えた。このようにすれば、セルＣＬの周期性が低減し、生成されるドット位置に現れる周期性が低減するので、複数の色成分を持つ画像を表示した際の干渉を抑え、視覚的に快適な画像を得ることができる。
（６）評価関数を、ランダムに切り替えるとしたことにより、セルＣＬの周期性がさらに低減する。したがって、ドットの位置に周期性が少なくなるので、複数の色成分を持つ画像を表示した際の干渉を抑え、視覚的に快適な出力画像を得ることができる。
【０１４０】
以上、本発明の一実施形態を説明したが、本発明はこうした実施の形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内において様々な形態で実施することもできる。以下、変形例を挙げて説明する。
【０１４１】
（変形例１）第２の実施形態において、楕円形を回転させる角度を変化させることに対応する評価関数に異方性を与えた。評価関数に異方性を与える方法としては、これに限られることなく様々な方法が考えられる。例えば、楕円形の長径と短経との比を変化させた評価関数を設定するとしてもよい。これによれば、評価関数のもつ異方性の方向だけでなく異方性の強さも変化させることができる。また、その形状についても楕円形に限られることなく、例えば、長方形に対応する評価関数とすることもできる。ここでは、第１の変形例として、楕円形の形状（長径と短径との比）を変化させることにより評価関数を設定した例について述べる。
【０１４２】
まず、求める評価関数に異方性を与えるため、長径ａおよび短径ｂの比率の異なる楕円形を複数求めて、それぞれの楕円形に対応する評価関数を以下のようにして求める。
【０１４３】
長径：短径＝１：１とした場合、ａ＝ｂおよびｂ＝ｂを式（９）に代入し、以下の式を得る。
ｘ2＋ｙ2＝ｂ2  …（２０）
このとき、式（２０）に表される楕円形に対応した評価関数ｆ０は、次式で与えられる。
ｆ０＝ｂ2＝ｘ2＋ｙ2  …（２１）
【０１４４】
同様にして、長径：短径の比が√２：１である場合、ａ＝√２ｂ，ｂ＝ｂを代入して、評価関数ｆ１が次式で与えられる。
ｆ１＝ｂ2＝ｘ2／２＋ｙ2  …（２２）
【０１４５】
以下同様にして、長径：短径の比が２：１，１：√２，１：２である場合、それぞれに対応する評価関数ｆ２〜ｆ４が次式で与えられる。
ｆ２＝ｂ2＝ｘ2／４＋ｙ2  …（２３）
ｆ３＝ｂ2＝ｘ2＋ｙ2／２  …（２４）
ｆ４＝ｂ2＝ｘ2＋ｙ2／４  …（２５）
第１の変形例では、前記第２の実施形態にある式（１６）〜式（１９）に替えて、上記式（２２）〜（２５）のうちいずれかの評価関数をランダムに選択して、セルＣＬに組み入れる画素の選択に使用する。このようにすれば、様々な形状をもつ楕円形が並ぶようにして、形状のばらついたセルＣＬが生成されることになる。したがって、生成されるセルＣＬに一定の周期性が生じる可能性が低減する。
【０１４６】
（変形例２）前記第１の実施形態として、図６のフローチャートのステップＳ２００において、初期画素を中心として３×３のセルＣＬから平均階調値Ｖａを算出した。しかし、第２の変形例の平均階調値Ｖａの求め方としては、処理をより簡略して、例えば初期画素の階調値を平均階調値Ｖａとして用いて、平均閾値Ｒａを求めるとしてもよい。このようにすれば、ＣＰＵ２２の演算量が減少することにより処理の高速化を図ることができる。
また、初期画素の階調値とこれを平均階調値Ｖａとして求めた平均閾値Ｒａとからセル内の画素数をおおよそ推定し、平均階調値Ｖａを求めるとしてもよい。すなわち、初期画素の画素値を平均階調値Ｖａとして、図７の関係により対応する平均閾値Ｒａを求める。そして、この平均閾値Ｒａを初期画素の階調値で割った値が、セルＣＬに含まれると推定される画素数になる。初期画素周辺から、この画素数に対応する数の画素を選択して、各画素の階調値を平均することにより平均階調値Ｖａを求めるとしてもよい。このようにすれば、入力画像の階調値に合わせて、適切な閾値設定を行うことができる。もっとも、平均階調値Ｖａの求め方としては、セル内の全画素の階調値から平均階調値Ｖａをより正確に求めるようにしてもよい。
【０１４７】
（変形例３）前記第２の実施形態においては、楕円形としたセルＣＬについて、長径と短径の比を変化させることにより処理を行った。ここで、長径と短径の比を変化させ、さらに、閾値制御を行なうとしてもよい。すなわち、楕円形のセル内の画素の値に基づいて平均階調値Ｖａを求めて、平均階調値Ｖａに基づいて楕円形のセルＣＬの閾値Ｒを求める。このようにすれば、生成されるセルＣＬの大きさおよびドット間隔を最適な値とすることができるので、ドットの分散性に優れた出力画像を生成することができる。
【０１４８】
（変形例４）前記第１の実施形態では、図７において、平均階調値Ｖａが小さい範囲では、平均閾値Ｒａは平均階調値Ｖａに比例し、平均階調値Ｖａが所定の値より大きくなる範囲に対しては、一定の平均閾値Ｒａとなるようにした。これは、平均閾値Ｒａが平均階調値Ｖａに比例する領域では、各セルＣＬがおおむね同じ大きさになるようにして、生成されるドット間隔をおおむね一定の範囲に収めるためである。一方、平均閾値Ｒａが一定となる範囲では、レーザープリンタのハードウェア特性上、安定して形成できるドットサイズに適した値を閾値Ｒとして設定するためである。第５の変形例として、平均階調値Ｖａと平均閾値Ｒａとの関係は、図７に示した関係に限られず様々な関係とすることができる。例えば、ドット間隔すなわち、ドットの分散性をより重視する場合では、平均階調値Ｖａに対応して平均閾値Ｒａが比例する範囲をより大きくすることが効果的であり、平均階調値Ｖａの全範囲について平均閾値Ｒａが比例関係をもたせることもできる。
また、ドットが安定して形成することを重視する場合、平均閾値Ｒａが一定となる平均階調値Ｖａの範囲を更に大きくすればよい。
さらに、ドットが安定して形成される最適な階調値が複数個ある場合では、この複数個の最適な階調値に対応した平均閾値Ｒａが得られるような平均階調値Ｖａと平均閾値Ｒａの関係としてもよい。例えば、濃いインクおよび淡いインクのドットを形成して印刷を行うインクジェットプリンタでは、各インクのドットに対応して２つの最適な階調値を有することになる。このような場合の平均階調値Ｖａと平均閾値Ｒａの関係では、平均閾値Ｒａが一定となる範囲を２つもたせ、それぞれの範囲の閾値Ｒの値が、各濃度のドットに対応した値となるようにすればよい。このようにすれば、平均階調値Ｖａがある範囲の領域では、淡いインクのドットに対応した平均閾値Ｒａで一定となる。さらに、平均階調値Ｖａが大きくなると、今度は、濃いインクのドットに対応した平均閾値Ｒａで一定となることになる。このように、平均閾値Ｒａが一定となる領域を２つもつことによって、濃いインクのドットおよび淡いインクのドットを生成するために最適な値とした平均閾値Ｒａを取得し、濃いインクのドットおよび淡いインクのドットを打ち分けることができる。
また、ハーフトーン処理におけるドットサイズはより小さく設定したほうが、解像度を上げられるため、好ましいが、レーザープリンタのハードウェア特性上、安定して形成できるドットサイズの下限値は、各平均階調値Ｖａによって異なる。よって、各入力階調値について、各ドットサイズを設定した際のドット形成の安定性、すなわち出力濃度の安定性を解析し、その解析結果に応じた最適な値が出力されるように、平均閾値制御テーブルを作成し、平均閾値Ｒａを制御することもできる。
【０１４９】
（変形例５）前記実施形態では、画素選択の基準点を重心位置にして毎回画素選択時に更新するようにしていたが、第５の変形例では、画素選択の基準点を、画素の階調値には関係なく、画素の座標位置を利用した中心位置とする。例えば、中心位置は、セル内の画素の座標位置を利用した中心位置であって、その位置座標を（ｘ，ｙ）とすると、中心位置の座標は以下の式により求められる（以下の式で、Ｎはセル内の画素数、ｉはセル内の画素を示す数字である）。
ｘ＝Σiｘi／Ｎ  …（２６）
ｙ＝Σiｙi／Ｎ  …（２７）
そして、この中心位置を毎回画素選択時に更新しながら、未処理画素を選択することによりセルＣＬを生成すると、毎回重心位置を計算することがないので、他の処理を含めた全体の処理速度を上げることができる。
【０１５０】
（変形例６）また、第６の変形例として、所定の画素に階調値を付与する際に、セルＣＬの重心位置を演算することなく、第４の変形例において、未処理画素の選択に用いたセルＣＬの中心位置にある画素に階調値を付与し、ドットを生成するようにしてもよい。こうすれば、重心の計算を行う必要がないので、演算量を減らすことができる。この場合、中心位置が複数の画素の間に位置することも考えられるが、かかる場合には、例えば走査方法と同じ優先順序に従ってセル内のいずれか１つの画素を選択するようにしてもよい。
【０１５１】
（変形例７）さらに、第７の変形例として、画素選択のための基準点を毎回更新するのではなく、１回おきに更新したり、２回おきに更新したり、予め回数を決めてその回数のときに更新するようにしてもよい。毎回、画素選択の基準点を更新するのではなく、１回おきに更新することによりさらに演算量を減らすことができ、他の処理を含めた画像処理装置全体の処理速度の向上を図ることができる。さらに、初期画素の選択から４回目の未処理画素選択のときに基準点を更新し、さらにそれから３回目、２回目と順次変更し、当該回数となるときに更新することとしてもよい。
【０１５２】
（変形例８）前記実施形態では、ハーフトーン処理によって、“０”と“２５５”の２種類の階調値に階調変換した。これは、以降のドットを形成する処理において、階調値“２５５”に対応した大きさのドットを打つことを想定したためである。第８の変形例としては、複数種類の大きさのドットを打つこととし、その複数種類の大きさのドットに対応した複数の種類の階調値に階調変換するものとしてもよい。また、同様にインクの濃度についても複数種類の濃度のドットを打つこととし、複数種類の階調値に階調変換するものとしてもよい。
【０１５３】
（変形例９）また、第９の変形例として、前記実施形態における画像処理装置は、レーザプリンタにて構成するようにしたが、本発明はこれに限定されるものでなく、ハーフトーン処理を行う様々な機器に適用することができる。したがって、例えば、インクジェットプリンタやサーマルプリンタなど種々のプリンタや電子写真などにおいて構成するようにしてもよい。あるいは、このようなプリンタなどの機能が組み込まれたコピー機やコンピュータ、ワープロ、ファックスなど種々の機器において本発明の画像処理装置を構成するようにしてもよい。
【図面の簡単な説明】
【０１５４】
【図１】本発明の第１の実施形態のシステム全体を示す構成図。
【図２】ハーフトーン処理部の構成を示した模式図。
【図３】画像出力装置の構成を示した模式図。
【図４】画像出力装置の行う全体の処理の流れを示したフローチャート。
【図５】ＣＣ法によるハーフトーン処理の処理の流れを示したフローチャート。
【図６】閾値制御処理の処理の流れを示したフローチャート。
【図７】ドット生成処理処理の流れを示したフローチャート。
【図８】平均階調値および平均閾値の関係を示した図。
【図９】ハーフトーン処理の処理例を示した図、（ａ）〜（ｆ）は処理の経過を示した図。
【図１０】ハーフトーン処理の処理例を示した図、（ａ）は図９（ｆ）に続けて処理を行う状態を示した図、（ｂ）は処理を終えた状態を示した図。
【図１１】セル生成の処理結果を示した模式図、（ａ）は閾値固定としたときの図、（ｂ）は閾値制御を行ったときの図。
【図１２】シアン単色についてハーフトーン処理を行った実際の処理結果を示した図、（ａ）は閾値固定としたときの図、（ｂ）は閾値制御を行ったときの図。
【図１３】ＣＭＹについてハーフトーン処理を行った実際の処理結果を示した図、（ａ）は閾値固定としたときの図、（ｂ）は閾値制御を行ったときの図。
【図１４】第２の実施形態におけるハーフトーン処理部の構成を示した図。
【図１５】ＣＣ法によるハーフトーン処理の処理の流れを示したフローチャート。
【図１６】評価関数制御処理の処理の流れを示したフローチャート。
【図１７】ハーフトーン処理の処理例を示した図、（ａ）〜（ｆ）は処理の経過を示した図。
【図１８】ハーフトーン処理の処理例を示した図、（ａ）〜（ｆ）は処理の経過を示した図。
【符号の説明】
【０１５５】
１０…ホストコンピュータ、１１…アプリケーション部、１２…ラスタライズ部、２０…画像処理装置としての画像出力装置、２１…入力インターフェース、２２…ＣＰＵ、ｘ…重心からの変位、ｙ…重心からの変位、Ｘ…回転変換後のｘ座標、Ｙ…回転変換後のｙ座標、ｘGC…重心のｘ座標、ｙGC…重心のｙ座標、２３…ハードディスク、２４…ＲＯＭ、２５…ＲＡＭ、３０…画像処理部、３１…色補正・色変換部、３２…色補正表、３３…ハーフトーン処理部、３５…画素群生成部、３６…階調値付与部、３７…閾値制御部、３８…評価関数制御部、４０…印刷エンジン、４１…レーザドライバ、４２…レーザーダイオード、ＣＬ…画素群としてのセル、ＧＣ…重心、Ｖ…階調値、Ｖａ…階調値の平均値としての平均階調値、Ｒ…閾値、Ｒａ…平均閾値、Ｖｓ…ドットの再現上最適な階調値、ｉ…各画素を示す数字、Ｎｃ…係数、Ｎｗ…ランダム成分のふり幅、Ｎｄ…１ドットを構成する画素の数、Θ…楕円形の回転角度。
【図１】
2006060645.tif 000003
【図２】
2006060645.tif 000004
【図３】
2006060645.tif 000005
【図４】
2006060645.tif 000006
【図５】
2006060645.tif 000007
【図６】
2006060645.tif 000008
【図７】
2006060645.tif 000009
【図８】
2006060645.tif 000010
【図９】
2006060645.tif 000011
【図１０】
2006060645.tif 000012
【図１１】
2006060645.tif 000013
【図１２】
2006060645.tif 000014
【図１４】
2006060645.tif 000015
【図１５】
2006060645.tif 000016
【図１６】
2006060645.tif 000017
【図１７】
2006060645.tif 000018
【図１８】
2006060645.tif 000019
【図１３】
2006060645.tif 000020