JP3083329B2 - データ圧縮復元方式 - Google Patents
データ圧縮復元方式Info
- Publication number
- JP3083329B2 JP3083329B2 JP1766491A JP1766491A JP3083329B2 JP 3083329 B2 JP3083329 B2 JP 3083329B2 JP 1766491 A JP1766491 A JP 1766491A JP 1766491 A JP1766491 A JP 1766491A JP 3083329 B2 JP3083329 B2 JP 3083329B2
- Authority
- JP
- Japan
- Prior art keywords
- dictionary
- character
- code
- character string
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Image Processing (AREA)
Description
【0001】
【産業上の利用分野】本発明はデータの符号化方式や復
号化方式に係り、さらに詳しくは符号化によってデータ
を圧縮するデータ圧縮方式に係る。また、このデータ圧
縮方式によって圧縮されたデータを復元するデータ復元
方式に関する。
号化方式に係り、さらに詳しくは符号化によってデータ
を圧縮するデータ圧縮方式に係る。また、このデータ圧
縮方式によって圧縮されたデータを復元するデータ復元
方式に関する。
【0002】
【従来の技術】近年、OA化の発展、更にはCPUの処
理技術の向上により、カラーや白黒階調画像情報等のデ
ータベースを計算機で扱うことが増えてきている。これ
らの画像情報のデータ量は1枚(1画面)あたり数Mバ
イトになり非常に大きいものである。このため蓄積や伝
送等における画像情報を効率良く扱うため、データ圧縮
を行って記憶すべきデータ量を減らしている。
理技術の向上により、カラーや白黒階調画像情報等のデ
ータベースを計算機で扱うことが増えてきている。これ
らの画像情報のデータ量は1枚(1画面)あたり数Mバ
イトになり非常に大きいものである。このため蓄積や伝
送等における画像情報を効率良く扱うため、データ圧縮
を行って記憶すべきデータ量を減らしている。
【0003】データ圧縮には様々な方式があるが、その
一方式としてユニバーサル符号化がある。なお、本発明
は文字コードの圧縮に限らず様々なデータに適用できる
が、以下では説明のため情報理論の分野で呼称されてい
るデータの1ワード単位を文字、データが複数ワードつ
ながったものを文字列と呼ぶ。
一方式としてユニバーサル符号化がある。なお、本発明
は文字コードの圧縮に限らず様々なデータに適用できる
が、以下では説明のため情報理論の分野で呼称されてい
るデータの1ワード単位を文字、データが複数ワードつ
ながったものを文字列と呼ぶ。
【0004】前述のユニバーサル符号化の代表的な方法
として、Ziv-Lempel符号がある(詳しくは、例えば、宗
像『Ziv-Lempelのデータ圧縮法』、情報処理、Vol .2
6、No.1,1985年を参照のこと)。このZiv-Lempel符
号ではユニバーサル型と、増分分解型(Incrementa
l parsing)の2つのアルゴリズムが提案されている。
として、Ziv-Lempel符号がある(詳しくは、例えば、宗
像『Ziv-Lempelのデータ圧縮法』、情報処理、Vol .2
6、No.1,1985年を参照のこと)。このZiv-Lempel符
号ではユニバーサル型と、増分分解型(Incrementa
l parsing)の2つのアルゴリズムが提案されている。
【0005】ユニバーサル型のアルゴリズムは、演算量
が多いが、高圧縮率が得られるという特徴を有してい
る。この方式は、符号化データを過去のデータ系列の任
意の位置から一致する最大長の系列に区切り(部分
列)、過去の系列の複製として符号化する方法である。
図6に示す如くPバッファとQバッファとが設けられ、
Pバッファに符号化済みの入力データを格納し、Qバッ
ファにこれから符号化するデータを格納する。そして、
Qバッファの系列はPバッファの系列をサーチし、Pバ
ッファ中で一致する最大長の部分列を求める。そして、
Pバッファ中でこの最大部分列を指定するための情報の
組を符号化する。
が多いが、高圧縮率が得られるという特徴を有してい
る。この方式は、符号化データを過去のデータ系列の任
意の位置から一致する最大長の系列に区切り(部分
列)、過去の系列の複製として符号化する方法である。
図6に示す如くPバッファとQバッファとが設けられ、
Pバッファに符号化済みの入力データを格納し、Qバッ
ファにこれから符号化するデータを格納する。そして、
Qバッファの系列はPバッファの系列をサーチし、Pバ
ッファ中で一致する最大長の部分列を求める。そして、
Pバッファ中でこの最大部分列を指定するための情報の
組を符号化する。
【0006】更に、ユニバーサル型アルゴリズムの改良
としてLZSS符号がある。(T.C.Bell, “Better OPM
/L Text Compression ”,IEEE Trans. on Commun., Vo
l.COM-34,No.12, Dec.1986参照) 。このLZSS符
号では図5Aに示す如くPバッファ中の最大一致系列の
開始位置を求め、一致する長さの組と、次のシンボルと
をフラグで区別して符号量の少ない方で符号化するもの
である。
としてLZSS符号がある。(T.C.Bell, “Better OPM
/L Text Compression ”,IEEE Trans. on Commun., Vo
l.COM-34,No.12, Dec.1986参照) 。このLZSS符
号では図5Aに示す如くPバッファ中の最大一致系列の
開始位置を求め、一致する長さの組と、次のシンボルと
をフラグで区別して符号量の少ない方で符号化するもの
である。
【0007】一方、増分分解型アルゴリズムは、圧縮率
ではユニバーサル型より劣るが、シンプルで計算も容易
であるという特徴を有している。増分分解型Ziv-Lempel
符号では、入力シンボルの系列をx=aabababa
a・・・とすると、成分系列x=X0 X1 X2 ・・・へ
の増分分解は次のようにしている。先ずX1 を既成分の
右端のシンボルを取り除いた最長の列とし、X=a・a
b・aba・b・aa・・・としている。従って、X0
=λ(空列)、X1 =X0 a,X2 =X1 b,X3 =X
2 a,X4 =X0 b,X5 =X1 a,・・・・と分解で
きる。
ではユニバーサル型より劣るが、シンプルで計算も容易
であるという特徴を有している。増分分解型Ziv-Lempel
符号では、入力シンボルの系列をx=aabababa
a・・・とすると、成分系列x=X0 X1 X2 ・・・へ
の増分分解は次のようにしている。先ずX1 を既成分の
右端のシンボルを取り除いた最長の列とし、X=a・a
b・aba・b・aa・・・としている。従って、X0
=λ(空列)、X1 =X0 a,X2 =X1 b,X3 =X
2 a,X4 =X0 b,X5 =X1 a,・・・・と分解で
きる。
【0008】増分分解した各成分系列は既成分系列を用
いて、図5Bに示すごとく各成分のでた順番に成分のイ
ンデックスと次のシンボルを用いて符号化している。す
なわち増分分解型アルゴリズムは、符号化パターンにつ
いて、過去に分解した部分列の内最大長を意識するもの
を求め、過去に分解した部分列の複製として符号化する
ものである。
いて、図5Bに示すごとく各成分のでた順番に成分のイ
ンデックスと次のシンボルを用いて符号化している。す
なわち増分分解型アルゴリズムは、符号化パターンにつ
いて、過去に分解した部分列の内最大長を意識するもの
を求め、過去に分解した部分列の複製として符号化する
ものである。
【0009】さらに、前述の増分分解型アルゴリズムの
改良として、LZW符号がある。(T.A. Welch, “A Te
chnique for High-Performance Data Compression”,Co
mputer, June 1984参照)。このLZW符号では、次の
シンボルを次の部分列に組み込むようにしてインデック
ススのみで符号化できるようにしている。
改良として、LZW符号がある。(T.A. Welch, “A Te
chnique for High-Performance Data Compression”,Co
mputer, June 1984参照)。このLZW符号では、次の
シンボルを次の部分列に組み込むようにしてインデック
ススのみで符号化できるようにしている。
【0010】図7は従来のLZW符号化による処理フロ
ー図である。LZW符号化処理においては、書き換え可
能な辞書を有し、入力文字列を相異なる文字列(部分
列)に分け、この文字列を出現した順に参照番号を付け
て辞書に登録するとともに、現在入力している文字列を
辞書に登録してある最長一致文字列の参照番号で表わし
て符号化するものである。
ー図である。LZW符号化処理においては、書き換え可
能な辞書を有し、入力文字列を相異なる文字列(部分
列)に分け、この文字列を出現した順に参照番号を付け
て辞書に登録するとともに、現在入力している文字列を
辞書に登録してある最長一致文字列の参照番号で表わし
て符号化するものである。
【0011】先ず、処理S1で予め辞書に全文字につき
1文字からなる文字列を初期値として登録してから後述
する符号化を始める。また、処理S1では入力した最初
の文字Kにより辞書を検索して最小番号ωを求め、これ
を語頭文字列とする。続いて処理S2で入力データの次
の文字Kを読み込み、処理S3で全ての文字入力が終了
したか否かをチェックする。入力文字が存在する、すな
わち文字Kが存在する時(Y)には語頭文字列ωに処理
S2で読み込んだ文字Kを加えた文字列(ωK)が辞書
に存在するか否かを求める。
1文字からなる文字列を初期値として登録してから後述
する符号化を始める。また、処理S1では入力した最初
の文字Kにより辞書を検索して最小番号ωを求め、これ
を語頭文字列とする。続いて処理S2で入力データの次
の文字Kを読み込み、処理S3で全ての文字入力が終了
したか否かをチェックする。入力文字が存在する、すな
わち文字Kが存在する時(Y)には語頭文字列ωに処理
S2で読み込んだ文字Kを加えた文字列(ωK)が辞書
に存在するか否かを求める。
【0012】判別処理S4で文字列(ωK)が辞書に存
在しなければ(N)、処理S6によって処理1で求めた
文字Kの参照番号ωを符号語code(ω)として出力し、
また文字列(ωK)を新たな参照番号として辞書に登録
し、更に処理S2の入力文字Kを参照番号ωに置き換え
ると共に辞書アドレスnをインクリメントして再度処理
S2より実行する。
在しなければ(N)、処理S6によって処理1で求めた
文字Kの参照番号ωを符号語code(ω)として出力し、
また文字列(ωK)を新たな参照番号として辞書に登録
し、更に処理S2の入力文字Kを参照番号ωに置き換え
ると共に辞書アドレスnをインクリメントして再度処理
S2より実行する。
【0013】一方、処理S4で文字列(ωK)が辞書に
存在する時(Y)には、文字列(ωK)を参照番号ωに
置き換え(S5)、再び処理S2に戻って処理S4にお
いて文字列ωKが辞書から探せなくなるまで最大一致長
の検索を続ける。
存在する時(Y)には、文字列(ωK)を参照番号ωに
置き換え(S5)、再び処理S2に戻って処理S4にお
いて文字列ωKが辞書から探せなくなるまで最大一致長
の検索を続ける。
【0014】また、文字Kが判別処理S3において存在
しないと判別した時(N)には処理S7によってcode
(ω)を出力し終了(END)する。前述した処理を図
9,10を参照して具体的に説明する。
しないと判別した時(N)には処理S7によってcode
(ω)を出力し終了(END)する。前述した処理を図
9,10を参照して具体的に説明する。
【0015】図9の入力データINPUT SYMBOLS は左から
右へと順次読む。最初の文字aを入力した時、辞書には
aの他に一致する文字列がないので、OUTPUT CODE 1
(参照番号ω)を符号語として出力する。そして、拡張
した文字列abに参照番号4を付けて辞書に登録する。
実際の辞書登録は図10の右側(ALTERNATE TABLE )に
示すように文字列1bとして登録する。続いて2番目の
文字bが文字列の先頭になる。辞書にはbの他に一致す
る文字がないので参照番号2を符号文字として出力し、
同時に拡張した文字列baも辞書にないので文字列ba
を2aで表わし、参照番号5を付けて辞書に登録する。
そして3番目のaが次の文字列の先頭になる。以下同様
にこの処理を続ける。
右へと順次読む。最初の文字aを入力した時、辞書には
aの他に一致する文字列がないので、OUTPUT CODE 1
(参照番号ω)を符号語として出力する。そして、拡張
した文字列abに参照番号4を付けて辞書に登録する。
実際の辞書登録は図10の右側(ALTERNATE TABLE )に
示すように文字列1bとして登録する。続いて2番目の
文字bが文字列の先頭になる。辞書にはbの他に一致す
る文字がないので参照番号2を符号文字として出力し、
同時に拡張した文字列baも辞書にないので文字列ba
を2aで表わし、参照番号5を付けて辞書に登録する。
そして3番目のaが次の文字列の先頭になる。以下同様
にこの処理を続ける。
【0016】図8は図7の復号化処理によって求めた圧
縮データの復号化処理のフローチャートである。図8の
LZW復号化処理においては、符号化と同様に予め辞書
に全文字につき1文字からなる文字列を初期値として登
録してから復号を始める。
縮データの復号化処理のフローチャートである。図8の
LZW復号化処理においては、符号化と同様に予め辞書
に全文字につき1文字からなる文字列を初期値として登
録してから復号を始める。
【0017】先ず処理S11で最初の符号(参照番号)
を読み込み、現在のCODEをOLDcodeとし、最初の
符号は既に辞書に登録された1文字の参照番号いずれか
に該当することから、入力符号CODEに一致する文字
code(K)を探し出し、文字Kを出力する。なお、出力
した文字Kは後の例外処理のためFINcharにセットす
る。
を読み込み、現在のCODEをOLDcodeとし、最初の
符号は既に辞書に登録された1文字の参照番号いずれか
に該当することから、入力符号CODEに一致する文字
code(K)を探し出し、文字Kを出力する。なお、出力
した文字Kは後の例外処理のためFINcharにセットす
る。
【0018】次に処理S12において、次の符号を読み
込んでCODEをINcodeとしてセットする。続いて新
たな符号があるか否かを判別(S13)し、新たな符号
がない時(N)には終了(END)する。また、存在す
る時(Y)には処理S13で入力した符号CODEが辞
書に定義されているか否かをチェックする(S14)。
通常入力した符号語は前回までの処理で辞書に登録され
ているため、続いて符号CODEに対する文字列code(ω
K)を辞書から読み出し、文字Kを一時的にスタック
(S16)し、参照番号code(ω)を新たな符号CO
DEとして再度処理S15より実行する。この処理S1
5、S16の手順を再帰的に参照番号ωが1文字Kに至
るまで繰り返し最後に処理S17において処理S16で
スタックした文字をLIFO(Last InFast Out) 形式
でポップアップして出力する。また同時に前回使用した
符号ωと今回復元した文字列の最初の1文字Kを組
(ω,K)と表わした文字列に、新たな参照番号として
辞書に登録する。
込んでCODEをINcodeとしてセットする。続いて新
たな符号があるか否かを判別(S13)し、新たな符号
がない時(N)には終了(END)する。また、存在す
る時(Y)には処理S13で入力した符号CODEが辞
書に定義されているか否かをチェックする(S14)。
通常入力した符号語は前回までの処理で辞書に登録され
ているため、続いて符号CODEに対する文字列code(ω
K)を辞書から読み出し、文字Kを一時的にスタック
(S16)し、参照番号code(ω)を新たな符号CO
DEとして再度処理S15より実行する。この処理S1
5、S16の手順を再帰的に参照番号ωが1文字Kに至
るまで繰り返し最後に処理S17において処理S16で
スタックした文字をLIFO(Last InFast Out) 形式
でポップアップして出力する。また同時に前回使用した
符号ωと今回復元した文字列の最初の1文字Kを組
(ω,K)と表わした文字列に、新たな参照番号として
辞書に登録する。
【0019】図11を参照してLZW復号化処理を具体
的に説明する。最初の入力符号(INPUT COD
E)は1であり、1文字a,b,cについては既に参照
番号1,2,3として図11に示す如く辞書に登録され
ている。よって辞書の参照により符号1に一致する参照
番号の文字列aに置き換えて出力する。次の符号2につ
いても同様にし、文字bに置き換えて出力する。この時
前回処理した符号1と今回復号した最初の1文字bとを
組み合わせた文字列(1b)に新たな参照番号4を付加
して辞書に登録する。
的に説明する。最初の入力符号(INPUT COD
E)は1であり、1文字a,b,cについては既に参照
番号1,2,3として図11に示す如く辞書に登録され
ている。よって辞書の参照により符号1に一致する参照
番号の文字列aに置き換えて出力する。次の符号2につ
いても同様にし、文字bに置き換えて出力する。この時
前回処理した符号1と今回復号した最初の1文字bとを
組み合わせた文字列(1b)に新たな参照番号4を付加
して辞書に登録する。
【0020】3番目の符号4は辞書の検索により求めた
文字列1bから文字列abと置き換えて文字列abを出
力する。同時に前回処理した符号2と今回復号した文字
列の1番目の文字aとの組み合わせた文字列2a(=b
a)に新たな参照番号5を付加して辞書に登録する。そ
して以下同様に繰り返すことにより復号がなされる。
文字列1bから文字列abと置き換えて文字列abを出
力する。同時に前回処理した符号2と今回復号した文字
列の1番目の文字aとの組み合わせた文字列2a(=b
a)に新たな参照番号5を付加して辞書に登録する。そ
して以下同様に繰り返すことにより復号がなされる。
【0021】図11のLZW復号化においては次の例外
処理がある。この例外処理は例えば第6番目の入力符号
8の復号にて生ずる。復号8は復号時に辞書に定義され
ておらず復号できない。この場合には前回処理した符号
5に前回復号した文字列baの最初の1文字bを加えた
文字列5bを求め、更に2ab=babと置き換えて出
力する例外処理を行う。そして、文字列の出力後に前回
の符号5に今回復号した文字列の1番目の文字bを加え
た文字列5bに参照番号8を付加して辞書に登録する。
処理がある。この例外処理は例えば第6番目の入力符号
8の復号にて生ずる。復号8は復号時に辞書に定義され
ておらず復号できない。この場合には前回処理した符号
5に前回復号した文字列baの最初の1文字bを加えた
文字列5bを求め、更に2ab=babと置き換えて出
力する例外処理を行う。そして、文字列の出力後に前回
の符号5に今回復号した文字列の1番目の文字bを加え
た文字列5bに参照番号8を付加して辞書に登録する。
【0022】この例外処理は図7の復号化処理フローの
処理S4,S8によって行われ、最終的に処理S7で文
字列の出力と新たな文字列に参照番号を付加した辞書へ
の登録が行われる。
処理S4,S8によって行われ、最終的に処理S7で文
字列の出力と新たな文字列に参照番号を付加した辞書へ
の登録が行われる。
【0023】尚、図8,図11のLZW復号化において
は、復号側で符号を解読しながら辞書をリアルタイムで
作り出す場合を説明しているが、符号化の際に作られた
辞書をそのまま復号化側にコピーして使用することで、
復号化している場合もあり、この場合には復号側での例
外処理は不要になる。
は、復号側で符号を解読しながら辞書をリアルタイムで
作り出す場合を説明しているが、符号化の際に作られた
辞書をそのまま復号化側にコピーして使用することで、
復号化している場合もあり、この場合には復号側での例
外処理は不要になる。
【0024】
【発明が解決しようとする課題】前述した従来のLZW
符号においては、入力文字コード・データを相異なる文
字列に分けて符号化するとき、現在符号化中の各文字列
は以前の文字列とは独立に出現するとして符号化する形
式を用いている。しかしながら、従来の方式において
は、辞書が1つであるため、その再現する文字列を表わ
す符号には冗長性を有し、圧縮率の低下を招いてた。し
かしながら、データの増加に伴い、さらに圧縮率の高い
方式が要求されている。
符号においては、入力文字コード・データを相異なる文
字列に分けて符号化するとき、現在符号化中の各文字列
は以前の文字列とは独立に出現するとして符号化する形
式を用いている。しかしながら、従来の方式において
は、辞書が1つであるため、その再現する文字列を表わ
す符号には冗長性を有し、圧縮率の低下を招いてた。し
かしながら、データの増加に伴い、さらに圧縮率の高い
方式が要求されている。
【0025】本発明は圧縮率を高めたデータ圧縮方式と
その圧縮してデータを復元する復元方式を提供すること
を目的とする。
その圧縮してデータを復元する復元方式を提供すること
を目的とする。
【0026】
【課題を解決するための手段とその作用】本発明は第1
には符号化済データを相異なる部分列に分けて辞書に登
録しておき、入力データを前記辞書中の部分列のうちの
最大長と一致するものの番号で指定して符号化する方式
におけるものである。
には符号化済データを相異なる部分列に分けて辞書に登
録しておき、入力データを前記辞書中の部分列のうちの
最大長と一致するものの番号で指定して符号化する方式
におけるものである。
【0027】複数個設けた辞書に対して検索を行い、最
長の文字列を表わせる辞書を選択して、選択された辞書
の参照番号で指定して符号化する。入力文字に対して入
力文字の繰り返しを表わせる最長の文字列を辞書から参
照し、最長の文字列を表わせる辞書を選択し、その参照
番号で符号化する。復号時には選択した辞書がわかるの
で辞書の選択指示を必要とせず、高圧縮率をなすことが
できる。
長の文字列を表わせる辞書を選択して、選択された辞書
の参照番号で指定して符号化する。入力文字に対して入
力文字の繰り返しを表わせる最長の文字列を辞書から参
照し、最長の文字列を表わせる辞書を選択し、その参照
番号で符号化する。復号時には選択した辞書がわかるの
で辞書の選択指示を必要とせず、高圧縮率をなすことが
できる。
【0028】また、復号においては、複数個設けた辞書
に対して検索を行い、最長の文字列を復号できる辞書を
選択しその選択した辞書の参照番号から復号化を行う。
この時、上述の最長の文字列を復号できる辞書を選択す
るので上述したデータ圧縮時の辞書の指示を必要とせ
ず、圧縮における高効率化とそれによって圧縮したデー
タを復元することができる。
に対して検索を行い、最長の文字列を復号できる辞書を
選択しその選択した辞書の参照番号から復号化を行う。
この時、上述の最長の文字列を復号できる辞書を選択す
るので上述したデータ圧縮時の辞書の指示を必要とせ
ず、圧縮における高効率化とそれによって圧縮したデー
タを復元することができる。
【0029】
【実施例】以下、図面を用いて本発明を詳細に説明す
る。本発明はデータ圧縮並びに復元方式におけるもので
あり、回路によって構成することも又プロセッサのソフ
トウェアによって処理を行うこともできる。以下ではプ
ロセッサを用いた時のフローを用いて詳細に説明する。
図1は本発明による符号化方式の符号化アルゴリズムの
フローチャートである。本発明は複数(DN個)の各辞
書Di (i=1,・・・DN)に1文字からなる文字列
全種を初期値として予め登録する。そして各辞書の参照
番号の総数をn(i)で管理し、初期化のとき、DN個
のni (文字種+1)をセットする。1文字を入力した
時はLZW符号と手順は同様である。また従来のLZW
符号では辞書は1個だけであったのに対して本発明の実
施例においては複数個の辞書に対して文字列の照合を行
い、一番長い文字列を符号化できた辞書の参照番号を実
際の符号化に使用している。使用された辞書DNoへの登
録後は、DNoの参照番号数を管理するnNoが1つインク
リメントされる。この時文字列照合の結果文字列の長さ
が同じ長さになった場合には、乱数により辞書を決定す
る。
る。本発明はデータ圧縮並びに復元方式におけるもので
あり、回路によって構成することも又プロセッサのソフ
トウェアによって処理を行うこともできる。以下ではプ
ロセッサを用いた時のフローを用いて詳細に説明する。
図1は本発明による符号化方式の符号化アルゴリズムの
フローチャートである。本発明は複数(DN個)の各辞
書Di (i=1,・・・DN)に1文字からなる文字列
全種を初期値として予め登録する。そして各辞書の参照
番号の総数をn(i)で管理し、初期化のとき、DN個
のni (文字種+1)をセットする。1文字を入力した
時はLZW符号と手順は同様である。また従来のLZW
符号では辞書は1個だけであったのに対して本発明の実
施例においては複数個の辞書に対して文字列の照合を行
い、一番長い文字列を符号化できた辞書の参照番号を実
際の符号化に使用している。使用された辞書DNoへの登
録後は、DNoの参照番号数を管理するnNoが1つインク
リメントされる。この時文字列照合の結果文字列の長さ
が同じ長さになった場合には、乱数により辞書を決定す
る。
【0030】さらにその処理を詳細に説明する。入力バ
ッファに圧縮すべきデータが入力すると、図1の処理を
実行する。まず第1番目の文字を含むように辞書を初期
化する。この初期化では文字iを辞書アドレスiに登録
し、各辞書の参照番号の個数nを初期化する。これは for (i=1 to DN)NMIN→n; を表わすものである。但し、NMINは(文字の処理+
1)である。
ッファに圧縮すべきデータが入力すると、図1の処理を
実行する。まず第1番目の文字を含むように辞書を初期
化する。この初期化では文字iを辞書アドレスiに登録
し、各辞書の参照番号の個数nを初期化する。これは for (i=1 to DN)NMIN→n; を表わすものである。但し、NMINは(文字の処理+
1)である。
【0031】さらに入力した最初の文字Kを語頭文字列
(prefix string)ω;として登録する(S1)。初期設
定(S1)の後、次の文字入力Kを読み(S2)、つづ
いて文字Kがあるか否かを判別(S3)する。文字Kが
存在する時(Y)にはn個分の分割辞書検索を行い、最
大符号化できる辞書番号を求める。この検索は後述詳細
に説明するが、辞書を指定しなくても最大符号化できる
辞書番号は辞書に依存するので復号時にその辞書番号を
指示しなくても求めることが出来る。ここで求めた辞書
番号からその辞書に対しcode(ω)を出力し、ωKを辞
書DNo(nNo)に登録し、KをωとしnNo+1をnNoと
する。この処理(S5)の後再度判別(S3)より繰り
返す。
(prefix string)ω;として登録する(S1)。初期設
定(S1)の後、次の文字入力Kを読み(S2)、つづ
いて文字Kがあるか否かを判別(S3)する。文字Kが
存在する時(Y)にはn個分の分割辞書検索を行い、最
大符号化できる辞書番号を求める。この検索は後述詳細
に説明するが、辞書を指定しなくても最大符号化できる
辞書番号は辞書に依存するので復号時にその辞書番号を
指示しなくても求めることが出来る。ここで求めた辞書
番号からその辞書に対しcode(ω)を出力し、ωKを辞
書DNo(nNo)に登録し、KをωとしnNo+1をnNoと
する。この処理(S5)の後再度判別(S3)より繰り
返す。
【0032】判別(S3)において文字Kが存在しない
時には処理(S5)によって今まで求めたコードを出力
(S6)し、終了(END)する。前述した処理(S
4)を更に詳細に表わすと図2の如くなる。処理(S
4)を実行開始すると先ず入力文字ポインタをテンポラ
リポインタレジスタtmpに格納する(S7)。続いて
カウンタ(COUNT)に1を、また入力文字ポインタ
にテンポラリレジスタtmpの内容を格納する。処理
(S7)における入力文字ポインタをテンポラリポイン
タレジスタtmpに格納するのはDN回繰り返す毎に入
力文字ポインタの先頭を設定するのに必要とするその値
を記憶するためである。すなわち、テンポラリポインタ
レジスタtmpの内容を入力文字ポインタに再度格納す
るのは順次繰り返される辞書に対応して入力文字ポイン
タを以後行うべき位置、すなわちテンポラリポインタレ
ジスタtmpに格納されている値(処理を開始時の入力
文字ポインタ)にするためである。
時には処理(S5)によって今まで求めたコードを出力
(S6)し、終了(END)する。前述した処理(S
4)を更に詳細に表わすと図2の如くなる。処理(S
4)を実行開始すると先ず入力文字ポインタをテンポラ
リポインタレジスタtmpに格納する(S7)。続いて
カウンタ(COUNT)に1を、また入力文字ポインタ
にテンポラリレジスタtmpの内容を格納する。処理
(S7)における入力文字ポインタをテンポラリポイン
タレジスタtmpに格納するのはDN回繰り返す毎に入
力文字ポインタの先頭を設定するのに必要とするその値
を記憶するためである。すなわち、テンポラリポインタ
レジスタtmpの内容を入力文字ポインタに再度格納す
るのは順次繰り返される辞書に対応して入力文字ポイン
タを以後行うべき位置、すなわちテンポラリポインタレ
ジスタtmpに格納されている値(処理を開始時の入力
文字ポインタ)にするためである。
【0033】処理(S8)に続いてωKが辞書に存在す
るか否かを判別する(S9)。ωKが辞書に存在する時
(Y)にはωKの値をωに格納し(S10)、つづいて
次の文字Kを読むと共にカウント+1をカウントに格納
する(S11)。そして再度処理(S9)より繰り返
す。この繰り返しにより順次文字列が存在することとな
る。一方、判別処理(S9)により存在する文字列がな
いと判別した時(N)にはそこで文字列が終了している
のでカウント(count)値を保存する(S12)。前述し
た処理(S8〜S12)を順次繰り返し行う。この繰り
返しは辞書の数DN分行う(S13)。そしてDN回行
った後、保存したカウントの最大値を選択(S14)し
(同数の場合は乱数で選択)、辞書番号iをNOに格納し
カウント+テンポラリの値を入力文字ポインタとする
(S4)。そして、本処理を終了する。前述した処理に
よって各辞書対応で最大のカウントが変化し、最大値に
対応した辞書を選択するが、この選択は復号においても
同様であり、図4に示す如くコードを出力するωはその
辞書に対応したωであって、ωやその一部が辞書を指示
しているものではない。しかしながら、復号においてそ
の指示が自動的になされるので辞書を指示する必要はな
く、圧縮率を高めることができる。
るか否かを判別する(S9)。ωKが辞書に存在する時
(Y)にはωKの値をωに格納し(S10)、つづいて
次の文字Kを読むと共にカウント+1をカウントに格納
する(S11)。そして再度処理(S9)より繰り返
す。この繰り返しにより順次文字列が存在することとな
る。一方、判別処理(S9)により存在する文字列がな
いと判別した時(N)にはそこで文字列が終了している
のでカウント(count)値を保存する(S12)。前述し
た処理(S8〜S12)を順次繰り返し行う。この繰り
返しは辞書の数DN分行う(S13)。そしてDN回行
った後、保存したカウントの最大値を選択(S14)し
(同数の場合は乱数で選択)、辞書番号iをNOに格納し
カウント+テンポラリの値を入力文字ポインタとする
(S4)。そして、本処理を終了する。前述した処理に
よって各辞書対応で最大のカウントが変化し、最大値に
対応した辞書を選択するが、この選択は復号においても
同様であり、図4に示す如くコードを出力するωはその
辞書に対応したωであって、ωやその一部が辞書を指示
しているものではない。しかしながら、復号においてそ
の指示が自動的になされるので辞書を指示する必要はな
く、圧縮率を高めることができる。
【0034】図3は本発明における復号化のアルゴリズ
ムのフローチャートである。復号化においても符号化と
同様に例えばプロセッサによってその処理を行う。本発
明の復号は符号化の逆の動作をするものであり、辞書の
初期化は符号化と同様である。復号においては入力した
符号CODEから参照番号ωを復号した後、最長に復元
される辞書から正式の辞書を決定して文字列を求め、符
号化と同様に最長の文字列が多数求まった場合には乱数
により決定する。この時、符号時と同じ乱数のシードを
使用することにより符号側で符号化した辞書と同じ辞書
を決定することができる。更にその処理を詳細に説明す
る。
ムのフローチャートである。復号化においても符号化と
同様に例えばプロセッサによってその処理を行う。本発
明の復号は符号化の逆の動作をするものであり、辞書の
初期化は符号化と同様である。復号においては入力した
符号CODEから参照番号ωを復号した後、最長に復元
される辞書から正式の辞書を決定して文字列を求め、符
号化と同様に最長の文字列が多数求まった場合には乱数
により決定する。この時、符号時と同じ乱数のシードを
使用することにより符号側で符号化した辞書と同じ辞書
を決定することができる。更にその処理を詳細に説明す
る。
【0035】圧縮したデータを復号化する際、まずバッ
ファ等に圧縮すべきデータが格納される。この格納の
後、図3におけるプログラムを実行する。まず処理を開
始STARTすると、最初の符号を読み込み、code
-1(CODE)をOLDωとし、続いてω=D(K)、
文字Kを出力、KをFINEcharに格納する処理を行う(S
21)。続いて次の入力コードを読み取る(S22)。
そして新たな符号があるかを判別(S23)し、新たな
符号がない(N)には終了(END)する。また、符号
が存在する時(Y)には続いてcode-1(CODE)
をωとし、ωをINωとする(S24)。続いてn個の
分割辞書検索処理(S25)を実行し、最大符号化でき
る辞書番号を求める。そして辞書番号NOのSTACKが
空になるまでSTACK TOPを出力し、POP S
TAKする。また、復元文字列の第1文字をFINchar
に、また(OLDω,K)を辞書DNo(nNo)に登録
し、さらにnNo+1をnNo、INωをOLDωとする
(S26)。そして再度(S22)より実行し順次これ
を繰り返す。
ファ等に圧縮すべきデータが格納される。この格納の
後、図3におけるプログラムを実行する。まず処理を開
始STARTすると、最初の符号を読み込み、code
-1(CODE)をOLDωとし、続いてω=D(K)、
文字Kを出力、KをFINEcharに格納する処理を行う(S
21)。続いて次の入力コードを読み取る(S22)。
そして新たな符号があるかを判別(S23)し、新たな
符号がない(N)には終了(END)する。また、符号
が存在する時(Y)には続いてcode-1(CODE)
をωとし、ωをINωとする(S24)。続いてn個の
分割辞書検索処理(S25)を実行し、最大符号化でき
る辞書番号を求める。そして辞書番号NOのSTACKが
空になるまでSTACK TOPを出力し、POP S
TAKする。また、復元文字列の第1文字をFINchar
に、また(OLDω,K)を辞書DNo(nNo)に登録
し、さらにnNo+1をnNo、INωをOLDωとする
(S26)。そして再度(S22)より実行し順次これ
を繰り返す。
【0036】さらに前述したn個の分割辞書検索(S2
5)について図4で説明する。分割辞書検索処理(S2
5)を実行開始すると、先ずOLDcodeをTMP−OL
Dcodeに、FINcharをTMP−FINcharに、ωをT
MP−ωにそれぞれ格納する(S27)。この処理は複
数の辞書を同一条件で検索する、すなわちそれぞれの辞
書に対応して同一条件からスタートするようにするため
に一時的に記憶するものである(S27)。続いてN回
繰り返すためのイニシャル処理を行う(S28)。この
処理は前述した処理S27と逆の処理であり、各テンポ
ラリに格納したTMP−OLDcodeのデータをOLDco
deに、TMP−FINcharのデータをFINcharに、T
MP−ωをωに、カウンタを1にする処理である(S2
9)。続いて判別処理(S29)でωとnとを比較しω
=nであるならば、FINcharを出力、OLDcodeをC
ODEに、D(INω)を(OLDcode,FINchar)
に格納する(S31)。また、ωがnより小さいならば
辞書DNoよりω′K=DNo(ω)を判別し、等しい時
(Y)にはKをPUSH STACKに、ω′をωに、
CONT+1をCONTに設定し、再度判別(S30)
を実行する。また、判別(S30)において等しくない
と判別した時(N)にはOLDcode,FINchar,ω,
CONT,STACKの内容を保存する(S33)。ま
た、判別(S29)においてωがカウント値nより大で
あるときには前述の処理を行わず次の辞書の処理に移
る。この前述した処理(S28〜S33)を分割辞書数
分DN回繰り返す。そしてその繰り返しの後最大のカウ
ント値を選択し同数の場合は乱数で選び辞書番号iをナ
ンバーとして出力する。また保存してあるOLDcode,
FINchar,ωを設定する(S34)。
5)について図4で説明する。分割辞書検索処理(S2
5)を実行開始すると、先ずOLDcodeをTMP−OL
Dcodeに、FINcharをTMP−FINcharに、ωをT
MP−ωにそれぞれ格納する(S27)。この処理は複
数の辞書を同一条件で検索する、すなわちそれぞれの辞
書に対応して同一条件からスタートするようにするため
に一時的に記憶するものである(S27)。続いてN回
繰り返すためのイニシャル処理を行う(S28)。この
処理は前述した処理S27と逆の処理であり、各テンポ
ラリに格納したTMP−OLDcodeのデータをOLDco
deに、TMP−FINcharのデータをFINcharに、T
MP−ωをωに、カウンタを1にする処理である(S2
9)。続いて判別処理(S29)でωとnとを比較しω
=nであるならば、FINcharを出力、OLDcodeをC
ODEに、D(INω)を(OLDcode,FINchar)
に格納する(S31)。また、ωがnより小さいならば
辞書DNoよりω′K=DNo(ω)を判別し、等しい時
(Y)にはKをPUSH STACKに、ω′をωに、
CONT+1をCONTに設定し、再度判別(S30)
を実行する。また、判別(S30)において等しくない
と判別した時(N)にはOLDcode,FINchar,ω,
CONT,STACKの内容を保存する(S33)。ま
た、判別(S29)においてωがカウント値nより大で
あるときには前述の処理を行わず次の辞書の処理に移
る。この前述した処理(S28〜S33)を分割辞書数
分DN回繰り返す。そしてその繰り返しの後最大のカウ
ント値を選択し同数の場合は乱数で選び辞書番号iをナ
ンバーとして出力する。また保存してあるOLDcode,
FINchar,ωを設定する(S34)。
【0037】なお、例外処理とし、符号化時に選択され
た最大一致長系列を示す参照番号が、他の分割辞書です
でに使用され、なおかつ、現在選択された系列よりも長
い系列を表す場合には、符号化する参照番号の前に選択
された辞書の番号を示す制御コードを符号化し、それに
続き、参照番号を符号化する。復号化においても、選択
番号を示す制御コードを検出したなら、指定された分割
辞書により復元を行う。
た最大一致長系列を示す参照番号が、他の分割辞書です
でに使用され、なおかつ、現在選択された系列よりも長
い系列を表す場合には、符号化する参照番号の前に選択
された辞書の番号を示す制御コードを符号化し、それに
続き、参照番号を符号化する。復号化においても、選択
番号を示す制御コードを検出したなら、指定された分割
辞書により復元を行う。
【0038】以上のような動作により、復号時に符号値
と同様の処理を逆に行い複数の辞書が存在しても、その
辞書を指示されなくても復号側で求めることができ、例
えば圧縮して転送する等の場合にその圧縮率が高まり転
送効率を得ることが出来る。本発明の実施例ではプロセ
ッサによる処理を用いているがこれに限らず、例えば回
路等によって行うことも可能である。
と同様の処理を逆に行い複数の辞書が存在しても、その
辞書を指示されなくても復号側で求めることができ、例
えば圧縮して転送する等の場合にその圧縮率が高まり転
送効率を得ることが出来る。本発明の実施例ではプロセ
ッサによる処理を用いているがこれに限らず、例えば回
路等によって行うことも可能である。
【0039】
【発明の効果】以上述べたように本発明によれば、複数
に分割した辞書により文字列を符号化できるため、従来
のLZW符号より高い圧縮率が得られるとともに、符号
が参照番号のみで表わされる簡単なアルゴリズムで実行
できる。
に分割した辞書により文字列を符号化できるため、従来
のLZW符号より高い圧縮率が得られるとともに、符号
が参照番号のみで表わされる簡単なアルゴリズムで実行
できる。
【図1】本発明による符号化方式の符号化アルゴリズム
のフローチャートである。
のフローチャートである。
【図2】本発明による最大文字列検索のフローチャート
である。
である。
【図3】本発明による復号化方式の復号化アルゴリズム
のフローチャートである。
のフローチャートである。
【図4】本発明による分割辞書検索のフローチャートで
ある。
ある。
【図5】ユニバーサル符号化のアルゴリズムである。
【図6】ユニバーサル型ZL符号の符号化の原理図であ
る。
る。
【図7】従来のLZW符号化処理フロー図である。
【図8】従来のLZW復号化処理フロー図である。
【図9】LZW符号化説明図である。
【図10】辞書構成例の説明図である。
【図11】LZW復号化説明図である。
フロントページの続き (72)発明者 中野 泰彦 神奈川県川崎市中原区上小田中1015番地 富士通株式会社内 (56)参考文献 特開 昭63−151224(JP,A) 特開 平1−132222(JP,A) (58)調査した分野(Int.Cl.7,DB名) H03M 7/40
Claims (2)
- 【請求項1】 符号化済データを相異なる部分列に分
け、該部分列に参照番号を付けて辞書に登録しておき、
入力データを前記辞書中の部分列のうちの最大長一致す
る部分列を前記参照番号で指定して符号化する方式にお
いて、 複数個設けられた辞書に対して検索を行い、最長の文字
列を表わせる辞書を選択すると共に、該選択された辞書
に対し前記参照番号で指定して符号化することを特徴と
するデータ圧縮方式。 - 【請求項2】 符号化済データを相異なる部分列に分
け、該部分列に参照番号を付けて辞書に登録しておき、
入力データを前記辞書中の部分列のうちの最大長一致す
る部分列を前記参照番号で指定して符号化したデータを
復元する方式において、 複数個設けた辞書に対して検索を行い、最長の文字列を
復号できる辞書を選択し、該選択された辞書に対して前
記参照番号から復号化を行うことを特徴とするデータ復
元方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP1766491A JP3083329B2 (ja) | 1991-02-08 | 1991-02-08 | データ圧縮復元方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP1766491A JP3083329B2 (ja) | 1991-02-08 | 1991-02-08 | データ圧縮復元方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH04256192A JPH04256192A (ja) | 1992-09-10 |
JP3083329B2 true JP3083329B2 (ja) | 2000-09-04 |
Family
ID=11950122
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP1766491A Expired - Fee Related JP3083329B2 (ja) | 1991-02-08 | 1991-02-08 | データ圧縮復元方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3083329B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4308676B2 (ja) * | 2003-01-24 | 2009-08-05 | 株式会社リコー | 文字列処理装置,文字列処理方法および画像形成装置 |
-
1991
- 1991-02-08 JP JP1766491A patent/JP3083329B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH04256192A (ja) | 1992-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3241788B2 (ja) | データ圧縮方式 | |
JP3231105B2 (ja) | データ符号化方式及びデータ復元方式 | |
JP2536422B2 (ja) | デ―タ圧縮装置及びデ―タ復元装置 | |
JP3038223B2 (ja) | データ圧縮方式 | |
JP3083329B2 (ja) | データ圧縮復元方式 | |
JP3350118B2 (ja) | データ符号化方式及びデータ復元方式 | |
JP3241787B2 (ja) | データ圧縮方式 | |
JPH05152971A (ja) | データ圧縮・復元方法 | |
JP3098046B2 (ja) | 画像データ圧縮装置及びその方法 | |
JPH06161705A (ja) | データ符号化方式及びデータ復元方式 | |
JP3132836B2 (ja) | 画像データ圧縮復元方法 | |
JP2774350B2 (ja) | データ圧縮方法および圧縮データのデータ復元方法 | |
JP3199292B2 (ja) | ハフマン符号の符号化でのランレングス抽出方法、ハフマン符号変換方法およびmh符号化処理方法 | |
JP3038233B2 (ja) | データ圧縮及び復元装置 | |
JP3073072B2 (ja) | 画像データ圧縮及び復元方式 | |
JP3088740B2 (ja) | データ圧縮及び復元方式 | |
JP2999561B2 (ja) | データ圧縮及び復元装置 | |
JP3051501B2 (ja) | データ圧縮方法 | |
JP3105330B2 (ja) | 画像データの圧縮復元方式 | |
JP3117760B2 (ja) | データ復元方式 | |
JP3442105B2 (ja) | データ圧縮および復元方式 | |
JP2825960B2 (ja) | データ圧縮方法及び復元方法 | |
JP2840420B2 (ja) | 画像データ圧縮及び復元方式 | |
JP2802135B2 (ja) | 画像データ圧縮方法 | |
JP3015483B2 (ja) | データ圧縮及び復元方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20000620 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090630 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |