(57)【要約】【課題】「ドット発生の遅延」や「尾ひき」の問題を解決して、入力画像に対して歪みのない出力画像を得ることのできる画像処理装置や画像処理方法、及びプログラムを提供すること。【解決手段】入力画像データに対して、画素ごとに２種類以上の階調値を有する出力画像データに変換する変換手段と、前記変換手段により発生した誤差値を拡散マトリックスにより未変換画素に拡散させる誤差拡散手段と、第１の未変換画素に対応した第１の所定値のうち、第２の所定値を前記注目画素近傍の第２の未変換画素に移動させる補正手段と、を備えた画像処理装置であることを特徴としている。【選択図】図５
2006020019.tif 000002
【特許請求の範囲】
【請求項１】
入力画像データに対して、画素ごとに２種類以上の階調値を有する出力画像データに変換する変換手段と、
前記変換手段により発生した誤差値を拡散マトリックスにより未変換画素に拡散させる誤差拡散手段と、
第１の未変換画素に対応した第１の所定値のうち、第２の所定値を前記注目画素近傍の第２の未変換画素に移動させる補正手段と、
を備えたことを特徴とする画像処理装置。
【請求項２】
請求項１記載の画像処理装置において、
前記第１の所定値は、
前記第１の未変換画素の入力階調値、
又は前記誤差拡散手段によって前記第１の未変換画素に拡散された拡散誤差値、
若しくは前記第１の未変換画素の入力階調値と前記誤差拡散手段によって前記第１の未変換画素に拡散された拡散誤差値との合計値、
のいずれかであることを特徴とする画像処理装置。
【請求項３】
注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値が記憶される記憶手段と、
前記記憶手段から前記加算値を読み出して閾値と比較することで２値以上の階調数を有する出力階調値に量子化する量子化手段と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算手段と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散手段と、
前記記憶手段に記憶された第１の未処理画素の少なくとも前記入力階調値のうち所定値を、前記注目画素近傍の第２の未処理画素に移動させ移動後の値を前記記憶手段に記憶させる補正手段と、
を備え、前記第２の未処理画素が前記注目画素となったとき前記量子化手段は前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化することを特徴とする画像処理装置。
【請求項４】
請求項３記載の画像処理装置において、
前記補正手段は、前記拡散誤差値の拡散により生じた重心誤差を補正する方向に前記所定値を移動させる、ことを特徴とする画像処理装置。
【請求項５】
請求項３記載の画像処理装置において、
前記補正手段は、前記第１の未処理画素に対して前記拡散誤差値の拡散により生じた重心誤差の発生する方向とは反対方向に位置する前記第２の未処理画素に前記所定値を移動させる、ことを特徴とする画像処理装置。
【請求項６】
請求項４又は５記載の画像処理装置において、
前記重心誤差は、前記注目画素の重心と前記拡散誤差値を周囲の未処理画素に拡散させたときの重心との誤差である、ことを特徴とする画像処理装置。
【請求項７】
請求項４又は５記載の画像処理装置において、
前記重心誤差は、前記注目画素の重心と前記拡散マトリックスの重心との誤差である、ことを特徴とする画像処理装置。
【請求項８】
請求項３記載の画像処理装置において、
前記補正手段は、前記第１の未処理画素に周囲の画素からの拡散誤差値が拡散されたときは当該拡散誤差値に前記第１の未処理画素の入力階調値を加算した値のうち所定値を前記第２の未処理画素に移動させる、ことを特徴とする画像処理装置。
【請求項９】
請求項３又は８記載の画像処理装置において、
前記所定値は、前記注目画素の重心と前記拡散マトリックスの重心との誤差に前記拡散誤差値の総量を積算した値である、ことを特徴とする画像処理装置。
【請求項１０】
請求項３記載の画像処理装置において、
前記第２の未処理画素は、前記注目画素に最も近い未処理画素である、ことを特徴とする画像処理装置。
【請求項１１】
注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値が記憶される記憶手段と、
前記記憶手段から前記加算値を読み出して閾値と比較することで２値以上の階調数を有する出力階調値に量子化する量子化手段と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算手段と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散手段と、
前記記憶手段に記憶された未処理画素の少なくとも前記入力階調値のうち所定値を、前記拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を前記記憶手段に記憶させる補正手段と、
を備え、前記所定値が移動された前記未処理画素が前記注目画素となったとき前記量子化手段は前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とする画像処理装置。
【請求項１２】
画素ごとに所定の階調値を有する入力データが記憶される記憶手段を備え、前記入力データに対し量子化された２値以上の階調数を有する出力階調値を得る画像処理装置における画像処理方法であって、
前記入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を前記記憶手段から読み出して閾値と比較することで前記出力階調値に量子化する量子化工程と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算工程と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散工程と、
前記記憶手段に記憶された第１の未処理画素の少なくとも前記入力階調値のうち所定値を、前記注目画素近傍の第２の未処理画素に移動させ移動後の値を前記記憶手段に記憶させる補正工程と、
を備え、前記第２の未処理画素が前記注目画素となったとき前記量子化工程では前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とする画像処理方法。
【請求項１３】
画素ごとに所定の階調値を有する入力データが記憶される記憶手段を備え、前記入力データに対し量子化された２値以上の階調数を有する出力階調値を得る画像処理装置における画像処理方法であって、
前記入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を前記記憶手段から読み出して閾値と比較することで前記出力階調値に量子化する量子化工程と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算工程と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散工程と、
前記記憶手段に記憶された未処理画素の少なくとも前記入力階調値のうち所定値を、前記拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を前記記憶手段に記憶させる補正工程と、
を備え、前記所定値が移動された前記未処理画素が前記注目画素となったとき前記量子化工程では前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とする画像処理方法。
【請求項１４】
画素ごとに所定の階調値を有する入力データが入力されて量子化された２値以上の階調数を有する出力階調値を得る画像処理をコンピュータに実行させるプログラムであって、
前記入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで前記出力階調値に量子化する量子化処理と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算処理と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散処理と、
前記記憶手段に記憶された第１の未処理画素の少なくとも前記入力階調値のうち所定値を、前記注目画素近傍の第２の未処理画素に移動させ移動後の値を前記記憶手段に記憶させる補正処理と、
を備え、前記第２の未処理画素が前記注目画素となったとき前記量子化処理は前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とするプログラム。
【請求項１５】
画素ごとに所定の階調値を有する入力データが入力されて量子化された２値以上の階調数を有する出力階調値を得る画像処理をコンピュータに実行させるプログラムであって、
前記入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで前記出力階調値に量子化する量子化処理と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算処理と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散処理と、
前記記憶手段に記憶された未処理画素の少なくとも前記入力階調値のうち所定値を、前記拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を前記記憶手段に記憶させる補正処理と、
を備え、前記所定値が移動された前記未処理画素が前記注目画素となったとき前記量子化処理は前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多階調画像データを低階調画像データに変換する誤差拡散法を用いた画像処理装置、画像処理方法、及びプログラムに関する。詳しくは、誤差拡散処理において入力階調値を含む値を移動させることで重心誤差を補正するようにした画像処理装置等に関する。
【背景技術】
【０００２】
従来から、プリンタなどの画像処理装置は、画素ごとに多値の階調値を有する階調データに対して、ドットの有無を表す２値の値に変換して印刷用紙に印刷等を行うようになされている。このような低階調の画像データに変換する場合に、原画像の画品質をできるだけ維持するための技術として誤差拡散法による擬似中間調表現が利用されている。誤差拡散法は、注目画素で発生した量子化誤差を当該画素の近傍の未量子化画素に拡散させて処理を行う方法である（例えば、以下の非特許文献１）。
【０００３】
しかし、ハイライト領域（ドット密度の低い領域）の立ち上がり部分で誤差拡散法による処理を行うと、ドットの発生が大幅に遅れる、いわゆる「ドット発生の遅延」と呼ばれる現象が発生する。また、入力階調値が大きく変化するエッジの領域では尾を引いたようにドットが抜けてしまう、いわゆる「尾ひき」と呼ばれる現象も発生する。
【０００４】
そのため、従来では、入力階調値に応じて誤差拡散法で使用される閾値を変更することで早くドットを発生させ「ドット発生の遅延」と「尾ひき」の問題を解決したものがある（以下の特許文献１）。しかし、かかる技術では閾値を変化させているため入力画像のエッジ部分の前後等でドットが発生し、結果的に画像のエッジの部分がシャープに再現されない問題があった。
【０００５】
そこで、隣接画素との濃度差を演算してエッジを検出しその値によって閾値を固定にしたり、変化させることで、エッジの再現性を良好にするとともに「ドット発生の遅延」と「尾ひき」の問題を解決したものがある（例えば、以下の特許文献２）。
【非特許文献１】Ｒｏｂｅｒｔ  Ｕｌｉｃｈｎｅｙ著、“Ｄｉｇｉｔａｌ  Ｈａｌｆｔｏｎｉｎｇ”、Ｔｈｅ  ＭＩＴ  Ｐｒｅｓｓ（１９８７年発行）、ｐ．２３９−２５２
【特許文献１】特開平７−１１１５９１号公報
【特許文献２】特開平８−２４２３７４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した特開平８−２４２３７４号においては、濃度差を演算してその値によって閾値を固定にしたりする等、条件分岐が多くそれだけ計算量が多くなり、誤差拡散処理が遅くなってしまう問題点があった。
【０００７】
また、一般的に「ドット発生の遅延」や「尾ひき」が発生した出力画像は入力階調値に忠実なドットが発生しているとは言えず、入力画像に歪みが生じるという問題がある。
【０００８】
そこで、本発明の目的は、「ドット発生の遅延」や「尾ひき」の問題を解決して、入力画像に対して歪みのない出力画像を得るとともに、処理速度の速い画像処理装置や画像処理方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するために本発明は、入力画像データに対して、画素ごとに２種類以上の階調値を有する出力画像データに変換する変換手段と、変換手段により発生した誤差値を拡散マトリックスにより未変換画素に拡散させる誤差拡散手段と、第１の未変換画素に対応した第１の所定値のうち、第２の所定値を前記注目画素近傍の第２の未変換画素に移動させる補正手段と、を備えたことを特徴としている。これにより、例えば、注目画素近傍に第２の所定値が集まるので「ドット発生の遅延」等の問題を解決して入力画像に忠実な出力画像を得ることができる。
【００１０】
また、本発明は上記画像処理装置において、上記第１の所定値は、第１の未変換画素の入力階調値、又は誤差拡散手段によって第１の未変換画素に拡散された拡散誤差値、若しくは第１の未変換画素の入力階調値と誤差拡散手段によって第１の未変換画素に拡散された拡散誤差値との合計値、のいずれかであることを特徴としている。これにより、注目画素近傍の未処理画素に注目画素の入力階調値又は拡散誤差値、若しくはこれら２つの合計値のいずれかのうち所定値が集まるため「ドット発生の遅延」等の問題を解決して入力画像に忠実な出力画像を得ることができる。
【００１１】
また、上記目的を達成するために本発明は、注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値が記憶される記憶手段と、記憶手段から加算値を読み出して閾値と比較することで２値以上の階調数を有する出力階調値に量子化する量子化手段と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算手段と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散手段と、記憶手段に記憶された第１の未処理画素の少なくとも入力階調値のうち所定値を、注目画素近傍の第２の未処理画素に移動させ移動後の値を記憶手段に記憶させる補正手段と、を備え、第２の未処理画素が注目画素となったとき量子化手段は記憶手段から読み出した移動後の値と閾値とを比較することで量子化することを特徴としている。これにより、例えば、注目画素近傍の画素に他の画素からの階調値が集まるためドットの生成が早くなり「ドット生成の遅延」等の問題を解決することができる。
【００１２】
また、本発明は上記画像処理装置において、上記補正手段は拡散誤差値の拡散により生じた重心誤差を補正する方向に所定値を移動させることを特徴としている。これにより、例えば、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれるため周辺のドットを含めた複数のドットによって入力階調値の重心が保存された、入力階調値に忠実な出力画像を得ることができる。
【００１３】
さらに、本発明は上記画像処理装置において、上記補正手段は第１の未処理画素に対して拡散誤差値の拡散により生じた重心誤差の発生する方向とは反対方向に位置する第２の未処理画素に所定値を移動させることを特徴としている。これにより、例えば、重心誤差の発生する方向とは反対方向に階調値が移動されるため入力階調値に忠実な出力画像を得ることができる。
【００１４】
さらに、本発明は上記画像処理装置において、上記重心誤差は注目画素の重心と拡散誤差値を周囲の未処理画素に拡散させたときの重心との誤差であることを特徴としている。これにより、例えば、重心誤差の発生する方向は注目画素の重心から拡散誤差値を拡散させたときの重心への方向となり、これを補正する方向に階調値のうち所定値を移動させることができる。
【００１５】
さらに、本発明は上記画像処理装置において、上記重心誤差は注目画素の重心と拡散マトリックスの重心との誤差であることを特徴としている。これにより、例えば、重心誤差の発生する方向は注目画素の重心から拡散マトリックスの重心への方向となり、これを補正する方向に階調値のうち所定値を移動させることができる。
【００１６】
さらに、本発明は上記画像処理装置において、上記補正手段は第１の未処理画素に周囲の画素からの拡散誤差値が拡散されたときは当該拡散誤差値に第１の未処理画素の入力階調値を加算した値のうち所定値を第２の未処理画素に移動させることを特徴としている。これにより、例えば、実際に移動させる所定値は拡散誤差値と入力階調値との加算値を含むことになり、当該画素が注目画素となったときは移動後の値ですぐに量子化することができるため、処理速度の向上を図ることができる。
【００１７】
さらに、本発明は上記画像処理装置において、上記所定値は注目画素の重心と拡散マトリックスの重心との誤差に拡散誤差値の総量を積算した値であることを特徴としている。これにより、例えば、実際に移動させる量を簡易に演算することができる。
【００１８】
さらに、本発明は上記画像処理装置において、上記第２の未処理画素は注目画素に最も近い未処理画素であることを特徴としている。これにより、例えば、注目画素に最も近い未処理画素に階調値が移動するためそれだけドットの生成が早まるため「ドット発生の遅延」等の問題を解決することができる。
【００１９】
さらに、上記目的を達成するために本発明は、注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値が記憶される記憶手段と、記憶手段から加算値を読み出して閾値と比較することで２値以上の階調数を有する出力階調値に量子化する量子化手段と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算手段と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散手段と、記憶手段に記憶された未処理画素の少なくとも入力階調値のうち所定値を、拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を記憶手段に記憶させる補正手段と、を備え、所定値が移動された未処理画素が注目画素となったとき量子化手段は記憶手段から読み出した移動後の値と閾値とを比較することで量子化することを特徴としている。これにより、例えば、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれるため周辺のドットを含めた複数のドットによって入力階調値の重心が保存された、入力階調値に忠実な出力画像を得ることができる。また、重心誤差を補正する方向に移動することで注目画素近傍に階調値が集まり「ドット発生の遅延」等の問題を解決することができる。
【００２０】
さらに、上記目的を達成するために本発明は、画素ごとに所定の階調値を有する入力データが記憶される記憶手段を備え、入力データに対し量子化された２値以上の階調数を有する出力階調値を得る画像処理装置における画像処理方法であって、入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで出力階調値に量子化する量子化工程と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算工程と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散工程と、記憶手段に記憶された第１の未処理画素の少なくとも入力階調値のうち所定値を、注目画素近傍の第２の未処理画素に移動させ移動後の値を記憶手段に記憶させる補正工程と、を備え、第２の未処理画素が注目画素となったとき量子化工程では記憶手段から読み出した移動後の値と閾値とを比較することで量子化する、ことを特徴としている。これにより、例えば、注目画素近傍の画素に他の画素からの階調値が集まるためドットの生成が早くなり「ドット生成の遅延」等の問題を解決することができる。
【００２１】
さらに、上記目的を達成するために本発明は、画素ごとに所定の階調値を有する入力データが記憶される記憶手段を備え、入力データに対し量子化された２値以上の階調数を有する出力階調値を得る画像処理装置における画像処理方法であって、入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで出力階調値に量子化する量子化工程と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算工程と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散工程と、記憶手段に記憶された未処理画素の少なくとも入力階調値のうち所定値を、拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を記憶手段に記憶させる補正工程と、を備え、所定値が移動された未処理画素が注目画素となったとき量子化工程では記憶手段から読み出した移動後の値と閾値とを比較することで量子化する、ことを特徴としている。これにより、例えば、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれるため周辺のドットを含めた複数のドットによって入力階調値の重心が保存された、入力階調値に忠実な出力画像を得ることができる。また、重心誤差を補正する方向に移動することで注目画素近傍に階調値が集まり「ドット発生の遅延」等の問題を解決することができる。
【００２２】
さらに、上記目的を達成するために本発明は、画素ごとに所定の階調値を有する入力データが入力されて量子化された２値以上の階調数を有する出力階調値を得る画像処理をコンピュータに実行させるプログラムであって、入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで出力階調値に量子化する量子化処理と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算処理と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散処理と、記憶手段に記憶された第１の未処理画素の少なくとも入力階調値のうち所定値を、注目画素近傍の第２の未処理画素に移動させ移動後の値を記憶手段に記憶させる補正処理と、を備え、第２の未処理画素が注目画素となったとき量子化処理は記憶手段から読み出した移動後の値と閾値とを比較することで量子化する、ことを特徴としている。これにより、例えば、注目画素近傍の画素に他の画素からの階調値が集まるためドットの生成が早くなり「ドット生成の遅延」等の問題を解決することができる。
【００２３】
さらに、上記目的を達成するために本発明は、画素ごとに所定の階調値を有する入力データが入力されて量子化された２値以上の階調数を有する出力階調値を得る画像処理をコンピュータに実行させるプログラムであって、入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで出力階調値に量子化する量子化処理と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算処理と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散処理と、記憶手段に記憶された未処理画素の少なくとも入力階調値のうち所定値を、拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を記憶手段に記憶させる補正処理と、を備え、所定値が移動された未処理画素が注目画素となったとき量子化処理は記憶手段から読み出した移動後の値と閾値とを比較することで量子化する、ことを特徴としている。これにより、例えば、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれるため周辺のドットを含めた複数のドットによって入力階調値の重心が保存された、入力階調値に忠実な出力画像を得ることができる。また、重心誤差を補正する方向に移動することで注目画素近傍に階調値が集まり「ドット発生の遅延」等の問題を解決することができる。
【発明を実施するための最良の形態】
【００２４】
以下、図面を参照して本発明を実施するための最良の形態を説明する。図１は、本発明が適用されるシステム全体の構成例を示す図である。図に示すように本システムはホストコンピュータ１０と画像処理装置２０とから構成される。
【００２５】
ホストコンピュータ１０は、アプリケーション部１１とラスタライズ部１２とから構成される。アプリケーション部１１では、文字データ、図形データ、ビットマップデータ等の印刷対象のデータが生成される。例えば、ワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどが生成される。生成されたこれらのデータは、ラスタライズ部１２へ出力される。
【００２６】
ラスタライズ部１２では、アプリケーション部１１から出力された印刷対象のデータを画素ごと（又はドットごと）に８ビットの階調データに変換する。したがって、各画素０から２５５までの階調値を有することになる。ラスタライズ部１２における階調データの生成は、実際にはホストコンピュータ１０に実装されたドライバによって処理が行われる。ラスタライズ部１２から出力される階調データは、画像処理装置２０に出力される。なお、本実施例においてこの階調データはＲＧＢのカラーデータである。
【００２７】
画像処理装置２０は、全体として画像処理部２１と印刷エンジン２２とから構成される。画像処理部２１は、色変換処理部２１１と、ハーフトーン処理部２１２、及びパルス幅変調部２１３とから構成される。
【００２８】
色変換処理部２１１は、ホストコンピュータ１０からの階調データが入力され、ＣＭＹＫのカラーデータに色変換を行う。ハーフトーン処理部２１２は、色変換後の階調データが入力され、各色ごとに２値以上の多値の値に変換して量子化画像データを出力する。本実施例では誤差拡散法による処理が行われる。その詳細は後述する。パルス幅変調部２１３は、ハーフトーン処理部２１２からの量子化画像データが入力され、この量子化データに対してドットごとにレーザ駆動パルス有り又は無し等を示す駆動データを生成する。生成した駆動データは、印刷エンジン２２に出力される。
【００２９】
印刷エンジン２２は、レーザドライバ２２１とレーザーダイオード（ＬＤ）２２２とから構成される。レーザドライバ２２１は、パルス幅変調部２１３からの駆動データが入力され、その駆動データをもとに駆動パルスあり又はなし等を示す制御データを生成し、レーザーダイオード２２２に出力する。レーザーダイオード２２２は、レーザドライバ２２１から出力された制御データに基づいて駆動され、これにより印刷用紙等の記録媒体にホストコンピュータ１０からの画像データが印刷されることになる。本実施例では画像処理装置２０はプリンタとして機能する。
【００３０】
次に図２を参照して、画像処理装置２０の具体的構成について説明する。ここで、図１の画像処理装置２０のうち、色変換処理部２１１とハーフトーン処理部２１２及びパルス幅変調部２１３は、図２におけるＣＰＵ２４、ＲＯＭ２５、及びＲＡＭ２６に対応する。
【００３１】
画像処理装置２０は、全体として、入力インターフェース（Ｉ／Ｆ）２３、ＣＰＵ２４、ＲＯＭ２５、ＲＡＭ２６、及び印刷エンジン２２とから構成され、バスを介して互いに接続されている。入力Ｉ／Ｆ２３は、ホストコンピュータ１０と画像処理装置２０とのインターフェースの役割を果たす。入力Ｉ／Ｆ２３には、所定の伝送方式により伝送された、ホストコンピュータ１０からの階調データが入力され、画像処理装置２０で処理できるデータに変換される。入力された階調データは、一旦ＲＡＭ２６に格納される。
【００３２】
ＣＰＵ２４は、バスを介して入力Ｉ／Ｆ２３、ＲＯＭ２５、ＲＡＭ２６、印刷エンジン２２と接続され、ＲＯＭ２５に格納されたプログラムを読み出して、色変換処理やハーフトーン処理等、各種処理を行う。ＲＡＭ２６は、ＣＰＵ２４で実行される各処理のワーキングメモリとして役割を果たし、処理後の各種データが格納される。
【００３３】
印刷エンジン２２は、図１の印刷エンジンと同様の構成で、ＲＡＭ２６に格納された駆動データがＣＰＵ２４の制御により入力されて、上述した印刷処理が行われることになる。
【００３４】
以上のように構成された画像処理装置２０におけるハーフトーン処理の詳細について、適宜図面を参照しながら説明することにする。
【００３５】
まず、全体処理の動作について図３を用いて説明する。最初にＣＰＵ２４はＲＯＭ２５に格納された本処理を実行するためのプログラムを読み出すことで処理が開始される（Ｓ１０）。
【００３６】
ここで、ホストコンピュータ１０からの各色成分の階調データは記憶手段であるＲＡＭ２６の所定領域（以下「バッファ」）に格納されているものとする。その例を図６（Ａ）に示す。バッファ２６１において各座標位置は、全体画像の画素位置に対応する。例えば、（０，０）の座標位置は、全体画像の（０，０）に位置する画素に対応する。また、各座標位置に格納された値は当該画素の入力階調値を示す。なお、図６（Ａ）に示す例は３行４列の構成であるが、これは説明を容易にするためであって、例えば１ページ（１フレーム）分の画像を格納できる構成であってもよいし、この図より少ない行と列の構成であってもよい。なお、図面上、Ｘ方向は主走査方向（ＬＤ２２２から照射されるレーザビームの走査方向）、Ｙ方向は副走査方向（紙送りの方向）を示す。
【００３７】
図３に戻り、次いでＣＰＵ２４は注目画素の選択を行う（Ｓ１１）。図面上、最も左上の未処理画素を選択することになる。図６（Ａ）に示す例では、画素（０，０）を選択する。
【００３８】
次いで、ＣＰＵ２４は注目画素の入力階調値と拡散誤差値とを加算した値を演算する（Ｓ１２）。図６（Ａ）の例では、画素（０，０）の入力階調値は“１６”、拡散誤差値は“０”（初期画素で未だ誤差値が拡散されていない）、よって加算値“１６”を得る。実際には、バッファ２６１には入力階調値と後述する拡散誤差値とを加算した値が格納されているためＣＰＵ２４が注目画素のこの加算値を読み出すことで処理が行われる。
【００３９】
次いで、その加算値が閾値を超えるか否か判断する（Ｓ１３）。入力階調データを量子化するためである。本実施例では閾値を“１２８”とする。もちろん、閾値はこれ以外の任意の値であってもよい。そして、加算値が閾値を超えるときは（Ｓ１３で“ＹＥＳ”）、ドット生成を示す出力階調値（例えば、“２５５”）を記録して（Ｓ１４）、次のステップＳ１５に移行する。一方、加算値が閾値を超えないときは（Ｓ１３で“ＮＯ”）、ドット生成を示す出力階調値を記録することなく（ドットを生成しないことを示す出力階調値（例えば“０”）を記録して）、次のステップＳ１５に移行する。図６（Ａ）の例では、演算値“１６”は閾値を超えないため、出力階調値“０”を得ることになる。なお、“記録”とあるのは、例えば、ＲＡＭ２６の所定領域に設けられた出力バッファに記録することである。この出力バッファに記録された出力階調値が量子化画像データとして読み出され、パルス幅変換処理が行われる。
【００４０】
図３に戻り、Ｓ１５においてＣＰＵ２４は入力階調値に拡散誤差値を加算した値から出力階調値を減算する。量子化誤差を得るためである。図６（Ａ）の例では、画素（０，０）において加算値“１６”から出力階調値“０”を減算して、量子化誤差値“１６”を得る。
【００４１】
次いで、ＣＰＵ２４は拡散誤差値を拡散させる（Ｓ１６）。すなわち、ＣＰＵ２４は、量子化誤差値を拡散マトリックスＷの各係数で重み付けし、その値を対応する画素に拡散させる。使用する拡散マトリックスＷの例を図６（Ｂ）に示す。“＊”で示す画素は注目画素で、各値は係数値を示す。従って、図６（Ａ）の例では画素（１，０）、（１，１）、（０，１）にそれぞれ拡散誤差値“４”（＝１６×１／４）を拡散させることになる。そして、バッファ２６１の対応する画素位置にこの拡散誤差値を加算して格納する（図６（Ｃ）参照）。
【００４２】
次いで、本発明に係る重心補正処理（Ｓ１７）を行うが、その処理を説明する前に、誤差拡散法による処理の問題点について考察する。
【００４３】
ドット密度の低い領域の立ち上がり部分で発生する「ドット発生の遅延」は、拡散マトリックスＷでの係数が小さな値となっていることに加え、入力階調値が低い値のため周辺画素に拡散する誤差値が非常に小さく閾値に達するまで時間がかかることが原因である。また、エッジ部分で発生する「尾ひき」についても、例えばドット密度の低い領域からドット密度の高い領域に変わる領域において、誤差値が非常に小さいためにあるドット密度の低い領域で蓄積された誤差がドット密度の高い領域で相殺されるまで時間がかかることが原因である。
【００４４】
ここで、まず拡散マトリックスＷについて考える。図７（Ａ）に示すように、注目画素（“＊”で示す）の座標を（１，０）、それ以外の画素の座標を図のように取ったとき、拡散マトリックスＷの重心位置２５１を以下の演算式を用いて演算する。
【００４５】
（数１）
（Ｘ重心，Ｙ重心）＝（Σ（係数値＊Ｘ方向の座標位置），Σ（係数値＊Ｙ方向の座標位置））
図７（Ａ）の例では（Ｘ重心，Ｙ重心）＝（１．２５，０．７５）となる。図７（Ａ）に黒丸で重心位置２５１を示す。
【００４６】
一方、注目画素に着目したとき、その重心位置は注目画素の座標位置（１，０）である。この２つの重心を比較すると、マトリックスＷの重心位置２５１は注目画素の重心位置に対して図面上右斜め下方向にずれた結果となっている。そして、この重心誤差は入力階調値を拡散誤差値として周囲の画素に拡散させたときも発生する。つまり、誤差値を拡散させたときもこの重心の位置ずれにより注目画素に対して右斜め下方向にずれて誤差値が拡散される。この右斜め下方向への重心のずれが画像全体として見たときに、上述した「ドット発生の遅延」や「尾ひき」が右斜め下方向に向けて発生している原因となっているのである。
【００４７】
そこで、本発明はこの重心誤差に着目し、注目画素近傍の未処理画素に周囲の画素から階調値（当該画素に他の画素からの拡散誤差値が拡散されているときは、この誤差値に入力階調値を加算した値）を移動させることで、量子化誤差を拡散することにより生じた入力階調データの重心誤差を補正して、入力階調値に忠実な歪みのない出力画像を得るようにしたのである。この階調値を移動させる方向は、図７（Ｂ）に示すように、重心誤差が発生する方向（Ｌ方向）とは反対方向（Ｍ方向）である。従って、重心誤差を補正する方向に階調値が移動するため、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれやすくなる。つまり、入力階調値の分布に忠実なドットが打たれることになる。さらに、図７（Ｂ）に示すように重心誤差を補正する方向に階調値が移動することでこの階調値が注目画素近傍に集まるため、結果として注目画素の近くの未処理画素で閾値を超える可能性が高くなる。すなわち、「ドット発生の遅延」等の問題を解決することができる。なお、ここで重心誤差とは注目画素の重心位置とマトリックスＷ内の係数を考慮した重心位置との差と考えることもできるし、注目画素の重心位置と実際にマトリックスＷにより拡散誤差値を周囲の画素に拡散したときの重心位置との差と考えることもできる。
【００４８】
以上述べた処理の詳細について図５のフローチャートを参照しながら説明する。重心補正処理（Ｓ１７）に処理が移行すると、まずＣＰＵ２４は、拡散による階調値移動量を演算する（Ｓ１７１）。実際に移動すべき階調値を演算するためである。ここでは、以下の式を用いる。
【００４９】
（数２）
階調値移動量＝重心誤差＊拡散誤差値の総量
この式で重心誤差は、拡散マトリックスＷの重心位置２５１から注目画素の重心位置を減算した値である。図６（Ａ）、（Ｂ）の例では、注目画素は（０，０）なのでマトリックスＷの重心位置２５１は（０．２５，０．７５）、注目画素の重心位置は（０，０）、よって重心誤差は（０．２５，０．７５）となる。また、拡散誤差値は、３つの画素（（１，０）、（１，１）、（０，１））にそれぞれ“４”拡散させたので、その総量は“１２”である。従って、階調値移動量は（３，９）となる。なお、重心誤差が拡散マトリックスＷの重心位置２５１と注目画素の重心位置との差、であることに着目すると、重心誤差の値自体は使用するマトリックスＷが同じであれば常に同じ値となるので、かかる重心誤差を本ステップで毎回演算するのではなくＲＯＭ２５やＲＡＭ２６などの記憶手段に記憶させ本ステップの処理の際にＣＰＵ２４によって読み出すことで処理速度の向上を図ることができる。一方で、上述したように重心誤差を実際にマトリックスＷで拡散誤差値を拡散させたときの値による重心と注目画素の重心との誤差、と考えると毎回重心誤差を演算するようにしてもよい。
【００５０】
次いで、ＣＰＵ２４は注目画素に最も近い未処理画素を探索する（Ｓ１７２）。移動元の画素を探索するためである。図６（Ｃ）の例では、例えば、注目画素（０，０）に最も近い未処理画素として画素（０，１）を探索する（図８（Ａ）参照）。
【００５１】
次いで、ＣＰＵ２４は探索した画素が未処理画素か否か判断する（Ｓ１７３）。すでに処理済みの画素には入力階調値が残っていないため移動量分の値を移動させることはできないからである。したがって、探索した移動元の画素が未処理画素でないとき（Ｓ１７３で“ＮＯ”）、重心補正処理を終了させて図３のＳ１８に移行する。
【００５２】
一方、探索した移動元の画素が未処理画素のとき（Ｓ１７３で“ＹＥＳ”）、次いでＣＰＵ２４は、重心誤差を補正できる階調値移動先画素を探索する（Ｓ１７４）。かかる移動先画素の探索は、Ｓ１７２で探索した移動元の画素に対して重心誤差が発生する方向とは反対方向に位置する画素を探索する。重心誤差を補正するためである。図８（Ａ）の例で考えると、重心誤差は右斜め下方向なので、移動元の画素（０，１）から左斜め上方向に位置する画素を探索する。
【００５３】
次いで、移動先画素があるか否か判断する（Ｓ１７５）。入力画像の端部で移動先画素が存在しないこともあるからである。移動先画素が存在しないと（Ｓ１７５で“ＮＯ”）、再び移動元の画素を探索すべく、Ｓ１７２に処理が移行する。そして、移動元、先の画素が見つかるまで処理を繰り返す。一方、移動先画素が存在するときは（Ｓ１７５で“ＹＥＳ”）、実際に移動するための処理を行うべくＳ１７７に移行する。図８（Ａ）の例では、画素（０，１）からに左斜め上方向に対して移動先画素が存在しない（Ｓ１７５で“ＮＯ”）。よって、再び移動元画素の探索（Ｓ１７２）等の処理を繰り返す。かかる処理を繰り返すことで、例えば図８（Ｂ）に示すように移動元画素として画素（１，２）、移動先画素として画素（０，１）が探索される。
【００５４】
Ｓ１７７に移行すると、ＣＰＵ２４は実際に階調値（移動元画素に他の画素からの拡散誤差値が拡散されているときはこの誤差値に移動元画素の入力階調値を加算した値）の移動を行う。移動すべき量はＳ１７１で演算した階調値移動量である。図８（Ｂ）の例では、階調値移動量は（３，９）で、まず少ない方の値“３”だけ移動させる。すなわち、画素（１，２）の階調値“１６”のうち、“３”を画素（０，１）に移動させる。移動後の値の分布は図９（Ａ）に示すようになる。
【００５５】
次いで、ＣＰＵ２４は階調値残り量を演算する（Ｓ１７８）。階調値を移動したにもかかわらず、階調値移動量すべて移動させていない場合もあるからである。ここでは、階調値移動量から実際に移動させた量を減算することで残り量を求める。図９（Ａ）の例では、階調値移動量（３，９）のうち、実際に移動させた量は“３”、よって減算後の残り量は（０，６）となる。
【００５６】
次いで、ＣＰＵ２４は残り移動量があるか否か判断する（Ｓ１７９）。残り移動量があれば（Ｓ１７９で“ＹＥＳ”）、再び移動元と移動先の画素を探索して階調値を移動させる処理を行う必要があるため、処理はＳ１７２に移行して上述の処理を繰り返す。一方、残り移動量がないと（Ｓ１７９で“ＮＯ”）、すべての階調値移動量だけ移動させたことになるため重心補正処理が終了して、図３のＳ１８に移行する。
【００５７】
図９（Ａ）の例で処理を進めると、残り移動量は（０，６）で、残り移動量があるため（Ｓ１７９で“ＹＥＳ”）、再び移動元の画素を探索する（Ｓ１７２）。なお、この残り移動量（０，６）に着目すると主走査方向にはすべての移動量を移動させたことを示し、副走査方向に残り量が存在することを示す。よって、移動元と移動先の画素は副走査方向に沿った位置に存在する画素を探索することになる（Ｓ１７２、Ｓ１７４）。例えば、図９（Ｂ）に示すように、移動元画素は（１，１）、移動先画素は（１，０）として探索される。そして、残り移動量分“６”を移動させると（Ｓ１７７）、図９（Ｂ）に示すように分布される。
【００５８】
図９（Ｂ）に示すように、重心補正処理により注目画素の近傍に階調値が集まるため、ドットの生成が早まり「ドット発生の遅延」等の問題を解決することができる。また、拡散マトリックスＷの重心位置２５１と注目画素の重心位置とのずれを補正する方向に周辺の階調値が移動するため、周辺ドットも含めた複数のドットによって入力階調値の重心が保存された、入力画像に忠実な出力画像が得られるのである。さらに、濃度差（入力階調値の差）を演算して入力画像のエッジを検出するような複雑な条件分岐等を伴う処理を行っていないため、その分計算量も少なくなり処理速度の向上を図ることができる。
【００５９】
以上の重心補正処理（Ｓ１７）が終了すると、誤差拡散の本来の処理に戻って、未処理画素があるか否か判断する（図４のＳ１８）。未処理画素が存在すると（Ｓ１８で“ＹＥＳ”）、注目画素を再び選択して重心補正処理（Ｓ１７）を含めた誤差拡散法による処理（Ｓ１１からＳ１７）を行う。バッファ２６１には補正による移動後の値が記憶され、その値を有する未処理画素が注目画素となったときは移動後の値と閾値とを比較することで量子化される（Ｓ１３）。一方、すべての画素に対して処理を終えると（Ｓ１８で“ＮＯ”）、一連の処理が終了する（Ｓ１９）。終了後、出力バッファには出力階調値が格納され、量子化画像データとして出力され実際の印刷処理が行われる。
【００６０】
上述の例では、カラーデータに対する処理を説明したが、それ以外にも図１０に示すようにモノクロデータに対しても全く同様に誤差拡散法によるハーフトーン処理を行うことができる。この場合、画像処理装置２０には色変換処理部２１１のない構成となる。また、カラーデータの例としてＣＭＹＫに対しての処理を説明したがそれ以外にも任意の色成分に対しても同様の処理を行うことができる。
【００６１】
また、上述の例では画像処理装置２０側にハーフトーン処理等を行わせるようにしたが、図１１に示すようにホストコンピュータ１０側に本発明に係る誤差拡散法によるハーフトーン処理等を行わせるようにしてもよい。この場合でも、上述した例と全く同様の作用効果を奏することができる。
【００６２】
さらに、上述の例では、移動元画素の入力階調値と移動元画素に拡散された拡散誤差値との合計値のうち階調値移動量（又はその一部）分を移動先画素に移動させるとして説明した。しかし、それ以外にも移動元画素に必ずしも拡散誤差値が拡散されない場合もあるため、移動元画素の入力階調値のみ考慮してそのうち階調値移動量（又はその一部）分だけを移動させる場合も考えられる。さらには、移動元画素に拡散された拡散誤差値のみを考慮してそのうち階調値移動量（又はその一部）分だけを移動させる場合も考えられる。いずれの場合も、注目画素近傍の未処理画素に移動量分の値が移動されることになるため「ドット発生の遅延」等の問題を解決して入力画像に忠実な出力画像を得ることができる。
【００６３】
さらに、上述した例では誤差拡散法によって２値化する例を説明したが、それ以外にも閾値を複数にすることで３値、４値化等、入力階調データの階調数と同じかそれ以下の階調数の出力階調データに量子化してもよい。この場合、ＣＰＵ２４、ＲＯＭ２５、ＲＡＭ２６によって入力階調データが量子化されることになる。上述の例と同様に「ドット発生の遅延」等の問題を解決できるとともに入力画像に対して歪みのない出力画像を得ることができる。さらに、入力階調データの階調数も２５６階調（８ビット）のみならず、５１２階調（９ビット）や１２８階調（７ビット）等、任意の階調数でもよい。
【００６４】
さらに、画像処理装置２０としてプリンタを例にして説明したが、それ以外にも複写機、複合機、ディスプレイ、ファクシミリ、デジタルカメラ、携帯電話やＰＤＡ（Personal Digital Assistance）などの情報携帯端末等でも全く同様の作用効果を奏することができる。
【図面の簡単な説明】
【００６５】
【図１】本発明が適用されるシステム全体の構成例を示す図である。
【図２】画像処理装置２０の構成例を示す図である。
【図３】誤差拡散法による処理の動作を示すフローチャートである。
【図４】誤差拡散法による処理の動作を示すフローチャートである。
【図５】重心補正処理の動作を示すフローチャートである。
【図６】バッファ２６１、拡散マトリックスＷの例を示す図である。
【図７】拡散マトリックスＷと重心誤差補正の概念を示す図である。
【図８】バッファ２６１の例を示す図である。
【図９】バッファ２６１の例を示す図である。
【図１０】他のシステム全体の構成例を示す図である。
【図１１】他のシステム全体の構成例を示す図である。
【符号の説明】
【００６６】
１０  ホストコンピュータ、  ２０  画像処理装置、  ２１２  ハーフトーン処理部、  ２４  ＣＰＵ、  ２５１  拡散マトリックスの重心位置、  ２６  ＲＡＭ、  ２６１  バッファ、  Ｗ  拡散マトリックス、  Ｘ  主走査方向、  Ｙ  副走査方向
【図１】
2006020019.tif 000003
【図２】
2006020019.tif 000004
【図３】
2006020019.tif 000005
【図４】
2006020019.tif 000006
【図５】
2006020019.tif 000007
【図６】
2006020019.tif 000008
【図７】
2006020019.tif 000009
【図８】
2006020019.tif 000010
【図９】
2006020019.tif 000011
【図１０】
2006020019.tif 000012
【図１１】
2006020019.tif 000013