(57)【要約】      （修正有）【課題】誤差拡散法において、ドット分散性を維持すると共に、不連続性を抑制する。【解決手段】入力画像の階調数を減少させるために当該入力画像の各画素の階調値を量子化する際に発生する量子化誤差を誤差拡散法に従い他の画素に分配する際に使用する拡散係数を階調値毎に決定する方法であって、階調値Ｉを包含する量子化ステップを規定する２つの代表値をＸ及びＹ（Ｘ＜Ｙ）とし、代表値Ｘ及び代表値Ｙに挟まれる所定値をＺとすると、Ｘ＜Ｉ≦ＺであるかＺ＜Ｉ≦Ｙであるかを判定する判定工程と、Ｘ＜Ｉ≦Ｚの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて小さくならず、Ｚ＜Ｉ≦Ｙの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて大きくならないという条件を満たすように、拡散係数を決定する。【選択図】図６
2010016698.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置が、入力画像の階調数を減少させるために当該入力画像の各画素の階調値を量子化する際に発生する量子化誤差を誤差拡散法に従い他の画素に分配する際に使用する拡散係数を階調値毎に決定する方法であって、
階調値Ｉを包含する量子化ステップを規定する２つの代表値をＸ及びＹ（Ｘ＜Ｙ）とし、代表値Ｘ及び代表値Ｙに挟まれる所定値をＺとすると、Ｘ＜Ｉ≦ＺであるかＺ＜Ｉ≦Ｙであるかを判定する判定工程と、
Ｘ＜Ｉ≦Ｚの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて小さくならず、Ｚ＜Ｉ≦Ｙの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて大きくならないという条件を満たすように、階調値Ｉに対応する拡散係数を決定する決定工程と、
を備えることを特徴とする方法。
【請求項２】
階調値Ｉの画素で構成される画像に所定の拡散係数を用いた誤差拡散法を適用して得られた画像の画質を評価することにより、当該所定の拡散係数の評価値を算出する算出工程を更に備え、
前記決定工程では、前記条件を満たす拡散係数のうち前記評価値が最高のものを階調値Ｉに対応する拡散係数として決定する
ことを特徴とする請求項１に記載の方法。
【請求項３】
所定値Ｚは、代表値Ｘ及び代表値Ｙの中間値であることを特徴とする請求項１又は２に記載の方法。
【請求項４】
所定値Ｚは、代表値Ｘ及び代表値Ｙが規定する量子化ステップの量子化閾値であることを特徴とする請求項１又は２に記載の方法。
【請求項５】
入力画像の階調数を減少させるために当該入力画像の各画素の階調値を量子化する際に発生する量子化誤差を誤差拡散法に従い他の画素に分配する際に使用する拡散係数を階調値毎に決定する情報処理装置であって、
階調値Ｉを包含する量子化ステップを規定する２つの代表値をＸ及びＹ（Ｘ＜Ｙ）とし、代表値Ｘ及び代表値Ｙに挟まれる所定値をＺとすると、Ｘ＜Ｉ≦ＺであるかＺ＜Ｉ≦Ｙであるかを判定する判定手段と、
Ｘ＜Ｉ≦Ｚの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて小さくならず、Ｚ＜Ｉ≦Ｙの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて大きくならないという条件を満たすように、階調値Ｉに対応する拡散係数を決定する決定手段と、
を備えることを特徴とする情報処理装置。
【請求項６】
入力画像の階調数を減少させるために当該入力画像の各画素の階調値を量子化する際に発生する量子化誤差を誤差拡散法に従い他の画素に分配する際に使用する拡散係数を階調値毎に決定する情報処理装置のコンピュータを、
階調値Ｉを包含する量子化ステップを規定する２つの代表値をＸ及びＹ（Ｘ＜Ｙ）とし、代表値Ｘ及び代表値Ｙに挟まれる所定値をＺとすると、Ｘ＜Ｉ≦ＺであるかＺ＜Ｉ≦Ｙであるかを判定する判定手段、
Ｘ＜Ｉ≦Ｚの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて小さくならず、Ｚ＜Ｉ≦Ｙの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて大きくならないという条件を満たすように、階調値Ｉに対応する拡散係数を決定する決定手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、拡散係数を決定する方法、情報処理装置、及びプログラムに関する。
【背景技術】
【０００２】
多階調の画像の階調数を減少させて、より少ない階調数で中間調を表現する手法の１つとして、誤差拡散法が知られている。誤差拡散法では、入力階調値と閾値との比較による量子化を行い、この際に発生した誤差（量子化誤差）を所定の割合で主走査方向及び副走査方向の近傍の画素に拡散（分配）する。具体的には、例えば図１に示すように、注目画素において発生した量子化誤差は、周辺の未処理画素Ａ，Ｂ，Ｃに分配される。この際の分配割合を拡散係数と呼び、分配先と拡散係数とを併せて誤差拡散マトリクスと呼ぶ。
【０００３】
図１の誤差拡散マトリクスでは、周辺３画素の未処理画素Ａ，Ｂ，Ｃに量子化誤差が分配されることになるので、誤差拡散マトリクスのマトリクスサイズは３である。一般的な誤差拡散法では、量子化誤差を１つの固定の誤差拡散マトリクスに従い、周辺の未処理画素へ分配していた。
【０００４】
これに対し、出力画像の評価値を用いて入力画像データの階調値に応じて（即ち、階調値毎に）適切な誤差拡散係数を設定することが提案されている（特許文献１参照）。特許文献１の誤差拡散法では、人間の視覚特性に応じて評価対象の画像の空間周波数成分を重み付けした画像を生成し、その画像における各画素値の標準偏差を評価値として求めている。そして、この評価値を拡散係数設定時の評価基準として用い、視覚的に最善の結果を与える拡散係数を階調値毎に選択する。これにより、ドット分散性に優れた画像を形成することができ、擬似輪郭を排除した高画質な出力画像を得ることができる。
【特許文献１】特開２００４−７２５９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１の誤差拡散法によれば、階調値が連続的に滑らかに変化するグラデーション画像等においては、拡散係数の切り替わる部分が不連続に見える場合があるという問題点があった。
【０００６】
本発明はこのような状況に鑑みてなされたものであり、誤差拡散法において、階調値毎の良好なドット分散性を維持すると共に、拡散係数の切り替わる部分において発生する不連続性を抑制する技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、第１の本発明は、情報処理装置が、入力画像の階調数を減少させるために当該入力画像の各画素の階調値を量子化する際に発生する量子化誤差を誤差拡散法に従い他の画素に分配する際に使用する拡散係数を階調値毎に決定する方法であって、階調値Ｉを包含する量子化ステップを規定する２つの代表値をＸ及びＹ（Ｘ＜Ｙ）とし、代表値Ｘ及び代表値Ｙに挟まれる所定値をＺとすると、Ｘ＜Ｉ≦ＺであるかＺ＜Ｉ≦Ｙであるかを判定する判定工程と、Ｘ＜Ｉ≦Ｚの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて小さくならず、Ｚ＜Ｉ≦Ｙの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて大きくならないという条件を満たすように、階調値Ｉに対応する拡散係数を決定する決定工程と、を備えることを特徴とする方法を提供する。
【０００８】
また、第２の本発明は、入力画像の階調数を減少させるために当該入力画像の各画素の階調値を量子化する際に発生する量子化誤差を誤差拡散法に従い他の画素に分配する際に使用する拡散係数を階調値毎に決定する情報処理装置であって、階調値Ｉを包含する量子化ステップを規定する２つの代表値をＸ及びＹ（Ｘ＜Ｙ）とし、代表値Ｘ及び代表値Ｙに挟まれる所定値をＺとすると、Ｘ＜Ｉ≦ＺであるかＺ＜Ｉ≦Ｙであるかを判定する判定手段と、Ｘ＜Ｉ≦Ｚの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて小さくならず、Ｚ＜Ｉ≦Ｙの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて大きくならないという条件を満たすように、階調値Ｉに対応する拡散係数を決定する決定手段と、を備えることを特徴とする情報処理装置を提供する。
【０００９】
また、第３の本発明は、入力画像の階調数を減少させるために当該入力画像の各画素の階調値を量子化する際に発生する量子化誤差を誤差拡散法に従い他の画素に分配する際に使用する拡散係数を階調値毎に決定する情報処理装置のコンピュータを、階調値Ｉを包含する量子化ステップを規定する２つの代表値をＸ及びＹ（Ｘ＜Ｙ）とし、代表値Ｘ及び代表値Ｙに挟まれる所定値をＺとすると、Ｘ＜Ｉ≦ＺであるかＺ＜Ｉ≦Ｙであるかを判定する判定手段、Ｘ＜Ｉ≦Ｚの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて小さくならず、Ｚ＜Ｉ≦Ｙの場合、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて大きくならないという条件を満たすように、階調値Ｉに対応する拡散係数を決定する決定手段、として機能させるためのプログラムを提供する。
【００１０】
なお、その他の本発明の特徴は、添付図面及び以下の発明を実施するための最良の形態における記載によって更に明らかになるものである。
【発明の効果】
【００１１】
以上の構成により、本発明によれば、誤差拡散法において、階調値毎の良好なドット分散性を維持すると共に、拡散係数の切り替わる部分において発生する不連続性を抑制することが可能となる。
【発明を実施するための最良の形態】
【００１２】
以下、添付図面を参照して、本発明の実施例を説明する。以下で説明される個別の実施例は、本発明の上位概念から下位概念までの種々の概念を理解するために役立つであろう。
【００１３】
なお、本発明の技術的範囲は、特許請求の範囲によって確定されるのであって、以下の個別の実施例によって限定されるわけではない。また、実施例の中で説明されている特徴の組み合わせすべてが、本発明に必須とは限らない。
【実施例１】
【００１４】
図１２は、実施例１に係る誤差拡散法を実行するパーソナルコンピュータ（ＰＣ）１２００の構成を示すブロック図である。ＰＣ１２００（情報処理装置の一例）は、ＣＰＵ１２０１、ＲＯＭ１２０２、ＲＡＭ１２０３、ＨＤＤ１２０４、通信インタフェース（Ｉ／Ｆ）１２０５、及びユーザインタフェース（ＵＩ）１２０６を備える。
【００１５】
ＣＰＵ１２０１は、ＨＤＤ１２０４に格納されたプログラム（例えば、プリンタドライバ）を実行することにより、誤差拡散法を実行する。この際、ＲＡＭ１２０３はワークエリアとして使用される。
【００１６】
ＲＯＭ１２０２は、ＰＣ１２００のファームウェアなどを記憶している。
【００１７】
ＨＤＤ１２０４は、前述のプログラムに加えて、画像データを記憶している。
【００１８】
通信Ｉ／Ｆ１２０５は、例えばＵＳＢ規格に準拠し、プリンタ（不図示）と通信する。
【００１９】
ＵＩ１２０６は、ＰＣ１２００を操作するためのマウス及びキーボードや、ＰＣ１２００の動作状況を表示するディスプレイなどを含む。
【００２０】
図２は、実施例１に係る誤差拡散法の一例を示すフローチャートである。図２のフローチャートに従って、処理ビット数（入力階調値のビット数）が８ビットで出力値（量子化の代表値）が５値の誤差拡散処理を説明する。本フローチャートの各ステップの処理は、ＰＣ１２００がプログラム（前述のプリンタドライバ）を実行することにより実現される。
【００２１】
まず、Ｓ２０１で、ＰＣ１２００は、入力画像データ（ＨＤＤ１２０４から読み出した画像データ）中の注目画素（処理対象の画素）における階調値Ｉｎを入力（ＲＡＭ１２０３に展開）する。
【００２２】
次にＳ２０２で、ＰＣ１２００は、累積誤差値Ｅｒｒ−Ａｌｌを入力階調値Ｉｎに加算する。本実施例では、図１の誤差拡散マトリクスを用いて量子化誤差の分配を行うものとする。そのため、注目画素の入力階調値に加算される累積誤差は、図３に示すように、前ラインからの拡散誤差と処理ラインからの拡散誤差の和であり、Ｅｒｒ−Ａｌｌ＝（ＥｒｒＡ＋ＥｒｒＢ＋ＥｒｒＣ）である。よって、累積誤差加算後の階調値Ｉｎ’は、Ｉｎ’＝Ｉｎ＋（ＥｒｒＡ＋ＥｒｒＢ＋ＥｒｒＣ）となる。
【００２３】
次にＳ２０３で、ＰＣ１２００は、量子化処理を行う。量子化処理では、累積誤差加算後の階調値Ｉｎ’と、複数の閾値（量子化閾値）との比較を行う。本実施例では、処理ビット数８がビットであり、代表値が５値の量子化処理であるため、閾値と出力階調値との関係は図４に示すようになる。即ち、出力階調値をＯｕｔとすると、
（Ｉｎ’≦３２）のときＯｕｔ＝０
（３２＜Ｉｎ’≦９６）のときＯｕｔ＝６４
（９６＜Ｉｎ’≦１６０）のときＯｕｔ＝１２８
（１６０＜Ｉｎ’≦２２４）のときＯｕｔ＝１９２
（２２４＜Ｉｎ’≦２５５）のときＯｕｔ＝２５５
となる。
【００２４】
次にＳ２０４で、ＰＣ１２００は、量子化誤差を算出する。量子化誤差は、累積誤差加算後の階調値Ｉｎ’と出力階調値Ｏｕｔとの差分である。例えば、累積誤差加算後の階調値Ｉｎ’が７５の場合、Ｉｎ’と各閾値との比較により、出力階調値Ｏｕｔは６４（９６＜Ｉｎ’≦１６０）である。従って、量子化誤差Ｅｒｒ＝（Ｉｎ’−Ｏｕｔ）＝（７５−６４）＝１１となる。
【００２５】
次にＳ２０５で、ＰＣ１２００は、入力階調値に応じた誤差拡散マトリクスを選択する。本実施例での処理ビット数は８ビットであるため、入力階調値に応じた最適な誤差拡散マトリクスは２５６通り設定されており、その中から階調値Ｉｎ’に対応した誤差拡散マトリクスが選択される。
【００２６】
そして、Ｓ２０６で、ＰＣ１２００は、Ｓ２０４で算出した量子化誤差Ｅｒｒを、Ｓ２０５で選択した誤差拡散マトリクスにより拡散する。例えば、Ｓ２０５で選択された誤差拡散マトリクスが図５に示すマトリクスであった場合、分配先の未処理画素Ａ、Ｂ、Ｃに対応する拡散係数はＣ１、Ｃ２、Ｃ３である。そこで、
未処理画素Ａに拡散される誤差Ｅｒｒ−Ａ＝Ｅｒｒ×Ｃ１÷（Ｃ１＋Ｃ２＋Ｃ３）
未処理画素Ｂに拡散される誤差Ｅｒｒ−Ｂ＝Ｅｒｒ×Ｃ２÷（Ｃ１＋Ｃ２＋Ｃ３）
未処理画素Ｃに拡散される誤差Ｅｒｒ−Ｃ＝Ｅｒｒ×Ｃ３÷（Ｃ１＋Ｃ２＋Ｃ３）
となる。
【００２７】
そして、Ｓ２０７で、ＰＣ１２００は、画像データの全画素を処理したか否かを判定する。未処理の画素が存在する場合はＳ２０１に戻り、次の画素について同様の処理を繰り返す。全画素を処理した場合は本フローチャートの処理が終了する。
【００２８】
次に、入力階調値に対応して設定される最適な誤差拡散マトリクスについて説明する。入力階調値が出力階調値付近（例えば代表値が０と２５５の２値である量子化処理であれば、入力画像の低濃度領域、又は高濃度領域の入力階調値。代表値が０と１２８と２５５の３値の量子化処理であれば、入力階調値が０と１２８と２５５付近の領域。）においては、量子化処理時に発生する誤差が小さい。
【００２９】
そのため、誤差拡散法の走査ラインの主走査方向に沿って累積誤差値を見ていくと、累積誤差値は大きく変化しない。一方、副走査方向に沿って累積誤差値を見ていくと、こちらは累積誤差値が大きく波打つように変化する。つまり、副走査方向の各ラインを見ていくと、累積誤差値の大きいラインと累積誤差値の小さなラインが発生する。そのため、累積誤差値の大きなラインではドットがＯＮになりやすく、逆に累積誤差値の小さなラインではドットはＯＮになりにくい。その結果、走査ラインの主走査方向に対して拡散する誤差の割合が小さい場合、この傾向が強くなり、横方向にドットが連なったようなハーフトーン処理結果となりやすい。
【００３０】
そこで、入力階調値が出力階調値付近の場合、主走査方向に対して拡散する誤差の割合を大きくした誤差拡散マトリクスを用いることで、主走査方向と副走査方向の集積誤差値の変動量が適度になり、ドット分散性の良い画像が得られる。
【００３１】
一方、入力階調値が出力階調値間の中間値付近（２値の量子化処理であれば中濃度領域）の場合、量子化処理時に発生する誤差は、出力階調値付近に比べて大きい。そのため、主走査方向と副走査方向における累積誤差値の変動量はあまり大きく変わらない。そのため、主走査方向に対して拡散する誤差の割合と副走査方向に対して拡散する誤差の割合は同程度、または副走査方向に対して拡散する誤差の割合が大きい方が、ドット分散性の良い画像が得られる。
【００３２】
また、入力階調値が出力階調値付近から出力階調値間の中間値付近、又は中間値付近から出力階調値付近までの間で、誤差拡散マトリクスの誤差の分配傾向（即ち、拡散係数）を急激に切り替えることは好ましくない。なぜなら、グラデーション画像等の入力値が連続的に滑らかに変化する画像において、入力階調値に応じた拡散係数の切り替わり目で段差が目立ってしまうからである。
【００３３】
そのため、本実施例では、上述の影響を考慮して入力階調値に応じた拡散係数を決定する。以下、図６に示すフローチャートを参照して説明する。本フローチャートの処理は、ＰＣ１２００がプログラム（前述のプリンタドライバの一部であってもよいし、これとは別のプログラムであってもよい）を実行することによって実現される。
【００３４】
また、本フローチャートの処理は、画像データの量子化を行う前に実行されて、処理結果としての拡散係数はプリンタドライバの一部としてＨＤＤ１２０４に格納されるものとする。或いは、画像データの量子化を行う際に、Ｓ２０５において実行されてもよい。
【００３５】
まず、Ｓ６０１で、ＰＣ１２００は、入力階調値の選択を行う。本実施例では、誤差拡散処理のビット数は８ビットであるため、１〜２５４の入力階調値が選択される。入力階調値０と２５５では量子化誤差が発生しないので、拡散係数を決定する必要はない。そのため、入力階調値０と２５５は、本実施例のＳ６０１では選択されない。ここで選択した階調値をＩとする。
【００３６】
次にＳ６０２で、ＰＣ１２００は、拡散係数を選択する。ここでは、取り得る全ての拡散係数が順に選択され、Ｓ６０２からＳ６０７のループにおいて、選択された拡散係数に対する処理が行われる（Ｓ６０３からＳ６０７の処理については後述する）。最終的には、取り得る全ての拡散係数から１つの拡散係数が後述するＳ６０８で選択される。例えば、図５に示す誤差拡散マトリクスにおいて、取り得る全ての拡散係数は次式で表される。
【００３７】
Ｃ１／Ｓｕｍ
Ｃ２／Ｓｕｍ
Ｃ３／Ｓｕｍ
ここで、ＣＮ＝０，１，・・・，９
３
Ｓｕｍ＝ΣＣＮ（≠０）
Ｎ＝１
である。
【００３８】
次にＳ６０３で、ＰＣ１２００は、Ｓ６０２において選択された拡散係数から誤差拡散ベクトルを算出し、誤差拡散ベクトルが画像のＸ方向（主走査方向）に対してなす角度θを算出する。誤差拡散ベクトルを算出し、角度θを求める方法を、図７及び図８を用いて説明する。
【００３９】
図７は、図５に示す誤差拡散マトリクスから、注目画素を原点として、拡散方向（拡散位置）とその大きさ（拡散係数値、即ち重み付け）をベクトルで表した図である。図７に示す各ベクトルから、画像のＸ方向及びＹ方向（副走査方向）の成分をそれぞれ算出し、それぞれを加算したものを次式により算出し、それぞれベクトルＶＸ、ＶＹとする。
【００４０】
図８に示すように、これらＶＸ、ＶＹをＸ方向とＹ方向の成分とするベクトルＶＥを誤差拡散ベクトルと定義する。
【００４１】
３
ＶＸ＝ΣＣＮｃｏｓ（θＮ）
Ｎ＝１
３
ＶＹ＝ΣＣＮｓｉｎ（θＮ）
Ｎ＝１
【００４２】
そして、図８に示すように、この誤差拡散ベクトルＶＥが、画像のＸ方向に対してなす角度θを次式により算出する。
【００４３】
θ＝ｔａｎ−１（ＶＹ／ＶＸ）
【００４４】
次にＳ６０４で、ＰＣ１２００は、階調値Ｉの領域判定を行う。本実施例は前述したように５つの出力階調値をもつ。そこで、本実施例では図９に示すように、出力階調値間（量子化ステップ）毎にその中間値ＭＮをＳ６０４における領域判定するためのパラメータ（所定値Ｚ）として設定する。ここで、量子化ステップとは、隣り合う出力階調値（代表値Ｘ及び代表値Ｙ）によって規定される区間のことであり、階調値Ｉは所定の量子化ステップに包含される。図９では、０と６４の間、６４と１２８の間、１２８と１９２の間、１９２と２５５の間を指す。
【００４５】
更に、各出力階調値間の中間値として、０と６４の間の中間値を３２、６４と１２８の間の中間値を９６、１２８と１９２の間の中間値を１６０、１９２と２５５の間の中間値を２２４とした。なお、中間値の代わりに量子化閾値を領域判定するためのパラメータとして用いてもよい。
【００４６】
Ｓ６０４よる階調値Ｉの領域判定では、階調値Ｉが図９に示すように、各出力階調値間を中間値で区切った領域１または領域２どちらの領域に含まれるか、即ち、Ｎ＝０，１，２，３，４とした場合に、
ＯｕｔＮ＜Ｉ≦ＭＮ    （領域１）
ＭＮ＜Ｉ≦ＯｕｔＮ＋１  （領域２）
のいずれであるかを判定する。
【００４７】
そして、Ｓ６０５で、ＰＣ１２００は、θが所定の条件を満たすか否かの判定を行う。具体的には、領域１については、算出されたθが、１つ前の階調値（Ｉ−１）に対してＳ６０８（詳細は後述）で選択された拡散係数から算出されるθ’から減少していないかを判定する。減少していた場合はＳ６０７に進み、減少していない場合はＳ６０６に進む。一方、領域２については、算出されたθが、θ’から増加していないかを判定する。増加していた場合はＳ６０７に進み、増加していない場合はＳ６０６に進む。
【００４８】
ここで、θがθ’から減少しているということは、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて小さくなっているということを意味する。また、θがθ’から増加しているということは、誤差拡散法の主走査方向に対する副走査方向への量子化誤差の分配割合が階調値（Ｉ−１）に対応する拡散係数と比べて大きくなっているということを意味する。
【００４９】
Ｓ６０６では、ＰＣ１２００は、階調値Ｉの画素で構成される画像に、Ｓ６０２で選択した拡散係数を用いた誤差拡散法を適用して得られた画像（図１０参照）の画質を評価することにより、この拡散係数の評価値を算出する。ここでは、図１０の画像のうち、誤差拡散が十分に行われてドットの生成が安定した斜線部分の領域を画質評価の対象領域として、評価値を算出する。ドットの生成が安定していれば、図１０に示す対象領域はこれに限らず、出力画像のどの部分でもよい。
【００５０】
ここで、対象領域の評価値として、例えば特許文献１に記載されているように、人間の視覚特性に応じて評価対象の画像の空間周波数成分を重み付けした画像を生成し、その画像における各画素値の標準偏差を用いることができる。或いは、ドットの分散性及び人間の視覚特性を考慮したその他の評価値を用いてもよい。
【００５１】
Ｓ６０７では、ＰＣ１２００は、全拡散係数に対して処理が終了したかを判定する。終了していない場合はＳ６０２に戻って次の拡散係数を選択し、同様の処理を繰り返す。終了した場合はＳ６０８に進む。
【００５２】
Ｓ６０８で、ＰＣ１２００は、Ｓ６０６で最高の評価値が算出された拡散係数を、Ｓ６０１で選択された階調値Ｉに対応する拡散係数として決定する。このとき、Ｓ６０５で条件を満たさなかった拡散係数が選択されることはない。
【００５３】
次にＳ６０９で、ＰＣ１２００は、全階調値に対する処理が終了したか（拡散係数の選択が行われたか）否かを判定する。全階調値に対する処理が終了していない場合はＳ６０１に戻って次の階調値を選択し、同様の処理を繰り返す。全階調値に対する処理が終了した場合は、本フローチャートの処理は終了する。
【００５４】
以上の処理により、入力階調値に応じた最適な拡散係数が設定されされた場合の入力階調値とθの関係を示すグラフの一例を図１１に示す。図９の領域１で表される出力階調値から中間値までの範囲では、誤差拡散ベクトルの角度θの値が減少しないという条件の中で、評価値が最高の拡散係数が選択される。そのため、主走査方向に対して拡散する誤差の割合が大きい誤差拡散マトリクスから副走査方向に対して拡散する誤差の割合が大きい誤差拡散マトリクスへと徐々に遷移するように最適な拡散係数が選択される。一方、図９の領域２で表される中間値から出力階調値までの範囲では、θの値が増加しないという条件の中で、評価値が最高の拡散係数が選択される。そのため、副走査方向に対して拡散する誤差の割合が大きい誤差拡散マトリクスから主走査方向に対して拡散する誤差の割合が大きい誤差拡散マトリクスへと徐々に遷移するように拡散係数が選択される。
【００５５】
この結果、各階調値で良好なドット分散性を維持しつつ、グラデーション画像等の入力値が連続的に滑らかに変化する場合にも、段差などが目に付きにくく、不連続とならない良好な画像を得ることができるように、拡散係数を選択することが可能となる。
【００５６】
以上、本発明を実施するための好適な実施例について説明したが、本発明はこれらの実施例に限られるものではなく、その要旨を逸脱しない範囲で様々な形態による実施が可能である。
【００５７】
例えば、入力階調値に応じて選択される拡散係数を決定する方法において、本実施例では、入力階調値の領域判定とθの判定を行った後、拡散係数の評価値の算出を行っている。しかし、評価値の算出を行ってから、入力階調値の領域判定とθの判定を行い、入力階調値に応じた最適な拡散係数を選択してもよい。
【００５８】
また、入力階調値は、注目画素の画素値または注目画素値と直前の画素との平均画素値でもよい。そして、本実施例では、入力階調値８ビットの全ての階調値に応じて誤差拡散係数が設定されているが、これは、例えば入力階調値８ビット中の下位６ビットを満足する整数に応じて誤差拡散係数が設定されていてもよい。即ち、本実施例は、全ての入力階調値に応じて誤差拡散係数を設定する場合に限られているものではない。
【００５９】
また、誤差拡散処理の処理ビット数、量子化レベル数、選択される誤差拡散マトリクスのサイズ及び形状は、例示した特定の形態に限定されるものではない。
【００６０】
以上説明したように、本実施例によれば、情報処理装置は、階調値Ｉが量子化ステップにおける所定値以下の場合、階調値（Ｉ−１）に対応する拡散係数と比べて副走査方向への誤差の分配割合が小さくならないように、階調値Ｉに対応する拡散係数を決定する。また、階調値Ｉが量子化ステップにおける所定値より大きい場合、階調値（Ｉ−１）に対応する拡散係数と比べて副走査方向への誤差の分配割合が大きくならないように、階調値Ｉに対応する拡散係数を決定する。
【００６１】
これにより、誤差拡散法において、階調値毎の良好なドット分散性を維持すると共に、拡散係数の切り替わる部分において発生する不連続性を抑制することが可能となる。
【００６２】
［その他の実施例］
上述した各実施例の機能を実現するためには、各機能を具現化したソフトウェアのプログラムコードを記録した記録媒体をシステム或は装置に提供してもよい。そして、そのシステム或は装置のコンピュータ（又はＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムコードを読み出し実行することによって、上述した各実施例の機能が実現される。この場合、記録媒体から読み出されたプログラムコード自体が上述した各実施例の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。このようなプログラムコードを供給するための記録媒体としては、例えば、フロッピィ（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスクなどを用いることができる。或いは、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることもできる。
【００６３】
また、上述した各実施例の機能を実現するための構成は、コンピュータが読み出したプログラムコードを実行することだけには限られない。そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって上述した各実施例の機能が実現される場合も含まれている。
【００６４】
更に、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれてもよい。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって上述した各実施例の機能が実現される場合も含むものである。
【図面の簡単な説明】
【００６５】
【図１】誤差拡散マトリクスの一例を示す図である。
【図２】誤差拡散法の一例を示すフローチャートである。
【図３】注目画素に加算される量子化誤差を説明する図である。
【図４】量子化処理における、閾値と出力階調値との関係を示す図である。
【図５】誤差拡散マトリクスの拡散係数を説明する図である。
【図６】拡散係数を決定する処理の流れを示すフローチャートである。
【図７】誤差拡散ベクトルを算出する方法を説明する図である。
【図８】誤差拡散ベクトルを示す図である。
【図９】階調値の領域判定を説明する図である。
【図１０】拡散係数の評価値を算出するための画像を示す図である。
【図１１】実施例１に従い拡散係数が決定された場合の、入力階調値と誤差拡散ベクトルの角度との関係の一例を示すグラフである。
【図１２】実施例１に係る誤差拡散法を実行するパーソナルコンピュータ（ＰＣ）の構成を示すブロック図である。
【符号の説明】
【００６６】
１２００  パーソナルコンピュータ（ＰＣ）
１２０１  ＣＰＵ
１２０２  ＲＯＭ
１２０３  ＲＡＭ
１２０４  ＨＤＤ
１２０５  通信インタフェース（Ｉ／Ｆ）
１２０６  ユーザインタフェース（ＵＩ）
【図１】
2010016698.tif 000003
【図２】
2010016698.tif 000004
【図３】
2010016698.tif 000005
【図４】
2010016698.tif 000006
【図５】
2010016698.tif 000007
【図６】
2010016698.tif 000008
【図７】
2010016698.tif 000009
【図８】
2010016698.tif 000010
【図９】
2010016698.tif 000011
【図１０】
2010016698.tif 000012
【図１１】
2010016698.tif 000013
【図１２】
2010016698.tif 000014