一、LZW基本信息
J.Ziv和A.Lempel在1978年首次发表了介绍第二类词典编码算法的文章。在他们的研究基础上,Terry A.Welch在1984年发表了改进这种编码算法的文章,因此把这种编码方法称为LZW(LempelZiv Walch)压缩编码。
LZW只输出代表词典中的字符串(String)的码字 (code word)。这就意味在开始时词典不能是空的, 它必须包含可能在字符流出现中的所有单个字符。 即在编码匹配时,至少可以在词典中找到长度为1 的匹配串。
二、LZW特点
1)LZW码能有效利用字符出现频率冗余度进行压缩,且字典是自适应生成的,但通常不能有效地利用位置冗余度。
2)对于数据流中连续重复出现的字节和字串,LZW压缩技术具有很高的压缩比。
3)除了用于图像数据处理以外,LZW压缩技术还被用于文本程序等数据压缩领
4)对于任意宽度和像素位长度的图像,都具有稳定的压缩过程。压缩和解压缩速度较快。
三、编码原理
LZW编码器的输入字符流,输出码字流。
具体步骤:
1:将词典初始化为所有可能出现的单字符,当前前缀P初始化为空。
2:当前字符C=字符流中的下一个字符。
3:判断P+C是否在词典中:
(1)如果“是”,则用C扩展P,即P=P+C,返回步骤2。
(2)如果“否”,则输出与当前前缀P相对应的码字W;将P+C添加到词典中;令P=C,返回到步骤2。
四、解码原理
LZW解码器的输入码字流,输出字符流。核心思想在于解码需要还原出编码时的用的字典。
具体步骤:
具体步骤:
- 初始状态,字典里只有所有的默认项(单个字符的码字对应单个字符),此时pW和cW都是空的。
- 读入第一个的码字符号cW,解码输出字符。(第一个cW一定能直接解码,而且一定是单个字符)
- 赋值pW=cW。
- 读入下一个码字cW。
- 在字典里查找cW,如果:
a. cW在字典里:
(1) 解码cW,输出 Str(cW),即输出对应字符。
(2) 令P=Str(pW),C=Str(cW)的第一个字符。
(3) 在字典中为P+C添加新码字映射。
b. cW不在字典里:
(1) 令P=Str(pW),C=Str(pW)的第一个字符。
(2) 在字典中为P+C添加新的码字映射,这个新的码字一定就是cW。
(3) 输出P+C。 - 返回步骤3重复,直至读完所有码字。
五、实验结果
选取10种不同格式的文件进行压缩编码与解码,并分析了不同格式文件的压缩效率。