- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LZW编码算法详解
LZW编码
LZW(Lempel-Ziv Welch)编码又称字串表编码,是Welch将Lemple和Ziv所提出来的无损压缩技术改进后的压缩方法。GIF图像文件采用的是一种改良的LZW压缩算法,通常称为GIF-LZW压缩算法。下面简要介绍GIF-LZW的编码与解码方解:例 现有来源于二色系统的图像数据源(假设数据以字符串表示):aabbbaabb,试对其进行LZW编码及解码。1)根据图像中使用的颜色数初始化一个字串表(如表1),字串表中的每个颜色对应一个索引。在初始字串表的LZW_CLEAR和LZW_EOI分别为字串表初始化标志和编码结束标志。设置字符串变量S1、S2并初始化为空。
2)输出LZW_CLEAR在字串表中的索引3H(见表2第一行)。
3)从图像数据流中第一个字符开始,读取一个字符a,将其赋给字符串变量S2。判断S1+S2=“a”在字符表中,则S1=S1+S2=“a”(见表2第二行)。
4)读取图像数据流中下一个字符,将其赋给字符串变量S2。判断S1+S2=“aa”不在字符串表中,输出S1=“a”在字串表中的索引0H,并在字串表末尾为S1+S2=aa添加索引4H,且S1=S2=“a”(见表2第三行)。
5)读下一个字符b赋给S2。判断S1+S2=“ab”不在字符串表中,输出S1=“a”在字串表中的索引0H,并在字串表末尾为S1+S2=“ab”添加索引5H,且S1=S2=“b”(见表2第四行)。 6)读下一个字符b赋给S2。S1+S2=“bb”不在字串表中,输出S1=“b”在字串表中的索引1H,并在字串表末尾为S1+S2=“bb”添加索引6H,且S1=S2=“b”(见表2第五行)。
?7)读字符b赋给S2。S1+S2=“bb”在字串表中,则S1=S1+S2=“bb”(见表2第六行)。8)读字符a赋给S2。S1+S2=“bba”不在字串表中,输出S1=“bb”在字串表中的索引6H,并在字串表末尾为S1+S2=“bba”添加索引7H,且S1=S2=“”(见表2第七行)。9)读字符a赋给S2。S1+S2=“aa”在字串表中,则S1=S1+S2=“aa”(见表2第八行)。10)读字符b赋给S2。S1+S2=“aab”不在字串表中,输出S1=“aa”在字串表中的索引4H,并在字串表末尾为S1+S2=“aab”添加索引8H,且S1=S2=“b”(见表2第九行)。11)读字符b赋给S2。S1+S2=“bb”,在字串表中,则S1=S1+S2=“b”(见表2第十行)。
?12)输出S1中的字符串b在字串表中的索引1H(见表2第十一行)。
?13)输出结束标志LZW_EOI的索引3H,编码完毕。
?最后的编码结果。
下面对上述编码结行解码。同样先初始化字符串表,结果如表1所示。
??? 1)首先读取第一个编码Code=3H,由于它为LZW_CLEAR,无输出(见表3第一行)。
??? 2)读入下一个编码Code=0H,由于字符串表中存在该索引,因此输出字符串表中0H对应的字符串a,同时使OldCode=Code=0H(见表3第二行)。
??? 3)读下一个编码Code=0H,字符串表中存在该索引,输出0H所对应的字符串a,然后将OldCode=0H所对应的字符串a加上Code=0H所对应的字符串的第一个字符a,即aa添加到字串表中,其索引为4H,同时使OldCode=Code=0H(见表3第三行)。
??? 4)读下一个编码Code=1H,字串表中存在该索引,输出1H所对应的字符串b,然后将OldCode=0H所对应的字符串a加上Code=1H所对应的字符串的第一个字符b,即ab添加到字串表中,其索引为5H,同时使OldCode=Code=1H(见表3第四行)。
??? 5)读入下一个编码Code=6H,由于字串表中不存在该索引,因此输出OldCode=1H所对应的字符串b加上OldCode的第一个字符b“,即bb,同时将bb添加到字符串表中,其索引为6H,同时使OldCode=Code=6H(见表3第五行)。
??? 6)读下一个编码Code=4H,字串表中存在该索引,输出4H所对应的字符串aa,然后将OldCode=6H所对应的字符串bb加上Code=4H所对应的字符串的第一个字符a,即bba添加到字串表中,其索引为7H,同时使OldCode=Code=4H(见表3第六行)。
??? 7)读下一个编码Code=6H,字串表中存在该索引,输出6H所对应的字符串bb,然后将OldCode=4H所对应的字符串aa加上Code=6H所对应的字符串的第一个字符b,即aab添加到字串表中,其索引为8H,同时使OldCode=Code=6H(见表3第七行)。
??? 8)读下一个编码Code=3H,它等
文档评论(0)