(57)【要約】【課題】  ガンマ補正の遅延発生を抑え、補正誤差の少ない正しいガンマ補正を行う画像処理装置、画像処理方法、画像処理プログラム、またはそのプログラムを記録した記録媒体を提供することを目的とする。【解決手段】  閾値設定部は、順次生成される前記画素群内の画素数と画素ごとの階調値の総和とから算出した平均階調値に基づき、前記所定の閾値を設定する。そして、画素群生成部は、画素ごとの階調値の総和が前記所定の閾値以上となるまで画素を選択して画素群を順次生成し、基準点決定部は、生成された前記画素群について所定の基準点を決定すると、データ付与部は決定された前記所定の基準点に位置する画素に所定のデータを付与する。所定の閾値によって生成される画素群の大きさが制御され、ガンマ補正される。【選択図】      図２
2005318402.tif 000002
【特許請求の範囲】
【請求項１】
画素ごとに、対象となる画像の階調値を所定の閾値を用いて階調変換し、ドットを出力するための所定のデータを所定の画素に付与する画像処理装置であって、
画素ごとの階調値の総和が前記所定の閾値以上となるまで画素を選択して画素群を順次生成する画素群生成部と、
順次生成される前記画素群内の画素数と画素ごとの階調値の総和とに基づき、前記所定の閾値を設定する閾値設定部と、
生成された前記画素群について所定の基準点を決定する基準点決定部と、
決定された前記所定の基準点に位置する画素に前記所定のデータを付与するデータ付与部と、
を備えた画像処理装置。
【請求項２】
請求項１に記載の画像処理装置であって、
前記基準点決定部は、前記画素群における画素の位置と画素の階調値とから算出した重心位置を、前記所定の基準点として決定することを特徴とする画像処理装置。
【請求項３】
画素ごとに、対象となる画像の階調値を所定の閾値を用いて階調変換し、ドットを出力するための所定のデータを所定の画素に付与する画像処理装置であって、
画素選択のための第１の基準点に基づいて、画素ごとの階調値の総和が前記所定の閾値以上となるまで画素を選択して画素群を順次生成する画素群生成部と、
順次生成される前記画素群内の画素数と画素ごとの階調値の総和とに基づき、前記所定の閾値を設定する閾値設定部と、
生成された前記画素群について第２の基準点を決定する基準点決定部と、
決定された前記第２の基準点に位置する画素に前記所定のデータを付与するデータ付与部とを備え、
前記画素群生成部は、前記第１の基準点を更新し、該第１の基準点に基づいて前記画素を選択して前記画素群を生成し、
前記データ付与部は、前記生成された画素群内の画素ごとの階調値の総和が前記閾値以上となったとき、前記基準点決定部が決定した前記第２の基準点に位置する画素に、前記所定のデータを付与することを特徴とする画像処理装置。
【請求項４】
請求項３に記載の画像処理装置であって、
前記画素群生成手段は、前記第１の基準点に基づいて選択すべき画素が複数存在するとき、選択する画素をランダムに選択することを特徴とする画像処理装置。
【請求項５】
請求項３または４に記載の画像処理装置であって、
前記第１の基準点および前記第２の基準点は、前記画素群における画素の位置と画素の階調値とから算出した重心位置であることを特徴とする画像処理装置。
【請求項６】
請求項３または４に記載の画像処理装置であって、
前記第１の基準点は、前記画素群における画素の位置から算出した中心位置であり、前記第２の基準点は、前記画素群における画素の位置と画素の階調値とから算出した重心位置であることを特徴とする画像処理装置。
【請求項７】
請求項３または４に記載の画像処理装置であって、
前記第１の基準点および前記第２の基準点は、前記画素群における画素の位置から算出した中心位置であることを特徴とする画像処理装置。
【請求項８】
請求項３ないし７のいずれか一項に記載の画像処理装置であって、
前記画素群生成部は、前記第１の基準点を、前記画素を所定の回数選択するごとに更新
することを特徴とする画像処理装置。
【請求項９】
請求項１ないし８のいずれか一項に記載の画像処理装置であって、
前記閾値設定部は、前記所定の閾値の設定に際して、前記出力されるドットの大きさと関係付けて予め設定した閾値を用いることを特徴とする画像処理装置。
【請求項１０】
請求項１ないし９のいずれか一項に記載の画像処理装置であって、
前記画素群生成部は、前記画素群における画素ごとの階調値の総和が前記所定の閾値を超えたとき、超えた分の前記階調値を前記画素群生成部が最後に選択した画素に戻すことを特徴とする画像処理装置。
【請求項１１】
画素ごとに、対象となる画像の階調値を所定の閾値を用いて階調変換し、ドットを出力するための所定のデータを所定の画素に付与する画像処理方法であって、
画素選択のための第１の基準点に基づいて、画素ごとの階調値の総和が前記所定の閾値以上となるまで画素を選択して画素群を順次生成する画素群生成工程と、
順次生成される前記画素群内の画素数と画素ごとの階調値の総和とに基づき、前記所定の閾値を設定する閾値設定工程と、
生成された前記画素群について第２の基準点を決定する基準点決定工程と、
決定された前記第２の基準点に位置する画素に前記所定のデータを付与するデータ付与工程とを備え、
前記画素群生成工程は、前記第１の基準点を更新し、該第１の基準点に基づいて前記画素を選択して前記画素群を生成し、
前記データ付与工程は、前記生成された画素群内の画素ごとの階調値の総和が前記閾値以上となったとき、前記基準点決定工程によって決定した前記第２の基準点に位置する画素に、前記所定のデータを付与することを特徴とする画像処理方法。
【請求項１２】
画素ごとに、対象となる画像の階調値を所定の閾値を用いて階調変換し、ドットを出力するための所定のデータを所定の画素に付与する画像処理プログラムであって、
画素選択のための第１の基準点に基づいて、画素ごとの階調値の総和が前記所定の閾値以上となるまで画素を選択して画素群を順次生成する画素群生成処理と、
順次生成される前記画素群内の画素数と画素ごとの階調値の総和とに基づき、前記所定の閾値を設定する閾値設定処理と、
生成された前記画素群について第２の基準点を決定する基準点決定処理と、
決定された前記第２の基準点に位置する画素に前記所定のデータを付与するデータ付与処理とをコンピュータに実行させ、
前記画素群生成処理は、前記第１の基準点を更新し、該第１の基準点に基づいて前記画素を選択して前記画素群を生成し、
前記データ付与処理は、前記生成された画素群内の画素ごとの階調値の総和が前記閾値以上となったとき、前記基準点決定処理によって決定した前記第２の基準点に位置する画素に、前記所定のデータを付与することを特徴とするプログラム。
【請求項１３】
請求項１２に記載の画像処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像処理方法、画像処理プログラムおよびそのプログラムを記録した記録媒体に関し、詳しくは、画像データの階調値を階調変換する際に行われるガンマ補正処理技術に関する。
【背景技術】
【０００２】
従来より、スキャナやデジタルカメラなどから供給される入力画像を、レーザプリンタやインクジェットプリンタといったプリンタや、ＣＲＴや液晶といったディスプレイなどの画像出力装置を用いて再生表示させたり、あるいは、ファクシミリやデジタル複写機などといった画像出力装置を用いて再生表示させたりすることが行われている。
【０００３】
このようなプリンタやディスプレイなどの画像出力装置においては、その特性に合わせて入力画像の画像データつまり元画像データを変換するガンマ補正を行っている。たとえば、インクジェットプリンタにおいては、用紙搬送の精度や飛ばされたインク滴の着弾精度の問題に対する許容度を高めるため、インク滴によって作られる１つのドット径が画素間隔よりも大きめに設定されていたり、あるいはレーザプリンタにおいて同じような理由により、１ドットのドット面積が１画素の面積より大きくなるようにドットの形状が設定されていたりする。そのため所定の画素の位置に形成されたドットは周囲の画素へ大きくはみ出している。このため、高濃度領域ではドットが隣り合って形成されるため、はみ出し部分が隣り合うドットによって打ち消される。しかし、低濃度領域で孤立して存在する１ドットは、周囲の画素にはみ出しているため、補正なしでは元画像データに対する理想の濃度よりも大きくなってしまう。この問題を解決するために、このような画像出力装置の特性（これをガンマ特性ともいう）とは逆の特性の補正、つまり低濃度では出力するドットの数を少なくする補正をかけることがガンマ補正である。
【０００４】
一方、前述のような画像出力装置においては、最終的に、例えば前述した画素間隔より大きめなど所定の大きさのドットを出力して入力画像を再生表示する。このため、通常、誤差拡散法などの手法を用いて元画像データの階調値を２値や４値などの多値に階調変換するハーフトーン処理が行われ、このハーフトーン処理の結果に基づいて、ドットのオンオフを制御するデータを生成する画像処理が行われる。
【０００５】
ここで、このようなガンマ補正を、ハーフトーン処理に先立って行うと元画像データの階調値が有効に活用されないという問題が生ずる。例えば、上記プリンタの例のように出力が理想値よりも大きくなってしまう場合には、ガンマ補正によって元画像データの階調値「０，１，２」が「０，０，０」に、「３，４，５」が「１，１，１」に、「６，７，８」が「２，２，２」に、…、「２５４」が「２５０」に、「２５５」が「２５５」に、それぞれ階調値変換されることになる。
【０００６】
従って、ガンマ補正によって、元画像の階調値とガンマ補正後の階調値との差分の階調値が失われてしまう（例えば、階調値「１」、「２」が階調値「０」になる）ため、ガンマ補正後の階調値をハーフトーン処理すると、出力画像においてディテールが潰れたり、疑似輪郭が発生したりするという問題が生ずる。
【０００７】
この問題を解決するため、誤差拡散法において、画素ごとにドットのオンオフを示す２階調画像データに量子化する際、その画素の量子化前の階調値に対応して出力評価値を設定し、この出力評価値をガンマ特性に合わせて変化させる方法が特許文献１に開示されている。すなわち、出力評価値を実際の量子化後データよりも大きくし、この出力評価値と量子化前のデータ値との差分値を量子化誤差として拡散する。こうすることによって、拡散される量子化誤差はより小さくなり、この小さくなった量子化誤差が拡散された画素は階調値がより小さくなるため、ハーフトーン処理後、出力するドットの数をより少なく制御するものである。従って、この出力評価値の変更の度合いをガンマ特性と対応させることで、ハーフトーン処理と同時にガンマ補正を行うことになり、この結果、画像出力装置のガンマ特性に合わせてドットを出力することを可能としている。
【０００８】
また、同じく誤差拡散法において、多値のハーフトーン処理において階調変換処理に際して用いる閾値を、ガンマ特性に対応して変化させる方法が特許文献２に開示されている。特許文献２では、ガンマ補正後の階調値が同じ画素について、ガンマ補正前の階調値が異なる場合、元データが濃い方（階調値が大きい方）が濃い階調に量子化されるように誤差拡散処理の閾値を修正するものである。特許文献２では、ガンマ補正後のハーフトーン処理において、量子化に際して用いる閾値を修正することによって、画像出力装置のガンマ特性に合わせてドットを出力することを可能としている。
【０００９】
【特許文献１】特開平９−１６３１４１号公報
【特許文献２】特許公報  第３４７５４２５号
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１または２に示した従来の画像処理技術では、いずれもハーフトーン処理に誤差拡散法を用いているため、ガンマ特性が反映されるのが、原理的に注目画素から生じた量子化誤差である。従って、ガンマ補正の実質的効果が得られるのは注目画素ではなく、この量子化誤差が拡散される先である画素、つまり注目画素の近傍の画素になり、この結果、ガンマ補正の遅延が発生するという課題があった。
【００１１】
本発明は、このような課題を解決するためになされたもので、前述したガンマ補正の遅延発生を抑え、補正誤差の少ない正しいガンマ補正を行う画像処理装置、画像処理方法、画像処理プログラム、またはそのプログラムを記録した記録媒体を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成する本発明の画像処理装置は、画素ごとに、対象となる画像の階調値を所定の閾値を用いて階調変換し、ドットを出力するための所定のデータを所定の画素に付与する画像処理装置であって、画素ごとの階調値の総和が前記所定の閾値以上となるまで画素を選択して画素群を順次生成する画素群生成部と、順次生成される前記画素群内の画素数と画素ごとの階調値の総和とに基づき、前記所定の閾値を設定する閾値設定部と、生成された前記画素群について所定の基準点を決定する基準点決定部と、決定された前記所定の基準点に位置する画素に前記所定のデータを付与するデータ付与部と、を備えたことを要旨とする。
【００１３】
かかる画像処理装置によれば、階調変換処理の対象となる画像を構成する画素について、階調変換未処理画素を順次選択して画素群（以下、「セル」と呼ぶ）を生成する。そして、生成されるセル内の画素の階調値合計が、セル内の画素数と画素の階調値の総和とに基づいて設定した所定の閾値以上となったとき、ドットを出力するための所定のデータをセル内の所定の基準点に位置する画素に付与する。こうすれば、ドットが出力されるセルについて、例えば、セル内の画素の平均階調値に基づいて設定した所定の閾値によって、セルの大きさが変化することになる。従って、画像出力装置のガンマ特性に対応して所定の閾値を設定することによって、出力されるドットとセルの面積割合が変わり、ガンマ補正を行うことができる。
【００１４】
ここで、前記基準点決定部は、前記画素群における画素の位置と画素の階調値とから算出した重心位置を、前記所定の基準点として決定することとしてもよい。こうすれば、生成されるセルのおおよそ中心位置にドットが出力されることになる。従って、ドット間での距離が保たれ、前述した隣接するドットの影響が少ない正しいガンマ補正を行うことが期待できる。
【００１５】
さらに、本発明の画像処理装置は、画素ごとに、対象となる画像の階調値を所定の閾値を用いて階調変換し、ドットを出力するための所定のデータを所定の画素に付与する画像処理装置であって、画素選択のための第１の基準点に基づいて、画素ごとの階調値の総和が前記所定の閾値以上となるまで画素を選択して画素群を順次生成する画素群生成部と、順次生成される前記画素群内の画素数と画素ごとの階調値の総和とに基づき、前記所定の閾値を設定する閾値設定部と、生成された前記画素群について第２の基準点を決定する基準点決定部と、決定された前記第２の基準点に位置する画素に前記所定のデータを付与するデータ付与部とを備え、前記画素群生成部は、前記第１の基準点を更新し、該第１の基準点に基づいて前記画素を選択して前記画素群を生成し、前記データ付与部は、前記生成された画素群内の画素ごとの階調値の総和が前記閾値以上となったとき、前記基準点決定部が決定した前記第２の基準点に位置する画素に、前記所定のデータを付与することを特徴とする。
【００１６】
かかる画像処理装置によれば、階調変換処理の対象となる画像を構成する画素について、第１の基準点に基づいて階調変換未処理画素を順次選択してセルを生成する。そして、生成されるセル内の画素の階調値合計が、セル内の画素の平均階調値に基づいて設定した所定の閾値以上となったとき、ドットを出力するための所定のデータをセル内の第２の基準点に位置する画素に付与する。こうすれば、生成するセルの形状を決める基準点と、出力するドットの位置を決める基準点とを分けて設定できるため、セルの形状のみに着目してセルの生成を行うことが可能となる。従って、隣接するドットが重なる確率が減少し、セル内の画素の平均階調値に基づいて設定した所定の閾値によって、正しくガンマ補正される確率が高くなる。
【００１７】
また、前記画素群生成手段は、前記第１の基準点に基づいて選択すべき画素が複数存在するとき、選択する画素をランダムに選択することとしてもよい。こうすれば、生成するセルの形状がランダムになり易く、出力されるドットの位置がバラツクことになり、例えばドットが部分的に重なるセルが連続する場合は、その重なり具合もランダムに変化するため、画像全体についてガンマ補正への影響を少なくすることが期待できる。
【００１８】
ここで、前記第１の基準点および前記第２の基準点は、前記画素群における画素の位置と画素の階調値とから算出した重心位置であることとしてもよい。こうすれば、セルの生成処理に際して、例えば、常にセルの重心に最も近い画素を選択してセルに組み入れていくようにすると、生成されるセルの形状はセルの重心を中心としたおおよそ円形状になる。そして、その円のおおよそ中心位置にドットが形成されることになるため、例えば、同一濃度の画像を階調変換した場合、形成されるドット間距離がほぼ均一となり、隣接するドットの影響がほぼ同じになることより、正しくガンマ補正を行うことが期待できる。
【００１９】
あるいは、前記第１の基準点は、前記画素群における画素の位置から算出した中心位置であり、前記第２の基準点は、前記画素群における画素の位置と画素の階調値とから算出した重心位置であることとしてもよい。こうすれば、画素群に組み入れる画素の選択を各画素の位置を基準に算出すればよく、重心を算出する場合に比べて算出処理に関する負荷を軽減できる。また形成されるドットの位置は、生成したセルの重心位置とするため、前述したように、生成されるセルのおおよそ中心位置にドットが出力されることになる。従って、ドット間での距離が保たれ、隣接するドットの影響が少ない正しいガンマ補正を行うことが期待できる。
【００２０】
あるいは、前記第１の基準点および前記第２の基準点は、前記画素群における画素の位置から算出した中心位置であることとしてもよい。こうすれば、例えば、第１の基準点および第２の基準点を決定する処理に際して、両方とも画素の階調値を含めた演算を行う必要がなくなるので、演算量を少なくして装置全体の処理効率を上げることができる。
【００２１】
また、前記画素群生成部は、前記第１の基準点を、前記画素を所定の回数選択するごとに更新することとしてもよい。こうすれば、画素選択の基準点を毎回更新するのではなく、例えば１回おきに更新するなどとすることで、基準点の算出に関する演算量を減らすことができ、他の処理を含めた画像処理装置全体の処理速度の向上を図ることができる。
【００２２】
また、前記閾値設定部は、前記所定の閾値の設定に際して、前記出力されるドットの大きさと関係付けて予め設定した閾値を用いることとしてもよい。こうすれば、入力画像を再生表示する画像出力装置において、画像出力装置が出力するドットの大きさに合わせて、その画像出力装置のガンマ特性に最適な閾値を設定することができるため、ガンマ補正を正しく行うことが容易となる。
【００２３】
さらに、前記画素群生成部は、前記画素群における画素ごとの階調値の総和が前記所定の閾値を超えたとき、超えた分の前記階調値を前記画素群生成部が最後に選択した画素に戻すこととしてもよい。こうすれば、所定の閾値を超えたセルに最後に組み入れられた画素に、所定の閾値を超えた分の階調値を戻しているため、ハーフトーン処理前の入力画像の階調値が失われず、元の画像とほぼ同じ位置に画像全体の階調値が残るため、前述した課題であるガンマ補正の遅延を抑制することができる。
【００２４】
また、本発明の画像処理方法は、画素ごとに、対象となる画像の階調値を所定の閾値を用いて階調変換し、ドットを出力するための所定のデータを所定の画素に付与する画像処理方法であって、画素選択のための第１の基準点に基づいて、画素ごとの階調値の総和が前記所定の閾値以上となるまで画素を選択して画素群を順次生成する画素群生成工程と、順次生成される前記画素群内の画素数と画素ごとの階調値の総和とに基づき、前記所定の閾値を設定する閾値設定工程と、生成された前記画素群について第２の基準点を決定する基準点決定工程と、決定された前記第２の基準点に位置する画素に前記所定のデータを付与するデータ付与工程とを備え、前記画素群生成工程は、前記第１の基準点を更新し、該第１の基準点に基づいて前記画素を選択して前記画素群を生成し、前記データ付与工程は、前記生成された画素群内の画素ごとの階調値の総和が前記閾値以上となったとき、前記基準点決定工程によって決定した前記第２の基準点に位置する画素に、前記所定のデータを付与することを特徴とする。
【００２５】
また、本発明はコンピュータプログラムまたはそのプログラムを記録した記録媒体としてもよい。すなわち、画素ごとに、対象となる画像の階調値を所定の閾値を用いて階調変換し、ドットを出力するための所定のデータを所定の画素に付与する画像処理プログラムであって、画素選択のための第１の基準点に基づいて、画素ごとの階調値の総和が前記所定の閾値以上となるまで画素を選択して画素群を順次生成する画素群生成処理と、順次生成される前記画素群内の画素数と画素ごとの階調値の総和とに基づき、前記所定の閾値を設定する閾値設定処理と、生成された前記画素群について第２の基準点を決定する基準点決定処理と、決定された前記第２の基準点に位置する画素に前記所定のデータを付与するデータ付与処理とをコンピュータに実行させ、前記画素群生成処理は、前記第１の基準点を更新し、該第１の基準点に基づいて前記画素を選択して前記画素群を生成し、前記データ付与処理は、前記生成された画素群内の画素ごとの階調値の総和が前記閾値以上となったとき、前記基準点決定処理によって決定した前記第２の基準点に位置する画素に、前記所定のデータを付与することを特徴とする。また、このプログラムを記録した記録媒体としては、フレキシブルディスクやＣＤ−ＲＯＭ、ＩＣカード、パンチカードなど、コンピュータが読み取り可能な種々の媒体を利用することができる。
【発明を実施するための最良の形態】
【００２６】
次に、本発明を実施するための最良の形態を説明する。図１は、本発明が適用される画像処理装置を含むシステム全体の一例を示す構成図である。全体として画像入力装置１０と、画像処理装置２０と、画像出力装置３０とから構成される。これらの装置は基本的にコンピュータによって制御され、所定のオペレーティングシステムのもとで所定のプログラムが実行されることによって動作する。
【００２７】
画像入力装置１０は、アプリケーション部１１とラスタライズ部１２とから構成される。アプリケーション部１１は、文字データ、図形データ、ビットマップデータ等の印刷対象となる出力画像用のデータを生成する。例えば、画像入力装置１０でワードプロセッサや図形ツールなどのアプリケーションプログラムを使用して、図示しないキーボード等の操作により文字データや図形データなどを生成する。そして生成したこれらのデータを、ラスタライズ部１２へ出力する。もとより、画像入力装置１０は、図示しないスキャナやデジタルスチルカメラなどの画像入力機器から出力されるデータを受け付け、このデータをアプリケーション部１１が生成するデータとしてラスタライズ部１２へ出力するものとしても差し支えない。
【００２８】
ラスタライズ部１２は、アプリケーション部１１から出力された印刷対象のデータを画素ごとに８ビットの階調データに変換する。本実施形態では、Ｒ（レッド）、Ｇ（グリーン）、Ｂ（ブルー）の色毎で、画素ごとに８ビット（計２４ビット）の階調データを出力する。したがって、出力される階調データは、画素ごとに０から２５５までの２５６種類の階調値を有することになる。ラスタライズ部１２における階調データの生成処理は、実際には画像入力装置１０に実装されたドライバによって行われる。ラスタライズ部１２から出力される階調データは、画像処理装置２０に出力される。
【００２９】
画像処理装置２０は、色変換部２１とハーフトーン処理部２２とから構成される。画像処理装置２０では、画像入力装置１０から出力された階調データに対して、色変換処理とハーフトーン処理を行い、所定のデータＤＲを画像出力装置３０へ出力する処理が行われる。
【００３０】
色変換部２１は、画像入力装置１０から出力される２５６種類のレベル値を有するＲＧＢ各８ビット（計２４ビット）の階調データを受け取り、画像出力装置３０が出力する色成分に合わせて色変換処理を行う。本実施形態では、ＲＧＢの階調データを、ＲＧＢからＣＭＹの階調データＤＴに色変換処理を行うものとする。ここで、Ｃはシアン、Ｍはマゼンダ、Ｙはイエローを示す。
【００３１】
ハーフトーン処理部２２は、色変換部２１から出力されるＣＭＹの階調データＤＴに対して、所定の閾値を用いて量子化データ（２値あるいは４値などの多値の値）に変換し、変換された量子化データに対応する所定のデータＤＲを画像出力装置３０に出力する。ハーフトーン処理として、本実施形態では、複数の画素からなるセルを、画素群の重心を用いてセルを構成し、その重心にドットを生成させる処理（Circular Cell法、以下ＣＣ法）を用いる。ＣＣ法の具体的な内容は後述する。
【００３２】
画像出力装置３０は、パルス幅変調部３１と印刷エンジン３５とから構成され、印刷エンジン３５は、レーザドライバ３６とレーザダイオード（ＬＤ）３７とから構成される。画像出力装置３０では、画像処理装置２０から出力された所定のデータＤＲに従って印刷エンジン３５が駆動され、この印刷エンジン３５によって実際に印刷用紙等の記録媒体への印刷が行われ入力画像が再生表示されるのである。
【００３３】
パルス幅変調部３１は、ハーフトーン処理部２２から出力された所定のデータＤＲを入力し、この所定のデータＤＲから所定のパルス数とパルス幅をもったレーザ駆動パルスを駆動データとして生成する。そして、この駆動データをレーザドライバ３６に出力する。
【００３４】
レーザドライバ３６は、入力された駆動データから、レーザダオード３７を駆動する制御データを生成し、レーザダイオード３７に出力する。レーザダイオード３７は、レーザドライバ３６から出力された制御データに基づいて駆動され、さらに図示しない感光ドラムや転写ベルトが駆動されて、最終的に印刷用紙等の記録媒体に、パルス幅とパルス数に応じて、所定の大きさのドットが所定の数だけ出力される。こうして、画像入力装置１０からのデータが印刷されることになる。
【００３５】
次に、図２を参照して、画像処理装置２０の具体的構成について説明する。ここで、図１の画像処理装置２０を構成する色変換部２１、ハーフトーン処理部２２は、図２におけるＣＰＵ２６、ＲＡＭ２７およびＲＯＭ２８に対応する。
【００３６】
画像処理装置２０は、全体として、入出力インターフェイス（Ｉ／Ｆ）２５、ＣＰＵ２６、ＲＡＭ２７、ＲＯＭ２８、ハードディスク２９とから構成され、それらはバスを介して互いに接続されている。入出力Ｉ／Ｆ２５は、画像入力装置１０と画像処理装置２０とのインターフェイス及び画像処理装置と画像出力装置のインターフェイスの役割を果たす。入出力Ｉ／Ｆ２５には、所定の伝送方式により伝送された画像入力装置１０からのＲＧＢ階調データが入力され、画像処理装置２０で処理できるデータに変換される。ＲＧＢ階調データは、一旦ＲＡＭ２７に格納される。そして、入出力Ｉ／Ｆ２５から、所定のデータＤＲを画像出力装置３０に所定の伝送方式を用いて送出する。
【００３７】
ＣＰＵ２６は、バスを介してハードディスク２９またはＲＯＭ２８に格納されたプログラムを読み出し、この読み出したプログラムを所定のオペレーティングシステムのもとで実行することによって、画像処理装置２０として機能し、所定の処理を実行する。特に、請求項に記載した画素群生成部、閾値設定部、基準点決定部、データ付与部として機能し、後述するＣＣ法によるハーフトーン処理を実行する。
【００３８】
これらの処理を記録したプログラムは、予めハードディスク２９やＲＯＭ２８に格納されていることとしてもよいし、例えばＣＤ−ＲＯＭなどのコンピュータが読み取り可能な記録媒体によって外部から供給され、図示しないＣＤ−Ｒ／ＲＷドライブを介してハードディスク２９に記憶することによって格納されるものとしてもよい。もとより、インターネットなどのネットワーク手段を介して、プログラムを供給するサーバー等にアクセスし、データをダウンロードすることによってハードディスク２９に格納されるものとしてもよい。
【００３９】
ＲＡＭ２７は、ＣＰＵ２６の制御によって実行される各処理のワーキングメモリとして役割を果たし、処理後の各種データを格納する。ＲＡＭ２７の具体的構成等については後述する。
【００４０】
次に、以上のように構成された画像処理装置２０において行われる処理について、図３のフローチャートを用いて具体的に説明する。本実施形態では、色変換処理後のＣＭＹの階調データは、各色８ビットずつの階調データとなっており、色変換部２１が出力する階調データＤＴは、各色０から２５５まで２５６種類の階調値を有する階調データであるものとする。また本実施形態では、ハーフトーン処理部２２にて、１つの大きさのドットを出力するか否か、つまり１つのドットのオンオフを制御する２値化処理を行うものとして説明することとし、ハーフトーン処理部２２が出力する所定のデータＤＲは、Ｃ、Ｍ、Ｙそれぞれの色成分について、画素ごとに階調値０か階調値２５５かに２値化（量子化）された階調データであるものとする。最終的に、画像出力装置３０は、前述したように、出力された所定のデータ、つまり階調値２５５に量子化された全ての画素に対応してパルス幅とパルス数を生成し、所定の大きさを持った１つのドットのオンオフを制御して印刷を行うことになる。なお、図３のフローチャートで示した処理は、Ｃ、Ｍ、Ｙそれぞれの色成分の階調データに対して行われるものである。
【００４１】
この処理が開始されると、まずステップＳ２０１において、入力画像を読み込む処理を行う。具体的には、色変換部２１が出力した階調データＤＴを読み込むことによって入力画像を読み込む処理を行う。ここではＣ（シアン）の階調データが入力画像として読み込まれたものとする。読み込んだ階調データの一例を図４（ａ）に示した。ここで、読み込んだ入力画像について、入力画像はドットマトリクス状に配置された正方形の画素によって構成されているものとして考え、それぞれの画素の位置を行と列で表すこととする。例えば、ｍ行ｎ列目の画素（以降（ｎ，ｍ）と表す）には、階調値“５０”の階調データが与えられているというように表す。
【００４２】
次に、ステップＳ２０５以降の処理によって、ＣＣ法によるハーフトーン処理が行われる。具体的な処理を説明する前に、ＣＣ法についての概要を説明する。ＣＣ法によるハーフトーン処理は、ハーフトーン処理が未処理である画素のうち、最も上の行のうちで最も左にある画素を初期画素として探索し、所定の閾値に達するまで初期画素周辺の未処理画素を選択して、複数の画素からなるセルを構成する。セルを構成する未処理画素を選択する際、それまで構成したセルの重心位置から最も近い画素を選択する。そして、閾値に達するとそのセルの重心位置に位置する画素に、ドットオンを示す値（例えば“２５５”）を付与し、それ以外の画素はドットオフを示す値(例えば“０”)を付与する。ＣＣ法は、以上の処理を入力画像の全ての画素の階調データに対して行うことで、量子化された２値化データを得るのである。
【００４３】
このＣＣ法のハーフトーン処理が開始されると、ステップＳ２０５にて探索未処理画素は有るか否かの判定処理を行う。未処理画素の探索は、前述したように常に、まず水平方向に探索走査を行い、次に垂直方向へ探索走査を行う。すなわち、未処理画素が有る場合は、入力画像の全体で最も上側にある画素のうち、最も左側にある画素が探索されることになる。もとより、ハーフトーン処理の開始時では、１行１列目の画素が探索されることになる。
【００４４】
次に、判定の結果、未処理画素が有った場合（ＹＥＳ）、次のステップＳ２１０へ進む。一方、判定の結果、未処理画素が無い場合は（ＮＯ）、入力画像全体はハーフトーン処理されたものとして、２値化データを出力する処理を行い（ステップＳ２０６）、画像処理装置２０での処理を終了する。
【００４５】
ステップＳ２１０では、平均階調値による閾値設定処理を行う。この閾値設定処理によって、前述したガンマ補正を行うのである。ガンマ補正の効果について理解を容易にするため、以下
（Ａ）ガンマ補正を行わない（平均階調値による閾値設定処理を行わない）場合：
（Ｂ）ガンマ補正を行う（平均階調値による閾値設定処理を行う）場合：
に分けて説明する。平均階調値による閾値設定処理の具体的な処理内容については図６のフローチャートを用いて（Ｂ）ガンマ補正を行う処理の中で説明する。
【００４６】
（Ａ）ガンマ補正を行わない場合：
ステップＳ２１０では、所定の閾値として、常に“２５５”を設定する。次に、ステップＳ２１５にて、セルの拡大終了条件が成立するか否かを判定する処理を行う。本実施形態では、セル内の画素の階調値合計が閾値“２５５”以上であることがセルの拡大終了条件となる。そして、判定の結果、ＮＯの場合はセルを拡大する処理を行う（ステップＳ２２０）。具体的には、セルの重心から最も近い画素をセルに組み入れることによってセルの拡大を行う。一方、判定の結果、ＹＥＳの場合はセルの拡大を終了し、ステップＳ２２５へ進む。
【００４７】
ステップＳ２０５およびステップＳ２１５での処理について、図４を用いて具体的に説明する。いま、探索した未処理画素ＭＧが図４（ａ）の網掛け部で示したｍ行ｎ列目の画素（ｎ，ｍ）であり、他の画素も全て未処理画素であったとする。このとき、（ｎ，ｍ）１画素のセルＣＬが生成されたことになる。そしてセルＣＬの重心位置ＧＣは、画素（ｎ，ｍ）の中心になる。
【００４８】
次にセルＣＬ内の画素の階調値の合計は“５０”となり、“２５５”未満であるので、セルＣＬの重心位置を算出し、図４（ｂ）網掛け部で示したように、算出した重心位置ＧＣから最も近い未処理画素をセルＣＬに組み入れる。この場合、（ｎ＋１，ｍ）（ｎ，ｍ＋１）の２つが重心に最も近い画素として存在するが、本実施形態では走査方法に則した走査方向の順序に従って（ｎ＋１，ｍ）をセルに組み入れ、セルＣＬを拡大する。
【００４９】
次に、拡大したセルＣＬ内（図４（ｃ）の太枠内の部分）の画素の階調値の合計は“１００”となり、“２５５”未満であるので、セル内の画素位置と画素の階調値からセルＣＬの重心位置ＧＣを算出する（図４（ｃ））。そして、図４（ｃ）網掛け部で示したように、算出した重心位置ＧＣから最も近い画素（ｎ，ｍ＋１）（ｎ＋１，ｍ＋１）のうち、同じく走査方向の順序に従って（ｎ，ｍ＋１）をセルに組み入れ、セルＣＬを拡大する。
【００５０】
次に、拡大したセルＣＬ内（図４（ｄ）の太枠内の部分）の画素の階調値の合計は“１５０”となり、“２５５”未満であるので、セルＣＬ内の画素位置と画素の階調値からセルＣＬの重心位置ＧＣを算出する。そして、図４（ｄ）網掛け部で示したように、算出した重心位置ＧＣから最も近い画素（ｎ＋１，ｍ＋１）をセルに組み入れ、セルＣＬを拡大する。
【００５１】
次に、拡大したセルＣＬ内（図４（ｅ）の太枠内の部分）の画素の階調値の合計は“２０５”となり、“２５５”未満であるので、セルＣＬ内の画素位置と画素の階調値からセルＣＬの重心位置ＧＣを算出する。そして、図４（ｅ）網掛け部で示したように、算出した重心位置ＧＣから最も近い画素（ｎ＋１，ｍ＋２）をセルに組み入れ、セルＣＬを拡大する。
【００５２】
次に、拡大したセルＣＬ内（図４（ｆ）の太枠内の部分）の画素の階調値の合計は“２５５”となり、セルの拡大終了条件を満たすので、セルＣＬの拡大処理を終了する。
【００５３】
次にステップＳ２２５（図３）では、セル内の画素の階調値合計が閾値と等しいか否かを判定する処理を行う。判定の結果閾値と等しい場合は（ＹＥＳ）、前述の処理と同様、セル内の画素位置と画素の階調値からセルの重心位置ＧＣを算出する処理を行う（ステップＳ２２９）。そして、算出した重心位置ＧＣに存在する画素に、所定のデータを付与する処理を行い（ステップＳ２３０）、ステップＳ２０５に戻って未処理画素の探索処理以降を繰り返す。
【００５４】
図４（ｆ）に示したように、本実施形態では、ステップＳ２３０で、ステップＳ２２９によって算出した重心位置ＧＣに存在する画素（ｎ＋１，ｍ＋１）に、閾値と同じ階調値“２５５”を所定のデータとして与える。この階調値“２５５”が与えられた画素の位置に、最終的にＣ（シアン）色の所定の大きさのドットが出力され、画像が印刷されるのである。
【００５５】
一方、ステップＳ２２５で判定の結果、閾値と等しくない場合つまり閾値を超える場合は（ＮＯ）、閾値を超える階調値分を無視してセルの重心を算出する処理を行う（ステップＳ２２６）。そして、この閾値を超える階調値分（以下、これを「誤差データ」と呼ぶ）を最後にセルに組み入れた画素に戻す処理を行い（ステップＳ２２７）、誤差データを戻した画素を未処理画素とする処理を行う（ステップＳ２２８）。そして、ステップＳ２３０に進み、算出した重心位置に存在する画素に、閾値と同じ階調値“２５５”を与える処理を行う。
【００５６】
ステップＳ２２６からＳ２２８までの処理について、図５を用いて具体的に説明する。図５（ａ）は、図４（ｆ）にて説明したセルＣＬ１の生成処理に続き、ステップＳ２０５にて、所定の走査方法による走査方向に従って画素（ｎ＋２，ｍ）が未処理画素として探索された状態を示している。そして図４にて説明した処理と同様に処理を行い、図５（ｂ）では画素（ｎ＋２，ｍ＋１）を、図５（ｃ）では画素（ｎ＋３，ｍ＋１）を、図５（ｄ）では画素（ｎ＋３，ｍ＋２）をセルＣＬ２に組み入れてセルを拡大する。
【００５７】
図５（ｅ）に示したように、画素（ｎ＋３，ｍ＋２）がセルＣＬ２に組み入れた時点で、セルＣＬ２内の画素の階調値合計は“２６５”となり、閾値“２５５”を超える。そこで、超えた分の誤差データ“１０”（＝２６５−２５５）を無視し、画素（ｎ＋３，ｍ＋２）が階調値“５０”（＝６０−１０）であるとしてセルＣＬ２の重心位置ＧＣ２を算出する。
【００５８】
そして、図５（ｆ）に示したように、算出した重心位置ＧＣ２に存在する画素（ｎ＋３，ｍ＋１）に階調値“２５５”を付与する。このとき、最後にセルＣＬ２に組み入れた画素（ｎ＋３，ｍ＋２）に誤差データ“１０”を戻す。そして、画素（ｎ＋３，ｍ＋２）を階調値“１０”を有する未処理画素とし、セルＣＬ２から除外する。
【００５９】
以上説明したように、ガンマ補正を行わない場合のＣＣ法によるハーフトーン処理では、図４（ａ）に示した入力画像の階調データは、図５（ｆ）に示した２値化データとして出力される。
【００６０】
（Ｂ）ガンマ補正を行う場合：
ステップＳ２１０で行う平均階調値による閾値設定処理について、図６のフローチャートを用いて説明する。この処理が開始されると、まずステップＳ２１１でセル内の画素数を記憶する処理を行う。次に、ステップＳ２１２で、セル内の画素の階調値の合計値を記憶する処理を行う。そして、次のステップＳ２１３にて、セル内の画素の平均階調値を算出する処理を行う。
【００６１】
セル内の画素の平均階調値（以下、単に「平均階調値」と呼ぶ）ＨＫは、セル内の画素数をＧＮ、セル内の画素の階調値の合計値をＫＧとすると、次の演算式（式１）から求められる。
【００６２】
（式１）
ＨＫ＝Ｆｏｒｍａｔ（ＫＧ／ＧＮ）
ここで、「Ｆｏｒｍａｔ」は小数点以下を四捨五入することを意味する関数である。
【００６３】
本実施形態では、セル内の画素数ＧＮは、セルの拡大処理（図３ステップＳ２２０）にてセルに組み入れられた画素を含むものとする。もとより、セルの拡大処理にてセルに組み入れられた画素を含まず、拡大処理前のセル内の画素数としてもよい。
【００６４】
次に、ステップＳ２１４にて、閾値変換テーブルを参照して閾値を設定する処理を行い、閾値設定処理ルーチンを終わりステップＳ２１５に戻る。
【００６５】
本実施形態では、図７に示した閾値変換テーブルＴＢ１を参照して閾値を設定する。閾値変換テーブルＴＢ１は、出力ドット数が１個分で表された１種類の大きさのドットサイズを持ったドットを、生成したセルの所定の画素に出力する場合に、平均階調値ＨＫに合わせて閾値ＳＨを設定したものである。閾値変換テーブルＴＢ１では、最高濃度を表す階調値“２５５”では同じ値の閾値“２５５”とし、低濃度側になるほど閾値が大きくなるように設定されている。つまり、平均階調値が小さくなるほど大きい閾値を設定することによってガンマ補正を行うのである。もとより、閾値変換テーブルを用いず、所定の演算式を用いて算出し設定することとしてもよい。例えば、演算式（式２）によってＳＨを算出し、算出した値を閾値ＳＨとして設定するものとしてもよい。
【００６６】
（式２）
ＳＨ＝ＩＮＴ（２５５＋（２５５−ＨＫ）×０．９）
ここで、平均階調値ＨＫ＝０のときは、ドットの出力は無いので閾値ＳＨは設定されない。また「ＩＮＴ」は小数点以下の端数を切り捨てることを意味する関数である。なお本実施形態では、（式２）は、閾値変換テーブルＴＢ１を演算式で表したものである。
【００６７】
以上説明した平均階調値による閾値設定処理を、セルの拡大処理（図３ステップＳ２２０）が行われるごとに繰り返し行うことによって、閾値はセル内の画素の平均階調値に合わせて設定されることになる。
【００６８】
そして、セルの拡大終了条件が成立したとき（ステップＳ２１５：ＹＥＳ）、つまりセル内の画素の階調値合計が、ステップＳ２１０で設定された閾値以上となったとき、ステップＳ２２５に進む。
【００６９】
ステップＳ２１０、Ｓ２１５、Ｓ２２０での処理について、図８を用いて具体的に説明する。図８（ａ）は、図４（ｆ）に示した状態と基本的に同じ状態を示したものである。この後、前述のガンマ補正を行わない場合は、図５（ａ）にしめしたように、新たな未処理画素が探索され、走査方法に従って画素（ｎ＋２，ｍ）が選択されるが、ガンマ補正を行う場合は、セルＣＬ１内の画素の階調値合計が、セルＣＬ１内の画素の平均階調値に基づいて設定された閾値未満であればセルを拡大する。
【００７０】
図８（ａ）では、セルＣＬ１内の画素数は“５”、階調値合計は“２５５”であることより、平均階調値ＨＫは“５１”（＝２５５／５）となる。このときの閾値は、図７に示した閾値変換テーブルＴＢ１または（式２）を用いて求められ、閾値ＳＨ“４３８”が設定される。
【００７１】
このとき、セルＣＬ１内の画素の階調値合計は“２５５”で、閾値ＳＨ“４３８”未満であるので、図８（ａ）網掛け部で示したように、重心位置ＧＣ１から最も近い未処理画素（ｎ，ｍ＋２）をセルに組み入れ、セルＣＬ１を拡大する。
【００７２】
次に、拡大したセルＣＬ１内（図８（ｂ）の太枠内の部分）の画素の階調値合計は“３０５”となり、このときの平均階調値は“５０．８”（＝３０５／６）と算出される。本実施形態では、算出された平均階調値が小数点を含む場合、四捨五入によって整数値化され、平均階調値ＨＫは“５１”となる。もとより、小数点以下を切り捨てたり、切り上げしたりして整数値化するものとしてもよい。
【００７３】
平均階調値ＨＫ“５１”より、閾値ＳＨは“４３８”であるので、セルを拡大するため、セル内の画素位置と画素の階調値からセルＣＬの重心位置ＧＣ１を算出する（図８（ｂ））。そして、図８（ｂ）網掛け部で示したように、算出した重心位置ＧＣ１から最も近い画素（ｎ＋２，ｍ＋１）をセルに組み入れ、セルＣＬ１を拡大する。
【００７４】
次に、拡大したセルＣＬ１内（図８（ｃ）の太枠内の部分）の画素の階調値合計は“３５５”となり、このときの平均階調値ＨＫは“５０．７”（＝３５５／７）と算出され、四捨五入によって“５１”となる。従って、設定される閾値ＳＨは“４３８”であるので、セルを拡大する処理が行われ、セルＣＬ１内の画素位置と画素の階調値からセルＣＬ１の重心位置ＧＣ１を算出する。そして、算出した重心位置ＧＣ１から最も近い画素をセルに組み入れ、セルＣＬ１を拡大する。
【００７５】
図８（ｃ）に示した場合では、網掛け部で示したように、（ｎ＋２，ｍ）または（ｎ＋２，ｍ＋２）の２つの画素が重心位置ＧＣ１から最も近い画素として存在する。この場合も図４（ｂ）（ｃ）にて説明したように、走査方法に則した走査方向の順序に従って（ｎ＋２，ｍ）をセルに組み入れ、セルＣＬ１を拡大する。
【００７６】
次に、拡大したセルＣＬ１内（図８（ｄ）の太枠内の部分）の画素の階調値合計は“４０５”となり、このときの平均階調値ＨＫは“５０．６”（＝４０５／８）と算出され、四捨五入によって“５１”となる。従って、設定される閾値ＳＨは“４３８”であるので、セルを拡大するため、セルＣＬ１内の画素位置と画素の階調値からセルＣＬ１の重心位置ＧＣ１を算出する。そして、算出した重心位置ＧＣ１から最も近い画素（ｎ＋２，ｍ＋２）をセルに組み入れ、セルＣＬ１を拡大する。
【００７７】
次に、拡大したセルＣＬ１内（図８（ｅ）の太枠内の部分）の画素の階調値合計は“４５５”となり、このときの平均階調値ＨＫは“５０．５”（＝４５５／９）と算出され、四捨五入によって“５１”となる。従って、設定される閾値ＳＨは“４３８”であるので、セル内の画素の階調値合計が閾値以上となり、今度はセルの拡大終了条件が成立するので、セルＣＬ１の拡大処理を終了する。以上の処理が図３のステップＳ２１０、Ｓ２１５、Ｓ２２０にて行われるのである。
【００７８】
次にステップＳ２２５で、セル内の画素の階調値合計が閾値と等しいか否かを判定する処理を行う。判定の結果閾値と等しい場合は（ＹＥＳ）、前述の処理と同様、セル内の画素位置と画素の階調値からセルの重心位置ＧＣ１を算出する処理を行う（ステップＳ２２９）。そして、算出した重心位置ＧＣ１に存在する画素に、所定のデータを付与する処理を行い（ステップＳ２３０）、新たなセルを生成するためステップＳ２０５に戻って未処理画素の探索処理以降を繰り返す。
【００７９】
図８（ｆ）に示したように、本実施形態では、ステップＳ２３０で、ステップＳ２２９によって算出した重心位置ＧＣ１に存在する画素（ｎ＋１，ｍ＋１）に、ドットオンを示す階調値“２５５”を所定のデータとして与える。この階調値“２５５”が与えられた画素の位置に、最終的にＣ（シアン）色の所定の大きさのドットが出力され、画像が印刷されるのである。
【００８０】
一方、ステップＳ２２５での判定処理の結果、閾値と等しくない場合つまり閾値を超える場合は（ＮＯ）、閾値を超える階調値分つまり誤差データを無視してセルの重心を算出する処理を行う（ステップＳ２２６）。そして、最後にセルに組み入れた画素にこの誤差データを戻す処理を行い（ステップＳ２２７）、誤差データを戻した画素を未処理画素とする処理を行って（ステップＳ２２８）、ステップＳ２３０に進む。
【００８１】
ステップＳ２２６からＳ２２８までの処理について、図８（ｆ）を用いて具体的に説明する。図８（ｅ）に示したように、画素（ｎ＋２，ｍ＋２）がセルＣＬ１に組み入れた時点で、セルＣＬ１内の画素の階調値合計は“４５５”となり、閾値“４３８”を超える。そこで、超えた分の誤差データ“１７”（＝４５５−４３８）を無視し、画素（ｎ＋２，ｍ＋２）が階調値“３３”（＝５０−１７）であるとしてセルＣＬ１の重心位置ＧＣ１を算出する。次に、最後にセルＣＬ１に組み入れた画素（ｎ＋２，ｍ＋２）に誤差データ“１７”を戻す。そして、画素（ｎ＋２，ｍ＋２）を階調値“１７”を有する未処理画素とし、セルＣＬ１から除外するのである。
【００８２】
ステップＳ２３０では、図８（ｆ）に示したように、算出した重心位置ＧＣ１に存在する画素（ｎ＋１，ｍ＋１）に階調値“２５５”を付与する。以降、ステップＳ２０５に戻り、未処理画素が無くなるまで同様な処理を繰り返し、入力画像全体のハーフトーン処理が終了すると（ステップＳ２０５：ＮＯ）、２値化データを出力して（ステップＳ２０６）、画像処理装置２０での処理を終了する。
【００８３】
以上説明したように、ガンマ補正を行う場合のＣＣ法によるハーフトーン処理では、図４（ａ）に示した入力画像の階調データは図８（ｆ）に示した２値化データとして出力される。
【００８４】
図９（ａ）は、図５（ｆ）に示したガンマ補正を行わない場合に出力される２値化データにしたがって、最終的に画像出力装置３０によって出力されるドットＤＯＴを示している。ガンマ補正を行わない場合は、図９（ａ）に示したように、５画素ないし４画素に対して１つのドットが出力される。一方、図９（ｂ）は、図８（ｆ）に示したガンマ補正を行う場合に出力される２値化データにしたがって、最終的に画像出力装置３０によって出力されるドットＤＯＴを示している。ガンマ補正を行う場合は、図９（ｂ）に示したように、８画素に対して１つのドットが出力される。つまり、図９（ａ）に比べて、画像全体で出力されるドットの数が少なくなり、前述したようにガンマ補正が行われる。
【００８５】
これまでの説明から明らかなように、平均階調値に基づいて閾値変換テーブルＴＢ１や（式２）によって設定される閾値の大きさによって、生成されるセルの大きさが変わる。従って平均階調値が小さくなるほどセルが大きく形成されるため、出力されるドットの面積割合は少なくなり、ガンマ補正が行われるのである。もとより、閾値は、画像出力装置３０のガンマ特性に合わせて設定される値であり、本実施形態で設定した値になんら制限されるべきものでないことは言うまでもない。
【００８６】
また本実施形態において説明したように、ＣＣ法によるハーフトーン処理においては、誤差データを元の画素に戻すため、誤差データが別のセルに拡散されない。従って、入力画像データの歪みが小さくなり、入力画像の階調データに対して比較的忠実に階調変換処理を行うことができる。この結果、特許文献１または２に示した誤差拡散法を用いた従来のハーフトーン処理技術において、課題であったガンマ補正の遅延を抑えることができるのである。
【００８７】
また、ＣＣ法によれば、セルの重心に最も近い画素を選択してセルに組み入れていくため、図８（ｆ）から明らかなように、生成されるセルの形状は重心を中心としておおよそ円形になる。従って、セルの重心に出力されるドットは、セルのほぼ中央の位置となるため、ドットが重なる確率は低くなり、ガンマ補正が正しく行われることが期待できる。
【００８８】
次に、本実施形態における画像処理装置２０のハード構成において、各ハードが行う具体的なハーフトーン処理の内容を、図３のフローチャートと図２の構成図を参照して説明する。
【００８９】
まず、ＣＰＵ２６は、ハードディスク２９またはＲＯＭ２８に格納されたプログラムを読み出して、入力画像の読み込み処理を開始する（ステップＳ２０１）。入力画像の読み込みは、画像入力装置１０から出力された画像データを入出力Ｉ／Ｆ２５を介してＲＡＭ２７に取り込むことで行う。このとき、Ｃ、Ｍ、Ｙ各色成分の入力画像データは、ＲＡＭ２７の所定領域である入力バッファ領域に格納される。この例を図１０（ａ）に示す。
【００９０】
ＲＡＭ２７は、図１０（ａ）に示すように、入力バッファ領域２７１と、ワーキングメモリ領域２７２と、出力バッファ領域２７３とから構成される。この入力バッファ領域２７１は、２次元構造を有しており、例えば上述の入力画像の画素（以降、入力画素）について、（ｎ，ｍ）に位置する入力画素は、入力バッファ領域の（ｎ，ｍ）のアドレスに格納される。入力画素の位置に対応するように入力バッファ領域２７１が構成される。実際には、このアドレスには入力画像データの階調値が格納されることになる。例えば、シアン色の入力画像データの階調値が入力されると、図１０（ａ）に示すように入力バッファ２７１に各画素のシアン色成分の階調値が格納される。ワーキングメモリ領域２７２は、重心位置の算出結果である（ｘ，ｙ）座標、セル内の画素の階調値合計の算出結果、セル内の画素数ＧＮ、セル内の画素の平均階調値の算出結果ＨＫ、セルの閾値ＳＨが格納され、出力バッファ領域２７３は入力バッファ２７１と同様に各入力画素の位置に対応するように構成される。詳細は後述する。
【００９１】
次いで、ＣＰＵ２６は、セル生成の最初の未処理画素となる初期画素を探索決定して（ステップＳ２０５）、決定した初期画素の画素数ＧＮと階調値からセルの平均階調値ＨＫを算出し、閾値ＳＨを設定する（ステップＳ２１０）。閾値ＳＨの設定は、具体的にはＲＯＭ２８に格納された閾値変換テーブルＴＢ１を読み出し、算出した平均階調値ＨＫに対応する閾値ＳＨをワーキングメモリ２７２に格納して行う。もとより、閾値変換テーブルＴＢ１はハードディスク２９に格納されていてもよく、この場合はＣＰＵ２６は閾値変換テーブルＴＢ１をハードディスク２９から読み出す。次いで、ＣＰＵ２６はセル内の画素の階調値合計が設定した閾値より小さいか否かを判断する（ステップＳ２１５）。具体的には、ＲＡＭ２７のワーキングメモリ２７２に格納した閾値を読出し、ＲＡＭ２７の入力バッファ２７１から読み出した初期画素の階調値と比較し、閾値よりも小さい場合はステップＳ２２０に移行し、閾値と同じか大きいときはステップＳ２２５に移行する。
【００９２】
初期画素の決定は、ＲＡＭ２７の入力バッファ２７１に格納された入力画像データのうち、入力画素の位置で最も上で左側に位置する未処理画素をＣＰＵ２６が選択する。すなわち、図１０（ａ）に示す例では、（ｎ，ｍ）に対応する位置に位置する画素を初期画素としてＣＰＵ２６は判断する。以下、説明を簡単にするため、（ｎ，ｍ）＝（０，０）として説明する。
【００９３】
ステップＳ２０５において、ＣＰＵ２６は、初期画素の画素数“１”を、ワーキングメモリ２７２の所定のアドレス「ｇｎ」に格納する。そして、格納した画素数ＧＮと入力バッファ２７１から読み出した初期画素の階調値“５０”とから、ＲＯＭ２８に格納された（式１）を読み出して平均階調値“５０”を算出し、算出結果をワーキングメモリ２７２のアドレス「ｈｋ」に格納する（図１０（ｂ）参照）。
【００９４】
次いで、ＣＰＵ２６は、ＲＯＭ２８に格納された閾値変換テーブルＴＢ１を読み出し、アドレス「ｈｋ」に格納された平均階調値“５０”に基づいて対応する閾値“４３９”を読み出し、ワーキングメモリ２７２の閾値アドレス「ｓｈ」に格納する（図６、ステップＳ２１４）。
【００９５】
次いでＣＰＵ２６は、セルつまり初期画素の階調値が閾値ＳＨより小さいか否かを判断する（ステップＳ２１５）。具体的には、ＣＰＵ２６は、ＲＡＭ２７の入力バッファ２７１に書き込んだ初期画素の画素値とワーキングメモリに書き込んだ閾値ＳＨとを比較する。例えば図１０（ｂ）の例では、初期画素の階調値は“５０”であり、アドレス「ｓｈ」に格納されている値は“４３９”であるため、セルの階調値合計は閾値より小さいことになる。
【００９６】
ステップＳ２１５で閾値より小さいと判断された場合（ＮＯ）、ＣＰＵ２６は、未処理画素の選択を行いセルを拡大する処理を行う（ステップＳ２２０）。このセルを拡大する処理に際して、ＣＰＵ２６は、新たに選択した未処理画素の画素数“１”をワーキングメモリ２７２のアドレス「ｇｎ」に加算して格納するとともに、初期画素の階調値をワーキングメモリ２７２のアドレス「ｓｕｍ」に加算して格納する。初期画素の場合は、以前に格納されている階調値は存在していないため、ここでは初期画素の階調値が書き込まれる。以降、ＣＰＵ２６は、セルを拡大する処理に際して、新たに選択した画素数“１”と、それまでに選択された未処理画素の階調値を加算して、それぞれアドレス「ｇｎ」「ｓｕｍ」に格納する処理を行う。
【００９７】
同時にＣＰＵ２６は、選択した初期画素に対応する入力バッファ２７１に“−１”を格納する。未処理画素の選択処理で、再度当該画素が選択されないようにするためである。以降ＣＰＵ２６は、未処理画素の選択処理に際して、選択処理と同時もしくは選択処理以前に、既に選択された画素に対応する入力バッファ２７１に“−１”を格納する処理を行う。このような処理を行うのは、入力バッファ２７１に格納された階調値は、その合計値としてワーキングメモリ２７２のアドレス「ｓｕｍ」に格納され、以後の処理で必要とされないからである。
【００９８】
なお、ＣＰＵ２６は、入力バッファ２７１に“−１”を格納させているが、これに限ることはなく、他の負の値や特定値などによっていわゆるマーキング処理を行うこととしてもよい。さらに入力バッファ２７１と同様の構成のメモリ領域を用意して、選択した画素に対応する位置にフラグを立てて、選択画素が処理済みか否かを判別するようにしてもよい。
【００９９】
また、ＣＰＵ２６は、ステップＳ２１５で初期画素の階調値が閾値より小さいと判断された場合は、初期画素に対応する出力バッファ２７３に“０”を格納し、ステップＳ２１５で初期画素の階調値が閾値以上と判断された場合は、その時点で初期画素に対応する出力バッファ２７３に“２５５”を格納する。この画素にドットを出力する（打つともいう）処理を行うためである。ここでは、図１０（ｂ）に示すように、選択した画素に対応するＲＡＭ２７の出力バッファ２７３に“０”がＣＰＵ２６によって格納されることになる。
【０１００】
未処理画素の選択は、セルの重心を利用して行う。重心を利用して画素の選択を行うことによって、最終的に生成されるセルの形状は、円状となり、その重心にドットを形成させることで、ドット間距離が均一となり、ドットの重なりに起因する補正誤差が少ない正しいガンマ補正を行うことが期待できるのである。
【０１０１】
ＣＰＵ２６は初期画素の位置する画素の階調値と、そのアドレス位置とを読み出し、重心を算出する。ＣＰＵ２６は、具体的に以下の演算式（式３）を用いて算出し、重心位置を求める。
【０１０２】
（式３）
ｘ重心＝｛｛（セルの重心のｘ座標）×（セル内の画素の階調値合計）｝＋｛（選択した未処理画素のｘ座標）×（選択した未処理画素の階調値）｝}／（セル内の画素の階調値合計＋選択した未処理画素の階調値）
ｙ重心＝｛｛（セルの重心のｙ座標）×（セル内の画素の階調値合計）｝＋｛（選択した未処理画素のｙ座標）×（選択した未処理画素の階調値）｝}／（セル内の画素の階調値合計＋選択した未処理画素の階調値）
（ｘ重心、ｙ重心は重心位置の座標）
この演算式はＲＯＭ２８に格納され、ステップＳ２２０にてＣＰＵ２６が読み出してこの演算を行うことになる。もとより、初期画素の場合は、セルの重心のｘ、ｙ座標は０として算出される。なお、ＣＰＵ２６は、算出した重心位置（０，０）を、上述したワーキングメモリ領域２７２に用意されたアドレス「ｘ」「ｙ」に格納する（図１０（ｂ）参照）。
【０１０３】
未処理画素の選択処理は、ステップＳ２２０で算出した重心から最も近い距離にある画素を選択することによって行う。このとき、ＲＡＭ２７の入力バッファの所定位置に格納されている入力画像データから、アドレス（１，０）にある画像データか、アドレス（０，１）にある画像データが選択される。２つの画素ともアドレス（０，０）から等距離にあるからである。ここで、いずれかの画素を選択する必要があるが、本実施形態では走査方向に従ってＣＰＵ２６が０行１列のアドレス（１，０）にある画素データを選択する。こうしてセルを拡大する処理が行われるのである。
【０１０４】
セルの拡大処理において、ＣＰＵ２６は、ワーキングメモリ２７２のアドレス「ｓｕｍ」に書き込んだ画素の階調値“５０”と、ステップＳ２２０で選択した画素の入力バッファ２７１に格納された階調値“５０”とを読出し、階調値合計“１００”を算出する。また、ＣＰＵ２６は、選択した画素数“１”を加算してワーキングメモリ２７２の所定のアドレス「ｇｎ」に格納する。この結果、拡大したセルの画素数は“２”となる（図１０（ｃ）参照）。
【０１０５】
次いで、ＣＰＵ２６は、再びセル内の画素の平均階調値を算出して閾値を設定する（ステップＳ２１０）。具体的に、ＣＰＵ２６は、格納した画素数ＧＮと算出したセル内の画素の階調値合計とから、ＲＯＭ２８に格納された（式１）を読み出して平均階調値“５０”を算出し、算出結果をワーキングメモリ２７２のアドレス「ｈｋ」に格納する。そして、ＲＯＭ２８に格納された閾値変換テーブルＴＢ１を再び読み出し、算出した平均階調値“５０”に対応する閾値“４３９”をワーキングメモリ２７２の閾値アドレス「ｓｈ」に格納する。なお、ＣＰＵ２６はＲＡＭ２７に設けられた各アドレスに数値を格納する際、前回格納された値を上書きして格納する。もとより、前述したようにアドレス「ｓｕｍ」では加算処理が行われる。
【０１０６】
次いでＣＰＵ２６は、算出されたセルの階調値合計が閾値ＳＨより小さいか否かを再び判断する（ステップＳ２１５）。すなわち、選択した未処理画素の階調値を含めたセル内の画素の階調値合計が閾値“４３９”に達したか否かを判断する。
【０１０７】
具体的には、ＣＰＵ２６は、ワーキングメモリ２７２のアドレス「ｓｕｍ」に書き込んだ値と入力バッファ２７１に格納された選択画素の階調値とを合計した値と、ワーキングメモリ２７２のアドレス「ｓｈ」に書き込んだ値とを比較する。例えば図１０（ｃ）の例では、図１０（ｂ）に示したアドレス「ｓｕｍ」に格納されている値“５０”と入力バッファ２７１のアドレス（１，０）に格納された値“５０”との合計値“１００”と、アドレス「ｓｈ」に格納されている値“４３９”とを比較する。この場合、セル内の画素の階調値合計は閾値より小さいことになる。
【０１０８】
セル内の画素の階調値合計が閾値を超えない場合（ステップＳ２１５：ＮＯ）、ＣＰＵ２６は、再び選択した未処理画素を含めた重心の算出を行う（ステップＳ２２０）。具体的なＣＰＵ２６の演算は、上述した（式３）の演算式を用いて行うことになる。これまで求めたセルの重心のｘ、ｙ座標は、（０，０）で重心の階調値は“５０”、未処理画素のｘ、ｙ座標は（１，０）で、その階調値は“５０”であるので、算出される重心位置は（０．５，０）となる。このステップＳ２２０で算出した重心位置は、ＣＰＵ２６の制御によってＲＡＭ２７のワーキングメモリ２７２の所定のアドレスに格納される。ステップＳ２２０での前回の処理で、ワーキングメモリ２７２のアドレス「ｘ」「ｙ」には初期画素の重心位置が格納されていたが、その位置に上書きして格納する。その格納後の例を図１０（ｃ）に示す。
【０１０９】
ここで、重心位置は上述の（式３）で算出した重心位置が（０．５，０）であるように必ずしも整数値になるとは限らない。このように重心が整数値にならない場合は、画素の中心が重心に最も近い画素の中心を重心として置き換えるようにしてもよい。このようにすることで、重心位置は整数値として演算でき、ＣＰＵ２６が処理する計算量の削減が期待できる。またこのようにしたとき、図１０（ｃ）に示したように重心位置が複数の画素の中間位置になる場合は、所定の選択方法を定めて選んだり、あるいはランダムに画素を選んだりしてもよい。
【０１１０】
以上のように、ステップＳ２１０、Ｓ２１５、Ｓ２２０の処理を繰り返すたびに、ＣＰＵ２６は、セル内の画素の階調値合計が、セルの平均階調値に基づいて設定された所定の閾値と等しいか否か判断しながらその閾値に達するまでセルを拡大していく。また、所定の閾値に達していない場合、上述したようにＣＰＵ２６は、セルに組み入れた入力画素の位置に対応した出力バッファ２７３の位置に“０”を格納する。
【０１１１】
図１１（ａ）は、上述した処理が繰り返し行われ、未処理画素（２，０）がセルに組み入れたときの状態を示したものである。未処理画素（２，０）の階調値“５０”とアドレス「ｓｕｍ」の値“３５５”との合計値“４０５”と、アドレス「ｇｎ」の値“８”とによって算出した平均階調値ＨＫ“５１”から、閾値変換テーブルＴＢ１により設定された閾値ＳＨ“４３８”をＣＰＵ２６が読み出し、両者を比較する。図１１（ａ）では、セル内の画素の階調値合計がまだ閾値ＳＨに達していないので、画素（２，０）をセルに組み込み、セルを拡大する処理のために、ワーキングメモリ２７２には新たに算出した重心位置が、また選択した未処理画素（２，０）に対応する入力バッファ２７１には“−１”が、出力バッファ２７３には“０”がそれぞれ格納される。
【０１１２】
図１１（ｂ）は、図１１（ａ）に引き続き行われる処理を示したもので、入力画素（２，２）が重心位置に最も近い画素として選択された状態を示し、このとき、セル内の画素の階調値合計が“４５５”になった状態を示している。ＣＰＵ２６は、前述した処理を同様に繰り返し、ＲＡＭ２７のワーキングメモリ２７２に格納されたこれまでセルに組み込まれた画素の階調値合計“４０５”と画素（２，２）の階調値“５０”との合計値を算出し、これとセルの画素数“９”とを用いて平均階調値“５１”を算出する。そして、算出した平均階調値より閾値変換テーブルＴＢ１を読み出し閾値“４３８”を設定して、セル内の画素の階調値合計と閾値とを比較する。
【０１１３】
図１１（ｂ）に示した状態では、セル内の画素の階調値合計が閾値以上となるため、セルの拡大終了条件が成立し（ステップＳ２１５：ＹＥＳ）、ＣＰＵ２６は、以降の処理について、ステップＳ２２５での判定結果によって、処理方法を分けて実施する。
【０１１４】
まず、ステップＳ２２５でセル内の画素の階調値合計が閾値を超える場合（ＮＯ）、処理はステップＳ２２６に移行し、閾値を超えた場合の重心演算処理を行う。
【０１１５】
ステップＳ２２６では、閾値を超える階調値分つまり誤差データを無視してセルの重心を算出する処理を行う。このためまず、ＣＰＵ２６は、セル内の画素の階調値合計を閾値から、すなわちこれまでステップＳ２２０で格納したワーキングメモリ２７２のアドレス「ｓｕｍ」の値をアドレス「ｓｈ」の値から引く演算を行う。例えば図１２（ａ）に示したように、「ｓｈ」は“４３８”、ステップＳ２２０でこれまで格納した階調値である「ｓｕｍ」は“４０５”であるので、ＣＰＵ２６がこれらの値を読み出して４３８−４０５＝３３の値を算出する。
【０１１６】
そして、ＣＰＵ２６が、この“３３”の値を画素（２，２）の階調値として重心の算出を行うことによって誤差データが無視されることになる。重心の算出は具体的には、以下の演算式（式４）を用いる。
【０１１７】
（式４）
ｘ重心＝｛｛（セルの重心のｘ座標）×（セル内の画素の階調値合計）｝＋｛（選択した未処理画素のｘ座標）×（ステップＳ２２６で算出した選択画素の階調値）｝｝／｛（セル内の画素の階調値合計）＋(ステップＳ２２６で算出した選択画素の階調値)｝
ｙ重心＝｛｛（セルの重心のｙ座標）×（セル内の画素の階調値合計）｝＋｛（選択した未処理画素のｙ座標）×（ステップＳ２２６で算出した選択画素の階調値）｝｝／｛（セル内の画素の階調値合計）＋(ステップＳ２２６で算出した選択画素の階調値)｝
（ｘ重心、ｙ重心は重心位置の座標）
（式３）との違いは、選択した未処理画素の階調値をそのまま用いるのではなく、セル内の画素の階調値合計が閾値と同じになるような階調値を用いる点が異なる。
【０１１８】
この演算式は、（式３）の場合と同様に予めＲＯＭ２８に格納されており、ＣＰＵ２６が本ステップを実行する際にＲＯＭ２８から読み出すことで実行される。そしてＣＰＵ２６は、算出した重心位置データを再びＲＡＭ２７のワーキングメモリ２７２のアドレス「ｘ」「ｙ」に書き込む。
【０１１９】
また、ＣＰＵ２６は、最終的に選択した画素の元の階調値からステップＳ２２６で算出した値を引いた値（誤差データ）を算出して、その値を再びその選択した画素の入力バッファに書き込む（ステップＳ２２７）。これにより、当該画素の階調値が、戻しデータとして格納される。図１２（ａ）に示す例では、ステップＳ２２６で演算した“３３”を最終的に選択した（２，２）の画素の階調値“５０”から引いて“１７”の値を求め、これをＲＡＭ２７の入力バッファ２７１のアドレス（２，２）に再び書き込む（図１２（ａ）の入力バッファ２７１網掛け部参照）。
【０１２０】
そして、この画素はセルに組み込まれず、ハーフトーン処理が未処理である画素とする処理を行う（ステップＳ２２８）。上述したように、戻しデータを別の画素に戻すのではなく、戻しデータが発生した画素に再び格納させることで、入力階調値に忠実なドット分布を形成することができる。
【０１２１】
その後処理はステップＳ２３０に移行し、ＣＰＵ２６は、重心位置に存在する画素に対応する出力バッファ２７３に“２５５”を格納させる。出力バッファの構造も入力バッファと同様に２次元構造で、入力画素の位置に対応するアドレス空間を有している。重心が位置するアドレスに“２５５”を書き込むことで、その後の処理で重心位置に存在する画素に所定の大きさのドットを打つことができる。
【０１２２】
次いで、ＣＰＵ２６は、データ“２５５”の書き込み処理をトリガーにして新たにセルを生成する処理に移行し、再び未処理画素があるか否か判断する（ステップＳ２０５）。すなわち、上述した処理を全ての入力画素について行ったか否かを、ＲＡＭ２７の入力バッファ２７１に書き込まれたすべての階調値に対して行ったか否かで判断し、未処理画素があれば（ＹＥＳ）再び処理はステップＳ２１０に移行し、上述の処理を繰り返す。例えば、図１２（ｂ）に、引き続いて上述した走査方法に従って、未処理画素（３，０）が探索されセルが形成された状態を示した。すべての画素に対して処理が終了すれば（ステップＳ２０５：ＮＯ）、ＣＰＵ２６はステップＳ２０６に移行し、ハーフトーン処理が終了することになる。
【０１２３】
一方、ステップＳ２２５にて、セル内の画素の階調値合計が閾値と等しいとＣＰＵ２６が判断した場合（ステップＳ２２５：ＹＥＳ）、処理はステップＳ２２９に移行し、前述した演算式（式３）を用いて重心位置を算出し、算出した重心位置をワーキングメモリ２７２に格納する。またこのとき、ＣＰＵ２６は、選択した（２，２）の画素に対応する出力バッファ２７３のアドレス位置に“０”を格納し、入力バッファ２７１のアドレス位置に“−１”を格納する。画素（２，２）を、セルを構成する画素として扱うためである。
【０１２４】
以降、ＣＰＵ２６は、前述と同様にステップＳ２３０にて重心に位置する画素に所定の大きさのドットを打つため、重心位置に存在する画素に対応する出力バッファ２７３のアドレスに“２５５”を格納させる。そして、データ“２５５”の書き込み処理をトリガーにして新たにセルを生成する処理に移行し、再び未処理画素があるか否かの判断処理（ステップＳ２０５）以降を繰り返し、すべての画素に対して処理が終了すれば（ステップＳ２０５：ＮＯ）、ＣＰＵ２６はステップＳ２０６に移行し、入力画像全体についてドットのオンオフを制御するガンマ補正された２値化データを出力して、全ての処理を終了する。
【０１２５】
図１２（ｃ）にセルの画素の階調値合計が閾値と等しい場合を、図１２（ａ）と対比して例示した。図１２（ｃ）では、画素（２，２）の階調値が“５０”ではなく“３５”であった場合におけるＲＡＭ２７の書き込み状態を示した。図１２（ｃ）において、「ｓｕｍ」の値“４０５”と画素（２，２）の階調値“３５”の合計値“４４０”が、平均階調値ＨＫ“４９”に基づいて設定された閾値“４４０”と等しいため、画素（２，２）に対応した入力バッファ２７１のアドレス位置に“−１”が、また出力バッファ２７３のアドレス位置に“０”が格納され、算出されたセルの重心位置に“２５５”が格納される。
【０１２６】
以上説明したように、本実施形態でのＣＣ法によるハーフトーン処理によれば、平均階調値に基づいて所定の閾値を設定することによって、生成されるセルの大きさが変わり、従ってセルの大きさに対して出力されるドットの面積割合が増減する。この結果、最終的に画像出力装置３０によって出力されるドット数を低濃度領域になるほど減少させることができ、出力する画像について、画像出力装置のガンマ特性を補正するガンマ補正を行うことができる。
【０１２７】
また、ＣＣ法によるハーフトーン処理によれば、入力画像データの階調変換処理に際して量子化データに生じる誤差データを元の画素に戻すため、誤差データが別の画素に拡散されない。従って、入力画像データの歪みが小さくなり、入力画像の階調データに対して比較的忠実に階調変換処理を行うことができる。この結果、特許文献１または２に示した従来のハーフトーン処理技術において、課題であったガンマ補正の遅延を抑えることができる。
【０１２８】
また、同じく本実施形態でのＣＣ法によれば、セルの重心に最も近い画素を選択してセルに組み入れていくため、生成されるセルの形状は重心を中心としておおよそ円形になる。従って、セルの重心に出力されるドットは、セルのほぼ中央の位置となるためドットが重なる確率は低くなり、ガンマ補正が正しく行われることが期待できる。
【０１２９】
以上、本発明の一実施形態を説明したが、本発明はこうした実施の形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内において様々な形態で実施し得ることは勿論である。以下、変形例を挙げて説明する。
【０１３０】
「第１変形例」
次に本発明の第１変形例について説明する。前記実施形態では、画素選択の基準点を重心位置にして毎回画素選択時に更新するようにしていたが、第１変形例では、画素選択の基準点を、画素の階調値には関係なく、画素の座標位置を利用した中心位置とする。これにより、毎回重心位置を算出することがなく、他の処理を含めた全体の処理速度を上げることができる。
【０１３１】
第１変形例を図１３を用いて説明する。ここで、中心位置は、階調値を利用した重心位置ではなく、画素の中心位置の座標を利用した中心位置であって、その位置座標を（ｘ、ｙ）とすると以下の（式５）により算出される（以下の式でＧＮはセル内の画素数）。
【０１３２】
（式５）
ｘ＝Σiｘi／ＧＮ
ｙ＝Σiｙi／ＧＮ
入力画像データとして、各画素、図１３（ａ）に示す階調値が入力される場合で説明する。図１３（ａ）は、縦３画素、横４画素分の画像データが入力されている例であって、１フレーム分の画像データが入力される場合であってもよい。ここでは、重心位置によって選択された画素によって生成されるセルとの比較を容易にするため、図４（ａ）と同じ階調値の画像データとした。
【０１３３】
図１３（ａ）の入力画像データが入力されると、まず初期画素を選択する。前記実施形態と同様な所定の走査方法を行い、未処理画素のうち最も上側で最も左側にある画素を選択する。図１３（ａ）の例では、（ｎ、ｍ）の位置の画素を初期画素として選択する。
【０１３４】
そして、初期画素をセルＣＬに組み入れ、その中心位置を（式５）を用いて算出すると図１３（ｂ）に示す位置に中心位置ＳＣが位置することになる。次に、その中心位置ＳＣから最も近い位置に位置する未処理画素を選択することになるが、かかる画素が複数ある場合には、前記実施形態等と同様に所定の走査方法により選択する。図１３（ｂ）に示す例では、中心位置ＳＣに最も近い位置は（ｎ＋１、ｍ）と（ｎ、ｍ＋１）の２つ存在するが、ここでは（ｎ＋１、ｍ）を未処理画素ＭＧとして選択することになる。
【０１３５】
次に、図１３（ｃ）に示すように選択した未処理画素ＭＧをセルＣＬに組み入れ、更にセルの拡大処理を行う際、未処理画素を選択するための基準点すなわち中心位置を算出すると、図１３（ｃ）に示したように、ＳＣの位置となる。セル内の画素の階調値合計は、この時点で“１００”であるのでさらに未処理画素を選択することになる。本変形例でも前記実施形態と同様に、閾値はセルの平均階調値に基づいて閾値変換テーブルＴＢ１により設定され、この設定された閾値以上になるまで未処理画素を選択する。
【０１３６】
この基準点（中心位置）ＳＣから最も近い未処理画素は、図１３（ｃ）に示す例では、２つの画素（ｎ、ｍ＋１）、（ｎ＋１、ｍ＋１）が存在することになる。この場合も、走査方法に従って選択し、（ｎ、ｍ＋１）の画素を未処理画素ＭＧとして選択する。
【０１３７】
そして、図１３（ｄ）に示すように選択した未処理画素をセルに組み入れ、その中心位置を（式５）を用いて算出すると、位置ＳＣに位置することになる。この時点でのセル内の画素の階調値合計は“１５０”となり、閾値に達しないのでさらに未処理画素を選択する。中心位置ＳＣから最も近い距離にある画素は、（ｎ＋１、ｍ＋１）に位置する画素であるので、この画素を未処理画素ＭＧとして選択する。
【０１３８】
このように、画素の座標位置を利用した中心位置に基づいて、未処理画素の選択を繰り返してセルを生成していくと、図１３（ｅ）に示した画素（ｎ＋２，ｍ＋２）をセルに組み入れる状態となる。この未処理画素を組み入れたとき生成されるセル内の画素の階調値合計は“４５５”となり、そのとき設定された閾値“４３８”を超えてしまう。この場合、前記実施形態と同様に、閾値に達する分の階調値分をセルに組み入れ、この未処理画素に残りの階調値分（誤差データ）を戻して以後当該画素が未処理画素として選択されるようにする。前記実施形態と同様に、入力画像の階調データに忠実なドットを生成させるためである。ここでは、（ｎ＋２，ｍ＋２）に位置する画素に対して“１７”を戻しデータとして与えることになる（図１３（ｆ）参照）。
【０１３９】
次いで、ここまで構成したセルは、セル内の画素の階調値合計が閾値に達したので、セルの重心位置にドットを出力させるための処理を行う。重心位置の演算は、前記実施形態の（式４）と同様に演算することになり、図１４（ａ）の重心位置ＧＣを得る。
【０１４０】
そして、その後の処理により重心位置ＧＣに位置する画素にドットを出力させると、図１４（ｂ）に示す位置にドットＤＯＴが打たれることになる。これは、図９（ｂ）に示したドットが打たれる位置と同じ位置であり、前記実施形態と同様な結果を得ることができる。
【０１４１】
前記実施形態と同様に、毎回重心位置を計算すると、（式３）や（式４）に示すような演算処理が多くなるが、画素選択のための基準点を中心位置として演算し、最後に重心を演算することで、演算量を減らすことができるとともに、量子化済み画素群が前記実施形態と同様円状に成長してドット間距離を保ち、正しいガンマ補正を得ることが期待できる。
【０１４２】
「第２変形例」
また、第２変形例として、セルの重心位置を算出せずに、第１変形例において、未処理画素の選択に用いたセルの中心位置にある画素にドットを生成させるようにしてもよい。こうすれば、重心位置の算出処理を行う必要がないので、演算量を減らすことができる。例えば図１３に示した入力画像データの例では、図１４（ａ）に示したように、中心位置ＳＣが位置する画素と重心位置ＧＣが位置する画素とは同じ画素となり、前記実施形態と同じ位置にドットが出力されることになる。この結果、中心位置のみを算出すればよく、算出処理かかる負荷を軽減することができる。
【０１４３】
「第３変形例」
さらに、第３変形例として、画素選択のための基準点を毎回更新するのではなく、１回おきに更新したり、２回おきに更新したり、予め回数を決めてその回数のときに更新するようにしてもよい。本変形例ではセルの中心位置を基準点とし、この基準点を１回おきに更新する例を、図１５を用いて説明する。
【０１４４】
図１３のときと同様に入力画像データが図１５（ａ）のように入力された場合で説明することにする。図１３（ｂ）と同様に、初期画素を選択してその中心位置ＳＣを算出すると図１５（ｂ）に示す位置となる。そして、この中心位置ＳＣを基準点として、基準点から最も近い未処理画素ＭＧを選択すると（ｎ＋１、ｍ）に位置する画素となり、この画素をセルに組み入れる。
【０１４５】
次いで、セルの拡大処理が行われるが、次に選択する未処理画素は、セルから算出した中心位置ＳＣに基づいて選択するのではなく、前回未処理画素を選択したときの基準点となった中心位置ＳＣに基づいて選択する。すなわち、この時点で基準点を更新しないようにする。従って、図１５（ｃ）に示すように中心位置ＳＣから最も近い画素は（ｎ、ｍ＋１）となりこの画素を未処理画素ＭＧとして選択する。
【０１４６】
次いで、選択した未処理画素ＭＧを組み入れたセルは図１５（ｄ）のようになる。そして、１回おきに基準点を更新するようにするので、この時点で構成したセルの中心位置ＳＣを算出すると図１５（ｄ）に示す位置に中心位置ＳＣが移動することになる。
【０１４７】
次いで、この更新した中心位置ＳＣを基準点にして、この位置から最も近い未処理画素ＭＧを選択してその画素をセルＣＬに組み入れると図１５（ｅ）に示すようになる。そして、基準点を更新せず、１つ前に算出した中心位置ＳＣから最も近い画素を未処理画素ＭＧとして選択（（ｎ＋２，ｍ）の位置の画素を選択）して、セルＣＬを構成する。
【０１４８】
このように、画素の座標位置を利用した中心位置に基づいて、未処理画素の選択を繰り返してセルを生成していくと、図１５（ｅ）に示した画素（ｎ＋２，ｍ＋２）をセルに組み入れる状態となる。この状態は、前述の第１変形例における図１３（ｅ）とを比較すると、基準点となる中心位置ＳＣの位置が異なる以外は、基本的に同じ形のセルが生成されていることを示している。従って、図１３の例と同様に、最終的に生成されるセルＣＬは図１５（ｆ）となり、第１変形例と同じ結果がえられる。
【０１４９】
このように毎回、画素選択の基準点を更新するのではなく、１回おきに更新することでさらに演算量を減らすことができ、他の処理を含めた画像処理装置全体の処理速度の向上を図ることができる。本変形例では、中心位置を一回おきに更新するものとして説明したが、もとより重心位置を一回おきに更新することとしてもよい。さらに、初期画素の選択から４回目の未処理画素選択のときに基準点を更新し、さらにそれから３回目、２回目、…と減算するように、当該回数のときに更新するようにすることとしてもよい。
【０１５０】
「第４変形例」
また、セルの拡大処理に際して、基準点に最も近い画素を選択したとき、選択すべき未処理画素が複数あった場合、前記実施形態や前記変形例では所定の走査方法に従って、最も上の行で、最も左に位置する画素を選択したが、第４変形例として、未処理画素をランダムに選択することとしてもよい。
【０１５１】
例えば、図８（ｃ）や図１３（ｃ）において、基準点である重心位置ＧＣまたは基準点である中心位置ＳＣに最も近い画素として、選択すべき未処理画素が複数存在するとき、ランダムに選択することとする。こうすると、図８（ｃ）では画素（ｎ＋２，ｍ＋２）が選択されたり、図１３（ｃ）では画素（ｎ＋１，ｍ＋１）が選択されたりする場合が生じ、生成されるセルの形状がばらつくことになる。ランダム選択の方法としては、例えば乱数を利用する方法や、予め不規則な選択順を設定しておく方法などが考えられる。もとより、規則的でない選択方法であれば何でもよい。
【０１５２】
このように、未処理画素をランダムに選択することによって、生成されるセルの形状がばらつくためランダムになり易く、隣接するセル間において、重心位置（あるいは中心位置）に出力されるドットの位置もランダムになる。この結果、例えばドットが部分的に重なるセルが連続する場合は、その重なり具合もランダムに変化するため、対象となるセル全体について平均的にガンマ補正が行われる確率が増え、画像全体についてガンマ補正量への影響を少なくすることが期待できる。
【０１５３】
「第５変形例」
前記実施形態では、ハーフトーン処理部２２にて、１種類の大きさのドットを出力するか否か、つまり１つのドットのオンオフを制御する２値化処理を行うものとしたが、画像出力装置３０にて複数種類の大きさのドットを出力する場合は、第５変形例として、複数種類のドットの大きさ（以下、ドットサイズ）に対応するため、ハーフトーン処理において、ドットサイズに関係付けてガンマ補正を行うこととしてもよい。
【０１５４】
本変形例では、画像出力装置３０は、１個が１画素分のドットサイズで、１個分から１０個分まで合計１０種類のドットサイズのドットを出力制御できるものとして説明する。このような画像出力装置では、例えば前記実施形態のようなレーザプリンタを想定した場合、レーザダイオードの駆動時間、つまり駆動パルス幅またはパルス数を制御することによって複数種類のドットサイズが出力可能となる。特に、入力画像の再生表示方法として、ドットの大きさによって画像の濃淡を表現する方法（これを網点方式ともいう）を行う場合は、本変形例は有効である。
【０１５５】
図１６は、ドットサイズを、出力するドットの数で制御する画像出力装置３０に対応して、ガンマ補正を行うための閾値変換テーブルＴＢ２を例示したものである。出力するドットサイズが１種類つまり出力ドット数が１個分の場合に用いた閾値変換テーブルＴＢ１（図７）と比較すると、平均階調値が大きくなるほど出力するドットサイズ、すなわちドット数を段階的に多くし、最大ドット１０個分のドットサイズを出力するテーブルになっている。また閾値も平均階調値に対して大きい値が設定されている。
【０１５６】
ここで図１６に示した閾値変換テーブルＴＢ２において、設定された閾値を出力ドット数で除し、小数点以下を切り捨てると、図７の閾値変換テーブルＴＢ１と同じ閾値になる。つまり、ドット１個あたりの閾値は、図７と基本的同じであり、従って前記実施形態と同様なガンマ補正が行われるのである。
【０１５７】
また図１７は、ガンマ補正を行うための閾値を演算式によって設定する場合を想定し、この演算式の内容を説明するための説明図である。図１７（ａ）は、セルの平均階調値に対する出力ドット数（つまりドットサイズ）の関係を表し、階調値が大きい（つまり高濃度）ほど出力ドット数を多くしてドットサイズが大きくなるようにしている。これによって網点方式による再生表示を可能としている。そして、ドットサイズと関係付けて閾値が設定されるため、図１７（ｂ）に示したように、セルの平均階調値に対して大きい値をもった閾値が設定される。図１７に示した閾値ＳＨは次の演算式（式６）によって求められる。
【０１５８】
（式６）
ＳＨ＝ＩＮＴ（（２５５＋（２５５−ＨＫ）×０．９）×ＤＮ）
ＤＮ＝ＩＮＴ（（ＬＯＧ（ＨＫ／２５５＋０．１）＋１）×９＋０．７）
ここで、ＨＫはセルの平均階調値、ＤＮは出力するドットの数を表し、ＩＮＴは小数点以下を切り捨てる意味の関数であり、またＬＯＧは周知の対数関数である。（式６）より、閾値ＳＨは平均階調値ＨＫと、同じく平均階調値ＨＫを引数として算出される出力ドット数ＤＮ（＝ドットサイズ）とによって設定される。
【０１５９】
本変形例を実際の画像に適用した一例を図１８、図１９を用いて説明する。図１８は、階調値“８０”の均一な濃度の画像をＣＣ法によってハーフトーン処理する際、閾値変換テーブルＴＢ２を用いてガンマ補正を行う場合を示した説明図である。図１８（ａ）は、画素（０，０）が初期画素として探索された後、ＣＣ法に従って順次セルＣＬが拡大されて、画素（１，５）が未処理画素ＭＧとして選択された状態を示している。
【０１６０】
このとき、画素（１，５）をセルに組み込むと、セルの階調値合計は“２４８０”であり、セルの平均階調値“８０”に対応した閾値は閾値変換テーブルＴＢ２より“２４７５”であるため、セル内の画素の階調値合計が閾値を超え、セルの拡大終了条件が成立する。従って、図１８（ｂ）に示したように、画素（１，５）に誤差データ“５”を戻して未処理画素とし、セルＣＬを生成する。そして、セルＣＬの重心ＧＣを算出して、重心ＧＣに位置する画素にドット数６個のドットサイズを持ったドットを出力するための所定のデータを付与する。
【０１６１】
図１８（ｂ）に示した例では、例えば、重心位置ＧＣに位置する画素（２，２）に“２５５-６”というデータを付与する。以降の画像出力装置３０との間において、“２５５”はドットオンを意味し、“６”はドット数が６個のドットサイズであることを意味するよう関係付けておくことによって、図１８（ｂ）の網掛け部で示したように、画素（２，２）を基準とした周辺の所定の位置に所定の数のドットを打つことができ、所定のドットサイズを持ったドットが出力される。なお、ドットの打ち方については、例えば重心の位置とドットの数に応じて所定のルールを決めておき、このルールに従って所定の画素にドットを打つようにすることとしてもよい。また、１ドットを１画素全体に打たず２画素以上に分けて打つように所定のルールを決めておくことも差し支えない。なお、ドットの打ち方については本発明の本質ではないので詳しい説明は省略する。
【０１６２】
次に、図１９は、階調値“２５５”の均一な最高濃度の画像をＣＣ法によるハーフトーン処理する際、閾値変換テーブルＴＢ２を用いてガンマ補正を行う場合を示した説明図である。図１９（ａ）は、図１８と同様に、画素（０，０）が初期画素として探索された後、ＣＣ法に従って順次セルＣＬが拡大されて、画素（３，１）が未処理画素ＭＧとして選択された状態を示している。
【０１６３】
このとき、画素（３，１）をセルに組み込むと、セル内の画素の階調値合計は“２５５０”であり、セルの平均階調値“２５５”に対応した閾値は閾値変換テーブルＴＢ２より“２５５０”であるため、セル内の画素の階調値合計が閾値に一致し、セルの拡大終了条件が成立する。従って、図１９（ｂ）に示したようにセルＣＬを生成し、セルＣＬの重心ＧＣを算出して、重心位置ＧＣに位置する画素にドット数１０個のドットサイズを持ったドットを出力するための所定のデータを付与する。
【０１６４】
図１９（ｂ）に示した例では、例えば、重心位置ＧＣに位置する画素（１，１）に“２５５-１０”というデータが付与され、図１８と同様に、以降の画像出力装置３０との間において、“２５５”はドットオンを意味し、“１０”はドット数が１０個のドットサイズであることを意味するよう関係付けておくことによって、図１９（ｃ）の網掛け部で示したように、画素（１，１）を基準とした周辺の所定の位置に所定の数のドットが打たれる。図１９の例では、セル内の全ての画素にドットが打たれ、ドット数１０個の大きさのドットが出力される。もとより、この場合はガンマ補正量はゼロということになる。
【０１６５】
「第６変形例」
第５変形例では、閾値変換テーブルＴＢ２を用いてドットサイズと閾値を設定したが、特にこれに限らず種々の閾値変換テーブルや演算式を用いればよい。例えば、閾値変換テーブルＴＢ２では、ドットサイズを、平均階調値が大きくなるほど段階的に大きくしたが、平均階調値“１００”前後の中濃度が最も大きいドットサイズになるようにするなど、平均階調値が大きくなるに従ってドットサイズが増減するようにして閾値を設定することとしてもよい。
【０１６６】
図１８（ｂ）と、図１９（ｃ）とを比較してみると、ドットサイズが大きい方、つまりドット数６個のドットサイズよりドット数１０個のドットサイズの方が、ドット間で隣り合う部分が多いことがわかる。前述したように、ドットが隣り合って形成されるところは、はみ出し部分が隣り合うドットによって打ち消され、それ以外の部分が画素の外へはみ出すことになるため、このはみ出し部分が元画像データに対する理想の濃度よりも大きくしている部分である。このことより、ドットサイズが大きいほど、ドット数１個あたりのはみ出し部分が最も少なくなり、ガンマ補正量も理論的に少なくなる。換言すれば、大きいドットサイズほど入力画像に忠実な画像を再生表示できる確率が高くなると言える。従って、例えば、入力画像のうち中濃度領域について忠実な再生表示画像を得ようとする場合は中濃度に相当する平均階調値について最も大きいドットサイズを設定するとよい。またドットサイズも１０種類に限らず、３種類とか１６種類とか画像出力装置３０が出力できるドットサイズの種類に合わせて増減すればよい。
【０１６７】
さらに、第５変形例では、平均階調値に対するドット数を、対数関数を用いた演算式（式６）により設定したが、とくにこれに限らず、平均階調値を引数とした一次関数や２次関数などの関数によって表された演算式を用いてドット数を設定してもよい。対象となる画像出力装置３０において、出力するトッドサイズが担当する階調値に対応して、所定のドット数を設定してもよい。
【０１６８】
また、平均階調値に対する１ドットあたりの閾値も、前記実施形態での値よりも増減させたりすればよい。あるいは平均階調値に対する閾値の変化割合も、前記実施形態で設定した閾値の変化割合より低濃度ほど大きくしたり、逆に高濃度ほど大きくしたりしてもよい。対象となる画像出力装置３０のガンマ特性に合わせて閾値を設定し、正しくガンマ補正できるようにすることが好ましい。
【０１６９】
「第７変形例」
また、第７変形例として、本実施形態における画像処理装置は、レーザプリンタにて画像を再生表示するものとして処理を行うようにしたが、本発明はこれに限定されるものでなく、インクジェットプリンタなどインクを印刷媒体に付着させて印刷する方式のプリンタやサーマルプリンタなどの種々のプリンタや、電子写真あるいはディスプレイなどに画像を再生表示するものとして処理を行うようにしてもよい。あるいは、このようなプリンタなどの機能が組み込まれたコピー機やコンピュータ、ワープロ、ファックスなど種々の機器に、本発明の画像処理装置も組み込まれて構成されるようにしてもよい。
【図面の簡単な説明】
【０１７０】
【図１】本発明が適用される一実施形態におけるシステム全体を示す構成図。
【図２】本実施形態での画像処理装置のハード構成を説明する模式図。
【図３】本実施形態での画像処理装置が行う処理を説明するためのフローチャート。
【図４】ガンマ補正を行わない場合のＣＣ法でのハーフトーン処理を説明するための説明図。
【図５】ガンマ補正を行わない場合のＣＣ法でのハーフトーン処理を説明するための説明図。
【図６】セルの平均階調値による閾値設定処理を説明するためのフローチャート。
【図７】出力ドット数が１個のときの閾値変換テーブルの例。
【図８】ガンマ補正を行う場合のＣＣ法でのハーフトーン処理を説明するための説明図。
【図９】ガンマ補正の有無によって出力されるドットの違いを説明する説明図。
【図１０】ＲＡＭの構成と格納されるデータの例を説明する説明図。
【図１１】ＲＡＭの構成と格納されるデータの例を説明する説明図。
【図１２】ＲＡＭの構成と格納されるデータの例を説明する説明図。
【図１３】第1変形例で、画素選択の基準点をセルの中心位置とする場合のＣＣ法でのハーフトーン処理を説明するための説明図。
【図１４】第１変形例で、画素選択の基準点をセルの中心位置とする場合のＣＣ法でのハーフトーン処理を説明するための説明図。
【図１５】第３変形例で、画素選択の基準点をセルの中心位置とする場合のＣＣ法でのハーフトーン処理を説明するための説明図。
【図１６】第５変形例で、出力ドット数が１個から１０個のときの閾値変換テーブルの例。
【図１７】第５変形例で、出力ドット数が１個から１０個のとき、閾値を得るための計算式を説明するためのグラフ。
【図１８】第５変形例で、出力ドット数が１個から１０個のときのＣＣ法によるハーフトーン処理結果の一例を説明する説明図。
【図１９】第５変形例で、出力ドット数が１個から１０個のときのＣＣ法によるハーフトーン処理結果の一例を説明する説明図。
【符号の説明】
【０１７１】
１０…画像入力装置、１１…アプリケーション部、１２…ラスタライズ部、２０…画像処理装置、２１…色変換部、２２…ＣＰＵ、２５…入出力Ｉ／Ｆ、２６…ＣＰＵ、２７…ＲＡＭ、２８…ＲＯＭ、２９…ハードディスク、３０…画像出力装置、３１…パルス幅変調部、３５…印刷エンジン、３６…レーザドライバ、３７…レーザダイオード、２７１…入力バッファ、２７２…ワーキングメモリ、２７３…出力バッファ、ＴＢ１…閾値変換テーブル、ＴＢ２…閾値変換テーブル、ＣＬ…セル、ＣＬ１…セル、ＣＬ２…セル、ＧＣ…セルの重心位置、ＧＣ１…セルの重心位置、ＧＣ２…セルの重心位置、ＳＣ…セルの中心位置、ＭＧ…未処理画素、ＤＯＴ…ドット、ＤＮ…ドット数、ＧＮ…画素数、ＨＫ…平均階調値、ＳＨ…閾値、ＤＴ…入力画像データ、ＤＲ…所定のデータ。
【図１】
2005318402.tif 000003
【図２】
2005318402.tif 000004
【図３】
2005318402.tif 000005
【図４】
2005318402.tif 000006
【図５】
2005318402.tif 000007
【図６】
2005318402.tif 000008
【図７】
2005318402.tif 000009
【図８】
2005318402.tif 000010
【図９】
2005318402.tif 000011
【図１０】
2005318402.tif 000012
【図１１】
2005318402.tif 000013
【図１２】
2005318402.tif 000014
【図１３】
2005318402.tif 000015
【図１４】
2005318402.tif 000016
【図１５】
2005318402.tif 000017
【図１６】
2005318402.tif 000018
【図１７】
2005318402.tif 000019
【図１８】
2005318402.tif 000020
【図１９】
2005318402.tif 000021