(57)【要約】【課題】  特異パターンの発生を抑えた出力画像を得るため、特別なテーブルを用いず量子化ノイズの増幅が少ない画像処理装置、画像処理方法、画像処理プログラム、またはそのプログラムを記録した記録媒体を提供することを目的とする。【解決手段】  色補正処理の前に行う階調データの変換処理（プレ階調変換処理：Ｓ２０）に際して、入力画像の階調データを、種類を減少したレベル値に変換することによって、入力画像の階調データにバラツキをあたえる。そして、その後ハーフトーン処理による階調データの変換処理（ポスト階調変換処理：Ｓ４０）において、バラツキが与えられた階調データを有する画素について、セルの重心を基準に未処理画素を選択してセルを生成する。このとき、閾値を超えた誤差データをセルに最後に組み入れた画素に戻す。【選択図】      図４
2005311414.tif 000002
【特許請求の範囲】
【請求項１】
画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換と、を実施する画像処理装置であって、
前記第２の階調データ変換の実施に際し、
画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成部と、
生成した前記画素群の所定画素に対して前記Ｍ種類のレベル値を付与するデータ付与部と、
を備えた画像処理装置。
【請求項２】
請求項１に記載の画像処理装置であって、
前記第２の階調データ変換の実施に際し、
さらに、前記画素群生成部で生成した画素群の重心位置を決定する画素群重心決定部を備え、
前記画素群生成部は、前記画素群重心決定部で決定した重心から最も近い画素を、画素ごとのレベル値の総和が閾値以上となるまで選択し続けることにより前記画素群を生成し、前記データ付与部は、前記画素群重心決定部で決定した重心に位置する画素に前記Ｍ種類のレベル値を付与することを特徴とする画像処理装置。
【請求項３】
請求項２に記載の画像処理装置であって、
前記画素群生成部は、前記画素群重心決定部で決定した重心から最も近い画素を、画素ごとのレベル値の総和が閾値以上となるまで選択し続け、選択した前記画素群におけるレベル値の総和が前記閾値を超えたとき、超えた分の前記レベル値を前記画素群生成部で最後に選択した前記画素に戻すことを特徴とする画像処理装置。
【請求項４】
請求項１ないし３のいずれか一項に記載の画像処理装置であって、
前記第１の階調データ変換の実施に際し、階調データ変換の手法として、組織的ディザ法または誤差拡散法または平均誤差最小法を用いることを特徴とする画像処理装置。
【請求項５】
画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理方法であって、
前記第２の階調データ変換の実施に際し、
画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成工程と、
前記画素群生成工程で生成した画素群の重心位置を決定する画素群重心決定工程と、
前記画素群重心決定工程で決定した重心に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与工程とを備え、
前記画素群生成工程は、前記画素群重心決定工程で決定した重心から最も近い画素を、画素ごとのレベル値の総和が閾値以上となるまで選択し続けることにより前記画素群を生成することを特徴とする画像処理方法。
【請求項６】
画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理プログラムであって、
前記第２の階調データ変換の実施に際し、
画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成処理と、
前記画素群生成処理で生成した画素群の重心位置を決定する画素群重心決定処理と、
前記画素群重心決定処理で決定した重心に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与処理とをコンピュータに実行させ、
前記画素群生成処理は、前記画素群重心決定処理で決定した重心から最も近い画素を、画素ごとのレベル値の総和が閾値以上となるまで選択し続けることにより前記画素群を生成することを特徴とするプログラム。
【請求項７】
請求項６に記載の画像処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項８】
画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理装置であって、
前記第２の階調データ変換の実施に際し、
画素選択のための第１の基準点に基づいて、画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成部と、
前記画素群生成部で生成した画素群の第２の基準点を決定する画素群基準点決定部と、
前記画素群基準点決定部で決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与部とを備え、
前記画素群生成部は、前記第１の基準点を更新させて当該第１の基準点に基づいて画素を選択するようにしたことを特徴とする画像処理装置。
【請求項９】
請求項８に記載の画像処理装置において、
前記画像群生成部は、前記第１の基準点を、前記画素を所定の回数選択するごとに更新
させることを特徴とする画像処理装置。
【請求項１０】
請求項８に記載の画像処理装置において、
前記第１の基準点は、前記選択した画素の位置から演算した中心位置であり、前記第２の基準点は、前記画素群の画素の位置と階調画素データ値とから演算した重心位置であることを特徴とする画像処理装置。
【請求項１１】
請求項８に記載の画像処理装置において、
前記第１の基準点は、前記選択した画素の位置から演算した中心位置であり、前記第２の基準点は、前記画素群の画素の位置から演算した中心位置であることを特徴とする画像処理装置。
【請求項１２】
請求項８ないし１１のいずれか一項に記載の画像処理装置であって、
前記第１の階調データ変換の実施に際し、階調データ変換の手法として、組織的ディザ法または誤差拡散法または平均誤差最小法を用いることを特徴とする画像処理装置。
【請求項１３】
画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理方法であって、
前記第２の階調データ変換の実施に際し、
画素選択のための第１の基準点に基づいて、画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成工程と、
前記画素群生成工程で生成した画素群の第２の基準点を決定する画素群基準点決定工程と、
前記画素群基準点決定工程で決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与工程とを備え、
前記画素群生成工程は、前記第１の基準点を更新させて当該第１の基準点に基づいて画素を選択するようにしたことを特徴とする画像処理方法。
【請求項１４】
画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理プログラムであって、
前記第２の階調データ変換の実施に際し、
画素選択のための第１の基準点に基づいて、画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成処理と、
前記画素群生成処理で生成した画素群の第２の基準点を決定する画素群基準点決定処理と、
前記画素群基準点決定処理で決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与処理とをコンピュータに実行させ、
前記画素群生成処理は、前記第１の基準点を更新させて当該第１の基準点に基づいて画素を選択するようにしたことを特徴とするプログラム。
【請求項１５】
請求項１４に記載の画像処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プリンタなどの画像出力装置において、入力画像の階調データを、所定の手法にて階調データ変換することによって、画像出力装置の出力画像に生じうる特異パターンの発生などを抑える画像処理技術に関する。
【背景技術】
【０００２】
従来より、レーザープリンタやインクジェットプリンタなど画像出力装置では、入力画像の階調データを画素ごとに所定の閾値で２値化し、２値化によって所定のレベル値が付与された画素の位置に、所定の大きさのドットを形成して印刷用紙に印刷することにより、印刷物として出力画像を出力することが行われている。ここで、多値の階調データを、２値化した階調データに変換する処理のことをハーフトーン処理と一般に称している。
【０００３】
ハーフトーン処理については、形成するドットの位置によって、出力画像に、例えばドットが鎖状につながるなど、入力画像には存在しなかった特異パターンが発生することがある。そこで、このような特異パターンの発生を抑えるため、例えば、ドットのつながりを少なくする技術が特許文献１に提案されている。特許文献１では、入力画像の画素について、階調データのレベル値合計が閾値に達するまで所定のテーブルにより画素を探索してセルを生成し、セルの中央付近の位置にドットを形成する技術が開示されている。
【０００４】
また、同じく画像出力装置では、入力画像の階調データを、画像出力装置の出力色に合わせて色補正処理することも通常行われている。この色補正処理に際して、色補間処理を省いて色補正処理を高速化する目的で、色補正処理のために使用する色補正表の種類数を少なくすることが提案されている。すなわち、色補正処理の前に、階調データの変換処理、つまり入力画像の階調データのレベル値の数を、所定の種類のレベル値の数まで減らす処理を行う技術が特許文献２に開示されている。また、この特許文献２には、その後所定の手法にてハーフトーン処理を行う技術も開示されている。
【０００５】
【特許文献１】特開平１１−２７５２８号公報
【特許文献２】特開平７−３０７７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１におけるハーフトーン処理では、特異パターンの発生を抑えるため、セルを構成する画素の探索を所定の探索順を記録したテーブルを用いて行う方法が提案されているが、テーブル内で左側に存在する画素は、既に処理済みの場合が多く、結果的に生成されるセルが歪んだ形（例えば三日月型）となってしまう。かかる形状のセルでは、セルの中央付近がそのセルの外側に位置することもある。このようなセルについては、セルの中央付近の位置にドットを形成させると、隣のセルのドットと重なってしまうことが生じるため、出力ドットの偏りが発生し、結果的に特異パターンを発生させていまうという課題があった。
【０００７】
また、特許文献１では、同じ形状のセルが連続することに起因して出力画像に生じる規則的なパターンを防ぐため、画素の探索順を記録したテーブルを複数用意し、使用するテーブルを、セル毎に順にまたはランダムに切り替え、セルの形状を不規則にする処理も提案されている。しかしながら、かかる処理は、複数のテーブルを切り替えるために処理負荷が大きく、処理速度が遅くなってしまうという課題があった。また、例えば、入力画像がおおよそ同じ濃度の階調データであるような場合は、探索順をランダムにしてもほぼ同じ形状のセルが生成されてしまうこともあり、結果的に規則的な特異パターンを生じてしまうという課題もあった。
【０００８】
また、特許文献２における色補正処理前に行う階調データ変換処理技術は、前述したように階調データの色補正に関する処理負荷を軽減し処理速度を速めるためのものであった。このため、ハーフトーン処理による階調データ変換後、最終的に出力画像に現れる特異パターンの発生を抑えることを特に考慮したものではなかった。従って、特許文献２では、色補正前の階調データ変換処理およびハーフトーン処理の両方の処理を、誤差拡散法の手法を用いて変換処理を行うことが記載されているが、誤差拡散法では、両方の処理において、量子化に伴って生ずる注目画素の画素値差分を同じ方向に分散するため、量子化ノイズが増幅されて特異パターンが生じてしまうという課題があった。
【０００９】
本発明は、このような課題の少なくとも一部を解決し、特異パターンの発生を抑えた出力画像を得るため、特別なテーブルを用いず量子化ノイズの増幅が少ない画像処理装置、画像処理方法、画像処理プログラム、またはそのプログラムを記録した記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成する本発明の画像処理装置は、画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換と、を実施する画像処理装置であって、前記第２の階調データ変換に際し、画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成部と、生成した前記画素群の所定画素に対して前記Ｍ種類のレベル値を付与するデータ付与部とを備えたことを要旨とする。
【００１１】
かかる画像処理装置によれば、例えば、色補正処理の前に行う階調データの変換処理に際して、入力画像の階調データを、種類を減少したレベル値に変換することによって、入力画像の階調データにバラツキをあたえる。そして、その後ハーフトーン処理による階調データの変換処理において、バラツキが与えられた階調データを有する画素について、画素ごとの階調データのレベル値の総和が閾値以上となるまで、階調データの階調変換未処理画素を選択して画素群（以下、「セル」と呼ぶ）を生成する。そして、生成したセル内の画素のレベル値合計が閾値以上となったセルの所定画素に、Ｍ種類のレベル値を付与する。こうすることによって、画素の選択に際して、選択順をセルごとに変更しなくても画素の選択順がバラツクことになるため、生成されるセルの形状が不規則となり、特異パターンの発生を抑えた視覚的に快適な出力画像を得ることができる。
【００１２】
さらに、本発明の画像処理装置は、前記第２の階調データ変換の実施に際し、前記画素群生成部で生成した画素群の重心位置を決定する画素群重心決定部を備え、前記画素群生成部は、前記画素群重心決定部で決定した重心から最も近い画素を、画素ごとのレベル値の総和が閾値以上となるまで選択し続けることにより前記画素群を生成し、前記データ付与部は、前記画素群重心決定部で決定した重心に位置する画素に前記Ｍ種類のレベル値を付与することとしてもよい。
【００１３】
こうすれば、セルの生成処理に際して、常にセルの重心に最も近い画素を選択してセルに組み入れていくため、生成されるセルの形状はセルの重心を中心としたおおよそ円形状になる。そして、その円のおおよそ中心位置にドットが形成されることになるため、例えば、形成されるドット間距離がほぼ均一で、ドットの分散性が向上し、快適な出力画像を得ることができる。
【００１４】
ここで、前記画素群生成部は、前記画素群重心決定部で決定した重心から最も近い画素を、画素ごとのレベル値の総和が閾値以上となるまで選択し続け、選択した前記画素群におけるレベル値の総和が前記閾値を超えたとき、超えた分の前記レベル値を前記画素群生成部で最後に選択した前記画素に戻すこととしてもよい。
【００１５】
こうすれば、閾値を超えたセルに最後に組み入れられた画素に、閾値を超えた分のレベル値を戻しているため、ハーフトーン処理前の入力画像のレベル値が失われず、元の画像とほぼ同じ位置に画像全体のレベル値が残るため、入力画像に忠実なドットを形成させることができる。
【００１６】
また、本発明の画像処理装置は、前記第１の階調データ変換の実施に際し、階調データ変換の手法として、組織的ディザ法または誤差拡散法または平均誤差最小法を用いることとしてもよい。こうすれば、例えば、入力画像がおおよそ同じ濃度を表す階調データであるような場合、入力画像の階調データのレベル値を所定のレベル値に変換することによって増減することができる。この結果、階調データがバラツクことになり、その後行われる第２の階調データ変換であるハーフトーン処理において、セルごとに画素の選択順を変更しなくても、ほぼ同じ形状のセルが生成される確率が減少し、出力画像に特異パターンが生じ難くなる。
【００１７】
また、上記目的を達成する本発明の画像処理方法は、画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理方法であって、前記第２の階調データ変換の実施に際し、画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成工程と、前記画素群生成工程で生成した画素群の重心位置を決定する画素群重心決定工程と、前記画素群重心決定工程で決定した重心に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与工程とを備え、前記画素群生成工程は、前記画素群重心決定工程で決定した重心から最も近い画素を、画素ごとのレベル値の総和が閾値以上となるまで選択し続けることにより前記画素群を生成することを特徴とする。
【００１８】
かかる画像処理方法によれば、例えば、色補正処理の前に行っていた階調データの変換処理に際して、種類数を減じたレベル値に、入力画像の階調データを変換することによって階調データにバラツキをあたえることができる。そして、その後行うハーフトーン処理による階調データの変換処理によって、このバラツキが与えられた階調データを有する画素を、所定の方法によって選択することによってセルを生成し、生成したセルの重心位置にドットを形成する。こうすることによって、画素の選択に際して選択順をセルごとに変更しなくても、同じような形状のセルが連続して生成される確率が減少するため、特異パターンの発生を抑えた視覚的に快適な出力画像を得ることができる。
【００１９】
また、本発明はコンピュータプログラムまたはそのプログラムを記録した記録媒体としてもよい。すなわち、画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理プログラムであって、前記第２の階調データ変換の実施に際し、画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成処理と、前記画素群生成処理で生成した画素群の重心位置を決定する画素群重心決定処理と、前記画素群重心決定処理で決定した重心に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与処理とをコンピュータに実行させ、前記画素群生成処理は、前記画素群重心決定処理で決定した重心から最も近い画素を、画素ごとのレベル値の総和が閾値以上となるまで選択し続けることにより前記画素群を生成するプログラムであることを特徴とする。また、このプログラムを記録した記録媒体としては、フレキシブルディスクやＣＤ−ＲＯＭ、ＩＣカード、パンチカードなど、コンピュータが読み取り可能な種々の媒体を利用することができる。
【００２０】
さらに、上記目的を達成する本発明の画像処理装置は、画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理装置であって、前記第２の階調データ変換の実施に際し、画素選択のための第１の基準点に基づいて、画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成部と、前記画素群生成部で生成した画素群の第２の基準点を決定する画素群基準点決定部と、前記画素群基準点決定部で決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与部とを備え、前記画素群生成部は、前記第１の基準点を更新させて当該第１の基準点に基づいて画素を選択するようにしたことを特徴とする。
【００２１】
かかる画像処理装置によれば、セルの生成に際してセルに組み入れる画素を選択するための基準点と、生成したセルに形成するドットの位置を決定する基準点とを区別する。こうすれば、例えば、組み入れる画素をセルの形状によって特定される基準点を用いて選択し、セル内の各画素のレベル値に無関係にセルを生成することができる。この結果、セルの形状のみに着目して、組み入れる画素を選択することができる。
【００２２】
ここで、前記画像群生成部は、前記第１の基準点を、前記画素を所定の回数選択するごとに更新させることとしてもよい。こうすれば、例えば、生成されるセルが第１の基準点を固定にした場合よりも円状に形成される可能性が高くなり、ドット間距離が均一に保たれ快適な出力画像を得ることが可能となる。
【００２３】
さらに、前記第１の基準点は、前記選択した画素の位置から演算した中心位置であり、前記第２の基準点は、前記画素群の画素の位置と階調画素データ値とから演算した重心位置であることとしてもよい。こうすれば、画素群に組み入れる画素の選択を各画素の位置を基準に演算すればよく、重心を演算する場合に比べて計算処理に関する処理負荷を軽減できる。また形成するドットの位置は、生成したセルの重心とするため、入力画像の階調データに忠実なドットをセル内に形成することができる。
【００２４】
あるいは、前記第１の基準点は、前記選択した画素の位置から演算した中心位置であり、前記第２の基準点は、前記画素群の画素の位置から演算した中心位置であることとしてもよい。こうすれば、例えば、画素選択に用いる基準点およびドットを形成させるための基準点を決定する処理に際して、両方とも画素のレベル値を含めた演算を行う必要がなくなるので、計算量を少なくして装置全体の処理効率を上げることができる。
【００２５】
さらに、本発明の上記画像処理装置は、前記第１の階調データ変換の実施に際し、階調データ変換の手法として、組織的ディザ法または誤差拡散法または平均誤差最小法を用いることとしてもよい。こうすれば、例えば、入力画像がおおよそ同じ濃度の階調データであるような場合、入力画像の階調データのレベル値を所定のレベル値に変換することによって増減することができる。この結果、階調データがバラツクことになり、その後行われる第２の階調データ変換であるハーフトーン処理において、セルごとに画素の選択順を変更することなく、ほぼ同じ形状のセルが生成される確率が減少し、出力画像に特異パターンが生じ難くなる。
【００２６】
また、上記目的を達成する本発明の画像処理方法は、画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理方法であって、前記第２の階調データ変換の実施に際し、画素選択のための第１の基準点に基づいて、画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成工程と、前記画素群生成工程で生成した画素群の第２の基準点を決定する画素群基準点決定工程と、前記画素群基準点決定工程で決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与工程とを備え、前記画素群生成工程は、前記第１の基準点を更新させて当該第１の基準点に基づいて画素を選択するようにしたことを特徴とする。こうすれば、例えば、セルの生成に際してセルに組み入れる画素を選択するための基準点と、生成したセルに形成するドットの位置を決定する基準点とを区別する。こうすれば、例えば、組み入れる画素をセルの形状によって特定される基準点を用いて選択し、セル内の各画素のレベル値に無関係にセルを生成することができる。この結果、セルの形状のみに着目して、組み入れる画素を選択することができる。
【００２７】
さらに、本発明はコンピュータプログラムまたはそのプログラムを記録した記録媒体としてもよい。すなわち、画素ごとに、少なくとも、Ｐ（Ｐは２以上の整数）種類のレベル値を有する階調データからＱ（Ｑ＜Ｐ、Ｐは２以上の整数）種類のレベル値を有する階調データに変換する第１の階調データ変換と、Ｎ（Ｎは２以上の整数）種類のレベル値を有する階調データからＭ（Ｍは２以上の整数）種類のレベル値を有する階調データに変換する第２の階調データ変換とを行う画像処理プログラムであって、前記第２の階調データ変換の実施に際し、画素選択のための第１の基準点に基づいて、画素ごとのレベル値の総和が閾値以上となるまで前記Ｎ種類のレベル値を有する画素を選択して画素群を生成する画素群生成処理と、前記画素群生成処理で生成した画素群の第２の基準点を決定する画素群基準点決定処理と、前記画素群基準点決定処理で決定した前記第２の基準点に位置する画素に前記Ｍ種類のレベル値を付与するデータ付与処理とをコンピュータに実行させ、前記画素群生成処理は、前記第１の基準点を更新させて当該第１の基準点に基づいて画素を選択するようにしたプログラムであることを特徴とする。また、このプログラムを記録した記録媒体としては、フレキシブルディスクやＣＤ−ＲＯＭ、ＩＣカード、パンチカードなど、コンピュータが読み取り可能な種々の媒体を利用することができる。
【発明を実施するための最良の形態】
【００２８】
次に、本発明を実施するための最良の形態を説明する。
【００２９】
図１は、本発明が適用されるシステム全体を示す構成図である。全体としてホストコンピュータ１０と、画像出力装置２０とから構成される。
【００３０】
ホストコンピュータ１０は、アプリケーション部１１とラスタライズ部１２とから構成される。アプリケーション部１１は、文字データ、図形データ、ビットマップデータ等の印刷対象となる出力画像用のデータを生成する。例えば、ホストコンピュータ１０でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどを生成する。そして生成したこれらのデータを、ラスタライズ部１２へ出力する。もとより、ホストコンピュータ１０は、スキャナなどの画像入力装置（図示せず）から出力されるデータを受け付け、このデータをアプリケーション部１１が生成するデータとしてラスタライズ部１２へ出力するものとしても差し支えない。
【００３１】
ラスタライズ部１２は、アプリケーション部１１から出力された印刷対象のデータを画素ごと（又はドットごと）に８ビットの階調データに変換する。本実施形態では、Ｒ（レッド）、Ｇ（グリーン）、Ｂ（ブルー）の色毎で、画素ごとに８ビットの階調データを出力する。したがって、出力される階調データは、画素ごとに０から２５５までの２５６種類の値（レベル値）を有することになる。ラスタライズ部１２における階調データの生成処理は、実際にはホストコンピュータ１０に実装されたドライバによって行われる。ラスタライズ部１２から出力される階調データは、画像出力装置２０に出力される。
【００３２】
画像出力装置２０は、全体として画像処理部３０と印刷エンジン４０とから構成される。画像処理部３０では、ホストコンピュータ１０から出力された階調データに対して、まず階調数を変換する階調データ変換処理を行ったのち、色補正及び色変換処理、ハーフトーン処理、パルス幅変調処理を行い、処理後のデータが印刷エンジン４０に出力され、この印刷エンジン４０にて実際に印刷用紙等の記録媒体への印刷が行われる。
【００３３】
画像処理部３０は、階調データ変換部３１と色補正及び色変換部３２と、ハーフトーン処理部３４と、パルス幅変調部３５とから構成される。階調データ変換部３１は、ホストコンピュータ１０から出力される２５６種類のレベル値を有するＲＧＢ各８ビット（計２４ビット）の階調データを受け取り、２５６種類より少ない種類のレベル値を有するＲＧＢの階調データへ変換処理を行う。この変換処理によって、ホストコンピュータ１０が出力した階調データにバラツキを持たせることができる。ここでの階調データの変換処理として、本実施形態では、誤差拡散法を用いることとする。この処理の具体的な内容は後述する。
【００３４】
次に、色補正及び色変換部３２は、階調変換されたＲＧＢの階調データを受け取り、印刷エンジン４０にて実際に印刷された印刷物において良好な色再生が得られるように、色補正表３３を用いてＲＧＢの階調データの補正処理を行う。その後、補正したＲＧＢの階調データを、ＲＧＢからＣＭＹに色変換処理を行うのである。ここで、Ｃはシアン、Ｍはマゼンタ、Ｙはイエローを示す。
【００３５】
ハーフトーン処理部３４は、色補正及び色変換部３２から出力されるＣＭＹの階調データに対して、所定の種類のレベル値を閾値とした量子化データ（２値あるいは４値などの多値の値）に変換し、その量子化データを出力する。ハーフトーン処理として、本実施形態では、複数の画素からなるセルを、画素群の重心を用いてセルを構成し、その重心にドットを生成させる処理（Circular Cell法、以下ＣＣ法）を用いる。ＣＣ法の具体的な内容は後述する。
【００３６】
パルス幅変調部３５は、ハーフトーン処理部３４から出力された量子化データを入力し、この量子化データに対して所定のパルス幅をもったレーザ駆動パルスを、駆動データとして生成する。そして、この駆動データを印刷エンジン４０に出力する。
【００３７】
印刷エンジン４０は、レーザドライバ４１とレーザーダイオード（ＬＤ）４２とから構成される。レーザドライバ４１は、入力された駆動データから、レーザーダイオード４２を駆動する制御データを生成し、レーザーダイオード４２に出力する。レーザーダイオード４２は、レーザドライバ４１から出力された制御データに基づいて駆動され、さらに図示しない感光ドラムや転写ベルトが駆動されて、実際に印刷用紙等の記録媒体にホストコンピュータ１０からのデータが印刷されることになる。
【００３８】
図１において、このような色補正処理の前に行う階調データのレベル値の種類数を減らす階調変換処理をプレ階調変換処理とも呼ぶ。また、プレ階調変換処理の後にハーフトーン処理のような階調データ変換処理を行う場合は、このような階調変換処理を、プレ階調変換処理に対してポスト階調変換処理とも呼ぶ。また、プレ階調変換は本発明の請求項に記載した第１の階調データ変換に相当し、ポスト階調変換は本発明の請求項に記載した第２の階調データ変換に相当する。
【００３９】
次に、図２を参照して、画像出力装置２０の具体的構成について説明する。ここで、図１の画像出力装置２０のうち、階調データ変換部３１、色補正及び色変換部３２、色補正表３３、ハーフトーン処理部３４及びパルス幅変調部３５は、図２におけるＣＰＵ２２、ハードディスク２５、ＲＯＭ２６、及びＲＡＭ２７に対応する。
【００４０】
画像出力装置２０は、全体として、入力インターフェース（Ｉ／Ｆ）２１、ＣＰＵ２２、ハードディスク２５、ＲＯＭ２６、ＲＡＭ２７、印刷エンジン４０とから構成され、それらはバスを介して互いに接続されている。入力Ｉ／Ｆ２１は、ホストコンピュータ１０と画像出力装置２０とのインターフェースの役割を果たす。入力Ｉ／Ｆ２１には、所定の伝送方式により伝送されたホストコンピュータ１０からのＲＧＢ階調データが入力され、画像出力装置２０で処理できるデータに変換される。ＲＧＢ階調データは、一旦ＲＡＭ２７に格納される。
【００４１】
ＣＰＵ２２は、バスを介して、入力Ｉ／Ｆ２１、ハードディスク２５、ＲＯＭ２６、ＲＡＭ２７、印刷エンジン４０それぞれと接続され、ハードディスク２５またはＲＯＭ２６に格納されたプログラムを読み出して、後述する階調データ変換、ハーフトーン処理等の各種処理を行う。これらの処理を記録したプログラムは、予めハードディスク２５やＲＯＭ２６に格納されていることとしてもよいし、例えばＣＤ−ＲＯＭなどのコンピュータが読み取り可能な記録媒体によって外部から供給され、図示しないＣＤ−Ｒ／ＲＷドライブを介して画像出力装置２０に備えられたハードディスク２５に記憶することによって格納されるものとしてもよい。もとより、インターネットなどのネットワーク手段を介して、プログラムを供給するサーバー等にアクセスし、データをダウンロードすることによって格納されるものとしてもよい。
【００４２】
ＲＡＭ２７は、ＣＰＵ２２の制御によって実行される各処理のワーキングメモリとして役割を果たし、処理後の各種データを格納する。そして、印刷エンジン４０のレーザドライバ４１を駆動するための駆動データも格納する。ＲＡＭ２７の具体的構成等については後述する。
【００４３】
印刷エンジン４０は、図１の印刷エンジンと同様の構成で、ＣＰＵ２２の制御によりＲＡＭ２７に格納された駆動データを入力し、上述した印刷処理を行うことになる。
【００４４】
次に、以上のように構成された画像出力装置２０が行う具体的な処理を説明する前に、画像処理部３０における各処理によって、ホストコンピュータ１０が出力した階調データがどのように変換されるのかを図３を用いて説明する。これは、後ほど説明する本実施形態におけるプレ階調変換処理とポスト階調変換処理についての補足説明であり、説明の煩雑さを避けるため事前に説明を行うものである。
【００４５】
図３において、まず、プレ階調変換部３１には、ホストコンピュータ１０が出力したＲ，Ｇ，Ｂの階調データＲｉ、Ｇｉ、Ｂｉが入力される。Ｒｉ、Ｇｉ、Ｂｉの階調データはそれぞれ２５６階調すなわち０から２５５まで２５６種類のレベル値を有する階調データである。本実施形態では、プレ階調変換部３１は、このＲ，Ｇ，Ｂデータを２５６階調から１７階調へ変換処理する。この変換処理の目的は、上記で説明したように、入力画像データを意図的にバラツキを与えるためである。もとより、次に行う色補正処理を高速化するためでもある。
【００４６】
プレ階調変換部３１は、階調変換処理によって変換した１７種類のレベル値（０、１５、３１、４７、６３、７９、９５、１１１、１２７、１４３、１５９、１７５、１８１、２０７、２２３、２３９、２５５）を有するＲ，Ｇ，Ｂの階調データＲｋ，Ｇｋ，Ｂｋを出力する。プレ階調変換の１７個のレベル値は、ほぼ等間隔であるが、必ずしもそうである必要はない。
【００４７】
次に、色補正及び色変換部３２は、色補正表３３を用いてＲｋ，Ｇｋ，Ｂｋのデータの色補正処理を行うと共に、Ｒ，Ｇ，ＢからＣ（シアン），Ｍ（マゼンタ），Ｙ（イエロー）への色変換処理を行う。色変換処理は通常所定の色変換表（図示せず）を用いて行われる。本実施形態では、色変換に際して用いる色変換表のＣＭＹの階調データは、各色８ビットずつの階調データとなっており、色補正及び色変換部３２が出力する階調データＣｃ、Ｍｃ、Ｙｃは、０から２５５まで２５６種類のレベル値を有する階調データであるものとする。
【００４８】
次に、本実施形態では、ポスト階調変換部３４にて、ドットのオンオフを制御する２値化処理を行うものとして説明することとし、ポスト階調変換部３４が出力する階調データＣｐ、Ｍｐ、Ｙｐは、２種類のレベル値０かレベル値２５５かに２値化（量子化）された階調データを出力する。最終的に、画像出力装置２０は、出力されたレベル値に応じてドットの大きさとドットのオンオフを制御して印刷を行うのである。
【００４９】
それでは、このような本実施形態における階調データを変換する処理について、図４のフローチャートを用いて説明する。この処理が開始されると、まずステップＳ１０にて、ホストコンピュータ１０が出力した画像データの入力処理を行う。続いて、本実施形態では、ステップＳ２０にて誤差拡散法によるプレ階調変換処理を行う。
【００５０】
誤差拡散法によるプレ階調変換処理について、図５〜図８を用いて説明する。誤差拡散法は、ドットマトリクス状に配列される入力画像の画素に対して注目画素を決め、この注目画素について水平方向（入力画像の画面左から右方向）の主走査を繰り返しつつ走査ラインを垂直方向（入力画像の画面上から下方向）に移動する副走査を実行することにより、全画素について階調データを所定の種類のレベル値を有する階調データに階調変換する。このようにして、注目画素を走査していくことにより、図５に示したように、注目画素上方行と下方行は階調変換済み領域と未変換領域とに分かれる。さらに注目画素の左方列と右方列も階調変換済み領域と階調未変換領域とに分かれる。基本的には階調変換した所定の種類のレベル値と、階調変換前の元のレベル値との差分値、つまり量子化による誤差データ値（以降、単に「誤差データ」）を、注目画素の右方及び下方に割り当てることにより、入力画像全体での階調データの誤差を少なくするのである。
【００５１】
また、図６（ａ）〜（ｄ）に示すように、差分値の割り当てに際しては、注目画素に対して所定の画素に重み付けをして誤差データを分散させている。このように所定の画素に重み付けをして分散することによって、入力画像の階調データに意図的なバラツキを持たせることができるのである。
【００５２】
それでは、本実施形態での１７階調へのプレ階調変換処理について、図７のフローチャートと図８の模式図を用いて説明する。なお本実施形態での誤差データの分散は、図６（ａ）の重み付け方法を用いて行うものとしている。注目画素に生じた誤差データを、右隣の画素に２、下の画素に１、右下の画素に１の割合で分散するのである。
【００５３】
この処理において、まず、ｐ行ｑ列目の画素に着目する。そしてこの画素のＲ，Ｇ，Ｂ各成分の階調データＲｉ，Ｇｉ，Ｂｉを、例えばＢ成分であればｄａｔａＢ〔ｐ〕〔ｑ〕と表す。これを、Ｒ，Ｇ，Ｂそれぞれの成分について１７階調化するのであるが、一例として、以下Ｂ成分を１７階調化する処理について説明する。もとより、Ｇ，Ｂ成分についても処理は基本的に同じである。なお、ｐ行ｑ列目の画素の１７階調化によって生じる誤差データを、ｅｒｒ〔ｐ〕〔ｑ〕と表す。
【００５４】
同じくこの処理において、プレ階調変換処理後のＢ成分のレベル値（ｐｒｅ＿Ｂ）を以下のように表す。
ｐｒｅ＿Ｂ〔０〕＝０；
ｐｒｅ＿Ｂ〔１〕＝１５；
ｐｒｅ＿Ｂ〔２〕＝３１；
ｐｒｅ＿Ｂ〔３〕＝４７；
…
ｐｒｅ＿Ｂ〔１５〕＝２３９；
ｐｒｅ＿Ｂ〔１６〕＝２５５；
【００５５】
また、プレ階調変換処理のために用いる１６種類の閾値を「ｓｌｓｈ〔ｉ〕（ｉ＝０，１，２，…，１５）」と定義し、ｓｌｓｈ〔ｉ〕＝（ｐｒｅ＿Ｂ〔ｉ〕＋ｐｒｅ＿Ｂ〔ｉ＋１〕）／２となる値に設定する。この場合、具体的には閾値はつぎのようになる。
ｓｌｓｈ〔０〕＝７；
ｓｌｓｈ〔１〕＝２３；
ｓｌｓｈ〔２〕＝３９；
…
ｓｌｓｈ〔１５〕＝２４７；
【００５６】
図７の処理が開始されると、最初にステップＳ２０１にて、入力画像データのｐ行ｑ列目の注目画素のｄａｔａ＿Ｂのレベル値がｓｌｓｈ〔０〕のレベル値より小さいか否かを判定する処理を行う。判定の結果、注目する画素のｄａｔａ＿Ｂのレベル値が小さい場合は（ＹＥＳ）、ｐｒｅ＿Ｂのレベル値をｐｒｅ＿Ｂ〔０〕の値０とする（ステップＳ２０２）。
【００５７】
一方、ｄａｔａ＿Ｂのレベル値がｓｌｓｈ〔０〕より大きい場合は（ＮＯ）、ステップＳ２０３にて、注目画素のレベル値が、設定したそれぞれの閾値ｓｌｓｈ〔０〕からｓｌｓｈ〔１５〕のうち、どれかの閾値間に存在するか否かを判定する処理を行う。そして、どれかの閾値間にレベル値が存在する場合は（ＹＥＳ）、ｐｒｅ＿Ｂのレベル値をその閾値間に存在するレベル値に設定する処理を行う（ステップＳ２０４）。
【００５８】
一方、ｄａｔａ＿Ｂのレベル値が設定した閾値間に存在しない場合は（ＮＯ）、ステップＳ２０５にて、閾値ｓｌｓｈ〔１５〕以上か否かを判定する処理を行う。判定の結果、ｄａｔａ＿Ｂのレベル値が閾値ｓｌｓｈ〔１５〕以上であれば（ＹＥＳ）、ｐｒｅ＿Ｂのレベル値をｐｒｅ＿Ｂ〔１６〕の値２５５とする（ステップＳ２０６）。
【００５９】
基本的に、ｄａｔａ＿Ｂは以上の処理によって、１７種類のレベル値のどれかに階調変換されることになるが、もしいずれにも変換されない場合、すなわちステップＳ２０５にて判定の結果ＮＯである場合はデータエラーとして処理を終了する。
【００６０】
次に、ステップＳ２０２、Ｓ２０４、Ｓ２０６にて何れかに設定された階調データのレベル値ｐｒｅ＿Ｂとｄａｔａ＿Ｂ〔ｐ〕〔ｑ〕とからｅｒｒ〔ｐ〕〔ｑ〕を算出する処理を行う（ステップＳ２０７）。そして、次のステップＳ２０８にて、算出したｅｒｒ〔ｐ〕〔ｑ〕を、図６（ａ）の重み付けに従って所定の画素に分散する処理を行う。
【００６１】
以上の処理を、所定の画素の走査順に従って行い、ｐ、ｑすべて終了したか否かを判定し（ステップＳ２０９）、終了していない場合は（ＮＯ）ｐ、ｑを更新し（ステップＳ２１０）、順次画素の階調データを変換することによって入力画像全ての画素について処理を終了し（ＹＥＳ）、プレ変換処理を終了する。もとより、入力画像の一行一列目の画素を最初の走査画素とし、その後、前述した主走査および副走査方法に従って注目画素を更新するのである。
【００６２】
図７のフローチャートで示した処理の様子を、一例として、図８の模式図を用いて説明する。ここでは、入力画像のＢ成分のレベル値が８５である階調データをプレ階調変換するものとする。図８（ａ）に示したように、ｐ行ｑ列目の画素を注目画素とする。以降、画素を（ｑ，ｐ）というように表記する。
【００６３】
閾値との比較によって、図８（ｂ）に示したように、（ｑ，ｐ）はレベル値７９の階調データに変換される。そして誤差データ６（＝８５−７９）を重み付け方法に従って、（ｑ＋１，ｐ）に３、（ｑ，ｐ＋１）に１．５、（ｑ＋１，ｐ＋１）に１．５の誤差データをそれぞれ分散する。走査方法に従って（ｑ＋１，ｐ）を次の注目画素とし（図８（ｃ）網掛け部）、閾値との比較によって（ｑ＋１，ｐ）はレベル値９５の階調データに変換される（図８（ｄ））。そして誤差データ−７（＝８８−９５）を重み付け方法に従って、（ｑ＋２，ｐ）に−３．５、（ｑ＋１，ｐ＋１）に−１．７５、（ｑ＋２，ｐ＋１）に−１．７５の誤差データをそれぞれ分散する。次に、走査方法に従って（ｑ＋２，ｐ）を注目画素とし（図８（ｅ）網掛け部）、閾値との比較によって（ｑ＋２，ｐ）はレベル値７９の階調データに変換される（図８（ｆ））。そして誤差データ２．５（＝８１．５−７９）を重み付け方法に従って、（ｑ＋３，ｐ）に１．２５、（ｑ＋２，ｐ＋１）に０．６２５、（ｑ＋３，ｐ＋１）に０．６２５の誤差データをそれぞれ分散する。このように階調データの変換処理を入力画像の全ての画素について繰り返し実施し、プレ階調変換処理を行うのである。
【００６４】
以上説明したように、図８（ｆ）に示した太枠で囲んだ画素と、図８（ａ）に示した画素との比較によって明らかなように、プレ階調変換によって入力階調データにバラツキを与えることができる。
【００６５】
次に図４に戻り、次のステップＳ３０にてプレ階調変換後の階調データＲｋ，Ｇｋ，Ｂｋの色補正及び色変換処理を行う。本実施形態では、前述したように、色変換処理によって２５６階調を有するＣｃ、Ｍｃ、Ｙｃの階調データに変換するが、もとより、これらのＣＭＹで表された階調データはプレ階調変換によって与えられたバラツキを有したものとなる。
【００６６】
次に、ステップＳ４０にてＣＣ法によるポスト階調変換処理を行う。ＣＣ法によるポスト階調変換の具体的な処理内容について、図９のフローチャートと図１０の模式図を用いて説明する。ここでは、０と２５５の２種類のレベル値に階調変換（２値化）するものとして説明する。なお、図９のフローチャートで示した処理は、Ｃｃ、Ｍｃ、Ｙｃのそれぞれの色成分の階調データに対して行われるものである。
【００６７】
ポスト階調変換が実施されると、まずステップＳ４０１にて、入力画像を読み込む処理を行う。ここでは色成分Ｃｃの階調データを入力画像として読み込むものとする。読み込んだ階調データの一例を図１０（ａ）に示した。例えば、ｍ行ｎ列目の画素（以降（ｎ，ｍ）と表す）には、レベル値５０の階調データが与えられている。
【００６８】
次にステップＳ４０２で、ポスト階調変換が未処理である画素を探索する処理を行い、探索未処理画素が有るか否かを判定する処理を行う。未処理画素の探索は、図５と同様、常に、まず水平方向に探索走査を行い、次に垂直方向へ探索走査を行う。すなわち、未処理画素が有る場合は、入力画像の全体で最も上側にある画素のうち、最も左側にある画素を探索することになる。もとより、ポスト階調変換処理の開始時では、１行１列目の画素（１，１）が探索されることになる。
【００６９】
次に、判定の結果、未処理画素が有った場合（ＹＥＳ）、次のステップＳ４０４へ進む。一方、判定の結果、未処理画素が無い場合は（ＮＯ）、入力画像全体はポスト階調変換されたものとして、２値化画像を出力する処理を行い（ステップＳ４０３）、ポスト階調変換処理ルーチンを終了する。
【００７０】
ステップＳ４０４では、セルの拡大終了条件が成立するか否かを判定する処理を行う。そして、判定の結果、ＮＯの場合はセルを拡大する処理を行う（ステップＳ４０５）。本実施形態では、セル内の画素のレベル値合計が２５５未満であることがセルを拡大する条件となる。また、セルの重心から最も近い画素をセルに組み入れることによってセルの拡大を行う。一方、判定の結果、ＹＥＳの場合はセルの拡大を終了し、ステップＳ４０６へ進む。
【００７１】
ステップＳ４０４およびステップＳ４０５での処理について、図１０を用いて具体的に説明する。いま、探索した未処理画素が図１０（ａ）の網掛け部で示したｍ行ｎ列目の画素（ｎ，ｍ）であり、他の画素も全て未処理画素であったとする。このとき、（ｎ，ｍ）１画素のセルＣＬが生成されたことになる。そしてセルＣＬの重心ＧＣの位置は、画素（ｎ，ｍ）の中心になる。
【００７２】
次にセルＣＬ内の画素のレベル値の合計は５０となり、２５５未満であるので、セルＣＬの重心位置を算出し、図１０（ｂ）網掛け部で示したように、算出した重心ＧＣの位置から最も近い未処理画素をセルＣＬに組み入れる。この場合、（ｎ＋１，ｍ）（ｎ，ｍ＋１）の２つが重心に最も近い画素として存在するが、本実施形態では走査方向の順序に従って（ｎ＋１，ｍ）をセルに組み入れ、セルＣＬを拡大する。
【００７３】
次に、拡大したセルＣＬ内（図１０（ｃ）の太枠内の部分）の画素のレベル値の合計は１００となり、２５５未満であるので、セル内の画素位置と画素のレベル値からセルＣＬの重心ＧＣの位置を算出する（図１０（ｃ））。そして、図１０（ｃ）網掛け部で示したように、算出した重心ＧＣの位置から最も近い画素（ｎ，ｍ＋１）（ｎ＋１，ｍ＋１）のうち、同じく走査方向の順序に従って（ｎ，ｍ＋１）をセルに組み入れ、セルＣＬを拡大する。
【００７４】
次に、拡大したセルＣＬ内（図１０（ｄ）の太枠内の部分）の画素のレベル値の合計は１５０となり、２５５未満であるので、セルＣＬ内の画素位置と画素のレベル値からセルＣＬの重心ＧＣの位置を算出する。そして、図１０（ｄ）網掛け部で示したように、算出した重心ＧＣの位置から最も近い画素（ｎ＋１，ｍ＋１）をセルに組み入れ、セルＣＬを拡大する。
【００７５】
次に、拡大したセルＣＬ内（図１０（ｅ）の太枠内の部分）の画素のレベル値の合計は２０５となり、２５５未満であるので、セルＣＬ内の画素位置と画素のレベル値からセルＣＬの重心ＧＣの位置を算出する。そして、図１０（ｅ）網掛け部で示したように、算出した重心ＧＣの位置から最も近い画素（ｎ＋１，ｍ＋２）をセルに組み入れ、セルＣＬを拡大する。
【００７６】
次に、拡大したセルＣＬ内（図１０（ｆ）の太枠内の部分）の画素のレベル値の合計は２５５となり、セルの拡大終了条件を満たすので、セルＣＬの拡大処理を終了する。
【００７７】
次にステップＳ４０６（図９）で、セル内の画素のレベル値合計が閾値と等しいか否かを判定する処理を行う。判定の結果閾値と等しい場合は（ＹＥＳ）、前述の処理と同様、セル内の画素位置と画素のレベル値からセルの重心ＧＣの位置を算出する処理を行う（ステップＳ４０７）。そして、算出した重心位置に存在する画素に、閾値と同じレベル値を与える処理を行い（ステップＳ４０８）、ステップＳ４０２に戻って未処理画素の探索処理以降を繰り返すのである。
【００７８】
図１０（ｆ）に示したように、ステップＳ４０８では、ステップＳ４０７によって算出した重心ＧＣの位置に存在する画素（ｎ＋１，ｍ＋１）に、レベル値「２５５」を与えるのである。この後の処理（後述するステップＳ５０（図４））によって、このレベル値「２５５」が与えられた画素の位置に所定の色と大きさのドットを形成して画像を印刷するのである。
【００７９】
一方、ステップＳ４０６で判定の結果、閾値と等しくない場合つまり閾値を超える場合は（ＮＯ）、余った誤差データを無視してセルの重心を算出する処理を行う（ステップＳ４０９）。そして、この誤差データを最後にセルに組み入れた画素に戻し（ステップＳ４１０）、誤差データを戻した画素を未処理画素とする処理を行う（ステップＳ４１１）。そして、ステップＳ４０８に進み、算出した重心位置に存在する画素に、閾値と同じレベル値を与える処理を行う。
【００８０】
ステップＳ４０９からＳ４１１までの処理について、図１１を用いて具体的に説明する。図１１（ａ）は、図１０（ｆ）にて説明したセルＣＬ１の生成処理に続き、ステップＳ４０２にて、所定の走査方法による走査方向に従って画素（ｎ＋２，ｍ）が未処理画素として探索された状態を示している。そして図１０にて説明した処理と同様に処理を行い、図１１（ｂ）では画素（ｎ＋２，ｍ＋１）を、図１１（ｃ）では画素（ｎ＋３，ｍ＋１）を、図１１（ｄ）では画素（ｎ＋３，ｍ＋２）をセルＣＬ２に組み入れてセルを拡大する。
【００８１】
図１１（ｅ）に示したように、画素（ｎ＋３，ｍ＋２）がセルＣＬ２に組み入れた時点で、セルＣＬ２内の画素のレベル値合計は２６５となり、閾値２５５を超える。そこで、超えた分の誤差データ１０（＝２６５−２５５）を無視し、画素（ｎ＋３，ｍ＋２）がレベル値５０（＝６０−１０）であるとしてセルＣＬ２の重心ＧＣ２を算出する。
【００８２】
そして、図１１（ｆ）に示したように、算出した重心ＧＣ２の位置に存在する画素（ｎ＋３，ｍ＋１）にレベル値「２５５」を付与する。このとき、最後にセルＣＬ２に組み入れた画素（ｎ＋３，ｍ＋２）に誤差データ「１０」を戻す。そして、画素（ｎ＋３，ｍ＋２）をレベル値１０を有する未処理画素とし、セルＣＬ２から除外する。
【００８３】
図９および図１０、図１１を用いて説明したＣＣ法による階調変換処理を、階調データＣｃ、Ｍｃ、Ｙｃ全てについて実施してステップＳ４０を終了し、生成した「０」と「２５５」のレベル値を有する量子化データを出力する。次のステップＳ５０（図４）にて印刷するための画像データとして出力する処理を行う。
【００８４】
ステップＳ５０では、レベル値「２５５」の量子化データが付与された画素の位置にドットを形成するため、所定の駆動パルス幅を持ったレーザ駆動パルスを駆動データとして生成する。そして、この駆動データを印刷エンジン４０に出力することによって所定の色と大きさのドットを印刷用紙などに形成して印刷物として出力するのである。
【００８５】
以上、本実施形態における画像処理内容を説明したが、ＣＣ法によるポスト階調変換処理によれば、常にセルの重心に最も近い画素を組み入れてセルを生成するため、閾値を付与する画素位置に対してほぼ円状となるセルを生成する。従って、閾値が付与された画素位置にドットを形成した場合、隣り合うドットが近かったり、あるいは重なったりする確率が減少することでき、このようなドットの重なりによる特異パターンの発生を抑えることができる。
【００８６】
また、前述したように特許文献１や２における階調変換処理では、誤差データを隣接する画素やセルに移していくため、入力画像データを歪ませ、結果的に入力画像には存在しない特異パターンを発生しやすくしてしまっていたが、ＣＣ法によるポスト階調変換によれば、誤差データを元の画素に戻すため、入力画像データの歪みが小さくなり、入力画像の階調データに対して比較的忠実に階調変換処理を行うことができる。
【００８７】
さらに、本実施形態のように、誤差拡散法によるプレ階調変換処理と、ＣＣ法によるポスト階調変換処理とを組み合わせて実施することによって、規則的な特異パターンの発生を抑制することができる。この理由を次に説明する。
【００８８】
図１２は、一例として、ポスト階調変換処理前のＣｃ成分の階調データを示したもので、（ａ）から（ｃ）はプレ階調変換処理を行わない場合の入力画像の階調データを例示し、（ｄ）から（ｆ）はプレ階調変換処理を行った場合の入力画像の階調データを例示している。なお、階調データのうち説明の簡略化のため説明に必要でない画素のレベル値は一部省略し空白としている。
【００８９】
プレ階調変換処理が行われない場合、通常、色補正及び色変換処理においては、入力画像データに対して、単に色補正や色変換処理を行うのみであり、入力画像データのレベル値にバラツキを与える処理ではないため、入力画像が均一な濃度の階調データであったときは、ポスト階調変換処理前の階調データもほぼ均一の濃度のレベル値が入力される。そこで、一例として、色成分Ｃ（シアン）の階調データＣｃが、入力画像の階調データを単に色変換した均一のレベル値８５の階調データであるものとする。そして、図１２（ａ）に示したように、ポスト階調変換前の階調データとして入力され、セルＣＬ３が生成されているものとする。
【００９０】
次にセルＣＬ３に組み入れる画素を選択する処理が行われる。プレ階調変換を行わない場合は、図１２（ｂ）に示したように、重心ＧＣ３は画素（ｎ，ｍ）、（ｎ＋１，ｍ）のレベル値が等しいため、これら２つの画素の中間に位置することになる。このとき、セルに組み入れる対象となる画素は（ｎ，ｍ＋１）と（ｎ＋１，ｍ＋１）の２つの画素が存在する。そして、１２図（ｃ）に示したように、走査方向に従って（ｎ，ｍ＋１）を選択し、セルに組み入れる。
【００９１】
このように、均一のレベル値の階調データを階調変換すると、セルに組み入れる対象となる画素が複数存在することが多くなり、そのとき選択される画素は所定の走査順に従って選択されるなど、セルに対して毎回ほぼ同じ位置関係の画素が選択される確率が高くなる。この結果、同じ形状のセルが連続して生成されることが発生し、上述した規則的な特異パターンが発生しやすくなる。
【００９２】
一方、プレ階調変換処理を行った場合、バラツキが与えられたまま色補正及び色変換処理がおこなわれるため、入力画像が均一な濃度であっても、ポスト階調変換処理前の階調データにはバラツキが与えられたレベル値が入力される。例えば、図１２（ａ）の階調データを、図８にて説明したように実際に誤差拡散法によってプレ階調変換すると、ポスト階調変換前の階調データは図１２（ｄ）に示した状態になる。このとき、セルＣＬ３が生成されているものとする。
【００９３】
次にセルＣＬ３に組み入れる画素を選択する処理に際して、図１２（ｅ）に示したように、プレ階調変換処理によって画素（ｎ，ｍ）、（ｎ＋１，ｍ）のレベル値に差が生じているため、重心ＧＣ３は画素の中間にならず、画素（ｎ＋１，ｍ）内に位置することになる。このとき、セルに組み入れる対象となる画素は（ｎ＋１，ｍ＋１）のみとなる。この結果、図１２（ｆ）に示したように、図１２（ｃ）とは異なる形状のセルが生成される。
【００９４】
図１２での説明から明らかなように、バラツキが与えられたレベル値の階調データを階調変換すると、重心の位置は、バラツキが与えられたことによって画素の中間に位置する確率が減り、レベル値が大きくなった画素内に位置する確率が高くなる。このため、セルに組み入れる対象となる画素は、レベル値のバラツキに合わせて、適当にバラツクことになる。この結果、同じ形状のセルが連続して生成される確率が減り、上述した規則的な特異パターンの発生を抑えることが容易となるのである。
【００９５】
また、前述したように、プレ階調変換ではレベル値にバラツキを与えるとき、レベル値の誤差データを隣接する画素に分散している。そのため、ポスト階調変換においても、特許文献１または２のように誤差データを隣接する画素またはセルに移す処理をおこなうと、入力画像の階調データに対する誤差データが更に大きくなり、その結果、階調変換処理による量子化ノイズを増幅させ特異パターン等の発生を容易にしてしまうことがあった。本実施形態のように、ポスト階調変換処理をＣＣ法によって行うことによって、プレ階調調変換処理によって生じた誤差データを更に分散させることなく、バラツキが与えられた入力画像の階調データを階調変換できるため、規則的なパターンなどの発生を抑えつつ入力画像の階調データに忠実で快適な出力画像を得ることができる。
【００９６】
次に、本実施形態を適用した画像出力装置２０のハード構成において、ポスト階調変換における各ハードの具体的な処理内容を図９のフローチャートと図２の構成図を参照して説明する。なお誤差拡散法及び色補正、色変換処理に関しては、特許文献１などにより周知の処理技術として既知であるため、これらの処理内容については説明を省略する。
【００９７】
まず、ＣＰＵ２２は、ハードディスク２５またはＲＯＭ２６に格納されたプログラムを読み出して、入力画像の読み込み処理を開始する（ステップＳ４０１）。入力画像の読み込みは、ホストコンピュータ５０から入力画像データを入力Ｉ／Ｆ２１を介してＲＡＭ２７に取り込むことで行う。このとき、Ｃｃ、Ｍｃ、Ｙｃ各色成分の入力画像データは、ＲＡＭ２７の所定領域である入力バッファ領域に格納される。この例を図１３（ａ）に示す。
【００９８】
ＲＡＭ２７は、図１３（ａ）に示すように、入力バッファ領域２７１と、ワーキングメモリ領域２７２と、出力バッファ領域２７３とから構成される。この入力バッファ領域２７１は、２次元構造を有しており、例えば上述の入力画像の画素（以降、入力画素）について、（ｎ，ｍ）に位置する入力画素は、入力バッファ領域の（ｎ，ｍ）のアドレスに格納される。入力画素の位置に対応するように入力バッファ領域２７１が構成される。実際には、このアドレスには入力画像データのレベル値が格納されることになる。例えば、図１０（ａ）に示すＣｃ成分の入力画像の階調データが入力されると、図１３（ａ）に示すように入力バッファ２７１に各画素のレベル値が格納される。ワーキングメモリ領域２７２は、重心位置の演算結果とレベル値の演算結果が格納され、出力バッファ領域２７３は入力バッファ２７１と同様に各入力画素に対応するように構成される。詳細は後述する。
【００９９】
次いで、ＣＰＵ２２は、セル生成の最初の未処理画素となる初期画素を探索決定して（ステップＳ４０２）、決定した初期画素のレベル値が閾値より小さいか否かを判断する（ステップＳ４０４）。具体的には、ＲＯＭ２６に格納した閾値を読出し、ＲＡＭ２７の入力バッファ２７１から読み出した初期画素の階調値と比較し、閾値よりも小さい場合はステップＳ４０５に移行し、閾値と同じか大きいときはステップＳ４０６に移行する。
【０１００】
初期画素の決定は、ＲＡＭ２７の入力バッファ２７１に格納された入力画像データのうち、入力画素の位置で最も上の左側に位置する画素をＣＰＵ２２が選択する。すなわち、図１３（ａ）に示す例では、（ｎ，ｍ）に対応する位置に位置する画素を初期画素としてＣＰＵ２２は判断する。以下、説明を簡単にするため、（ｎ，ｍ）＝（０，０）として説明する。
【０１０１】
ステップＳ４０４で閾値より小さいと判断された場合（ＹＥＳ）、ＣＰＵ２２は、未処理画素の選択を行いセルを拡大する処理を行う（ステップＳ４０５）。ここで未処理画素の選択は、セルの重心を利用して行う。重心を利用して画素の選択を行うことによって、最終的に生成されるセルの形状は、円状となり、その重心にドットを形成させることで、ドット間距離が均一となり、視覚的に快適な印刷出力を得ることができるのである。
【０１０２】
ＣＰＵ２２は初期画素の位置する画素のレベル値と、そのアドレス位置とを読み出し、重心を演算する。ＣＰＵ２２は、具体的に以下の演算式を用いて演算し重心を求める。
【０１０３】
（式１）
ｘ重心＝｛｛（セルの重心のｘ座標）×（セル内の画素のレベル値合計）｝＋｛（選択した未処理画素のｘ座標）×（選択した未処理画素のレベル値）｝｝／{（セル内の画素のレベル値合計）＋(選択した未処理画素のレベル値)}
ｙ重心＝｛｛（セルの重心のｙ座標）×（セル内の画素のレベル値合計）｝＋｛（選択した未処理画素のｙ座標）×（選択した未処理画素のレベル値）｝｝／{（セル内の画素のレベル値合計）＋(選択した未処理画素のレベル値)}
（ｘ重心、ｙ重心は重心位置の座標）
この演算式はＲＯＭ２６に格納され、ステップＳ４０５にてＣＰＵ２２が読み出して演算を行うことになる。もとより、初期画素の場合は、セルの重心のｘ、ｙ座標は０として演算される。なお、ＣＰＵ２２は、演算した重心位置と、初期画素のレベル値５０とを、上述したワーキングメモリ領域２７２に格納する（図１３（ｂ）参照）。その後の演算処理をスムーズに行うためである。
【０１０４】
また、ＣＰＵ２２は、ステップＳ４０４で初期画素のレベル値が閾値より小さいと判断された場合は、初期画素に対応する出力バッファ２７３に“０”を格納し、ステップＳ４０４で初期画素のレベル値が閾値以上と判断された場合は、その時点で初期画素に対応する出力バッファ２７３に“２５５”を格納する。この画素にドットを打つ処理を行うためである。ここでは、図１３（ｂ）に示すように、選択した画素に対応するＲＡＭ２７の出力バッファ２７３に“０”がＣＰＵ２２によって格納されることになる。
【０１０５】
未処理画素の選択処理は、ステップＳ４０５で演算した重心から最も近い距離にある画素を選択することによって行う。このとき、ＲＡＭ２７の入力バッファの所定位置に格納されている入力画像データから、アドレス（１，０）にある画像データか、アドレス（０，１）にある画像データが選択される。２つの画素ともアドレス（０，０）から等距離にあるからである。ここで、いずれかの画素を選択する必要があるが、本実施形態では走査方向に従ってＣＰＵ２２が０行１列のアドレス（１，０）にある画素データを選択する。こうしてセルを拡大する処理が行われるのである。
【０１０６】
次いで、ＣＰＵ２２は、再びセル内の画素のレベル値合計が閾値未満であるか否か判断する（ステップＳ４０４）。すなわち、選択した未処理画素のレベル値を含めたセル内の画素のレベル値合計が閾値“２５５”未満であるか否かを判断する。具体的には、ＣＰＵ２２は、ＲＡＭ２７のワーキングメモリ２７２に書き込んだ画素のレベル値と、ステップＳ４０５で選択した画素の入力バッファ２７１に格納されたレベル値とを読出し、その合計を演算して、ＲＯＭ２６に格納された閾値（ここでは“２５５”の値）とを比較する。例えば図１３（ｃ）の例では、アドレス（１，０）格納されているレベル値は“５０”であるので、レベル値合計は“１００”となる。よって合計値は閾値に達しないことになる。
【０１０７】
レベル値の合計が閾値を超えない場合（ステップＳ４０４：ＹＥＳ）、ＣＰＵ２２は、再び選択した未処理画素を含めた重心の演算を行う（ステップＳ４０５）。具体的なＣＰＵ２２の演算は、上述した（式１）の演算式を用いて行うことになる。これまで求めた重心のｘ、ｙ座標は、（０，０）で重心のレベル値は“５０”、未処理画素のｘ、ｙ座標は（１，０）で、その階調値は“５０”とすると、演算される重心位置は（０．５，０）となる。このステップＳ４０５で演算した重心位置は、ＣＰＵ２２の制御によってＲＡＭ２７のワーキングメモリ２７２にセルのレベル値合計とともに格納される。ステップＳ４０５での前回の処理で、ワーキングメモリ２７２には初期画素の重心位置および初期画素のレベル値が格納されていたが、ここではその位置に上書きして格納する。その格納後の例を図１３（ｃ）に示す。
【０１０８】
ここで、重心位置は上述の（式１）で示されているように必ずしも整数値になるとは限らない。重心に最も近い画素を選択する場合のほかに、重心が位置する画素に最も近い画素を選択する場合でもよい。このようにすることで、重心位置は整数値として演算でき、ＣＰＵ２２が処理する計算量の削減が期待できる。
【０１０９】
ここで、ＣＰＵ２２は、選択した初期画素に対応する入力バッファ２７１に“−１”を格納する。再度未処理画素の選択で、当該画素を選択されないようにするためである。以降、未処理画素の選択処理に際して、選択処理と同時もしくは選択処理以前に、既に選択された画素に対応する入力バッファ２７１に“−１”を格納する処理を行う。このような処理を行うのは、入力バッファ２７１に格納されたレベル値はその合計値としてワーキングメモリ２７２に格納され、以後の処理で必要とされないからである。
【０１１０】
なお、ＣＰＵ２２は、入力バッファ２７１に“−１”を格納させているが、これに限ることはなく、他の負の値でもよい。さらに入力バッファ２７１と同様の構成のメモリ領域を用意して、選択した画素に対応する位置にフラグを立てて、選択画素が処理済みか否かを判別するようにしてもよい。
【０１１１】
このように、ステップＳ４０４とＳ４０５の処理を繰り返すたびに、ＣＰＵ２２は、ステップＳ４０４で演算したセル内の画素のレベル値合計が、閾値と等しいか否か判断しながら閾値に達するまでセルを構成していくことができる。また、閾値に達していない場合、上述したようにＣＰＵ２２は、セルに組み入れた入力画素の位置に対応した出力バッファ２７３の位置に“０”を格納する。
【０１１２】
図１４（ａ）は、未処理画素（１，１）がセルに組み入れたときの状態を示したもので、セル内の画素のレベル値合計と、ＲＯＭ２６に格納された閾値とをＣＰＵ２２が読み出して、両者を比較し、まだ閾値に達していないので、画素（１，１）をセルに組み込み、ワーキングメモリ２７２には重心位置とセルのレベル値合計が、また選択した未処理画素（１，１）に対応する出力バッファ２７３に“０”がそれぞれ格納されている。
【０１１３】
図１４（ｂ）は、図１４（ａ）に引き続き行われる処理を示したもので、入力画素（１，２）が重心位置に最も近い画素として選択された状態を示している。このとき、セルのレベル値合計が“２５５”になった状態を示している。すなわち、これまでセルに組み込まれた画素のレベル値合計“２０５”が、ＲＡＭ２７のワーキングメモリ２７２に格納されるので、その値と画素（１，２）の値との合計値を、閾値と比較することで、ＣＰＵ２２は閾値と等しいと判断する。この場合、ＣＰＵ２２は、セルに組み入れた入力画素（１，２）の位置に対応した出力バッファ２７３の位置に“０”を格納する。
【０１１４】
そして、閾値と等しいとＣＰＵ２２が判断した場合（ステップＳ４０６：ＹＥＳ）、処理はステップＳ４０７に移行し（式１）を用いて重心位置を演算し、演算した重心位置とセルのレベル値合計をワーキングメモリ２７２に格納する。そして、重心に位置する画素に所定の大きさのドットを形成するための処理を行う。具体的には、図１４（ｂ）に示したように、ＲＡＭ２７の出力バッファ２７３の入力画素の位置に対応するアドレス位置に“２５５”を書き込む。出力バッファの構造も入力バッファと同様に２次元構造で、入力画素の位置に対応するアドレス空間を有している。重心が位置するアドレスに“２５５”を書き込むことで、その後、実際にその位置に対応する位置にドットを打つことができる。
【０１１５】
次いで、ＣＰＵ２２は、データ“２５５”の書き込み処理をトリガーにして新たにセルを生成する処理に移行し、再び未処理画素があるか否か判断する（ステップＳ４０２）。すなわち、上述した処理をＲＡＭ２７の入力バッファ２７１に書き込まれたすべてのレベル値に対して行ったか否かで判断し、未処理画素があれば（ＹＥＳ）再び処理はステップＳ４０４に移行し、上述の処理を繰り返す。例えば、図１４（ｃ）に、引き続いて上述した走査方法に従って、未処理画素（２，０）が探索された状態を示した。すべての画素に対して処理が終了すれば（ステップＳ４０２：ＮＯ）、ＣＰＵ２２はステップＳ４０３に移行し、処理が終了することになる。
【０１１６】
一方、ステップＳ４０６でセル内の画素のレベル値合計が閾値を超える場合（ＮＯ）、処理はステップＳ４０９に移行し、閾値超えた場合の重心演算処理を行う。
【０１１７】
図１５（ａ）は、図１４にて説明した処理に引き続いて、ＣＰＵ２２の処理が行われた状態を示したもので、入力画素（３，１）がセルに組み入れられたときのＲＡＭ２７を示している。次に、図１５（ｂ）に示したように、（３，２）に位置する画素が選択されると、セル内の画素のレベル値合計を演算するとすると“２６５”になり、閾値“２５５”を超えることになる。したがって、このような場合（ステップＳ４０６：ＮＯ）、ステップＳ４０９に移行することになる。
【０１１８】
ステップＳ４０９は、閾値を超えるレベル値分つまり誤差データを無視してセルの重心を算出する処理を行う。このためまず、ＣＰＵ２２は、閾値からセル内の画素のレベル値合計、すなわち閾値からこれまでステップＳ４０５で格納したワーキングメモリのレベル値を引く演算を行う。例えば図１５に示す例では、閾値は“２５５”、ステップＳ４０５でこれまで格納したレベル値は図１５（ａ）に示したように“２０５”であるので、ＣＰＵ２２がこれらを読み出して２５５−２０５＝５０の値を演算する。
【０１１９】
そして、ＣＰＵ２２が、この“５０”の値を画素（３，２）の階調値として重心の演算を行うことによって誤差データが無視されることになる。重心の演算は具体的には、以下の演算式を用いる。
【０１２０】
（式２）
ｘ重心＝｛｛（セルの重心のｘ座標）×（セル内の画素のレベル値合計）｝＋｛（選択した未処理画素のｘ座標）×（ステップＳ４０９の演算値）｝｝／｛（セル内の画素のレベル値合計）＋(ステップＳ４０９の演算値)｝
ｙ重心＝｛｛（セルの重心のｙ座標）×（セル内の画素のレベル値合計）｝＋｛（選択した未処理画素のｙ座標）×（ステップＳ４０９の演算値）｝｝／｛（セル内の画素のレベル値合計）＋(ステップＳ４０９の演算値)｝
（ｘ重心、ｙ重心は重心位置の座標）
（式１）との違いは、選択した未処理画素のレベル値をそのまま用いるのではなく、セルの合計が閾値と同じになるようなレベル値を用いる点が異なる。
【０１２１】
この演算式は、（式１）の場合と同様に予めＲＯＭ２６に格納されており、ＣＰＵ２２が本ステップを実行する際にＲＯＭ２６から読み出すことで実行される。ここでは、最終的にステップＳ４０５で選択した画素のレベル値は、これまで演算したレベル値の合計との和をとることで閾値と等しくなるように演算して、それをもとに重心位置を求めることになる。そしてＣＰＵ２２は、演算した重心位置データを再びＲＡＭ２７のワーキングメモリ２７２に書き込む（図１５（ｂ）のワーキングメモリ２７２参照）。
【０１２２】
また、ＣＰＵ２２は、最終的に選択した画素の元のレベル値からステップＳ４０９で演算した演算結果を引いた値（誤差データ）を演算して、その値を再びその選択した画素の入力バッファに書き込む（ステップＳ４１０）。これにより、当該画素のレベル値が、戻しデータとして格納される。図１５（ｃ）に示す例では、ステップＳ４０９で演算した“５０”を最終的に選択した（３，２）の画素のレベル値“６０”から引いて“１０”の値を求め、これをＲＡＭ２７の入力バッファ２７１のアドレス（３，２）に再び書き込む（図１５（ｃ）の入力バッファ２７１参照）。
【０１２３】
そして、この画素はセルに組み込まれず、初期走査においてセルに組み入れられる未処理画素とする処理を行う（ステップＳ４１１）。上述したように、戻しデータをセル以外の画素に戻すのではなく、戻しデータが発生した画素に再び格納させることで、入力階調値に忠実なドット分布を形成することができる。
【０１２４】
その後処理はステップＳ４０８に移行し、上述した処理が繰り返されることになる。ちなみに、ＣＰＵ２２は、重心位置の存在する画素に対応する出力バッファ２７３に“２５５”を格納させる。これによりＣＰＵ２２は、その後の処理で重心位置の存在する画素にドットを打つことができる。
【０１２５】
以上説明したように、本実施形態によれば、入力画像に対して誤差拡散法によるプレ階調変換処理によって各色成分の階調データにバラツキを与えたのち、ＣＣ法によるポスト階調変換処理によって、所定のレベル値を閾値とする２値化処理を行う。こうすることで、入力画像には存在しない周期的あるいは規則的なパターンや、ドットの偏りに起因した特異パターンなどの発生を抑えた、視覚的に快適な出力画像を得ることができる。また、ＣＣ法によるポスト階調変換処理によれば、プレ階調変換処理で生じ得る量子化誤差データの増幅を抑えることができるため、特異パターンの発生を抑えた入力画像に忠実な出力画像を得ることができるのである。
【０１２６】
図１６に、一例として、入力画像の階調データのレベル値が“４６”の均一な濃度の入力画像に本実施形態を適用した場合を示した。図１６（ａ）は入力画像を、（ｂ）はプレ階調変換処理を行わないでＣＣ法によるポスト階調変換処理を行った場合の出力画像を示し、図１６（ｃ）はプレ階調変換処理後の入力画像を、（ｄ）はプレ階調変換処理後にＣＣ法によるポスト階調変換処理を行った場合の出力画像を示した。図１６（ｂ）には画面左上部に規則的な繰り返しパターンの発生が見られるが、図１６（ｄ）にはこれといった特異パターンは存在していない。図１６（ｂ）と（ｄ）との比較から明らかなように、本実施形態であるプレ階調変換処理とポスト階調変換処理との組み合わせ処理によって、特異パターンの発生が抑えられ、視覚的に快適な出力画像を得ている。
【０１２７】
以上、本発明の一実施形態を説明したが、本発明はこうした実施の形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内において様々な形態で実施し得ることは勿論である。以下、変形例を挙げて説明する。
【０１２８】
「第１変形例」
次に本発明の第１変形例について説明する。前記実施形態では、画素選択の基準点を重心位置にして毎回画素選択時に更新するようにしていたが、第１変形例では、画素選択の基準点を、画素のレベル値には関係なく、画素の座標位置を利用した中心位置とする。これにより、毎回重心位置を計算することがなく、他の処理を含めた全体の処理速度を上げることができる。
【０１２９】
第１変形例を図１７を用いて説明する。ここで、中心位置は、レベル値を利用した重心位置ではなく、その座標位置を利用した中心位置であって、その位置座標を（ｘ、ｙ）とすると以下の式により演算される（以下の式でＮはセル内の画素数）。
【０１３０】
（式３）
x = Σi x i / N
y = Σi y i / N
入力画像データとして、各画素、図１７（ａ）に示す階調値が入力される場合で説明する。図１７（ａ）は、説明を簡単にするために縦３画素、横４画素分の画像データが入力されている例であって、１フレーム分の画像データが入力される場合であってもよい。
【０１３１】
図１７（ａ）の入力画像データが入力されると、まず初期画素を選択するが前記実施形態と同様に所定の走査方法として、未処理画素のうち最も上の最も左側にある画素を選択する。最終的に生成されるセルが１画像中斜め方向に傾いて配置される確率が高くなり、ドットが斜め方向に打たれ知覚されにくくするためでもある。図１７（ａ）の例では、（ｎ、ｍ）の位置の画素を初期画素として選択する。
【０１３２】
そして、初期画素をセルＣＬに組み入れ、その中心位置を（式３）を用いて演算すると図１７（ｂ）に示す位置に中心位置ＳＣが位置することになる。次に、その中心位置ＳＣから最も近い位置に位置する未処理画素を選択することになるが、かかる画素が複数ある場合には、前記実施形態等と同様に所定の走査方法により選択する。図１７（ｂ）に示す例では、中心位置ＳＣに最も近い位置は（ｎ＋１、ｍ）と（ｎ、ｍ＋１）の２つ存在するが、ここでは（ｎ＋１、ｍ）を選択することになる。
【０１３３】
次に、図１７（ｃ）に示すように選択した未処理画素ＭＧをセルＣＬに組み入れ、セルの拡大処理を行う際、未処理画素を選択するための基準点すなわち中心位置を演算すると、図１７（ｃ）に示したように、ＳＣの位置となる。セルのレベル値合計は、この時点で“１００”であるのでさらに未処理画素を選択することになる。本変形例でも前記実施形態と同様に閾値を“２５５”と設定し、この値になるまで未処理画素を選択することにする。
【０１３４】
この基準点（中心位置）ＳＣから最も近い画素を選択することになるが、図１７（ｃ）に示す例では、２つの画素（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１）が存在することになる。この場合、走査方法に従って選択し、（ｎ、ｍ＋１）の画素を未処理画素として選択することになる。
【０１３５】
そして、図１７（ｄ）に示すように選択した未処理画素をセルに組み入れ、その中心位置を（式３）を用いて演算すると、位置ＳＣに位置することになる。この時点でのセルのレベル値合計は“１６５”となり、閾値に達しないのでさらに未処理画素を選択することになる。中心位置ＳＣから最も近い距離にある画素は、（ｎ＋１、ｍ＋１）に位置する画素であるので、この画素を未処理画素として選択する。
【０１３６】
次いで、選択した未処理画素ＭＧをセルに組み入れ、その中心位置ＳＣを（式３）を用いて演算すると、図１７（ｅ）に示す位置にすることになる。この時点でのセルのレベル値の合計は“２１５”で、閾値に達しない。よって、未処理画素を選択する。中心位置ＳＣから最も近い位置にある未処理画素は、（ｎ、ｍ＋２）、（ｎ＋１、ｍ＋２）、（ｎ＋２、ｍ）、（ｎ＋２、ｍ＋１）の４つの画素があるが、所定の走査方法に従って（ｎ+２，ｍ）に位置する画素を選択することになる。
【０１３７】
そして、選択した未処理画素をセルに組み入れることになるが、未処理画素を組み入れたとき生成されるセルのレベル値の合計は“２６５”となり、閾値を超えてしまう。この場合も前記実施形態と同様に、閾値に達する分のレベル値分をセルに組み入れ、この未処理画素に残りのレベル値分（誤差データ）を戻して以後当該画素が未処理画素として選択されるようにする。前記実施形態と同様に、入力画像の階調データに忠実なドットを生成させるためである。ここでは、（ｎ＋２，ｍ）に位置する画素に対して“１０”を戻しデータとして与えることになる（図１７（ｆ）参照）。
【０１３８】
次いで、ここまで構成したセルは、セルのレベル値合計が閾値に達したので、セルの重心位置にドットを生成させるための処理を行う。重心位置の演算は、前記実施形態の（式１）と同様に演算することになり、図１８（ａ）の重心位置ＧＣを得る。
【０１３９】
そして、その後の処理により重心位置ＧＣに位置する画素にドットを生成させると、図１８（ｂ）に示す位置に生成されることになる。前記実施形態と同様に、毎回重心位置を計算すると、（式１）や（式２）に示すよう処理演算が多くなるが、画素選択のための基準点を中心位置として演算し、最後に重心を演算することで、演算量を減らすことができるとともに、量子化済み画素群が円状に成長してドット間距離を保ち視覚的に快適なドット出力を得ることができる。
【０１４０】
「第２変形例」
また、第２変形例として、セルの重心位置を演算せずに、第１変形例にておいて、未処理画素の選択に用いたセルの中心位置にある画素にドットを生成させるようにしてもよい。こうすれば、重心の計算を行う必要がないので、演算量を減らすことができる。この場合、中心位置が複数の画素の間に位置することも考えられるが、かかる場合には、例えば走査方法と同じ優先順序に従ってセル内のいずれか１つの画素を選択するようにしてもよい。例えば図１８（ａ）に示す例では、図１８（ｃ）に示したように、図１８（ｂ）とは異なる画素の位置にドットが生成されることになる。あるいは、ランダムに選択したり、所定のテーブルを用いて複数の画素からいずれか１つの画素を選択したりするようにしてもよい。
【０１４１】
「第３変形例」
さらに、第３変形例として、画素選択のための基準点を毎回更新するのではなく、１回おきに更新したり、２回おきに更新したり、予め回数を決めてその回数のときに更新するようにしてもよい。１回おきに更新する例を、図１９を用いて説明する。
【０１４２】
図１６のときと同様に入力画像データが図１９（ａ）のように入力された場合で説明することにする。図１７（ｂ）と同様に、初期画素を選択してその中心位置ＳＣを演算すると図１９（ｂ）に示す位置となる。そして、未処理画素ＭＧを基準点（中心位置ＳＣ）から最も近い画素を選択すると（ｎ＋１、ｍ）に位置する画素となる。
【０１４３】
次いで、選択した未処理画素をセルに組み入れるが、次に選択する未処理画素は、セルから演算した中心位置ＳＣに基づいて選択するのではなく、組み入れる前の中心位置ＳＣに基づいて選択する。この時点で基準点を更新しないようにする。図１９（ｃ）に示すように中心位置ＳＣから最も近い画素は（ｎ、ｍ＋１）となりこの画素を未処理画素ＭＧとして選択する。
【０１４４】
次いで、選択した未処理画素ＭＧを組み入れたセルは図１９（ｄ）のようになる。そして、１回おきに基準点を更新するようにするので、この時点で構成したセルの中心位置ＳＣを演算すると図１９（ｄ）に示す位置に中心位置ＳＣが移動することになる。
【０１４５】
次いで、この更新した中心位置を基準にして、この位置から最も近い未処理画素ＭＧを選択してその画素をセルＣＬに組み入れると図１９（ｅ）に示すようになる。そして、基準点を更新せず、１つ前に演算した中心位置ＳＣから最も近い画素を未処理画素ＭＧとして選択（（ｎ＋２，ｍ）の位置の画素を選択）して、セルを構成する。
【０１４６】
図１７の例と同様に、この選択した画素を組み入れたセル内の画素のレベル値合計は閾値を超えるので、超える分を戻しデータとして、選択した画素に戻す。そして、ドット生成のための重心位置を演算すると図１９（ｆ）に示した位置ＧＣになり、この位置にドットを生成させるようにする。そして、基準点を更新させると、図１９（ｆ）に示した位置に基準点ＳＣが移動することになる。
【０１４７】
このように毎回、画素選択の基準点を更新するのではなく、１回おきに更新することでさらに演算量を減らすことができ、他の処理を含めた画像処理装置全体の処理速度の向上を図ることができる。さらに、初期画素の選択から４回目の未処理画素選択のときに基準点を更新し、さらにそれから３回目、２回目、…と減算するように、当該回数のときに更新することとしてもよい。
【０１４８】
「第４変形例」
前記実施形態では、プレ階調変換に誤差拡散法を用いて階調データのレベル値にバラツキを与えたが、第４変形例として、組織的ディザ法または平均誤差最小法を用いてもよい。これらの手法は、濃淡画像の階調を再現する２値化手法として一般に用いられるものである。また、前記実施形態では、誤差拡散法によるプレ階調変換後に色補正を行うものとして説明したが、特にこれに限るものではなく、色補正や色変換処理を行わず、単に階調データにバラツキを与えるための処理としてプレ階調変換処理を行うこととしても良い。
【０１４９】
組織的ディザ法は、各画素の階調データのレベル値に対して閾値マトリックスと呼ばれる変換テーブルを用いて、テーブル内に格納された閾値と比較する。そして、入力画素のレベル値がその画素に対応したテーブル内の閾値より大きいか小さいかによって、入力画素のレベル値を所定のレベル値に階調データ変換するのである。こうすることによって、前記実施形態と同様に、入力画素のレベル値にバラツキを与えることができる。
【０１５０】
また、平均誤差最小法は、周辺の階調データ変換済みの画素に生じた誤差データの重み付き平均値で、次の未処理画素の階調データ値を修正するものである。一方、本実施形態でのポスト階調変換で用いた誤差拡散法は、ある画素の階調データ変換時に生じた誤差データを、周辺のまだ階調データ変換していない未処理画素に拡散して加えるものである。従って、平均誤差最小法と誤差拡散法は、画像端での取り扱いを除けば全く等価と考えてよく、前記実施形態と同様に、入力画素のレベル値にバラツキを与えることができる。
【０１５１】
また、前記実施形態および第４変形例におけるプレ階調変換において、上記の説明から明らかなように、レベル値の種類をより少なくすれば誤差データが大きくなるため、バラツキの幅はより大きくできる。従って、第４変形例の変形例として、プレ階調変換時において、入力画像の階調データのレベル値に合わせて、レベル値の種類を可変することとしても良い。例えば、入力画素のレベル値が１２７以下の比較的低濃度の画像の場合は、階調変換後のレベル値の種類を多くし、入力画素のレベル値が１２８以上の比較的高濃度の画像の場合は、階調変換後のレベル値の種類を少なくする。あるいはその逆に、低濃度の画像の場合はレベル値の種類を少なくし、高濃度の画像の場合は、レベル値の種類を多くすることとしてもよい。こうすれば、入力画像の濃淡にあわせて誤差データの大きさを制御でき、ポスト階調変換時に入力画像の濃淡領域に合わせて生成するセルの形状が変化する確率が増え、規則的なパターンの抑制に寄与することができる。
【０１５２】
「第５変形例」
前記実施形態では、ポスト階調変換によって、“０”と“２５５”の２種類のレベル値に階調変換した２値化データを出力バッファ２７３に格納した。これは、以降のドットを形成する処理において、レベル値“２５５”に対応した大きさのドットを打つことを想定したためである。第５変形例では、複数種類の大きさのドットを打つこととし、その複数種類の大きさのドットに対応した複数の種類のレベル値にポスト階調変換するものとしても良い。
【０１５３】
例えば、パルス幅変調部３５は、ポスト階調変換処理によって２値化されたレベル値に対応して、レーザを駆動するための駆動パルスのパルス幅を変更して駆動データを生成する。そして、この駆動データを印刷エンジン４０に出力し、レーザドライバ４１を介してレーザーダイオード４２を駆動する。この結果、レーザーダイオード４２の駆動時間（オン時間）によってドットの大きさを制御することができるため、２値化されたレベル値に応じた大きさのドットが印刷用紙等の記録媒体に印刷されることになる。この場合、ポスト階調変換後に２値化データとして出力されるレベル値の種類は、２値化に際して用いる閾値の種類数だけ存在することになる。従って、この２値化されたレベル値の種類数は、ポスト階調変換前の階調データのレベル値の種類に対して通常少ない場合が多いが、上述したパルス幅を細かく設定して駆動データを生成するようなときは多くなる場合もある。
【０１５４】
実際に、ポスト階調変換処理に際しては、入力画像の階調データを、対象となる大きさの複数のドットに対応して入力画像の階調データを分版する処理を行い、複数のドットを形成するための２値化処理を行うことも可能である。この処理については、本発明の本質ではないので、ここでは説明を省略する。
【０１５５】
「第６変形例」
また、第６変形例として、前記実施形態における画像処理装置は、レーザープリンタにて構成するようにしたが、本発明はこれに限定されるものでなく、インクジェットプリンタなどインクを印刷媒体に付着させて印刷する方式のプリンタやサーマルプリンタなど種々のプリンタや電子写真あるいはディスプレーなどにて構成するようにしてもよい。あるいは、このようなプリンタなどの機能が組み込まれたコピー機やコンピュータ、ワープロ、ファックスなど種々の機器において本発明の画像処理装置を構成するようにしてもよい。
【図面の簡単な説明】
【０１５６】
【図１】本発明が適用される一実施形態におけるシステム全体を示す構成図。
【図２】本実施形態での画像処理装置のハード構成を説明する模式図。
【図３】階調データ変換処理において階調変換の様子を説明する説明図。
【図４】本実施形態での画像処理装置が行う処理を説明するためのフローチャート。
【図５】入力画像データの階調変換処理における走査方法を示すめの説明図。
【図６】誤差拡散法における誤差データの重み付け分散方法を説明する説明図。
【図７】プレ階調変換処理における誤差拡散処理を説明するフローチャート。
【図８】誤差拡散法における階調データの分散処理を説明する説明図。
【図９】ＣＣ法によるポスト階調変換処理を説明するフローチャート。
【図１０】ＣＣ法における階調変換処理の過程を説明するための説明図。
【図１１】ＣＣ法における階調変換処理の過程を説明するための説明図。
【図１２】プレ階調変換処理の有無によるポスト階調変換の違いを説明する説明図。
【図１３】ＲＡＭの構成と格納されるデータの例を説明する説明図。
【図１４】ＲＡＭの構成と格納されるデータの例を説明する説明図。
【図１５】ＲＡＭの構成と格納されるデータの例を説明する説明図。
【図１６】本実施形態の階調変換処理によって得る出力画像の一例を示した模式図。
【図１７】画素選択の基準点をセルの中心位置とする場合のＣＣ法での処理説明図。
【図１８】画素選択の基準点をセルの中心位置とする場合のＣＣ法での処理説明図。
【図１９】画素選択の基準点をセルの中心位置とする場合のＣＣ法での処理説明図。
【符号の説明】
【０１５７】
１０…ホストコンピュータ、１１…アプリケーション部、１２…ラスタライズ部、２０…画像出力装置、２１…入力Ｉ／Ｆ、２２…ＣＰＵ、２４…計、２５…ハードディスク、２６…ＲＯＭ、２７…ＲＡＭ、３０…画像処理部、３１…プレ階調変換部、３２…色変換部、３３…色補正表、３４…ポスト階調変換部、３５…パルス幅変調部、４０…印刷エンジン、４１…レーザドライバ、４２…レーザーダイオード、２７１…入力バッファ、２７２…ワーキングメモリ、２７３…出力バッファ、ＣＬ…セル、ＣＬ１、ＣＬ２、ＣＬ３…セル、ＧＣ…セルの重心位置、ＧＣ２、ＧＣ３…セルの重心位置、ＳＣ…セルの中心位置、ＭＧ…未処理画素。
【図１】
2005311414.tif 000003
【図２】
2005311414.tif 000004
【図３】
2005311414.tif 000005
【図４】
2005311414.tif 000006
【図５】
2005311414.tif 000007
【図６】
2005311414.tif 000008
【図７】
2005311414.tif 000009
【図８】
2005311414.tif 000010
【図９】
2005311414.tif 000011
【図１０】
2005311414.tif 000012
【図１１】
2005311414.tif 000013
【図１２】
2005311414.tif 000014
【図１３】
2005311414.tif 000015
【図１４】
2005311414.tif 000016
【図１５】
2005311414.tif 000017
【図１７】
2005311414.tif 000018
【図１８】
2005311414.tif 000019
【図１９】
2005311414.tif 000020
【図１６】
2005311414.tif 000021