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