JP2006020019A - 画像処理装置、画像処理方法、及びプログラム - Google Patents
画像処理装置、画像処理方法、及びプログラム Download PDFInfo
- Publication number
- JP2006020019A JP2006020019A JP2004195285A JP2004195285A JP2006020019A JP 2006020019 A JP2006020019 A JP 2006020019A JP 2004195285 A JP2004195285 A JP 2004195285A JP 2004195285 A JP2004195285 A JP 2004195285A JP 2006020019 A JP2006020019 A JP 2006020019A
- Authority
- JP
- Japan
- Prior art keywords
- value
- error
- pixel
- diffusion
- image processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Image Processing (AREA)
- Facsimile Image Signal Circuits (AREA)
Abstract
【課題】「ドット発生の遅延」や「尾ひき」の問題を解決して、入力画像に対して歪みのない出力画像を得ることのできる画像処理装置や画像処理方法、及びプログラムを提供すること。
【解決手段】入力画像データに対して、画素ごとに2種類以上の階調値を有する出力画像データに変換する変換手段と、前記変換手段により発生した誤差値を拡散マトリックスにより未変換画素に拡散させる誤差拡散手段と、第1の未変換画素に対応した第1の所定値のうち、第2の所定値を前記注目画素近傍の第2の未変換画素に移動させる補正手段と、を備えた画像処理装置であることを特徴としている。
【選択図】図5
【解決手段】入力画像データに対して、画素ごとに2種類以上の階調値を有する出力画像データに変換する変換手段と、前記変換手段により発生した誤差値を拡散マトリックスにより未変換画素に拡散させる誤差拡散手段と、第1の未変換画素に対応した第1の所定値のうち、第2の所定値を前記注目画素近傍の第2の未変換画素に移動させる補正手段と、を備えた画像処理装置であることを特徴としている。
【選択図】図5
Description
本発明は、多階調画像データを低階調画像データに変換する誤差拡散法を用いた画像処理装置、画像処理方法、及びプログラムに関する。詳しくは、誤差拡散処理において入力階調値を含む値を移動させることで重心誤差を補正するようにした画像処理装置等に関する。
従来から、プリンタなどの画像処理装置は、画素ごとに多値の階調値を有する階調データに対して、ドットの有無を表す2値の値に変換して印刷用紙に印刷等を行うようになされている。このような低階調の画像データに変換する場合に、原画像の画品質をできるだけ維持するための技術として誤差拡散法による擬似中間調表現が利用されている。誤差拡散法は、注目画素で発生した量子化誤差を当該画素の近傍の未量子化画素に拡散させて処理を行う方法である(例えば、以下の非特許文献1)。
しかし、ハイライト領域(ドット密度の低い領域)の立ち上がり部分で誤差拡散法による処理を行うと、ドットの発生が大幅に遅れる、いわゆる「ドット発生の遅延」と呼ばれる現象が発生する。また、入力階調値が大きく変化するエッジの領域では尾を引いたようにドットが抜けてしまう、いわゆる「尾ひき」と呼ばれる現象も発生する。
そのため、従来では、入力階調値に応じて誤差拡散法で使用される閾値を変更することで早くドットを発生させ「ドット発生の遅延」と「尾ひき」の問題を解決したものがある(以下の特許文献1)。しかし、かかる技術では閾値を変化させているため入力画像のエッジ部分の前後等でドットが発生し、結果的に画像のエッジの部分がシャープに再現されない問題があった。
そこで、隣接画素との濃度差を演算してエッジを検出しその値によって閾値を固定にしたり、変化させることで、エッジの再現性を良好にするとともに「ドット発生の遅延」と「尾ひき」の問題を解決したものがある(例えば、以下の特許文献2)。
Robert Ulichney著、"Digital Halftoning"、The MIT Press(1987年発行)、p.239−252 特開平7−111591号公報
特開平8−242374号公報
Robert Ulichney著、"Digital Halftoning"、The MIT Press(1987年発行)、p.239−252
しかしながら、上述した特開平8−242374号においては、濃度差を演算してその値によって閾値を固定にしたりする等、条件分岐が多くそれだけ計算量が多くなり、誤差拡散処理が遅くなってしまう問題点があった。
また、一般的に「ドット発生の遅延」や「尾ひき」が発生した出力画像は入力階調値に忠実なドットが発生しているとは言えず、入力画像に歪みが生じるという問題がある。
そこで、本発明の目的は、「ドット発生の遅延」や「尾ひき」の問題を解決して、入力画像に対して歪みのない出力画像を得るとともに、処理速度の速い画像処理装置や画像処理方法、及びプログラムを提供することにある。
上記目的を達成するために本発明は、入力画像データに対して、画素ごとに2種類以上の階調値を有する出力画像データに変換する変換手段と、変換手段により発生した誤差値を拡散マトリックスにより未変換画素に拡散させる誤差拡散手段と、第1の未変換画素に対応した第1の所定値のうち、第2の所定値を前記注目画素近傍の第2の未変換画素に移動させる補正手段と、を備えたことを特徴としている。これにより、例えば、注目画素近傍に第2の所定値が集まるので「ドット発生の遅延」等の問題を解決して入力画像に忠実な出力画像を得ることができる。
また、本発明は上記画像処理装置において、上記第1の所定値は、第1の未変換画素の入力階調値、又は誤差拡散手段によって第1の未変換画素に拡散された拡散誤差値、若しくは第1の未変換画素の入力階調値と誤差拡散手段によって第1の未変換画素に拡散された拡散誤差値との合計値、のいずれかであることを特徴としている。これにより、注目画素近傍の未処理画素に注目画素の入力階調値又は拡散誤差値、若しくはこれら2つの合計値のいずれかのうち所定値が集まるため「ドット発生の遅延」等の問題を解決して入力画像に忠実な出力画像を得ることができる。
また、上記目的を達成するために本発明は、注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値が記憶される記憶手段と、記憶手段から加算値を読み出して閾値と比較することで2値以上の階調数を有する出力階調値に量子化する量子化手段と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算手段と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散手段と、記憶手段に記憶された第1の未処理画素の少なくとも入力階調値のうち所定値を、注目画素近傍の第2の未処理画素に移動させ移動後の値を記憶手段に記憶させる補正手段と、を備え、第2の未処理画素が注目画素となったとき量子化手段は記憶手段から読み出した移動後の値と閾値とを比較することで量子化することを特徴としている。これにより、例えば、注目画素近傍の画素に他の画素からの階調値が集まるためドットの生成が早くなり「ドット生成の遅延」等の問題を解決することができる。
また、本発明は上記画像処理装置において、上記補正手段は拡散誤差値の拡散により生じた重心誤差を補正する方向に所定値を移動させることを特徴としている。これにより、例えば、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれるため周辺のドットを含めた複数のドットによって入力階調値の重心が保存された、入力階調値に忠実な出力画像を得ることができる。
さらに、本発明は上記画像処理装置において、上記補正手段は第1の未処理画素に対して拡散誤差値の拡散により生じた重心誤差の発生する方向とは反対方向に位置する第2の未処理画素に所定値を移動させることを特徴としている。これにより、例えば、重心誤差の発生する方向とは反対方向に階調値が移動されるため入力階調値に忠実な出力画像を得ることができる。
さらに、本発明は上記画像処理装置において、上記重心誤差は注目画素の重心と拡散誤差値を周囲の未処理画素に拡散させたときの重心との誤差であることを特徴としている。これにより、例えば、重心誤差の発生する方向は注目画素の重心から拡散誤差値を拡散させたときの重心への方向となり、これを補正する方向に階調値のうち所定値を移動させることができる。
さらに、本発明は上記画像処理装置において、上記重心誤差は注目画素の重心と拡散マトリックスの重心との誤差であることを特徴としている。これにより、例えば、重心誤差の発生する方向は注目画素の重心から拡散マトリックスの重心への方向となり、これを補正する方向に階調値のうち所定値を移動させることができる。
さらに、本発明は上記画像処理装置において、上記補正手段は第1の未処理画素に周囲の画素からの拡散誤差値が拡散されたときは当該拡散誤差値に第1の未処理画素の入力階調値を加算した値のうち所定値を第2の未処理画素に移動させることを特徴としている。これにより、例えば、実際に移動させる所定値は拡散誤差値と入力階調値との加算値を含むことになり、当該画素が注目画素となったときは移動後の値ですぐに量子化することができるため、処理速度の向上を図ることができる。
さらに、本発明は上記画像処理装置において、上記所定値は注目画素の重心と拡散マトリックスの重心との誤差に拡散誤差値の総量を積算した値であることを特徴としている。これにより、例えば、実際に移動させる量を簡易に演算することができる。
さらに、本発明は上記画像処理装置において、上記第2の未処理画素は注目画素に最も近い未処理画素であることを特徴としている。これにより、例えば、注目画素に最も近い未処理画素に階調値が移動するためそれだけドットの生成が早まるため「ドット発生の遅延」等の問題を解決することができる。
さらに、上記目的を達成するために本発明は、注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値が記憶される記憶手段と、記憶手段から加算値を読み出して閾値と比較することで2値以上の階調数を有する出力階調値に量子化する量子化手段と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算手段と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散手段と、記憶手段に記憶された未処理画素の少なくとも入力階調値のうち所定値を、拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を記憶手段に記憶させる補正手段と、を備え、所定値が移動された未処理画素が注目画素となったとき量子化手段は記憶手段から読み出した移動後の値と閾値とを比較することで量子化することを特徴としている。これにより、例えば、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれるため周辺のドットを含めた複数のドットによって入力階調値の重心が保存された、入力階調値に忠実な出力画像を得ることができる。また、重心誤差を補正する方向に移動することで注目画素近傍に階調値が集まり「ドット発生の遅延」等の問題を解決することができる。
さらに、上記目的を達成するために本発明は、画素ごとに所定の階調値を有する入力データが記憶される記憶手段を備え、入力データに対し量子化された2値以上の階調数を有する出力階調値を得る画像処理装置における画像処理方法であって、入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで出力階調値に量子化する量子化工程と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算工程と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散工程と、記憶手段に記憶された第1の未処理画素の少なくとも入力階調値のうち所定値を、注目画素近傍の第2の未処理画素に移動させ移動後の値を記憶手段に記憶させる補正工程と、を備え、第2の未処理画素が注目画素となったとき量子化工程では記憶手段から読み出した移動後の値と閾値とを比較することで量子化する、ことを特徴としている。これにより、例えば、注目画素近傍の画素に他の画素からの階調値が集まるためドットの生成が早くなり「ドット生成の遅延」等の問題を解決することができる。
さらに、上記目的を達成するために本発明は、画素ごとに所定の階調値を有する入力データが記憶される記憶手段を備え、入力データに対し量子化された2値以上の階調数を有する出力階調値を得る画像処理装置における画像処理方法であって、入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで出力階調値に量子化する量子化工程と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算工程と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散工程と、記憶手段に記憶された未処理画素の少なくとも入力階調値のうち所定値を、拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を記憶手段に記憶させる補正工程と、を備え、所定値が移動された未処理画素が注目画素となったとき量子化工程では記憶手段から読み出した移動後の値と閾値とを比較することで量子化する、ことを特徴としている。これにより、例えば、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれるため周辺のドットを含めた複数のドットによって入力階調値の重心が保存された、入力階調値に忠実な出力画像を得ることができる。また、重心誤差を補正する方向に移動することで注目画素近傍に階調値が集まり「ドット発生の遅延」等の問題を解決することができる。
さらに、上記目的を達成するために本発明は、画素ごとに所定の階調値を有する入力データが入力されて量子化された2値以上の階調数を有する出力階調値を得る画像処理をコンピュータに実行させるプログラムであって、入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで出力階調値に量子化する量子化処理と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算処理と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散処理と、記憶手段に記憶された第1の未処理画素の少なくとも入力階調値のうち所定値を、注目画素近傍の第2の未処理画素に移動させ移動後の値を記憶手段に記憶させる補正処理と、を備え、第2の未処理画素が注目画素となったとき量子化処理は記憶手段から読み出した移動後の値と閾値とを比較することで量子化する、ことを特徴としている。これにより、例えば、注目画素近傍の画素に他の画素からの階調値が集まるためドットの生成が早くなり「ドット生成の遅延」等の問題を解決することができる。
さらに、上記目的を達成するために本発明は、画素ごとに所定の階調値を有する入力データが入力されて量子化された2値以上の階調数を有する出力階調値を得る画像処理をコンピュータに実行させるプログラムであって、入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで出力階調値に量子化する量子化処理と、加算値から出力階調値を減算して量子化誤差を得る量子化誤差演算処理と、量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで拡散誤差値を得、当該拡散誤差値を注目画素周囲の未処理画素に拡散させるよう記憶手段に記憶させる誤差拡散処理と、記憶手段に記憶された未処理画素の少なくとも入力階調値のうち所定値を、拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を記憶手段に記憶させる補正処理と、を備え、所定値が移動された未処理画素が注目画素となったとき量子化処理は記憶手段から読み出した移動後の値と閾値とを比較することで量子化する、ことを特徴としている。これにより、例えば、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれるため周辺のドットを含めた複数のドットによって入力階調値の重心が保存された、入力階調値に忠実な出力画像を得ることができる。また、重心誤差を補正する方向に移動することで注目画素近傍に階調値が集まり「ドット発生の遅延」等の問題を解決することができる。
以下、図面を参照して本発明を実施するための最良の形態を説明する。図1は、本発明が適用されるシステム全体の構成例を示す図である。図に示すように本システムはホストコンピュータ10と画像処理装置20とから構成される。
ホストコンピュータ10は、アプリケーション部11とラスタライズ部12とから構成される。アプリケーション部11では、文字データ、図形データ、ビットマップデータ等の印刷対象のデータが生成される。例えば、ワードプロセッサや図形ツールなどのアプリケーションプログラムを使用してキーボード等の操作により文字データや図形データなどが生成される。生成されたこれらのデータは、ラスタライズ部12へ出力される。
ラスタライズ部12では、アプリケーション部11から出力された印刷対象のデータを画素ごと(又はドットごと)に8ビットの階調データに変換する。したがって、各画素0から255までの階調値を有することになる。ラスタライズ部12における階調データの生成は、実際にはホストコンピュータ10に実装されたドライバによって処理が行われる。ラスタライズ部12から出力される階調データは、画像処理装置20に出力される。なお、本実施例においてこの階調データはRGBのカラーデータである。
画像処理装置20は、全体として画像処理部21と印刷エンジン22とから構成される。画像処理部21は、色変換処理部211と、ハーフトーン処理部212、及びパルス幅変調部213とから構成される。
色変換処理部211は、ホストコンピュータ10からの階調データが入力され、CMYKのカラーデータに色変換を行う。ハーフトーン処理部212は、色変換後の階調データが入力され、各色ごとに2値以上の多値の値に変換して量子化画像データを出力する。本実施例では誤差拡散法による処理が行われる。その詳細は後述する。パルス幅変調部213は、ハーフトーン処理部212からの量子化画像データが入力され、この量子化データに対してドットごとにレーザ駆動パルス有り又は無し等を示す駆動データを生成する。生成した駆動データは、印刷エンジン22に出力される。
印刷エンジン22は、レーザドライバ221とレーザーダイオード(LD)222とから構成される。レーザドライバ221は、パルス幅変調部213からの駆動データが入力され、その駆動データをもとに駆動パルスあり又はなし等を示す制御データを生成し、レーザーダイオード222に出力する。レーザーダイオード222は、レーザドライバ221から出力された制御データに基づいて駆動され、これにより印刷用紙等の記録媒体にホストコンピュータ10からの画像データが印刷されることになる。本実施例では画像処理装置20はプリンタとして機能する。
次に図2を参照して、画像処理装置20の具体的構成について説明する。ここで、図1の画像処理装置20のうち、色変換処理部211とハーフトーン処理部212及びパルス幅変調部213は、図2におけるCPU24、ROM25、及びRAM26に対応する。
画像処理装置20は、全体として、入力インターフェース(I/F)23、CPU24、ROM25、RAM26、及び印刷エンジン22とから構成され、バスを介して互いに接続されている。入力I/F23は、ホストコンピュータ10と画像処理装置20とのインターフェースの役割を果たす。入力I/F23には、所定の伝送方式により伝送された、ホストコンピュータ10からの階調データが入力され、画像処理装置20で処理できるデータに変換される。入力された階調データは、一旦RAM26に格納される。
CPU24は、バスを介して入力I/F23、ROM25、RAM26、印刷エンジン22と接続され、ROM25に格納されたプログラムを読み出して、色変換処理やハーフトーン処理等、各種処理を行う。RAM26は、CPU24で実行される各処理のワーキングメモリとして役割を果たし、処理後の各種データが格納される。
印刷エンジン22は、図1の印刷エンジンと同様の構成で、RAM26に格納された駆動データがCPU24の制御により入力されて、上述した印刷処理が行われることになる。
以上のように構成された画像処理装置20におけるハーフトーン処理の詳細について、適宜図面を参照しながら説明することにする。
まず、全体処理の動作について図3を用いて説明する。最初にCPU24はROM25に格納された本処理を実行するためのプログラムを読み出すことで処理が開始される(S10)。
ここで、ホストコンピュータ10からの各色成分の階調データは記憶手段であるRAM26の所定領域(以下「バッファ」)に格納されているものとする。その例を図6(A)に示す。バッファ261において各座標位置は、全体画像の画素位置に対応する。例えば、(0,0)の座標位置は、全体画像の(0,0)に位置する画素に対応する。また、各座標位置に格納された値は当該画素の入力階調値を示す。なお、図6(A)に示す例は3行4列の構成であるが、これは説明を容易にするためであって、例えば1ページ(1フレーム)分の画像を格納できる構成であってもよいし、この図より少ない行と列の構成であってもよい。なお、図面上、X方向は主走査方向(LD222から照射されるレーザビームの走査方向)、Y方向は副走査方向(紙送りの方向)を示す。
図3に戻り、次いでCPU24は注目画素の選択を行う(S11)。図面上、最も左上の未処理画素を選択することになる。図6(A)に示す例では、画素(0,0)を選択する。
次いで、CPU24は注目画素の入力階調値と拡散誤差値とを加算した値を演算する(S12)。図6(A)の例では、画素(0,0)の入力階調値は“16”、拡散誤差値は“0”(初期画素で未だ誤差値が拡散されていない)、よって加算値“16”を得る。実際には、バッファ261には入力階調値と後述する拡散誤差値とを加算した値が格納されているためCPU24が注目画素のこの加算値を読み出すことで処理が行われる。
次いで、その加算値が閾値を超えるか否か判断する(S13)。入力階調データを量子化するためである。本実施例では閾値を“128”とする。もちろん、閾値はこれ以外の任意の値であってもよい。そして、加算値が閾値を超えるときは(S13で“YES”)、ドット生成を示す出力階調値(例えば、“255”)を記録して(S14)、次のステップS15に移行する。一方、加算値が閾値を超えないときは(S13で“NO”)、ドット生成を示す出力階調値を記録することなく(ドットを生成しないことを示す出力階調値(例えば“0”)を記録して)、次のステップS15に移行する。図6(A)の例では、演算値“16”は閾値を超えないため、出力階調値“0”を得ることになる。なお、“記録”とあるのは、例えば、RAM26の所定領域に設けられた出力バッファに記録することである。この出力バッファに記録された出力階調値が量子化画像データとして読み出され、パルス幅変換処理が行われる。
図3に戻り、S15においてCPU24は入力階調値に拡散誤差値を加算した値から出力階調値を減算する。量子化誤差を得るためである。図6(A)の例では、画素(0,0)において加算値“16”から出力階調値“0”を減算して、量子化誤差値“16”を得る。
次いで、CPU24は拡散誤差値を拡散させる(S16)。すなわち、CPU24は、量子化誤差値を拡散マトリックスWの各係数で重み付けし、その値を対応する画素に拡散させる。使用する拡散マトリックスWの例を図6(B)に示す。“*”で示す画素は注目画素で、各値は係数値を示す。従って、図6(A)の例では画素(1,0)、(1,1)、(0,1)にそれぞれ拡散誤差値“4”(=16×1/4)を拡散させることになる。そして、バッファ261の対応する画素位置にこの拡散誤差値を加算して格納する(図6(C)参照)。
次いで、本発明に係る重心補正処理(S17)を行うが、その処理を説明する前に、誤差拡散法による処理の問題点について考察する。
ドット密度の低い領域の立ち上がり部分で発生する「ドット発生の遅延」は、拡散マトリックスWでの係数が小さな値となっていることに加え、入力階調値が低い値のため周辺画素に拡散する誤差値が非常に小さく閾値に達するまで時間がかかることが原因である。また、エッジ部分で発生する「尾ひき」についても、例えばドット密度の低い領域からドット密度の高い領域に変わる領域において、誤差値が非常に小さいためにあるドット密度の低い領域で蓄積された誤差がドット密度の高い領域で相殺されるまで時間がかかることが原因である。
ここで、まず拡散マトリックスWについて考える。図7(A)に示すように、注目画素(“*”で示す)の座標を(1,0)、それ以外の画素の座標を図のように取ったとき、拡散マトリックスWの重心位置251を以下の演算式を用いて演算する。
(数1)
(X重心,Y重心)=(Σ(係数値*X方向の座標位置),Σ(係数値*Y方向の座標位置))
図7(A)の例では(X重心,Y重心)=(1.25,0.75)となる。図7(A)に黒丸で重心位置251を示す。
(X重心,Y重心)=(Σ(係数値*X方向の座標位置),Σ(係数値*Y方向の座標位置))
図7(A)の例では(X重心,Y重心)=(1.25,0.75)となる。図7(A)に黒丸で重心位置251を示す。
一方、注目画素に着目したとき、その重心位置は注目画素の座標位置(1,0)である。この2つの重心を比較すると、マトリックスWの重心位置251は注目画素の重心位置に対して図面上右斜め下方向にずれた結果となっている。そして、この重心誤差は入力階調値を拡散誤差値として周囲の画素に拡散させたときも発生する。つまり、誤差値を拡散させたときもこの重心の位置ずれにより注目画素に対して右斜め下方向にずれて誤差値が拡散される。この右斜め下方向への重心のずれが画像全体として見たときに、上述した「ドット発生の遅延」や「尾ひき」が右斜め下方向に向けて発生している原因となっているのである。
そこで、本発明はこの重心誤差に着目し、注目画素近傍の未処理画素に周囲の画素から階調値(当該画素に他の画素からの拡散誤差値が拡散されているときは、この誤差値に入力階調値を加算した値)を移動させることで、量子化誤差を拡散することにより生じた入力階調データの重心誤差を補正して、入力階調値に忠実な歪みのない出力画像を得るようにしたのである。この階調値を移動させる方向は、図7(B)に示すように、重心誤差が発生する方向(L方向)とは反対方向(M方向)である。従って、重心誤差を補正する方向に階調値が移動するため、注目画素で発生した重心誤差を相殺する最適な位置に周辺のドットが打たれやすくなる。つまり、入力階調値の分布に忠実なドットが打たれることになる。さらに、図7(B)に示すように重心誤差を補正する方向に階調値が移動することでこの階調値が注目画素近傍に集まるため、結果として注目画素の近くの未処理画素で閾値を超える可能性が高くなる。すなわち、「ドット発生の遅延」等の問題を解決することができる。なお、ここで重心誤差とは注目画素の重心位置とマトリックスW内の係数を考慮した重心位置との差と考えることもできるし、注目画素の重心位置と実際にマトリックスWにより拡散誤差値を周囲の画素に拡散したときの重心位置との差と考えることもできる。
以上述べた処理の詳細について図5のフローチャートを参照しながら説明する。重心補正処理(S17)に処理が移行すると、まずCPU24は、拡散による階調値移動量を演算する(S171)。実際に移動すべき階調値を演算するためである。ここでは、以下の式を用いる。
(数2)
階調値移動量=重心誤差*拡散誤差値の総量
この式で重心誤差は、拡散マトリックスWの重心位置251から注目画素の重心位置を減算した値である。図6(A)、(B)の例では、注目画素は(0,0)なのでマトリックスWの重心位置251は(0.25,0.75)、注目画素の重心位置は(0,0)、よって重心誤差は(0.25,0.75)となる。また、拡散誤差値は、3つの画素((1,0)、(1,1)、(0,1))にそれぞれ“4”拡散させたので、その総量は“12”である。従って、階調値移動量は(3,9)となる。なお、重心誤差が拡散マトリックスWの重心位置251と注目画素の重心位置との差、であることに着目すると、重心誤差の値自体は使用するマトリックスWが同じであれば常に同じ値となるので、かかる重心誤差を本ステップで毎回演算するのではなくROM25やRAM26などの記憶手段に記憶させ本ステップの処理の際にCPU24によって読み出すことで処理速度の向上を図ることができる。一方で、上述したように重心誤差を実際にマトリックスWで拡散誤差値を拡散させたときの値による重心と注目画素の重心との誤差、と考えると毎回重心誤差を演算するようにしてもよい。
階調値移動量=重心誤差*拡散誤差値の総量
この式で重心誤差は、拡散マトリックスWの重心位置251から注目画素の重心位置を減算した値である。図6(A)、(B)の例では、注目画素は(0,0)なのでマトリックスWの重心位置251は(0.25,0.75)、注目画素の重心位置は(0,0)、よって重心誤差は(0.25,0.75)となる。また、拡散誤差値は、3つの画素((1,0)、(1,1)、(0,1))にそれぞれ“4”拡散させたので、その総量は“12”である。従って、階調値移動量は(3,9)となる。なお、重心誤差が拡散マトリックスWの重心位置251と注目画素の重心位置との差、であることに着目すると、重心誤差の値自体は使用するマトリックスWが同じであれば常に同じ値となるので、かかる重心誤差を本ステップで毎回演算するのではなくROM25やRAM26などの記憶手段に記憶させ本ステップの処理の際にCPU24によって読み出すことで処理速度の向上を図ることができる。一方で、上述したように重心誤差を実際にマトリックスWで拡散誤差値を拡散させたときの値による重心と注目画素の重心との誤差、と考えると毎回重心誤差を演算するようにしてもよい。
次いで、CPU24は注目画素に最も近い未処理画素を探索する(S172)。移動元の画素を探索するためである。図6(C)の例では、例えば、注目画素(0,0)に最も近い未処理画素として画素(0,1)を探索する(図8(A)参照)。
次いで、CPU24は探索した画素が未処理画素か否か判断する(S173)。すでに処理済みの画素には入力階調値が残っていないため移動量分の値を移動させることはできないからである。したがって、探索した移動元の画素が未処理画素でないとき(S173で“NO”)、重心補正処理を終了させて図3のS18に移行する。
一方、探索した移動元の画素が未処理画素のとき(S173で“YES”)、次いでCPU24は、重心誤差を補正できる階調値移動先画素を探索する(S174)。かかる移動先画素の探索は、S172で探索した移動元の画素に対して重心誤差が発生する方向とは反対方向に位置する画素を探索する。重心誤差を補正するためである。図8(A)の例で考えると、重心誤差は右斜め下方向なので、移動元の画素(0,1)から左斜め上方向に位置する画素を探索する。
次いで、移動先画素があるか否か判断する(S175)。入力画像の端部で移動先画素が存在しないこともあるからである。移動先画素が存在しないと(S175で“NO”)、再び移動元の画素を探索すべく、S172に処理が移行する。そして、移動元、先の画素が見つかるまで処理を繰り返す。一方、移動先画素が存在するときは(S175で“YES”)、実際に移動するための処理を行うべくS177に移行する。図8(A)の例では、画素(0,1)からに左斜め上方向に対して移動先画素が存在しない(S175で“NO”)。よって、再び移動元画素の探索(S172)等の処理を繰り返す。かかる処理を繰り返すことで、例えば図8(B)に示すように移動元画素として画素(1,2)、移動先画素として画素(0,1)が探索される。
S177に移行すると、CPU24は実際に階調値(移動元画素に他の画素からの拡散誤差値が拡散されているときはこの誤差値に移動元画素の入力階調値を加算した値)の移動を行う。移動すべき量はS171で演算した階調値移動量である。図8(B)の例では、階調値移動量は(3,9)で、まず少ない方の値“3”だけ移動させる。すなわち、画素(1,2)の階調値“16”のうち、“3”を画素(0,1)に移動させる。移動後の値の分布は図9(A)に示すようになる。
次いで、CPU24は階調値残り量を演算する(S178)。階調値を移動したにもかかわらず、階調値移動量すべて移動させていない場合もあるからである。ここでは、階調値移動量から実際に移動させた量を減算することで残り量を求める。図9(A)の例では、階調値移動量(3,9)のうち、実際に移動させた量は“3”、よって減算後の残り量は(0,6)となる。
次いで、CPU24は残り移動量があるか否か判断する(S179)。残り移動量があれば(S179で“YES”)、再び移動元と移動先の画素を探索して階調値を移動させる処理を行う必要があるため、処理はS172に移行して上述の処理を繰り返す。一方、残り移動量がないと(S179で“NO”)、すべての階調値移動量だけ移動させたことになるため重心補正処理が終了して、図3のS18に移行する。
図9(A)の例で処理を進めると、残り移動量は(0,6)で、残り移動量があるため(S179で“YES”)、再び移動元の画素を探索する(S172)。なお、この残り移動量(0,6)に着目すると主走査方向にはすべての移動量を移動させたことを示し、副走査方向に残り量が存在することを示す。よって、移動元と移動先の画素は副走査方向に沿った位置に存在する画素を探索することになる(S172、S174)。例えば、図9(B)に示すように、移動元画素は(1,1)、移動先画素は(1,0)として探索される。そして、残り移動量分“6”を移動させると(S177)、図9(B)に示すように分布される。
図9(B)に示すように、重心補正処理により注目画素の近傍に階調値が集まるため、ドットの生成が早まり「ドット発生の遅延」等の問題を解決することができる。また、拡散マトリックスWの重心位置251と注目画素の重心位置とのずれを補正する方向に周辺の階調値が移動するため、周辺ドットも含めた複数のドットによって入力階調値の重心が保存された、入力画像に忠実な出力画像が得られるのである。さらに、濃度差(入力階調値の差)を演算して入力画像のエッジを検出するような複雑な条件分岐等を伴う処理を行っていないため、その分計算量も少なくなり処理速度の向上を図ることができる。
以上の重心補正処理(S17)が終了すると、誤差拡散の本来の処理に戻って、未処理画素があるか否か判断する(図4のS18)。未処理画素が存在すると(S18で“YES”)、注目画素を再び選択して重心補正処理(S17)を含めた誤差拡散法による処理(S11からS17)を行う。バッファ261には補正による移動後の値が記憶され、その値を有する未処理画素が注目画素となったときは移動後の値と閾値とを比較することで量子化される(S13)。一方、すべての画素に対して処理を終えると(S18で“NO”)、一連の処理が終了する(S19)。終了後、出力バッファには出力階調値が格納され、量子化画像データとして出力され実際の印刷処理が行われる。
上述の例では、カラーデータに対する処理を説明したが、それ以外にも図10に示すようにモノクロデータに対しても全く同様に誤差拡散法によるハーフトーン処理を行うことができる。この場合、画像処理装置20には色変換処理部211のない構成となる。また、カラーデータの例としてCMYKに対しての処理を説明したがそれ以外にも任意の色成分に対しても同様の処理を行うことができる。
また、上述の例では画像処理装置20側にハーフトーン処理等を行わせるようにしたが、図11に示すようにホストコンピュータ10側に本発明に係る誤差拡散法によるハーフトーン処理等を行わせるようにしてもよい。この場合でも、上述した例と全く同様の作用効果を奏することができる。
さらに、上述の例では、移動元画素の入力階調値と移動元画素に拡散された拡散誤差値との合計値のうち階調値移動量(又はその一部)分を移動先画素に移動させるとして説明した。しかし、それ以外にも移動元画素に必ずしも拡散誤差値が拡散されない場合もあるため、移動元画素の入力階調値のみ考慮してそのうち階調値移動量(又はその一部)分だけを移動させる場合も考えられる。さらには、移動元画素に拡散された拡散誤差値のみを考慮してそのうち階調値移動量(又はその一部)分だけを移動させる場合も考えられる。いずれの場合も、注目画素近傍の未処理画素に移動量分の値が移動されることになるため「ドット発生の遅延」等の問題を解決して入力画像に忠実な出力画像を得ることができる。
さらに、上述した例では誤差拡散法によって2値化する例を説明したが、それ以外にも閾値を複数にすることで3値、4値化等、入力階調データの階調数と同じかそれ以下の階調数の出力階調データに量子化してもよい。この場合、CPU24、ROM25、RAM26によって入力階調データが量子化されることになる。上述の例と同様に「ドット発生の遅延」等の問題を解決できるとともに入力画像に対して歪みのない出力画像を得ることができる。さらに、入力階調データの階調数も256階調(8ビット)のみならず、512階調(9ビット)や128階調(7ビット)等、任意の階調数でもよい。
さらに、画像処理装置20としてプリンタを例にして説明したが、それ以外にも複写機、複合機、ディスプレイ、ファクシミリ、デジタルカメラ、携帯電話やPDA(Personal Digital Assistance)などの情報携帯端末等でも全く同様の作用効果を奏することができる。
10 ホストコンピュータ、 20 画像処理装置、 212 ハーフトーン処理部、 24 CPU、 251 拡散マトリックスの重心位置、 26 RAM、 261 バッファ、 W 拡散マトリックス、 X 主走査方向、 Y 副走査方向
Claims (15)
- 入力画像データに対して、画素ごとに2種類以上の階調値を有する出力画像データに変換する変換手段と、
前記変換手段により発生した誤差値を拡散マトリックスにより未変換画素に拡散させる誤差拡散手段と、
第1の未変換画素に対応した第1の所定値のうち、第2の所定値を前記注目画素近傍の第2の未変換画素に移動させる補正手段と、
を備えたことを特徴とする画像処理装置。 - 請求項1記載の画像処理装置において、
前記第1の所定値は、
前記第1の未変換画素の入力階調値、
又は前記誤差拡散手段によって前記第1の未変換画素に拡散された拡散誤差値、
若しくは前記第1の未変換画素の入力階調値と前記誤差拡散手段によって前記第1の未変換画素に拡散された拡散誤差値との合計値、
のいずれかであることを特徴とする画像処理装置。 - 注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値が記憶される記憶手段と、
前記記憶手段から前記加算値を読み出して閾値と比較することで2値以上の階調数を有する出力階調値に量子化する量子化手段と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算手段と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散手段と、
前記記憶手段に記憶された第1の未処理画素の少なくとも前記入力階調値のうち所定値を、前記注目画素近傍の第2の未処理画素に移動させ移動後の値を前記記憶手段に記憶させる補正手段と、
を備え、前記第2の未処理画素が前記注目画素となったとき前記量子化手段は前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化することを特徴とする画像処理装置。 - 請求項3記載の画像処理装置において、
前記補正手段は、前記拡散誤差値の拡散により生じた重心誤差を補正する方向に前記所定値を移動させる、ことを特徴とする画像処理装置。 - 請求項3記載の画像処理装置において、
前記補正手段は、前記第1の未処理画素に対して前記拡散誤差値の拡散により生じた重心誤差の発生する方向とは反対方向に位置する前記第2の未処理画素に前記所定値を移動させる、ことを特徴とする画像処理装置。 - 請求項4又は5記載の画像処理装置において、
前記重心誤差は、前記注目画素の重心と前記拡散誤差値を周囲の未処理画素に拡散させたときの重心との誤差である、ことを特徴とする画像処理装置。 - 請求項4又は5記載の画像処理装置において、
前記重心誤差は、前記注目画素の重心と前記拡散マトリックスの重心との誤差である、ことを特徴とする画像処理装置。 - 請求項3記載の画像処理装置において、
前記補正手段は、前記第1の未処理画素に周囲の画素からの拡散誤差値が拡散されたときは当該拡散誤差値に前記第1の未処理画素の入力階調値を加算した値のうち所定値を前記第2の未処理画素に移動させる、ことを特徴とする画像処理装置。 - 請求項3又は8記載の画像処理装置において、
前記所定値は、前記注目画素の重心と前記拡散マトリックスの重心との誤差に前記拡散誤差値の総量を積算した値である、ことを特徴とする画像処理装置。 - 請求項3記載の画像処理装置において、
前記第2の未処理画素は、前記注目画素に最も近い未処理画素である、ことを特徴とする画像処理装置。 - 注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値が記憶される記憶手段と、
前記記憶手段から前記加算値を読み出して閾値と比較することで2値以上の階調数を有する出力階調値に量子化する量子化手段と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算手段と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散手段と、
前記記憶手段に記憶された未処理画素の少なくとも前記入力階調値のうち所定値を、前記拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を前記記憶手段に記憶させる補正手段と、
を備え、前記所定値が移動された前記未処理画素が前記注目画素となったとき前記量子化手段は前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とする画像処理装置。 - 画素ごとに所定の階調値を有する入力データが記憶される記憶手段を備え、前記入力データに対し量子化された2値以上の階調数を有する出力階調値を得る画像処理装置における画像処理方法であって、
前記入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を前記記憶手段から読み出して閾値と比較することで前記出力階調値に量子化する量子化工程と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算工程と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散工程と、
前記記憶手段に記憶された第1の未処理画素の少なくとも前記入力階調値のうち所定値を、前記注目画素近傍の第2の未処理画素に移動させ移動後の値を前記記憶手段に記憶させる補正工程と、
を備え、前記第2の未処理画素が前記注目画素となったとき前記量子化工程では前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とする画像処理方法。 - 画素ごとに所定の階調値を有する入力データが記憶される記憶手段を備え、前記入力データに対し量子化された2値以上の階調数を有する出力階調値を得る画像処理装置における画像処理方法であって、
前記入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を前記記憶手段から読み出して閾値と比較することで前記出力階調値に量子化する量子化工程と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算工程と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散工程と、
前記記憶手段に記憶された未処理画素の少なくとも前記入力階調値のうち所定値を、前記拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を前記記憶手段に記憶させる補正工程と、
を備え、前記所定値が移動された前記未処理画素が前記注目画素となったとき前記量子化工程では前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とする画像処理方法。 - 画素ごとに所定の階調値を有する入力データが入力されて量子化された2値以上の階調数を有する出力階調値を得る画像処理をコンピュータに実行させるプログラムであって、
前記入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで前記出力階調値に量子化する量子化処理と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算処理と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散処理と、
前記記憶手段に記憶された第1の未処理画素の少なくとも前記入力階調値のうち所定値を、前記注目画素近傍の第2の未処理画素に移動させ移動後の値を前記記憶手段に記憶させる補正処理と、
を備え、前記第2の未処理画素が前記注目画素となったとき前記量子化処理は前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とするプログラム。 - 画素ごとに所定の階調値を有する入力データが入力されて量子化された2値以上の階調数を有する出力階調値を得る画像処理をコンピュータに実行させるプログラムであって、
前記入力データのうち注目画素の入力階調値と当該注目画素に拡散された拡散誤差値とを加算した値を記憶手段から読み出して閾値と比較することで前記出力階調値に量子化する量子化処理と、
前記加算値から前記出力階調値を減算して量子化誤差を得る量子化誤差演算処理と、
前記量子化誤差に対し拡散マトリックスの各係数値で重み付けすることで前記拡散誤差値を得、当該拡散誤差値を前記注目画素周囲の未処理画素に拡散させるよう前記記憶手段に記憶させる誤差拡散処理と、
前記記憶手段に記憶された未処理画素の少なくとも前記入力階調値のうち所定値を、前記拡散誤差値の拡散により生じた重心誤差を補正する方向に移動させ移動後の値を前記記憶手段に記憶させる補正処理と、
を備え、前記所定値が移動された前記未処理画素が前記注目画素となったとき前記量子化処理は前記記憶手段から読み出した移動後の値と前記閾値とを比較することで量子化する、ことを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004195285A JP2006020019A (ja) | 2004-07-01 | 2004-07-01 | 画像処理装置、画像処理方法、及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004195285A JP2006020019A (ja) | 2004-07-01 | 2004-07-01 | 画像処理装置、画像処理方法、及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006020019A true JP2006020019A (ja) | 2006-01-19 |
Family
ID=35793843
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004195285A Pending JP2006020019A (ja) | 2004-07-01 | 2004-07-01 | 画像処理装置、画像処理方法、及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2006020019A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111901497A (zh) * | 2019-06-28 | 2020-11-06 | 厦门汉印电子技术有限公司 | 一种灰度图像处理方法、装置及打印机 |
-
2004
- 2004-07-01 JP JP2004195285A patent/JP2006020019A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111901497A (zh) * | 2019-06-28 | 2020-11-06 | 厦门汉印电子技术有限公司 | 一种灰度图像处理方法、装置及打印机 |
CN111901497B (zh) * | 2019-06-28 | 2023-06-02 | 厦门汉印电子技术有限公司 | 一种灰度图像处理方法、装置及打印机 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7903872B2 (en) | Image-processing apparatus and method, computer program, and storage medium | |
US8208172B2 (en) | Image forming apparatus and image forming method | |
US8712165B2 (en) | Image processing apparatus and image processing method | |
JP5013805B2 (ja) | プロセッサ読取可能記憶媒体 | |
US8532379B2 (en) | Image processing apparatus and image processing method | |
US7315398B2 (en) | Multi-level error diffusion with color image data | |
JP4412248B2 (ja) | 画像処理装置、画像処理方法、及び画像処理プログラム | |
JP5508031B2 (ja) | 画像処理装置および画像処理方法 | |
JP3979372B2 (ja) | 画像処理装置、画像処理方法及び画像処理プログラム | |
JP3604902B2 (ja) | 画像処理装置 | |
US7295347B2 (en) | Image processing method for generating multi-level data | |
JPWO2005109851A1 (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP4479663B2 (ja) | 固定セルによるハーフトーン処理を行う画像処理装置,画像処理方法,及び画像処理プログラム | |
JP2006020019A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
US10404892B2 (en) | Image forming apparatus for outputting a halftone image and image forming method | |
JP2012165192A (ja) | 印刷装置、および、印刷方法 | |
JP2005341351A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP4182918B2 (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2005117642A (ja) | ハーフトーン処理方法、画像処理装置、画像処理方法、及びプログラム | |
JP4337670B2 (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2006325136A (ja) | 画像処理装置、画像処理方法、及び画像処理プログラム | |
JP2005341356A (ja) | 画像処理装置、画像処理方法、及びプログラム | |
JP2018207399A (ja) | 画像処理装置、画像処理方法及びプログラム | |
JP2005341142A (ja) | 画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体 | |
JPH1070656A (ja) | 画像処理装置 |