(57)【要約】 【課題】  回路規模を増やすことなく、かつ、処理速度も落とさずに、整数演算の切捨て誤差を最小限に抑えることができる画像処理装置を提供する。【解決手段】  量子化誤差算出部６４は、加算器６１で蓄積誤差が加算された入力画像の画素の画素値と、その画素値を量子化処理部６２で量子化した量子化値との差を量子化誤差として求め、誤差格納部６５に格納する。乗算器６７ａは、誤差格納部６５に格納されている量子化誤差のうちで、次に量子化を行う画素に配分される量子化誤差と、その量子化誤差に対応する拡散係数の分子の値とを乗算する。加算器６７ｂは、乗算器６７ａで乗算された乗算結果を加算し、除算器６７ｃは、加算器６７ｂで加算された加算結果を、拡散係数の分母の値によって除算し、除算結果を次に量子化する画素に対する蓄積誤差として、加算器６１に出力する。【選択図】      図２
2006005901.tif 000002
【特許請求の範囲】
【請求項１】
入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算する第１の加算手段と、
前記第１の加算手段で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成する量子化処理手段と、
前記第１の加算手段で蓄積誤差が加算された画素値と、前記量子化処理手段で生成された量子化値との差を量子化誤差として算出する量子化誤差算出手段と、
前記量子化誤差算出手段で算出された量子化誤差と、前記量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算する乗算手段と、
前記乗算手段の乗算結果のうちで、次に量子化する画素に対応する乗算結果を加算する第２の加算手段と、
前記第２の加算手段の加算結果を前記拡散係数の分母の値によって除算する除算手段とを含み、
前記除算手段の除算結果を前記次に量子化する画素に配分する蓄積誤差とすることを特徴とする画像処理装置。
【請求項２】
前記画像処理装置は、前記量子化誤差算出手段で算出された量子化誤差を格納する誤差格納手段を含み、
前記乗算手段は、前記誤差格納手段に格納された量子化誤差のうちで、次に量子化される画素に配分される量子化誤差と、前記配分される量子化誤差に対応する前記拡散係数の分子の値とを乗算し、
前記第２の加算手段は、前記乗算手段の演算結果を加算することを特徴とする請求項１記載の画像処理装置。
【請求項３】
複数の画素を含むラインを複数含む入力画像に対して、その入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算する第１の加算手段と、
前記第１の加算手段で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成する量子化処理手段と、
前記第１の加算手段で蓄積誤差が加算された画素値と、前記量子化処理手段で生成された量子化値との差を量子化誤差として算出する量子化誤差算出手段と、
前記量子化誤差算出手段が算出した量子化誤差と、その量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算する乗算手段と、
量子化される画素を含む量子化ラインに含まれる画素の量子化誤差が配分される画素を含む複数の誤差拡散ラインの画素毎に、量子化ラインに含まれる画素の量子化誤差に基づいて前記乗算手段によって乗算された乗算結果を加算する第２の加算手段、および
前記第２の加算手段の加算結果を、前記拡散係数の分母の値によって除算する除算手段を含み、
前記除算手段の除算結果をライン蓄積誤差として算出する、誤差拡散ライン毎のライン蓄積誤差算出手段と、
次に量子化する画素に対して、前記誤差拡散ライン毎のライン蓄積誤差算出手段が算出した各ライン蓄積誤差を加算する第３の加算手段とを含み、
前記第３の加算手段が加算した加算結果を、前記次に量子化する画素に配分する蓄積誤差とすることを特徴とする画像処理装置。
【請求項４】
誤差拡散ラインに含まれる画素のうちで最後に量子化される画素を含む最終ラインのライン蓄積誤差算出手段は、前記除算手段が除算した除算結果を格納する第１のライン誤差格納手段を含み、その第１のライン誤差格納手段に格納された除算結果をライン蓄積誤差として算出し、
誤差拡散ラインに含まれる画素のうちで最初に量子化される画素を含む第１ラインおよび前記最終ラインを除く誤差拡散ライン毎のライン蓄積誤差算出手段は、各誤差拡散ラインの除算手段が除算した除算結果と、その除算結果の画素について、各誤差拡散ラインの次の誤差拡散ラインのライン蓄積誤差算出手段が算出したライン蓄積誤差とを加算する第４の加算手段、およびその第４の加算手段によって加算された加算結果を格納する第２のライン誤差格納手段を含み、その第２のライン誤差格納手段に格納された加算結果をライン蓄積誤差として算出し、
前記第３の加算手段は、前記誤差拡散ライン毎のライン蓄積誤差算出手段によって算出された各ライン蓄積誤差に替えて、前記第１ラインおよびその第１ラインの次の誤差拡散ラインのライン蓄積誤差算出手段によって算出された各ライン蓄積誤差を加算することを特徴とする請求項３に記載の画像処理装置。
【請求項５】
請求項１〜４のいずれか１つに記載の画像処理装置と、
前記画像処理装置で量子化された出力画像を出力する画像出力装置とを含んで構成されることを特徴とする画像形成装置。
【請求項６】
入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算する第１の加算工程と、
前記第１の加算工程で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成する量子化処理工程と、
前記第１の加算工程で蓄積誤差が加算された画素値と、前記量子化処理工程で生成された量子化値との差を量子化誤差として算出する量子化誤差算出工程と、
前記量子化誤差算出工程で算出された量子化誤差と、前記量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算する乗算工程と、
前記乗算工程の乗算結果のうちで、次に量子化する画素に対応する乗算結果を加算する第２の加算工程と、
前記第２の加算工程の加算結果を前記拡散係数の分母の値によって除算する除算工程とを含み、
前記除算工程の除算結果を前記次に量子化する画素に配分する蓄積誤差とすることを特徴とする画像処理方法。
【請求項７】
複数の画素を含むラインを複数含む入力画像に対して、その入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算する第１の加算工程と、
前記第１の加算工程で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成する量子化処理工程と、
前記第１の加算工程で蓄積誤差が加算された画素値と、前記量子化処理工程で生成された量子化値との差を量子化誤差として算出する量子化誤差算出工程と、
前記量子化誤差算出工程で算出された量子化誤差と、その量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算する乗算工程と、
量子化される画素を含む量子化ラインに含まれる画素の量子化誤差が配分される画素を含む複数の誤差拡散ラインの画素毎に、量子化ラインに含まれる画素の量子化誤差に基づいて前記乗算工程で乗算された乗算結果を加算する第２の加算工程と、
前記第２の加算工程での加算結果を、前記拡散係数の分母の値によって除算する除算工程と、
前記除算工程での除算結果をライン蓄積誤差として誤差拡散ライン毎に算出するライン蓄積誤差算出工程と、
次に量子化する画素に対して、前記ライン蓄積誤差算出工程で算出された誤差拡散ライン毎のライン蓄積誤差を加算する第３の加算工程とを含み、
前記第３の加算工程で加算された加算結果を、前記次に量子化する画素に配分する蓄積誤差とすることを特徴とする画像処理方法。
【請求項８】
前記ライン蓄積誤差算出工程では、誤差拡散ラインに含まれる画素のうちで、最初に量子化される画素を含む第１ラインおよび最後に量子化される画素を含む最終ラインを除く各誤差拡散ラインについて、前記除算工程で除算された除算結果と、その除算結果が求められた誤差拡散ラインの次の誤差拡散ラインで求められたライン蓄積誤差のうちで、その除算結果の画素について求められたライン蓄積誤差とを加算して、その加算結果をライン蓄積誤差として算出し、
前記第３の加算工程では、誤差拡散ライン毎のライン蓄積誤差に替えて、前記第１ラインおよびその第１ラインの次の誤差拡散ラインのライン蓄積誤差を加算することを特徴とする請求項７に記載の画像処理方法。
【請求項９】
コンピュータを請求項１〜４のいずれか１つに記載の画像処理装置として機能させるためのプログラム。
【請求項１０】
請求項９に記載のプログラムを記録したコンピュータ読取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力画像データに対して誤差拡散処理によって中間調処理を行う画像処理装置、画像形成装置、画像処理方法、プログラム、および記録媒体に関する。
【背景技術】
【０００２】
近年、ＯＡ（Office Automation）機器のデジタル化が急速に進展し、またカラー画像出力の需要が増してきたことによって、電子写真方式のデジタルカラー複写機およびインクジェット方式や熱転写方式のカラープリンタ等の出力機器である画像形成装置が広く一般に普及してきている。たとえば、デジタルカメラやスキャナ等の入力機器から入力された画像情報やコンピュータ上で作成された画像情報が、これらの画像形成装置を用いて出力されている。これらの画像形成装置においては、入力された画像情報に対して、擬似階調再現処理を行っている場合が多い。
【０００３】
図１５は、従来技術の画像形成装置に含まれる画像処理装置で用いられる誤差拡散処理回路７０の一例のブロック図である。擬似階調再現技術の１つとして、誤差拡散法があり、誤差拡散処理回路７０は、その誤差拡散法を実現するための処理回路である。誤差拡散処理回路７０は、加算器７１、量子化処理部７２、量子化閾値格納部７３、量子化誤差算出部７４、拡散誤差算出部７５、拡散係数格納部７６、および蓄積誤差格納部７７を含んで構成される。
【０００４】
加算器７１は、入力画像データの画素の濃淡を示す画素値に、当該画素以前に量子化された画素から当該画素に配分された蓄積誤差を、蓄積誤差格納部７７から読み出して加算する。量子化処理部７２は、蓄積誤差が加算された画素値と、量子化閾値格納部７３に格納されている量子化閾値とを比較して量子化を行い、出力画像データの画素の量子化値を生成する。
【０００５】
減算器である量子化誤差算出部７４は、量子化処理部７２で量子化された量子化値と、加算器７１で蓄積誤差が加算された画素値との差を量子化誤差として算出する。拡散係数格納部７６は、量子化誤差を未処理の入力画像データの画素に配分する割合を示す拡散係数が格納されている。拡散誤差算出部７５は、量子化誤差算出部７４が算出した量子化誤差に、拡散係数格納部７６に格納されている各拡散係数を乗じて、未処理の入力画像データの画素に配分する拡散誤差を算出する。拡散誤差算出部７５で算出された拡散誤差は、蓄積誤差格納部７７に蓄積誤差として格納される。
【０００６】
図１６は、従来技術の画像形成装置に含まれる画像処理装置で用いられる誤差拡散処理回路７０の他の例のブロック図である。この誤差拡散処理回路７０は、整数演算型の処理回路をブロック図にして示したものであり、拡散誤差算出部７５、拡散係数格納部７６、蓄積誤差格納部７７および新たに追加した加算器７８以外の部位は、図１５に示した構成と同じ構成である。
【０００７】
拡散係数格納部７６は、拡散係数を共通の分母の分数で表したときの分子の値を格納する拡散係数分子格納部７６ａと、拡散係数の共通の分母の値を格納する拡散係数分母格納部７６ｂとを含んで構成される。拡散誤差算出部７５は、量子化誤差算出部７４が算出した量子化誤差と、拡散係数分子格納部７６ａに格納された拡散係数の各分子の値との積を求める乗算器７５ａと、乗算器７５ａの乗算結果を、拡散係数分母格納部７６ｂに格納された拡散係数の分母の値で除して、未処理の入力画像データの画素に配分する拡散誤差を算出する除算器７５ｂとを含んで構成される。
【０００８】
加算器７８は、除算器７５ｂで算出される拡散誤差を、蓄積誤差格納部７７に格納されている対応する画素の蓄積誤差に加算し、加算結果を更新された蓄積誤差として蓄積誤差格納部７７に格納する。誤差拡散処理回路７０を改良したものとして、乗算器７５ａ、除算器７５ｂ、および加算器７８を、１つの量子化誤差を拡散誤差として配分する画素の数だけ用意することによって、処理を並列化して、高速化したものがある。
【０００９】
図１７は、誤差拡散処理で用いられる拡散係数を説明するための図である。図１７（ａ）は、一般的な拡散係数を説明するための図であり、図１５に示した誤差拡散処理回路７０で用いられる拡散係数である。１つの四角の部分が１つの画素に対応しており、「＊」印を付した画素が量子化を行った画素に対応する部分である。他の４つの部分に対応する画素は、未処理、つまり、まだ量子化が行われていない画素であり、量子化を行った画素の量子化誤差をそれぞれの画素に配分するための拡散係数が示されている。
【００１０】
この例では、「７／１６」、「１／１６」、「５／１６」、および「３／１６」の４つの拡散係数が示されており、たとえば、「７／１６」と付されている部分に対応する画素には、量子化を行った画素の量子化誤差に、拡散係数「７／１６」を乗じた値が、「７／１６」と付されている部分に対応する画素の拡散誤差として求められる。
【００１１】
図１７（ｂ）は、整数演算型の処理回路、つまり、図１６に示した誤差拡散処理回路７０で用いられる拡散係数である。画素の対応は、図１７（ａ）に示した画素の対応と同じであるが、未処理、つまり、まだ量子化が行われていない画素に対応する部分の値が、拡散係数を共通の分母を有する分数で表したときの分子の値であり、この例では、「７」、「１」、「５」、および「３」の４つの拡散係数の分子の値と、拡散係数の共通の分母の値「１６」とが、別に示されている。図１６に示した誤差拡散処理回路７０の場合は、分子は、拡散係数分子格納部７６ａに格納され、分母は、分子とは別に拡散係数分母格納部７６ｂに格納される。
【００１２】
図１７（ｃ）および（ｄ）は、量子化が行われる画素が、既に量子化が行われた画素から配分される拡散誤差を説明するための図である。図１７（ｃ）は、図１５に示した誤差拡散処理回路７０で用いられる拡散係数である。「＊」印を付した画素が量子化を行う画素に対応する部分であり、既に量子化が行われた他の４つの画素から配分される拡散係数が示されている。
【００１３】
この例では、「７／１６」、「１／１６」、「５／１６」、および「３／１６」の４つの拡散係数が示されており、たとえば、「７／１６」と付されている部分の画素からは、その画素の量子化誤差に、拡散係数「７／１６」を乗じた値が、拡散誤差として「＊」印が付されている画素に与えられる。同様に、他の３つの部分の画素からも、それぞれの拡散誤差が与えられ、「＊」印が付されている部分の画素には、それらの合計値が与えられることになる。
【００１４】
図１７（ｄ）は、整数演算型の処理回路、つまり、図１６に示した誤差拡散処理回路７０で用いられる拡散係数である。この例では、「７」、「１」、「５」、および「３」の４つの拡散係数の分子の値と、「１６」の拡散係数の分母の値が示されている。図１７（ｃ）および（ｄ）の拡散誤差は、「＊」印を付した量子化を行う画素から見ると、その画素に集積される集積誤差を求めるための、集積係数と考えることもできる。
【００１５】
整数演算型の処理回路、たとえば、図１６に示した誤差拡散処理回路７０では、除算による小数点以下の値を切り捨て、あるいは、四捨五入するので、量子化誤差と、その量子化誤差を拡散した拡散誤差の総和とが必ずしも一致するとは限らない。
【００１６】
具体的には、拡散誤差算出部７５は、未処理の入力画像データの画素に加算する蓄積誤差の算出を行うが、ここで、量子化誤差をＥ（ｎ）、拡散係数をＫｉｊとすると、蓄積誤差Ｄは、式（１）のように表される。
【００１７】
【数１】
2006005901.tif 000003
【００１８】
拡散係数Ｋｉｊを図１７（ａ）に示した４つの値であるとすると、蓄積誤差Ｄは、式（２）によって算出することができる。すなわち、既に量子化された画素による量子化誤差Ｅ（１）〜Ｅ（４）と拡散係数とをそれぞれ乗算し、その結果を加算した値となる。
【００１９】
【数２】
2006005901.tif 000004
【００２０】
このとき、たとえば、「Ｅ（１）×１÷１６」で演算された値は、小数点以下の値を有することがあり、その場合、その小数点以下の値が切り捨て、あるいは、四捨五入された後、他の量子化誤差Ｅ（２）〜Ｅ（４）から演算された拡散誤差と加算するので、切り捨て、あるいは、四捨五入された小数点以下の値の分が、蓄積誤差Ｄに含められずに除かれてしまう。すなわち、量子化誤差の一部が拡散されないことがあり、特に、低濃度領域や高濃度領域では、量子化誤差のほとんどが拡散されないといったこともある。
【００２１】
上述した誤差拡散処理における量子化誤差と、その量子化誤差を未処理画素へ拡散した拡散誤差の総和とを一致させる従来技術として、多値化誤差（量子化誤差）と、その多値化誤差を周辺の未処理画素へ配分した誤差配分値（拡散誤差）の総和との差分である剰余誤差を求め、誤差配分値の一つに剰余誤差を加算し、他の誤差配分値とともに対応する画素位置の集積誤差に加算して新たな集積誤差とすることによって、多値化誤差をすべて拡散することができる画像信号処理装置がある（たとえば、特許文献１参照）。
【００２２】
また、２値化誤差（量子化誤差）と、その２値化誤差を周辺の未処理画素へ配分した誤差配分値の総和との差分である剰余誤差を求め、誤差配分値の一つに剰余誤差を加算し、他の誤差配分値とともに対応する画素位置の集積誤差に加算して新たな集積誤差とすることによって、２値化誤差をすべて拡散することができる画像信号処理装置がある（たとえば、特許文献２参照）。
【００２３】
【特許文献１】特公平７−９６７２号公報
【特許文献２】特公平７−２２３３４号公報
【発明の開示】
【発明が解決しようとする課題】
【００２４】
しかしながら、上述した従来技術による誤差拡散処理は、量子化誤差と、その量子化誤差を拡散させた拡散誤差の総和との差分である剰余誤差を求めて、その剰余誤差を拡散誤差値の一つと加算する処理を行う回路の分だけ回路規模が大きくなり、さらに、処理速度も遅くなるという問題があった。
【００２５】
本発明の目的は、回路規模を増やすことなく、かつ、処理速度も落とさずに、整数演算の切捨て誤差を最小限に抑えることができる画像処理装置、画像形成装置、画像処理方法、プログラム、および記録媒体を提供することである。
【課題を解決するための手段】
【００２６】
本発明は、入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算する第１の加算手段と、
前記第１の加算手段で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成する量子化処理手段と、
前記第１の加算手段で蓄積誤差が加算された画素値と、前記量子化処理手段で生成された量子化値との差を量子化誤差として算出する量子化誤差算出手段と、
前記量子化誤差算出手段で算出された量子化誤差と、前記量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算する乗算手段と、
前記乗算手段の乗算結果のうちで、次に量子化する画素に対応する乗算結果を加算する第２の加算手段と、
前記第２の加算手段の加算結果を前記拡散係数の分母の値によって除算する除算手段とを含み、
前記除算手段の除算結果を前記次に量子化する画素に配分する蓄積誤差とすることを特徴とする画像処理装置である。
【００２７】
また本発明は、前記画像処理装置は、前記量子化誤差算出手段で算出された量子化誤差を格納する誤差格納手段を含み、
前記乗算手段は、前記誤差格納手段に格納された量子化誤差のうちで、次に量子化される画素に配分される量子化誤差と、前記配分される量子化誤差に対応する前記拡散係数の分子の値とを乗算し、
前記第２の加算手段は、前記乗算手段の演算結果を加算することを特徴とする。
【００２８】
また本発明は、複数の画素を含むラインを複数含む入力画像に対して、その入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算する第１の加算手段と、
前記第１の加算手段で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成する量子化処理手段と、
前記第１の加算手段で蓄積誤差が加算された画素値と、前記量子化処理手段で生成された量子化値との差を量子化誤差として算出する量子化誤差算出手段と、
前記量子化誤差算出手段が算出した量子化誤差と、その量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算する乗算手段と、
量子化される画素を含む量子化ラインに含まれる画素の量子化誤差が配分される画素を含む複数の誤差拡散ラインの画素毎に、量子化ラインに含まれる画素の量子化誤差に基づいて前記乗算手段によって乗算された乗算結果を加算する第２の加算手段、および
前記第２の加算手段の加算結果を、前記拡散係数の分母の値によって除算する除算手段を含み、
前記除算手段の除算結果をライン蓄積誤差として算出する、誤差拡散ライン毎のライン蓄積誤差算出手段と、
次に量子化する画素に対して、前記誤差拡散ライン毎のライン蓄積誤差算出手段が算出した各ライン蓄積誤差を加算する第３の加算手段とを含み、
前記第３の加算手段が加算した加算結果を、前記次に量子化する画素に配分する蓄積誤差とすることを特徴とする画像処理装置である。
【００２９】
また本発明は、誤差拡散ラインに含まれる画素のうちで最後に量子化される画素を含む最終ラインのライン蓄積誤差算出手段は、前記除算手段が除算した除算結果を格納する第１のライン誤差格納手段を含み、その第１のライン誤差格納手段に格納された除算結果をライン蓄積誤差として算出し、
誤差拡散ラインに含まれる画素のうちで最初に量子化される画素を含む第１ラインおよび前記最終ラインを除く誤差拡散ライン毎のライン蓄積誤差算出手段は、各誤差拡散ラインの除算手段が除算した除算結果と、その除算結果の画素について、各誤差拡散ラインの次の誤差拡散ラインのライン蓄積誤差算出手段が算出したライン蓄積誤差とを加算する第４の加算手段、およびその第４の加算手段によって加算された加算結果を格納する第２のライン誤差格納手段を含み、その第２のライン誤差格納手段に格納された加算結果をライン蓄積誤差として算出し、
前記第３の加算手段は、前記誤差拡散ライン毎のライン蓄積誤差算出手段によって算出された各ライン蓄積誤差に替えて、前記第１ラインおよびその第１ラインの次の誤差拡散ラインのライン蓄積誤差算出手段によって算出された各ライン蓄積誤差を加算することを特徴とする。
【００３０】
また本発明は、前記画像処理装置と、
前記画像処理装置で量子化された出力画像を出力する画像出力装置とを含んで構成されることを特徴とする画像形成装置である。
【００３１】
また本発明は、入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算する第１の加算工程と、
前記第１の加算工程で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成する量子化処理工程と、
前記第１の加算工程で蓄積誤差が加算された画素値と、前記量子化処理工程で生成された量子化値との差を量子化誤差として算出する量子化誤差算出工程と、
前記量子化誤差算出工程で算出された量子化誤差と、前記量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算する乗算工程と、
前記乗算工程の乗算結果のうちで、次に量子化する画素に対応する乗算結果を加算する第２の加算工程と、
前記第２の加算工程の加算結果を前記拡散係数の分母の値によって除算する除算工程とを含み、
前記除算工程の除算結果を前記次に量子化する画素に配分する蓄積誤差とすることを特徴とする画像処理方法である。
【００３２】
また本発明は、複数の画素を含むラインを複数含む入力画像に対して、その入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算する第１の加算工程と、
前記第１の加算工程で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成する量子化処理工程と、
前記第１の加算工程で蓄積誤差が加算された画素値と、前記量子化処理工程で生成された量子化値との差を量子化誤差として算出する量子化誤差算出工程と、
前記量子化誤差算出工程で算出された量子化誤差と、その量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算する乗算工程と、
量子化される画素を含む量子化ラインに含まれる画素の量子化誤差が配分される画素を含む複数の誤差拡散ラインの画素毎に、量子化ラインに含まれる画素の量子化誤差に基づいて前記乗算工程で乗算された乗算結果を加算する第２の加算工程と、
前記第２の加算工程での加算結果を、前記拡散係数の分母の値によって除算する除算工程と、
前記除算工程での除算結果をライン蓄積誤差として誤差拡散ライン毎に算出するライン蓄積誤差算出工程と、
次に量子化する画素に対して、前記ライン蓄積誤差算出工程で算出された誤差拡散ライン毎のライン蓄積誤差を加算する第３の加算工程とを含み、
前記第３の加算工程で加算された加算結果を、前記次に量子化する画素に配分する蓄積誤差とすることを特徴とする画像処理方法である。
【００３３】
また本発明は、前記ライン蓄積誤差算出工程では、誤差拡散ラインに含まれる画素のうちで、最初に量子化される画素を含む第１ラインおよび最後に量子化される画素を含む最終ラインを除く各誤差拡散ラインについて、前記除算工程で除算された除算結果と、その除算結果が求められた誤差拡散ラインの次の誤差拡散ラインで求められたライン蓄積誤差のうちで、その除算結果の画素について求められたライン蓄積誤差とを加算して、その加算結果をライン蓄積誤差として算出し、
前記第３の加算工程では、誤差拡散ライン毎のライン蓄積誤差に替えて、前記第１ラインおよびその第１ラインの次の誤差拡散ラインのライン蓄積誤差を加算することを特徴とする。
【００３４】
また本発明は、コンピュータを前記画像処理装置として機能させるためのプログラムである。
また本発明は、前記プログラムを記録したコンピュータ読取り可能な記録媒体である。
【発明の効果】
【００３５】
本発明によれば、まず、第１の加算手段によって、入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差が、前記量子化する画素の画素値に加算され、量子化処理手段によって、前記第１の加算手段で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値が生成され、量子化誤差算出手段によって、前記第１の加算手段で蓄積誤差が加算された画素値と、前記量子化処理手段で生成された量子化値との差が量子化誤差として算出される。
【００３６】
次に、乗算手段によって、前記量子化誤差算出手段で算出された量子化誤差と、前記量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とが乗算され、第２の加算手段によって、前記乗算手段の乗算結果のうちで、次に量子化する画素に対応する乗算結果が加算され、除算手段によって、前記第２の加算手段の加算結果が前記拡散係数の分母の値によって除算され、前記除算手段の除算結果が次に量子化する画素に配分する蓄積誤差とされる。
【００３７】
このように、除算を最後に行うことによって、誤差の補正処理を行う回路を設けて回路規模を大きくしなくても、整数演算の切捨て誤差を最小限に抑えることができ、低濃度及び高濃度領域の階調再現特性が大幅に改善された画像データを出力することができる。また、誤差の補正処理を行う回路を設ける場合よりも処理速度を速めることができる。
【００３８】
また本発明によれば、量子化誤差と拡散係数の分子の値との積を求めて記憶させておく演算結果格納手段は、量子化誤差のビット長と所定の係数のビット長を足し合わせた大きいバッファが必要となるが、演算結果格納手段の代わりに量子化誤差を格納する誤差格納手段を用いているので、量子化誤差に応じたビット長のバッファだけで処理することができ、また、回路規模を増やすことなく、かつ、処理速度も落とさずに、整数演算の切捨て誤差を最小限に抑えることができる。
【００３９】
また本発明によれば、まず、第１の加算手段によって、複数の画素を含むラインを複数含む入力画像に対して、その入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差が、前記量子化する画素の画素値に加算され、量子化処理手段によって、前記第１の加算手段で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値が生成され、量子化誤差算出手段によって、前記第１の加算手段で蓄積誤差が加算された画素値と、前記量子化処理手段で生成された量子化値との差が量子化誤差として算出される。
【００４０】
次に、ライン蓄積誤差算出手段に含まれる乗算手段によって、前記量子化誤差算出手段が算出した量子化誤差と、その量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とが乗算され、ライン蓄積誤差算出手段に含まれる第２の加算手段によって、量子化される画素を含む量子化ラインに含まれる画素の量子化誤差が配分される画素を含む複数の誤差拡散ラインの画素毎に、量子化ラインに含まれる画素の量子化誤差に基づいて前記乗算手段によって乗算された乗算結果が加算され、ライン蓄積誤差算出手段に含まれる除算手段によって、前記第２の加算手段の加算結果が、前記拡散係数の分母の値によって除算され、誤差拡散ライン毎のライン蓄積誤差算出手段によって、前記除算手段の除算結果がライン蓄積誤差として算出される。
【００４１】
さらに、第３の加算手段によって、次に量子化する画素に対して、前記誤差拡散ライン毎のライン蓄積誤差算出手段が算出した各ライン蓄積誤差が加算され、前記第３の加算手段が加算した加算結果が、前記次に量子化する画素に配分する蓄積誤差とされる。
【００４２】
このように、量子化誤差から蓄積誤差を求めるとき、拡散係数を分母と分子に分けて、量子化誤差と拡散係数の分子との積の誤差拡散ライン毎の和を、誤差拡散ラインの画素毎に除算するので、１つの量子化誤差を周辺画素に拡散するたびに生じていた除算誤差の累積を抑制することができる。したがって、低濃度及び高濃度領域での階調再現特性が改善された画像データを出力することができる。さらに、ライン蓄積誤差のビット数を乗算結果のビット数と記憶すべき乗算結果の数とを少なくすることができるので、演算結果を記憶するメモリ容量を少なくすることができる。
【００４３】
また本発明によれば、ライン蓄積誤差算出手段によって、次の誤差拡散ラインのライン蓄積誤差算出手段が算出したライン蓄積誤差と、そのライン蓄積誤差の画素について前記除算手段が除算した除算結果とが加算されるので、第３番目の誤差拡散ラインのライン誤差格納部は、１ライン分の画素のライン蓄積誤差を格納すればよい。したがって、除算結果と次の誤差拡散ラインのライン蓄積誤差とを加算しないときに比べて、量子化誤差を配分する誤差拡散ライン数が多いほど、ライン誤差格納部のメモリ容量をより少なくすることができる。
【００４４】
また本発明によれば、除算を最後に行うことによって、誤差の補正処理を行う回路を設けて回路規模を大きくしなくても、整数演算の切捨て誤差を最小限に抑えることができ、低濃度及び高濃度領域の階調再現特性が大幅に改善された画像を形成することができる。また、誤差の補正処理を行う回路を設ける場合よりも処理速度を速めることができる。
【００４５】
また本発明によれば、まず、第１の加算工程で、入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算し、量子化処理工程で、前記第１の加算工程で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成し、量子化誤差算出工程で、前記第１の加算工程で蓄積誤差が加算された画素値と、前記量子化処理工程で生成された量子化値との差を量子化誤差として算出する。
【００４６】
次に、乗算工程で、前記量子化誤差算出工程で算出された量子化誤差と、前記量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算し、第２の加算工程で、前記乗算工程の乗算結果のうちで、次に量子化する画素に対応する乗算結果を加算し、除算工程で、前記第２の加算工程の加算結果を前記拡散係数の分母の値によって除算し、前記除算工程の除算結果を次に量子化する画素に配分する蓄積誤差とする。
【００４７】
このように、除算を最後に行うことによって、誤差の補正処理を行わなくても、整数演算の切捨て誤差を最小限に抑えることができ、低濃度及び高濃度領域の階調再現特性が大幅に改善された画像データを生成することができる。また、誤差の補正処理を行う場合よりも処理速度を速めることができる。
【００４８】
また本発明によれば、まず、第１の加算工程で、複数の画素を含むラインを複数含む入力画像に対して、その入力画像の画素の濃度を示す画素値を量子化する際に生じた量子化誤差を他の画素に配分した蓄積誤差のうちで、量子化する画素に配分された蓄積誤差を、前記量子化する画素の画素値に加算し、量子化処理工程で、前記第１の加算工程で蓄積誤差が加算された画素値を量子化することによって出力画像の画素の量子化値を生成し、量子化誤差算出工程で、前記第１の加算工程で蓄積誤差が加算された画素値と、前記量子化処理工程で生成された量子化値との差を量子化誤差として算出する。
【００４９】
次に、乗算工程で、前記量子化誤差算出工程で算出された量子化誤差と、その量子化誤差を他の画素に配分する割合を分数で表した拡散係数の各分子の値とを乗算し、第２の加算工程で、量子化される画素を含む量子化ラインに含まれる画素の量子化誤差が配分される画素を含む複数の誤差拡散ラインの画素毎に、量子化ラインに含まれる画素の量子化誤差に基づいて前記乗算工程で乗算された乗算結果を加算し、除算工程で、前記第２の加算工程での加算結果を、前記拡散係数の分母の値によって除算し、ライン蓄積誤差算出工程で、前記除算工程での除算結果をライン蓄積誤差として誤差拡散ライン毎に算出する。
【００５０】
さらに、第３の加算工程で、次に量子化する画素に対して、前記ライン蓄積誤差算出工程で算出された誤差拡散ライン毎のライン蓄積誤差を加算し、前記第３の加算工程で加算された加算結果を、前記次に量子化する画素に配分する蓄積誤差とする。
【００５１】
このように、量子化誤差から蓄積誤差を求めるとき、拡散係数を分母と分子に分けて、量子化誤差と拡散係数の分子との積の誤差拡散ライン毎の和を、誤差拡散ラインの画素毎に除算するので、１つの量子化誤差を周辺画素に拡散するたびに生じていた除算誤差の累積を抑制することができる。したがって、低濃度及び高濃度領域での階調再現特性が改善された画像データを出力することができる。
【００５２】
また本発明によれば、ライン蓄積誤差算出工程で、次の誤差拡散ラインのライン蓄積誤差と、そのライン蓄積誤差の画素について前記除算工程で除算された除算結果とが加算されるので、第３番目の誤差拡散ラインのライン蓄積誤差を格納するメモリ容量は、１ライン分の画素のライン蓄積誤差を格納すればよい。したがって、除算結果と次の誤差拡散ラインのライン蓄積誤差とを加算しないときに比べて、量子化誤差を配分する誤差拡散ライン数が多いほど、ライン誤差格納部のメモリ容量をより少なくすることができる。
【００５３】
また本発明によれば、コンピュータで上記画像処理装置の各手段を実現することによって、上記画像処理装置を実現することができる。
【００５４】
また本発明によれば、記録媒体から読み出された画像処理プログラムによって、上記画像処理装置をコンピュータ上に実現することができる。
【発明を実施するための最良の形態】
【００５５】
図１は、本発明の実施の一形態であるカラー画像処理装置１０とそれを含むカラー画像形成装置４０の概略の構成を示すブロック図である。デジタルカラー複写機などの画像形成装置であるカラー画像形成装置４０は、画像処理装置であるカラー画像処理装置１０、カラー画像入力装置２０、カラー画像出力装置３０、および図示しない操作パネルを含んで構成される。
【００５６】
操作パネルは、たとえば、液晶ディスプレイ等の表示部と設定ボタン等の操作部とが一体化されたタッチパネル等を含んで構成され、操作パネルから入力された情報に基づいてカラー画像処理装置１０、カラー画像入力装置２０、およびカラー画像出力装置３０の動作が制御される。
【００５７】
カラー画像入力装置２０は、たとえば、ＣＣＤ（Charge Coupled Device：電荷結合素子）を備えたスキャナ部を含んで構成され、画像などが記録された紙からの反射光をＣＣＤにて受光し、ＲＧＢ（Red-Green-Blue）のアナログ信号に変換して、カラー画像処理装置１０に入力するものである。この場合、デジタルカメラなどで撮影された画像データを入力データとして用いることもできる。
【００５８】
カラー画像処理装置１０は、Ａ／Ｄ（analog-to-digital）変換部１１、シェーディング補正部１２、入力階調補正部１３、領域分離処理部１４、色補正部１５、黒生成下色除去部１６、空間フィルタ処理部１７、出力階調補正部１８、および階調再現処理部１９を含んで構成される。
【００５９】
カラー画像入力装置２０で変換されたＲＧＢのアナログ信号は、カラー画像処理装置１０内のＡ／Ｄ変換部１１、シェーディング補正部１２、入力階調補正部１３、領域分離処理部１４、色補正部１５、黒生成下色除去部１６、空間フィルタ処理部１７、出力階調補正部１８、および階調再現処理部１９の各部位で順に処理され、ＣＭＹＫ（Cyan-
Magenta-Yellow-Black）のデジタルカラー信号として、画像データを紙などの記録媒体に出力する画像出力装置、たとえば、電子写真方式のデジタルカラー複写機、あるいはインクジェット方式や熱転写方式のカラープリンタなどのカラー画像出力装置３０へ出力される。
【００６０】
カラー画像処理装置１０のＡ／Ｄ変換部１１は、入力されたＲＧＢのアナログ信号をデジタル信号に変換し、シェーディング補正部１２は、Ａ／Ｄ変換部１１からのＲＧＢのデジタル信号に対して、カラー画像入力装置２０の照明系、結像系、あるいは撮像系で生じた種々の歪みを取り除く処理を施す。
【００６１】
入力階調補正部１３は、シェーディング補正部１２にて種々の歪みが取り除かれたＲＧＢ信号、つまり、ＲＧＢの反射率信号に対して、カラーバランスを整えると同時に、濃度信号などカラー画像処理装置１０が採用している画像処理システムにとって扱い易い信号に変換する。
【００６２】
領域分離処理部１４は、入力階調補正部１３からのＲＧＢ信号によって、入力画像中の各画素を、たとえば、文字領域、網点領域、写真領域などの複数の領域に分離し、その分離結果に基づいて、画素がどの領域に属しているかを示す領域識別信号を、色補正部１５、黒生成下色除去部１６、空間フィルタ処理部１７、および階調再現処理部１９に出力すると共に、入力階調補正部１３からのＲＧＢ信号をそのまま後段の色補正部１５に出力する。
【００６３】
色補正部１５は、色を忠実に再現するために、不要吸収成分を含むＣＭＹ（Cyan-
Magenta-Yellow）色材の分光特性に基づいた色濁りを取り除く処理を行う。その処理方法としては、入力されるＲＧＢ信号と出力するＣＭＹ信号の対応関係をＬＵＴ（Look Up
Table）としてもつ方法や、式（３）のような変換行列を用いるカラーマスキング法などがある。
【００６４】
【数３】
2006005901.tif 000005
【００６５】
たとえば、カラーマスキング法を用いる場合には、特定のＣＭＹ信号をカラー画像出力装置３０に与えた場合に出力される色のＬ＊ａ＊ｂ＊値（ＣＩＥ（Commission
International de l’Eclairage：国際照明委員会）１９７６Ｌ＊ａ＊ｂ＊信号（Ｌ＊：明度、ａ＊、ｂ＊：色度））と同じＬ＊ａ＊ｂ＊をもつカラーパッチをスキャナが読み込んだときのＲＧＢデータと、カラー画像出力装置３０に与えたＣＭＹデータとの組を多数用意し、それらの組み合わせから式（３）のａ１１からａ３３までの変換行列の係数を算出し、算出した係数を用いて色補正処理を行う。より精度を高めたいときは、二次以上の高次の項を加えて色補正処理を行えばよい。
【００６６】
黒生成下色除去部１６は、色補正部１５での色補正後のＣＭＹの３色の信号からＫ（黒）信号を生成する黒生成処理、および元のＣＭＹ信号が重なる部分を差し引いて新たなＣＭＹ信号を生成する処理を行い、ＣＭＹの３色信号をＣＭＹＫの４色信号に変換する。
【００６７】
空間フィルタ処理部１７は、黒生成下色除去部１６からのＣＭＹＫ信号の画像データに対して、領域分離処理部１４からの領域識別信号を基に、デジタルフィルタによる空間フィルタ処理を行い、空間周波数特性を補正することによって出力画像のぼやけや粒状性劣化を防止する処理を行う。
【００６８】
出力階調補正部１８では、濃度信号などの信号をカラー画像出力装置３０の特性値である網点面積率に変換する出力階調補正処理を行う。
【００６９】
階調再現処理部１９は、空間フィルタ処理部１７と同様に、ＣＭＹＫ信号の画像データに対して、領域分離処理部１４からの領域識別信号を基に所定の処理を施すものであり、最終的に画像の階調を擬似的に再現することができるように処理する階調再現処理を施す。
【００７０】
たとえば、領域分離処理部１４にて文字領域として分離された領域は、特に黒文字または色文字の再現性を高めるために、空間フィルタ処理部１７による空間フィルタ処理における鮮鋭強調処理で高周波成分を強調する。同時に、階調再現処理部１９においては、高周波成分の再現に適した高解像度のスクリーンでの二値化または多値化処理が選択される。また、領域分離処理部１４にて網点領域として分離された領域に関しては、空間フィルタ処理部１７において、入力網点成分を除去するためのローパス・フィルタ処理が施され、階調再現処理部１９で階調性を重視したスクリーンで二値化または多値化処理される。また、領域分離処理部１４にて写真領域として分離された領域に関しては、階調再現処理部１９で階調再現性を重視したスクリーンでの二値化または多値化処理が行われる。
【００７１】
階調再現処理部１９で処理された画像データは、一旦、カラー画像処理装置１０内にある図示しない記憶部に記憶され、所定のタイミングで読み出されてカラー画像出力装置３０に入力される。
【００７２】
なお、カラー画像処理装置１０は、図示しないＣＰＵ（Central Processing Unit）を有しており、上述した処理は、このＣＰＵによって実行される。
【００７３】
本発明は、実施の一形態であるカラー画像形成装置４０に含まれるカラー画像処理装置の階調再現処理部１９に特徴があり、階調再現処理部１９の詳細は、後述する。この階調再現処理部１９は、網点領域にだけ誤差拡散処理を行うこともできるし、また、領域に関わらずすべての画素で誤差拡散処理を実行することもできる。
【００７４】
なお、画像データは、ＣＭＹＫの各色の濃度値から構成されるが、誤差拡散処理は、色にかかわらず同様の処理を行うので、以下の説明では、１つの色の濃度値に対する処理だけを説明し、他の色に対する処理については説明を省略するが、他の色についても同様の処理を行えばよい。
【００７５】
図２は、本発明の実施の一形態である画像処理装置１０に含まれる階調再現処理部１９の第１の例を示すブロック図である。階調再現処理部１９は、加算器６１、量子化処理部６２、量子化閾値格納部６３、量子化誤差算出部６４、誤差格納部６５、拡散係数格納部６６、および蓄積誤差算出部６７を含んで構成される。
【００７６】
加算器６１は、入力画像データの画素の濃度を示す画素値に対して、蓄積誤差算出部６７で算出された蓄積誤差を加算し、量子化処理部６２は、加算器６１で蓄積誤差が加算された画素値を、量子化閾値格納部６３に格納されている量子化閾値に基づいて量子化して、出力画像データの画素の量子化値とする。減算器である量子化誤差算出部６４は、加算器６１で蓄積誤差が加算された画素値と、その画素値が量子化処理部６２で量子化された量子化値との差を量子化誤差として求め、誤差格納部６５に格納する。
【００７７】
拡散係数格納部６６は、量子化誤差算出部６４で算出された量子化誤差を、まだ量子化されていない画素に配分する割合を示す拡散係数の分子成分を格納する拡散係数分子格納部６６ａと拡散係数の分母成分を格納する拡散係数分母格納部６６ｂとを含んで構成される。
【００７８】
蓄積誤差算出部６７は、乗算器６７ａ、加算器６７ｂ、および除算器６７ｃを含んで構成される。乗算器６７ａは、誤差格納部６５に格納されている量子化誤差のうちで、次に量子化を行う画素に配分される量子化誤差と、その量子化誤差に対応する拡散係数の分子の値を拡散係数分子格納部６６ａから読み出し、読み出した拡散係数の分子の値とを乗算する。
【００７９】
加算器６７ｂは、乗算器６７ａで乗算された乗算結果を加算する。除算器６７ｃは、加算器６７ｂで加算された加算結果、つまり、乗算器６７ａで次の量子化を行う画素のために乗算された乗算結果の総和を、拡散係数分母格納部６６ｂに格納されている拡散係数の分母の値によって除算し、除算結果を次に量子化する画素に対する蓄積誤差として、加算器６１に出力する。
【００８０】
従来技術の実施の一形態では、図１５のように、量子化誤差Ｅ（ｎ）と拡散係数との乗算を１つの画素を量子化する毎に、未処理の入力画像の画素に配分する拡散誤差を演算（乗算および除算）して、蓄積誤差格納部７７に格納しておき、次の画素を量子化するときに、次の画素に配分された拡散誤差を蓄積誤差格納部７７から読み出し、加算して蓄積誤差を求めていたが、上述した本発明の実施の一形態では、量子化誤差Ｅ（ｎ）を誤差格納部６５に格納しておき、次の画素を量子化するときに、その画素に配分される量子化誤差と、その量子化誤差に対応する拡散係数の分子の値とを乗算し、乗算結果を加算した後で、加算の総和を拡散係数の分母の値で除算し、除算結果を蓄積誤差として求める。
【００８１】
具体的には、拡散係数の分子をａｉｊ、拡散係数の分母をＡとすると、蓄積誤差Ｄは、式（４）によって算出することができる。
【００８２】
【数４】
2006005901.tif 000006
【００８３】
式（４）での除算の結果に、小数点以下の値があるときは、小数点以下の値を切り捨て、あるいは、四捨五入してもよい。いずれであっても、切り捨てた値、あるいは、切り上げた値が積み重なって本来の量子化誤差とかけ離れた値となることがないので、低濃度及び高濃度領域での階調再現特性が大幅に改善された画像データを出力することができる。
【００８４】
図３は、実施の他の形態である画像処理装置１０に含まれる階調再現処理部１９の第２の例を示すブロック図である。階調再現処理部１９は、加算器６１、量子化処理部６２、量子化閾値格納部６３、量子化誤差算出部６４、拡散係数格納部６６、および蓄積誤差算出部６７を含んで構成される。
【００８５】
加算器６１は、入力画像データの画素の濃度を示す画素値に対して、蓄積誤差算出部６７で算出された蓄積誤差を加算し、量子化処理部６２は、加算器６１で蓄積誤差が加算された画素値を、量子化閾値格納部６３に格納されている量子化閾値に基づいて量子化して、出力画像データの画素の量子化値とする。減算器である量子化誤差算出部６４は、加算器６１で蓄積誤差が加算された画素値と、その画素値が量子化処理部６２で量子化された量子化値との差を量子化誤差として求め、蓄積誤差算出部６７に出力する。
【００８６】
拡散係数格納部６６は、量子化誤差算出部６４で算出された量子化誤差を、まだ量子化されていない画素に配分する割合を示す拡散係数の分子成分を格納する拡散係数分子格納部６６ａと拡散係数の分母成分を格納する拡散係数分母格納部６６ｂとを含んで構成される。
【００８７】
蓄積誤差算出部６７は、乗算器６７ａ、加算器６７ｂ、除算器６７ｃ、および演算結果格納部６７ｄを含んで構成される。乗算器６７ａは、量子化誤差算出部６４から出力された量子化誤差と、拡散係数分子格納部６６ａから読み出した拡散係数の各分子の値とを乗算し、演算結果格納部６７ｄは、乗算器６７ａの乗算結果を格納する。
【００８８】
加算器６７ｂは、演算結果格納部６７ｄに格納された乗算結果のうちで、次に量子化される画素に対応する乗算結果を読み出して加算し、総和を求める。除算器６７ｃは、加算器６７ｂで加算された総和を、拡散係数分母格納部６６ｂに格納されている拡散係数の分母の値によって除算し、除算結果を次に量子化する画素に対する蓄積誤差として、加算器６１に出力する。
【００８９】
また、上述したいずれの実施の形態においても、除算器６７ｃで行われる除算は、量子化誤差を２進数で表現し、拡散係数の分母を２のｎ乗（ｎは自然数）として設定することによって、下位ｎビット以外のビットを取り出して、除算結果の値とすることで実現しても良い。
【００９０】
また、この誤差拡散は、２値誤差拡散だけでなく、４値や１６値などの多値誤差拡散でもよいし、拡散係数の分子成分の組を複数用意しておいて、乱数や領域分離結果によって切り換えても構わない。
【００９１】
図４は、本発明の実施のさらに他の形態である画像処理方法を説明するためのフローチャートである。出力画像データを生成する階調再現処理において、誤差拡散処理を行うときに、本処理が開始される。
【００９２】
ステップＳ１では、入力画像データの画素の濃度を示す画素値に対して、蓄積誤差を加算する。ステップＳ２では、蓄積誤差が加算された画素値を量子化して出力画像データの画素の量子化値を算出する。ステップＳ３では、蓄積誤差が加算された画素値と、その画素値を量子化した量子化値との差を量子化誤差として算出する。ステップＳ４では、算出した量子化誤差を記憶部に格納する。
【００９３】
ステップＳ５では、記憶部に格納した量子化誤差のうちで、次に量子化を行う画素に配分される量子化誤差と、その量子化誤差に対応する拡散係数の分子の値とを乗算し、乗算結果を加算して総和を求める。ステップＳ６では、求めた総和を拡散係数の分母の値で除算し、蓄積誤差とする。ステップＳ７では、すべての画素について、量子化を行ったか否かをチェックし、すべての画素について、量子化していないときは、ステップＳ１に戻り、すべての画素について量子化したときは、終了する。
【００９４】
図５は、本発明の実施のさらに他の形態であるプリンタ・ドライバ５１とそれを含むコンピュータ５０の構成を示す図である。コンピュータ５０は、プリンタ・ドライバ５１、通信ポートドライバ５２、および通信ポート５３を含んで構成され、画像出力装置であるプリンタ５４と接続されている。
【００９５】
上述した画像処理方法は、ソフトウエア、たとえば、アプリケーションプログラムによって実現して、コンピュータ５０に実行させてもよい。この場合、誤差拡散処理を行うソフトウエアは、プリンタ・ドライバ５１としてコンピュータ５０に組み込んで、実行させることができる。プリンタ・ドライバ５１は、色補正部５１１、黒生成下色除去部５１２、階調再現処理部５１３、プリンタ言語翻訳部５１４を含んで構成される。
【００９６】
コンピュータ５０において、各種のアプリケーションプログラムを実行することによって生成された画像データは、色補正部５１１、黒生成下色除去部５１２、階調再現処理部５１３によって、上述した処理が実行される。特に、階調再現処理部５１３は、図４に示したフローチャートの誤差拡散処理を行う部位であり、階調再現処理部５１３で誤差拡散処理が行われた画像データは、プリンタ言語翻訳部５１４によってプリンタ言語に変換され、通信ポートドライバ５２、ＲＳ２３２Ｃ（Recommended Standard 232 version C）やＬＡＮ（Local Area Network）等などのインタフェースの通信ポート５３を介してプリンタ５４に送信される。プリンタ５４は、コンピュータ５０から送信された画像データに応じて画像を出力するようになっており、プリンタ機能の他に、コピー機能やファックス機能を有するデジタル複合機であってもよい。
【００９７】
また、本発明は、コンピュータ５０に、上述した整数演算の切捨て誤差を最小限に抑える誤差拡散処理を行う画像処理の機能を実行させるためのプログラムを記録したコンピュータ読取り可能な記録媒体に記録して提供することもできる。この場合、低濃度及び高濃度領域の階調再現特性が大幅に改善された誤差拡散処理方法を用いて画像処理を行うプログラムを記録した記録媒体を持ち運ぶことができ、容易に提供することができる。
【００９８】
記録媒体としては、コンピュータで処理を行うために、図示しないメモリ、たとえばＲＯＭ（Read Only Memory）のようなプログラムメディアであってもよいし、また、図示しない外部記憶装置としてのプログラム読取装置を設けて、その装置に記録媒体を装填することによって読取り可能となるプログラムメディアであってもよい。
【００９９】
具体的には、プログラムメディアが本体と分離可能に構成される記録媒体であるときは、磁気テープやカセットテープ等のテープ系、フロッピー（登録商標）ディスクやハードディスク等の磁気ディスク並びにＣＤ−ＲＯＭ（Compact Disk Read Only Memory）／ＭＯ（Magneto Optical disk）／ＭＤ（Mini Disc）／ＤＶＤ（Digital Versatile Disk）等の光ディスクのディスク系、ＩＣ（Integrated Circuit）カード／メモリカード／光カード等のカード系であってもよい。また、マスクＲＯＭ、ＥＰＲＯＭ（Erasable
Programmable Read Only Memory）、ＥＥＰＲＯＭ（Electrically Erasable
Programmable Read Only Memory）、フラッシュＲＯＭ等の半導体メモリを含めた固定的にプログラムを記録する記録媒体であってもよい。
【０１００】
いずれの場合においても、記録媒体に格納されているプログラムは、ＣＰＵがアクセスして実行することができる構成であればよく、たとえば、記録媒体からプログラムを読み出し、読み出されたプログラムを、コンピュータの図示していないプログラム記憶エリアにダウンロードし、プログラム記憶エリアにダウンロードしたプログラムを実行する方式であってもよい。この場合、プログラムをダウンロードするためのプログラムは、予め本体装置に格納しておく。
【０１０１】
また、コンピュータが、インターネットを含む通信ネットワークと接続可能なシステム構成であるときは、通信ネットワークを介してプログラムをダウンロードするように、流動的にプログラムを記録する記録媒体であってもよい。なお、このように通信ネットワークからプログラムをダウンロードする場合には、プログラムをダウンロードするためのプログラムは、予め本体装置に格納しておくか、あるいは別の記録媒体からインストールするものであってもよい。
【０１０２】
上述した記録媒体に記録されたプログラムは、デジタルカラー画像形成装置などの画像形成装置やコンピュータシステムに備えられるプログラム読取り装置によって読取られ、読取られたプログラムによって上述した画像処理が実行される。
【０１０３】
なお、上述したコンピュータシステムは、フラットベッドスキャナ、フィルムスキャナ、あるいはデジタルカメラなどの画像入力装置、所定のプログラムがダウンロードされることによって上述した画像処理など様々な処理が行われるコンピュータ、コンピュータの処理結果を表示するＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどの画像表示装置、およびコンピュータの処理結果を紙に出力するプリンタと、ネットワークを介してサーバなどに接続するための通信手段としてのネットワークカードやモデムなどを含んで構成される。
【０１０４】
図６は、図１に示した階調再現処理部１９の第３の例を示すブロック図である。階調再現処理部１９は、加算器６１、量子化処理部６２、量子化閾値格納部６３、量子化誤差算出部６４、拡散係数格納部６６、および蓄積誤差算出部６８を含んで構成される。図６に示した階調再現処理部１９の構成は、図３に示した階調再現処理部１９の蓄積誤差算出部６７を蓄積誤差算出部６８に置き換えたものである。
【０１０５】
加算器６１は、入力画像データの画素の濃度を示す画素値に対して、蓄積誤差算出部６８で算出された蓄積誤差を加算し、量子化処理部６２は、加算器６１で蓄積誤差が加算された画素値を、量子化閾値格納部６３に格納されている量子化閾値に基づいて量子化して、出力画像データの画素の量子化値とする。減算器である量子化誤差算出６４は、加算器６１で蓄積誤差が加算された画素値と、その画素値が量子化処理部６２で量子化された量子化値との差を量子化誤差として求め、蓄積誤差算出部６８に出力する。
【０１０６】
拡散係数格納部６６は、量子化誤差算出部６４で算出された量子化誤差を、まだ量子化されていない画素に配分する割合を示す拡散係数の分子成分を格納する拡散係数分子格納部６６ａと拡散係数の分母成分を格納する拡散係数分母格納部６６ｂとを含んで構成される。
【０１０７】
図７は、図６に示した拡散係数格納部６６に格納された拡散係数を説明するための図である。入力画像は、たとえば複数の画素を含む複数のラインから構成される。最初のラインの最初の画素から量子化が開始され、同じラインの隣接する画素が順次量子化される。１つのラインの全ての画素が量子化されと、次のラインの画素が順次量子化される。
【０１０８】
量子化される画素を含む量子化ラインに含まれる画素の量子化誤差が拡散される画素を含む複数の誤差拡散ラインのうちで、最初に量子化される画素を含むラインを第１ライン、その次のラインを第２ライン、さらにその次のラインを第３ラインというように順次番号を付す。図７に示した拡散係数マトリクスは、注目画素、つまり量子化される画素が第１ラインに含まれる。
【０１０９】
拡散係数は、これらの誤差拡散ラインに対応するラインを有する拡散係数マトリクスとして構成される。図７に示した拡散係数マトリクスは、注目画素の位置を起点として、その画素の量子化誤差を配分する画素の相対位置と、その相対位置の画素に量子化誤差を配分する割合、つまり拡散係数を示している。
【０１１０】
第１ラインの画素に量子化誤差を配分する拡散係数は、拡散係数ａ１が注目画素の右隣の位置に、第２ラインの画素に量子化誤差を配分する拡散係数は、拡散係数ｂ１が注目画素の左下の位置に、拡散係数ｂ２が注目画素の真下の位置に、および拡散係数ｂ３が注目画素の右下の位置に示されている。
【０１１１】
それらの拡散係数が示されている位置の画素に、それぞれの拡散係数によって求められる拡散誤差が配分される。拡散係数分子格納部６６ａは、それらの拡散係数を共通の分母の分数で表したときの分子の値を格納し、拡散係数分母格納部６６ｂは、拡散係数の共通の分母の値を格納する。
【０１１２】
図６を参照して、蓄積誤差算出部６８は、第１ライン蓄積誤差算出部６８１、第２ライン蓄積誤差算出部６８２、および加算器６８３を含んで構成される。
【０１１３】
第１ライン蓄積誤差算出部６８１は、乗算器６８１ａ、加算器６８１ｂ、除算器６８１ｃ、および演算結果格納部６８１ｄを含んで構成される。第１ライン蓄積誤差算出部６８１は、第１ラインの画素毎に、図７に示した拡散係数マトリクスの第１ラインの拡散係数によって求められた拡散誤差の総和を算出する。
【０１１４】
乗算器６８１ａは、量子化誤差算出部６４によって算出された量子化誤差と、拡散係数分子格納部６６ａに格納された拡散係数の分子のうち、拡散係数マトリクスの第１ラインの拡散係数の各分子とを乗算して、誤差拡散分子量を求める。加算器６８１ｂは、第１ラインの画素毎に、乗算手段６８１ａによって乗算された乗算結果である誤差拡散分子量と、加算器６８１ｂによって加算された加算結果を格納する演算結果格納部６８１ｄに格納されている加算結果とを加算する。演算結果格納部６８１ｄは、加算器６８１ｂによって加算された誤差拡散分子量を、第１ラインの画素毎に格納つまり記憶する記憶部である。
【０１１５】
加算器６８１ｂが、量子化ラインに含まれる画素の量子化誤差と第１ラインの拡散係数の各分子との乗算結果である誤差拡散分子量を、第１ラインの１つの画素について全て加算したとき、除算器６８１ｃは、加算器６８１ｂによって加算された誤差拡散分子量を、拡散係数分母格納部６６ｂに格納された拡散係数の分母の値によって除算する。第１ライン蓄積誤差算出部６８１は、除算器６８１ｃによって除算された除算結果を、第１ラインの画素毎にライン蓄積誤差として出力する。
【０１１６】
演算結果格納部６８１ｄは、誤差拡散分子量を、一時的に、つまり第１ラインの１つの画素について、拡散係数マトリクスの第１ラインの拡散係数の各分子によって求められる全ての誤差拡散分子量が加算されて、除算されるまでの期間、記憶しておくための記憶部である。演算結果格納部６８１ｄは、拡散係数マトリクスの第１ラインの拡散係数の数の誤差拡散分子量を記憶する容量が必要である。図７に示した拡散マトリクスの場合、第１ラインの拡散係数は１つであるので、１つの誤差拡散分子量を記憶する容量があればよい。
【０１１７】
第２ライン蓄積誤差算出部６８２は、乗算器６８２ａ、加算器６８２ｂ、除算器６８２ｃ、演算結果格納部６８２ｄ、およびライン誤差格納部６８２ｅを含んで構成される。第２ライン蓄積誤差算出部６８２は、第２ラインの画素毎に、図７に示した拡散係数マトリクスの第２ラインの拡散係数によって求められた拡散誤差の総和を算出する。
【０１１８】
乗算器６８２ａは、量子化誤差算出部６４によって算出された量子化誤差と、拡散係数分子格納部６６ａに格納された拡散係数の分子のうち、拡散係数マトリクスの第２ラインの拡散係数の各分子とを乗算して、誤差拡散分子量を求める。加算器６８２ｂは、第２ラインの画素毎に、乗算手段６８２ａによって乗算された乗算結果である誤差拡散分子量と、加算器６８２ｂによって加算された加算結果を格納する演算結果格納部６８２ｄに格納されている加算結果とを加算する。演算結果格納部６８２ｄは、加算器６８２ｂによって加算された誤差拡散分子量を、第２ラインの画素毎に格納つまり記憶する記憶部である。
【０１１９】
加算器６８２ｂが、量子化ラインに含まれる画素の量子化誤差と第２ラインの拡散係数の各分子との乗算結果である誤差拡散分子量を、第２ラインの１つの画素について全て加算したとき、除算器６８２ｃは、加算器６８２ｂによって加算された誤差拡散分子量を、拡散係数分母格納部６６ｂに格納された拡散係数の分母の値によって除算する。すなわち、除算器６８２ｃは、量子化誤差が、第１ラインの画素から、第２ラインの１つの画素に配分された誤差拡散分子量の総和を、拡散係数分母格納部６６ｂに格納された拡散係数の分母の値によって除算する。
【０１２０】
演算結果格納部６８２ｄは、誤差拡散分子量を、一時的に、つまり第２ラインの１つの画素について、拡散係数マトリクスの第２ラインの拡散係数の分子によって求められる全ての誤差拡散分子量が加算されて、除算されるまでの期間、記憶しておくための記憶部である。拡散係数マトリクスの第２ラインの拡散係数の数の誤差拡散分子量を記憶する容量が必要である。図７に示した拡散マトリクスの場合、第２ラインの拡散係数は３つであるので、３つの誤差拡散分子量を記憶する容量が必要である。
【０１２１】
ライン誤差格納部６８２ｅは、除算器６８２ｃによって除算された除算結果を、ライン蓄積誤差として、格納つまり記憶する記憶部である。ライン誤差格納部６８２ｅは、第１ラインの画素の量子化誤差から配分された拡散誤差の総和であるライン蓄積誤差を、第２ラインの画素毎に記憶する記憶部であり、たとえばＦＩＦＯ（First-In First−Out）型つまり先入れ先出し型の記憶部で構成される。ライン誤差格納部６８２ｅは、第２ラインの１つの画素について、量子化ラインの画素から配分された拡散誤差が全て配分されてから、その画素が量子化されるまでの期間、その画素のライン蓄積誤差を記憶しておく必要がある。
【０１２２】
さらに、ライン誤差格納部６８２ｅは、最初に記憶されたライン蓄積誤差が読み出された後、新たに除算器６８２ｃによって除算された除算結果がライン蓄積誤差として記憶される。したがって、ライン誤差格納部６８２ｅは、ライン蓄積誤差が読み出された画素の次の画素から、新たにライン蓄積誤差が記憶された画素までの画素の数、すなわち１つのラインに含まれる画素の数のライン蓄積誤差を記憶する容量が必要である。各ラインの画素数が一定でないときは、１つのラインの最大の画素数のライン蓄積誤差を記憶する容量が必要である。
【０１２３】
第２ライン蓄積誤差算出部６８２は、ライン誤差格納部６８２ｅに格納されたライン蓄積誤差のうちで、次に量子化される画素に対するライン蓄積誤差を出力する。加算器６８３は、次に量子化する画素について、第１ライン蓄積誤差算出部６８１から出力されたライン蓄積誤差と、第２ライン蓄積誤差算出部６８２から出力されたライン蓄積誤差とを加算し、加算結果を次に量子化する画素への蓄積誤差として加算器６１に入力する。
【０１２４】
量子化閾値格納部６３、拡散係数格納部６６、演算結果格納部６８１ｄ、演算結果格納部６８２ｄ、およびライン誤差格納部６８２ｅなどの記憶部は、たとえば画像処理装置１０に含まれるＣＰＵに含まれる記憶部である。この記憶部は、ＣＰＵが処理を実行する際に用いるデータおよびこのＣＰＵで実行されるプログラムを記憶するものであり、半導体メモリなど記憶装置によって実現される。
【０１２５】
第１の加算手段は、たとえば加算器６１、量子化処理手段は、たとえば量子化処理部６２、量子化誤差算出手段は、たとえば量子化誤差算出部６４、乗算手段は、たとえば乗算器６８１ａおよび乗算器６８２ａ、第２の加算手段は、たとえば加算器６８１ｂおよび加算器６８２ｂ、除算手段は、たとえば除算器６８１ｃおよび除算器６８２ｃ、ライン蓄積誤差算出手段は、たとえば第１ライン蓄積誤差算出部６８１および第２ライン蓄積誤差算出部６８２、第３の加算手段は、たとえば加算器６８３である。
【０１２６】
従来技術による実施の形態では、たとえば図１５に示した誤差拡散処理回路７０のように、量子化誤差Ｅ（ｎ）と拡散係数との乗算を１つの画素を量子化する毎に、入力画像データの画素のうち、未処理の画素に配分する拡散誤差を演算して、つまり乗算および除算して、蓄積誤差として蓄積誤差格納部７７に格納する。さらに、次の画素を量子化するときに、その画素の量子化誤差を配分する画素にすでに配分された蓄積誤差を、蓄積誤差格納部７７から読み出し、新たに配分された拡散誤差を加算して、新たな蓄積誤差を求めている。
【０１２７】
しかし、図６に示した階調再現処理部１９では、量子化誤差Ｅ（ｎ）と、拡散係数の各分子の値とを乗算し、誤差拡散ラインに含まれる各画素について、量子化ラインに含まれる画素の量子化誤差に基づいて乗算された乗算結果の総和を、拡散係数の分母の値で除算する。さらにその除算結果をライン蓄積誤差として誤差拡散ライン毎に算出し、次に量子化する画素に対する各ライン蓄積誤差の総和を蓄積誤差として算出する。
【０１２８】
具体的には、たとえば図７に示した拡散マトリクスの場合、拡散係数マトリクスの第１ラインの拡散係数の分子をａｉ、第２ラインの拡散係数の分子をａｊ、拡散係数の分母をＡとすると、蓄積誤差Ｄは、式（５）によって算出することができる。
【０１２９】
【数５】
2006005901.tif 000007
【０１３０】
式（５）での２つ除算の結果に、小数点以下の値があるときは、小数点以下の値を切り捨て、切り上げ、あるいは四捨五入してもよい。いずれの場合であっても、次の注目画素、つまり次に量子化する画素に対する蓄積誤差を求める際に、拡散係数の分子の値と、量子化誤差との積の誤差拡散ライン毎の和を、拡散係数の分母で除算するので、切り捨てた値、あるいは切り上げた値が１つの誤差拡散ラインでは累積することがない。したがって、式（５）によって算出された蓄積誤差は、本来の蓄積誤差、つまり、切り捨て、切り上げ、および四捨五入しないときの蓄積誤差とかけ離れた値となることがない。
【０１３１】
すなわち、量子化誤差に拡散係数の分子を乗算し、拡散係数の分母で除算した後加算すると、除算したときに発生する除算誤差が、拡散係数の分子の数の除算誤差分累積する。しかし、乗算結果を加算して誤差拡散ライン毎の総和を求めた後で除算することによって、誤差拡散ライン数の除算誤差の累積値まで低減することができる。
【０１３２】
このように、量子化誤差から蓄積誤差を求めるとき、拡散係数を分母と分子に分けて、量子化誤差と拡散係数の分子との積の誤差拡散ライン毎の和を、誤差拡散ラインの画素毎に除算するので、１つの量子化誤差を周辺画素に拡散するたびに生じていた除算誤差の累積を抑制することができる。したがって、低濃度及び高濃度領域での階調再現特性が改善された画像データを出力することができる。
【０１３３】
図６に示した階調再現処理部１９の第２ライン蓄積誤差算出部３８２は、１つの画素について、第２ラインの拡散係数の各分子によって求められた拡散誤差分子量が全て加算されたとき、その加算された拡散誤差分子量を、拡散係数の分母で除算してライン蓄積誤差としてライン誤差格納部６８２ｅに格納する。したがって、加算された拡散誤差分子量が除算されたとき、演算結果格納部６８２ｄに格納されていた加算結果が削除され、除算されたライン蓄積誤差がライン誤差格納部６８２ｅに格納されるが、加算結果のビット数よりライン蓄積誤差のビット数が少ないので、図３に示した階調再現処理部１９の演算結果格納部６７ｄに比べて、記憶容量を削減することができる。
【０１３４】
たとえば画素値、拡散係数の分母、および拡散係数の分子を８ビットとし、拡散係数マトリクスとして図７に示した拡散係数マトリクスを用いるとすると、量子化誤差８ビットと拡散係数の分子８ビットとの乗算結果は、１６ビットである。図７に示した拡散係数マトリクスの第２ラインは３つの拡散係数を含むので、３つの乗算結果を加算することになり、桁上がりを考慮すると、加算結果は最大で１８ビットになる。この加算結果は、演算結果格納部６８２ｄに格納される。
【０１３５】
第２ラインの画素の加算結果を格納する演算結果格納部６８２ｄに記憶された加算結果は、３つの乗算結果が加算されたとき、除算するために読み出されるので、演算結果格納部６８２ｄは、３つの画素についての加算結果を記憶すればよく、３６ビットの記憶容量が必要である。第１ラインの画素の加算結果を格納する演算結果格納部６８１ｄは、１つの拡散係数による乗算結果しかなく、加算が行なわれないので、１６ビットの記憶容量でよい。
【０１３６】
加算結果１８ビットを拡散誤差の分母８ビットで除算すると、除算結果は、１０ビットになる。この除算結果は、ライン誤差格納部６８２ｅに格納される。ライン誤差格納部６８２ｅは、この除算結果、つまり１つの画素のライン蓄積誤差を、量子化ラインの画素から配分される拡散誤差が全て配分されてから、その画素が量子化されるまでの期間記憶しておく必要がある。つまり最大で１つのラインの画素の数のライン蓄積誤差を記憶しておく必要がある。１つのラインに含まれる画素の数をｇとすると、ライン誤差格納部６８２ｅは、１０×ｇビットの記憶容量が必要である。したがって、図６に示した階調再現処理部１９に必要な記憶容量は、演算結果格納部６８１ｄおよび演算結果格納部６８２ｄの記憶容量は少ないので、概ねライン誤差格納部６８２ｅの記憶容量で決まり、概算１０ｇビットである。
【０１３７】
それに対して、図３に示した階調再現処理部１９の演算結果格納部６７ｄは、１つの量子化誤差に対して拡散係数の数の乗算結果が求められので、これらの乗算結果を格納する必要がある。これらの乗算結果は、それぞれ異なる画素に対する乗算結果であるので、画素毎に、最初の乗算結果が求められてから、最後の乗算結果が求められるまで、最初の乗算結果を格納しておく必要がある。
【０１３８】
たとえば図７に示した拡散係数マトリクスの場合、１つの画素に最初に量子化誤差が配分されるのは、注目画素が、その画素の左上の位置になったときである。そして、その画素に最後に量子化誤差が配分されるのは、注目画素が、その画素の左隣になったときである。換言すれば、演算結果格納部６７ｄは、１つのラインの画素の数に「１」を加えた数の画素が量子化される期間その乗算結果を記憶する必要がある。拡散係数の数が「４」であるので、１つのラインの画素の数をｇとすると、図３に示した階調再現処理部１９に必要な記憶容量は、概算１６×ｇ×４ビットの容量が必要になる。
【０１３９】
このようにして、図６に示した階調再現処理部１９に必要な記憶容量は、図３に示した階調再現処理部１９に必要な記憶容量より、少なくすることができる。
【０１４０】
図８は、図６に示した階調再現処理部１９によって処理される画像処理方法を説明するためのフローチャートである。この画像処理方法は、たとえばカラー画像処理装置１０に含まれるＣＰＵが、記憶部に記憶されたプログラムを実行することによって実現される。出力画像データを生成する階調再現処理において、誤差拡散処理を行うときに、本処理が開始される。
【０１４１】
ステップＴ１では、入力画像データの画素の濃度を示す画素値に対して、蓄積誤差を加算する。ステップＴ２では、蓄積誤差が加算された画素値を量子化して、出力画像データの画素の量子化値を算出する。ステップＴ３では、蓄積誤差が加算された画素値と、その画素値を量子化した量子化値との差を、量子化誤差として算出する。
【０１４２】
ステップＴ４では、１つのラインの画素の量子化誤差が配分されるライン毎つまり誤差拡散ライン毎に、量子化誤差と拡散係数の各分子の値とを乗算し、各乗算結果を、記憶部である演算結果格納部に記憶されている加算結果のうちで、それぞれ同じ画素に対する加算結果に加算する。各加算結果は、それぞれ新たな加算結果として演算結果格納部に格納する。加算結果が格納されていない画素のときは、乗算結果に「０」を加算して、演算結果格納部に格納する。あるいは、演算結果格納部の記憶容量に余裕があるときは、画素位置毎に「０」を初期値として記憶しておいてもよいし、乗算結果に対して加算演算を行なわずに格納してもよい。
【０１４３】
ステップＴ５では、ライン毎つまり誤差拡散ライン毎に、乗算結果が全て加算された画素の加算結果を、拡散係数の分母の値によって除算し、除算結果をライン蓄積誤差とする。ステップＴ６では、次に量子化する画素について、全てのライン蓄積誤差を合計して、蓄積誤差を算出する。
【０１４４】
ステップＴ７では、入力画像データの全ての画素について、誤差拡散処理を行なったか否かを判定する。全ての画素について、誤差拡散処理を終了したときは終了し、全ての画素について、誤差拡散処理を終了していないときは、ステップＴ１に戻り、未処理の画素についての誤差拡散処理を行なう。
【０１４５】
このように、量子化誤差から蓄積誤差を求めるとき、拡散係数を分母と分子に分けて、量子化誤差と拡散係数の分子との積の誤差拡散ライン毎の和を、誤差拡散ラインの画素毎に除算するので、１つの量子化誤差を周辺画素に拡散するたびに生じていた除算誤差の累積を抑制することができる。したがって、低濃度及び高濃度領域での階調再現特性が改善された画像データを出力することができる。
【０１４６】
図９は、図１に示した階調再現処理部１９の第４の例を示すブロック図である。図６に示した階調再現処理部１９は、１つの画素の量子化誤差を２つの誤差拡散ラインの画素に拡散していたが、図９に示した階調再現処理部１９は、３つの誤差拡散ラインの画素に拡散する。
【０１４７】
階調再現処理部１９は、加算器６１、量子化処理部６２、量子化閾値格納部６３、量子化誤差算出部６４、拡散係数格納部６６、および蓄積誤差算出部６９を含んで構成される。図９に示した階調再現処理部１９の構成は、図６に示した階調再現処理部１９の蓄積誤差算出部６８を蓄積誤差算出部６９に置き換えたものである。加算器６１、量子化処理部６２、量子化閾値格納部６３、量子化誤差算出部６４、および拡散係数格納部６６は、図６に示したものと同じであり、説明は省略する。
【０１４８】
図１０は、図９に示した拡散係数格納部６６に格納された拡散係数を説明するための図である。この拡散係数は、３つの誤差拡散ラインから構成される拡散係数マトリクスで表される。この拡散係数マトリクスは、図７に示した拡散係数マトリクスに比べて、量子化誤差をより広い範囲の画素に拡散させるため、たとえば階調性を重視した処理を行なうために用いられる。
【０１４９】
第１ラインの画素に量子化誤差を配分する拡散係数は、拡散係数ａ１が注目画素の１つ右隣の位置に、拡散係数ａ２が注目画素の２つ右隣の位置に示されている。第２ラインの画素に量子化誤差を配分する拡散係数は、拡散係数ｂ１が注目画素の１つ下の位置から２つ左隣の位置に、拡散係数ｂ２が注目画素の１つ下の位置から１つ左隣の位置に、拡散係数ｂ３が注目画素の１つ下の位置に、拡散係数ｂ４が注目画素の１つ下の位置から１つ右隣の位置に、拡散係数ｂ５が注目画素の１つ下の位置から２つ右隣の位置に示されている。
【０１５０】
第３ラインの画素に量子化誤差を配分する拡散係数は、拡散係数ｃ１、拡散係数ｃ２、拡散係数ｃ３、拡散係数ｃ４、および拡散係数ｃ５が、拡散係数ｂ１、拡散係数ｂ２、拡散係数ｂ３、拡散係数ｂ４、および拡散係数ｂ５のそれぞれ１つ下の位置に示されている。
【０１５１】
それらの拡散係数が示されている位置の画素に、それぞれの拡散係数によって求められる拡散誤差が配分される。拡散係数分子格納部６６ａは、それらの拡散係数を共通の分母の分数で表したときの分子の値を格納し、拡散係数分母格納部６６ｂは、拡散係数の共通の分母の値を格納する。
【０１５２】
図９を参照して、蓄積誤差算出部６９は、第１ライン蓄積誤差算出部６９１、第２ライン蓄積誤差算出部６９２、第３ライン蓄積誤差算出部６９３、加算器６９４、および加算器６９５を含んで構成される。
【０１５３】
第１ライン蓄積誤差算出部６９１は、乗算器６９１ａ、加算器６９１ｂ、除算器６９１ｃ、および演算結果格納部６９１ｄを含んで構成され、これらは、それぞれ、図６に示した第１ライン蓄積誤差算出部６８１の乗算器６８１ａ、加算器６８１ｂ、除算器６８１ｃ、および演算結果格納部６８１ｄに対応するものであり、説明は省略する。第１ライン蓄積誤差算出部６９１は、量子化誤差が配分される第１ラインの画素毎に、図１０に示した拡散係数マトリクスの第１ラインの拡散係数によって求められる拡散誤差の総和であるライン蓄積誤差を算出する。
【０１５４】
第２ライン蓄積誤差算出部６９２は、乗算器６９２ａ、加算器６９２ｂ、除算器６９２ｃ、演算結果格納部６９２ｄ、およびライン誤差格納部６９２ｅを含んで構成され、これらは、それぞれ、図６に示した第２ライン蓄積誤差算出部６８２の乗算器６８２ａ、加算器６８２ｂ、除算器６８２ｃ、演算結果格納部６８２ｄ、およびライン誤差格納部６８２ｅに対応するものであり、説明は省略する。第２ライン蓄積誤差算出部６９２は、量子化誤差が配分される第２ラインの画素毎に、図１０に示した拡散係数マトリクスの第２ラインの拡散係数によって求められる拡散誤差の総和であるライン蓄積誤差を算出する。
【０１５５】
第３ライン蓄積誤差算出部６９３は、乗算器６９３ａ、加算器６９３ｂ、除算器６９３ｃ、演算結果格納部６９３ｄ、およびライン誤差格納部６９３ｅを含んで構成される。第３ライン蓄積誤差算出部６９３は、量子化誤差が配分される第３ラインの画素毎に、図１０に示した拡散係数マトリクスの第３ラインの拡散係数によって求められる拡散誤差の総和であるライン蓄積誤差を算出する。
【０１５６】
ライン誤差格納部６９３ｅは、ライン誤差格納部６９２ｅと同様にＦＩＦＯ型のメモリであるが、各画素に配分されたライン蓄積誤差を記憶する期間が、ライン誤差格納部６９２ｅと異なる。ライン誤差格納部６９３ｅは、１つの画素について、ライン蓄積誤差が格納されてから、その画素が量子化されるまでの期間、その画素のライン蓄積誤差を記憶しておかなければならない。
【０１５７】
すなわち、１つの画素について、注目画素が２つ前のラインにあるときから第２ラインの拡散係数によるライン蓄積誤差が格納されるので、その画素が量子化されるまでの期間、つまり２つのライン分の画素が量子化される期間、その画素のライン拡散誤差を記憶する必要がある。換言すれば、ライン誤差格納部６９３ｅは、２ライン分の画素のライン蓄積誤差を記憶する記憶容量が必要であり、ライン誤差格納部６９２ｅの２倍の記憶容量が必要である。第３ライン蓄積誤差算出部６９３のその他の部位は、第２ライン蓄積誤差算出部６９２の対応する部位と同じ構成であり、説明は省略する。
【０１５８】
加算器６９５は、次に量子化する画素について、第２ライン蓄積誤差算出部６９２から出力されたライン蓄積誤差と、第３ライン蓄積誤差算出部６９３から出力されたライン蓄積誤差とを加算し、加算結果を加算器６９４に入力する。加算器６９４は、次に量子化する画素について、第１ライン蓄積誤差算出部６９１から出力されたライン蓄積誤差と、加算器６９５による加算結果とを加算し、加算結果を蓄積誤差として加算器６１に入力する。
【０１５９】
量子化閾値格納部６３、拡散係数格納部６６、演算結果格納部６９１ｄ〜演算結果格納部６９３ｄ、ライン誤差格納部６９２ｅ、およびライン誤差格納部６９３ｅなどの記憶部は、たとえば画像処理装置１０に含まれるＣＰＵに含まれる記憶部である。この記憶部は、ＣＰＵが処理を実行する際に用いるデータおよびこのＣＰＵで実行されるプログラムを記憶するものであり、半導体メモリなど記憶装置によって実現される。
【０１６０】
乗算手段は、たとえば乗算器６９１ａ〜乗算器６９３ａ、第２の加算手段は、たとえば加算器６９１ｂ〜加算器６９３ｂ、除算手段は、たとえば除算器６９１ｃ〜除算器６９３ｃ、ライン蓄積誤差算出手段は、たとえば第１ライン蓄積誤差算出部６９１〜第３ライン蓄積誤差算出部６９３、第３の加算手段は、たとえば加算器６９４および加算器６９５である。
【０１６１】
このように、１つの画素の量子化誤差を拡散する画素の誤差拡散ライン数が増えたとき、ライン蓄積誤差を求めるライン蓄積誤差算出部を、その誤差拡散ライン数にあわせて増やすことによって、並列に拡散誤差を求めることができるので、処理を高速化することができる。
【０１６２】
図９に示した階調再現処理部１９によって処理される画像処理方法は、図８に示したフローチャートと同じ画像処理方法であり、説明は省略する。
【０１６３】
図１１は、図１に示した階調再現処理部１９の第５の例を示すブロック図である。階調再現処理部１９は、加算器６１、量子化処理部６２、量子化閾値格納部６３、量子化誤差算出部６４、拡散係数格納部６６、および蓄積誤差算出部６９を含んで構成される。この第５の例は、図９に示した第４の例のライン誤差格納部６９３ｅの記憶容量を減らすために、第４の例の蓄積誤差算出部６９を改良したものである。第４の例に示した部位と同じ機能を有する部位の説明は省略する。
【０１６４】
第２ライン蓄積誤差算出部６９２は、除算器６９２ｃの除算結果と、第３ライン蓄積誤差算出部６９３が算出したライン蓄積誤差とを加算する加算器６９２ｆを含む。加算器６９２ｆは、１つの画素について、加算器６８２ｂが第２ラインの拡散係数の各分子との乗算結果を全て加算し、除算器６９２ｃがその加算結果を除算したとき、その除算結果と、ライン誤差格納部６９３ｆに格納されているライン蓄積誤差のうちで、除算結果の画素に対応するライン蓄積誤差とを加算する。加算器６９２ｆの加算結果は、ライン蓄積格納部６９２ｅに格納される。
【０１６５】
第３ライン蓄積誤差算出部６９３は、図９に示した第４の例のライン誤差格納部６９３ｅの代わりに、ライン誤差格納部６９３ｆを含む。ライン誤差格納部６９３ｆは、ライン誤差格納部６９３ｅと同様にＦＩＦＯ型のメモリであり、量子化誤差が配分される第３ラインの画素毎に、図１０に示した拡散係数マトリクスの第３ラインの拡散係数によって求められる拡散誤差の総和であるライン蓄積誤差を格納する。
【０１６６】
ライン誤差格納部６９３ｆは、格納するライン蓄積誤差の数と、画素毎のライン蓄積誤差を記憶する期間とが、ライン誤差格納部６９３ｅと異なる。ライン誤差格納部６９３ｅは、１０個のライン蓄積誤差を格納し、１つの画素について、ライン蓄積誤差が格納されてからその画素が量子化されるまでの期間、つまり、２ライン分の画素が量子化される期間記憶する。
【０１６７】
しかし、ライン誤差格納部６９３ｆは、５つのライン蓄積誤差を格納し、１つの画素について、ライン蓄積誤差が格納されてから、第２ライン蓄積誤差算出部６９２の加算器６９２ｆが、ライン誤差格納部６９３ｆから出力されるライン蓄積誤差のうち、その画素に対するライン蓄積誤差を加算するまでの期間、つまり、１ライン分の画素が量子化される期間記憶する。
【０１６８】
加算器６９４は、次に量子化する画素について、第１ライン蓄積誤差算出部６９１から出力されたライン蓄積誤差と、第２ライン蓄積誤差算出部６９２から出力されたライン蓄積誤差とを加算し、加算結果を蓄積誤差として加算器６１に入力する。
【０１６９】
第１のライン誤差格納手段は、たとえばライン誤差格納部６９３ｆ、第２のライン誤差格納手段は、たとえばライン誤差格納部６９２ｅ、第４の加算手段は、たとえば加算器６９２ｆである。
【０１７０】
このように、加算器６９２ｆは、除算器６９２ｃとライン誤差格納部６９３ｆからのライン蓄積誤差を加算するので、桁上がりが発生する可能性があるので、ライン誤差格納部６９２ｅは、図９に示したライン誤差格納部６９２ｅが記憶する加算結果より、１ビット多い加算結果を記憶する必要がある。しかし、ライン誤差格納部６９３ｆは、第３ラインの拡散係数に基づいて量子化誤差が配分された１つの画素について、１ライン分の画素が量子化される期間、ライン蓄積誤差を記憶すればよいので、１ライン分の画素の数のライン蓄積誤差を記憶する容量があればよく、ライン誤差格納部６９３ｅの記憶容量のほぼ半分の記憶容量でよい。
【０１７１】
すなわち、図１１に示した階調再現処理部１９は、図９に示した階調再現処理部１９に比べて、つまり除算結果と次の誤差拡散ラインのライン蓄積誤差とを加算しないときに比べて、量子化誤差を配分する誤差拡散ライン数が多いほど、ライン誤差格納部のメモリ容量をより少なくすることができる。
【０１７２】
図１２は、図９および図１１に示したライン誤差格納部の記憶容量を説明するための図である。図１２（ａ）は、入力画像データの画素の配列の一例を説明するための図である。この入力画像データは、５×５画素、つまり各ラインが５つの画素からなる５つのラインの画素から構成される。たとえば最初のラインは、画素Ｘ１〜画素Ｘ５の５つの画素から構成される。
【０１７３】
図１２（ｂ）は、拡散係数マトリクスの配列の他の例を示す図である。拡散係数マトリクスは、注目画素、つまり量子化を行なう画素の位置に、「＊」印を付し、注目画素を量子化したときに発生する量子化誤差を拡散つまり配分する画素の位置を、注目画素を起点に相対的な位置に表し、量子化誤差が拡散される各位置に、量子化誤差を拡散する割合を示す拡散係数を記載したものである。
【０１７４】
拡散係数マトリクスの最上段のラインは、注目画素の量子化誤差が配分される画素の第１ラインと対応し、注目画素の位置に「＊」が付され、注目画素の右隣の位置に拡散係数ａ１１が示されている。拡散係数マトリクスの第２番目のラインは、注目画素の量子化誤差が配分される画素の第２ラインと対応し、３つの拡散係数ａ２１、拡散係数ａ２２、および拡散係数ａ２３を含み、それぞれ、注目画素の１つ下の左隣の位置、注目画素の１つ下の位置、および注目画素の１つ下の右隣の位置に示されている。拡散係数マトリクスの第３番目のラインは、注目画素の量子化誤差が配分される画素の第３ラインと対応し、３つの拡散係数ａ３１、拡散係数ａ３２、および拡散係数ａ３３を含み、それぞれ、注目画素の２つ下の左隣の位置、注目画素の２つ下の位置、および注目画素の２つ下の右隣の位置に示されている。
【０１７５】
図１２（ｃ）は、第２ラインの拡散係数によるライン蓄積誤差の一例を示す図である。ライン蓄積誤差ＡＸ６〜ライン蓄積誤差ＡＸ１０は、画素Ｘ１〜画素Ｘ５を量子化したとき、第２ラインの拡散係数によってそれぞれ画素Ｘ６〜画素Ｘ１０に拡散された拡散誤差の合計を表したものであり、ライン誤差格納部６９２ｅに格納される。
【０１７６】
たとえばライン蓄積誤差ＡＸ８は、画素Ｘ２〜画素Ｘ４の３つの画素の量子化誤差が、拡散係数マトリクスの第２ラインの拡散係数に基づいて拡散された拡散誤差の合計である。画素Ｘ２〜画素Ｘ４を量子化したときの各画素の量子化誤差を、それぞれＥ２〜Ｅ４とすると、画素Ｘ２からの拡散誤差は、Ｅ２×ａ２３、画素Ｘ３からの拡散誤差は、Ｅ３×ａ２２、および画素Ｘ４からの拡散誤差は、Ｅ４×ａ２１であり、ライン蓄積誤差ＡＸ８は、これらの値の合計である。
【０１７７】
ライン蓄積誤差ＡＸ６は、画素Ｘ１の量子化誤差が拡散されてから、画素Ｘ６が量子化されるまで、つまり、１ライン分の画素が量子化される期間、ライン誤差格納部６９２ｅに記憶される。画素Ｘ６の量子化が行なわれるとき、ライン蓄積誤差ＡＸ６は、ライン誤差格納部６９２ｅから読み出されるので、ライン蓄積誤差ＡＸ６を記憶していた記憶領域に、新たに求められるライン蓄積誤差ＡＸ１１を格納することができる。
【０１７８】
図１２（ｄ）は、第２ラインの拡散係数によるライン蓄積誤差の他の例を示す図である。ライン蓄積誤差ＡＸ１１〜ライン蓄積誤差ＡＸ１５は、画素Ｘ６〜画素Ｘ１０を量子化したとき、第２ラインの拡散係数によってそれぞれ画素Ｘ１１〜画素Ｘ１５に拡散された拡散誤差の合計を表したものである。
【０１７９】
図１２（ｅ）は、第３ラインの拡散係数によるライン蓄積誤差の一例を示す図である。ライン蓄積誤差ＢＸ１１〜ライン蓄積誤差ＢＸ２０は、画素Ｘ１〜画素Ｘ１０を量子化したときに、拡散された拡散誤差の合計を表したものである。すなわち、ライン蓄積誤差ＢＸ１１〜ライン蓄積誤差ＢＸ１５は、画素Ｘ１〜画素Ｘ５が第１ラインであったとき、第３ラインの拡散係数によってそれぞれ画素Ｘ１１〜画素Ｘ１５に拡散された拡散誤差の合計であり、およびライン蓄積誤差ＢＸ１６〜ライン蓄積誤差ＢＸ２０は、画素Ｘ６〜画素Ｘ１０が第１ラインであったときに、第３ラインの拡散係数によってそれぞれ画素１６〜画素Ｘ２０に拡散された拡散誤差の合計を表したものである。
【０１８０】
図９に示した階調再現処理部１９の場合、画素Ｘ１〜画素Ｘ５の量子化が終了したとき、ライン誤差格納部６９３ｅは、ライン蓄積誤差ＢＸ１１〜ライン蓄積誤差ＢＸ１５を記憶している。次に第１ラインが画素Ｘ６〜画素Ｘ１０に移り、画素Ｘ６〜画素Ｘ１０の量子化が行なわれても、ライン蓄積誤差ＢＸ１１〜ライン蓄積誤差ＢＸ１５は格納されたままである。
【０１８１】
たとえばライン蓄積誤差ＢＸ１１は、画素Ｘ１の量子化誤差が拡散されてから、画素Ｘ１１の量子化が開始されるまでの期間、つまり、２ライン分の画素が量子化される期間記憶される。したがって、ライン誤差格納部６９３ｅは、画素Ｘ６〜画素Ｘ１０の量子化誤差によるライン蓄積誤差ＢＸ１６〜ライン蓄積誤差ＢＸ２０を、ライン蓄積誤差ＢＸ１１〜ライン蓄積誤差ＢＸ１５とは別の記憶領域に記憶する必要がある。図１２（ｅ）に示した状態は、画素Ｘ１〜画素Ｘ１０の量子化が終了したとき、ライン誤差格納部６９３ｅに記憶されているライン蓄積誤差の状態を示している。
【０１８２】
図１１に示した階調再現処理部１９の場合、画素Ｘ１〜画素Ｘ５の量子化が終了したとき、ライン誤差格納部６９３ｆは、ライン蓄積誤差ＢＸ１１〜ライン蓄積誤差ＢＸ１５を記憶している。
【０１８３】
第１ラインが画素Ｘ６〜画素Ｘ１０に移り、画素Ｘ６の量子化誤差が拡散された後、画素Ｘ７の量子化誤差が拡散されたとき、ライン誤差格納部６９３ｆから読み出されたライン蓄積誤差ＢＸ１１は、加算器６９２ｆによって、第２ラインとなった画素Ｘ１１に対する除算器６９２ｃの除算結果と加算され、その加算結果は、ライン蓄積誤差ＡＸ１１として、ライン誤差格納部６９２ｅに格納される。ライン蓄積誤差ＢＸ１１が格納されていたライン誤差格納部６９３ｆの記憶領域が空くので、その記憶領域に画素Ｘ７の量子化誤差が拡散されたライン蓄積誤差ＢＸ１６を格納することができる。
【０１８４】
たとえば画素値、拡散係数の分母、および拡散係数の分子を８ビットとすると、各除算器の出力は１０ビットになる。第２ライン蓄積誤差算出部６９２の加算器６９２ｆは、除算器６９２ｃの除算結果と、第３ライン蓄積誤差算出部３９３の出力とを加算するので、ライン蓄積誤差３９２ｅは、除算結果より１桁多い１１ビットのライン蓄積誤差を記憶する必要がある。しかし、ライン誤差格納部３９３ｆは、ライン誤差格納部３９３ｅの半分の記憶容量でよく、記憶容量を大幅に低減することができる。
【０１８５】
図１３は、図１１に示した階調再現処理部１９によって処理される画像処理方法を説明するためのフローチャートである。この画像処理方法は、たとえばカラー画像処理装置１０に含まれるＣＰＵが、記憶部に記憶されたプログラムを実行することによって実現される。出力画像データを生成する階調再現処理において、誤差拡散処理を行うときに、本処理が開始される。
【０１８６】
ステップＵ１では、入力画像データの画素の濃度を示す画素値に対して、蓄積誤差を加算する。ステップＵ２では、蓄積誤差が加算された画素値を量子化して、出力画像データの画素の量子化値を算出する。ステップＵ３では、蓄積誤差が加算された画素値と、その画素値を量子化した量子化値との差を、量子化誤差として算出する。
【０１８７】
ステップＵ４では、１つのラインの画素の量子化誤差が配分されるライン毎つまり誤差拡散ライン毎に、量子化誤差と拡散係数の各分子の値とを乗算し、各乗算結果を、記憶部である演算結果格納部に記憶されている加算結果のうちで、それぞれ同じ画素に対する加算結果に加算する。各加算結果は、それぞれ新たな加算結果として演算結果格納部に格納する。加算結果が格納されていない画素のときは、乗算結果に「０」を加算して、演算結果格納部に格納する。あるいは、演算結果格納部の記憶容量に余裕があるときは、画素位置毎に「０」を初期値として記憶しておいてもよいし、乗算結果に対して加算演算を行なわずに格納してもよい。
【０１８８】
ステップＵ５では、ライン毎つまり誤差拡散ライン毎に、乗算結果が全て加算された画素の加算結果を、拡散係数の分母の値によって除算し、除算結果をライン蓄積誤差とする。ステップＵ６では、注目するラインの画素毎に、１つの画素のライン蓄積誤差と、その注目するラインの１つ下のライン、つまり次のラインのライン蓄積誤差のうちで、その画素に対するライン蓄積誤差とを加算して、注目するラインのその画素の新たなライン蓄積誤差とする。
【０１８９】
ステップＵ７では、次に量子化する画素について、全てのライン蓄積誤差を合計して、蓄積誤差を算出する。ステップＵ８では、入力画像データの全ての画素について、誤差拡散処理を行なったか否かを判定する。全ての画素について、誤差拡散処理を終了したときは終了し、全ての画素について、誤差拡散処理を終了していないときは、ステップＵ１に戻り、未処理の画素についての誤差拡散処理を行なう。
【０１９０】
上述したいずれの実施の形態においても、除算器、具体的には、除算器６８１ｃ、除算器６８２ｃ、除算器６９１ｃ、除算器６９２ｃ、および除算器６９３ｃによる除算は、量子化誤差を２進数で表し、拡散係数の分母を２のｎ乗で表して除算してもよい。ｎは、自然数である。
【０１９１】
拡散係数の分母を２のｎ乗で表すと、拡散係数の分母による除算は、除算される２進数の下位ｎビットを除くことによって、除算される２進数の残ったビットのみで構成される値を商とすることができる。この演算は、２進数のシフト演算を行なうことによって演算することができる。この場合、余りは切り捨てることになる。四捨五入するときは、切り捨てるビットの最上位ビットが「１」のとき、商の最下位ビットに「１」を加算することによって実現することができる。
【０１９２】
この誤差拡散処理は、２値誤差拡散だけでなく、４値および１６値などの多値誤差拡散で行ってもよいし、拡散係数の分子成分の組を複数用意しておいて、乱数あるいは領域分離結果によって、拡散係数の分子成分を切り替えてもよい。
【０１９３】
このように、次の誤差拡散ラインのライン蓄積誤差と、そのライン蓄積誤差の画素について前記除算工程で除算された除算結果とが加算されるので、第３番目の誤差拡散ラインのライン蓄積誤差を格納するメモリ容量は、１ライン分の画素のライン蓄積誤差を格納すればよい。したがって、除算結果と次の誤差拡散ラインのライン蓄積誤差とを加算しないときに比べて、量子化誤差を配分する誤差拡散ライン数が多いほど、ライン誤差格納部のメモリ容量をより少なくすることができる。
【０１９４】
図１４は、図１に示した階調再現処理部１９の第６の例を示すブロック図である。階調再現処理部１９は、加算器６１ａ、加算器６１ｂ、量子化処理部６２、量子化閾値格納部６３、量子化誤差算出部６４、拡散係数格納部６６、および蓄積誤差算出部６８を含んで構成される。図１４に示した階調再現処理部１９は、図６に示した階調再現処理部１９の加算器３９３を削除し、加算器６１を２つの加算器６１ａおよび加算器６１ｂに置き換えたものである。
【０１９５】
加算器６１ａは、次に量子化する画素について、入力画像データの画素の濃度を示す画素値と、第２ライン蓄積誤差算出部６８２の出力であるライン蓄積誤差とを加算する。加算器６１ｂは、次に量子化する画素について、加算器６１ａの加算結果と、第１ライン蓄積誤差算出部６８１の出力であるライン蓄積誤差とを加算する。他の部位は、図６に示した階調再現処理部１９の対応する部位と同じ機能であり、説明は省略する。
【０１９６】
第２ライン蓄積誤差算出部６８２は、次に量子化する画素の１つ前の行に含まれる画素の量子化誤差が配分されたライン蓄積誤差である。したがって、そのライン蓄積誤差は、そのライン蓄積誤差を加算する画素の量子化が開始される前に、すでにライン誤差格納部６８２ｅに格納されている。すなわち、第２ライン蓄積誤差算出部６８２は、次に量子化する画素に加算するライン蓄積誤差を、ライン誤差格納部６８２ｅから読み出すだけであり、すぐに出力することができる。
【０１９７】
第１ライン蓄積誤差算出部６８１は、量子化が行われた画素の量子化誤差に基づいて、次に量子化する画素のライン蓄積誤差を演算するので、ライン蓄積誤差を出力するまで、演算時間分の時間遅れが生じる。第１の加算手段は、たとえば加算器６１ａおよび加算器６１ｂである。
【０１９８】
このように、第１ライン蓄積誤差算出部６８１がライン蓄積誤差を演算している間に、加算器６１ａによって、第２ライン蓄積誤差算出部６８２のライン蓄積誤差を、入力画像データの画素値に加算するので、図６に示した階調再現処理部１９に比べて、加算器６８３による加算時間分早く、次の画素の量子化処理を開始することができる。
【０１９９】
図９および図１１に示した階調再現処理部１９についても、加算器６１を２つの加算器６１ａおよび加算器６１ｂに置き換えてもよい。図９に示した階調再現処理部１９では、加算器６９５の加算結果を加算器６１ａに入力する。
【０２００】
図８および図１３に示した画像処理方法は、図５に示したコンピュータ５０によって実行されるソフトウエアであるプログラムとして実現してもよい。さらに、このプログラムは、プリンタ・ドライバ５１に含まれる階調再現処理部５１３として、コンピュータ５０に組み込んで、実行させることができる。さらに、このプログラムは、上述した記録媒体に記録して提供することができる。
【図面の簡単な説明】
【０２０１】
【図１】本発明の実施の一形態であるカラー画像処理装置１０とそれを含むカラー画像形成装置４０の概略の構成を示すブロック図である。
【図２】本発明の実施の一形態である画像処理装置１０に含まれる階調再現処理部１９の第１の例を示すブロック図である。
【図３】実施の他の形態である画像処理装置１０に含まれる階調再現処理部１９の第２の例を示すブロック図である。
【図４】本発明の実施のさらに他の形態である画像処理方法を説明するためのフローチャートである。
【図５】本発明の実施のさらに他の形態であるプリンタ・ドライバ５１とそれを含むコンピュータ５０の構成を示す図である。
【図６】図１に示した階調再現処理部１９の第３の例を示すブロック図である。
【図７】図６に示した拡散係数格納部６６に格納された拡散係数を説明するための図である。
【図８】図６に示した階調再現処理部１９によって処理される画像処理方法を説明するためのフローチャートである。
【図９】図１に示した階調再現処理部１９の第４の例を示すブロック図である。
【図１０】図９に示した拡散係数格納部６６に格納された拡散係数を説明するための図である。
【図１１】図１に示した階調再現処理部１９の第５の例を示すブロック図である。
【図１２】図９および図１１に示したライン誤差格納部の記憶容量を説明するための図である。
【図１３】図１１に示した階調再現処理部１９によって処理される画像処理方法を説明するためのフローチャートである。
【図１４】図１に示した階調再現処理部１９の第６の例を示すブロック図である。
【図１５】従来技術の画像形成装置に含まれる画像処理装置で用いられる誤差拡散処理回路７０の一例のブロック図である。
【図１６】従来技術の画像形成装置に含まれる画像処理装置で用いられる誤差拡散処理回路７０の他の例のブロック図である。
【図１７】誤差拡散処理で用いられる拡散係数を説明するための図である。
【符号の説明】
【０２０２】
１０  カラー画像処理装置
１１  Ａ／Ｄ変換部
１２  シェーディング補正部
１３  入力階調補正部
１４  領域分離処理部
１５，５１１  色補正部
１６，５１２  黒生成下色除去部
１７  空間フィルタ処理部
１８  出力階調補正部
１９，５１３  階調再現処理部
２０  カラー画像入力装置
３０  カラー画像出力装置
４０  カラー画像形成装置
５０  コンピュータ
５１  プリンタ・ドライバ
５１４  プリンタ言語翻訳部
５２  通信ポートドライバ
５３  通信ポート
５４  プリンタ
６１，６１ａ，６１ｂ，６７ｂ，７１，７８  加算器
６２，７２  量子化処理部
６３，７３  量子化閾値格納部
６４，７４  量子化誤差算出部
６５  誤差格納部
６６，７６  拡散係数格納部
６６ａ，７６ａ  拡散係数分子格納部
６６ｂ，７６ｂ  拡散係数分母格納部
６７〜６９  蓄積誤差算出部
６７ａ，７５ａ  乗算器
６７ｃ，７５ｂ  除算器
６７ｄ  演算結果格納部
７０  誤差拡散処理回路
７５  拡散誤差算出部
７７  蓄積誤差格納部
６８１，６９１  第１ライン蓄積誤差算出部
６８１ａ，６８２ａ，６９１ａ，６９２ａ，６９３ａ  乗算器
６８１ｂ，６８２ｂ，６９１ｂ，６９２ｂ，６９２ｆ，６９３ｂ  加算器
６８１ｃ，６８２ｃ，６９１ｃ，６９２ｃ，６９３ｃ  除算器
６８１ｄ，６８２ｄ，６９１ｄ，６９２ｄ，６９３ｄ  演算結果格納部
６８２，６９２  第２ライン蓄積誤差算出部
６８２ｅ，６９２ｅ，６９３ｅ，６９３ｆ  ライン誤差格納器
６８３，６９４，６９５  加算器
６９３  第３ライン蓄積誤差算出部
【図１】
2006005901.tif 000008
【図２】
2006005901.tif 000009
【図３】
2006005901.tif 000010
【図４】
2006005901.tif 000011
【図５】
2006005901.tif 000012
【図６】
2006005901.tif 000013
【図７】
2006005901.tif 000014
【図８】
2006005901.tif 000015
【図９】
2006005901.tif 000016
【図１０】
2006005901.tif 000017
【図１１】
2006005901.tif 000018
【図１２】
2006005901.tif 000019
【図１３】
2006005901.tif 000020
【図１４】
2006005901.tif 000021
【図１５】
2006005901.tif 000022
【図１６】
2006005901.tif 000023
【図１７】
2006005901.tif 000024