(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0012】
図1は、本発明のデータ処理装置の実施形態である画像データ処理装置のプリンタの電装・制御装置9のブロック図である。
CPU(Central Processing Unit)1は、PC(Personal Computer)11からのPDLを解析し、メインメモリ10へ多値(CMYK)画像データの描画処理を行なう。CPU I/F(インタフェース)2は、メインメモリアービタ(又はメインメモリARB)3に接続されて、CPU1とメインメモリコントローラ4間のI/Fを処理する。
メインメモリアービタ3は、CPU1、通信処理装置8、メインメモリコントローラ4、符号化装置5、復号装置6などとメインメモリ10とのアクセスを制御する。
【0013】
メインメモリコントローラ4は、メインメモリ10を制御する。
符号化装置5は、メインメモリ10から多値(CMYK)バンドデータを読み込み、符号を生成し、CMYKページ符号格納領域104へ転送する。
復号装置6は、メインメモリ10の符号化されたCMYKページ符号を読み込み復号し、エンジンコントローラ7へ転送する。
エンジンコントローラ7は、プリンタエンジン12を制御する。通信処理装置(又は通信コントローラ)8は、ネットワークに接続されており、ネットワークから各種データやコマンドなどを受け取り、メインメモリアービタ3を介して各種のコントローラに接続されている。
【0014】
メインメモリ10は、プログラム領域101、PDL格納メモリ領域102、CMYKバンドメモリ格納領域103、CMYKページ符号格納領域104、その他の領域105を備え、画像データや、その符号データや、CPUのプログラムなどを格納している。
PC11は、PDL(ページ記述言語)を作成し、ネットワークを介してプリンタへ転送する。
【0015】
図2は、
図1の符号化装置5の符号化処理のための機能ブロック図である。
メインメモリ10は、上述のようにデータここでは画像データを格納している。データ読み込み手段、ここでは画像読み込み部22は、メインメモリ10から所定量単位、ここではライン単位で画像データを読み取り、データ周期選択手段、ここではMTFデータ幅選択部23へ画像データを転送する。MTFデータ幅選択部23(
図6はこのMTFデータ幅選択部23のブロック図である)は、画像読み込み部22から画像データを受け取り、複数のMTFデータ幅での一致数を求めながら、ラインメモリ制御部24へ画像データを転送する。
【0016】
ラインメモリ制御部24は、MTFデータ幅選択部23から画像データを受け取り、ラインメモリ記憶手段を構成するラインメモリ25、26をライン単位ごとに交互に切り替えながら、画像データを書き込む。ラインメモリ25、26はラインメモリ制御部24からライン単位の画像データを受け取り格納する。
【0017】
MTFデータ幅値を格納するMTFデータ幅値レジスタ27は、MTFデータ幅選択部23で求めたMTFデータ幅を格納する。データ切り出し手段、ここではMTFデータ幅切り出し部28(
図7にこのMTFデータ幅切り出し部28のブロック図を示す)は、ラインメモリ制御部24から画像データを受け取る。MTFデータ幅切り出し部28は、受け取った画像データをMTFデータ幅値レジスタ27のMTFデータ幅値の幅で切り出し、中間データ変換手段、ここではMTF処理部29へ転送する。
【0018】
MTF処理部29は、MTFデータ幅切り出し部28で切り出された画像データを受け取り、MTFアルゴリズムに基づき、次のハフマン符号化処理部30でハフマン符号を生成するために、
図3の符号テーブルを特定する一致FLAGと、インデックス値と、ESCDATA(ここでは、これらを総称して中間データという)を生成する。即ち、具体的には、MTF処理部29は、MTFデータ幅切り出し部28で切り出された画像データと内蔵する辞書とを比較して、一致するか否か判断する。ここで、一致する場合は、一致したインデックス値を、一致しない場合は、切り出されたデータをESCDATA(Escapeデータ)値として、それぞれを中間データとして符号化処理手段、ここではハフマン符号化処理部30へ転送する(
図18はMTF処理部29のブロック図である)。
【0019】
ハフマン符号化処理部30は、MTF処理部29から受け取った一致FLAG(=1)と、インデックス値と、ESCDATA値を、
図3に示すフォーマットで符号化して符号書き込み部31へ転送する。なお、
図20は、ハフマン符号化処理部30におけるハフマン符号化処理手順のフロー図である。
符号書き込み部31は、ハフマン符号化処理部30で生成された符号を、符号データを格納するデータ記憶手段、ここではメモリ32へ書き込み処理する(
図26は符号化する画像データを示す図である)。
このようにして、ライン単位の画像データを符号化する(
図27は符号化した符号の例を示す図である)。符号化した画像データは、
図27に示すように、先頭にラインヘッダ符号があり、符号の終端に符号終端があるライン単位で符号化される。
なお、以上で説明した、画像読み込み部22、MTFデータ幅選択部23、ラインメモリ制御部24、MTFデータ幅切り出し部28、MTF処理部29、ハフマン符号化処理部30、符号書き込み部31は、いずれもコンピュータにプログラムを読み取らせることで得られる機能実現手段である。
【0020】
図3は、符号化した符号のフォーマット(符号フォーマット)を示す図であり、符号名と符号テーブルと符号サイズテーブルとからなる。
ここに記載された符号は、可変長のハフマン符号であり、登場頻度の高いハフマン木の順に短いコードを割り当てている。
【0021】
ここで、符号名ラインヘッダは、
図27のラインの符号の先頭にあり、ラインの符号の始まりとラインの符号のMTFデータ幅値(8ビット、16ビット、32ビット)の値を示す。符号終端は
図27のように符号の終端を示す。
符号名ESCは、MTF符号化時に辞書にないものであって、ESCヘッダと生データからなり、MTFデータ幅値(8ビット、16ビット、32ビット)により、生データのデータ幅が異なる。
インデックス(INDEX)は、MTF符号化時に入力されたデータが辞書にあったために、一致した辞書のアドレス(INDEX00など)を示す。
【0022】
図4は、MTFデータ幅(=16ビット時)における、符号化時のMTF符号化処理の辞書探索処理を示す図である。
即ち、
図2のMTFデータ幅切り出し部28は、1ワード(64ビット)のデータから、ここでは、16ビット単位(MTFデータ幅値)でデータを順次切り出す。これに対し、
図2のMTF処理部29は、ここではMaxのMTFデータ幅値である32ビットで構成されているために、切り出したデータを32ビットにするために16ビットに“0”を付加している。
図4の例では、入力されたデータ0x5555の16ビットに0x0000の16ビットを付加して32ビット(0x5555
―0000)にして、辞書を探索する(他のデータも同様に0x0000を付加する)。この場合、入力されたデータ0x5555
―0000は、
図4に示すように、インデックス値=13の辞書データと一致するために、MTF処理部29は、一致FLAG(=1)、インデックス値=13を出力する。なお、入力されたデータが辞書データと一致しないときは、既に述べたようにESCDATAを出力する。このように、中間データは入力されたデータと辞書データとの一致・不一致を反映したものである。
【0023】
図5は、MTFデータ幅(=16ビット時)における、符号化時のMTF符号化処理の辞書更新処理を示す図である。
図4において、入力されたデータ0x5555
―0000はインデックス値(=13)と一致するため、辞書更新処理は、インデックス値=13の辞書データ0x5555
―0000を削除して、
図5に示すように入力されたデータ0x5555
―0000を先頭のインデックス値=0の辞書に挿入する。同時に、辞書データを一致したインデックス値=13まで図中の矢印Yで示すようにシフトすることで行う。
【0024】
図6は、
図2のMTFデータ幅選択部23のブロック図である。
8ビット単位一致合計演算部23(1)は、1ワード(64ビット)のデータから所定の周期、ここでは8ビット単位で分割し、分割した隣接データ間でデータが一致する値(数)の合計を求める。
16ビット単位一致合計演算部23(2)は、1ワード(64ビット)のデータから所定の周期、ここでは16ビットで分割し、分割した隣接データ間でデータが一致する値(数)の合計を求める。
32ビット単位一致合計演算部23(3)は、1ワード(64ビット)のデータから所定の周期、ここでは32ビット単位で分割し、分割した隣接データ間でデータが一致する値(数)の合計を求める。
なお、8ビット単位一致合計演算部23(1)のブロック図は
図8に、16ビット単位一致合計演算部23(2)のブロック図は
図9に、32ビット単位一致合計演算部23(3)のブロック図は
図10に、それぞれ示す。
【0025】
量子化手段である量子化装置23(4)は、8ビット単位一致合計演算部23(1)で求めた8ビット単位の隣接データ間でのデータの一致数を量子化値で量子化(ここで、量子化とは、一致数カウントの値の下位ビットをマスクすることを云う。以下同じ)する。同様に、量子化装置23(5)は、16ビット単位一致合計演算部23(2)で求めた16ビット単位の隣接データ間でのデータの一致数を量子化値で量子化する。量子化装置23(6)は、32ビット単位一致合計演算部23(3)で求めた32ビット単位の隣接データ間でのデータの一致数を量子化値で量子化する。
図11は、以上の各量子化装置23(4)、23(5)、23(6)のブロック図である。
【0026】
一致MaxMTFデータ幅選択部23(7)は、各ビット単位合計値の量子化装置23(4)、23(5)、23(6)により求めた隣接データ間での一致するデータの合計値がMaxとなるMTFデータ幅を選択する。
レジスタ23(8)は、読み込まれた画像データを一時的に格納し、
図2のラインメモリ制御部24へ転送する。
【0027】
図7は、
図2のMTFデータ幅切り出し部28のブロック図である。
8ビット単位切り出し処理部28(1)は、1ワード(64ビット)のデータから8ビット単位でデータを分割して切り出す。
図15は、8ビット単位切り出し処理部28(1)のブロック図である。
16ビット単位切り出し処理部28(2)は、1ワード(64ビット)のデータから16ビット単位でデータを分割して切り出す。
図16は、16ビット単位切り出し処理部28(2)のブロック図である。
32ビット単位切り出し処理部28(3)は、1ワード(64ビット)のデータから32ビット単位でデータを分割して切り出す。
図17は、32ビット単位切り出し処理部28(3)のブロック図である。
【0028】
MUX(Multiplexer)28(4)は、各ビット単位切り出し処理部28(1)〜28(3)により切り出されたデータを指定されたMTFデータ幅値で選択する。
【0029】
図8は、8ビット単位一致合計演算部23(1)のブロック図である。
23(11)はレジスタであり、受け取った64ビットの画像データを8ビット単位で記憶する。
23(12)は、1つ前の画像データのワードの終端の8ビットのデータを格納するレジスタである。
23(13)は、EXNOR(一致検出)論理であり、隣接する8ビットのデータ間におけるデータ毎の一致を求める。
23(14)は、一致カウント手段である8ビット一致カウンタであり、8ビット単位で一致検出されたデータを受け取り、一致したビットの数(ここでは、8ビット単位で、隣同士の8ビットデータのうち一致したビットの数;以下同じ)を求める。
23(15)は、加算器であり、各8ビット一致カウンタで求めた、一致したビットの数を加算し、ライン単位で一致した数を合計する。
23(16)はレジスタであり、加算器23(15)で合計した値を1ライン分加算して記憶する。
【0030】
図9は、16ビット単位一致合計演算部23(2)のブロック図である。
23(21)はレジスタであり、受け取った画像データを16ビット単位で記憶する。
23(22)は1つ前の画像データのワードの終端の16ビットのデータを格納するレジスタである。
23(23)はEXNOR(一致検出)論理であり、隣接する16ビットのデータの一致する数を求める。
23(24)は16ビット一致カウンタであり、16ビット単位で一致検出されたデータを受け取り一致したビットの数を求める。
23(25)は加算器であり、各16ビット一致カウンタで求めた、一致したビットの数を加算しライン単位で一致した数を合計する。
23(26)はレジスタであり、加算器23(25)で合計した値を1ライン分加算して記憶する。
【0031】
図10は、32ビット単位一致合計演算部23(3)のブロック図である。
23(31)はレジスタであり、受け取った画像データを32ビット単位で記憶する。
23(32)は1つ前の画像データのワードの終端の32ビットのデータを格納するレジスタである。
23(33)はEXNOR(一致検出)論理であり、隣接する32ビットのデータの一致を求める。
23(34)は32ビット一致カウンタであり、32ビット単位で一致検出されたデータを受け取り一致したビットの数を求める。
23(35)は加算器であり、各32ビット一致カウンタで求めた、一致したビット数を加算しライン単位で一致した数を合計する。
23(36)はレジスタであり、加算器23(35)で合計した値を1ライン分加算して記憶する。
【0032】
図15は、
図7の8ビット単位切り出し処理部28(1)のブロック図である。
28(11)はレジスタであり、受け取った画像データを8ビット単位で記憶する。
28(12)はMUXであり、レジスタ28(11)の8ビット単位のデータを順次選択する。また、出力時に“0”値を24ビット付加して32ビットとして出力する。
28(13)はカウンタであり、MUX28(12)の選択する値を順次作成する。
【0033】
図16は、
図7の16ビット単位切り出し処理部28(2)のブロック図である。
28(21)はレジスタであり、受け取った画像データを16ビット単位で記憶する。
28(22)はMUXであり、レジスタ28(21)の16ビット単位のデータを順次選択する。また、出力時に“0”値を16ビット付加して32ビットとして出力する。
28(23)はカウンタであり、MUX28(22)の選択する値を順次作成する。
【0034】
図17は、
図7の32ビット単位切り出し処理部28(3)のブロック図である。
28(31)はレジスタであり、受け取った画像データを32ビット単位で記憶する。
28(32)はMUXであり、レジスタ28(31)の32ビット単位のデータを順次選択する。
28(33)はカウンタであり、MUX28(32)の選択する値を順次作成する。
【0035】
図18は、
図2のMTF処理部29のブロック図である。
図中データ0〜15はレジスタに格納された辞書の内容であり、データ0〜15に付された番号1〜6がインデックス値に対応する。また、
図5で示したように更新時にシフトできるように隣接するレジスタの入出力が接続されている。29(7)〜(12)は比較器であり、インデックス値1〜6の辞書の内容と切り出されたデータを比較して、インデックス生成装置29(13)へ転送する。
インデックス生成装置29(13)は、比較器29(7)〜(12)の比較結果を受け取り、一致した番号(インデックス値)のうち一番若い番号を選択し、インデックス値として出力する。
OR回路29(14)は、比較器29(7)〜(12)からの比較結果を受け取り、一致FLAG(=1)を生成する。
辞書ライト制御装置29(15)は、インデックス値を受け取り、インデックス番号までのデータ0〜15のライトを制御する。
【0036】
図11は、
図6の量子化装置23(4)のブロック図である。
23(41)は、8ビット量子化装置であり、16ビットの一致合計値の下位8ビットをマスク、即ち“0”にする。
23(42)は、7ビット量子化装置であり、16ビットの一致合計値の下位7ビットを“0”に量子化する。
23(43)は、6ビット量子化装置であり、16ビットの一致合計値の下位6ビットを“0”に量子化する。
【0037】
23(44)はMUXであり、量子化値を受けとり、各量子化装置23(41)、23(42)、23(43)の量子化後の一致合計値又は量子化されていない一致合計を選択する。例えば、量子化値=0であれば、8ビット量子化装置23(41)の値を選択する。量子化値=1であれば、7ビット量子化装置23(42)の値を選択する。量子化値=2であれば、6ビット量子化装置23(43)の値を選択する。量子化値=3であれば、量子化されていない一致合計を選択する。
【0038】
図12は、8ビット量子化装置23(41)の量子化の処理状態を示す図である。このように、16ビットの一致合計値の下位8ビットを“0”に量子化する。
図13は、7ビット量子化装置23(42)の量子化の処理状態を示す図である。このように、16ビットの一致合計値の下位7ビットを“0”に量子化する。
図14は、6ビット量子化装置23(43)の量子化の処理状態を示す図である。このように、16ビットの一致合計値の下位6ビットを“0”に量子化する。
【0039】
図19は、
図6の一致MaxMTFデータ幅選択部23(7)の処理手順を示すフロー図である。
一致MaxMTFデータ幅選択部23(7)は、8ビット一致合計値と16ビット一致合計値を比較(S101)する。ここで、両者が等しいか若しくは、16ビット一致合計値が大きい場合は(S101、YES)、ステップS105の処理へ進む。逆に、8ビット一致合計値が16ビット一致合計値よりも大きい場合は(S101、NO)、ステップS102の処理へ進む。
ステップS102で、8ビット一致合計値と32ビット一致合計値を比較し(S102)、両者が等しいか若しくは、32ビット一致合計値が8ビット一致合計値より大きい場合は(S102、YES)、MTFデータ幅を32ビットにする(S104)。8ビット一致合計値が32ビット一致合計値より大きい場合は(S102、NO)、MTFデータ幅を8ビットにする(S103)。
【0040】
ステップS105では、16ビット一致合計値と32ビット一致合計値を比較する(S105)。ここで、両者が等しいか若しくは、32ビット一致合計値が16ビット一致合計値よりも大きい場合は(S105、YES)、MTFデータ幅を32ビットにする(S107)。16ビット一致合計値が32ビット一致合計値より大きい場合は(S105、NO)、MTFデータ幅を16ビットにする(S106)。このように一致合計値が等しい場合は、より大きな周期を優先する。
【0041】
図20は、
図2のハフマン符号化処理部30で行うハフマン符号化処理の手順を示すフロー図である。
即ち、ステップS201でラインの先頭であるか否か判断し、ライン先頭であれば(S201、YES)、ラインヘッダ符号化処理を行い(S202)、
図3のラインヘッダを符号として出力する。
【0042】
次に、
図2のMTF処理部29のMTF処理で入力されたデータが辞書に一致したか否か判断する(S203)。ここで、両者が一致した場合は(S203、YES;HITFLG=1)、インデックス符号化処理を行う(S204)。両者が一致していない場合は(S203、NO)、ESC符号化処理を行う(S205)。次に、ラインの終端であるか否か判断し(S206)、ラインの終端であれば(S206、YES)、終端符号化処理を行い、
図3の符号終端を符号として出力する(S207)。
【0043】
図21は、
図20のステップS204のインデックス符号化処理の手順を示すフロー図である。
即ち、まず、
図3の符号フォーマットのインデックス値に対応する符号とサイズを求める。つまり、インデックス符号テーブル(DICTNUM)を符号データとし、符号サイズ=インデックスサイズテーブル(DICTNUM)として(S301)、続いて符号出力処理を行う(S302)。
【0044】
図22は、
図20のステップS205のESC符号化処理の手順を示すフロー図である。
まず、
図3の符号フォーマットのESCヘッダに対応する符号とサイズを求める、例えば、ESCヘッダ“0”を符号データとし、符号サイズを3ビットとして(S401)、符号出力処理を行う(S402)。次に、MTFデータ幅の値が8ビットであれば(S403、YES)、符号データ=ESCDATA[31:24]、符号サイズ=8ビットとする(S404)。つまりESCDATAの先頭の8ビットを符号化する。
【0045】
MTFデータ幅の値が16ビットであれば(S403、NO、S405、YES)、符号データ=ESCDATA[31:16]、符号サイズ=16ビットとする。つまりESCDATAの先頭の16ビットを符号化する。
MTFデータ幅の値が32ビットであれば、(S403、NO、S405、NO)、
符号データ=ESCDATA[31:0]、符号サイズ=32ビットとする。つまりESCDATAの先頭の32ビットを符号化する。最後に符号出力処理を行い(S408)、このESC符号化処理を終了する。
【0046】
図23は、
図20のステップS202のラインヘッダ符号化処理の手順を示すフロー図である。
まず、MTFデータ幅値が8ビットであるか否か判断する(S501)、MTFデータ幅値が8ビットであれば(S501、YES)、符号データを7′b′1111000とし、符号サイズを7ビットとして(S502)、符号出力処理を行う(S506)。MTFデータ幅値が16ビットであれば(S501、NO、S503、YES)、符号データを7′b′1111001とし、符号サイズを7ビットとして(S504)、符号出力処理を行う(S506)。さらに、MTFデータ幅値が32ビットであれば(S501、NO、S503、NO)、符号データを7′b′1111010、符号サイズを7ビットとして(S505)、符号出力処理を行う(S506)。
【0047】
図24は、
図20のステップS207の終端符号化処理の手順を示すフロー図である。
このように、MTFデータ幅の値で
図3の符号フォーマットの符号終端に対応する符号とサイズ(ここでは、符号データ=5′b′11111、符号サイズ=5ビット)を求め(S601)、符号出力処理を行う(S602)。
【0048】
次に、可変長符号を32ビット符号に詰めて出力する手順について説明する。
図25Aは、可変長符号の32ビット符号への符号出力処理の手順を示すフロー図である。また
図25B〜25Eは、ワード(64ビット)幅内における、
図25Aの符号出力処理におけるステップS702の符号のマージン処理を示す図である。
まず、
図25Bにおいて、64ビットの符号の位置を示すポインタを求め、
図25Bの符号の左端を求める。例えば、符号ポインタは、最初は左端の63を示しており、この符号ポインタから符号長(符号サイズ)の11ビットを引き、符号ポインタを52にする。(S701)。次に、
図25Cに示すように、追加する符号を更新後のポインタ値分シフトし、前の符号を加える。つまり、
図25Cに示すように、前の符号があるために、符号ポインタが52でそれから符号長の17ビットを引き更新後の符号ポインタを35にする(S702)。
次に、
図25D、
図25Eの処理を行う。即ち、
図25Dでは、追加した符号(35ビット)により、更新後の符号ポインタは24になったので、符号ポインタが32以下であるから(S703、YES)、S704以下の処理を行う。即ち上位の32ビットを切り出し(S704)、符号として出力し(S705)、
図25Eに示すように、符号ポインタを32加算し(S706)、
図25Eのように32ビットシフトし(S707)、32ビット単位の符号を1カウントアップする(S708)。このように符号サイズと符号から符号のワード幅(32ビット)に可変長符号が一杯になると、可変長の符号を固定長の32ビットに詰めて符号化して出力する。
【0049】
なお、以上の実施形態において、辞書はMTFアルゴリズムに基づく、つまりMTF方式の辞書であるが、簡単なFIFO(First In First Out)アルゴリズムに基づくFIFO方式の辞書であってよい。次にその点について説明する。
図29は、
図1の符号化装置5の符号化処理のためのFIFOアルゴリズムに基づく機能ブロック図である。
図29においては、
図2の機能ブロック図におけるMFT処理部29がFIFO処理部29Aに置き換わっており、同じ部分には同じ符号を付している。
即ち、メインメモリ10は、データここでは画像データを格納している。データ読み込み手段、ここでは画像読み込み部22は、メインメモリ10から所定量単位、ここではライン単位で画像データを読み取り、データ周期選択手段、ここではMTFデータ幅選択部23へ画像データを転送する。MTFデータ幅選択部23(MTFデータ幅選択部23は既に
図6に示したとおりである)は、画像読み込み部22から画像データを受け取り、複数のMTFデータ幅での一致数を求めながら、ラインメモリ制御部24へ画像データを転送する。
【0050】
ラインメモリ制御部24は、MTFデータ幅選択部23から画像データを受け取り、ラインメモリ記憶手段を構成するラインメモリ25、26をライン単位ごとに交互に切り替えながら、画像データを書き込む。ラインメモリ25、26はラインメモリ制御部24からライン単位の画像データを受け取り格納する。
MTFデータ幅値を格納するMTFデータ幅値レジスタ27は、MTFデータ幅選択部23で求めたMTFデータ幅を格納する。データ切り出し手段、ここではMTFデータ幅切り出し部28(MTFデータ幅切り出し部28は既に
図7に示したとおりである)は、ラインメモリ制御部24から画像データを受け取る。MTFデータ幅切り出し部28は、受け取った画像データをMTFデータ幅値レジスタ27のMTFデータ幅値の幅で切り出し、中間データ変換手段、ここではFIFO処理部29Aへ転送する。
【0051】
FIFO処理部29Aは、MTFデータ幅切り出し部28で切り出された画像データを受け取り、FIFOアルゴリズムに基づき、次のハフマン符号化処理部30で符号化データ(ハフマン符号)を生成するために、
図3の符号テーブルを特定する一致FLAG(=1)と、インデックス値と、ESCDATA、即ち中間データを生成する。
具体的には、FIFO処理部29Aは、MTFデータ幅切り出し部28で切り出された画像データと内蔵する辞書とを比較して、一致するか否か判断する。ここで、一致する場合は、一致したインデックス値を、一致しない場合は、切り出されたデータをESCDATA値として符号化処理手段、ここではハフマン符号化処理部30へ転送する。
【0052】
ハフマン符号化処理部30は、FIFO処理部29Aから受け取った一致FLAG(=1)とインデックス値とESCDATA値を、
図3に示すフォーマットで符号化して符号書き込み部31へ転送する。なお、ハフマン符号化処理部30におけるハフマン符号化処理手順は、既に
図20に示したとおりである。
【0053】
符号書き込み部31は、ハフマン符号化処理部30で生成された符号を、符号データを格納するデータ記憶手段、ここではメモリ32へ書き込み処理する(符号化する画像データは
図26に示したとおりである)。
このようにして、ライン単位の画像データを、
図27に例示したように符号化する。符号化した画像データは、
図27に示したように、先頭にラインヘッダ符号があり、符号の終端に符号終端があるライン単位で符号化される。
なお、以上で説明した、画像読み込み部22、MTFデータ幅選択部23、ラインメモリ制御部24、MTFデータ幅切り出し部28、FIFO処理部29A、ハフマン符号化処理部30、符号書き込み部31も、コンピュータにプログラムを読み取らせることで得られる機能実現手段である。
【0054】
図30は、
図29のFIFO処理部29Aのブロック図である。
図中データ0〜15はレジスタに格納された辞書の内容であり、データ0〜15に付された番号1〜6がインデックス値に対応する。また、後述する
図31で示すように、更新時にシフトできるように隣接するレジスタの入出力が接続されている。29(7)〜(12)は比較器であり、インデックス値1〜6の辞書の内容と切り出されたデータを比較して、インデックス生成装置29(13)へ転送する。
インデックス生成装置29(13)は、比較器29(7)〜(12)の比較器からの比較結果を受け取り、一致した番号(インデックス値)のうち一番若い番号を選択し、インデックス値として出力する。
OR回路29(14)は、比較器29(7)〜(12)からの比較結果を受け取り、一致FLAG(=1)を生成する。
【0055】
図31は、MTFデータ幅(=16ビット時)における、符号化時のFIFO符号化処理の辞書更新処理を示す図である。
入力されたデータで辞書を探索する場合は、
図4に示したとおりであり、入力データ0x5555
―0000を辞書データと対比すると、インデックス値(=13)の辞書データと一致する。この場合の辞書更新処理は、入力されたデータ0x5555
―0000を先頭のインデックス値=0の辞書に挿入する。同時に、
図31に示すように、辞書データを全て図中の矢印Yで示すようにシフトする。但し、この場合は、MTFアルゴリズムによるものと相違して、インデックス値(=13)の辞書データ0x5555
―0000は削除せずにそのまま残す(
図31はシフト後のデータであり、シフト前の
図4のインデックス値=15のデータは破棄されている)。
【0056】
図32は、量子化値を変えたことによるMax周期(入力データと辞書のワードとの一致数が最も大きな周期をいう)の差の例を示す図である。
図32は、量子化しない場合と、量子化を行う場合(即ち、下位8ビット、7ビット、6ビットをそれぞれ“0”にマスクした場合における、8周期、16周期、32周期における入力データと辞書のワードとの一致数を表にして表したものである。
図32に示すように量子化なしの各周期での一致数を下位8ビット/7ビット/6ビットを“0”にマスクすると、(i)下位8ビット量子化の場合は、全ての周期が同じ値になっている。このために、ここでいうMax周期は32周期となり、32ビット/クロックで圧縮するのが好適であることを表している。つまり、32ビット/クロックで圧縮できるが、多少圧縮率は低下する。(ii)下位7ビット量子化の場合は、8周期と16周期が同じ値になる。そのため、Max周期は16周期となり、16ビット/クロックで圧縮するのが好適であることを示している。ただ、微少の圧縮率は低下する。(iii)圧縮率は低下しない。下位6ビット量子化の場合は、8周期での一致数は704、16周期では640、32周期では512であるから、その傾向は量子化なしの場合と同様であり、Max周期は8周期である。したがって、8ビット/クロックで圧縮するのが好適であることを示している。この場合は、圧縮率は低下しないが、圧縮速度は32周期、16周期の場合よりも低下する。
【0057】
このように量子化値を変更することで、圧縮率とスピード(圧縮速度)のバランスを調節する。その場合、メモリを多く持ったプリンタでは、量子化値を大きくすることで、圧縮率は多少低下する場合があるが、圧縮スピードを向上させることができる。メモリが少ないプリンタでは、量子化値を小さくすること(若しくは量子化しないこと)で、圧縮率を落すことなく、圧縮スピードは従来のままにする、などの選択が可能である。
【0058】
以上、本実施形態によれば、複数の周期にて、一致数をカウントするが、その複数の一致数カウントの値を量子化(一致数カウントの値の下位ビットをマスクする)することにより、少ない値の一致数であれば、同じ数値にし、一致数が同じ場合は大きな周期の値を選択する。これにより、各周期の一致数のカウント値の差が小さい場合は、その差を考慮しないようにしたことで、出来るだけ大きな周期で符号化して符号化速度を高速化することができる。