以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下の実施例において示す構成は一例にすぎず、本発明は図示された構成に限定されるものではない。
<第1実施形態>
(画像処理装置の構成)
図1は、第1実施形態に適用可能な画像処理装置を含む画像形成システムのハードウェア構成を示す。本実施形態における画像処理装置は一例として、記録媒体上に記録剤を用いて画像を形成するプリンタ内に内蔵された画像処理コントローラを例として説明する。第1実施形態に係る画像形成システムは、CPU100、RAM101、ROM102、操作部103、表示部104、外部記憶装置105、画像処理部106、画像形成部107、I/F(インターフェース)部108、バス109を備える。
CPU100は、入力されたデータや後述のRAM101やROM102に格納されているコンピュータプログラムを用いて、画像形成システム全体の動作を制御する。なお、ここではCPU100が装置全体を制御する場合を例に説明するが、複数のハードウェアが処理を分担することにより、装置全体を制御するようにしてもよい。
RAM101は、外部記憶装置105から読み取ったコンピュータプログラムやデータ、I/F部108を介して外部から受信したデータを一時的に記憶する記憶領域を有する。またRAM101は、CPU100が各種の処理を実行するために用いる記憶領域や画像処理部106が画像処理を実施する際に用いる記憶領域として使用される。すなわちRAM101は、各種の記憶領域を適宜提供することができる。ROM102には、画像形成システムにおける各部の設定を行う設定パタメータやブートプログラムなどが格納されている。
操作部103は、キーボードやマウスなどにより構成されており、操作者による操作を介して操作者の指示を受け付ける。これにより操作者は、各種の指示をCPU100に対して入力することができる。
表示部104は、CRTや液晶画面などにより構成されており、CPU100による処理結果を画像や文字などで表示することができる。なお表示部104がタッチ操作を検知可能なタッチパネルである場合、表示部104が操作部103の一部として機能してもよい。
外部記憶装置105は、ハードディスクドライブに代表される大容量情報記憶装置である。外部記憶装置105には、OS(オペレーティングシステム)やCPU100に処理を実行させるためのコンピュータプログラムやデータなどが保存されている。また、各部の処理によって生成される一時的なデータ(入出力される画像データや画像処理部で使われる閾値マトリクスなど)を保持している。外部記憶装置105に保存されているコンピュータプログラムやデータは、CPU100による制御に従って適宜読み取られ、RAM101に記憶されてCPU100による処理対象となる。
画像処理部106は、コンピュータプログラムを実行可能なプロセッサや専用の画像処理回路として実現され、印刷対象として入力された画像データを画像形成部107が出力可能な画像データに変換するため各画像処理を実行する。例えば、CPU100から画像処理を実行する指示を受け付けると、外部記憶装置105に格納されたN階調の入力画像データを処理し、M階調の出力画像データを出力する。
画像形成部107は、画像処理部106から受け取った出力画像データに基づいて、記録媒体上に記録剤を用いて画像を形成する。第1実施形態における画像形成部107は、インクをノズルから記録媒体上に吐出することにより画像を形成するインクジェット方式とする。なお画像形成部107は、帯電した像担持体に露光しトナーで現像し、そのトナー像を記録媒体上に転写することで画像を形成する電子写真方式を用いてもよい。
I/F部108は、本実施形態における画像形成システムと外部機器と接続するためのインターフェースとして機能する。さらに、I/F部108は、赤外線通信や無線LAN等を用いて通信装置とデータのやりとりを行うためインターネットに接続するためのインターフェースとしても機能する。上記の各部はいずれも、バス109に接続され、バス109を介してデータの授受を行う。
(画像処理部106の構成)
本実施形態における画像処理部106について説明する。画像処理部106は、入力画像データを、入力画像データが表す階調数より少ない階調数を表すハーフトーン画像データに変換するためのハーフトーン処理を実行する。図2は、画像処理部106の詳細な構成を示すブロック図である。本実施形態における画像処理部106は、図2に示したブロック図を構成する専用の画像処理回路として実現される。画像処理部106は、画素値取得部201、目標値算出部202、分配順決定部203、閾値取得部204、出力値決定部205を有する。
画像処理部106に入力されるデジタルな画像データ(以下、入力画像データ)は、画素毎に0〜255いずれかの値を示す8ビットのデータである。本実施形態において画像処理部106は、1画素当たり8ビットの入力画像データを、画素毎に0か1のいずれかの値を有する1ビット2値のハーフトーン画像データ(出力画像データ)に変換する。ハーフトーン画像データにおいて、画素値(出力値)が0である画素はドットのオフを、画素値(出力値)が1である画素はドットのオンを表す。このようなハーフトーン画像データは、入力画像データが表す階調数より少ない階調数により擬似的に入力画像データを再現している。
画素値取得部201は、入力画像データにおいて処理対象とする単位領域(以下、処理対象領域)に含まれる複数画素の各画素値を取得する。図3は入力画像データ300を示す。本実施形態は、図3における太枠が示す4画素×4画素の領域を単位領域とする。画素値取得部201は、処理対象領域が領域301であるとすると、領域301に含まれる16画素の各画素値を取得することになる。
目標値算出部202は、処理対象領域に含まれる複数画素の画素値に基づいて、処理対象領域における出力値の合計を目標値として算出する。前述の通り出力値1または0によりドットのオンオフを表すので、単位領域における出力値の合計(目標値)は、単位領域においてオンとすべきドットの数に相当する。本実施形態では、処理対象領域に含まれる複数画素の画素値の合計を255で除算した値(小数点以下は切り捨てる)を目標値として算出する。
閾値取得部204は、ディザ処理に使用可能な閾値群をRAM101または外部記憶装置105から取得する。本実施形態では、図4に示す閾値マトリクス401を用いるとする。閾値マトリクス401は、マトリクス内の各画素に、値の異なる閾値が配置されている。詳細は後述する。閾値マトリクスと処理単位領域は同じサイズ(4画素×4画素)なので、閾値取得部204は、処理対象の単位領域が読み込まれる毎に図4に示す閾値マトリクス401を取得する。
分配順決定部203は、画素値取得部201から取得した処理対象領域の画素値と閾値取得部204から取得した閾値とに基づいて、処理対象領域におけるドットの分配順を決定する。本実施形態では、位置的に対応する画素値と閾値との差分値を評価値として算出し、算出された各画素の評価値をソート処理することにより、ドットの分配順を決定する。
出力値決定部205は、分配順決定部が決定した分配順に従って、各画素に出力値として1ずつ目標値算出部202が算出した目標値(出力値合計)に達するまで割り当て、処理対象領域における各画素の出力値を決定する。
ここで、分配順決定部203が決定する処理対象領域におけるドットの分配順について説明する。一般に、閾値マトリクスを用いてディザ処理をする場合、画素値と位置的に対応する閾値とを比較することにより量子化し、出力値を決定する。図4に示す領域402は、入力画像データにおいて処理対象領域内の各画素の画素値が一様に値「10」である例を示す。また、図4に示す領域404は、各画素の画素値が一様に値「150」である例を示す。領域402および404それぞれの各画素と、閾値マトリクス401における対応する閾値とを比較し、閾値よりも画素値の方が大きい画素を出力値1(ドットがオン)、画素値が閾値以下である画素を出力値0(ドットがオフ)と処理する。その結果、領域402は出力結果403に変換され、領域404は出力結果405に変換される。なお出力結果403および405において黒塗りの矩形はドットがオンである画素を示し、白塗りの画素はドットがオフである画素を示す。
出力結果403および405から、入力画像データにおける処理対象領域が表す画素値(濃度)が大きいほど、ドットの数が増えることがわかる。特に閾値マトリクス401は、値の異なる複数の閾値が、値が小さい順に分散するように配置されている。そのため、ディザ処理の結果得られるドットができるだけ分散し、粒状性がよくなるように設計されている。このように閾値の配置によって、ドットの粒状性を制御することができる。つまり閾値マトリクスは、閾値の配置によってドットを配置する順を制御できるとも言える。一般に、画像形成部107の出力特性を考慮して閾値マトリクスにおける閾値を設計する。本実施形態では、一般にディザ処理に用いられる閾値マトリクスを、画像形成部107の出力特性に合わせたドットパターンを制御するための、ドットの配置順を示す情報として扱う。
一方、入力画像データにおける処理対象領域内の複数画素の画素値が一様ではない場合、処理対象領域における画素値の変動と、閾値マトリクスにおける閾値の変動とが干渉し、所望の出力結果が得られないことがある。例えば、周辺画素よりも大きい画素値をもつ画素は、周辺画素よりも比較的ドットをオンにする2値データ(出力値1)に変換した方がよい画素と言える。しかしながら、閾値マトリクスの中でも他の閾値より値の大きい閾値が対応するために、周辺画素よりも大きい画素値をもつ画素が出力値0に変換されてしまう場合がある。その結果、入力画像データの解像度や画像が表す特徴が失われてしまう場合がある。特に細線やエッジを表す画素であるほど、出力結果における劣化が目立ちやすい。
そこで第1実施形態における分配順決定部203は、画素毎に画素値と閾値との差を評価値として算出する。単位領域において、画素値から対応する閾値を引いた値が大きい画素ほど評価値が大きい値になる。この評価値をソート処理した順にドットを分配することにより、入力画像データの特徴と設計された閾値マトリクスの特性との両方を反映して、処理対象領域におけるドットの出力値を決定することができる。
(画像処理部106における動作)
図5は、画像処理部106における処理の動作を示す。また図4における406〜409に、以下の処理によって得られる処理結果の過程を示す。
ステップS501において画素値取得部201は、RAM101や外部記憶装置105から入力画像データのうち処理対象領域に含まれる複数画素の画素値を取得する。例えば、領域406を処理対象領域として、各画素の画素値を取得したとする。画素値を1つ取得するとステップS502において画素値取得部201は、処理対象領域に含まれる全ての画素の画素値を取得したかどうかを判定する。処理対象領域に含まれるすべての画素の画素値を取得していない場合はステップS501に戻り、画素値の取得を繰り返す。処理領域に含まれるすべての画素の画素値を取得したら、ステップS503に進む。
ステップS503において閾値取得部204は、RAM101や外部記憶装置105から処理対象領域に対応する閾値マトリクスの閾値を取得する。ここでは、閾値マトリクス401の各閾値を取得する。ステップS504において閾値取得部204は、処理対象領域に対応する全ての画素を取得したかどうかを判定する。全ての閾値を取得していない場合ステップS503に戻り、順次閾値を取得する。処理対象領域に対応する全ての閾値を取得したら、ステップS505に進む。なお、ステップ501およびステップ502の処理と、ステップS503およびステップ504の処理とは、互いに依存関係を持たない処理であるため、逐次的に処理する場合でもどちらが先に実行してもいいし、並行して実行してもよい。
ステップS505において目標値算出部202は、ステップS501およびステップS502において取得した画素値に基づいて、処理対象領域における目標値(目標とする出力値合計)を算出する。ここでは、処理対象領域内の全ての画素値を合計して255で除算した商を算出する。ここで得られた商は、処理対象領域においてドットをオンにするべき画素の数を表す。領域406の場合、各画素の画素値を合計すると、1132が得られる。さらに1132を255で除算した商は、4.43・・となるので、領域406における目標値として、ドットをオンにする画素数4が算出される。
ステップS506において分配順決定部203は、処理対象領域の画素毎に、画素値から対応する閾値を減算した値を評価値として算出する。本実施形態の場合、処理対象領域には16画素が含まれるので、16画素分の評価値が算出される。領域406と閾値マトリクス401とに基づいて、領域406に対応する評価値群407が算出される。さらに分配順決定部203は、算出した評価値を値が大きい順にソートした結果を分配順とする。つまり、処理対象領域のうち評価値が大きい画素の順に、ドットが分配されることになる。領域406の場合、評価値群407に基づいて分配順408が決定される。
ステップS507において出力値決定部205は、ステップS505で得られた処理対象領域においてドットをオンにするべき画素の数分の画素の位置を分配順に決定し、決定した順にその位置の画素の出力値を1とする。それ以外の画素は、ドットをオフにする画素として出力値を0とする。領域406の各画素の出力値は、出力結果409に示す通りに決定される。
ステップS508において全ての単位領域について処理が終了したかどうかを判定し、終了していない場合には、上記の処理を繰り返す。なおステップS506は、入力画像データにおける処理対象領域に含まれる複数画素の各画素値を取得すれば処理ができるので、ステップ501〜ステップS505の処理の間、並行してステップS506における処理をするようにしてもよい。
以上の処理により得られるハーフトーン画像データは、入力画像データを構成する画素値が最大値「255」に近い、または対応する閾値が最小値「0」に近い画素ほど、出力値1(ドットオン)が割り当てられやすくなる。また、単位領域が平坦な画像を表す場合、すなわち、複数画素の画素値の変動が小さい場合には、閾値の小さい順にドットが配置されるので、設計した意図を反映したドットの配置を表すハーフトーン画像データに変換される。また単位領域が細線やエッジ等の特徴をもつ場合、画素値の大きさがドットの配置順に反映されるので、閾値マトリクスを用いて単にディザ処理で量子化する方法に比べて、画像の特徴を維持したハーフトーン画像データに変換される。従って本実施形態によれば入力画像データを、より高画質なハーフトーン画像データに変換することができる。
なお、第1実施形態において目標値算出部202は、処理対象領域に含まれる複数画素の画素値を合計し、オンドットの表す画素値に相当する255で除算することにより、処理対象領域においてドットをオンにするべき画素の数を算出した。しかしながら、本実施形態のように閾値マトリクスの大きさと一致するセルを入力画像データにおける単位領域とする場合、処理対象領域の画素値が一様であれば、ディザ処理の結果得られるドットの総数は等しくなる。従って目標値算出部202は、例えば単位領域における各画素の画素値を平均し、単位領域における全ての画素の画素値の平均値を算出した後、平均値に対応するドット数を目標値として算出するような構成とすることもできる。
なお、第1実施形態において閾値マトリクスは、便宜上、ディザ処理に用いられる閾値マトリクスとしたが、従来のディザ処理のように、入力画像データにおける各画素の画素値と比較するための閾値としては用いていないことに注意されたい。第1実施形態では、入力画像データのレンジ(ここでは、0〜255)と同じレンジをもち、所望のドットパターンになるよう複数の値を適切に配置することで、所定領域内の各画素の順序を示す情報として閾値マトリクスを用いている。
<第2実施形態>
第1実施形態では、入力画像データを0または1からなるハーフトーン画像データに変換するハーフトーン(2値化)処理を例に説明した。また、画素値から閾値を減算した値を評価値として用いた。第2実施形態では、1画素当たり8ビットの入力画像データを3値化する処理を例にする。また、画像の特徴に応じた評価値を算出する方法について説明する。なお、第1実施形態と同様の構成については同じ符号を付し、詳細な説明を省略する。図6は、第2実施形態における画像処理部106の詳細な構成を示す。目標値算出部202は、平均値算出部601、ディザ処理部602、集計部603を有する。
平均値算出部601は、処理対象領域に含まれる全ての画素の画素値を平均し、処理対象領域における平均値を算出する。平均値算出部601は算出した平均値をディザ処理部602に出力する。
ディザ処理部602は、閾値取得部204から処理対象領域に対応する閾値を取得する。第2実施形態では、図7に示すような64画素×64画素の閾値マトリクスを用いるとする。ただし処理対象とする単位領域は、第1実施形態と同様4画素×4画素とする。そのため閾値取得部204は、処理対象領域が更新されるたびに、図7に示す閾値マトリクスから順に4画素×4画素に対応する位置の閾値を取得する。図7に示す閾値マトリクスは、いわゆるブルーノイズ特性を持つ閾値マトリクス(以下、ブルーノイズマスク)である。ブルーノイズマスクを用いたディザ処理を実行すると、分散性の高いドットパターンを得られることが知られている。なおこのようなブルーノイズマスクは一般に、インクジェット方式の画像形成部107のためのハーフトーン処理に適している。
本実施形態におけるブルーノイズマスクには、各画素位置に対して閾値が2つずつ存在する。従って4画素×4画素の単位領域には、32個の閾値が存在する。また、各閾値は入力画像データの階調に合わせて8ビットの値で表現されている。なお、ディザ処理する閾値の階調数を変更すればN値の入力画像データに対してディザ処理を実施可能であり、画素当りの閾値数を変更すれば、M値化が実施可能である。
ディザ処理部602は、平均値算出部601から出力された処理対象領域における平均値に対して、閾値取得部204が取得した閾値群とのディザ処理をおこなう。本実施形態ではディザ処理では3値化するので、ディザ処理部602から出力される各画素の出力値は、0、1、2のいずれかの値である。
集計部603は、ディザ処理部602によりディザ処理した結果を後述の通り集計する。集計部603は、集計結果を処理対象領域における目標値として、出力値決定部205に出力する。
分配順決定部203は、処理対象領域における各画素について、画素値と閾値とに基づいて評価値を算出し、処理対象領域における評価値をソート処理することで、優先的に出力値を大きくする画素の順番である分配順を決定する。分配順決定部203は、決定した分配順を出力値決定部205に出力する。
出力値決定部205は、集計部603から得た目標値となるまで、分配順決定部203で決められた順に各画素に出力値を1ずつ割り当て、処理対象領域における各画素の出力値を決定する。
(画像処理部106における動作説明)
第2実施形態の画像処理部106における動作は、第1実施形態において説明した図5に示すフローチャートのうち、ステップS505における目標値算出処理、ステップS506における分配順決定処理、ステップS507における出力値決定処理が異なる。まずステップS505における目標値算出処理の詳細を図9に示すフローチャートに沿って説明する。
ステップS901において平均値算出部601は、処理対象の単位領域に含まれる各画素の画素値の平均値を算出する。算出した平均値は、ステップS902において、ディザ処理部602より取得した閾値群とのディザ処理を実施する際に用いられる。図8は、本実施形態におけるディザ処理を説明する図である。各画素に対して設けられた量子化部において平均値と各閾値とを比較し、量子化(ここでは3値化)する。ステップS901において算出した平均値は1つであるのに対し、取得した閾値群は4画素×4画素に対応する16組を有している。本実施形態におけるディザ処理では、1つの平均値に対して、閾値群の閾値それぞれと比較した結果を各画素の量子化結果として出力する。これは、処理対象領域における各画素を、平均値に置換した後に、ディザ処理することに相当する。ステップS902において、夫々の量子化部が出力した量子化結果を後段の集計部603に出力する。
次にステップS903において集計部603は、ステップS902におけるディザ処理の結果を集計する。ステップS902におけるディザ処理の結果、各画素に対して量子化値0、1、2のいずれかを得る。そこで集計部603は、処理対象領域における4画素×4画素の量子化値の総和をとる。この単位領域におけるディザ処理結果の総和は、処理単位毎の最終的な出力値の総和に一致し、後段のステップS3507によって各画素に出力値が振り分けられる際の目標値となる。以上の処理により、ステップS505における目標値算出処理が完了する。
なお本実施形態のように、閾値マトリクスにおける一部の局所的な領域を単位領域のサイズとする場合、処理対象領域が閾値マトリクスのどの位置に対応するかによって例え処理対象領域の平均値が同一であってもディザ処理の結果得られる出力値の総和は異なる。例えば、図10に示す領域1001、及び領域1002は、領域内の全ての画素について同一の画素値を持つ画素群を示す。領域1001および1002はいずれも、各画素値の平均値は72である。領域内の各画素の画素値が平均値72に置換された画素群に対して、図7に示す閾値マトリクス内の閾値群701と閾値群702によりディザ処理をおこなった結果がディザ処理結果1003、及びディザ処理結果1004である。ディザ処理結果1003およびディザ処理結果1004について夫々の出力値の総和をとると、ディザ処理結果1003では出力値合計(目標値)が9、ディザ処理結果1004では出力値合計(目標値)が8となる。このように画素群の平均値が同じであっても生じる目標値の差異は、閾値マトリクスの設計時に定められた閾値配列により決まり、ディザ処理の結果得られるドットパターンの階調性や粒状性を向上させるために生じるものである。従って、閾値マトリクスの局所領域のサイズを入力画像データの単位領域とする場合は、夫々の局所領域に含まれる閾値群ごとの目標値を算出することが重要となる。
次に第2実施形態におけるステップ506の分配順決定処理について説明する。第2実施形態における分配順決定部203(図6)は、出力値を分配する順番を決定するため、評価値として、画素値から対応する閾値に係数αを乗算した値を減算した結果“入力画素値−α×閾値”(αは0以上)を用いる。分配順決定部203は算出した評価値をソートし、評価値の大きい画素から小さい画素の降順に分配順を決定する。つまり係数αを用いる点で、第1実施形態と異なる。
評価値である“入力画素値−α×閾値”において係数αが0の場合、入力画像データを構成する画素値のパターンのみに依存して分配される順番が決まる。また、係数αが0より大きいほど、閾値マトリクスにおける閾値の配置が評価値に反映される。すなわち、処理対象領域に対応する閾値群のうち、より小さい閾値に対応する画素がより優先的に分配されやすくなる(分配順が早くなりやすい)。係数αが0より大きく、入力画像データにおける画素値が一定である場合、閾値の大きさのみに依存して分配順が決められるため、設計した閾値マトリクスの特性通りの順番で領域におけるドットをオンにすべき画素が決定される。この係数αを大きくするほど、閾値マトリクスによって予め決められた分配順の影響が強くなる。さらに、係数αを1より大きい値に設定すると、入力画像データにおける画素値のパターンよりも閾値の配置の方がより評価値に影響を与えることになる。このような評価値を用いることにより、入力画像データのパターン(特徴)による評価値への影響と、閾値マトリクスにおける閾値の配置による評価値への影響を調整することができる。
例えば、入力画像データがエッジや細線を表す場合、閾値マトリクスの特性に関わらず、入力画像データにおける画素値のパターンを優先した方が、量子化した結果におけるエッジや細線の再現性が高い。従って、入力画像データ(あるいは単位領域)がエッジや細線を表す場合は、“入力画素値−α×閾値”における係数αを1より小さくした方がよい。一方、自然画像や平坦部の多い入力画像データの場合、粒状性を重視するため予め設計された閾値マトリクスの特性(本実施形態ではブルーノイズ特性)に応じて分配順が決定されるように、係数αを1以上の値に設定するとよい。なおα=1のとき、第1実施形態と同じように評価値が算出されることになる。
このように、処理単位領域または画像全体の特徴(エッジ量、コントラスト量等)や属性データ(エッジ、細線等)、画像の種類・コンテンツ情報(自然画、文字・線画、図面等)に応じて係数αを変更することで、出力画像における画質を調整することができる。係数αは、入力された画像データごとでもよいし、入力画像データにおける領域毎に設定してもよい。本実施形態では、画像データのコンテンツ情報を読み取り、入力画像データが自然画である場合は係数α=1、入力画像データが図面、文字・線画である場合には、α=0.5とする。入力画像データを取得すると、分配順決定部203は、入力画像データのコンテンツ情報に基づいて、係数αを1または0.5に設定する。そして、処理対象領域に含まれるすべての画素について、評価値である“入力画素値−α×閾値”を算出し、ソート処理する。
ここで、図7に示す画素毎に2つの閾値が対応する閾値マトリクスを用いる場合のソート処理について説明する。図10の1005〜1010は、α=1とした時の分配順決定処理の過程を説明する図である。図10に示す領域1001と対応する閾値群701(図7)とに基づいて、評価値“入力画素値−α×閾値”を各閾値に対して算出した結果が評価値群1005である。また、領域1002と対応する閾値群702(図7)とに基づいて評価値を算出した結果が評価値群1006である。評価値群1005および1006からわかるように、各画素は閾値に対して評価値が算出されることになるので、評価値算出結果において各画素は2通りの評価値をもつ。さらに、評価値群1005および1006をソート処理し、高い評価値から低い評価値へ降順に分配順を割り当てた結果が分配順1007および1008である。なお評価値が同じ場合は、閾値の小さいものを分配順として優先するようにしている。本実施形態の場合、3値化をするため各画素に対して2つの閾値が対応する。従って、4画素×4画素の16画素の領域に対して分配順を決定すると、1〜32までの分配順が決められる。
次にステップS507における出力値決定処理について説明する。出力値決定部205(図6)は、分配順決定部203から受け取る処理対象領域の分配順に従って、集計部603から受け取る処理対象領域の目標値になるよう、各画素に出力値を1ずつ順に割り当てていく。処理対象領域における各画素の出力値のカウント値を初期値0とし、出力値「1」を分配する毎に目標値に達するまで順に各カウント値を1ずつ加算する。例えば分配順1007に対して、集計部603により算出された目標値9を割り当てるとする。分配順1の画素から順に出力値「1」を分配する毎にカウント値に1を加算し、目標値9に達すると出力値の分配を完了する。
出力値1を2回割り当てられた画素の出力値は2に、1回割り当てられた画素の出力値は1に、1度も割り当てられなかった画素の出力値は0が決定され、処理対象領域の各画素の出力値は出力結果1009に示す通りになる。以上の処理により、0〜255いずれかの画素値からなる入力画像データを0、1、2のいずれか3値によって表される出力画像データに変換する。処理対象領域を閾値マトリクス(例えば64画素×64画素)より小さい4画素×4画素のブロックごとに処理をする。また評価値の算出において、入力画像データが表す特徴による影響と閾値マトリクスの特性による影響を適宜制御できる係数αを導入した。その結果、適応的に入力画像データを量子化し、入力画像データの特徴と閾値マトリクスの特性とが干渉するのを防ぐことができる。
なお第2実施形態において、各画素の分配順ではなく、閾値の数に対して分配順を割り当てた。しかしながら3値化をする場合であっても、第1実施形態のように各画素1つの分配順を割り当ててもよい。例えば、それぞれの閾値に対して評価値を算出した後、画素を代表する評価値を1つ決定する。具体的には画素に対応する複数の評価値のうち、大きい方の評価値を代表値とすればよい。このようにすることで、各画素に対して分配順を1つ割り当てられる。このとき、順に出力値1ずつ分配順に割り当て、一巡した後、さらに出力値1ずつ加算していく方法でもよいし、分配順に出力値2を割り当て、最後に目標値に対して1だけ残った場合のみ、画素の出力値を1としてもよい。
また、入力画像データにおいて画素値が0(入力画像データにおける画素値レンジの最小値)である場合、どのような閾値と比較処理しても、出力値はディザ処理結果における0となる。また、入力画像データにおいて画素値が255(入力画像データにおける画素値レンジの最大値)の場合、どのような閾値と比較処理しても、出力値はディザ処理結果における最大値となる。そこで、入力画像データにおいて最小値または最大値をもつ画素については、評価値による順番付けを無視しても良い。その場合は、例えば、画素値が最小値である画素は、分配順が必ず最後にくるように並び替える、もしくは分配対象からはずすようにすればよい。
また、第1実施形態では「入力画素値―閾値」、第2実施形態では、「入力画素値−α×閾値」を評価値の例として説明した。このような評価値の算出は、特にハードウェア回路として実現する場合、簡易で、かつ画素値と閾値の両方を考慮した評価値を算出することができる。しかしながら評価値を導出するための関数はこれに限るわけではない。特に第2実施形態をソフト処理により実現する場合、単純な差分ではなく、画素値によって決まる関数と、閾値によって決まる関数とを組み合わせた評価関数を用いることにより、各画素の評価値を導出してもよい。この場合、画素値によって決まる関数は、画素値に対して単調増加な関数を、閾値によって決まる関数は、閾値に対して単調減少な関数を用いることで、前述の実施形態と同様の効果を得ることができる。
<第3実施形態>
第3実施形態では、分配順決定部203が実行する分配順決定処理を、より簡易的なハードウェア構成により実装した例について説明する。また本実施形態では、画像形成部107や表示部104の特性に合せたγ補正機能を追加することで、出力濃度を調整可能な例について説明する。前述の実施形態と同様の構成についは、同一の構成で実現可能であり、その説明を省略する。
(画像処理部106の構成)
図11は、第3実施形態における画像処理部106の構成例を示すブロック図である。前述の実施形態において説明した画像処理部106に対して、目標値算出部202の詳細な構成と、分配順決定部203の詳細な構成が異なる。第3実施形態における目標値算出部202は、平均値算出部601、γ補正部1101、ディザ処理部602、集計部603を有する。つまり第3実施形態では、平均値算出部601により各画素の画素値を平均値に置き換えた後に、γ補正部1101による処理が施される。本実施形態においてγ補正部1101は、画像形成部107の出力特性に応じて、γ補正処理を実行する。
また第3実施形態における分配順決定部203は、第一評価値算出部1102、第二評価値算出部1103、比較部1104、を有する。
第一評価値算出部1102は、処理対象領域に含まれるすべての画素に対して、評価値を算出する。一方第二評価値算出部1103は、処理対象領域における注目画素の評価値を算出して、出力する。第二評価値算出部1103では、第一評価値算出部1102と同じ評価関数に従って評価値を算出する。つまり第一評価値算出部1102からの出力が処理対象領域全体の評価値であるのに対し、第二評価値算出部1103は、注目画素の評価値のみを出力する。
比較部1104は、評価値算出部1103から出力される注目画素の評価値を、第一評価値算出部1102から出力される注目画素を含む処理対象領域における全ての画素の評価値夫々と比較する。比較結果に基づいて、注目画素に対応する評価値の大きさが何番目にあるか、すなわち分配順を決定する。
(画像処理部106における動作)
図11に示した第3実施形態の画像処理部106における動作は、第2実施形態において説明した図5に示すフローチャートのうち、ステップS505における目標値算出処理、およびステップS506における分配順決定処理が異なる。
まずステップS505における目標値算出処理について、図15を用いて説明する。ステップS901において平均値算出部601は、処理対象領域に含まれる各画素の画素値を平均し、平均値を算出する。算出した平均値を処理対象領域に含まれる各画素の画素値として、処理対象領域の画素値を出力する。
ステップS1501においてγ補正部210は、処理対象領域の各画素に対してγ補正をおこなう。画像処理部106が出力する画像データは、出力デバイス(画像形成部107や表示部104)を経てユーザーに利用される。このとき出力デバイスの特性によって、同じ画像データであっても出力濃度が異なる。そこで出力濃度を出力デバイス間で合せるために、γ補正をする。γ補正は、図12に示すような出力デバイスの入出力特性1202に対して、逆特性となるような補正カーブ1201によって、入力値を補正する。このようなγ補正によって、線形な出力濃度特性を得られる。
なお出力デバイスの入出力特性は、画素間の影響を強く受け非線形な特性となる。特にインクジェットプリンタにおいては出力した時のドットゲインの影響により非線形になりやすい。従って各画素に対してγ補正した後に平均化するよりも、所定領域を平均化した後にγ補正する方が、出力濃度を正確に補正ができる。また、γ補正する回数も所定領域を平均化した後にγ補正する方が大幅に少ない(所定領域が4画素×4画素の場合、1/16に削減される)。
以降のステップS902およびステップS903については第2実施形態と同様の処理を実行する。このようにγ補正処理を実行することで、出力デバイスの特性に応じた目標値(出力値合計)を算出することができる。
次に、ステップS506における分配順決定処理について説明する。図16は、第3実施形態における分配順決定部203の詳細な動作を示す。
ステップS1601において第一評価値算出部1102は、処理対象領域における全ての画素の評価値を算出し、出力する。図13は、第一評価値算出部1102における構成を示す図である。図10と同様の処理対象領域1001に対して、対応する図7に示した閾値群701を用いて、各画素の画素値と閾値との差分に基づいて評価値群1005を出力する。なおここでは第2実施形態におけるα=1とした時の「画素値−α×閾値」の評価値を例にしている。ステップS1601における処理は、単位領域ごとに行う処理であり、以降の処理は処理対象領域における画素ごとに処理を実行する。
ステップS1602において第二評価値算出部1103は、処理対象領域における注目画素の評価値を算出する。ステップS1601において第一評価値算出部1102と同様、α=1とした時の「画素値−α×閾値」により評価値を算出する。
ステップS1603において比較部1104は、ステップS1602において求めた注目画素の評価値を、ステップS1601において求めた処理対象領域内の全ての評価値と比較し、注目画素の評価値が何番目に大きいかを算出する。図14に比較部1104における構成を示す。評価値群1005が第一評価値算出部1102から出力される。注目画素が処理対象領域における右下画素であるとき、第二評価値算出部1103からは、注目画素の評価値1401が出力される。ここでは画素毎に2通りの評価値が算出されるので、算出された評価値−120および8それぞれを、処理対象領域の32通りの評価値全てと比較する。注目画素の評価値の方が小さい又は等号成立の場合1を出力、不成立の場合0を出力する。なお、比較器の等号成立の場合には、閾値の大きさなどによって出力値を変更してもよい。以上のように本実施形態では、出力値の分配順を決定する処理を所定領域の画素群単位と画素単位に分離して処理し、画素毎に逐次評価値の大きさ順位を算出することでソート処理をなくしている。このため本実施形態で示した構成は、入力画像データの特徴と閾値マトリクスの特性の干渉を低減しつつ、回路実装も容易となる利点を有する。また、出力デバイスの特性に合わせた精度の高いγ補正も容易となっている。
なお第3実施形態においては、画素毎に分配順が決定した後、出力値決定部205は処理対象領域内の全ての画素の分配順を待たずに、画素毎に出力値を決定するように構成してもよい。出力値決定部205は、注目画素の評価値が何番目の大きさであるによって決められる分配順と、集計部603が算出する処理対象領域の目標値とを比較することによって、注目画素の出力値を決定することができる。ここでは、注目画素に割り当てられた2つの閾値のうち、小さい方の閾値に対応する評価値の順位が目標値より大きい場合には注目画素の出力値を0とする。また、小さい方の閾値に対応する評価値の順位が目標値以下で、且つ、大きい方の閾値に対応する評価値の順位が目標値より大きい場合には出力値を1、大きい方の閾値に対応する評価値の順位が目標値よりも小さい場合には出力値を2とする。このように、出力値決定部205が画素毎に出力値を算出することで、処理の高速化を図ることができる。
<第4実施形態>
前述の実施形態では、単位領域毎に各画素の出力値を決定した。第4実施形態では、画素ごとに出力値を決定する。注目画素の出力値を決定するために注目画素の近傍画素群を設定する、ウィンドウ処理である場合の適用例について説明する。
第4実施形態における画像処理部106の構成は、前述の実施形態と同様の構成で実現可能である。本実施形態では図17に示すように、入力画像データ1700に対して、注目画素の出力値を決定するために、注目画素を中心とした3画素×3画素の領域1701を設定し、領域1701ごとにウィンドウ処理をおこなう。ウィンドウ処理では、注目画素eの出力値を領域1701内に含まれる画素群に基づいて決定する。ここで前述の実施形態と同様に、ウィンドウ内において画素値と対応する閾値とに基づいて各画素の評価値を算出し、分配順を決定する。領域1701内の目標値に達するまで出力値を1ずつ分配順に従って領域内1701の画素に割り当てた結果、得られる注目画素の出力値が決定される。注目画素eの出力値が決定されると、領域1701を隣に1画素ずらして注目画素を右隣りの画素に設定し、同様に注目画素の出力値を設定する。なおこのようなウィンドウ処理の画素群に合わせて、閾値群についても3画素×3画素の領域を閾値マトリクスから取り出して処理をおこなう。
画像処理部106の動作としては、前述の実施形態と比較して、所定領域における処理の結果得られる出力値が注目画素のみであること以外は、同様の動作で処理可能である。
ただし第4実施形態の場合、領域1701には既に出力値が確定している画素(一番上の列から右方向に順に処理が進むとすると画素a、b、c、d)がある。領域1701において目標とする出力値を分配するに当たって、既に確定された出力値を反映させることが望ましい。そこで領域1701における目標値(ステップS903におけるディザ処理結果の集計結果)から、予め出力値が確定している画素(画素a〜d)の出力値を差し引いておく。また評価値の算出については、3画素×3画素の領域(ウィンドウ)の移動によって新たにウィンドウに含まれる画素(領域1301の画素c、f、i)のみ評価値を計算すればよい。
以上の処理においても、前述の実施形態と同様の効果を得ることができる。
<第5実施形態>
第2実施形態では具体例としてブルーノイズ特性をもつ閾値マトリクスを用いる場合を例に説明した。第5実施形態では、LBP等の電子写真方式の画像形成部107のためのハーフトーン処理に用いられているAM系閾値マトリクスに適用した場合について説明する。本実施形態における画像処理部106の構成は、前述の実施液体と同一の構成で実現可能であるため、その説明を省略する。
本実施形態に用いる閾値マトリクスを、図18に示す。図18に示す閾値マトリクスはAM系閾値マトリクスやAMスクリーンと呼ばれる。AM系閾値マトリクスを用いてディザ処理すると、集中型ドットが周期的に配置されたドットパターンが得られやすい。図18に示す閾値マトリクスは、C(シアン)、M(マゼンタ)、Y(イエロー)、K(ブラック)各色に異なる閾値マトリクス1801、1802、1803、及び1804を有している。このような閾値マトリクスを用いたディザ処理においても、前述の実施形態と同様の処理を適用することによって、入力画像データの特徴と閾値マトリクスの特性との干渉を低減することができる。
本実施形態における単位領域は、閾値マトリクスに一致した領域でもよいし、セルと異なる画素群からなる領域でもよい。ここでは、各色において、共通の領域1800(3画素×3画素)を単位領域としている。閾値マトリクス1801および1802のサイズは13画素であり、処理単位領域1800(9画素)より大きい場合を示している。閾値マトリクス1803は3画素×3画素であり、単位領域1800と一致している。閾値マトリクス1804のサイズは8画素であり、単位領域1800(9画素)より小さい場合を示している。いずれの場合においても、前述の実施形態と同様に処理することにより、同様の効果を得られる。
前述の実施形態では、入力画像データにおける各画素について、画素値と閾値との差分を算出し、その差分を評価値として用いた。第6実施形態では、画素値と閾値とから評価値が導出される2次元テーブルを参照し、各画素の評価値を決定する方法について説明する。なお第6実施形態における画像処理部106の構成は、前述の実施液体と同一の構成で実現可能であるため、各構成の具体的な説明を省略する。
第6実施形態において分配順決定部203は、2次元テーブルを参照し、0〜255の画素値と、0〜255の閾値を入力として、画素毎に評価値を導出する。2次元テーブルには、予め画素値と閾値とに応じた評価値を対応付けて格納されている。評価値は、前述の実施形態と同様、画素値が大きいほど値が大きく、閾値が小さいほど値が小さくなるように対応付けられている。第6実施形態としては、「画素値―閾値」の値を対応づけておく。そして分配順決定部203は、処理対象領域における全ての画素に対して評価値を導出した後、評価値の値が大きい順にソートし、分配順を決定する。
以上のような実施形態によっても、前述の実施形態と同様に処理することにより、同様の効果を得ることができる。
なお、分配順決定部203が参照テーブルとして、入力画像データを構成する画素の画素値と画素位置(x座標、y座標)とによって評価値を導出する3次元テーブル等を用いることもできる。閾値マトリクスは、対応する画素位置によって閾値が決まる。従って、上述のように直接閾値(分配情報)を入力しなくても、画素位置から対応する閾値を反映した評価値を出力することもできる。
<その他の実施形態>
前述の通り、各実施形態では、各画素の画素値と比較することにより出力値を決定するために閾値マトリクスを用いているわけではない。従って評価値を算出する指標として、ディザ処理に使用可能な閾値マトリクスに限らず、所定領域内の各画素の順序を示す情報であれば同様の処理ができる。例えば、単位領域が4×4の場合、その所定領域における各画素の順序を示すためには、0〜16の4ビットのレンジでもよい。この場合、画素値と順序情報それぞれの評価値への影響度を合わせるため、入力画像データのレンジを順序情報のレンジに合わせてから、画素値と対応する順序との差分を算出するとよい。
前述の実施形態では、処理対象領域における目標値の算出方法として、処理対象領域内の画素値の平均値により各画素の画素値を置換した結果に対してディザ処理を実行し、集計する方法について説明した。しかしながら平均値で置換せずに、入力画像データを構成する処理対象領域の画素群に対してそのままディザ処理する構成としてもよい。この場合、通常の閾値マトリクスを用いたディザ処理によって決定されたドット(出力値)を再分配することになる。この方法においても、入力画像データの特徴を出力結果に反映でき、入力画像データと閾値マトリクスとの干渉により画質劣化するのを低減することができる。
また前述の実施形態では、「画素値−閾値」または「画素値−α×閾値」を画素の評価値と算出し、評価値が大きい順に分配順を決定した。しかしながら、例えば「閾値−画素値」あるいは「α×閾値−画素値」を評価値として算出してもよい。この場合、評価値が小さい値から昇順に分配順を決定することで、目標値に達するまで出力値を分配する順序が得られる。
本実施形態では、複数の画素を含む領域において、画素値が大きい画素ほど、かつ対応する閾値が小さい画素ほど、優先的に出力値1を分配されやすくなる(分配順が早くなる)評価値を設定すればよい。さらに、入力画像データの特徴による影響と閾値マトリクスの特性による影響の度合いを制御する係数αとしては、「α×画素値−閾値」のように画素値の方に乗算する係数であってもよい。
さらには本実施形態では、処理対象領域における複数画素の出力値の合計が目標値に達するまで、出力値を1ずつ分配順に割り当てた。一方、出力値を0とする画素から順に決定してもよい。例えば前述の第1実施形態の場合、画素値と閾値との差分により得られる評価値を、小さい値から大きい値の昇順にソート処理して分配順を決定する。そして、処理対象領域が表現可能な最大の出力値合計から目標値を引いた値に達するまで、分配順に出力値を0とする画素から決定し、残りの画素に出力値1を割り当てる。このような処理によっても、前述の実施形態と同様の処理を実現することができる。
さらに前述の実施形態と、従来のディザ処理を組み合わせるように構成することもできる。前述の実施形態では、入力画像データにおける処理対象領域が平坦部(各画素の画素値が同じ)である場合、評価値は閾値のみに依存することになる。つまりこれは、従来の処理対象領域における各画素の画素値と、対応する閾値とを比較することにより出力値を決定するディザ処理と同じ結果になる。そこでまず入力画像データに対して、処理対象領域ごとに平坦部か否かの属性を検出する。処理対象領域が平坦部である場合は、従来のディザ処理を実行し、平坦部でない場合は、前述の実施形態に示す評価値を用いた分配順の決定処理を経て出力値を決定する処理を実行する。このように従来の処理と組み合わせることもできる。
本発明は、ハードウェア構成により画像処理を実行する実施形態を例に説明したが、1以上の機能の実現する回路(例えば、ASIC)によっても実現可能である。また本発明は、ソフトウェアとして実装してもよい。この場合、画像処理装置は前述の実施形態のように画像形成システムに内蔵されるものではなく、PC(パーソナルコンピュータ)等、一般のコンピュータのメモリにソフトウェアとしてインストールされることになる。そしてコンピュータのCPUがインストールされたソフトウェアによって、前述の実施形態において示されたフローチャートに沿ったプログラムを読み込み、実行することで、各構成の機能を実現すればよい。その1例として、目標値算出処理を第1のCPUによって実行し、目標値を外部メモリに蓄積する。並行して分配順決定処理を第2のCPUによって実行し、分配順を外部メモリに蓄積する。そして、外部メモリから目標値および分配順を読み出して、出力値決定処理を第3のCPUによって実行させる。さらには、CPUによるソフトウェア処理と、専用の処理回路によるハードウェアを組み合わせることで、各処理部における処理を並列化することも可能である。