以下、本発明の具体的な実施の形態について図面を参照しつつ詳細に説明する。
図1は本発明の実施形態に係る画像処理装置のモジュール構成を示す概略図である。図示した画像処理装置のモジュール内部には、ディザ処理に使用する閾値データを格納するための閾値格納手段となる複数個(図例では最前の1個だけ表示)の閾値格納メモリ(以下、「メモリ」と略称)MEM1〜MEM4と、これに対応する複数(図例では4つ)のディザ処理部11〜14とが設けられている。複数個のメモリMEM1〜MEM4と複数のディザ処理部11〜14とが、互いに1:1の関係で対応している。すなわち、メモリMEM1はディザ処理部11に対応し、メモリMEM2はディザ処理部12に対応し、メモリMEM3はディザ処理部13に対応し、メモリMEM4はディザ処理部14に対応している。
また、各々のディザ処理部11〜14には、モジュールに入力されるラインシンクLS-i及びページシンクPS-iとともに、入力画像の各画素の階調値が8ビットのデジタルデータDATA-In[7:0]として個別に供給される構成となっている。ラインシンクLSは、入力画像の各ラインを処理するごとに出力される同期信号(水平同期信号)であり、ページシンクPSは、入力画像の各ページを処理するごとに出力される同期信号である。
メモリMEM1〜MEM4の個数は、入力画像の1つの画素サイズに相当する副走査方向の出力画素数に対応して設定されている。具体例として、ディザ処理の対象として入力される入力画像の解像度が600×600(dpi)で、ディザ処理によって出力される出力画像の解像度が4800×2400(dpi)である場合は、図2に示すように、入力画素の1つの画素サイズが出力画像の8×4画素(合計で32画素)サイズに相当するものとなる。したがって、入力画像の1つの画素サイズに対応する副走査方向の出力画素数は4個となる。そのため本実施形態では、この4個分(副走査方向の出力画素数分)のメモリMEM1〜MEM4が用意されている。このメモリの個数は、それぞれ画像処理システムで想定される、出力画像の副走査方向の最高解像度を入力画像の副走査方向の最低解像度で割った数(除算値)に応じて用意すればよい。
一例として、出力画像の副走査方向の最高解像度が2400dpiで、入力画像の副走査方向の最低解像度が600dpiである場合は、4個のメモリを用意すればよい。また、出力画像の副走査方向の最高解像度が1200dpiで、入力画像の副走査方向の最低解像度が600dpiである場合は、2個のメモリを用意すればよい。
各々のメモリMEM1〜MEM4には、例えば、上述のように入力画像の各画素の階調値が8ビット(256階調)のデジタルデータで入力されるものとすると、これと比較される8ビットの閾値データ(デジタルデータ)を、1ワード分のメモリ領域に8画素分だけ格納できるように、64ビット×256ワードのメモリ構成が採用されている。1ワード分のメモリ領域とは、1つのメモリアドレスの指定で読み出し及び書き込みが可能なメモリ空間上の領域をいう。各々のメモリMEM1〜MEM4の1ワード分のメモリ領域に格納される閾値データの個数は、入力画像の1つの画素サイズに対応する主走査方向の出力画素数分に設定される。例えば、上記同様にディザ処理の対象として入力される入力画像の解像度が600×600(dpi)で、ディザ処理によって出力される出力画像の解像度が4800×2400(dpi)である場合は、上記図2に示すように入力画素の1つの画素サイズが出力画像の8×4画素(合計で32画素)サイズに相当するものとなるため、入力画像の1つの画素サイズに対応する主走査方向の出力画素数は8個となる。そのため本実施形態では、この8個分(主走査方向の出力画素数分)の閾値データを、各々のメモリMEM1〜MEM4の1ワード分のメモリ領域に格納できる構成となっている。
また、複数個のメモリMEM1〜MEM4に対しては、それぞれ閾値マトリクスの各行に配列された閾値データを順に割り当てて格納するものとなっている。ここで、説明の便宜上、ディザ処理に使用する閾値マトリクスの構成を、主走査方向にm個の閾値データ、副走査方向にn個の閾値データといった具合にm×nの大きさ(nは正の整数)で表記するものとし、この閾値マトリクスの構成が図3に示すように100×10のマトリクスであるとする。また、マトリクス内の位置を特定するためのアドレス情報として、閾値マトリクスの1行目に0〜99の100個(m個)のマトリクス番号を、閾値マトリクスの2行目に100〜199の100個(m個)のマトリクス番号を、閾値マトリクスの3行目に200〜299の100個(m個)のマトリクス番号を、閾値マトリクスの4行目に300〜399の100個(m個)のマトリクス番号を、閾値マトリクスの5行目に400〜499の100個(m個)のマトリクス番号を、閾値マトリクスの6行目に500〜599の100個(m個)のマトリクス番号を、閾値マトリクスの7行目に600〜699の100個(m個)のマトリクス番号を、閾値マトリクスの8行目に700〜799の100個(m個)のマトリクス番号を、閾値マトリクスの9行目に800〜899の100個(m個)のマトリクス番号を、閾値マトリクスの10行目(n行目)に900〜999のマトリクス番号を、それぞれ割り当てるものとする。そうした場合、閾値マトリクスにm×nで配列される各々(合計1000個)の閾値データは、以下のような格納方式で各々のメモリMEM1〜MEM4に分配して格納される。
すなわち、閾値マトリクスの1行目に配列される100個(マトリクス番号0〜99)の閾値データは、図4に示すように、メモリMEM1に割り当てて格納する。このとき、メモリMEM1の1ワード分のメモリ領域(32ビットのビット列)には8個の閾値データを格納可能となっているため、それぞれ1ワード分のメモリ領域に8個ずつ閾値データを格納する。また、閾値マトリクスの1行目の最後列(主査走査方向のマトリクスの終端)に配列されるマトリクス番号99の閾値データを格納するメモリ領域(所定のメモリ領域)において、マトリクス番号99の閾値データの後に空き領域が生じる場合は、この空き領域を埋めるかたちで、マトリクス番号99の閾値データと同じ行(1行目)の最前列(マトリクス番号0)からの閾値データを続けて格納する。つまり、最後列の閾値データが格納される所定のメモリ領域に対しては、その最後列の閾値データの後に同じ行の最前列からの閾値データを続けて格納する。上記図4の場合は、所定のメモリ領域において、マトリクス番号99の閾値データをメモリMEM1に格納した状態で、その後に4個分の閾値データを格納する空き領域が生じるため、この空き領域にマトリクス番号0〜4の閾値データを格納する。
これと同様に、閾値マトリクスの2行目に配列される100個(マトリクス番号100〜199)の閾値データはメモリMEM2に割り当てて格納し、閾値マトリクスの3行目に配列される100個(マトリクス番号200〜299)の閾値データはメモリMEM3に割り当てて格納し、閾値マトリクスの4行目に配列される100個(マトリクス番号300〜399)の閾値データはメモリMEM4に割り当てて格納する。また、閾値マトリクスの5行目に配列される100個(マトリクス番号400〜499)の閾値データは上記1行目の閾値データに続いてメモリMEM1に割り当てて格納し、閾値マトリクスの6行目に配列される100個(マトリクス番号500〜599)の閾値データは上記2行目の閾値データに続いてメモリMEM2に割り当てて格納し、閾値マトリクスの7行目に配列される100個(マトリクス番号600〜699)の閾値データは上記3行目の閾値データに続いてメモリMEM3に割り当てて格納し、閾値マトリクスの8行目に配列される100個(マトリクス番号700〜799)の閾値データは上記4行目の閾値データに続いてメモリMEM4に割り当てて格納する。さらに、閾値マトリクスの9行目に配列される100個(マトリクス番号800〜899)の閾値データは上記1行目及び5行目の閾値データに続いてメモリMEM1に割り当てて格納し、閾値マトリクスの10行目に配列される100個(マトリクス番号900〜999)の閾値データは上記2行目及び6行目の閾値データに続いてメモリMEM2に割り当てて格納する。以上で、ディザ処理用の閾値マトリクスに配列される全て(合計1000個)の閾値データが、図5に示すように、4つのメモリMEM1〜MEM4に順に割り当てて格納されることになる。
この場合、ディザ処理に使用する閾値マトリクスの構成(サイズ、形状等)が変更になっても、共通のメモリMEM1〜MEM4で対応することができる。例えば、ディザ処理に使用する閾値マトリクスの構成を50×5マトリクスとする場合は、各々のメモリMEM1〜MEM4で閾値データの格納に使用されるメモリ領域の大きさ(メモリ使用率)が変わるだけで、装置構成は共通のものとなる。また、各々のメモリMEM1〜MEM4に格納された閾値データの読み出しは、それぞれに対応するディザ処理部11〜14で個別に制御することができる。そのため、閾値マトリクスの構成が変更になっても、それに応じて閾値データの読み出しを適切に制御することができる。
さらに、本実施形態においては、上記1000個の閾値データに加えて、4つのメモリMEM1〜MEM4のうち、閾値マトリクスの最終行(n行目)の閾値データを格納するメモリMEM2に続く、他の3つのメモリMEM3、MEM4,MEM1に対し、閾値マトリクスの最終行(本例では10行目)に続く冗長な行の閾値データを付加的に格納するものとなっている。ここで、「冗長な行」という用語は、既にメモリMEM1〜MEM4に閾値データを格納してある閾値マトリクスの行と同じ行(重複した行)という意味で用いている。この冗長な行の閾値データは、上記図5に示すように、メモリMEM1〜MEM4の個数から1だけ減算した、(メモリ個数−1)行分にわたって、上記3つのメモリMEM3、MEM4,MEM1に割り当てて格納する。
すなわち、メモリMEM3には、上記3行目及び7行目の閾値データ(マトリクス番号200〜299、600〜699の閾値データ)に続いて閾値マトリクスの1行目に配列される100個(マトリクス番号0〜99)の閾値データを格納し、メモリMEM4には、上記4行目及び8行目の閾値データ(マトリクス番号300〜399、700〜799の閾値データ)に続いて閾値マトリクスの2行目に配列される100個(マトリクス番号100〜199)の閾値データを格納し、メモリMEM1には、上記1行目、5行目及び9行目の閾値データ(マトリクス番号0〜99、400〜499、800〜899の閾値データ)に続い閾値マトリクスの3行目に配列される100個(マトリクス番号200〜299)の閾値データを格納する。
さらに、メモリMEM3、MEM4、MEM1に格納される冗長な行(1行目、2行目、3行目)の閾値データ(図5に*印で示す閾値データ)は、予め設定されたシフト情報にしたがってシフト処理されたデータとすることが望ましい。シフト情報は、入力画像の各ラインを順に処理していく過程で、閾値マトリクスの位置が副走査方向に1段ずれるときに、閾値マトリクスの位置を主走査方向(右方向、又は左方向)にずらす、いわゆるシフト処理を行うための情報であって、ドットスクリーンの角度等に応じて適宜設定される。例えば、シフト情報として「右方向に2シフト」と設定されていた場合は、これに適合するように、冗長な行の閾値データをメモリMEM3、MEM4、MEM1に格納する際の格納順序を切り替える。
例えば、メモリMEM3には冗長な行の閾値データとして1行目(マトリクス番号0〜99)の閾値データが格納されるが、このときの格納順序を上記シフト情報に応じてマトリクス番号0から2だけシフトさせたマトリクス番号98,99,0,1,…,97の順序で格納する。同様に、メモリMEM4には冗長な行の閾値データとして2行目(マトリクス番号100〜199)の閾値データが格納されるが、このときの格納順序をマトリクス番号198,199,100,101,…,197の順とする。また、メモリMEM1には冗長な行の閾値データとして3行目(マトリクス番号200〜299)の閾値データが格納されるが、このときの格納順序をマトリクス番号298,299,200,201,…,297の順とする。以上のような閾値データの格納(書き込み)は、ディザ処理の条件等に応じて、図示しないデータ書き込み手段により行われる。このデータ書き込み手段による閾値データの書き込み順序に合わせて、所望の閾値データをシリアルにモジュール内の各メモリMEM1〜MEM4に格納することにより、閾値マトリクス内に配列される全ての閾値データが複数個のメモリMEM1〜MEM4に分配して格納される。
一方、各々のディザ処理部11〜14は、上記複数個(本形態では4個)の閾値格納メモリMEM1〜MEM4のうち、それぞれに対応する閾値格納メモリから閾値データを読み出すとともに、この読み出した閾値データを入力画像の各画素の階調値と比較することにより、出力画像の画素データを生成するものである。さらに詳述すると、ディザ処理部11は、これに対応するメモリMEM1から閾値データを読み出して、これを入力画像の各画素の階調値と比較することにより、出力画像の画素データ(階調データ)を生成し、ディザ処理部12は、これに対応するメモリMEM12から閾値データを読み出して、これを入力画像の各画素の階調値を比較することにより、出力画像の画素データを生成するものである。また、ディザ処理部13は、これに対応するメモリMEM3から閾値データを読み出して、これを入力画像の各画素の階調値と比較することにより、出力画像の画素データを生成し、ディザ処理部14は、これに対応するメモリMEM4から閾値データを読み出して、これを入力画像の各画素の階調値と比較することにより、出力画像の画素データを生成するものである。
また、ディザ処理部11は、メモリ制御処理部111と、バッファ処理部(BUFF)112と、比較処理部113とを備えた構成となっている。メモリ制御処理部11は、ディザ処理部11に対応するメモリMEM1に対して閾値データを読み出すための読み出しアドレス(RADD)を生成する第1の生成処理と、メモリMEM1からバッファ処理部112へと読み出された閾値データの中から、比較処理部113での比較処理に必要な閾値データをバッファ処理部112から比較処理部113へと出力させるための制御信号を生成する第2の生成処理とを行うものである。バッファ処理部112は、メモリ制御処理部11から生成された読み出しアドレス(RADD)に対応してメモリMEM1から読み出された閾値データ(RDATA)を順に取り込むとともに、この取り込んだ閾値データの中から、メモリ制御処理部111が生成する制御信号にしたがって、比較処理部113での比較処理に必要な閾値データを選択して比較処理部113に与えるものである。比較処理部113は、1つの入力画素の階調値とこれに対応してバッファ処理部112から与えられた閾値データとを比較し、この比較結果を出力画像の画素データDATA-oとして出力するものである。この比較処理部113では、1つの入力画素に対応して複数の閾値データがバッファ処理部112から与えられた場合に、1つの入力画素の階調値とこれに対応する複数の閾値データとの大小関係を同時に比較処理する。そして、入力画素の階調値よりも閾値データが小さいマトリクス位置の画素は白(1)で出力し、入力画素の階調値よりも閾値データが大きいマトリクス位置の画素は黒(0)で出力する。
図6はバッファ処理部112の内部構成を示すブロック図である。図示のようにバッファ処理部112は、第1のバッファメモリBM1と、第2のバッファメモリBM2と、第1のセレクタSEL1と、第2のセレクタSEL2と、バレルシフタBSHとを備えた構成となっている。第1のバッファメモリBM1は、メモリ制御部111からの1回の読み出しアドレス(RAD)の指定でメモリMEM1から読み出される8個分(64ビット分)の閾値データRDATA[63:0]を一時的に格納するものである。この第1のバッファメモリBM1に格納される8個の閾値データは、メモリ制御部11から指定された読み出しアドレスにしたがってメモリMEM1から新たな閾値データが読み出されるたびに随時更新(上書き)される。第2のバッファメモリBM2は、入力画像の各ライン(画素列)を処理するにあたって、所定の7個分(56ビット列分)の閾値データを格納するために使用されるものである。第2のバッファメモリBM2に格納される7個の閾値データは、バレルシフタBSHから比較処理部113へと出力される8個分(64ビット列分)の閾値データBUFF[63:0]から、メモリ制御処理部111からの制御信号(選択信号)にしたがって選択される。
第1のセレクタSEL1には、第2のバッファメモリBM2に格納された7個分の閾値データと、メモリ制御部111からの1回の読み出しアドレス(RADD)の指定でメモリMEM1から読み出される8個分(64ビット分)の閾値データRDATA[63:0]のうちの7個(上位56ビット)の閾値データがそれぞれ入力される。これに対して、第1のセレクタSEL1は、これに入力される合計14個分(112ビット分)の閾値データの中から、メモリ制御処理部111からの制御信号(選択信号)にしたがって7個(56ビット分)の閾値データを選択し、これを第2のセレクタSEL2に与える。第2のセレクタSEL2には、第1のセレクタSEL1で選択された7個の閾値データと、第1のバッファメモリBM1に格納された8個の閾値データがそれぞれ入力される。これに対して、第2のセレクタSEL2は、これに入力される合計15個(120ビット分)の閾値データの中から、メモリ制御処理部111からの制御信号(選択信号)にしたがって8個(64ビット分)の閾値データを選択し、これをバレルシフタBSHに与える。バレルシフタBSHは、第2のセレクタSEL2で選択された8個の閾値データを、現在設定されているシフト情報にしたがってバレルシフトさせることにより、8個の閾値データBUFFO[63:0]を主走査方向で適宜並べ替えて出力するものである。バレルシフタBSHによる閾値データの並べ替えは、メモリ制御処理部111からの制御信号にしたがって行われる。
以上、ディザ処理部11の構成について詳細に説明したが、他の3つのディザ処理部12,13,14についてもディザ処理部11と同様の構成となっている。したがって、各々のディザ処理部11,12,13,14の処理動作は基本的に同様のものとなるため、ここではディザ処理部11の処理動作についてのみ詳細に説明することとする。また、ディザ処理の条件の一例として、ディザ処理に使用する閾値マトリクスには上記図3に示す100×10のマトリクス構成を採用するものとする。また、入力画像の解像度を600×600(dpi)とし、出力画像の解像度を4800×2400(dpi)とする。
先ず、図7に示すタイミングチャートにおいて、基準クロックCLKに同期してページシンクPS-i及びラインシンクLS-iが順に立ち上がると、ラインシンクLS-iの立ち上がりタイミングをトリガとして、入力画像の各画素の階調値データDATA-In[7:0]が1クロックCLKごとに入力される。その際、基準クロックCLKに同期して第1のバッファメモリBM1への閾値データの書き込み信号と第2のバッファメモリBM2への閾値データの書き込み信号を順に立ち上げる。
これにより、入力画像の各ラインを処理する際には、この処理の開始に先だって図8(A)に示すように、第2のバッファメモリBM2に7個の閾値データが書き込まれる。このとき、第2のバッファメモリBM2に書き込まれる閾値データは、メモリMEM1内の1ワード分のメモリ領域のうち、閾値マトリクスの1行目の最後列に配列される閾値データ(つまりマトリクス番号99の閾値データ)を含む所定のメモリ領域に格納された閾値データの後に続く閾値データとなる。この場合、所定のメモリ領域には、上記図4に示すようにマトリクス番号96〜3の閾値データが格納されているため、これに続く複数の閾値データとしてマトリクス番号4〜10の7個の閾値データが第2のバッファメモリBM2に格納される。第2のバッファメモリBM2に格納される閾値データの個数は、メモリMEM1の1ワード分のメモリ領域に格納可能な閾値データの個数(本例では8個)から1だけ減算した値とする。こうして第2のバッファメモリBM2に格納された閾値データは、入力画像の1ライン分の処理が終了するまで(次にラインシンクLS-iが立ち上がるまで)保持される。
次いで、メモリMEM1から8個の閾値データRDATA[63:0]が順に読み出されるとともに、この読み出された8個の閾値データRDATA[63:0]が第1のバッファメモリBM1に順に書き込まれ、そこに一時的に保存される。さらに、第1のバッファメモリBM1に書き込まれた8個の閾値データは、第2のセレクタSEL2に入力される。一方、第1のセレクタSEL1には、第2のバッファメモリBM2に格納された7個の閾値データとメモリMEM1から読み出された7個(上位7ビット)の閾値データとが入力される。このとき、第1のセレクタSEL1は、メモリ制御処理部111からの制御信号にしたがって7個の閾値データを選択し、これを第2のセレクタSEL2に与える。ただし、入力画像のラインを処理する途中で且つメモリMEM1の所定のメモリ領域に格納された8個の閾値データ(マトリクス番号96〜3)が第1のバッファメモリBM1に格納されるまでの間、第2のセレクタSEL2は、第1のバッファメモリBM1から入力された8個の閾値データを順に選択してバレルシフタBSHに出力する。例えば、ライン処理の途中で、図8(B)に示すように、マトリクス番号48〜55の閾値データが第1のバッファメモリBM1から第2のセレクタSEL2に入力された場合は、この8個の閾値データを第2のセレクタSEL2で選択してバレルシフタBSHに出力する。
また、ライン処理の途中で、図8(C)に示すように、マトリクス番号96〜3の閾値データが第1のバッファメモリBM1から第2のセレクタSEL2に入力された場合は、この8個の閾値データを第2のセレクタSEL2で選択してバレルシフタBSHに出力する。そうした場合、次の処理では、図8(D)に示すように、第1のバッファメモリBM1にマトリクス番号0〜7の閾値データが書き込まれた状態で、メモリMEM1から新たに8個の閾値データ、すなわちマトリクス番号8〜15の閾値データRDATAが読み出される。このとき、前回の処理(図8(C)の処理)では、マトリクス番号3までの閾値データを出力しているため、これに連続させるためには、マトリクス番号4からの閾値データを8個出力する必要がある。
これに対して、第1のバッファメモリBM1には、マトリクス番号0〜7の閾値データが格納されているため、これら8個の閾値データが第2のセレクタSEL2に入力される。また、メモリMEM1から新たに読み出された8個の閾値データRDATA(マトリクス番号8〜15の閾値データ)のうち、上位7ビットに相当するマトリクス番号8〜14の閾値データが、第2のバッファメモリBM2に格納された7個の閾値データとともに、第1のセレクタSEL1に入力されると、第1のセレクタSEL1では、メモリ制御処理部111からの制御信号にしたがって、マトリクス番号8〜14(新たにメモリMEM1から読み出した方)の閾値データを選択し、これを第2のセレクタSEL2に与える。その結果、第2のセレクタSEL2には、マトリクス番号0〜7の閾値データと、マトリクス番号8〜14の閾値データとが入力される。そこで、第2のセレクタSEL2では、メモリ制御処理部111からの制御信号にしたがって、マトリクス番号4から始まる8個の閾値データ、つまりマトリクス番号4〜11の閾値データを選択し、これをバレルシフタBSHに与える。以降、同様の処理により、マトリクス番号が連続するかたちで8個の閾値データが第2のセレクタSEL2からバレルシフタBSHへと順に出力される。
こうして閾値マトリクスの1行目に配列された閾値データをメモリMEM1から順に読み出してバッファ処理部112に取り込み、入力画素の各画素の階調値との比較に必要となる8個の閾値データBUFFO[63:0]をバッファ処理部112から比較処理部113に順に出力すると、その後再び閾値マトリクスの主走査方向の終端となるマトリクス番号99の閾値データをメモリMEM1から読み出して処理するときに、閾値マトリクスの主走査方向の終端付近での閾値データの出力形式が図9(A)のようになる。すなわち、第1のバッファメモリBM1に格納されたマトリクス番号88〜95の閾値データと、メモリMEM1から新たに読み出されて第1のセレクタSEL1により選択されたマトリクス番号96〜2の閾値データとが、それぞれ第2のセレクタSEL2に入力されるため、その中からマトリクス番号92〜99の閾値データを第2のセレクタSEL2で選択してバレルシフタBSHに出力する。
このとき、メモリ制御処理部111では、バレルシフタBSHに出力される閾値データの中に、閾値マトリクスの終端となるマトリクス番号99の閾値データが含まれるか否かに応じて、次の処理で、メモリMEM1からの閾値データの読み出し順序を切り替える。ここで、バレルシフタBSHに出力される閾値データの中に、閾値マトリクスの終端となるマトリクス番号99の閾値データが含まれる場合とは、上記第1のセレクタSEL1により選択されたマトリクス番号96〜2の閾値データのうち、全ての閾値データがバレルシフタBSHに出力された場合と、マトリクス番号96〜1の閾値データがバレルシフタBSHに出力された場合と、マトリクス番号96〜0の閾値データがバレルシフタBSHに出力された場合と、マトリクス番号96〜99の閾値データがバレルシフタBSHに出力された場合をいう。また逆に、バレルシフタBSHに出力される閾値データの中に、閾値マトリクスの終端となるマトリクス番号99の閾値データが含まれない場合とは、上記第1のセレクタSEL1により選択されたマトリクス番号96〜2の閾値データのうち、マトリクス番号96〜98の閾値データがバレルシフタBSHに出力された場合と、マトリクス番号96,97の閾値データがバレルシフタBSHに出力された場合と、マトリクス番号96の閾値データがバレルシフタBSHに出力された場合をいう。
したがって、例えば上記図9(A)に示すように、バレルシフタBSHに出力される閾値データの中に、閾値マトリクスの終端となるマトリクス番号99の閾値データが含まれる場合は、次の処理で、メモリMEM1から1ワード分だけ飛ばした次の8個の閾値データを読み出す。
具体的には、上記図9(A)の時点で第1のバッファメモリBM1にはマトリクス番号88〜95の閾値データが格納され、メモリMEM1からはマトリクス番号96〜3の閾値データが読み出されているため、次にメモリMEM1から閾値データを読み出すときは、1ワード分となるマトリクス番号0〜7の閾値データを飛ばして、次の8個の閾値データ、つまりマトリクス番号8〜15の閾値データを読み出す。そのため、次の処理では、図9(B)に示すように、第1のバッファメモリBM1にマトリクス番号96〜3の閾値データが格納され、メモリMEM1からはマトリクス番号8〜15の閾値データが読み出された状態となる。この場合、前回の処理では、マトリクス番号99までの閾値データを出力しているため、これに連続させるためには、マトリクス番号0からの8個の閾値データ、つまりマトリクス番号0〜7の閾値データを出力する必要がある。
このうち、マトリクス番号0〜3の閾値データは第1のバッファメモリBM1に格納され、マトリクス番号4〜7の閾値データは第2のバッファメモリBM2に格納されている。そこで、第1のセレクタSEL1では、メモリ制御処理部111からの制御信号にしたがって、第2のバッファメモリBM2に格納された7個の閾値データを選択してこれを第2のセレクタSEL2に与える。一方、第2のセレクタSEL2では、メモリ制御処理部111からの制御信号にしたがって、第1のバッファメモリBM1から与えられた8個の閾値データの中から、マトリクス番号0〜3の閾値データを選択するとともに、第1のセレクタSEL1から与えられた7個の閾値データの中から、マトリクス番号4〜7の閾値データを選択する。その結果、第2のセレクタSEL2からバレルシフタBSHには、前回の処理で使用したマトリクス番号92〜99の閾値データに連続するかたちでマトリクス番号0〜7の閾値データが出力される。
次の処理では、図9(C)に示すように、第1のバッファメモリBM1にマトリクス番号8〜15の閾値データが格納されているため、第2のセレクタSEL2では、第1のバッファメモリBM1から与えられる8個の閾値データを選択してバレルシフタBSHに出力する。以降は、上記図9(C)の場合と同様に、第2のセレクタSEL2が、第1のバッファメモリBM1から入力された8個の閾値データを順に選択してバレルシフタBSHに出力することになる。
一方、例えば上記図10(A)に示すように、バレルシフタBSHに出力される閾値データの中に、閾値マトリクスの終端となるマトリクス番号99の閾値データが含まれない場合は、次の処理で、メモリMEM1から1ワード分だけ飛ばすことなく、次の8個の閾値データ、つまりマトリクス番号0〜7の閾値データを読み出す。そのため、次の処理では、図10(B)に示すように、第1のバッファメモリBM1にマトリクス番号96〜3の閾値データが格納され、メモリMEM1からはマトリクス番号0〜7の閾値データが読み出された状態となる。この場合、前回の処理では、マトリクス番号98までの閾値データを出力しているため、これに連続させるためには、マトリクス番号99からの8個の閾値データ、つまりマトリクス番号99〜6の閾値データを出力する必要がある。
このうち、マトリクス番号99〜3の閾値データは第1のバッファメモリBM1に格納され、マトリクス番号4〜6の閾値データは第2のバッファメモリBM2に格納されている。そこで、第1のセレクタSEL1では、メモリ制御処理部111からの制御信号にしたがって、第2のバッファメモリBM2に格納された7個の閾値データを選択してこれを第2のセレクタSEL2に与える。一方、第2のセレクタSEL2では、メモリ制御処理部111からの制御信号にしたがって、第1のバッファメモリBM1から与えられた8個の閾値データの中から、マトリクス番号99〜3の閾値データを選択するとともに、第1のセレクタSEL1から与えられた7個の閾値データの中から、マトリクス番号4〜6の閾値データを選択する。その結果、第2のセレクタSEL2からバレルシフタBSHには、前回の処理で使用したマトリクス番号91〜98の閾値データに連続するかたちでマトリクス番号99〜6の閾値データが出力される。
次の処理では、図10(C)に示すように、第1のバッファメモリBM1にマトリクス番号0〜7の閾値データが格納され、メモリMEM1から新たにマトリクス番号8〜15の閾値データが読み出されるため、第2のセレクタSEL2では、第1のバッファメモリBM1から与えられる8個の閾値データのうちマトリクス番号7の閾値データを選択するとともに、メモリMEM1からの読み出しデータとして第1のセレクタSEL1で選択される7個(マトリクス番号8〜14)の閾値データを選択し、この選択した閾値データ、つまりマトリクス番号7〜14の閾値データをバレルシフタBSHに出力する。以降は、上記図10(C)の場合と同様に、第2のセレクタSEL2が、第1のバッファメモリBM1から入力された8個の閾値データのうちの1個と、第1のセレクタSEL1から入力される7個の閾値データ(メモリMEM1からの読み出しデータ)を選択してバレルシフタBSHに出力することになる。
以上のような処理を適用して入力画像の1ライン目の処理を終えた後は、メモリMEM1からの閾値データの読み出し対象を、閾値マトリクスの1行目の閾値データから5行目の閾値データに変更して、上記1ライン目と同様の方式で2ライン目を処理する。また、入力画像の2ライン目の処理を終えた後は、メモリMEM1からの閾値データの読み出し対象を、閾値マトリクスの5行目の閾値データから9行目の閾値データに変更して、上記1ライン目及び2ライン目と同様の方式で3ライン目を処理する。
このディザ処理部11と同様の処理を他の3つのディザ処理部12〜14でも並列的に実行することにより、図11に示すように、それぞれ1回(1クロック)の読み出し動作でメモリMEM1〜MEM4から8個(出力8画素分)の閾値データを読み出して、それぞれに対応するバッファ処理部(BUFF1,BUFF2,BUFF3,BUFF4)に取り込むことにより、入力画像の1つの画素との比較に必要となる8×4マトリクス分の閾値データを取得し、これをそれぞれに対応する比較処理部に与えることにより、8×4画素の出力画像データを生成することができる。したがって、メモリからの閾値の読み出し動作に合わせてリアルタイムにディザ処理を行うことができる。また、4つのメモリMEM1〜MEM4に対して、それぞれ閾値マトリクスの各行に配列された閾値データを順に割り当てて格納しているため、各々のメモリMEM1〜MEM4からの閾値データの読み出しを、これに対応する個々のディザ処理部11〜14で個別に制御することができる。したがって、装置状態の経時的な変化や、YMCKの各色のスクリーン角度等に応じて閾値マトリクスの形状を任意に変更することができる。
ここで、ディザ処理の条件として、上記同様にディザ処理用の閾値マトリクスを100×10のマトリクス構成にするとともに、入力画像の解像度を600×600(dpi)、出力画像の解像度を4800×2400(dpi)とすると、入力画像の1つのライン(画素列)を処理するために100×4のマトリクス分(400個)の閾値データが必要になる。したがって、入力画像の1ライン目を処理する場合は、閾値マトリクスの1行目〜4行目に配列された400個(マトリクス番号0〜399)の閾値データが必要になり、入力画像の2ライン目を処理する場合は、閾値マトリクスの5行目〜8行目に配列された400個(マトリクス番号400〜799)の閾値データが必要になる。
さらに、入力画像の3ライン目を処理する場合は、閾値マトリクスの9行目から10行目に配列された200個(マトリクス番号800〜999)の閾値データと、閾値マトリクスの1行目から2行目に配列された200個(マトリクス番号0〜199)の閾値データとが必要になる。このとき、上記図5に示す閾値格納方式では、閾値マトリクスの最終行に続く冗長な行の閾値データを予めメモリMEM3,MEM4,MEM1に格納してあるため、入力画像の3ライン目を処理する際に必要となる計400個の閾値データのうち、マトリクス番号800〜899の閾値データをメモリMEM1から、マトリクス番号900〜999の閾値データをメモリMEM2から、マトリクス番号0〜99の閾値データをメモリME3から、マトリクス番号100〜199の閾値データをメモリMEM4から、それぞれ読み出すことができる。したがって、入力画像の3ライン目を問題なく処理することができる。
また、閾値格納用のメモリMEM1〜MEM4の個数から1を減算した行数分(本例では3行分)だけ、冗長な行の閾値データをメモリMEM3、MEM4,MEM1に割り当てて格納しているため、入力画像の各々のラインを、閾値マトリクスのいずれの行の閾値データを使って処理する場合でも、閾値マトリクスの各行の閾値データのうち、副走査方向に連続する4行分の閾値データを用いてディザ処理を行うことができる。したがって、例えば図12に示すように、入力画像の所定のラインを、閾値マトリクスの10行目に配列された閾値データと、これに連続する1行目から3行目の閾値データとを用いてディザ処理する場合でも、メモリMEM2に格納された閾値データ(閾値マトリクスの10行目に配列された閾値データ)とメモリMEM3、MEM4,MEM1に格納された冗長な行の閾値データ(閾値マトリクスの1行目〜3行目に配列された閾値データ)を、それぞれに対応するバッファ処理部(BUFF1,BUFF2,BUFF3,BUFF4)に取り込み、この取り込んだ閾値データを用いてディザ処理することができる。
ただし、入力画像の3ライン目では、ディザ処理に適用する閾値マトリクスの位置が副走査方向に1段ずれるため、仮に、メモリMEM1に格納されたマトリクス番号0〜99の閾値データ(閾値マトリクスの1行目に配列される閾値データ)と全く同じ順序で、マトリクス番号0〜99の閾値データをメモリMEM3に格納したとすると、メモリMEM3からマトリクス番号0〜99の閾値データを読み出すときの順序を、予め設定されたシフト情報に合わせて調整する必要がある。
これに対して、本実施形態においては、冗長な行の閾値データを格納するメモリMEM3、MEM4,MEM1に対して、予め設定されたシフト情報にしたがってシフト処理された閾値データを格納するものとしたので、そこから閾値データを読み出すときの順序をいちいち調整する必要がない。よって、入力画像の3ライン目を処理する場合は、メモリMEM1,MEM2からの閾値データの読み出し順序と同様の順序を適用してメモリMEM3,MEM4から閾値データを読み出すことができる。したがって、メモリ制御処理部111による読み出しアドレスの指定方法を簡素化することができる。
なお、上記実施形態においては、入力画像の各ラインを処理するにあたって、メモリMEM1から読み出した閾値データをバッファ処理部112で保存した後に、入力画像の各画素の階調値と比較するものとなっているが、これ以外にも、メモリMEM1から読み出した閾値データを入力画像の各画素の階調値と比較した後に、その閾値データをバッファ処理部112で保存するようにしてもよい。
さらに本発明の応用例として、バッファ処理部112を、一対のバッファ処理部(バッファ手段)からなるピンポンバッファ(デュアルバッファ)の構成とし、メモリMEM1〜MEM4に格納された閾値マトリクスの各行の閾値データの中から、2回の読み出し動作(2クロックの読み出し動作)で入力画像の2ライン分の処理に使用する閾値データを読み出して上記一対のバッファ処理部に格納(一時的に保存)することにより、出力画像の解像度の変更に柔軟に対応することが可能となる。
例えば、上記の処理の場合で説明すると、図13に示すように、メモリMEM1〜MEM4からそれぞれ閾値マトリクスの異なる行の閾値データを、それぞれに対応するメモリ制御処理部からの読み出しアドレスの指定により2回の読み出し動作(2クロックの読み出し動作)で読み出して、一対のバッファ処理部(BUFF1とBUFF1’、BUFF2とBUFF2’、BUFF3とBUFF3’、BUFF4とBUFF4’)に順に格納して8×8マトリクスサイズ分の閾値データを取り込むとともに、一対のバッファ処理部からの閾値データの取り出し順序をメモリ制御処理部からの制御信号にしたがって主走査方向で制御することにより、上述のように取り込んだ8×8マトリクスサイズ分の閾値データを主走査方向で4×8マトリクスずつに分割(2等分)して取り出すようにセレクタ等で選択し、それぞれ1つの入力画素の階調値と比較することにより、600×600(dpi)の解像度で入力された画像を2400×4800(dpi)の解像度の画像で出力することができる。また、図示はしないが、8×8マトリクス分の閾値データを1つの入力画素の階調値と比較することにより、600×600(dpi)の解像度で入力された画像を4800×4800(dpi)の解像度の画像で出力することもできる。
11,12,13,14…ディザ処理部、MEM1,MEM2,MEM3,MEM4…メモリ(閾値格納メモリ)、111…メモリ制御部、112…バッファ処理部、113…比較処理部、BM1…第1のバッファメモリ、BM2…第2のバッファメモリ、SEL1…第1のセレクタ、SEL2…第2のセレクタ、BSH…バレルシフタ