以下、添付の図面を参照して本願発明の一実施形態を説明する。尚、以下の実施形態は、本願発明の技術分野における当業者による実施を容易にするために開示を提供するものであり、特許請求の範囲によって確定される本願発明の技術的範囲に含まれる一部の実施形態にすぎない。従って、本願明細書に直接的に記載されていない実施形態であっても、技術思想が共通する限り本願発明の技術的範囲に包含されることは当業者にとって自明であろう。
なお、便宜上複数の実施形態を記載するが、これらは個別に発明として成立するだけでなく、もちろん、複数の実施形態を適宜組み合わせることでも発明が成立することは、当業者であれば容易に理解できよう。
図1は本実施形態に係る画像処理装置の一構成例を示すブロック図である。図1において、1は画像処理装置を制御するCPU、2はプログラム等を格納するROM、3はバスブリッジ、4−1〜4−mはm個(mは1以上の整数)の画像処理モジュール(以下、これらを総称する場合に画像処理モジュール4と記載する)、5はDRAM7へのアクセスを調停するアービタ、6はDRAMインターフェース部、7はDRAM、8はヘッドインターフェース、9はI/Oポートである。本実施形態においてはDRAM7は、CPU1、各画像処理モジュール4−1〜4−mによって共有されているが、パフォーマンス維持のため、CPU1が画像処理モジュール4とは共有しない別のRAMを持つ構成としても良い。
次に、上述した構成による画像処理装置の処理動作について説明する。
まず、CPU1はROM2に格納されているプログラムに従って、I/Oポート9より処理すべき画像データを受け取り、バスブリッジ3、アービタ5、DRAMインターフェース部6を経てDRAM7へ格納する。次に、CPU1は画像処理モジュール4−1のコンフィグレーションレジスタにパラメータを設定し、画像処理モジュール4−1を動作させる。コンフィグレーションレジスタは各画像処理モジュール毎に設けられ、当該画像処理モジュールの動作を決定するパラメータを保持する。たとえば、画像処理モジュール4−1が処理すべきデータが格納されたRAM7のアドレス範囲や、画像処理モジュール4−1の処理の結果として得られたデータを格納すべきRAM7のアドレス範囲をパラメータとして保持する。画像処理モジュール4−1は、コンフィグレーションレジスタに設定されたアドレス範囲についてRAM7からデータの読み出しが終了したとき、或いは、コンフィグレーションレジスタに設定されたアドレス範囲についてRAM7への書き込みが終了したときに割り込みを発生し、その旨をCPU1へ通知する。
CPU1は、割り込みを受付けると、割り込み要因を解析する。画像処理モジュール4−1の処理すべきデータの読み出し終了の場合は、次の処理すべきデータの読出しアドレス範囲を画像処理モジュール4−1のコンフィグレーションレジスタに設定し、画像処理モジュール4−1の処理を続行させる。画像処理モジュール4−1の処理したデータの書き込み終了の場合は、次の処理データの格納先となるアドレス範囲を画像処理モジュール4−1のコンフィグレーションレジスタに設定し、画像処理モジュール4−1の処理を続行させると共に次の画像処理モジュール4−2のコンフィグレーションレジスタを設定し、画像処理モジュール4−2を動作させる。
画像処理モジュール4−2は所定の処理を実行し、コンフィグレーションレジスタに設定されたアドレス範囲のデータの読み出しが終了するか、コンフィグレーションレジスタに設定されたアドレス範囲への処理済みデータの書き込みが終了すると割り込みを発生し、CPU1へ通知する。CPU1は、割り込みを受付けると、割り込み要因を解析する。画像処理モジュール4−2の処理すべきデータの読み出し終了の場合は、次の処理すべきデータの読出しアドレス範囲を画像処理モジュール4−2のコンフィグレーションレジスタに設定し、画像処理モジュール4−2の処理を続行させる。画像処理モジュール4−2の処理したデータの書き込み終了の場合は、次の処理データの格納先となるアドレス範囲を画像処理モジュール4−2のコンフィグレーションレジスタに設定し、画像処理モジュール4−2の処理を続行させると共に次の画像処理モジュール4−3のコンフィグレーションレジスタを設定し、画像処理モジュール4−3を動作させる。
このように、前の処理が終わった直後に次の画像処理モジュールを起動し、処理データを次々と画像処理モジュールに受け渡しすることで、画像処理モジュール単位のパイプラインを構成することができる。
以上のようにして画像処理モジュール4−m−1までの処理が進み、所定以上のビットマップデータが生成されると、図示しないプリントエンジンが起動される。画像処理モジュール4−mは、プリントエンジンの同期信号に合せて、ヘッドI/F8を経てビットマップデータをプリントエンジンへ送る。こうして、画像がプリントされる。
図2は、本実施形態に係わる画像処理装置の画像処理モジュール4の内部の詳細な構成を説明するためのブロック図である。図2において、10はリードバッファ、11−1〜11−nはサブモジュール(以下、これらを総称する場合にサブモジュール11と記載する)、12はライトバッファ、13はアービタ、14はリードアドレス生成部、15は割り込み制御部、16はライトアドレス生成部、17はスイッチマトリクスである。
101はコンフィグレーションレジスタであり、スイッチマトリクス17やリードアドレス生成部14、ライトアドレス生成部16等の動作パラメータを設定する。102はクロック分配部であり、装置のクロックパルスclkを当該モジュール内の各部へ分配する。なお、クロック分配部102は、コンフィグレーションレジスタ101の設定により、任意のサブモジュールへのクロックclkの供給を停止することができる。また、103は電源供給部であり、当該モジュール内の各部への電源供給を制御する。コンフィグレーションレジスタ101の設定により、任意のサブモジュールへの電源供給を停止することができる。
上述したようにCPU1は画像処理モジュール4のコンフィグレーションレジスタ101に動作パラメータを設定する。この設定により、リードアドレス生成部14に対してリード開始アドレスとリード終了アドレスが設定され、リードイネーブル信号Renがセットされる。また、コンフィグレーションレジスタ101へのパラメータの設定により、ライトアドレス生成部16に対してライト開始アドレスとライト終了アドレスが設定され、ライトイネーブル信号Wenがセットされる。
アービタ13はリードバッファ10のバッファの空き容量Rp及びリードアドレス生成部14のイネーブル信号Renを検出し、リードアドレスが有効(Ren=1)でリードバッファ10にデータが格納可能(Rp≧Rn(Rn:DRAM7からのリードアクセス単位(後述)))であれば、アービタ5へリードリクエスト(PREQ=1、PNRW=0、PNUM=Rn、PADD=Rad)を発行する。一方、ライトバッファ12のデータ蓄積量Wpが所定のワード数以上(Wp≧Wn(Wn:DRAM7へのライトアクセス単位(後述)))になると、アービタ13はライトアドレス生成部16のイネーブル信号Wenを検出してアービタ5へライトリクエストを発行する。すなわち、ライトアドレスが有効(Wen=1)でライトバッファ12よりデータが出力可能(Wp≧Wn)であれば、アービタ5へライトリクエスト(PREQ=1、PNRW=1、PNUM=Wnum、PADD=Wad)を発行する。
アービタ5は、画像処理モジュール4からのリクエスト信号PREQを受け取ると、PNRWによりリード/ライトの判別(0:リード、1:ライト)を行い、PNUMにより転送ワード数を、PADDでアドレスを検知する。CPU1及び他の画像処理モジュールからのリクエストがなければ、アービタ5は、DRAMインターフェース部6を通じてDRAM7の該当データのアクセスを開始する。リクエストが受付けられると、アービタ5は受領信号PACKをリクエスト元の画像処理モジュールに返す。一方、CPU1及び他のモジュールからのリクエストがある場合は、優先順位に従ってリクエストを受付ける。
アービタ13は、アービタ5から受領信号PACKを受け取ると、リードリクエストの場合は受領信号Rackをリクエスト元のリードアドレス生成部14に返す。リードアドレス生成部14は、上記受領信号Rackを受け取ると、RAM7からのデータ読出し他のための次のアドレスを生成する。なお、リクエストしたアドレスがコンフィグレーションレジスタに設定されたリード終了アドレスであった場合は、リードイネーブル信号Renをリセットし、リード終了信号Rendを割り込み制御部15に出力する。
一方、ライトリクエストに対して受領信号PACKを受け取った場合は、アービタ13は受領信号Wackをリクエスト元のライトアドレス生成部16に返す。ライトアドレス生成部16は、受領信号Wackを受け取ると、RAM7へのデータ書き込みのための次のアドレスを生成する。なお、リクエストしたアドレスがコンフィグレーションレジスタに設定されたライト終了アドレスであった場合は、ライトイネーブル信号Wenをリセットし、ライト終了信号Wendを割り込み制御部15に出力する。
割り込み制御部15は、コンフィグレーションレジスタによってリード終了割り込みマスク及びライト終了割り込みマスクの設定が可能になっている。各割り込みマスクの設定が割り込みイネーブルとなっている場合は、上記リード終了信号Rendまたはライト終了信号Wendによって割り込み信号INTを生成し、CPU1へ通知する。CPU1は、割り込み信号INTを受付けると、割り込み制御部15のステータスを読み取る。割り込み要因がリード終了の場合は、CPU1は上記リード終了割り込みマスクをリセットして割り込みを解除する。さらに処理を続行する場合は、コンフィグレーションレジスタ101へのリード開始アドレスとリード終了アドレスの再設定、リードイネーブル信号のセット等の処置を行った後、リード終了割り込みマスクをセットする。同様に、割り込み要因がライト終了の場合は、ライト終了割り込みマスクをリセットして割り込みを解除する。さらに処理を続行する場合は、コンフィグレーションレジスタ101へのライト開始アドレスとライト終了アドレスの再設定、ライトイネーブル信号のセット等の処置を行った後、ライト終了割り込みマスクをセットする。
次に、DRAM7よりデータが読み出されるとアービタ5はDRAMデータ有効信号PVALIDをリクエスト元のモジュールに返す。リクエスト元のモジュールでは、アービタ13よりリードバッファ10へデータ有効信号Rvalidを返す。リードバッファ10はデータ有効信号Rvalidがセットされている期間、DRAMデータ出力信号PDIN上のデータを格納する。この操作により、DRAM7のPADD(=Rad)で示されるアドレス(リードアドレス生成部14が生成したアドレス)からデータが読み出され、リードバッファ10へ格納される。
一方、DRAM7にデータを書き込む場合は、DRAM7の書き込みタイミングに合せてアービタ5はDRAMデータ有効信号PVALIDをリクエスト元のモジュールに返す。リクエスト元のモジュールでは、アービタ13よりライトバッファ12へデータ有効信号Wvalidを返す。ライトバッファ12はデータ有効信号Wvalidがセットされている期間、DRAMデータ入力信号PDOUT上に書き込むデータを出力する。この操作により、ライトバッファ12のデータがDRAM7のPADD(=Wad)で示されるアドレス(ライトアドレス生成部16が生成したアドレス)へ格納される。
リードバッファ10は、サブモジュール11の処理に必要なデータが揃った時に有効信号valid_outをセットし、サブモジュール11の処理に必要なデータが揃っていない場合は有効信号valid_outをリセットする。また、サブモジュール11からの保持要求信号stall_inがセットされていなければ、リードバッファ10は格納されたデータをクロックに同期して順次出力する。サブモジュール11からの保持要求信号stall_inがセットされている場合はデータを更新しない。サブモジュール11は有効信号valid_outがセットされているデータのみを受け取る。なお、データの受け取りが不可能の場合は、保持要求信号stall_inをセットし、リードバッファ10の出力をホールドする。なお、入力データの並び替えが不要な場合は、リードバッファ10はFIFOで構成できる。同様に、出力データの並び替えが不要な場合は、ライトバッファ12はFIFOで構成できる。
画像処理モジュール4の内部は1つ以上の画像処理サブモジュール11によって構成されており、各サブモジュール間では、上記と同様の動作(有効信号validと保持要求信号stallによるハンドシェーク(あるモジュールの_inは他のモジュールの_outに接続される))によってデータの受け渡しが行われる。
図3はリードバッファ、ライトバッファを含むサブモジュール間の信号のやり取り(上述のハンドシェークの様子)を示すタイミングチャートである。データ送信側のサブモジュール11は、データが出力可能であればクロックclkの立ち上がりに同期してデータ信号d1及び有効信号validをセットする(T1)。次のクロックの立ち上がりで受信側からの保持要求信号stallがセットされていなければデータが受信されたとみなし、次のデータが出力可能であればデータ信号data及び有効信号validをセットする(T2)。次のデータが出力可能でなければ有効信号validをリセットする(T3)。次のクロックの立ち上がりで受信側からの保持要求信号stallがセットされていたら、データが受信されなかったとみなし、データ信号data及び有効信号validをホールドする(T7)。なお、受信側からの保持要求信号stallがセットされていても有効信号validがセットされていなければ(T8)、無効データであるので、データ信号data及び有効信号validはホールドされずに次の有効データが出力される(T9)。即ち、有効信号validがセットされていない時の保持要求信号stallは無視される。
データ受信側のサブモジュールは、受信可能であれば有効信号validがセットされているデータ信号d1をクロックclkの立ち上がりに同期して受け取る(T1,T2,T4,T5)。受信不可能であれば保持要求信号stallをセットし、送信側のデータ出力d5及びvalidを保持させる(T6)。受信可能となったら保持要求信号stallをリセットし、送信側のデータ出力d5を受け取る(T7)。
ライトバッファ12は、バッファに空きがあれば、サブモジュール11からの有効信号valid_outがセットされた時のデータ信号data_outをバッファに格納する。バッファに空きがなければ、保持要求信号stall_outをセットし、サブモジュール11の出力をホールドさせる。
スイッチマトリクス17は各サブモジュール11及びリードバッファ10、ライトバッファ12との接続を行う。即ちリードバッファ10あるいはサブモジュール11の所定サブモジュールのdata_outとvalid_out,stall_inをライトバッファ12あるいは別の所定サブモジュールのdata_inとvalid_in,stall_outに各々接続する。この接続はコンフィグレーションレジスタ101の設定によって行われる。従って、CPU1によるコンフィグレーションレジスタのパラメータ設定によりスイッチマトリクス17の接続状態を変更することで、処理内容に応じて動的に各モジュール間の接続を変更することが可能となる。
なお、スイッチマトリクス17は公知のクロスバースイッチまたはセレクタ群によって構成される。通常、接続の組み合わせが限定される場合にはセレクタを、接続の組み合わせに制限がない場合はクロスバースイッチが適している。なお、送信側のdata_outと受信側のdata_inのビット数は、接続情報に応じて有効ビットが判定できれば必ずしも一致させる必要はない。即ち、有効なビットのみ接続されていれば良い。これにより不要な接続回路を削減できる。また、コンフィグレーションレジスタ101の設定により、クロック分配部102や電源供給部103を制御し、データパスに接続されていないサブモジュール(即ち未使用モジュール)へのクロックや電源の少なくとも何れかの供給を止めることで、消費電力の無駄を省くことができる。
図4は、本実施形態に係わる画像処理装置の各モジュールにおけるアドレス生成部(14,16)の具体的な構成を説明するためのブロック図である。リードアドレス生成部14、ライトアドレス生成部16は同一の構成であり、ともに図4を用いて説明する。図4において、18はセレクタ、19は加算部、20はレジスタ、21は比較部、22はシーケンサである。
まず、CPU1によって開始アドレスがレジスタ20にセットされる。シーケンサ22はリクエスト受領信号ack(Rack、Wack)によって状態遷移し、状態に応じてセレクタ18のアドレス差分値を選択する。例えば、シーケンサ22は内部に1つ以上のカウンタを持ち、受領信号ackによって該当カウンタがカウントアップ(またはカウントダウン)し、各カウンタのキャリー(またはボロー)によって、セレクタ18を制御する。従って、所定回数のアクセス毎に、セレクタより出力されるアドレス差分値が切り替わる。なお、本実施形態においてはDRAM7への転送効率アップのため、複数ワード数単位でアクセスする。従って、アクセス単位内に不要なデータが存在する場合(即ちアクセス単位内でアドレスが不連続となる場合)、アクセス単位のワード数n(Rn、Wn)を変更し、不要なアクセスを防止する。
選択されたアドレス差分値は加算部19にて直前のアドレスに加算され、受領信号ackによってレジスタ20に保持される。レジスタ20の出力は比較部21において終了アドレスと比較され、レジスタ20の出力(即ちアドレス生成部のアドレス出力)が終了アドレスに一致した場合は受領信号ackによって終了信号がセットされる。
セレクタ18に入力されるアドレス差分値D1〜Dk及びシーケンサのパラメータ(カウンタの進数等)は、コンフィグレーションレジスタ101に設定される。アドレス差分値のMSBと出力アドレスのMSBの重みを一致させることにより、負の差分値を表現することができる。なお、バーストモードのように複数ワードをまとめてアクセスする場合もあるため、アドレス差分値と出力アドレスのビット数は必ずしも一致するとは限らない。なお、通常、アドレス差分値の数は、シーケンサ22内のカウンタの数+1となる。
図5は、本実施形態に係わる上記アドレス生成部のパラメータを説明する図である。例えば、図5に示すようなブロック状にデータのアクセス(2次元アドレッシング)を行う場合、レジスタ20にはまず、開始アドレスAsがロードされる。シーケンサ22はアドレス差分値D1を選択するようにセレクタ18を制御する。セレクタ18はアドレス差分値D1を選択しているので、加算部19の出力はAs+D1となる。受領信号ackが返ってくると、レジスタ20は次のアドレスであるAs+D1を出力する。ここで、水平方向のアクセス数をwとすると、上記操作をw−1回繰り返す。
w回目のアドレス生成になると、シーケンサ22はアドレス差分値D2を選択するようにセレクタ18を制御する。従って、w回目のアドレスはAs+(w−1)・D1+D2となって、次のラインの先頭データP1,0がアクセスされる。次に受領信号ackが返ってくると、シーケンサ22はアドレス差分値D1を選択するようにセレクタ18を制御する。このように、シーケンサ22はw回のアクセス毎に1回アドレス差分値D2を選択し、それ以外ではアドレス差分値D1を選択するようにセレクタ18を制御する。よって、シーケンサ22では、w−1をロードし、受領信号ackによって、カウンタを−1し、カウンタが0になった時に次の受領信号ackによってw−1をリロードするw進カウンタを構成し、w進カウンタが0になった時にアドレス差分値D2を選択する信号を生成すればよい。従って、この場合(2次元アドレッシング)のアドレス生成部のパラメータは、開始アドレスAs、終了アドレスAe、水平方向のアクセス数w(設定値はw−1)、2つのアドレス差分値D1、D2の合計5つとなり、これらはコンフィグレーションレジスタ101に保持される。
例えば、図5に示すように、アドレスが隣接している場合、D1=1となる。また、右から左へアクセスする場合は、D1=−1とすれば良い。同様に、90°回転や、飛び飛びにアクセスするような場合においても、上記パラメータを適切に設定することにより可能となる。但し、90°回転の場合は、水平方向のアクセス数wの代わりに垂直方向のアクセス数hを用いる。
図6は、本実施形態に係わる上記アドレス生成部の別のシーケンスを説明する図である。例えば、図6に示すようなRGB線順次データを点順次データに変換するような場合(3次元アドレッシング)、シーケンサ22はアドレス差分値D1を2回選択した後、アドレス差分値D2を1回選択するようにセレクタ18を制御する。そして、このシーケンスをw−1回繰り返すと、シーケンサ22はアドレス差分値D3を選択するようにセレクタ18を制御する。このようなアドレスの生成を実現するために、シーケンサ22は、
(1)c−1(この例ではプレーン数c=3)をロードし、受領信号ackによってカウンタを−1し、カウンタが0になった時に次の受領信号ackによってc−1をリロードするc進カウンタと、
(2)w−1をロードし、c進カウンタが0の時の受領信号ackによってカウンタを−1し、カウンタが0かつc進カウンタが0の時の受領信号ackによってw−1をリロードするw進カウンタとを構成し、
(3)c進カウンタとw進カウンタが共に0の時はアドレス差分値D3を、c進カウンタのみ0の時はアドレス差分値D2を、それ以外ではアドレス差分値D1を選択する信号を生成する。
従って、この場合(3次元アドレッシング)のアドレス生成部のパラメータは、開始アドレスAs、終了アドレスAe、プレーン数c(設定値はc−1)、水平方向のアクセス数w(設定値はw−1)、3つのアドレス差分値D1、D2、D3の合計7つとなり、これらはコンフィグレーションレジスタ101に保持される。同様に、アドレス差分値D1を色プレーン間のアドレス差分にセットすれば面順次データの点順次化も可能である。また、D2(図5の場合はD1)を逆スキャン時に2の補数に変換することで、双方向スキャンに対応させることもできる。この場合、スキャン方向判定部、2の補数変換入力セレクタ、2の補数変換部、2の補数変換出力セレクタが新たに必要になるが、逆スキャン用差分レジスタを追加して次元数を1つ追加する構成でも対応可能である。
次に、具体的な処理を例に、各接続状態における処理の流れを説明する。
[第1の処理モード(高精度及び高速処理)]
図7は、本実施形態に係わる画像処理モジュール4の第1の処理モードを説明するためのブロック図である。図7において、23は入力部、24は入力γ変換部、25は色変換部、26は出力γ変換部、27は中間調処理部、28は出力部である。このモジュールでは、RGB点順次データよりCMY面(バンド)順次のビットマップ生成を行うものとする。
入力部23より読み出されたRGB点順次データは、入力γ変換部24にて濃度リニアな信号に変換される。濃度リニアな信号に変換された印刷データは、色変換部25にてプリンタの色材の濃度データ(出力デバイスカラー)に変換される。つづいて、出力γ変換26にて出力γ補正され、中間調処理部27にてビットマップデータ(ドットバターン)に変換され、出力部28より出力される。画像データの中間調処理に誤差拡散法を用いた場合、前ラインの量子化誤差が入力部23より中間調処理部27に入力される。また、量子化誤差を周囲の画素に拡散させるために出力部28より量子化誤差をDRAM7へ格納する。誤差バッファをDRAM7上に構成するので、水平方向画素数の制限が解消される。
なお、ハード量の削減及び色材の色数制限解除のため、色変換部25では通常1つの色材データのみが出力される。従って、例えば、プリンタの色材がC,M,Yの3色であったとすると、3色のビットマップを生成するのに、このモジュールは3回起動されることになる。
図8は、図7に示した機能を実現するためのサブモジュールの接続関係を示すブロック図である。図8において、29は画像データの入力バッファ、30は入力画像データのアドレス生成回路、31は入力誤差データのアドレス生成回路、32は誤差データの入力バッファ、33はR信号用入力γ変換LUT、34はG信号用入力γ変換LUT、35はB信号用入力γ変換LUT、36は上位ビット用色変換3D−LUT、37は下位ビット用色変換3D−LUT、38は上位ビット用3D−LUTの補間回路、39は下位ビット用3D−LUTの補間回路、40は補間出力合成用加算器、41は上位ビット用誤差拡散回路、42は下位ビット用誤差拡散回路、43は画像データの出力バッファ、44は出力画像データのアドレス生成回路、45は出力誤差データのアドレス生成回路、46は誤差データの出力バッファである。
なお、図2では、リードバッファおよびリードアドレス生成部の組と、ライトバッファおよびライトアドレス生成部モジュールの組が1組ずつ設けられた構成を示したが、以下に説明するモジュール4では、リードバッファおよびリードアドレス生成部の組を2組、ライトバッファおよびライトアドレス生成部の組を2組設けている。これは、誤差データ用と画像データ用のリードおよびライトバッファを設けたためである。
入力画像データのためのアドレス生成回路30は、画像データ入力バッファ29に所定以上の空きがある場合、アービタ5へリクエストを出すと同時にデータの処理順序に合わせてDRAM7のアドレスを生成し出力する。DRAM7より読み出された画像データは画像データ入力バッファ29に格納され、RGBの色毎に入力γ変換LUT33、34、35に各々入力される。入力γ変換LUT33、34、35は入力γ補正のためのテーブルで、本実施形態では256エントリ16ビット出力構成である。この場合、入力画像データ8ビットが入力され、γ補正されたデータが16ビットで出力される。なお、後述するように後段の3D−LUTの容量削減及び補間回路の簡素化のため、テーブルに格納するデータは所定のスケーリングが施されている。
γ補正されたRGBデータ(16ビット)の上位8ビットは、上位ビット用色変換3D−LUT36で格子点データに変換され、補間回路38による線形補間を経て出力色データとなる。なお、ここでは色変換3D−LUT36に格納する格子点データに予め出力γ補正されたデータを格納しておくことにより、上記出力γ補正26も同時に行っている。本実施形態では、色変換3D−LUT36は入力されたRGBデータ(γ補正されたRGBデータの上位8ビット)のうちの上位4ビットより該当する小色空間の格子点の上位ビットを出力するLUTである。本実施形態では、4096エントリ8ビット出力構成となっており、RGBデータの各上位4ビットの入力から該当する格子点の上位8ビットを出力する。一方、γ補正されたRGBデータの上位8ビットのうちの残りの下位4ビットはそのまま補間回路38に入力される。補間回路38は、3D−LUT36より出力された格子点データを下位4ビットのデータに基づいて線形補間して出力色データを生成する。ここで、上記小色空間を三角錐とすれば、格子点数は4となり、補間回路38における補間演算は4項積和演算となる。
同様に、下位ビット用色変換3D−LUT37は入力RGBデータ(γ補正されたRGBデータ16ビットのうちの下位8ビット)のうちの上位4ビットより該当する小色空間の格子点の下位ビットを出力するLUTで、例えば4096エントリ8ビット出力構成の場合、RGBデータの各上位4ビットの入力から該当する格子点の下位8ビットを出力する。一方、RGBデータ残りの下位4ビットは補間回路39に入力される。補間回路39は、3D−LUT37より出力された格子点データをRGBデータ残りの下位4ビットに基づいて線形補間して出力色データを生成する。
ところで、RGBデータの各上位4ビットの入力から該当する格子点データを出力する場合、スケーリングなしで格子点データの割当を行うと、RGB各座標軸は16区間に分割されるので必要な格子点数は各軸16+1=17個となる。つまり、各軸の分割数をNとすると、(N+1)3個の格子点が必要になる。上記例では17×17×17=4913となり、容量が半端となるだけでなく、アクセスも複雑になる。そこで、上述したように、予め入力γ変換時に15/16倍にスケーリングしておくことにより、格子点数を16×16×16=4096個に削減する。なお、線形補間後のデータを元のスケールに戻すため16/15倍のスケーリングが必要になるが、3D−LUTに格納する格子点データを予め16/15倍して格納しておくことにより、上記元のスケールに戻す操作は不要となる。
上位の補間データ及び下位の補間データは加算器40にて小数点の位置を合わせて加算され、16ビットの色変換データが得られる。このとき、小数点以下は丸められ、入力範囲を超える値は最大値(または最小値)にリミットされる。
一方、入力誤差データアドレス生成回路31は、誤差データ入力バッファ32に所定以上の空きがある場合、アービタ5へリクエストを出すと同時にデータの処理順序に合わせてDRAM7のアドレスを生成する。DRAM7より読み出された誤差データは誤差データ入力バッファ32に格納される。そして、誤差データの上位ビットは誤差拡散回路41に、誤差データの下位ビットは誤差拡散回路42に各々入力される。誤差拡散回路42は上記補間データの下位ビット及び誤差拡散における量子化誤差の下位ビットより入力データに加算する補正値の下位ビットを生成し、誤差拡散回路41に入力する。誤差拡散回路41は上記補間データの上位ビット及び誤差拡散における量子化誤差の上位ビットより入力データに加算する補正値の上位ビットを生成し、誤差拡散回路42より入力される補正値の下位ビットと合わせて入力画像データに加算する。
補正値が加算された入力画像データは量子化され、量子化誤差が出力バッファ46に、量子化コード(2値の場合は1ビットデータ)が出力バッファ43に入力される。出力バッファ43に所定数のデータが蓄積されるとアドレス生成回路44はアービタ5へリクエストを出すと同時にDRAM7への書込みアドレスを生成し出力する。一方、出力バッファ46に所定数の誤差データが蓄積されるとアドレス生成回路45はアービタ5へリクエストを出すと同時にDRAM7への書込みアドレスを生成し出力する。なお、説明を容易にするため、量子化誤差は上位・下位で分離して格納する構成となっているが、上位・下位で分離せず同一アドレスに格納するようにしても良い。
なお、YMC等の各色毎に上記処理を繰り返す場合、3D−LUT36,37のテーブルをY用、M用、C用に切り替える必要がある。本実施形態では、コンフィグレーションレジスタ101におけるパラメータ設定により、3D−LUT36,37が参照するテーブルを切り替えるものとする。
本構成では、内部演算精度及び高速処理に重点を置いており、パイプライン処理により内部演算精度16ビットで1クロックサイクルに1画像データを処理できる。
[第2の処理モード(高速性重視)]
図9は、本実施形態に係わる画像処理モジュール4の第2の処理モードを説明するためのブロック図である。図9において、47は色変換部、48は出力γ変換部、49は中間調処理部、50は出力部である。図9において図7と同一の機能ブロックには同一の番号を付し、説明を省略する。
このモジュールでは、RGB点順次データよりCMYK面(バンド)順次のビットマップ生成を2色同時に行う。
入力部23より読み出されたRGB点順次データは、入力γ変換部24にて濃度リニアな信号に変換される。濃度リニアな信号に変換された印刷データは、色変換部25、47にて各々異なる色材の濃度データ(出力デバイスカラー)に変換される。つづいて、出力γ変換26、48にて各色材データが出力γ補正され、中間調処理部27、49にてビットマップデータ(ドットバターン)に変換され、出力部50より各々色材データのバッファ領域(バンドバッファ)に出力される。同様に、量子化誤差データも各々色材データのバッファ領域(ラインバッファ)に出力される。
図10は、図9の機能ブロック図を実現するためのサブモジュールの接続関係を示すブロック図である。図10において図8と同一のサブモジュールには同一の番号を付してある。以下、図8と異なる部分についてのみ説明する。
色変換用3D−LUT36、37には異なる出力色に対応する格子点データが格納されており、各々補間回路38、39にて線形補間されて、誤差拡散回路41、42に入力される。誤差拡散回路41、42にて擬似階調化されたデータは出力バッファ43にて分離して格納される。3D−LUT36および37には、それぞれLUT33〜35から出力された入力γ変換後の16ビットデータのうちの上位8ビットが入力される。3D−LUT36,37は入力された8ビットデータのうちの上位4ビットを用いて格子点データを取得し、これを残りの下位4ビットデータとともに補間回路38,39へ供給する。補間回路38,39は、格子点データを下位4ビットデータに基づいて補間する。また、誤差拡散回路41,42は、各色毎に誤差拡散処理を施す。
出力バッファ43に所定数のデータが蓄積されるとアドレス生成回路44はアービタ5へリクエストを出すと同時にDRAM7への書込みアドレスを生成し出力する。このとき、2つのバンドバッファのアドレスを生成するため、アドレス差分値を1つ追加し、所定バイト数毎に上記アドレス差分値を選択することで上記2つのバンドバッファにデータを格納する。一方、出力バッファ46に所定数の誤差データが蓄積されるとアドレス生成回路45はアービタ5へリクエストを出すと同時にDRAM7への書込みアドレスを生成し出力する。なお、説明を容易にするため、量子化誤差は各色分離して格納する構成となっているが、分離せずに同一アドレスに格納するようにしても良い。この場合は、上記アドレス生成回路45はアドレス差分値を追加する必要はない。また、出力バッファ46で分離して格納する必要もない。
この処理モードでは2色を同時に処理するので約2倍の処理速度が得られるが、1色当りの格子点データのビット数が半分になってしまう。従って、高精度な色変換を要求されるものには向いていないが、高速性を要求される用途には有効である。
[第3の処理モード]
図11は、本実施形態に係わる画像処理モジュール4の第3の処理モードを説明するためのブロック図である。図11において図9と同一の機能ブロックには同一の番号を付し、説明を省略する。
このモジュールでは、RGB点順次データよりCMYK面(バンド)順次のビットマップ生成を2色同時に行う点は第2の処理モードと同じであるが、入力画像データとして拡張色空間データに対応する。このため、内部演算精度をあげている。具体的には、入力γ変換の入力精度をあげるため、補間演算を導入し、出力γ変換を色変換部より分離して処理する構成となっている。図9との違いは色変換部と出力γ変換部の一括処理を示す破線がないだけであるので、その説明は省略する。
図12は、図11の機能ブロック図を実現するためのサブモジュールの接続関係を示すブロック図である。図8において、51及び52はセレクタである。図12において図10と同一のサブモジュールには同一の番号を付してある。以下、図10と異なる部分についてのみ説明する。
入力γ変換LUT33は入力γ補正のためのテーブルで、例えば256エントリ16ビット出力構成の場合、入力画像データの上位8ビットが入力され、γ補正されたデータが16ビットで出力される。ここで、入力画像データとして8ビットを超えるデータ(例えば16ビットデータ)が入力された場合は、入力画像データの上位8ビットより2つの代表値をLUT33より読出し、補間回路38において残りの下位ビットに基づいて上記2つの代表値を補間して16ビットの入力γ補正データを得る。なお、ここでは0は0に変換されるものとして、代表値の格納を省略する。よって、0以外の全ての代表値がLUT33に格納される。なお、前述したように、ここではスケーリングを行うので、最大値を省略する代表値とする場合は、スケーリング後の最大値に置き換える必要がある。また、ここでは補間回路38、39を上記代表値の補間演算に用いている。従って、上記LUT33の出力はセレクタ51、52を経て補間回路38、39に入力される。補間回路38、39では1次補間(2項積和演算)により補間データを生成し、各々色変換3D−LUT36、37に入力する。
なお、補間回路38,39は、LUT36からの出力を補間する場合には2項積和演算を行い、3D−LUT36からの出力を補間する場合には4項積和演算を行う用に動作を切り替える。
RGB3色の入力γ変換後のデータが入力されると、色変換3D−LUT36、37は各々対応する格子点データをセレクタ51、52を経て補間回路38、39に入力する。補間回路38、39は線形補間(4項積和演算)により各出力色データを生成し、各々出力γ変換LUT34、35にて出力γ補正した後、誤差拡散回路41、42に入力する。
なお、ここでは(色変換3D−LUTの出力ビット数)≦(出力γ変換LUTの入力ビット数)であるため、出力γ変換LUT34、35の出力を直接誤差拡散回路41、42に入力しているが、出力γ変換の精度が要求される場合は、破線で示したように更に補間回路38,39にて線形補間したデータを誤差拡散回路41、42に入力するようにしても良い(すなわち、経路a,cのようにLUT34,35の出力をセレクタ51、52を経由して補間回路38、39へ入力し、補間出力を経路b、dに示すように誤差拡散回路41,42へ入力する)。この場合は、処理に必要なサイクル数が増加するが、DRAM7のバスの使用効率を考慮すると、サイクル数の増加に対する処理時間の増加は比較的少ない。
本構成では入力γ変換を1つのLUTにて実行しているため、入力γ変換に6サイクルかかってしまう。さらに補間回路を共用しているので、色変換3D−LUTの補間に2サイクルかかるとすると、1画素の処理に合計8サイクルかかってしまう。しかし、線形補間(4項積和演算)及び誤差拡散をマルチサイクル処理とすることで2倍のクロックの使用が可能となれば、実質4倍以下(バスのアービトレーションの効率アップが見込めるため)に抑えることが可能である。また、1次補間回路(2項積和演算)をLUT33の後段に追加すれば処理時間は3倍以下となる。さらに、LUTを追加し、同時に2つの代表値を得られるように構成すれば処理時間は1.5倍以下となる。
[第4の処理モード]
図13は、本実施形態に係わる画像処理モジュール4の第4の処理モードを説明するためのブロック図である。図13において図11と同一の機能ブロックには同一の番号を付し、説明を省略する。
前述したように、出力デバイスカラーが4色以上では、色変換部を前段(カラーマッチング)と後段(デバイスカラー変換)に分割処理する。これは、3D−LUTの生成を容易にすること、無彩色の連続性を向上させること等を目的としている。第4の処理モードでは、上記前段処理モードを実現する。従って、色変換部25及び47で変換された色データは、出力部50より各々の色データのバッファ領域(バンドバッファ)に出力される。
図14は、図13の機能ブロック図を実現するためのサブモジュールの接続関係を示すブロック図である。図14において図10と同一のサブモジュールには同一の番号を付してある。以下、図10と異なる部分についてのみ説明する。
第4の処理モードでは色変換(前段)処理までを行い、誤差拡散処理は行わない。従って、入力誤差データアドレス生成回路31、誤差データ入力バッファ32、加算器40、誤差拡散回路41及び42、出力誤差データアドレス生成回路45、誤差データ出力バッファ46は休止状態となっている。
入力γ変換LUT33、34、35は入力γ補正のためのテーブルで、例えば256エントリ16ビット出力構成の場合、入力画像データの上位8ビットが入力され、γ補正されたデータが16ビットで出力される。ここで、入力画像データとして8ビットを超えるデータ(例えば16ビットデータ)が入力された場合は、入力画像データの上位8ビットより2つの代表値を上記LUTより読出し、残りの下位8ビットに基づいて上記2つの代表値を補間して16ビットの入力γ補正データを得る。なお、ここでは0入力は0に変換されるものとして、代表値の格納を省略する。よって、0以外の全ての代表値がLUT33、34、35に格納される。前述したように、ここではスケーリングを行うので、最大値を省略する代表値に設定する場合は、スケーリング後の最大値に置き換える必要がある。また、入力画像データが8ビットを超える場合について、本実施形態では補間回路38、39を上記代表値の補間演算に用いている。従って、上記LUT33、34の出力はセレクタ51を経て補間回路38に入力され、上記LUT35の出力はセレクタ52を経て補間回路39に入力される。補間回路38、39では1次補間(2項積和演算)により補間データを生成し、各々色変換3D−LUT36、37に入力する。なお、補間回路38では4項積和演算を2つ2項積和演算に分解することにより、2色同時に補間処理を行う。
RGB3色の入力γ変換後のデータが入力されると、色変換3D−LUT36、37は各々対応する格子点データをセレクタ51、52を経て補間回路38、39に入力する。補間回路38、39は線形補間(4項積和演算)によりカラーマッチングされた各色データを生成し、出力バッファ43に格納する。この時、32ビットにパッキングする方法として下記の3つのモードのいずれかを設定する。
バッファ節約モードでは、各色8ビットに丸めた後、4画素を32ビットにパッキングして格納する。
高精度モードでは、各色3画素を32ビットにパッキングして格納する。3画素へのビット割当は11、11、10のシーケンスとなるが、RGBの3色間で10ビットの画素が一致しないようにシーケンスの位相をずらす。例えば、Rのデータは11・11・10(位相0)の順序で、Gのデータは11・10・11(位相1)の順序、Bのデータは10・11・11(位相2)の順序でパッキングする。また、パッキングの際は各画素のMSBの位置を一致させることにより、データの切出し部を簡略化するだけでなく、上記位相のミスマッチ(パッカとアンパッカとの10ビットデータの位置のミスマッチ)が生じても破綻しないようにする。具体的には位相0〜2のいずれの場合もMSBの位置はビット31、ビット20、ビット9とし、ビット9〜0に格納するデータが11ビットの場合(位相1または2)は、LSBを10ビットデータのLBS側に結合してパックする。即ち、MSBから10ビットは上記位相にかかわらず常に同じ位置になる。なお、10ビットデータの11ビット目(LSB)は、(1)前値補間(直前の画素のLSBを使用)、(2)相関の強い画素で補間(隣接する画素の内、差分の小さい方の画素のLSBを使用)等により生成し11ビット化する。
倍精度モードでは、各色16ビットに丸めた後、2画素で32ビットにパッキングして格納する。
いずれのモードにおいても、ライン終端(画像の右端)のデータの処理が終了したら、32ビットに満たない場合は残りに0をパックして出力バッファ43に格納する。そして、バッファの占有状態にかかわらず、バッファに格納されているデータを全てDRAM7へ書出す(フラッシィング)。この操作により、出力バッファ43に最終データが残ってしまう現象を回避し、かつ、ライン単位のアクセスを容易にする。特に、ライン毎に処理方向(スキャン方向)を変更する場合に有効である。
なお、このモジュールではRGB点順次データよりRGB面(バンド)順次データの内の2色を同時に生成しているが、出力色空間がRGBの3色の場合は、RBの2色処理を同時に行い、その後、Gのみの1色処理を行う。1色処理のときは色変換部37を高精度化に用いるようにしてもよい。即ち、3D−LUT37に格子点データの下位ビットを格納し、補間回路39の出力を加算器40にて合成した後、所定ビットに丸めて出力バッファを経てDRAM7へ格納する。視感度の高いG信号を高精度処理することにより、効率的に画像品位を向上させることができる。
[第5の処理モード]
図15は、本実施形態に係わる画像処理モジュール4の第5の処理モードを説明するためのブロック図である。図15において、図11と同一の機能ブロックには同一の番号を付し、説明を省略する。
第5の処理モードでは、色変換部を前段(カラーマッチング)と後段(デバイスカラー変換)に分割処理する際の後段処理モードを実現する。従って、上記第4の処理モードによる前段処理後のデータを入力部23より読み出す。読み出されたデータは色変換部25,47にて各々異なる色材データ(デバイスカラー)に変換される。つづいて、出力γ変換26、48にて各色材データが出力γ補正され、中間調処理部27、49にてビットマップデータ(ドットバターン)に変換され、出力部50より各々色材データのバッファ領域(バンドバッファ)に出力される。同様に、量子化誤差データも各々色材データのバッファ領域(ラインバッファ)に出力される。
図16は、図15の機能ブロック図を実現するためのサブモジュールの接続関係を示すブロック図である。図16において、図12と同一のサブモジュールには同一の番号を付してある。以下、図12と異なる部分についてのみ説明する。
本処理モードでは色変換(後段)処理以降を行う。従って、LUT33、加算器40は休止状態となっている。また、前段処理後のデータを入力するので、入力データ形式はRGB面(バンド)順次データとなる。
入力画像データアドレス生成回路30は、画像データ入力バッファ29に所定以上の空きがある場合、アービタ5へリクエストを出すと同時にデータの処理順序に合わせてDRAM7のアドレスを生成し出力する。この時、面(バンド)順次データを点順次データに変換するため、図6に示すようなアドレス生成を行う(アドレス差分D1を各バッファ間のアドレス差分に設定する)。DRAM7より読み出された画像データは画像データ入力バッファ29に格納され、RGBの各色データが同時に色変換用3D−LUT36及び37に入力される。色変換3D−LUT36、37は各々対応する格子点データをセレクタ51、52を経て補間回路38、39に入力する。補間回路38、39は線形補間(4項積和演算)により各出力色データを生成し、各々出力γ変換LUT34、35にて出力γ補正した後、誤差拡散回路41、42に入力する。
なお、ここでは(色変換3D−LUTの出力ビット数)≦(出力γ変換LUTの入力ビット数)であるため、出力γ変換LUT34、35の出力を直接誤差拡散回路41、42に入力しているが、出力γ変換の精度が要求される場合は、破線で示したように補間回路38,39にて線形補間したデータを誤差拡散回路41、42に入力するようにしても良い。すなわち、LUT34,35の出力を経路a,cによりセレクタへ戻し、これを補間回路38,39で補間したデータは経路b、cにより誤差拡散回路41,42へ供給されるようにする。
本第5の処理モードでは、RGB面(バンド)順次データよりCMYK面(バンド)順次のビットマップ生成を2色同時に行う。例えば、出力色がCMYKの4色の場合は、CMの2色処理を行った後、YKの2色処理を行う。この時、誤差拡散回路41、42を連携動作させることにより、2色間のドットの分散性を向上させることが可能である。
なお、出力色が奇数の場合は、1色のみの処理が発生する。この場合は、後述するように色変換部47を高精度化(16ビット処理)に用いるようにしても良い。
図17は、1色処理(高精度モード)のときのサブモジュールの接続関係を示すブロック図である。図中、図16と同一のサブモジュールには同一の番号を付してある。以下、図16と異なる部分についてのみ説明する。
色変換3D−LUT36は入力RGBデータの上位ビットより該当する小色空間の格子点の上位ビットを出力し、色変換3D−LUT37は入力RGBデータの上位ビットより該当する小色空間の格子点の下位ビットを出力する。色変換3D−LUT36の出力である小色空間の格子点の上位ビットはセレクタ51を経て補間回路38にて線形補間され、加算器40に入力される。一方、色変換3D−LUT37の出力である小色空間の格子点の下位ビットは、補間回路39にて線形補間され、加算器40に入力される。加算器40は上記上位の補間データ及び上記下位の補間データを小数点の位置を合わせて加算する。この時、小数点以下は丸められ、入力範囲を超える値は最大値(または最小値)にリミットされる。
合成された補間データは出力γ変換LUT34、35に入力される。2つのLUTを用いることで1クロック(サイクル)で前記2つの代表値を生成し、セレクタ51を経て補間回路38にて線形補間されて誤差拡散回路41に入力される。本構成ではマルチサイクルで動作する部分がないので、全サブモジュールをパイプライン動作させることができる。従って、高速かつ高精度な処理が可能である。
以上、説明したように上記実施形態によれば、各種画像処理に必要なハードリソースに着目してサブモジュールを構成し、各サブモジュールの接続関係や処理シーケンス、演算精度等を変更可能とすることで、多様な処理モードに対応できるコンパクトで柔軟な画像処理装置を構成できる。特に、未使用サブモジュールのクロックを停止する、或いは未使用サブモジュールの電源を停止することにより、処理速度や処理精度のみならず、消費電力等のトレードオフも可能となるため、処理内容に応じて最適な構成をとることが可能である。
また、画像入力部を多様なフォーマットに対応できるように構成することで、分割処理(マルチシーケンス処理)が可能となり、上記ハードリソースで処理できない部分を別モジュールやCPU等のプロセッサで置き換えることも可能である。