【実施例】
【0016】
以下,本発明を実施例に沿って説明する。
図4は本発明の画像処理装置のブロック図を示す。送られてきた画像データ1は,画像処理部2により二値化処理され,処理された結果は記録素子あるいは光源に対応した画素データをドライバー3へ送る。これらの操作は水平同期信号(画素クロック)および垂直同期信号(1走査ごと)に同期して行われる。最後にインクの吐出あるいは光源像のON/OFFとして出力される(5)。
【0017】
図5は,画像処理部2を詳しく説明したものである。パス数をNとしたとき,各パス毎のディザマトリックスからなるマスクをPM(k,i,j)とする。ここでkはマスクナンバーを表し,k=0,1,2,…,N-1 である。(i,j)はディザマトリックスの要素の位置を表す。N個のマスクパターンは後述のグリーンノイズ特性を示すディザパターンを生成し、システムのハードディスク6などに納められている。N個のマスクパターンは1走査ごとに出される垂直同期信号4により,k番目のパターンPM(k,i,j)がマスクパターンメモリ7に転送される。その後,画像メモリなどに格納された画像データ1と比較して二値化処理手段8にて二値化が行われる。かかる二値化は副走査記録素子に対応した画素分相当を行う。続いて,副走査方向に時系列的に処理されたデータは記録素子に対応するべくシリアル- パラレル変換9を行い,後段のノズルドライバーあるいはレーザドライバーに送られる。
【0018】
次に,グリーンノイズ特性を示すディザマトリックスについて説明する。グリーンノイズによるハーフトーニングは,クラスター型のFMスクリーンとして種々の方法が提案されている。この方式は,プリンタ・エンジンのMTF特性に合わせることができ,安定した高精細中間調画像が出力できる。このため,電子写真方式のプリンタなどで安定した出力を行うことができ,またインクジェットプリンタなどでは,インク滴が記録画素サイズより大きい場合に生じるドットゲイン対策のため,かかるクラスター型のFMスクリーンが有効となる。
このグリーンノイズ特性を呈すハーフトーニングは,従来はリアルタイムにはできなかった。このため,二値化処理とパスマスクを分離せざるを得なかったわけである。しかしながら,本発明は,ディザ方式で二値化するため,演算処理は非常に簡単であり,リアルタイムでの高速出力が可能となる。
【0019】
次にグリーンノイズ特性を示すディザマスクの作成アルゴリズムについて説明する。
グリーンノイズ特性を呈すドットは,その空間周波数スペクトルがfmin〜fmax の間に制限されるようにフィルタ操作を行う。求めるディザマトリックスサイズをM×M ( Mは2のべき乗)とすると,そのNyquist周波数fnは,fn=M/2となる。印字ドットの黒化率(単位面積での黒ドットの占める面積率)をgとした時(0≦g≦1),g =1が全黒,g =0 が全白を表す。階調レベルLは,画素データがnbitとすると,
L=2^n (1-g)
となる。
【0020】
かかるグリーンノイズ特性を示すディザマトリックスを得るため,本発明は以下の2つの工程を行う。
1.まず,中間濃度の状態でのドットプロファイルを,プリンタエンジンに最適な空間周波数となるように帯域を制限してフィルタリングを行う工程
2.次に,階調の全域にわたって,帯域制限したフィルタリングを行い,ドットプロファイルを得る工程
以上2つの工程により,中間濃度でのディザの閾値マトリックスを決定する。
【0021】
より具体的には,
1.黒化率gが中間値(g=0.5)の点プロファイルを,ラジアル周波数frが低周波数域および高周波数域で0となり,その中間部で有限の値を持つバンドパス・フィルタD(u,v,1/2)(但し,(u,v)は二次元空間周波数)によりフィルタリングを行う第1の工程
2.階調単位で変化させた黒化率gが, g±Δgの全域において,gに応じてラジアル周波数fminおよびfmaxを変えたバンドパス・フィルタD(u,v,g) によりフィルタリングを行う第2の工程。
かかる2つの工程により,ディザの閾値マトリックスを決定する。
【0022】
第1の工程を
図6のフローに沿って説明する。今,ディザマトリックスサイズをM×Mとし,この領域に黒点を打つものとし,黒化率g,点(i,j)における点プロファイルを p(i,j,g)とする。まず,中間(g=1/2)の点プロファイルは,以下のステップで行われる。
まず、初期値としてg=1/2 とし,M^2/2個の黒点をランダムに与え点プロファイルp(i,j,1/2)を用意する。(初期状態はホワイトノイズ)
(STEP 1) 点プロファイルの二次元FFTを行 P(u,v,1/2)を得る。
(STEP 2) P(u,v,1/2)にフィルタD(u,v,1/2)を掛けて新たなP'(u,v,1/2)を得る。ここでD(u,v,1/2)はラジアル周波数frが fmin≦fr≦fmax の領域のみ値を持つグリーンノイズフィルタを用いる。
(STEP 3) P'(u,v,1/2)に逆フーリエ変換を行い,多値の点プロファイルp'(i,j,1/2)を得る。
(STEP 4) 誤差関数:e(i,j,1/2)=p'(i,j,1/2)-p(i,j,1/2)を計算し,各画素位置における誤差を正負の大きい順に並べ,大きい順に白→黒,黒→白と反転する。この時反転させる数は等しい。
(STEP 5) 上記操作を誤差が一定の許容量以内になるまでSTEP1からSTEP5を繰り返す。すべての画素が許容量内に入れば最終的にg=1/2の点プロファイルを得る。
【0023】
次に,
図7に第二の工程の処理フローを示す。第2の工程は,1階調単位で変化させた g±Δgにおいて, 以下の操作を行う。
(STEP 1) p(i,j,g)の二次元FFTを行いP(u,v,g)を得る。
(STEP 2) P(u,v,g)にフィルタD(u,v,g)を掛けて新たなP'(u,v,g)を得る。ここでD(u,v,g)はgによってfmin およびfmaxが変化するフィルタである。
(STEP 3) P'(u,v,g)に逆フーリエ変換を行い,多値の点プロファイルp'(i,j,g)を得る。
(STEP 4) 誤差関数:e(i,j,g)=p'(i,j,g)-p(i,j,g)を計算し,各画素位置における誤差を正負の大きい順に並べ,階調値に対応する数N=M^2/2^nだけ,大きい順に白→黒,あるいは黒→白と反転する。この時,ディザマトリックスの反転した画素位置 に階調値を書き込む
(STEP 5) g±ΔgとしてSTEP 1〜STEP 5を繰り返す。g=0,1となった時,本操作を終了する。
この操作を繰り返し,g=0,1となった時本操作を終了し,ディザ閾値マトリックスを算出する。
【0024】
ここで,ラジアル周波数fmax及びfminは以下のようにして設定する。
フィルタD(u,v,g)のfmax及びfminをgによらず固定値とした場合,明暗部における点プロファイルの一様性が崩れる。このため,gによってfmax及びfminを可変とし,明暗部においては,グリーンノイズ特性からブルーノイズ特性に接近するようにfmax及びfminを設定する。このようにすることにより明暗部の粒状性の回避が可能となる。
【0025】
上記ステップに沿ってディザマトリックスを得ることができるが、以下のパラメータを用いると便利である。
黒化率gにおける平均的ドット間隔による周波数は,
f0=√g・fn 0≦g≦1/2 の時
f0=√(1-g)・fn 1/2≦g≦1の時
で与えられる。フィルタD(u,v,g)が,円形状である場合,ラジアル方向のバンドフィルタとして,
D(fr,g)=有限値 :fmin≦fr≦fmax の時
D(fr,g)=0 :その他の時
であるとする。fmax及び fminは f0 を基準とした差分を,
Δfmax=fmax-f0≡a・fn
Δfmin=fmin-f0≡b・fn
として表す。一般に,マトリックスのサイズRによって,Nyquist周波数fnが異なるので,fnで規格化した値(a,b)を用いることにより
(a,b)=( fmax/fn ,fmin/fn)
として表される(a,b)をパラメータとして記述することにより,マトリックスサイズMによらずにクラスターサイズを限定できる。
【0026】
図8に一例として導出結果を示したもので,(a,b)=(0,-1/4) における128×128、64×64、32×32でのディザマトリックスパターンとそのFFTスペクトル図を示す。ディザマトリックスのパターンは閾値を輝度データとして表している。また,FFTスペクトルパターンは図の中心を0周波数として表している。スペクトル分布からわかるように低域及び高域でスペクトル強度が低減している。さらに,a,b値を変えることによりスペクトル特性を変えることが可能である。
【0027】
図9は128×128の前述の方法で求めたディザマトリックスの各階調レベルにおけるドットパターンおよびスペクトル特性を示したものである。各階調でドットパターンがクラスター化し、等方的で一様なパタンであることが分かる。また、スペクトル分布も、各階調で周波数空間での高域と低域が低下したグリーンノイズ特性が保存されていることが分かる。
【0028】
図10は64×64のディザパターン(a)と,それを4つ繋ぎ合わせて128×128のサイズのもの(b)である。通常、サイズの小さなディザマトリックスではその繰り返しによる境界が目立つが、ランダムなドットパターン特性のため,両者の繋ぎ合わせの境界は目立たない。このため、小さなマトリックスサイズでも問題はない。
【0029】
次にマルチパスにおけるディザマトリックスの生成について説明する。今,グリーンノイズ特性を示す工程1,2で求められたM×MのディザマスクをM(i,j)とする(ただし,i,j=0,1,2,…,M-1), パス数をNとし,k(k=0,1,2,…,N-1)番目のM×MのパスマスクをPM(k,i,j)とすると,PMは,M(i,j)より,d=M(i,j)とすると,
PM(d mod N, i, j)=d
であたえられる。ここで、D mod N は、DをNで除算したときの余りを表す。すなわち、以下のアルゴリズムで示される。
# Algorithm: Generation of PassMask
# Require: M(i,j)
# Output: PM(k,i,j)
# initialization
PM(k,i,j)=0 for all i,j,k
# Calculation PM
for all i,j
d=M(i,j)
PM(d mod N,i,j)=d
end for
【0030】
具体例として,4パスの場合を説明する。今64×64のグリーンノイズディザマトリックスをMとし、4つの64×64のパスマスクPM(0)、PM(1)、PM(2)、PM(3) (i,jは省略)を求める。Mは画像データが各色8ビットの場合,マトリックスの各要素の閾値が0から255までの値でそれぞれ16個ずつ存在する。それを各値により以下のように振り分ける。
PM(0)={0,4, 8, 12,…,4n }
PM(1)={1,5, 9, 13,…,4n+1}
PM(2)={2,6,10,14,…,4n+2}
PM(3)={3,7,11,15,…,4n+3}
それ以外の箇所は0とする。要素の位置は元のマトリックスの位置である。また、最初にPMをすべて0にイニシャライズして,その後,必要な個所を上式に従って書き込むことで容易に得られる。
【0031】
図11はディザマトリックスを分割したものを示すもので,(a)は分割前の64×64のディザマトリックス,(b)はk=0の分割されたパスマスクを示す。分割前のディザマトリックスの各要素の閾値が{0,4,8,12,…,252}のもののみ抽出され,他は0の値である。図(c)〜(e)はそれぞれk=1,2,3のパスマスクを示す。
ディザ処理は画像データdと閾値とを比較し,
閾値≠0、かつ d>閾値 ならば 出力1
それ以外は 出力0
と二値化する。もしイニシャライズでPMをすべて最大値(この場合255)にしておれば,
d>閾値 ならば 出力1
それ以外は 出力0
となる。
【0032】
一般に,Nパスに分解するとした場合は,
PM(0)={0,N, 2N, 3N,…}
PM(1)={1,N+1,2N+1,3N+1,…}
PM(2)={2,N+2,2N+2,3N+2,…}
・・・
PM(k)={k,N+k,2N+k,3N+k,…}
・・・
PM(N)={N-1,2N-1,3N-1,…}
となるように分割する。したがって,Nパス時のk番目のディザマトリックスは,Mの閾値が
N・i + k (ただし,i=0,1,2,…で,N・i + k<256)
であるものが選ばれる。
【0033】
図12(a)はディザマトリックスで画像の二値化処理を表したものである。ディザマスクPM(k,i,j)を画像データにブロック単位で重ね,対応する画素同士を比較して二値化を行う。マルチパスの場合,N個のディザマスクがあるため,すべて同じ位置に重ねてそれぞれのマスクごとに二値化を行う。
【0034】
ここで1走査ごとに副走査方向にR/N画素分だけ紙送りされるため,同図(b)に示されるように記録素子に送られる二値化データは,R/N画素シフトさせる必要がある。まず1パス目はPM(0)のディザマトリックスで二値化した値をヘッドの先頭から順に送る。続いて2パス目は,PM(1) のディザマトリックスで二値化した値をヘッドの先頭からR/Nずらして送る。すなわち,同図(a)の2パス目の位置10のデータを記録素子へ転送すればよい。同様に3パス目は,PM(2) のディザマトリックスで二値化した値をヘッドの先頭から2・R/Nずらして送る。
【0035】
もし,グリーンノイズマスクのサイズMが記録素子の数Nと同じであれば,Nパス終了すると一巡する。しかしながら,必ずしも一致する必要はない。
図13はM×Mサイズ(ただし,Mは2のべき乗)のグリーンノイズディザマトリックスに副走査方向にR個並んだ記録素子で,M≠Rの場合を示す。z番目の走査で先頭からr番目(r=0,1,2,…,R-1)の記録素子に与える画像データI(i, j)は,
I(i, j)=I(i, R/N・z+r )
となる。一方,ディザ閾値PM(k,p,q)の値は,
PM(k,p,q)=PM(z/N, i mod M, (R/N・z+j) mod M)
となり,二値化は、
PM(k,p,q)≠0 で,かつ,I(i,j)>PM(k,p,q) ならば出力1
それ以外は 出力 0
となる。かかる操作は画像データとディザマトリックスの対応するアドレスからデータを呼び出し比較処理を行うだけでよく、複雑な演算はいらない。上記の場合,出力値は輝度データであるが,プリンタの場合は濃度データに変換し,出力値0,1を反転させればよい。
【0036】
図14は4パスで画像出力を行った場合の画像形成を示す。1パス目ではPM(0)のディザマスクで二値化を行い,2パス目ではPM(1)のディザマスクで二値化を行ったものをヘッドに対してR/Nだけシフトした二値化データで印字する。以下同様に4パス目まで行い,4パス目で,画像が完成する。以下同様のことを繰り返す。
印字の先頭は全パスが重畳されないため,全パス数の画像が再現される4パス目から画像が始まるように記録素子のスタートをあらかじめ副走査方向にR/N×(N-1)相当分だけずらしておけばよい。
また、パス数Nを変更する時は、前述の式に新たなNを入れて同様の計算を行えばよい。