以下に添付図面を参照して、画像処理装置および画像処理方法、ならびに、画像形成装置の実施の形態を詳細に説明する。
(第1の実施の形態)
図1は、実施形態に係る画像形成装置1の一例の構成を示すブロック図である。画像形成装置1において、メモリアービタ13に対してCPU I/F11を介してCPU(Central Processing Unit)10が接続されると共に、ローカルI/F21を介してROM(Read Only Memory)22およびパネルコントローラ23が接続される。図示は省略するが、メモリアービタ13は、メモリコントローラを有し、このメモリコントローラを介してメインメモリ14が接続される。それと共に、メモリアービタ13に対して、描画部15、符号化部16、復号部17および通信コントローラ20が接続される。復号部17の出力は、プリンタエンジン19を制御するエンジンコントローラ18に接続される。
メモリアービタ13は、接続された各部間におけるデータ転送の調停を行う。CPU I/F11は、CPU10とメモリアービタ13との間のインターフェイスであって、CPU10は、CPU I/F11およびメモリアービタ13を介して、画像形成装置1の各部に接続される。パネルコントローラ23は、ユーザ操作を行うために操作子や表示部が設けられたパネル24が接続される。
ROM22は、各種プログラムや文字などのフォント情報が予め記憶されている。CPU10は、ROM22に予め記憶されたプログラムに従い、 図示されないRAM(Random Access Memory)をワークメモリとして用いて、この画像形成装置1の動作を制御する。CPU10は、ワークメモリとしてメインメモリ14を利用することも可能である。また、CPU10は、エンジンコントローラ18に対して、プリンタエンジン19を制御するための命令を出す。通信コントローラ20は、ネットワークを介して接続される、パーソナルコンピュータ(PC)といった外部機器との間の通信を制御する。
メモリアービタ13を介してなされるメインメモリ14に対するアクセスの制御は、メモリアービタ13に含まれるメモリコントローラにより行われる。図2は、メインメモリ14の一例の構成を示す。メインメモリ14は、例えばプログラム領域14A、PDLデータ領域14B、CMYKバンド画像データ領域14C、CMYKページ符号データ領域14Dおよびその他領域14Eを含む。
プログラム領域14Aは、CPU10が動作するためのプログラムなどが格納される。PDLデータ領域14Bは、例えば通信コントローラ20を介してパーソナルコンピュータから転送されたPDL(Page Description Language)データが格納される。CPU10がPDLデータに基づき生成した中間言語をこのPDLデータ領域14Bに格納してもよい。CMYKバンド画像データ領域14Cは、PDLデータに基づき生成されたC、M、Y、K各色の版によるバンド画像データがそれぞれ格納される。CMYKバンド符号データ領域14Dは、CMYK各版の、符号化されたバンド画像データ(バンド符号データと呼ぶ)が格納される。また、その他領域14Eは、上述以外のデータが格納される領域であって、例えばCPU10がプログラムを実行する際のワークメモリとして用いることができる。
描画部15は、CPU10によりPDLデータに基づき生成された中間言語を読み込んで解析し、解析結果に従い、メインメモリ14のバンド記憶領域に対してバンド画像を書き込む描画処理を行う。例えば、メインメモリ14から、描画部15により描画されたバンド画像が読み出されて、メモリアービタ13を介して符号化部16および復号部17で符号化および復号処理などを施されて、エンジンコントローラ18に供給される。エンジンコントローラ18が、供給されたバンド画像に従いプリンタエンジン19を制御することで、印刷媒体に対して画像が形成され、印刷がなされる。
このような構成において、例えばパーソナルコンピュータで生成されたPDLデータがネットワークを介して通信コントローラ20に受信され、メインメモリ14のPDLデータ領域14Bに記憶される。CPU10は、メインメモリ14のPDLデータ領域14BからPDLデータを読み出して解析し、解析結果に基づき中間言語を生成し、メインメモリ14に記憶する。描画部15は、メインメモリ14から読み出した中間言語に従い描画処理を行い、CMYK各版の画像データを生成する。生成されたCMYK各版の画像データは、メインメモリ14のCMYKバンド画像データ領域14Cに書き込まれる。
符号化部16は、メインメモリ14のCMYKバンド画像データ領域14Cから読み出されたCMYK各版のバンド画像データに対して、MTF(Move To Front)制御およびハフマン符号化を利用した圧縮符号化方式により圧縮符号化処理を施す。バンド画像データが圧縮符号化された符号データは、メインメモリ14のCMYKページ符号データ領域14Dに格納される。復号部17は、メインメモリ14のCMYKページ符号データ領域14Dから読み出されたCMYK各版の符号データを復号して、CMYK各版の画像データを出力し、エンジンコントローラ18に送る。エンジンコントローラ18は、復号部17から受け取ったCMYK各版の画像データに従い基づきプリンタエンジン19を制御してプリントアウトを行う。
(符号化部)
図3は、第1の実施形態に係る符号化部16の一例の構成を示す。符号化部16は、画像読み込み部30、MTFデータ幅生成部31、ラインメモリ制御部32、ラインメモリ33Aおよび33B、MTFデータ幅値記憶部34、MTFデータ分割部35、MTF処理部36、ハフマン符号化部37、ならびに、符号書き込み部38を含む。
画像データ読み込み部30は、メインメモリ14のCMYKバンド画像データ領域14Cから画像データを読み込み、読み込んだ画像データをMTFデータ幅生成部31に転送する。ここで、符号化部16における画像データの処理は、予め定められたデータ長に基づき行われる。この予め定められたデータ長を、ワードと呼ぶ。1ワードは、例えば64ビットのデータ長を有する。例えば、画像データ読み込み部30は、CMYKバンド画像データ領域14Cから、ワード単位で画像データを読み込む。
図4は、画像データ読み込み部30がCMYKバンド画像データ領域14Cから読み込む画像データの一例の構成を示す。CMYKバンド画像データ領域14Cには、CMYK各版毎に、1回の主走査にて画像を形成するための1ライン分の画像データが、バンドの高さに応じたライン数(N)分、記憶される。画像データ読み込み部30は、CMYKバンド画像データ領域14Cから、画像データを1ラインずつ、ワード単位で順次読み出していく。
MTFデータ幅生成部31は、画像データ読み込み部30から受け取った画像データに対して、予め定められた複数の周期の検出を並列的に実行しながら、画像データをラインメモリ制御部32に転送する。なお、画像データの周期とは、例えば、画像データをビット列で表した場合の、当該ビット列に含まれるビット値による周期である。MTFデータ幅生成部31は、検出された周期に基づき、当該複数のデータ幅からMTF制御を行う際のデータ幅であるMTFデータ幅値を決定する。決定されたMTFデータ幅値は、例えばレジスタからなるMTFデータ幅値記憶部34に記憶される。
ラインメモリ制御部32は、それぞれライン単位で画像データを記憶するラインメモリ33Aおよび33Bに対するアクセスを制御する。ラインメモリ制御部32は、MTFデータ幅生成部31から受け取った画像データを、ラインメモリ33Aおよび33Bのうち一方(ラインメモリ33Aとする)に書き込む。ラインメモリ制御部32は、画像データの書き込みを行ったラインメモリ33Aに対して1ライン分の画像データが記憶されると、ラインメモリ33Aからの画像データの読み出しを開始すると共に、次にMTFデータ幅生成部31から受け取った画像データを、ラインメモリ33Bに書き込む。このように、ラインメモリ制御部32は、画像データの書き込み先と読み出し元を、ラインメモリ33Aおよび33Bとで、ライン単位でトグルに切り替える。
MTFデータ分割部35は、ラインメモリ制御部32から画像データを受け取り、受け取った画像データを、MTFデータ幅値記憶部34に記憶されるMTFデータ幅値に従い分割する。例えば、MTFデータ幅値記憶部34に記憶されるMTFデータ幅値が32ビットを示していれば、MTFデータ分割部35は、ラインメモリ制御部32からワード単位で受け取った画像データを、データ幅が32ビットの分割データに分割する。分割データは、MTF処理部36に順次転送される。
MTF処理部36は、MTFデータ分割部35から分割データを受け取ると、MTF(Move To Front)アルゴリズムに基づき、MTF処理部36が内蔵する辞書と、受け取った分割データとを比較して、辞書中に当該分割データに一致するデータが存在するか否かを判定する。一致する辞書データが存在すると判定された場合、当該辞書データのインデクス値を求め、その後、当該辞書データを辞書の先頭に移動し、既に辞書に登録されている辞書データを1つずつ辞書の後端側にシフトさせる。一方、分割データに一致する辞書データが存在しないと判定された場合、当該分割データをエスケープ(ESC)データとする。これらインデクス値およびESCデータは、辞書中に分割データに一致する辞書データが存在するか否かを示す一致フラグと共に、ハフマン符号化部37に転送される。
図5−1および図5−2を用いて、MTF処理について概略的に説明する。MTF処理は、概略的には、図5−1に例示されるように、複数の辞書データが格納される辞書を用意し、辞書データの格納位置の先頭から順にインデクス値を割り当てる。図5−1の例では、先頭位置に最も小さいインデクス値「00」(INDEX00)が割り当てられ、以降順にインデクス値「01」、インデクス値「02」、…のように値が増加され、インデクス値「15」までが割り当てられている。
そして、入力されたデータと辞書に含まれる辞書データとを比較し、入力データと一致する辞書データが存在するか否かを判定する。存在する場合、入力データと一致する辞書データに割り当てられたインデクス値を出力シンボル(符号名)として出力し、その後、図5−2に例示されるように、当該辞書データを辞書の先頭に移動させて辞書を更新する。また、一致フラグを一致を示す値(例えば値「1」)に設定する。
一方、入力データと一致する辞書データが存在しない場合、入力データそのものに対して符号名「ESC」を付加したESCデータを出力する。また、一致フラグを非一致を示す値(例えば値「0」)に設定する。
ハフマン符号化部37は、MTF処理部36から受け取ったインデクス値、ESCデータおよび一致フラグを、予め定められたテーブルを参照して可変長符号化する。符号化された符号データは、符号書き込み部38に転送される。
ハフマン符号化部37におけるハフマン符号化処理について概略的に説明する。図6は、ハフマン符号化部37において用いられる符号の一例のフォーマットを示す。なお、図中、「0b」は、後続する数値がバイナリ表現による数値であることを示す。
この図6に示される符号は、可変長なハフマン符号であり、登場頻度の高いハフマン木の順に短いコードを割り当てている。図6の例では、符号テーブルの各符号に対して、符号名および符号サイズテーブルがそれぞれ対応付けられている。符号名は、ESCデータを示す「ESC」と、各インデクス値を示す「INDEXnn」(「nn」は「00」〜「15」)、と、1ライン分の符号データの先頭に付加されるラインヘッダと、符号の終端を示す符号終端とが定義されている。
これらのうち、辞書において先頭側に位置するインデクス値「00」〜「02」に最もサイズが小さい、データ長が3ビットの符号が割り当てられ、以降、インデクス値が大きくなるほど、データ長が長い符号が割り当てられる。また、ESCデータは、ESCデータを示す符号「000」に対して、MTFデータ幅生成部31で決定される複数のMTFデータ幅値それぞれに対応するデータ長の符号が付加される。ラインヘッダは、データ長が7ビットに固定的とされ、ラインヘッダを示す符号「1111」に対して、MTFデータ幅生成部31で決定される複数のMTFデータ幅値それぞれに対応する値が付加される。符号終端は、データ長が5ビット、符号「11111」に固定的とされる。
なお、ESCデータを示す符号「000」は、非一致を示す一致フラグの符号であると考えることができる。この場合、例えばこの符号「000」の有無が一致フラグの値を示すものとすることができる。一致フラグを示す符号を別途、定義しても構わない。
ハフマン符号化部37は、MTF処理部36から出力されたインデクス値やESCデータを符号名として図6の符号テーブルの値を検索して、符号データとして出力する。
符号書き込み部38は、ハフマン符号化部37から受け取った符号データに対して、予め定められたフォーマットに従いヘッダ情報などを付加する。ヘッダ情報が付加された符号データは、符号書き込み部38により、メインメモリ14のCMYKページ符号データ領域14Dに書き込まれる。
図7は、符号書き込み部38から出力される符号データの一例のフォーマットを示す。各ライン(0)〜(N)において、図6を用いて説明したように、ESCデータおよびインデクス値による画像データがハフマン符号化により可変長符号化されてライン符号データ(0)〜(N)とされる。また、各ライン符号データ(0)〜(N)に対して、それぞれラインヘッダ符号が先頭に付加される。ラインヘッダ符号は、図6を用いて説明したように、ラインの周期を示す情報が含まれる。終端符号(n)は、最後のライン符号データ(N)の後ろに付加され、符号の終端を示す。
(符号化部の各部詳細)
次に、符号化部16の各部について、より詳細に説明する。先ず、MTFデータ幅生成部31について説明する。図8は、MTFデータ幅生成部31の一例の構成を示す。MTFデータ幅生成部31は、上述したように、入力された画像データの、1ライン内での周期を求める。このとき、本第1の実施形態では、MTFデータ幅生成部31は、予め定められた複数の周期について、並列に検出を行う。そして、検出された周期のうち最も長い周期を選択し、当該周期に対応するデータ長を、MTF処理を行う際のデータ幅(MTFデータ幅と呼ぶ)に決定する。
図8の例では、MTFデータ幅生成部31は、8ビット単位一致合計演算部51、16ビット単位一致合計演算部52および32ビット単位一致合計演算部53を有し、入力された画像データに対して、8ビット、16ビットおよび32ビットの3種類の周期の検出を行うことができる。
画像読み込み部30からワード毎に転送された画像データは、MTFデータ幅生成部31に受け取られ、レジスタ50に一時的に記憶されると共に、8ビット単位一致合計演算部51、16ビット単位一致合計演算部52および32ビット単位一致合計演算部53にそれぞれ入力される。
8ビット単位一致合計演算部51は、ワード単位で入力された画像データから8ビット単位で一致ビット数を計数し、計数された8ビット単位の一致ビット数を、1ライン分加算して出力する。16ビット単位一致合計演算部52は、同様に、ワード単位で入力された画像データから16ビット単位で一致ビット数を計数し、計数された16ビット単位の一致ビット数を、1ライン分加算して出力する。さらに、32ビット単位一致合計演算部53は、ワード単位で入力された画像データから32ビット単位で一致ビット数を計数し、計数された32ビット単位の一致ビット数を、1ライン分加算して出力する。
図9は、8ビット単位一致合計演算部51の一例の構成を示す。1ワードの画像データが、データを8ビット単位で記憶するレジスタ60に格納される。例えば、1ワードの画像データのLSB(Least Significant Bit)側の8ビットがレジスタ60の領域601に格納され、次の8ビットが領域602に格納され、以降、画像データが8ビット毎に領域603、604、…、608に格納される。また、レジスタ61は、1ワード分前の画像データにおけるMSB(Most Significant Bit)側の8ビットが格納される。
排他的論理和回路621〜628は、それぞれ、8ビット単位で入力された2のデータに対して、対応するビット毎に排他的論理和演算を行い、その反転値を出力することで、8ビット単位の2のデータにおける一致ビットを検出する。各領域601〜608の互いに隣接する領域からそれぞれ読み出された8ビット単位の2のデータが、各排他的論理和回路622〜628に入力され、それぞれ8ビット単位で一致ビットを検出される。また、領域601およびレジスタ61からそれぞれ読み出された2の8ビット単位のデータが排他的論理和回路621に入力され、8ビット単位で一致ビットを検出される。
各排他的論理和回路621〜628の出力は、8ビット一致カウンタ631〜638にそれぞれ入力され、一致ビットの数が計測される。図10は、8ビット一致カウンタ631〜638の一例の構成を、8ビット一致カウンタ631で代表させて示す。8ビット一致カウンタ631は、それぞれ4ビットの値を予め格納する2の4ビットROM(Read Only Memory)70Aおよび70Bと、加算器71とを有する。
4ビットROM(Read Only Memory)70Aおよび70Bは、それぞれ図11に示されるように、4ビットで表現される各値をアドレスとし、アドレスに含まれる値「1」の数が出力値として予め格納される。排他的論理和回路621から出力された8ビットのデータの上位4ビット(第4ビット〜第7ビット)および下位4ビット(第0ビット〜第3ビット)のうち、上位4ビットが4ビットROM70Aの入力端#0〜#3にそれぞれ入力されると共に、下位4ビットが4ビットROM70Bの入力端#0〜#3にそれぞれ入力される。4ビットROM70Aおよび70Bは、それぞれ、入力された4ビットをアドレスとして、対応する出力値を出力する。4ビットROM70Aおよび70Bの出力は、加算器71で加算されて出力される。
各8ビット一致カウンタ631〜638の出力は、加算器64に入力され、合計値が算出される。この合計値は、8ビット単位一致合計値としてレジスタ65に記憶される。レジスタ65から読み出された8ビット単位一致合計値は、加算器64に入力されて次の1ワードの各8ビット一致カウンタ631〜638の出力に対して加算され、1ワード毎の8ビット単位一致合計値が累積される。このようにして1ワード分の8ビット単位一致合計値を順次累積し、1ライン分の8ビット単位一致合計値を求める。1ライン分の処理が終了したら、レジスタ65から1ライン分の8ビット単位一致合計値が読み出されて、MTFデータ幅選択部54に入力される。
図12は、16ビット単位一致合計演算部52の一例の構成を示す。この16ビット単位一致合計演算部52の構成は、基本的には、上述した8ビット単位一致合計演算部51の構成と同様である。すなわち、1ワードの画像データが、データを16ビット単位で記憶するレジスタ80に格納される。例えば、1ワードの画像データのLSB側の16ビットがレジスタ80の領域801に格納され、領域802、803および804にも、順次、16ビット毎に画像データが格納される。また、レジスタ81は、1ワード分前の画像データにおけるMSB側の16ビットが格納される。
排他的論理和回路821〜824は、それぞれ、16ビット単位で入力された2のデータに対して、対応するビット毎に排他的論理和演算を行い、その反転値を出力することで、16ビット単位の2のデータにおける一致ビットを検出する。各領域801〜804の互いに隣接する領域からそれぞれ読み出された16ビット単位の2のデータが、各排他的論理和回路822〜824に入力され、それぞれ16ビット単位で一致ビットを検出される。また、領域801およびレジスタ81からそれぞれ読み出された2の16ビット単位のデータが排他的論理和回路821に入力され、16ビット単位で一致ビットを検出される。
各排他的論理和回路821〜824の出力は、16ビット一致カウンタ831〜834にそれぞれ入力され、一致ビットの数が計測される。なお、各16ビット一致カウンタ831〜834の構成は、図10および図11を用いて説明した8ビット単位一致カウンタ631の構成に4ビットROMを追加することで実現可能なので、ここでの説明を省略する。
各16ビット一致カウンタ831〜834の出力は、加算器84に入力され、合計値が算出され、16ビット単位一致合計値としてレジスタ85に記憶される。レジスタ85から読み出された16ビット単位一致合計値は、加算器84に入力されて次の1ワードの各16ビット一致カウンタ831〜834の出力に対して加算され、1ワード毎の16ビット単位一致合計値が累積される。1ワード分の16ビット単位一致合計値を順次累積して求めた1ライン分の16ビット単位一致合計値がレジスタ85から読み出されて、MTFデータ幅選択部54に入力される。
図13は、32ビット単位一致合計演算部53の一例の構成を示す。この32ビット単位一致合計演算部53の構成も、基本的には、上述した8ビット単位一致合計演算部51の構成と同様である。すなわち、1ワードの画像データが、データを32ビット単位で記憶するレジスタ90に格納される。例えば、1ワードの画像データのLSB側の32ビットとMSB側の32ビットとが、レジスタ90の領域901および902にそれぞれ格納される。また、レジスタ91は、1ワード分前の画像データにおけるMSB側の32ビットが格納される。
排他的論理和回路921および922は、それぞれ、32ビット単位で入力された2のデータに対して、対応するビット毎に排他的論理和演算を行い、その反転値を出力することで、32ビット単位の2のデータにおける一致ビットを検出する。レジスタ91から読み出された32ビット単位の画像データは、排他的論理和回路921に入力される。レジスタ90の領域901から読み出された32ビットの画像データは、排他的論理和回路921および922にそれぞれ入力される。領域902から読み出された32ビットの画像データは、排他的論理和回路922に入力される。レジスタ91、ならびに、レジスタ901および902それぞれから32ビット単位で読み出された画像データは、これら排他的論理和回路921および922において、それぞれ32ビット単位で一致ビットを検出される。
各排他的論理和回路921および922の出力は、32ビット一致カウンタ931および932にそれぞれ入力され、一致ビットの数が計測される。なお、各32ビット一致カウンタ931および932の構成は、図10および図11を用いて説明した8ビット単位一致カウンタ631の構成に4ビットROMを追加することで実現可能なので、ここでの説明を省略する。
各32ビット一致カウンタ931および932の出力は、加算器94に入力され、合計値が算出され、32ビット単位一致合計値としてレジスタ95に記憶される。レジスタ95から読み出された32ビット単位一致合計値は、加算器94に入力されて次の1ワードの各32ビット一致カウンタ931および932の出力に対して加算され、1ワード毎の32ビット単位一致合計値が累積される。1ワード分の32ビット単位一致合計値を順次累積して求めた1ライン分の32ビット単位一致合計値がレジスタ95から読み出されて、MTFデータ幅選択部54に入力される。
なお、本第1の実施形態では、これら8ビット単位一致合計演算部51、16ビット単位一致合計演算部52および32ビット単位一致合計演算部53における処理は、並列的に行われる。
一例として、これら8ビット単位一致合計演算部51、16ビット単位一致合計演算部52および32ビット単位一致合計演算部53にに対して共通のクロックを供給する。これら各演算部51、52および53は、レジスタ、排他的論理和回路、一致カウンタおよび加算器、ならびに、出力のレジスタの各段からなる構成を共通としている。そのため、これら各段を、各演算部51、52および53それぞれで同一のクロックで動作させることで、各演算部51、52および53に対する画像データの入力タイミングを同期させると共に、各演算部51、52および53からの一致合計値の出力タイミングを同期させることができ、各演算部51、52および53の処理を並列的に実行させることができる。
図8の説明に戻り、MTFデータ幅選択部54は、8ビット単位一致合計演算部51、16ビット単位一致合計演算部52および32ビット単位一致合計演算部53から出力された、8ビット単位、16ビット単位および32ビット単位それぞれの、1ライン分の一致合計値が入力される。MTFデータ幅選択部54は、入力された8ビット単位、16ビット単位および32ビット単位それぞれの一致合計値のうち、最大の一致合計値を選択し、選択された一致合計値のビット単位を示す値をMTFデータ幅値に決定する。例えば、8ビット単位、16ビット単位および32ビット単位それぞれの一致合計値のうち、16ビット単位の一致合計値が最も大きかった場合、MTFデータ幅値を16ビットに決定する。
MTFデータ幅生成部31は、MTFデータ幅選択部54で決定されたMTFデータ幅を示す値であるMTFデータ幅値を、MTFデータ幅値記憶部34に転送し、記憶させる。それと共に、MTFデータ幅生成部31は、レジスタ50に格納される画像データをラインメモリ制御部32に転送する。
次に、MTFデータ分割部35について説明する。図14は、MTFデータ分割部35の一例の構成を示す。MTFデータ分割部35は、上述したように、MTFデータ幅生成部31で決定されたMTFデータ幅で画像データを分割し、画像データが分割された分割データをMTF処理部36に転送する。
MTFデータ分割部35は、MTFデータ幅生成部31における複数の周期検出に対応して、それぞれ異なる単位で画像データを分割する複数の分割処理部を有する。この例では、MTFデータ幅生成部31において8ビット単位、16ビット単位および32ビット単位の3の周期検出を行うため、MTFデータ分割部35は、図14に示されるように、8ビット単位分割処理部100、16ビット単位分割処理部101および32ビット単位分割処理部102の3の分割処理部を有する。
8ビット単位分割処理部100、16ビット単位分割処理部101および32ビット単位分割処理部102は、入力された画像データをそれぞれ所定単位で分割する。そして、分割したそれぞれのデータを、データ幅が、MTFデータ幅生成部31での周期検出における最大の周期に対応するデータ幅になるように成形する。例えば、周期検出における最大の周期に対応するデータ幅が32ビットであり、分割のデータ幅が16ビットであれば、当該分割したデータのLSB側に、各ビットが「0」の16ビット幅のデータを付加し、全体として32ビット幅のデータに成形する。
ラインメモリ制御部32からワード単位で受け取った画像データが、8ビット単位分割処理部100、16ビット単位分割処理部101および32ビット単位分割処理部102にそれぞれ入力される。8ビット単位分割処理部100、16ビット単位分割処理部101および32ビット単位分割処理部102は、それぞれ、入力された画像データを、8ビット単位、16ビット単位および32ビット単位に分割し、分割された各データを32ビット幅のデータに成形して、分割データとしてそれぞれ出力する。
図15は、8ビット単位分割処理部100の一例の構成を示す。1ワードの画像データが、データを8ビット単位で記憶するレジスタ110に格納される。例えば、1ワードの画像データのLSB側の8ビットがレジスタ110の領域1101に格納され、次の8ビットが領域1102に格納され、以降、画像データが8ビット毎に領域1103、1104、…、1108に格納される。
レジスタ110の各領域1101〜1108から読み出された8ビット単位の画像データが、それぞれMUX(マルチプレクサ)112に入力される。また、MUX112には、カウンタ111で所定のタイミング毎に生成されるカウント値が入力される。MUX112は、カウンタ111から入力されるカウント値に従い、領域1101〜1108それぞれから読み出された8ビット単位の画像データを順次選択する。そして、選択された8ビットの画像データのLSBに対して、値「0」のビットを24ビット分付加して、全体として32ビット幅の分割データとして出力する。
図16は、16ビット単位分割処理部101の一例の構成を示す。1ワードの画像データが、データを16ビット単位で記憶するレジスタ120に格納される。例えば、1ワードの画像データのLSB側の16ビットがレジスタ120の領域1201に格納され、次の16ビットが領域1202に格納され、さらに次の16ビットが領域1203に格納され、MSB側の16ビットが領域1204に格納される。
レジスタ120の各領域1201〜1204から読み出された16ビット単位の画像データが、それぞれMUX122に入力される。また、MUX122には、カウンタ121で所定のタイミング毎に生成されるカウント値が入力される。MUX122は、カウンタ121から入力されるカウント値に従い、領域1201〜1204それぞれから読み出された16ビット単位の画像データを順次選択する。そして、選択された16ビットの画像データのLSBに対して、値「0」のビットを16ビット分付加して、全体として32ビット幅の分割データとして出力する。
図17は、32ビット単位分割処理部102の一例の構成を示す。1ワードの画像データが、データを32ビット単位で記憶するレジスタ130に格納される。例えば、1ワードの画像データのLSB側の32ビットがレジスタ130の領域1301に格納され、MSB側の32ビットが領域1302に格納される。
レジスタ130の各領域1301および1302から読み出された32ビット単位の画像データが、それぞれMUX132に入力される。また、MUX132には、カウンタ131で所定のタイミング毎に生成されるカウント値が入力される。MUX132は、カウンタ131から入力されるカウント値に従い、領域1301および1302それぞれから読み出された32ビット単位の画像データを順次選択し、32ビット幅の分割データとして出力する。
図14の説明に戻り、8ビット単位分割処理部100、16ビット単位分割処理部101および32ビット単位分割処理部102から出力された各分割データは、MUX103に入力される。MUX103には、さらに、MTFデータ幅値記憶部34から読み出されたMTFデータ幅値が入力される。MUX103は、8ビット単位分割処理部100、16ビット単位分割処理部101および32ビット単位分割処理部102の出力のうち、入力されたMTFデータ幅値に対応する出力を選択し、MTF処理部36に転送する。
次に、MTF処理部36について説明する。図5−1および図5−2を用いて説明したように、MTF処理においては、入力データと辞書データとを比較し、辞書に入力データと一致する辞書データが含まれている場合に、一致を示す値の一致フラグと当該辞書データの辞書内の格納位置に対応するインデクス値とを出力し、その後、当該辞書データを辞書の先頭に移動させて辞書を更新する。
図18は、こうした処理を行うためのMTF処理部36の一例の構成を示す。MTF処理部36は、辞書データが格納される複数のレジスタ1400、1401、…、140n、…、14015と、各辞書データと入力データとを比較する複数の比較器1410、1411、…、141n、…、14115と、辞書データと入力データとの一致を検出する一致検出部142と、インデクス値を生成するインデクス値生成部143と、一致検出部142の出力に応じて入力データの経路を切り替えなどを行うセレクタ144とを有する。
レジスタ1400〜14015は、MTF処理における辞書を構成する。すなわち、各レジスタ1400〜14015は、例えばレジスタ1400に辞書の先頭の辞書データ#0が格納され、レジスタ1401に次の辞書データ#1が格納され、以降、順次、辞書の後端側に向けて辞書データ#2〜#15が格納される。各レジスタ1400〜14015は、辞書の更新時に辞書データをシフトできるように、隣接するレジスタの入出力が接続される。
既に説明したように、本第1の実施形態では、辞書のサイズ(辞書を構成する各辞書データのデータ長)を、MTFデータ幅生成部31で検出可能な最大の周期に対応したサイズとしている。この例では、本第1の実施形態では、MTFデータ幅生成部31において8ビット、16ビットおよび32ビットの3種類のデータ長に対応する周期を検出している。したがって、辞書のサイズは、これら3種類の周期のうち最大の32ビットとされる。
一方、画像データは、MTFデータ分割部35においてMTFデータ幅生成部31で生成されたMTFデータ幅値に従い分割されて、入力データとしてMTF処理部36に入力されて、辞書データと比較される。このとき、上述したように、MTFデータ幅生成部31で検出される最大の周期以外の周期に対応するデータ長の辞書データは、MTFデータ幅生成部31で検出された周期に対応するデータ長のデータの例えばLSB側に対して、所定の値(例えば値「0」)を、データ長が全体として当該最大の周期に対応するデータ長になるように付加する。
より具体的には、例えばMTFデータ幅生成部31で検出された周期が16ビットのデータ長に対応する場合、図19(a)に例示されるように、MSB側の16ビットのデータに対して、LSB側に16ビット分の値「0」を付加して、辞書データを構成する。また、データ長が16ビットの入力データ(例えば値「0x5555」とする)に対しても、LSB側に値「0x0000」を付加し、全体として32ビットのデータ長のデータ(この例では「0x5555_0000」)として、辞書の探索を行う。この場合、辞書データにも同様に値「0x0000」がLSB側に付加されているので、辞書の探索は問題なく実行できる。
なお、図19(a)および図19(b)において、「0x」は、後続の数値が16進表記であることを示す。
図19(b)は、MTFデータ幅生成部31で検出された周期が32ビットのデータ長に対応する場合の例を示す。この場合、周期に対応するデータ長と、辞書のサイズとが一致するため、入力データをそのまま用いて辞書の探索を行う。
レジスタ1400〜14015の出力は、比較器1410〜14115それぞれの一方の入力端に入力される。また、MTFデータ分割部35から出力された分割データが入力データとしてMTF処理部36に入力され、各比較器1410〜14115それぞれの他方の入力端に入力される。各比較器1411〜14115は、一方および他方の入力端に入力されたデータを比較して、両者が一致する場合には、一致を示す値「1」を出力し、両者が異なる場合には、非一致を示す値「0」を出力する。各比較器1410〜14115の出力は、一致検出部142およびインデクス生成部143にそれぞれ入力される。
インデクス生成部143において、各比較器1410〜14115の比較結果に対して、順にインデクス値「00」、「01」、…、「15」を対応付ける。インデクス生成部143は、各比較器1410〜14115の比較結果を受け取り、一致を示す値が出力された比較結果に対応付けられたインデクス値のうち、最も値が小さいインデクス値を出力する。このインデクス値は、ハフマン符号化部37に転送される。
一致検出部142は、論理和回路を有し、入力値の論理和を取る。各比較器1410〜14115の比較結果のうち少なくとも1の比較結果が一致を示す値「1」であれば、一致を示す値が「1」の一致フラグを出力し、入力データと一致する辞書データが存在することを示す。また、一致検出部142は、各比較器1410〜14115の比較結果が全て非一致を示す「0」であれば、非一致を示す値が「0」の一致フラグを出力する。この一致フラグは、ハフマン符号化部37に転送される。
また、一致フラグは、セレクタ144にも供給される。セレクタ144は、一致フラグの値が「1」であって、入力データと一致する辞書データが存在することを示していれば、レジスタ1400〜14014に格納される辞書データ#0〜#14を、順次隣接するレジスタに移動させると共に、入力データをレジスタ1400に格納する。
一方、セレクタ144は、一致フラグの値が「0」であれば、入力データをそのまま、ESCデータとして出力する。ESCデータは、ハフマン符号化部37に転送される。
次に、ハフマン符号化部37における処理について説明する。ハフマン符号化部37に対して、MTF処理部36から出力された一致フラグ、インデクス値およびESCデータが入力されると共に、MTFデータ幅値記憶部34に記憶されるMTFデータ幅値が入力される。
図20は、ハフマン符号化部37における全体的な処理を示す一例のフローチャートである。ハフマン符号化部37は、先ず、ステップS100で、処理対象のデータがラインの先頭のデータであるか否かを判定する。若し、ラインの先頭のデータではないと判定した場合、処理をステップS102に移行させる。一方、ラインの先頭のデータであると判定した場合、処理をステップS101に移行させて、ラインヘッダ符号化処理を実行し、処理をステップS102に移行させる。
ステップS102で、ハフマン符号化部37は、MTF処理部36から受け取った一致フラグに基づき、処理対象のデータが辞書に存在したデータであるか否かを判定する。若し、一致フラグが一致を示す値(例えば値「1」)であって、処理対象のデータが辞書に存在したデータであることを示している場合、処理をステップS103に移行させ、インデクス符号化処理を行う。一方、一致フラグが非一致を示す値(例えば値「0」)であって、処理対象のデータが辞書に存在しないデータであることを示している場合、処理をステップS104に移行させ、ESC符号化処理を行う。
ステップS103またはステップS104の処理が終了すると、ハフマン符号化部37は、処理をステップS105に移行させ、処理対象のデータが最終ラインのラインの終端であるか否かを判定する。若し、最終ラインのラインの終端であると判定した場合、処理をステップS106に移行させて終端符号化処理を行う。そして、図示は省略するが、処理をステップS100に戻し、次の処理対象のデータに対する処理を行う。一方、ステップS105で処理対象のデータが最終ラインのラインの終端ではないと判定した場合、処理をステップS100に戻す。
図21は、図20のステップS101におけるラインヘッダ符号化処理を示す一例のフローチャートである。このラインヘッダ符号化処理では、図6を用いて説明したフォーマットに従い、MTFデータ幅値に基づきラインヘッダ符号を選択する。ステップS110で、ハフマン符号化部37は、MTFデータ幅値が8ビットであるか否かを判定する。若し、8ビットであると判定した場合、処理をステップS111に移行させ、ラインヘッダ符号の符号データを「7’b’1111000」とし、符号サイズを7ビットとする。なお、符号データ中「7’b’」は、後続する数値がバイナリ表現による7ビットの数値であることを示す。
ハフマン符号化部37は、ステップS110でMTFデータ幅値が8ビットではないと判定した場合、処理をステップS112に移行させ、MTFデータ幅値が16ビットであるか否かを判定する。若し、16ビットであると判定した場合、処理をステップS113に移行させ、ラインヘッダ符号の符号データを「7’b’1111001」とし、符号サイズを7ビットとする。ハフマン符号化部37は、さらに、ステップS112でMTFデータ幅値が16ビットではないと判定した場合、処理をステップS114に移行させる。この場合、MTFデータ幅値が32ビットであるので、ステップS114では、ラインヘッダ符号の符号データを「7’b’1111010」とし、符号サイズを7ビットとする。
このように、ラインヘッダ符号化処理では、ラインヘッダ符号の符号データにおけるLSB側の3ビットで、MTFデータ幅値を表している。
ステップS111、ステップS113またはステップS114の処理が終了したら、ハフマン符号化部37は、処理をステップS115に移行させて、符号出力処理を行う。
図22は、図20のステップS103におけるインデクス符号化処理を示す一例のフローチャートである。ハフマン符号化部37は、ステップS120で、MTF処理部36から受け取ったインデクス値に基づき、図6に例示した符号テーブルおよび符号サイズテーブルを参照し、当該インデクス値に対応する符号データと符号サイズとを得る。例えば、ハフマン符号化部37は、MTF処理部36からインデクス値として値「13」を受け取った場合、対応する符号名「INDEX13」に基づき符号テーブルおよび符号サイズテーブルを参照する。そして、符号名「INDEX13」に対応する符号データ「0b1110100」と、符号サイズ「7」とを取得する。
ステップS120で符号データと符号サイズとを取得すると、ハフマン符号化部37は、処理をステップS121に移行させて、取得した符号データを出力する符号出力処理を行う。
図23は、図20のステップS104におけるESC符号化処理を示す一例のフローチャートである。ハフマン符号化部37は、ステップS130で、後続する符号がESCデータであることを示すESCヘッダ「0」を符号データとし、符号サイズを3ビットとする。すなわち、ESCヘッダは、値「0b000」とされる。次のステップS131で、ハフマン符号化部37は、ESCヘッダを出力する符号出力処理を行う。
次のステップS132〜ステップS136で、ハフマン符号化部37は、MTFデータ幅値に応じてESCデータから符号データを切り出す。ステップS132で、ハフマン符号化部37は、MTFデータ幅値が8ビットであるか否かを判定する。若し、8ビットであると判定した場合、処理をステップS134に移行させて、ESCデータの上位8ビットを切り出して符号データとし、符号サイズを8ビットとする。
ハフマン符号化部37は、ステップS132でMTFデータ幅値が8ビットではないと判定した場合、処理をステップS133に移行させ、MTFデータ幅値が16ビットであるか否かを判定する。若し、16ビットであると判定した場合、処理をステップS135に移行させて、ESCデータの上位16ビットを切り出して符号データとし、符号サイズを16ビットとする。
ステップS133でMTFデータ幅値が16ビットではないと判定した場合、MTFデータ幅値は、32ビットであるので、処理はステップS136に移行され、ESCデータをそのまま符号データとし、符号サイズを32ビットとする。
ステップS134、ステップS135またはステップS136で符号データおよび符号サイズが求められると、ハフマン符号化部37は、処理をステップS137に移行させて符号出力処理を行う。
図24は、図20のステップS106における符号終端処理を示す一例のフローチャートである。ハフマン符号化部37は、ステップS140で符号データを「5’b’11111」とし、符号サイズを5ビットとする。そして、次のステップS142で、符号出力処理が行われる。
図25は、上述したステップS115、ステップS121、ステップS137およびステップS142による符号出力処理を示す一例のフローチャートである。符号出力処理は、符号サイズの長さの可変長の符号データをワードサイズ(この例では32ビット)に纏めて出力する。符号バッファは64ビットであり、符号サイズの長さの可変長の符号データ順次付加していく。符号ポインタは、符号バッファの中の有効な符号の終端を示す。
ステップS150で、符号ポインタから符号サイズを減じた値が新たな符号ポインタとする。すなわち、符号バッファに符号データを付加するために、符号サイズ分、符号ポインタを更新している。次のステップS151で、符号データを符号ポインタで移動させて位置を合わせて、符号バッファに付加する。次のステップS152で、符号ポインタ≦32であるか否かを判定し、符号ポインタ>32であれば、符号出力処理を終了する。
一方、符号ポインタ≦32であれば、ステップS153〜ステップS157で、符号バッファの上位32ビットが出力される。すなわち、ステップS153で符号バッファが32ビット右シフトされて出力符号バッファとされ、次のステップS154で出力符号バッファが出力される。次のステップS155で、符号ポインタに32が加算され、次のステップS156で符号バッファが32ビット左シフトされる。そして、次のステップS157で、符号カウンタが1だけカウントアップされ、図25のフローチャートによる一連の符号出力処理が終了される。
(パイプライン処理)
本第1の実施形態では、符号化部16におけるMTFデータ幅生成部31による周期検出処理と、MTF処理部36およびハフマン符号化部37による符号化処理とを、2のラインメモリ33Aおよび33Bをトグルに用いることでパイプライン処理し、より高速な処理を実現している。図26−1および図26−2を用いて、第1の実施形態によるパイプライン処理について説明する。なお、図26−1および図26−2において、上述した図3と共通する部分には同一の符号を付し、詳細な説明を省略する。
図26−1は、nライン目の処理の流れを示す。nライン目の画像データにおいて、経路Aにより、メインメモリ14のCMYKバンド画像データ領域14Cから画像読み込み部30がnライン目における1ワードの画像データを読み出し、MTFデータ幅生成部31で、読み出された1ワードに対して複数の周期の検出を並列して行う。そして、経路Bにより、nライン目における1ワード分の画像データを例えばラインメモリ33Aに書き込む。この1ワード単位の処理を1ライン分繰り返し、nライン目全ての処理が終了すると、MTFデータ幅生成部31が、検出を行った複数の周期のうち最も長い周期に対応するデータ幅をMTFデータ幅値に決定し、経路Cにより、決定されたMTFデータ幅値をMTFデータ幅値記憶部34に記憶させる。
図26−2は、(n+1)ライン目の処理の流れを示す。(n+1)ライン目の画像データにおいて、上述のnライン目と同様に、経路Dにより、CMYKバンド画像データ領域14Cから読み出した(n+1)ライン目における1ワードの画像データに対して、MTFデータ幅生成部31で、読み出された1ワードに対して複数の周期の検出を並列して行う。そして、経路Eにより、(n+1)ライン目における1ワード分の画像データをラインメモリ33Bに書き込む。この1ワード単位の処理を1ライン分繰り返し、(n+1)ライン目全ての処理が終了すると、MTFデータ幅生成部31が、検出を行った複数の周期のうち最も長い周期に対応するデータ幅をMTFデータ幅値に決定し、経路Fにより、決定されたMTFデータ幅値をMTFデータ幅値記憶部34に記憶させる。
以上の経路D、経路Eおよび経路Fの処理と並列的に、経路Gにより、ラインメモリ33Aからnライン目の画像データを読み出して、上述の経路CでMTFデータ幅値記憶部34に記憶されたMTFデータ幅値に基づき、MTFデータ分割部35においてnライン目の画像データが分割される。このnライン目の分割データは、MTF処理部36に転送される。MTF処理部36は、このnライン目の分割データに基づきMTF処理により符号化を行い、一致フラグと、インデクス値またはESCデータとを生成し、生成された一致フラグと、インデクス値またはESCデータとを経路Hでハフマン符号化部37に転送する。ハフマン符号化部37は、MTF処理部36から受け取った一致フラグと、インデクス値またはESCデータとを符号化して、符号データを経路Iで符号書き込み部38に転送する。符号書き込み部38は、受け取った符号データを、メインメモリ14のCMYKページ符号データ領域14Dに書き込む。このnライン目における 経路G、経路Hおよび経路Iの処理を、1ライン分繰り返す。
上述のnライン目および(n+1)ライン目の処理を、繰り返し実行する。
このように、1ライン分の画像データについてMTFデータ幅値を求める処理と、符号化を行う処理とを並列して行うことにより、基本的に1クロックでMTFデータ幅値分の符号化処理を行うことができ、処理をより高速に実行することができる。
(復号処理)
図27は、第1の実施形態に係る復号部17の一例の構成を示す。復号部17は、符号読み込み部200、ハフマン復号処理部201、MTF復号部202、MTFデータ合成部203および画像書き込み部204を含む。
符号読み込み部200は、メインメモリ14のCMYKページ符号データ領域14Dから符号データを読み込み、読み込んだ符号データをハフマン復号処理部201に転送する。ハフマン復号処理部201は、符号読み込み部200から受け取った符号データを、図6に示したフォーマットに従い復号し、一致フラグ、インデクス値、ESCデータおよびMTFデータ幅値を取得する。取得された一致フラグ、インデクス値およびESCデータは、MTF復号部202に転送される。また、取得されたMTFデータ幅値は、MTFデータ合成部203に転送される。
ハフマン復号処理部201における復号処理について、概略的に説明する。ハフマン復号処理部201は、符号読み込み部200から受け取った符号データのMSB側から順に1ビットずつ値を読み込み、図6のフォーマットに従い、当該符号データがラインヘッダ符号、ESC符号、インデクス値および終端符号のうち何れであるかを判定する。
ハフマン復号処理部201は、受け取った符号データがラインヘッダ符号であると判定した場合、当該符号データのLSB側の3ビットに基づきMTFデータ幅が8ビット、16ビットおよび32ビットのうち何れであるかを判定する。ハフマン復号処理部201は、受け取った符号データがESC符号であると判定した場合、一致フラグを非一致を示す値(例えば値「0」)とする。それと共に、ラインヘッダ符号から判定したMTFデータ幅値に従い、符号データの4ビット目からMTFデータ幅値が示すビット長だけデータを切り出し、ESCデータとする。ハフマン復号処理部201は、受け取った符号データがインデクス符号であると判定した場合、図6のフォーマットに従いインデクス値を求める。さらに、ハフマン復号処理部201は、受け取った符号データが終端符号であると判定した場合、復号処理を終了する。
MTF復号部202は、ハフマン復号処理部201から一致フラグ、インデクス値およびESCデータを受け取り、MTFアルゴリズムに基づき復号処理を行う。すなわち、一致フラグが非一致を示す値(例えば値「0」)である場合には、ESCデータをMTFデータとしてMTFデータ合成部203に転送すると共に、当該ESCデータを辞書に格納する。また、一致フラグが一致を示す値(例えば「1」である場合には、インデクス値に従い辞書を参照して、インデクス値に対応する辞書データをMTFデータとしてMTFデータ合成部203に転送する。このMTFデータは、上述した符号化部16におけるMTFデータ分割部35で分割され所定のデータ幅に成形された分割データに対応する。
MTFデータ合成部203は、MTF復号部202から受け取ったMTFデータをハフマン復号処理部201から受け取ったMTFデータ幅値に基づき合成して、ワード単位の画像データを生成する。生成された画像データは、画像書き込み部204に転送され、メインメモリ14のCMYKバンド画像データ領域14Cに書き込まれる。
(復号部の各部詳細)
次に、復号部17の各部について、より詳細に説明する。先ず、MTF復号部202について説明する。MTF復号部202は、ESCデータを辞書データとして用いて辞書を構成し、インデクス値に基づき辞書を参照して、インデクス値に対応するデータを出力する。
図28は、こうした処理を行うためのMTF復号部202の一例の構成を示す。MTF復号部202は、辞書データが格納され辞書を構成する複数のレジスタ2100、2101、…、210n、…、21015と、インデクス値に従いレジスタ2100、2101、…、210n、…、21015から1を選択するMUX211と、ESCデータと各レジスタ2100、2101、…、210n、…、21015から読み出されたデータのうち、一致フラグに基づき一方を選択して出力するMUX212とを有する。各レジスタ2100〜21015は、辞書の更新時に辞書データをシフトできるように、隣接するレジスタの入出力が接続される。
MTF復号部202は、ハフマン復号処理部201から受け取った一致フラグが非一致を示す場合、ハフマン復号処理部201から受け取ったESCデータをMTFデータとしてMTF復号部202から出力すると共に、当該ESCデータを辞書データ#0としてレジスタ2100に格納する。さらに非一致を示す一致フラグと、ESCデータとを受け取った場合、MUX212は、レジスタ2100に格納されるデータを隣接するレジスタ2101に移動させると共に、レジスタ2100に対して新たに受け取ったESCデータを格納する。このように、各レジスタ2100〜21015に対して、ESCデータを辞書データとして順次格納し、辞書を構成する。
なお、ESCデータは、データ幅が、符号化部16のMTFデータ分割部35においてMTFデータ幅生成部31により検出される最大の周期に対応するデータ幅(この例では32ビット)に成形されたデータである。
一方、MTF復号部202において、ハフマン復号処理部201から受け取ったインデクス値に基づき、MUX211によりレジスタ2100〜21015から当該インデクス値に対応する出力が選択される。MTF復号部202は、ハフマン復号処理部201から受け取った一致フラグが一致を示す場合、MUX212によりMUX211でインデクス値に基づき選択された出力を選択して、MTFデータとしてMTF復号部202から出力する。
図29は、MTFデータ合成部203の一例の構成を示す。MTFデータ合成部203は、8ビット単位合成処理部220、16ビット単位合成処理部221、32ビット単位合成処理部222およびMUX223を有する。MTFデータ合成部203は、それぞれ32ビットのデータ幅に成形された8ビット単位、16ビット単位および32ビット単位の各MTFデータを、1ワードのデータに合成して出力する。
図30は、8ビット単位合成処理部220の一例の構成を示す。データ幅が32ビットのMTFデータがMUX230に入力される。なお、図30において、カウンタ231は、例えばMUX230にMTFデータが入力される毎に値「1」からカウントアップされ、カウント値が値「8」になると、次の入力タイミングでカウント値を「1」に初期化してカウントアップを再開するものとする。また、レジスタ232は、各領域2321、2322、…、2328に8ビット単位でデータを格納し、全体として1ワード分のデータを格納可能とされている。
MUX230は、入力されたMTFデータのMSB側の8ビットを切り出して、切り出した8ビットのデータを、領域2321〜2328のうちカウンタ231のカウント値が示す領域に格納する。領域2321〜2328の全てにデータが格納されると、各領域2321〜2328から同時にデータが読み出され、1ワードのデータとして出力される。
図31は、16ビット単位合成処理部221の一例の構成を示す。データ幅が32ビットのMTFデータがMUX240に入力される。なお、図31において、カウンタ241は、例えばMUX240にMTFデータが入力される毎に値「1」からカウントアップされ、カウント値が値「4」になると、次の入力タイミングでカウント値を「1」に初期化してカウントアップを再開するものとする。また、レジスタ242は、各領域2421〜2424に16ビット単位でデータを格納し、全体として1ワード分のデータを格納可能とされている。
MUX240は、入力されたMTFデータのMSB側の16ビットを切り出して、切り出した16ビットのデータを、領域2421〜2424のうちカウンタ241のカウント値が示す領域に格納する。領域2421〜2424の全てにデータが格納されると、各領域2421〜2424から同時にデータが読み出され、1ワードのデータとして出力される。
図32は、32ビット単位合成処理部222の一例の構成を示す。データ幅が32ビットのMTFデータがMUX250に入力される。なお、図32において、カウンタ251は、例えばMUX250にMTFデータが入力される毎に値「1」からカウントアップされ、カウント値が値「2」になると、次の入力タイミングでカウント値を「1」に初期化してカウントアップを再開するものとする。また、レジスタ252は、各領域2521および2522に32ビット単位でデータを格納し、全体として1ワード分のデータを格納可能とされている。
MUX250は、入力されたMTFデータを、領域2521および2522のうちカウンタ251のカウント値が示す領域に格納する。領域2521および2522にそれぞれデータが格納されると、各領域2521および2522から同時にデータが読み出され、1ワードのデータとして出力される。
図29の説明に戻り、8ビット単位合成処理部220、16ビット単位合成処理部221および32ビット単位合成処理部222から出力された1ワードのデータは、それぞれMUX223に入力される。MUX223は、8ビット単位合成処理部220、16ビット単位合成処理部221および32ビット単位合成処理部222の出力のうち、ハフマン復号処理部201から受け取ったMTFデータ幅値に対応する出力を選択して、1ワードの画像データとして出力する。
なお、上述では、画像データの符号化をMTF方式を用いて行っているが、これはこの例に限定されない。例えば、簡単なFIFO(First In First Out)の辞書を用いて符号化を行う場合にも、本第1の実施形態を適用することができる。
また、上述では、MTFデータ幅生成部31において、8ビット、16ビットおよび32ビットの3種類のデータ幅に対応する周期をそれぞれ検出しているが、これはこの例に限定されない。例えば、8ビットおよび16ビットなど2種類のデータ幅に対応する周期をそれぞれ検出してもよいし、4種類以上のデータ幅に対応する周期をそれぞれ検出してもよい。
上述したように、本第1の実施形態では、符号化対象のデータに対して周期検出を行い、検出された周期に従い当該データを分割して辞書を作成し、作成した辞書をMTF制御して当該データのインデクス値を求め、求められたインデクス値に対してハフマン符号化処理を施す。このとき、第1の実施形態では、2のラインメモリをトグルに用いて、ライン単位で、周期検出処理と符号化処理(MTF制御およびハフマン符号化処理)とを並列処理する。これにより、周期検出処理の処理時間を隠蔽し、高速化することが可能である。
また、周期検出処理においては、小さな周期で画像データを読み込んで周期の検出を行うと、周期検出処理に大きな時間を消費してしまい、周期検出処理と符号化処理とを効率的に並列処理することが困難となる。
すなわち、周期検出処理および符号化処理を同じビット数で処理する場合は、周期検出処理と符号化処理とでそれぞれ同じ時間を消費するために問題が無い。一方、より高速化を図るために、周期検出処理を小さいビット幅から大きなビット幅まで、複数のビット幅について実行することが考えられる。この場合であっても、符号化処理は、選択された1の周期(ビット幅)でのみ実行することになる。そのため、元々大きなビット幅で符号化を行う場合でも、周期検出で検出される複数の周期のうち短い周期がネックとなり、高速化が困難となるおそれがある。
そこで、第1の実施形態では、周期検出処理において、異なる周期を検出する複数の周期検出処理を並列に実行すると共に、複数の周期の検出を、画像データのアクセス単位である1ワードに対して並列的に行っている。これにより、小さいビット幅(周期)でも、大きなビット幅(周期)と同等な速度で周期検出を行うことができ、周期検出処理の高速化が実現可能となると共に、周期検出処理を、符号化処理の以上の速度で実行することを保証できる。
また、ライン単位で周期検出処理と 符号化処理を分ける場合、周期検出処理は、メインメモリから画像データを読み込んで処理し、符号化処理は、ラインメモリに溜め込まれたデータを処理することになる。そのため、符号化処理は、一定の時間で処理が終了するが、周期検出処理は、メインメモリからのデータの読み込み時間で処理の終了時間が変化する。すなわち、メインメモリは、他の処理からもアクセスされるために、読み込み時間を保証することが困難なためである。
したがって、基本的には、周期検出処理は、単位当たりの処理を、符号化処理よりも高速に終了させる必要がある。第1の実施形態では、周期検出処理において、複数の周期の検出を並列的に処理し、且つ、複数の周期の検出それぞれが1ワードに対して並列的に実行されるため、小さいビット幅(周期)でも、大きなビット幅(周期)と同等な速度で周期検出を行うことができる。これにより、周期検出処理の高速化が実現可能となり、符号化処理と処理のバランスを保つことができる。
また、第1の実施形態では、周期検出処理において8ビット幅、16ビット幅、32ビット幅など複数の周期を検出する。ここで、周期検出を行い検出された周期に従いデータを分割した後に、複数の周期のそれぞれに対して辞書を用意してMTF制御を行うと、ハードウエアのゲート規模を大きくしてしまう。
そのため、各実施形態では、周期検出における最大の周期(上述の例では32ビット幅)のサイズの辞書のみ用意する。そして、周期検出により複数の周期のうち検出された周期で符号化対象の画像データを分割し、分割したそれぞれのデータに対して、周期検出における最大の周期に従い所定の値を付加して分割データのサイズを辞書のサイズに合わせる。この辞書のサイズに合わせたデータを用いてMTF制御を行うことで、1のサイズの辞書のみで対応可能となり、ハードウエアのゲート規模を小さくすることができる。
(第2の実施形態)
次に、第2の実施形態について説明する。本第2の実施形態は、上述した第1の実施形態に対して白ラインの検出処理を追加したものである。なお、白ラインとは、1ラインの全ての画素が画素値「0」であるラインをいう。すなわち、白ラインは、1ラインの画像データをビット列で表した場合に、当該ビット列における全てのビット値が値「0」となる。
図33は、本第2の実施形態に係る符号化部16’の一例の構成を示す。なお、図33において、上述した図3と共通する部分には同一の符号を付して、詳細な説明を省略する。図33に例示されるように、本第2の実施形態に係る符号化部16’は、図3を用いて説明した第1の実施形態に係る符号化部16に対して白ライン検出部300を追加した構成となっている。
画像読み込み部30がメインメモリ14のCMYKバンド画像データ領域14Cから読み込んだ画像データは、MTFデータ幅生成部31に転送されると共に、白ライン検出部300にも転送される。白ライン検出部300は、受け取った画像データにおける白(すなわち画素のビット値が全て「0」)を検出し、ラインの先頭から白の連続部分が継続しているか否かを判定する。そして、白ライン検出部300は、ラインの先頭から白が連続している間の画像データを、例えばワード単位でラインメモリ制御部32に転送する。ラインメモリ制御部32は、当該白の画像データを、ラインメモリ33Aまたは33Bに書き込む。
また、白ライン検出部300は、白の連続部分の検出の結果、1ライン全体が白であった場合に、その旨示す値(例えば値「1」)の白ラインフラグを出力する。出力されたこの白ラインフラグは、MTFデータ幅値記憶部34に記憶されると共に、MTFデータ幅生成部31に転送される。
MTFデータ分割部35は、MTFデータ幅値記憶部34に記憶される白ラインフラグの値が、1ライン全体が白であることを示す値(以下、全白を示す値と呼ぶ)であった場合に、MTFデータ幅値を、MTFデータ幅生成部31による周期検出処理で検出を行う最大の周期に対応する値(この例では32ビット)に固定的に設定する。
一方、MTFデータ分割部35は、MTFデータ幅値記憶部34に記憶される白ラインフラグの値が、1ラインのうち一部でも白ではない画素が存在することを示す値(以下、非全白を示す値と呼ぶ)であった場合には、MTFデータ幅値を、MTFデータ幅生成部31による周期検出処理で検出を行った周期に対応する値とする。
図34は、本第2の実施形態による符号化処理を示す一例のフローチャートである。符号化部16’は、先ず、ステップS200で白ラインフラグを全白を示す値(この例では値「1」)に初期化する。そして、次のステップS201で、画像読み込み部30により、メインメモリ14のCMYKバンド画像データ領域14Cから1ラインの画像データを、1ワード分、読み込む。
次のステップS202で、MTFデータ幅生成部31により、白ラインフラグの値が全白を示す値(値「1」)であるか否かが判定される。若し、白ラインフラグの値が非全白を示す値(値「0」)であると判定された場合、処理がステップS205に移行される。ステップS205で、MTFデータ幅生成部31により、画像読み込み部30から受け取った画像データに対して周期検出処理が行われ、MTFデータ幅値が求められる。このMTFデータ幅値は、MTFデータ幅値記憶部34に記憶される。そして、処理はステップS206に移行される。
一方、ステップS202で、白ラインフラグの値が全白を示す値であると判定された場合、処理がステップS203に移行され、白ライン検出部300により、画像読み込み部30から受け取った画像データの値が「0」であるか否か、すなわち、当該画像データの各ビットの値が全て値「0」であるか否かが判定される。若し、画像データの値が「0」であると判定された場合、処理がステップS206に移行される。
一方、ステップS203で、画像データの値が「0」ではない、すなわち、当該画像データの各ビットのうち少なくとも1ビットの値が「0」ではないと判定された場合、処理がステップS204に移行され、白ラインフラグの値が非全白を示す値(値「0」)に設定される。そして、処理がステップS206に移行される。
ステップS206では、ラインメモリ制御部32の制御により、画像データがラインメモリ33Aまたは33Bに書き込まれる。ここでは、ラインメモリ33Aに書き込まれるものとする。
なお、上述のステップS203で画像データの値が「0」であると判定されて、このステップS206に処理が移行された場合、ならびに、ステップS203で画像データの値が「0」ではないと判定され、ステップS204を介してステップS206に移行された場合には、画像データは、白ライン検出部300からラインメモリ制御部32に転送されて、ラインメモリ33Aに書き込まれる。一方、ステップS202で白ラインフラグが非全白を示す値であると判定されてステップS206に移行された場合には、画像データは、MTFデータ幅生成部31からラインメモリ制御部32に転送されて、ラインメモリ33Aに書き込まれる。
処理はステップS207に移行され、符号化部16’は、1ライン分の画像データの処理が終了したか否かを判定する。若し、終了していないと判定された場合、処理をステップS201に戻し、処理対象の1ラインの次の1ワードの画像データを読み込む。
一方、ステップS207で、1ライン分の処理が終了したと判定した場合、処理をステップS208に移行させる。ステップS208では、MTFデータ分割部35により、MTFデータ幅値記憶部34に記憶される白ラインフラグの値が全白を示しているか否かが判定される。
若し、白ラインフラグの値が全白を示していると判定された場合、処理がステップS209に移行され、MTFデータ分割部35により、MTFデータ幅として、MTFデータ幅生成部31による周期検出処理で検出される最大の周期に対応するデータ幅(この例では32ビット)が使用される。一方、白ラインフラグの値が非全白を示していると判定された場合、処理がステップS210に移行され、MTFデータ分割部35により、MTFデータ幅として、MTFデータ幅生成部31による周期検出処理で検出された周期に対応するデータ幅が使用される。
ステップS209またはステップS210でMTFデータ幅が決定されたら、処理がステップS211に移行される。ステップS211では、MTFデータ分割部35により、ステップS209またはステップS210で決定されたMTFデータ幅で、ラインメモリ33Aから読み出した画像データを分割する。そして、次のステップS212でMTF処理部36によりMTF処理がなされ、さらに、次のステップS213で、ハフマン符号化処理部37により図6を用いて説明したフォーマットに従いハフマン符号化がなされる。これらステップS211〜ステップS213での各処理は、上述した第1の実施形態における対応する各処理と何ら変わるところがないので、ここでの説明を省略する。
ステップS213でハフマン符号化処理が終了すると、処理がステップS214に移行され、1ライン分の画像データの処理が終了したか否かが判定される。若し、終了していないと判定された場合、処理がステップS211に戻され、次の1ワード分の処理が行われる。一方、1ライン分の画像データの処理が終了したと判定された場合、処理がステップS215に移行され、全ライン(例えばバンド高さ分のライン全て)の画像データに対する処理が終了したか否かが判定される。若し、終了していないと判定された場合、処理がステップS200に移行され、次のラインについて処理が行われる。一方。全ラインの画像データに対する処理が終了したと判定された場合、図34のフローチャートによる一連の符号化処理が終了される。
(第2の実施形態におけるパイプライン処理)
本第2の実施形態においても、符号化部16’におけるMTFデータ幅生成部31による周期検出処理と、MTF処理部36およびハフマン符号化部37による符号化処理とを、2のラインメモリ33Aおよび33Bをトグルに用いることでパイプライン処理し、より高速な処理を実現している。このとき、本第2の実施形態では、1ライン中の先頭から白が連続して検出される場合と、1ラインの先頭からの白の連続が途切れて以降の場合とで、処理の流れが異なる。
図35−1〜図35−4を用いて、第2の実施形態によるパイプライン処理について説明する。なお、図35−1〜図35−4において、上述した図3および図33と共通する部分には同一の符号を付し、詳細な説明を省略する。
図35−1は、nライン目の処理において、nライン目の先頭から白が連続して検出されている場合の処理の流れを示す。nライン目の画像データにおいて、経路A’により、メインメモリ14のCMYKバンド画像データ領域14Cから画像読み込み部30がnライン目における1ワードの画像データを読み出し、白ライン検出部300で読み出された画像データの値が「0」であるか否かを判定する。画像データの値が「0」であると判定された場合、経路B’により、nライン目における1ワード分の画像データを例えばラインメモリ33Aに書き込む。また、白ライン検出部300は、白ラインフラグの値を全白を示す値に設定して、経路C’にてMTFデータ幅値記憶部34に記憶させる。
図35−2は、nライン目の処理において、白ラインフラグの値が非全白を示す値となり、nライン目の先頭から連続して検出された白が途切れて以降の処理の流れを示す。この場合、図26−1を用いて説明した処理の流れと同様となる。すなわち、nライン目の画像データにおいて、画像読み込み部30によりCMYKバンド画像データ領域14Cから経路Aにより読み出されたnライン目における1ワードの画像データに対して、MTFデータ幅生成部31で、複数の周期の検出を並列して行う。そして、経路Bにより、nライン目における1ワード分の画像データをラインメモリ33Aに書き込む。この1ワード単位の処理を1ライン分繰り返し、nライン目全ての処理が終了すると、MTFデータ幅生成部31が、検出を行った複数の周期のうち最も長い周期に対応するデータ幅をMTFデータ幅値に決定し、経路Cにより、決定されたMTFデータ幅値をMTFデータ幅値記憶部34に記憶させる。
図35−3は、(n+1)ライン目の処理において、(n+1)ライン目の先頭から白が連続して検出されている場合の処理の流れを示す。(n+1)ライン目の画像データにおいて、上述のnライン目と同様に、経路D’によりCMYKバンド画像データ領域14Cから読み出した(n+1)ライン目における1ワードの画像データに対して、白ライン検出部300でこの画像データの値が「0」であるか否かを判定する。画像データの値が「0」であると判定された場合、経路E’により、(n+1)ライン目における1ワード分の画像データをラインメモリ33Bに書き込む。また、白ライン検出部300は、白ラインフラグの値を全白を示す値に設定して、経路F’にてMTFデータ幅値記憶部34に記憶させる。
以上の経路D’、経路E’および経路F’の処理と並列的に、図26−2を用いて説明した処理の流れと同様に、経路Gにより、ラインメモリ33Aからnライン目の画像データを読み出して、上述の経路C’でMTFデータ幅値記憶部34に記憶されたMTFデータ幅値に基づき、MTFデータ分割部35においてnライン目の画像データが分割され、MTF処理部36に転送される。MTF処理部36は、このnライン目の分割データに基づきMTF処理により符号化を行い、一致フラグと、インデクス値またはESCデータとを生成し、生成された一致フラグと、インデクス値またはESCデータとを経路Hでハフマン符号化部37に転送する。ハフマン符号化部37は、MTF処理部36から受け取った一致フラグと、インデクス値またはESCデータとを符号化して、符号データを経路Iで符号書き込み部38に転送する。符号書き込み部38は、受け取った符号データを、メインメモリ14のCMYKページ符号データ領域14Dに書き込む。このnライン目における経路G、経路Hおよび経路Iの処理を、1ライン分繰り返す。
図35−4は、(n+1)ライン目の処理において、白ラインフラグの値が非全白を示す値となり、(n+1)ライン目の先頭から連続して検出された白が途切れて以降の処理の流れを示す。この場合、図26−2を用いて説明した処理の流れと同様となる。すなわち、(n+1)ライン目の画像データにおいて、上述のnライン目と同様に、経路Dにより、CMYKバンド画像データ領域14Cから読み出した(n+1)ライン目における1ワードの画像データに対して、MTFデータ幅生成部31で、読み出された1ワードに対して複数の周期の検出を並列して行う。そして、経路Eにより、(n+1)ライン目における1ワード分の画像データをラインメモリ33Bに書き込む。この1ワード単位の処理を1ライン分繰り返し、(n+1)ライン目全ての処理が終了すると、MTFデータ幅生成部31が、検出を行った複数の周期のうち最も長い周期に対応するデータ幅をMTFデータ幅値に決定し、経路Fにより、決定されたMTFデータ幅値をMTFデータ幅値記憶部34に記憶させる。
以上の経路D、経路Eおよび経路Fの処理と並列的に、経路Gにより、ラインメモリ33Aからnライン目の画像データを読み出して、上述の経路C’でMTFデータ幅値記憶部34に記憶されたMTFデータ幅値に基づき、MTFデータ分割部35においてnライン目の画像データが分割され、MTF処理部36に転送される。MTF処理部36は、このnライン目の分割データに基づきMTF処理により符号化を行い、一致フラグと、インデクス値またはESCデータとを生成し、生成された一致フラグと、インデクス値またはESCデータとを経路Hでハフマン符号化部37に転送する。ハフマン符号化部37は、MTF処理部36から受け取った一致フラグと、インデクス値またはESCデータとを符号化して、符号データを経路Iで符号書き込み部38に転送する。符号書き込み部38は、受け取った符号データを、メインメモリ14のCMYKページ符号データ領域14Dに書き込む。このnライン目における経路G、経路Hおよび経路Iの処理を、1ライン分繰り返す。
上述したように、本第2の実施形態では、読み込んだ1ラインの画像データの先頭から白画素の連続を検出し、白画素が連続している間は周期検出処理を行わずに、当該画像データをラインメモリに書き込む。白ラインにおいて周期検出処理を行わずに、読み込んだ画像データをそのままラインメモリに書き込むため、画像データの読み込みを高速化することが可能である。
また、1ラインの全ての画素が画素値「0」であれば、当該1ラインの処理を全て白ライン検出処理として行うことが可能であるため、圧縮符号化処理を高速化することが可能である。すなわち、1ライン全体が白であることが検出された場合、MTFデータ分割部35では、周期検出処理により検出される最大の周期に対応するデータ幅で画像データを分割する。1ライン全体が白であれば、最も大きな周期に対応するデータ幅で圧縮符号化を行うことで、処理速度および圧縮率を向上させることができる。
また、第2の実施形態では、1ラインの途中で白の連続が途切れるような場合、白が検出された部分までラインメモリに画像データを格納し、白の連続が途切れた部分から周期検出処理を開始するようにしている。そのため、白が連続している間は、高速に圧縮符号化処理を実行することが可能である。すなわち、白が連続している部分は、どの周期にも対応可能であるため、特に周期検出処理を行う必要が無い。