(57)【要約】【課題】誤差拡散処理における「異常な振動」を緩和して処理結果が異常になることを回避しつつ、「ドット発生の遅延」と「尾ひき」の問題を解消した画像処理装置や方法、及びプログラムを提供すること。【解決手段】入力画像データに対して画素ごとに２種類以上の階調値を有する出力画像データに変換する画像処理装置であって、負値の係数を含む拡散マトリックスと負値の係数を含まない拡散マトリックスのうちいずれか一つを選択する選択手段を備え、選択された前記拡散マトリックスを用いて前記変換により発生した誤差を未変換画素に拡散させることを特徴としている。【選択図】図１
2006005881.tif 000002
【特許請求の範囲】
【請求項１】
入力画像データに対して画素ごとに２種類以上の階調値を有する出力画像データに変換する画像処理装置であって、
負値の係数を含む拡散マトリックスと負値の係数を含まない拡散マトリックスのうちいずれか一つを選択する選択手段、
を備え、選択された前記拡散マトリックスを用いて前記変換により発生した誤差を未変換画素に拡散させることを特徴とする画像処理装置。
【請求項２】
前記選択手段は、注目画素に蓄積された蓄積誤差値又は前記注目画素での前記変換により発生した誤差値若しくは前記注目画素の入力画像データである入力階調値、のうち少なくとも一つの値に応じて前記拡散マトリックスを選択する、ことを特徴とする請求項１記載の画像処理装置。
【請求項３】
前記選択手段は、前記蓄積誤差値又は前記変換により発生した誤差値若しくは前記入力階調値のうち少なくとも一つの値の絶対値が所定値より大きいとき前記負値の係数を含まない拡散マトリックスを選択し、前記絶対値がそれ以外のとき前記負値の係数を含む拡散マトリックスを選択する、ことを特徴とする請求項２記載の画像処理装置。
【請求項４】
前記負値の係数を含む拡散マトリックスは、注目画素からの位置が遠い画素ほど小さな係数が配置される、ことを特徴とする請求項１記載の画像処理装置。
【請求項５】
前記負値の係数を含む拡散マトリックスにおいて、前記負値の係数は少なくとも前記拡散マトリックスの外周の画素のいずれかに配置される、ことを特徴とする請求項１記載の画像処理装置。
【請求項６】
前記負値の係数を含む拡散マトリックスにおいて、注目画素に隣接する画素に対し、前記注目画素で発生した誤差よりも絶対値が大きな値を前記誤差として拡散させるよう前記係数が配置される、ことを特徴とする請求項１記載の画像処理装置。
【請求項７】
前記負値の係数を含む拡散マトリックスは、前記注目画素に隣接する画素以外の画素に前記負値の係数が配置される、ことを特徴とする請求項６記載の画像処理装置。
【請求項８】
前記負値の係数を含む拡散マトリックスは、注目画素が当該拡散マトリックスの重心に位置するよう係数が配置される、ことを特徴とする請求項１記載の画像処理装置。
【請求項９】
前記負値の係数を含まない拡散マトリックスは、主走査方向において当該拡散マトリックスの重心が注目画素に位置するよう係数が配置される、ことを特徴とする請求項１記載の画像処理装置。
【請求項１０】
入力画像データに対して画素ごとに２種類以上の階調値を有する出力画像データに変換する画像処理方法であって、
負値の係数を含む拡散マトリックスと負値の係数を含まない拡散マトリックスのうちいずれか一つを選択する選択工程と、
選択された前記拡散マトリックスを用いて前記変換により発生した誤差を未変換画素に拡散させる誤差拡散工程と、
を備えることを特徴とする画像処理方法。
【請求項１１】
入力画像データに対して画素ごとに２種類以上の階調値を有する出力画像データに変換する画像処理をコンピュータに実行させるプログラムであって、
負値の係数を含む拡散マトリックスと負値の係数を含まない拡散マトリックスのうちいずれか一つを選択する選択処理、
を備え、選択された前記拡散マトリックスを用いて前記変換により発生した誤差を未変換画素に拡散させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多階調画像データを低階調画像データに変換する誤差拡散法を用いた画像処理装置、画像処理方法、及びプログラムに関する。詳しくは、誤差拡散法で使用する拡散マトリックに関し、負値の係数を含むマトリックスと負値の係数を含まないマトリックスとを蓄積誤差値等に応じていずれかを選択して処理を行う画像処理装置、画像処理方法、及びプログラムに関する。
【背景技術】
【０００２】
従来から、プリンタなどの画像処理装置は、画素ごとに多値の階調値を有する階調データに対して、ドットの有無を表す２値の値に変換して印刷用紙に印刷等を行うようになされている。このような低階調の画像データに変換する場合に、原画像の画品質をできるだけ維持するための技術として誤差拡散法による擬似中間調表現が利用されている。誤差拡散法は、注目画素で発生した量子化誤差を当該画素の近傍の未量子化画素に拡散させて処理を行う方法である（例えば、以下の非特許文献１）。
【０００３】
しかし、ハイライト領域（ドット密度の低い領域）の立ち上がり部分で誤差拡散法による処理を行うと、ドットの発生が大幅に遅れる、いわゆる「ドット発生の遅延」と呼ばれる現象が発生する。また、入力階調値が大きく変化するエッジの領域では尾を引いたようにドットが抜けてしまう、いわゆる「尾ひき」と呼ばれる現象も発生する。
【０００４】
そのため、従来では入力階調値に応じて誤差拡散法での閾値を変更することで早くドットを発生させ「ドット発生の遅延」と「尾ひき」の問題を解決したものがある（以下の特許文献１）。
【０００５】
また、誤差拡散処理で使用する拡散マトリックス内に負値を含む係数を入れるとともに、注目画素に拡散マトリックスの重心が位置するようにその係数を配置させることで「ドット発生の遅延」等の問題を解消したものもある（以下の特許文献２、３）。
【０００６】
一方、誤差拡散処理において、対象画素の２値化結果が所定の値になったときサイズの大きな拡散マトリックスを用いてより広い範囲に２値化誤差を拡散させることで、ドット密度が疎な領域でもドットを均一に分散させるようにしたものもある（以下の特許文献４）。
【非特許文献１】Ｒｏｂｅｒｔ  Ｕｌｉｃｈｎｅｙ著、“Ｄｉｇｉｔａｌ  Ｈａｌｆｔｏｎｉｎｇ”、Ｔｈｅ  ＭＩＴ  Ｐｒｅｓｓ（１９８７年発行）、ｐ．２３９−２５２
【特許文献１】特開平７−１１１５９１号公報
【特許文献２】特願２００４−１５９０６４号
【特許文献３】特願２００４−１５９０７２号
【特許文献４】特開平７−２２６８４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、特開平７−２２６８４１号では、広い範囲に２値化誤差を拡散させるもので、「ドット発生の遅延」等の問題を解消するものではない。
【０００８】
一方、特願２００４−１５９０６４号及び特願２００４−１５９０７２号においてはかかる問題は解消されているものの、蓄積誤差の絶対値が、処理が先に進めば進むほど非常に大きくなってしまう「異常な振動」と呼ばれる現象が発生する。かかる現象により、本来ドットが打たるべきでない領域にドットが打たれ処理結果が異常になってしまうことがある。
【０００９】
そこで、本発明は、誤差拡散処理においてこのような「異常な振動」を緩和して処理結果が異常になることを回避しつつ、「ドット発生の遅延」と「尾ひき」の問題を解消した画像処理装置や方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために本発明は、入力画像データに対して画素ごとに２種類以上の階調値を有する出力画像データに変換する画像処理装置であって、負値の係数を含む拡散マトリックスと負値の係数を含まない拡散マトリックスのうちいずれか一つを選択する選択手段を備え、選択された拡散マトリックスを用いて変換により発生した誤差を未変換画素に拡散させることを特徴としている。これにより、例えば、負値の係数を含む拡散マトリックスが選択されると「ドット発生の遅延」や「尾引き」が解消された出力画像を得、負値の係数を含まない拡散マトリックスが選択されると「異常な振動」を緩和して処理結果が異常になることを回避することができる。
【００１１】
また、本発明は上記画像処理装置において、上記選択手段は、注目画素に蓄積された蓄積誤差値又は注目画素での変換により発生した誤差値若しくは注目画素の入力画像データである入力階調値、のうち少なくとも一つの値に応じて拡散マトリックスを選択する、ことを特徴としている。これにより、例えば、これら３つの値のうちいずれかの値に応じて拡散マトリックスを選択することができるため、「ドット発生の遅延」等を解消しつつ、「異常な振動」を緩和することができる。
【００１２】
さらに、本発明は上記画像処理装置において、上記選択手段は、蓄積誤差値又は変換により発生した誤差値若しくは入力階調値のうち少なくとも一つの値の絶対値が所定値より大きいとき負値の係数を含まない拡散マトリックスを選択し、絶対値がそれ以外のとき負値の係数を含む拡散マトリックスを選択する、ことを特徴としている。これにより、例えば、これら３つの値のうちいずれかの値に応じて拡散マトリックスを選択し、「異常な振動」を緩和しつつ、「ドット発生の遅延」等の問題を解決することができる。
【００１３】
さらに、本発明は上記画像処理装置において、上記負値の係数を含む拡散マトリックスは、注目画素からの位置が遠い画素ほど小さな係数が配置される、ことを特徴としている。これにより、例えば、注目画素の近傍ではより大きな誤差値が拡散されるため「ドット発生の遅延」等を解消した出力画像を得ることができる。
【００１４】
さらに、本発明は上記画像処理装置において、上記負値の係数を含む拡散マトリックスにおいて、負値の係数は少なくとも拡散マトリックスの外周の画素のいずれかに配置される、ことを特徴としている。これにより、例えば、注目画素の近傍ではより大きな誤差値が拡散されるため「ドット発生の遅延」等を解消した出力画像を得ることができる。
【００１５】
さらに、本発明は上記画像処理装置において、注目画素に隣接する画素に対し、注目画素で発生した誤差よりも絶対値が大きな値を誤差として拡散させるよう拡散マトリックスの係数が配置される、ことを特徴としている。これにより、例えば、注目画素の近傍ではより大きな誤差値が拡散されるため「ドット発生の遅延」等を解消した出力画像を得ることができる。
【００１６】
さらに、本発明は上記画像処理装置において、上記負値の係数を含む拡散マトリックスは、注目画素に隣接する画素以外の画素に負値の係数が配置される、ことを特徴としている。これにより、例えば、注目画素の近傍ではより大きな誤差値が拡散されるため「ドット発生の遅延」等を解消した出力画像を得ることができる。
【００１７】
さらに、本発明は上記画像処理装置において、上記負値の係数を含む拡散マトリックスは、注目画素が拡散マトリックスの重心に位置するよう係数が配置される、ことを特徴としている。これにより、例えば、主走査方向及び副走査方向への「ドット発生の遅延」等の問題を解消し、入力階調値に忠実なドットを生成することができる。
【００１８】
さらに、本発明は上記画像処理装置において、上記負値の係数を含まない拡散マトリックスは、主走査方向において拡散マトリックスの重心が注目画素に位置するよう係数が配置される、ことを特徴としている。これにより、例えば、負値の係数を含まない拡散マトリックスが選択されても、少なくとも主走査方向に「ドット発生の遅延」等の問題を解消した出力画像を得ることができる。
【００１９】
また、上記目的を達成するために本発明は、入力画像データに対して画素ごとに２種類以上の階調値を有する出力画像データに変換する画像処理方法であって、負値の係数を含む拡散マトリックスと負値の係数を含まない拡散マトリックスのうちいずれか一つを選択する選択工程と、選択された拡散マトリックスを用いて変換により発生した誤差を未変換画素に拡散させる誤差拡散工程と、を備えることを特徴としている。これにより、例えば、負値の係数を含む拡散マトリックスが選択されると「ドット発生の遅延」等が解消された出力画像を得、負値の係数を含まない拡散マトリックスが選択されると「異常な振動」を緩和して処理結果が異常になることを回避することができる。
【００２０】
さらに、上記目的を達成するために本発明は、入力画像データに対して画素ごとに２種類以上の階調値を有する出力画像データに変換する画像処理をコンピュータに実行させるプログラムであって、負値の係数を含む拡散マトリックスと負値の係数を含まない拡散マトリックスのうちいずれか一つを選択する選択処理を備え、選択された拡散マトリックスを用いて変換により発生した誤差を未変換画素に拡散させることを特徴としている。これにより、例えば、負値の係数を含む拡散マトリックスが選択されると「ドット発生の遅延」等が解消された出力画像を得、負値の係数を含まない拡散マトリックスが選択されると「異常な振動」を緩和して処理結果が異常になることを回避することができる。
【発明を実施するための最良の形態】
【００２１】
以下、図面を参照して本発明を実施するための最良の形態を説明する。図１は、本発明が適用される画像処理装置２０を含むシステム全体の構成を示す図である。図に示すように本システムは入力部１０と、画像処理装置２０と、出力部３０とから構成される。
【００２２】
入力部１０は、画像処理装置２０と接続され、処理対象の階調画像データｄ０を出力する。本実施例において階調画像データｄ０は、８ビット構成で０〜２５５までの２５６階調を有している。入力部１０は、例えば、ホストコンピュータ、イメージスキャナ、デジタルカメラ、ビデオカメラなどである。
【００２３】
画像処理装置２０は、入力部１０からの階調画像データｄ０が入力され、誤差拡散法による処理で２階調（０又は１）の画像データＢに変換する。かかる画像データＢは出力部３０に出力される。
【００２４】
出力部３０は、画像処理装置２０と接続され、画像処理装置２０からの２階調画像データＢに基づいて原画像を再生出力する。出力部３０は、例えば、プリンタ、ディスプレイ、ファクシミリ、複写機、プリンタやファクシミリ等の機能を有する複合機などである。
【００２５】
画像処理装置２０は、図１に示すように、加算器２１と、２値化部２２と、減算器２３と、重み付け誤差演算部２４、誤差メモリ２５、及びマトリックス選択部２６とから構成される。これにより誤差拡散処理が実現される。この構成で本願発明の特徴は、マトリックス選択部２６にある。マトリックス選択部２６には、負値の係数を含む誤差拡散マトリックスＷと負値の係数を含まない（正値の係数のみの）誤差拡散マトリックスＷとが格納され、誤差メモリ２５に蓄積された蓄積誤差Ｅ０の値に応じて、いずれかの拡散マトリックスＷが選択される。
【００２６】
次に、図２のフローチャートを用いて画像処理装置２０全体の動作を説明する。まず、本処理が開始される（Ｓ１０）と、注目画素が指定される（Ｓ１１）。本実施例において注目画素は、右方向を主走査方向、下方向を副走査方向としたとき、最も左上にある未処理画素である。
【００２７】
次いで、加算器２１において、指定された注目画素の入力階調値ｄ０と当該注目画素に拡散された蓄積誤差値Ｅ０とを加算する（Ｓ１２）。そして、２値化部２２において、加算後の値ｆと閾値とを比較することで２値化する（Ｓ１３）。加算値ｆが閾値以上のときはドット生成を示す“１”、閾値よりも少ないときは“０”となる。２値化後の値Ｂは出力部３０に出力される。
【００２８】
次いで、減算器２３において、加算値ｆから２値化後の値Ｂ’を減算することで２値化誤差Ｅ’を演算する（Ｓ１４）。ここで、Ｂ’はＢが“０”のとき“０”、“１”のとき“２５５”となる値である。そして、マトリックス選択部２６で選択（Ｓ１５）された拡散マトリックスＷを用いて、重み付け誤差演算部２４において重み付け誤差値Ｅ’（ｉ’、ｊ’）を演算する（Ｓ１６）。これにより注目画素の周囲に誤差値が拡散される。
【００２９】
次いで、誤差メモリ２５に画素ごとに重み付け誤差値Ｅ’（ｉ’、ｊ’）が格納される（Ｓ１７）。すでに、以前の処理で当該画素に重み付け誤差値が格納されているときはその誤差値に今回の処理での重み付け誤差値Ｅ’（ｉ’、ｊ’）を加算して格納する。
【００３０】
そして、未処理画素があれば（Ｓ１８で”ＹＥＳ”）再び注目画素の指定を行い（Ｓ１１）、上述の処理を繰り返す。順次、主走査方向に１画素づつ注目画素を移動させ、１ライン分の画素に対して処理が終了すると副走査方向に移動し次のラインに対して処理を行う。未処理画素がなくなると（Ｓ１８で”ＮＯ”）、一連の処理が終了する（Ｓ１９）。
【００３１】
次に、負値の係数を含む拡散マトリックスＷについて説明する。その例を図４（Ａ）に示す。この例では、注目画素（“＊”で示す）の周囲に“０．５”、注目画素から２つ下の画素に“−０．５”の係数を備えている。これにより、例えば誤差値が正のとき、注目画素に近い画素には多くの誤差値が拡散され、注目画素から遠くなると小さな誤差値が拡散されるよう係数が配置されている。なお、図４（Ｂ）及び（Ｃ）には従来からの拡散マトリックスＷの例を示す。
【００３２】
上述した「ドット発生の遅延」は、拡散マトリックスＷでの係数が小さい値となっていることに加え、入力階調値ｄ０が低い値のため周辺画素に拡散する誤差値が非常に小さく閾値に達するまで時間がかかることが原因である。また、「尾ひき」についても、誤差値が非常に小さい値のため、例えばドット密度の低い、ある領域で蓄積された誤差がドット密度の高い領域で相殺されるまで時間がかかることが原因である。
【００３３】
そこで、図４（Ａ）に示すように注目画素に近い画素に大きな係数を、遠い画素には小さな係数を配置することで絶対値の大きな誤差値が注目画素の周囲に生成されるため、加算値ｆが閾値以上となる確率が高まり、「ドット発生の遅延」等の問題を解決することができる。ただし、拡散マトリックスＷの係数の合計値が１よりも大きいと、誤差値として拡散される値が本来の誤差値とは異なる値となり、画像全体の平均階調値の誤差を最小にするという誤差拡散法本来の特徴を失うことになるので、注目画素から遠い画素に負値の係数を割り当てている。負値の係数を含む拡散マトリックスＷの例を図４（Ｄ）、（Ｅ）及び（Ｆ）に示す。負値の係数は拡散マトリックスＷの外周に沿って配置されている。
【００３４】
また、図４（Ｂ）に示す従来の拡散マトリックスＷで注目画素の位置を（０，０）としたとき、各座標位置に対して各係数値で重み付けした重心位置を演算すると（５／１６，９／１６）≒（０．３１，０．５６）となる。一方、注目画素（０，０）に着目すると、その重心位置は注目画素（０，０）の中央にある。本来の重心位置（０，０）に対して、拡散マトリックスＷの重心位置は（０．３１，０．５６）となり、本来の重心位置から図面上右斜め下方向に拡散マトリックスＷの重心位置がずれて存在する。かかる重心位置のずれは、誤差値を周囲の画素に拡散させたときも生じる。そして、画像全体として見ると誤差値の移動が右斜め下方向へのずれとなって現れ、これが「ドット発生の遅延」等が右斜め下方向に向けて発生している原因となっている。
【００３５】
そこで、このような重心誤差に着目し、拡散マトリックスＷ内の重心位置を本来の重心位置、すなわち注目画素の位置に近づけるようにマトリックスＷの係数を配置させる。例えば、図４（Ａ）の例で考えると、マトリックスＷの重心位置は（０，０）となり本来の重心位置に一致する。このように一致させることで主走査方向及び副走査方向に「ドット発生の遅延」等が生じないようにするとともに、入力階調値に忠実なドットを生成させることができる。
【００３６】
しかしながら、負値の係数を配置しかつマトリックスＷの重心位置が注目画素の位置となるように係数を配置させても、誤差メモリ２５の値の分布で「異常な振動」と呼ばれる現象が発生する。これを、図５乃至図７を用いて説明する。
【００３７】
図５（Ａ）に示す従来の、負値の係数を含まない拡散マトリックスＷを用い、図５（Ｂ）に示す入力階調値ｄ０を例にした場合で処理を考える。１ライン目に“２４”の階調値、それ以外に“０”の階調値を有する画像の例である。
【００３８】
１ライン目の画素（ｉ，１）までの処理が終了し、誤差メモリ２５に格納される誤差値の例を図５（Ｃ）に示す。そして、２ライン目の画素（ｉ，２）の処理が終了して誤差メモリ２５に格納される誤差値の例を図６（Ａ）に示す。
【００３９】
一方、図６（Ｂ）に示す負値の係数を含む拡散マトリックスＷにより１ライン目の画素（ｉ，１）までの処理が終了したときの誤差メモリ２５に格納される誤差値の例を図６（Ｃ）に、２ライン目の画素（ｉ，２）まで処理が終了したときの誤差メモリ２５に格納される誤差値の例を図７（Ａ）に示す。
【００４０】
図５（Ｃ）と図６（Ｃ）とを比較すると、同じ画素位置まで処理を行ったにも拘わらず誤差メモリ２５に格納される誤差値の絶対値は負値の係数を用いた拡散マトリックスＷの方が大きな値となっている。図６（Ｃ）での２ライン目と３ライン目、図７（Ａ）での３ライン目と４ライン目との和はともに“２４”のままで比較的小さな値にも拘わらず、それぞれの値の絶対値が処理を進めるごとにさらに大きくなっている。このまま処理を進めると、３ライン目の処理の途中で本来入力階調値が“０”の領域にも拘わらず、閾値を超えて２値化結果が“１”となる画素が発生することになる。誤差メモリ２５に格納される誤差値がこのように分布することを「異常な振動」と呼ぶ。
【００４１】
ここで、「異常な振動」が発生する原因について考察する。蓄積誤差Ｅ０が取り得る値は、以下の式により求めることができる。
[数１]
「蓄積誤差Ｅ０が取り得る値」＝Σ（「２値化誤差Ｅ’が取り得る値」×「係数の絶対値」）
「係数の絶対値」とは拡散マトリックスＷの各係数Ｗｘｙの絶対値のことである。負値の係数を含まない拡散マトリックスＷの場合で閾値を１２８で固定にしたとき、「２値化誤差Ｅ’が取り得る値」を−１２７から１２７と仮定すると、「蓄積誤差Ｅ０の取り得る値」も−１２７から１２７となる。「係数の絶対値」の和が１だからである。また、「蓄積誤差Ｅ０の取り得る値」から考えられる「２値化誤差Ｅ’の取り得る値」の範囲は２値化の処理過程を考えると−１２７から１２７となる。以上から「蓄積誤差Ｅ０が取り得る値」はすべての処理過程で−１２７から１２７となる。
【００４２】
また、閾値が変動してその値の範囲が０から２５５まで取り得るとき、同様に考えることで「蓄積誤差Ｅ０が取り得る値」の範囲はすべての処理過程で−２５５から２５５までとなる。
【００４３】
しかし、負値の係数を用いた拡散マトリックスＷの場合、［数１］での「係数の絶対値」の和が１よりも大きな値となるので、「蓄積誤差Ｅ０が取り得る値」が「２値化誤差Ｅ’が取り得る値」より大きな値となる。したがって、「蓄積誤差Ｅ０が取り得る値」の範囲が定まらないことになる。
【００４４】
以上から「異常な振動」は、拡散マトリックスＷの「係数の絶対値」の和が１より大きくなっていることが原因と考えられる。ただし、各係数Ｗｘｙの和は１となるので入力画像データの平均濃度（平均階調値）は保存されたままとなっている。なお、実際には蓄積誤差Ｅ０は負値を有する場合もあるが、ここでは蓄積誤差Ｅ０の絶対値を考慮しているため、［数１］に示すように、「係数の絶対値」により「蓄積誤差Ｅ０が取り得る値」を演算している。
【００４５】
この「異常な振動」を回避するため、本発明では蓄積誤差Ｅ０の値に応じて負値の係数を含む拡散マトリックスＷと負値の係数を含まない拡散マトリックスＷとを切替えて選択するようにしている。すなわち、図３のフローチャートに示すように蓄積誤差Ｅ０が−１００より大きくかつ１００より小さいときに（Ｓ１５１で“ＹＥＳ”）、負値の係数を含む拡散マトリックスＷを選択し（Ｓ１５３）、蓄積誤差Ｅ０がそれ以外のとき（Ｓ１５１で“ＮＯ”）負値の係数を含まない拡散マトリックスＷを選択し（Ｓ１５２）、選択されたマトリックスＷにより重み付け誤差Ｅ’（ｉ’、ｊ’）を演算している（図２のＳ１６）。
【００４６】
負値の係数を用いない拡散マトリックスＷでは、上述したように蓄積誤差Ｅ０が取り得る値は−１２７から１２７となる。したがって、蓄積誤差Ｅ０が−１００以下や１００以上のようにその絶対値が大きいときは、負値の係数を用いない拡散マトリックスＷを選択することで、「異常な振動」の発生を抑えて、本来ドットが発生すべきでない領域でドットが発生するような事態を回避することができる。
【００４７】
一方で、蓄積誤差Ｅ０が−１００＜Ｅ０＜１００の範囲では、誤差Ｅ０の絶対値が小さいのでその振動が大きくなってもかかる事態は発生しないので負値の係数を用いて「ドット発生の遅延」等を解消させている。なお、この蓄積誤差Ｅ０の値の範囲は一例であって、蓄積誤差Ｅ０の絶対値が小さい値（又は大きな値）と判断できる値であれば任意であってよい。
【００４８】
図７（Ａ）の例で考えると、３ライン目の画素（ｉ，３）の処理が終了すると誤差メモリ２５には図７（Ｂ）に示すよう誤差値が格納される。これをそのまま負値の係数を含むマトリックスＷを用いて次の画素（ｉ＋１，３）の処理を行うと図８（Ａ）のようになる。そして、この図に示すように画素（ｉ＋２，３）に対する処理では閾値以上の蓄積誤差Ｅ０（“１３２”）を有しているのでこの画素位置にドットが発生してしまう。
【００４９】
一方、画素（ｉ＋１，３）の蓄積誤差Ｅ０は“１２０”で−１００＜Ｅ０＜１００の範囲内にないため、負値の係数を含まない、例えば図５（Ａ）の拡散マトリックスＷを用いて処理を行うと図８（Ｂ）に示すようになる。蓄積誤差Ｅ０が“１０２”となり「異常な振動」を緩和して処理結果が異常になってしまうことを回避している。
【００５０】
ここで、負値を用いない拡散マトリックスＷにおいて、主走査方向ではそのマトリックスＷの重心が注目画素に位置するよう、その係数を配置させることで主走査方向に「ドット発生の遅延」等が発生しないことになり、より好ましい出力画像を得ることができる。
【００５１】
上述した例では、蓄積誤差Ｅ０の値によって拡散マトリックスＷを選択するようにしたが、それ以外にも２値化誤差Ｅ’の値によって選択するようにしてもよい。すなわち、図９に示すように２値化誤差Ｅ’がマトリックス選択部２６に入力されて、例えば、−１００＜Ｅ’＜１００のとき負値の係数を含む拡散マトリックスＷを選択し、それ以外のとき負値の係数を含まない（正値の係数のみの）拡散マトリックスＷを選択する。そして、選択されたマトリックスＷにより重み付け誤差を演算する。２値化誤差Ｅ’の値の範囲は勿論これ以外にも任意の値でよい。この場合でも、２値化誤差Ｅ’の絶対値が小さい値のときは負値の係数を含むマトリックスＷにより「ドット発生の遅延」等の問題を解消し、２値化誤差Ｅ’の絶対値が大きな値のときは負値を含まないマトリックスＷにより「異常な振動」を緩和し出力結果が異常になることを回避している。
【００５２】
さらに拡散マトリックスＷは、図１０に示すように入力階調値ｄ０に応じて選択するようにしてもよい。すなわち、入力階調値ｄ０が、例えば“０”や“２５５”のとき負値の係数を含まないマトリックスＷを選択し、それ以外のとき負値の係数を含むマトリックスＷを選択するようにする。入力階調値ｄ０が“０”や“２５５”のとき負値を用いないマトリックスＷを選択したのは、蓄積誤差Ｅ０がこれらの値のとき大きくなり「異常な振動」が起きやすいと予想されるからである。よって、入力階調値ｄ０がかかる値のときは「異常な振動」を緩和すべく負値を用いないマトリックスＷを選択し、それ以外のときは負値を用いたマトリックスＷにより「ドット発生の遅延」等を解消している。
【００５３】
なお、２値化誤差Ｅ’や入力階調値ｄ０に応じて拡散マトリックスＷを選択する、いずれの例の場合でも、負値の係数を含まない拡散マトリックスＷでは、その主走査方向に重心が位置するように係数を配置させることで主走査方向への「ドット発生の遅延」等の問題を解決することができる。
【００５４】
また、「異常な振動」が発生するケースとして、上述の例では薄い線がありそれ以外では階調値“０”の画像の例で説明した。かかるケース以外にも「異常な振動」が発生するのは、ドットが発生しその直後で階調値が“０”となる画像や、階調値の高い高濃度領域で階調値に変化があるような画像の場合がある。
【００５５】
さらに、上述の例は誤差拡散処理をハードウェアとして構成した例について説明したが、例えば図１１のようにソフトウェアによっても構成することができる。この場合、画像処理装置２０の各構成が図１１のＣＰＵ３２、ＲＯＭ３３、ＲＡＭ３４に対応する。なお、図１１の例は、出力部３０がプリンタの例でこの出力部３０内に画像処理装置２０がソフトウェアとして構成された例である。さらに、図１１に示すホストコンピュータ１２にソフトウェアとして画像処理装置２０を構成するようにしてもよい。いずれの場合も、負値の係数を含む拡散マトリックスＷと負値を含まない拡散マトリックスＷとを、蓄積誤差Ｅ０や２値化誤差Ｅ’、入力階調値ｄ０に応じて選択することで、「異常な振動」を緩和しつつ、「ドット発生の遅延」等の問題を解消することができる。
【００５６】
また、上述の例では入力階調値ｄ０として２５６階調（８ビット）の画像データが画像処理装置２０に入力されるものとして説明したが、これ以外にも１２８階調（７ビット）や５１２階調（９ビット）等、任意の階調数であってよい。さらに、２値化部２２において２値化する場合で説明したが、これ以外にも、例えば閾値を２つ、３つ等複数設定することで、３値、４値等、入力階調値ｄ０の階調数と同じかそれ以下に階調化するようにしてもよい。いずれの場合でも上述した例と同様の作用効果を奏する。
【００５７】
さらに、上述した例は入力部１０からモノクロデータが入力されるものとして説明したが、カラーデータに対しても同様に処理を行うことができる。例えば、入力部１０においてＣ（シアン）、Ｍ（マゼンタ）、Ｙ（イエロー）、Ｋ（ブラック）の各色ごとの画像データが生成され、各色の画像データごとに上述の処理を行うことになる。もちろん、カラーの色としてはこれ以外の色成分であっても同様の作用効果を奏する。
【図面の簡単な説明】
【００５８】
【図１】本発明が適用される画像処理装置２０の構成を示す図である。
【図２】画像処理装置２０の動作を示すフローチャートである。
【図３】拡散マトリックスＷの選択処理を示すフローチャートである。
【図４】拡散マトリックスＷの例を示す図である。
【図５】誤差メモリ２５等に格納された値の例を示す図である。
【図６】誤差メモリ２５等に格納された値の例を示す図である。
【図７】誤差メモリ２５に格納された値の例を示す図である。
【図８】誤差メモリ２５に格納された値の例を示す図である。
【図９】本発明が適用される画像処理装置２０の他の構成を示す図である。
【図１０】本発明が適用される画像処理装置２０の他の構成を示す図である。
【図１１】画像処理装置２０をソフトウェアで構成したときの図である。
【符号の説明】
【００５９】
１０  入力部、  ２０  画像処理装置、  ２１  加算器、  ２２  ２値化部、  ２３  減算器、  ２４  重み付け誤差演算部、  ２５  誤差メモリ、  ２６  マトリックス選択部、  ３０  出力部、  Ｗ  拡散マトリックス、  ｄ０  入力階調値、  Ｅ’  ２値化誤差、  Ｅ０  蓄積誤差
【図１】
2006005881.tif 000003
【図２】
2006005881.tif 000004
【図３】
2006005881.tif 000005
【図４】
2006005881.tif 000006
【図５】
2006005881.tif 000007
【図６】
2006005881.tif 000008
【図７】
2006005881.tif 000009
【図８】
2006005881.tif 000010
【図９】
2006005881.tif 000011
【図１０】
2006005881.tif 000012
【図１１】
2006005881.tif 000013