CN108768403B - 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 - Google Patents
基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 Download PDFInfo
- Publication number
- CN108768403B CN108768403B CN201810534506.9A CN201810534506A CN108768403B CN 108768403 B CN108768403 B CN 108768403B CN 201810534506 A CN201810534506 A CN 201810534506A CN 108768403 B CN108768403 B CN 108768403B
- Authority
- CN
- China
- Prior art keywords
- greedy
- lzw
- data stream
- phrase
- sequence
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明涉及一种基于LZW的无损数据压缩、解压方法及LZW编码器、解码器,该压缩包含:读取待压缩字符串,将待压缩字符串分解为原始短语序列,将原始短语序列与字典中的数据项进行编码匹配,依据匹配结果输出相应字符,得到压缩数据流;选取两个非负整数作为嵌入参数K和L,将预设消息划分为连续的多组数据块,每组数据块包含两个子块,每个子块用参数k和l表示;依据k和l将数据块嵌入到压缩数据流中,生成最终压缩数据流。本发明对LZW压缩数据流,通过选取部分编码码字并动态调整其对应的被压缩字符串的长度,利用动态调整的码字短语模式嵌入额外消息比特,不影响LZW算法整体压缩性能的前提下,由于没有改变编码规则和数据格式,兼容性、实用性较强。
Description
技术领域
本发明属于数据压缩技术领域,特别涉及一种基于LZW的无损数据压缩、解压方法及LZW编码器、解码器。
背景技术
在信源信道分离理论的指导下,目前的通信***中,信源编码实现了通信有效性问题,信道编码实现了通信可靠性问题。由于分离定理的局限性,级联编码的设计思想使信源编码后的序列抗干扰能力变得十分薄弱。事实上,自适应数据压缩缺乏修复能力是在许多应用中存在的一个突出缺点。从信源编码机理分析可见,信源编码得到的数据几乎是没有冗余的,这种数据经过信道传输后,由于信道噪声和干扰的影响,往往存在误码。而近乎零冗余的压缩数据是没有抗误码能力的,在这种情况下进行信源译码时,误码会导致构造码表和重构数据出现错误,随着译码进行码表和数据误码的影响就呈现出扩散的态势,引发大规模的差错传播即误码扩散,所以少量误码就有可能造成严重后果。因此,压缩数据流对传输错误非常敏感,含误码的压缩数据无法进行译码,往往一个比特的错误就会危及后续所有数据,并造成整个文件无法解压,严重影响了压缩数据恢复的质量,导致信息的丢失。
Lempel-Ziv-Welch(LZW)压缩算法是一种无损数据压缩算法,作为Lempel-Ziv 78(LZ78)字典编码算法的改进版本,由T.Welch提出,用于高性能磁盘控制器的硬件实现。当程序压缩成为Unix***中标准压缩方案时,该算法得到了广泛的应用。LZW算法作为GIF图像格式和V.42bis调制解调器的标准被采用,在TIFF图像和PDF格式文件中都使用了LZW算法。由于信源经过压缩后去除了大量的相关性,压缩编码后的数据中冗余很小,在译码端压缩数据恢复过程中进行误码修复可利用的冗余信息非常少。因此目前关于提高Lempel-Ziv系列压缩算法抗误码能力的研究主要集中于改进编码端的容错能力:有的分析了LZW的编码规则,提出一种新的码表构造及更新的优化方法并能对压缩数据提供一定的保护;有的利用随压缩数据一同传递的信源状态和信道状态的先验信息,在一定误码率条件下对压缩数据的误码进行了修复;有的采用了信道编码保护数据的思路,通过对编码数据进行分组并为分组码字额外增加了校验码。这些方法虽然能取得一定的效果,但算法复杂度较高,还会降低压缩性能,更重要的是由于对编码规则以及数据格式进行了修改,导致无法与标准算法兼容,因此实用性打了折扣。
发明内容
针对现有技术中的不足,本发明提供一种基于LZW的无损数据压缩、解压方法及LZW编码器、解码器,对LZW压缩数据流,通过选取部分编码码字并动态调整其对应的被压缩字符串的长度,利用动态调整的码字短语模式嵌入额外消息比特,在不影响LZW算法的整体压缩性能的前提下,由于没有改变编码规则和数据格式,其编码方法及编码器与标准LZW算法完全兼容。
按照本发明所提供的设计方案,一种基于LZW的无损数据压缩方法,包含如下步骤:
读取待压缩字符串,将待压缩字符串分解为原始短语序列,将原始短语序列与字典中的数据项进行编码匹配,依据匹配结果输出相应字符,得到压缩数据流;
选取两个非负整数作为嵌入参数K和L,根据K和L取值将预设消息划分为连续的多组数据块,每组数据块中包含两个子块,每个子块用参数k和l表示,k∈[0,2K-1],l∈[0,2L-1];依据k和l缩短原始短语序列中部分短语,并压缩编码,形成非贪婪码字,将数据块嵌入到压缩数据流中,生成最终压缩数据流,其中,k为指定在两个非贪婪码字序列间隔内嵌入的消息,l为指定在非贪婪码字序列中嵌入的消息。
上述的,将原始短语序列与字典中的数据项进行编码匹配,串行检查原始短语序列,分解出已经识别的最长短语,确定字典中最长前缀作为已知前缀,将已知前缀加上读取的原始短语序列中的当前字符作为扩展字符串,判断扩展字符串是否已记载在字典中,若已记载,则将扩展字符串作为已知前缀,继续读取原始短语序列中的下一个字符,直至读取完原始短语序列所有字符;若没有记载,则输出已知前缀对应的编码到压缩数据流中,生成贪婪码字,将扩展字符串添加到字典中,并该当前字符作为已知前缀,继续读取原始短语序列中的下一个字符,直至读取完原始短语序列中所有字符。
上述的,压缩数据流中从k个贪婪码字序列中取出最后一个贪婪码字序列,并截去该最后一个贪婪码字所对应的原始贪婪短语序列的最后l个字符,形成非贪婪短语序列,并重新进行压缩编码,形成非贪婪码字,生成最终压缩数据流。
优选的,将数据块嵌入到压缩数据流中,设置计数器并初始化,读取字典中新生成的贪婪码字所对应的贪婪短语序列,并将该贪婪短语序列与2L进行比较,如果该贪婪短语序列长度大于2L,则计数器增加1,当计数器达到k值时,将新生成的贪婪码字所对应的原始贪婪短语序列中短语减去长度为l的字符串并重新进行编码匹配,生成非贪婪码字。
一种基于LZW的无损数据解压方法,包含如下内容:获取包含所有字符符号的字典,读取压缩数据流中码字,搜索字典查找相应短语,判断该短语是否为非贪婪短语,通过计算码字对应字符串长度,获取参数l和k,将嵌入到压缩数据流的数据块进行恢复,根据LZW算法对原始短语序列进行重构。
上述的解压方法中,短语是否为非贪婪短语时,对缓冲区保存解压出来的相邻两个字符串重新连接进行压缩编码,判断其编码结果是否与原码字相同,若不同,则判定其是非贪婪短语。
上述的解压方法中,根据LZW算法对原始短语序列进行重构,输出码字识别出的字符串,并将新短语添加到字典中,该新短语由当前码字的第一个符号添加到前一个码字上来构造。
一种基于误码修复的LZW编码器,包含:压缩模块、分割模块、嵌入模块和输出模块,其中,
压缩模块,用于对待压缩字符串进行编码压缩,获取压缩数据流,并将压缩数据流传输至分割模块;
分割模块,用于将压缩数据流进行分割成块;
嵌入模块,用于将分割成块的数据流按照从右至左的块顺序嵌入RS校验码,对嵌入后的数据块再次压缩,获取最终压缩数据流;
输出模块,用于将最终压缩数据流进行输出。
上述的LZW编码器中,嵌入模块包含计算单元、编码单元和缓存单元,其中,
计算单元,用于计算块Ci的RS校验码RSi,其中,i表示按照从右至左顺序表示当前块,RS校验码表示为RSi(a,b),a表示码长即数据块的大小,b表示信息长即有效载荷的大小;
编码单元,用于在块Ci-1中嵌入校验码RSi,并Ci-1数据块进行再次编码压缩,并将再次编码压缩结果传输至缓存单元;
缓存单元,用于存储数据块从右至左的块顺序再次编码压缩结果,获取最终压缩数据流。
一种基于误码修复的LZW解码器,对通过上述的基于LZW的无损数据压缩方法得到的压缩数据流进行解压,压缩数据流被分割成块,用于将被分割的压缩数据流进行解码的该LZW解码器包含:恢复模块和输出模块,其中,
恢复模块,用于将分割成块的压缩数据流按照从左至右的块顺序恢复出对应数据块的RS校验码,其中,第一个数据块不受校验码保护;
输出模块,用于对已恢复RS校验码的数据块进行解码重构并输出。
本发明的有益效果:
本发明针对无损数据压缩***非常容易出现传输误码,这限制了其在有噪无线信道和文件***等可能被损坏领域的适用性,针对在GIF、PDF和TIFF等文件格式中广泛使用的无损数据压缩LZW算法,在LZW压缩数据流中,通过选取部分编码码字并动态调整其对应的被压缩字符串的长度,利用动态调整的码字短语模式嵌入额外消息比特;根据实验结果,通过采用本发明提出的嵌入校验码的压缩方法和编码器得到的压缩数据,在很多情况下比附加校验码的标准LZW算法压缩的文件还要短,不影响LZW算法的整体压缩性能;通过对LZW解码器的广泛测试表明,由于没有改变编码规则和数据格式,本发明提供的压缩方法和编译器与标准LZW算法完全兼容,在具有误码修复功能的同时,还可以使用标准LZW算法进行译码,进一步验证本发明压缩方法、编码器及解压方法、解码器的可行性和有效性。
附图说明:
图1为实施例中无损数据压缩方法流程图;
图2为实施例中C-LZW编码匹配循环示意图;
图3为实施例中编码器示意图;
图4为实施例中解码器示意图;
图5为实施例中编码器和解码器操作流程示意图。
具体实施方式:
为使本发明的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本发明作进一步详细的说明。
针对无损数据压缩***非常容易出现传输误码,这限制了其在有噪无线信道和文件***等可能被损坏领域的适用性,为此,本发明实施例,针对在GIF、PDF和TIFF等文件格式,提供一种基于LZW的无损数据压缩方法,包含如下步骤:
S01)读取待压缩字符串,将待压缩字符串分解为原始短语序列,将原始短语序列与字典中的数据项进行编码匹配,依据匹配结果输出相应字符,得到压缩数据流;
S02)选取两个非负整数作为嵌入参数K和L,根据K和L取值将预设消息划分为连续的多组数据块,每组数据块中包含两个子块,每个子块用参数k和l表示,k∈[0,2K-1],l∈[0,2L-1];依据k和l缩短原始短语序列中部分短语,并压缩编码,形成非贪婪码字,将数据块嵌入到压缩数据流中,生成最终压缩数据流,其中,k为指定在两个非贪婪码字序列间隔内嵌入的消息,l为指定在非贪婪码字序列中嵌入的消息。
将原始短语序列与字典中的数据项进行编码匹配,串行检查原始短语序列,分解出已经识别的最长短语,确定字典中最长前缀作为已知前缀,将已知前缀加上读取的原始短语序列中的当前字符作为扩展字符串,判断扩展字符串是否已记载在字典中,若已记载,则将扩展字符串作为已知前缀,继续读取原始短语序列中的下一个字符,直至读取完原始短语序列所有字符;若没有记载,则输出已知前缀对应的编码到压缩数据流中,生成贪婪码字,将扩展字符串添加到字典中,并该当前字符作为已知前缀,继续读取原始短语序列中的下一个字符,直至读取完原始短语序列中所有字符。
在有限符号集A中,文本T的长度为|T|=n,T'表示对应的LZW编码数据流,T[i]表示T的第i个符号。用T[i,j]来表示T[i]T[i+1]...T[j](1≤i≤j≤n)的缩写形式,约定T[i,i]=T[i]。给定两个字符串y和w,y+w表示通过连接y和w得到的字符串。将字符串T按照从左到右的顺序分解成短语序列,其中每个短语是之前搜索到的最长匹配字符串再加上一个额外的符号。字典首先被初始化为包含字符集中的所有单个符号,每个新短语都被添加到字典中。把最长匹配短语的索引作为一个新的码字加入到输出序列T'中,同时把额外的符号即当前短语的最后一个符号作为下一个短语的第一个符号。
LZW编码使用一种很实用的分析(parsing)算法,称为贪婪分析算法(greedyparsing algorithm)。在贪婪分析算法中,每一次分析都要串行地检查来自字符流Charstream的字符串,从中分解出已经识别的最长的字符串,也就是已经在词典中出现的最长的前缀Prefix。用已知的前缀Prefix加上下一个输入字符C也就是当前字符(Currentcharacter)作为该前缀的扩展字符,形成新的扩展字符串——缀-符串String。这个新的缀-符串String是否要加到词典中,还要看词典中是否存有和它相同的缀-符串String。如果有,那么这个缀-符串String就变成前缀Prefix,继续输入新的字符,否则就把这个缀-符串String写到词典中生成一个新的前缀Prefix,并给一个代码,具体执行步骤如下:
步骤1:开始时的词典包含所有可能的根(Root),而当前前缀P是空的;
步骤2:当前字符(C):=字符流中的下一个字符;
步骤3:判断缀-符串P+C是否在词典中
(1)如果“是”:P:=P+C,即用C扩展P;
(2)如果“否”
①把代表当前前缀P的码字输出到码字流;
②把缀-符串P+C添加到词典;
③令P:=C,即现在的P仅包含一个字符C;
步骤4:判断码字流中是否还***字要译
(1)如果“是”,就返回到步骤2;
(2)如果“否”
①把代表当前前缀P的码字输出到码字流;
②结束。
由于编码固有的贪婪性,在编码过程中,总是只有一种生成码字的方法,因此字典中的每一个短语都是唯一的。这种贪婪意味着缺乏冗余,反过来会造成无法直接将额外的比特嵌入到压缩数据流中。本发明实施例中压缩数据流中从k个贪婪码字序列中取出最后一个贪婪码字序列,并截去该最后一个贪婪码字所对应的原始贪婪短语序列的最后l个字符,形成非贪婪短语序列,并重新进行压缩编码,形成非贪婪码字,生成最终压缩数据流。通过使用非贪婪算法让一些短语变短一些,可以引入足够多的冗余来对额外的比特进行编码。通过选择使用非贪婪算法来缩短部分短语,有了必要的额外空间来存储用于检测和校正错误的信息位。
在进一步研究之前,首先要确定在用改进的编码器中生成的压缩文件,是否仍然可以被标准LZW算法(称为Standard-LZW,简记为S-LZW,以区别于本发明实施例提出的改进方法Carrier-LZW,简记为C-LZW)解压缩。解码器通过索引找到其对应的短语,并串联两个字符串来产生下一个短语。因此,本发明实施例提出的C-LZW方案能够兼容标准LZW解码算法。实验也验证了C-LZW对各种软件的兼容性。例如,对于GIF图像,测试了MS Paint,MSInternet Explorer和Mozilla Firefox。另外还测试了Unix压缩、PDF和TIFF解码器以及Winzip,所有软件都能够解压C-LZW算法生成的数据流。
用M表示将要嵌入到压缩数据T'中的额外数据,称之为预设消息。因为C-LZW方法而变短的LZW短语被称为非贪婪短语。C-LZW方法的性能由两个非负整数参数K和L决定。
首先从逻辑上把要嵌入的消息M划分为连续的(K+L)位为一组的数据块。每个块被进一步分成两个长为K和L的子块。子块的长度分别用k和l表示,其中,k∈[0,2K-1],l∈[0,2L-1]。根据LZW编码方案,在编码压缩T时每次把消息M的一组(K+L)位的数据块嵌入到压缩数据T'中,设置计数器并初始化,读取字典中新生成的贪婪码字所对应的贪婪短语序列,并将该贪婪短语序列与2L进行比较,如果该贪婪短语序列长度大于2L,则计数器增加1,当计数器达到k值时,将新生成的贪婪码字所对应的原始贪婪短语序列中短语减去长度为l的字符串并重新进行编码匹配,生成非贪婪码字,参见图2所示,从而获取最终的压缩数据流。
将额外的信息嵌入LZW数据流显然不是没有代价的。由于嵌入了额外的位,C-LZW编码数据流会稍微长一点。从直观上看,随着K的减少和L的增加压缩性能会降低,但同时嵌入在压缩文本中的比特数增加。在误码修复的应用中,确定最佳的平衡点是至关重要的。第一步是计算所需的校验码的总数,一旦完成,就需要通过函数(参数为K和L)估计可以嵌入到T'中的比特数量,其目的是用来为校正误码的校验码创建足够多的空间。假设在信息的嵌入过程中,短语的长度总是大于2L,这个条件在文件的开头是不可能的。如果文本足够长并且L很小(实验中L=0或L=1),假设将得到满足。为了简单起见,假设要嵌入的消息M是由具有相同概率的独立同分布的0和1信源生成的。因此,平均而言,每(2K+1)/2个短语中会有一个非贪婪短语。非贪婪短语的平均长度将减少(2L+1)/2个符号。为了简化说明,设且把T中用S-LZW算法编码的短语部分称为T1,用C-LZW算法编码的短语部分称为T2。那么,压缩编码后把码字符号分成两部分,这两部分分别对应原始数据的T1和T2,大小分别是n1和n2,则有n=n1+n2。字典里的短语条目集合由贪婪短语组成,这些短语由T1决定。所期望的短语的数目为p1=n1h1/logn1,其中h1是T1的熵。因此,贪婪短语的平均长度是l1=logn1/h1。在压缩数据中嵌入的消息块的数量是因此有非贪婪短语的平均长度是因此由上述公式,可以根据给定的n、h1、K和L的值估计能够嵌入的消息的大小|M|。熵h1可以根据定义直接从文本中计算出来,也可以通过实验推断出来。在估计阶段,首先计算由S-LZW算法压缩文本时产生的短语数量P,然后根据渐近方程P≈nh/log2n,可以得到熵的表达式h=Plog2n/n。用这种方式获得h的优点是能考虑到可能隐藏在渐近方程中的常数因子。
定义函数且n1满足f(n1)=n。由于函数是由前两项主导的,所以在合理选择K、L且n1足够大的情况下,f随n1单调递增。确定n1后,就能够根据上面的公式计算出|M|。并通过实验可以证明,|M|的估计是比较准确的;当L=0时这个估计值更精确,因为此情况下所有的短语都比2L长。
基于上述的编码方法,本发明实施例提供一种基于LZW的无损数据解压方法,包含如下内容:获取包含所有字符符号的字典,读取压缩数据流中码字,搜索字典查找相应短语,判断该短语是否为非贪婪短语,若是,通过计算码字对应字符串长度,获取参数l和k,将嵌入到压缩数据流的数据块进行恢复,根据LZW算法对原始短语序列进行重构。
为了解码压缩数据T',需要首先将字符集中的所有符号填入字典,然后从压缩数据T’中逐个读取码字。每当解码器读取一个新的码字时,通过搜索字典查找相应的短语。根据码字识别出的字符串被添加到输出结果中,同时把一个新短语添加到字典中,该短语由将当前码字的第一个符号附加到前一个码字来构造。相对于编码,解码过程相对简单,随着码字的读入,短语被重构。对于每个短语,解码器判断该短语是贪婪的还是非贪婪的。短语是否为非贪婪短语时,对缓冲区保存解压出来的相邻两个字符串重新连接进行压缩编码,判断其编码结果是否与原码字相同,若不同,则判定其是非贪婪短语。如果这个短语是非贪婪的,通过计算前后编码对应字符串长度的差值获取参数l和k,根据遵循的嵌入规则将一个(K+L)位的消息块恢复出来,同时根据LZW算法对原始文本进行重构,输出码字识别出的字符串,并将新短语添加到字典中,该新短语由当前码字的第一个符号添加到前一个码字上来构造。为了确定一个短语是否贪婪,解码时可考虑几个相连的短语,可以通过在前面的缓冲区中保存最后几个短语来实现。解压过程中使用的策略并没有在字典中利用多重信息来嵌入额外的信息。压缩时当C-LZW算法在字典中寻找最长字符串的前缀时,由于已经缩短了一些短语所对应字符串的长度,字典里可能会有多个相同长度的最长短语。如果最长短语的数量为q,可以利用最长短语的多重性在不降低压缩性能的前提下,再嵌入个比特。
基于上述的编码方法,本发明实施例还提供一种基于误码修复的LZW编码器,参见图3所示,包含:压缩模块、分割模块、嵌入模块和输出模块,其中,
压缩模块,用于对待压缩字符串进行编码压缩,获取压缩数据流,并将压缩数据流传输至分割模块;
分割模块,用于将压缩数据流进行分割成块;
嵌入模块,用于将分割成块的数据流按照从右至左的块顺序嵌入RS校验码,对嵌入后的数据块再次压缩,获取最终压缩数据流;
输出模块,用于将最终压缩数据流进行输出。
每个数据块嵌入RS校验码进行再次压缩的过程中,上述编码器的嵌入模块包含计算单元、编码单元和缓存单元,其中,
计算单元,用于计算块Ci的RS校验码RSi,其中,i表示按照从右至左顺序表示当前块,RS校验码表示为RSi(a,b),a表示码长即数据块的大小,b表示信息长即有效载荷的大小;
编码单元,用于在块Ci-1中嵌入校验码RSi,并Ci-1数据块进行再次编码压缩,并将再次编码压缩结果传输至缓存单元;
缓存单元,用于存储数据块从右至左的块顺序再次编码压缩结果,获取最终压缩数据流。
基于上述的编码器,本发明实施例还提供一种基于误码修复的LZW解码器,对通过上述的基于LZW的无损数据压缩方法得到的压缩数据流进行解压,压缩数据流被分割成块,用于将被分割的压缩数据流进行解码的该LZW解码器包含:恢复模块和输出模块,其中,
恢复模块,用于将分割成块的压缩数据流按照从左至右的块顺序恢复出对应数据块的RS校验码,其中,第一个数据块不受校验码保护;
输出模块,用于对已恢复RS校验码的数据块进行解码重构并输出。
采用在C-LZW编码器产生的额外冗余中嵌入RS码来检测和修复数量有限的错误。RS编码是一种基于块的错误校正码,广泛应用于数字通信和存储。RS码标准形式为RS(a,b),a表示码长即数据块的大小,b表示信息长即有效载荷的大小,RS解码器可以在一个数据块中纠正e个错误,其中e=(a-b)/2。操作流程如图5所示,编码器按照从右到左的块顺序,从最后一块开始处理,首先计算块Ci的RS校验码RSi,然后在块Ci-1中按照上述的编码方法实施例中数据块嵌入方式嵌入校验码RSi,嵌入过程要求编码器再次压缩Ci-1数据块;解码器按照从左到右的块顺序,从第一块C1开始处理,首先解压Ci压缩数据块,并按照上述解压方法实施例中数据块恢复方法恢复出块Ci+1的校验码RSi+1,校验码RSi+1可以在压缩数据块Ci+1被解压缩之前检测和纠正错误,为了保证兼容性,第一个压缩数据块不受校验码的保护。
本发明的编码或者解码中,针对LZW压缩数据流,通过选取部分编码码字并动态调整其对应的被压缩字符串的长度,利用动态调整的码字短语模式嵌入额外消息比特,不影响LZW算法的整体压缩性能,因没有对编码规则以及数据格式进行修改,可以实现与标准LZW算法的完全兼容功能,具有较强的实用性。为进一步验证本发明的有效性,下面通过具体实例对本发明中的压缩和解码过程进行详细说明:
给定字符串:abcabcabcabcabcabcabcabcabcabcabcabc
待嵌入数据(二进制):11011011;
取K=3,L=1,则2L=21=2。根据K和L的取值,上述待嵌入数据分为两组:(110,1)和(101,1),对应的十进制数为(6,1)和(5,1),因此第一组k=6,l=1,第二组k=5,l=1。
在标准LZW(S-LZW)算法中,编码结果为“7”、“10”、“9”、“12”、“8”、“14”(标黄部分)共六个贪婪码字(k=6)所对应的原始字符串的长度都是大于2L(本例中为2)的,所以把码字“14”所对应的原始字符串“cabc”去掉后面l个字符(这里l=1)变成“cab”后重新压缩编码得到非贪婪码字“8”。换句话说,通过把k个原始字符串长度大于2L的贪婪码字的最后一个贪婪码字所对应的原始字符串去掉l个字符并重新编码为非贪婪码字,就把第一组的(110,1)嵌入到编码数据中。
对于S-LZW压缩数据1 2 3 4 6 5 7 10 9 12 8 14 11 3进行解压:
对于C-LZW压缩数据1 2 3 4 6 5 7 10 9 12 8 8 15 10进行解压:
对C-LZW压缩数据进行解压时,需要对解压出来的相邻两个字符串重新连接再用S-LZW算法进行编码,如果编码结果与原码字不一致,则原编码是非贪婪编码,通过计算两个编码对应字符串长度的差得到l的值(本例中l=4-3=1)。由于前面共有6个码字(加黑部分)所对应的原始字符串的长度大于2L(本例中为2),因此k=6。综上,提取出的(6,1)转换为二进制数得到(110,1),从而得到嵌入的(K+L)个比特即为:1101。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
结合本文中所公开的实施例描述的各实例的模块及方法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已按照功能一般性地描述了各示例的组成及步骤。这些功能是以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不认为超出本发明的范围。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如:只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (6)
1.一种基于LZW的无损数据压缩方法,其特征在于,包含如下步骤:
读取待压缩字符串,将待压缩字符串分解为原始短语序列,将原始短语序列与字典中的数据项进行编码匹配,依据匹配结果输出相应字符,得到压缩数据流;
选取两个非负整数作为嵌入参数K和L,根据K和L取值将预设消息划分为连续的多组数据块,每组数据块中包含两个子块,每个子块用参数k和l表示,k∈[0,2K-1], l∈[0,2L-1];依据k和l缩短原始短语序列中部分短语,并压缩编码,形成非贪婪码字,将数据块嵌入到压缩数据流中,生成最终压缩数据流,其中,K和L分别表示数据块被分成的两个子块的长度,k为指定在两个非贪婪码字序列间隔内嵌入的消息长度,l为指定在非贪婪码字序列中嵌入的消息长度;
将原始短语序列与字典中的数据项进行编码匹配,串行检查原始短语序列,分解出已经识别的最长短语,确定字典中最长前缀作为已知前缀,将已知前缀加上读取的原始短语序列中的当前字符作为扩展字符串,判断扩展字符串是否已记载在字典中,若已记载,则将扩展字符串作为已知前缀,继续读取原始短语序列中的下一个字符,直至读取完原始短语序列所有字符;若没有记载,则输出已知前缀对应的编码到压缩数据流中,生成贪婪码字,将扩展字符串添加到字典中,并该当前字符作为已知前缀,继续读取原始短语序列中的下一个字符,直至读取完原始短语序列中所有字符;
压缩数据流中从k个贪婪码字序列中取出最后一个贪婪码字序列,并截去该最后一个贪婪码字所对应的原始贪婪短语序列的最后l个字符,形成非贪婪短语序列,并重新进行压缩编码,形成非贪婪码字,生成最终压缩数据流。
2.根据权利要求1所述的基于LZW的无损数据压缩方法,其特征在于,将数据块嵌入到压缩数据流中,设置计数器并初始化,读取字典中新生成的贪婪码字所对应的贪婪短语序列,并将该贪婪短语序列与2L进行比较,如果该贪婪短语序列长度大于2L,则计数器增加1,当计数器达到k值时,将新生成的贪婪码字所对应的原始贪婪短语序列中短语减去长度为l的字符串并重新进行编码匹配,生成非贪婪码字。
3.一种基于LZW的无损数据解压方法,其特征在于,包含如下内容:
获取包含所有字符符号的字典,读取压缩数据流中码字,搜索字典查找相应短语,判断该短语是否为非贪婪短语,若是,通过计算码字对应字符串长度,获取嵌入的数据块参数l和k,将嵌入到压缩数据流的数据块进行恢复,根据LZW算法对原始短语序列进行重构,其中,k为指定在两个非贪婪码字序列间隔内嵌入的消息长度,l为指定在非贪婪码字序列中嵌入的消息长度;
短语是否为非贪婪短语时,对缓冲区保存解压出来的相邻两个字符串重新连接进行压缩编码,判断其编码结果是否与原码字相同,若不同,则判定其是非贪婪短语;
根据LZW算法对原始短语序列进行重构,输出码字识别出的字符串,并将新短语添加到字典中,该新短语构造过程:通过将当前码字的第一个符号添加到前一个码字符号上进行重构。
4.一种基于误码修复的LZW编码器,其特征在于,通过权利要求1所述的基于LZW的无损数据压缩方法实现,该LZW编码器包含:压缩模块、分割模块、嵌入模块和输出模块,其中,
压缩模块,用于对待压缩字符串进行编码压缩,获取压缩数据流,并将压缩数据流传输至分割模块;
分割模块,用于将压缩数据流进行分割成块;
嵌入模块,用于将分割成块的数据流按照从右至左的块顺序嵌入RS校验码,对嵌入后的数据块再次压缩,获取最终压缩数据流;
输出模块,用于将最终压缩数据流进行输出。
5.根据权利要求4所述的基于误码修复的LZW编码器,其特征在于,嵌入模块包含计算单元、编码单元和缓存单元,其中,
计算单元,用于计算块Ci的RS校验码RSi,其中,i为按照从右至左顺序表示当前块标号,RS校验码表示为RSi (a,b),a表示码长,即数据块的大小,b表示信息长,即有效载荷的大小;
编码单元,用于在块Ci-1中嵌入校验码RSi,并Ci-1数据块进行再次编码压缩,并将再次编码压缩结果传输至缓存单元;
缓存单元,用于存储数据块从右至左的块顺序再次编码压缩结果,获取最终压缩数据流。
6.一种基于误码修复的LZW解码器,其特征在于,对通过权利要求1所述的基于LZW的无损数据压缩方法得到的压缩数据流进行解压,压缩数据流被分割成块,用于将被分割的压缩数据流进行解码的该LZW解码器包含:恢复模块和输出模块,其中,
恢复模块,用于将分割成块的压缩数据流按照从左至右的块顺序恢复出对应数据块的RS校验码,其中,第一个数据块不受校验码保护;
输出模块,用于对已恢复RS校验码的数据块进行解码重构并输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810534506.9A CN108768403B (zh) | 2018-05-30 | 2018-05-30 | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810534506.9A CN108768403B (zh) | 2018-05-30 | 2018-05-30 | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108768403A CN108768403A (zh) | 2018-11-06 |
CN108768403B true CN108768403B (zh) | 2021-08-20 |
Family
ID=64003689
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810534506.9A Active CN108768403B (zh) | 2018-05-30 | 2018-05-30 | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108768403B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111628778B (zh) * | 2019-02-28 | 2023-05-23 | 深圳捷誊技术有限公司 | 一种基于动态规划的无损压缩方法和装置 |
US11347941B2 (en) * | 2019-04-30 | 2022-05-31 | Marvell Asia Pte, Ltd. | Methods and apparatus for compressing data streams |
CN110311774B (zh) * | 2019-07-01 | 2022-09-30 | 中国海洋石油集团有限公司 | Ctd观测数据卫星传输的压缩加密方法 |
CN110518917B (zh) * | 2019-07-17 | 2023-01-03 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于Huffman编码的LZW数据压缩方法及*** |
CN114244373B (zh) * | 2022-02-24 | 2022-05-20 | 麒麟软件有限公司 | Lz系列压缩算法编解码速度优化方法 |
CN116032292B (zh) * | 2023-03-27 | 2023-06-09 | 山东智慧译百信息技术有限公司 | 一种基于翻译文件的大数据高效存储方法 |
CN116151740B (zh) * | 2023-04-21 | 2023-08-01 | 北京明苑风华文化传媒有限公司 | 一种库存交易数据过程安全管理***及云平台 |
CN116521093B (zh) * | 2023-07-03 | 2023-09-15 | 漳州科恒信息科技有限公司 | 一种智慧社区人脸数据存储方法及*** |
CN116827351B (zh) * | 2023-08-31 | 2023-11-17 | 浙江中骏石墨烯科技有限公司 | 一种石墨烯发热墙面温度智能监测*** |
CN116938256B (zh) * | 2023-09-18 | 2023-11-28 | 苏州科尔珀恩机械科技有限公司 | 基于大数据的回转炉运行参数智能管理方法 |
CN117112718B (zh) * | 2023-10-16 | 2024-01-26 | 达文恒业科技(深圳)有限公司 | 一种车载电脑***数据快速存储方法 |
CN117216023B (zh) * | 2023-11-07 | 2024-01-26 | 陕西长瑞安驰信息技术集团有限公司 | 一种大规模网络数据存储方法及*** |
CN117375627B (zh) * | 2023-12-08 | 2024-04-05 | 深圳市纷享互联科技有限责任公司 | 适用于字符串的纯文本格式数据的无损压缩方法和*** |
CN117792403B (zh) * | 2024-02-26 | 2024-05-07 | 成都农业科技职业学院 | 基于流式大数据技术的分布式农业数据存储管理方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6597812B1 (en) * | 1999-05-28 | 2003-07-22 | Realtime Data, Llc | System and method for lossless data compression and decompression |
CN1593011A (zh) * | 2001-02-13 | 2005-03-09 | 莫塞德技术股份有限公司 | 适合数据压缩的方法和设置 |
CN1630371A (zh) * | 2003-12-19 | 2005-06-22 | 联想(北京)有限公司 | 一种应用于实时传输的无损图像压缩方法 |
CN103326732A (zh) * | 2013-05-10 | 2013-09-25 | 华为技术有限公司 | 压缩数据的方法、解压数据的方法、编码器和解码器 |
CN105227503A (zh) * | 2015-09-08 | 2016-01-06 | 北京航空航天大学 | 一种基于无线随钻测量***的井下信源信道联合编码方法 |
CN105338035A (zh) * | 2014-08-07 | 2016-02-17 | 苏宁云商集团股份有限公司 | 基于rs纠删码的安全存储方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6400286B1 (en) * | 2001-06-20 | 2002-06-04 | Unisys Corporation | Data compression method and apparatus implemented with limited length character tables |
US6801141B2 (en) * | 2002-07-12 | 2004-10-05 | Slipstream Data, Inc. | Method for lossless data compression using greedy sequential context-dependent grammar transform |
US7460033B2 (en) * | 2006-12-28 | 2008-12-02 | International Business Machines Corporation | Method for creating an in-memory physical dictionary for data compression |
-
2018
- 2018-05-30 CN CN201810534506.9A patent/CN108768403B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6597812B1 (en) * | 1999-05-28 | 2003-07-22 | Realtime Data, Llc | System and method for lossless data compression and decompression |
CN1593011A (zh) * | 2001-02-13 | 2005-03-09 | 莫塞德技术股份有限公司 | 适合数据压缩的方法和设置 |
CN101800556A (zh) * | 2001-02-13 | 2010-08-11 | 莫塞德技术股份有限公司 | 适合数据压缩的方法和设置 |
CN1630371A (zh) * | 2003-12-19 | 2005-06-22 | 联想(北京)有限公司 | 一种应用于实时传输的无损图像压缩方法 |
CN103326732A (zh) * | 2013-05-10 | 2013-09-25 | 华为技术有限公司 | 压缩数据的方法、解压数据的方法、编码器和解码器 |
CN105338035A (zh) * | 2014-08-07 | 2016-02-17 | 苏宁云商集团股份有限公司 | 基于rs纠删码的安全存储方法和装置 |
CN105227503A (zh) * | 2015-09-08 | 2016-01-06 | 北京航空航天大学 | 一种基于无线随钻测量***的井下信源信道联合编码方法 |
Non-Patent Citations (1)
Title |
---|
Multiple-pattern matching in LZW compressed files using Aho-Corasick algorithm;Tao Tao 等;《 Data Compression Conference》;20050411;第1页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108768403A (zh) | 2018-11-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108768403B (zh) | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 | |
CN108880556B (zh) | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 | |
CN114244373B (zh) | Lz系列压缩算法编解码速度优化方法 | |
JP3541930B2 (ja) | 符号化装置及び復号化装置 | |
KR100894002B1 (ko) | 선택적 압축과 복원 및 압축 데이터에 대한 데이터 포맷을위한 장치 및 방법 | |
CA2299902C (en) | Method and apparatus for data compression using fingerprinting | |
US10938410B2 (en) | Hardware friendly data compression | |
KR101049699B1 (ko) | 데이터의 압축방법 | |
US9094039B2 (en) | Efficient deflate decompression | |
US8872677B2 (en) | Method and apparatus for compressing data-carrying signals | |
JP2003179501A (ja) | データ圧縮方法 | |
Lonardi et al. | Error resilient LZ'77 data compression: Algorithms, analysis, and experiments | |
Lonardi et al. | Joint source-channel LZ'77 coding | |
JP2536422B2 (ja) | デ―タ圧縮装置及びデ―タ復元装置 | |
JP4093193B2 (ja) | データ圧縮方法及びプログラムならびにデータ復元方法及び装置 | |
JP4093200B2 (ja) | データ圧縮方法及びプログラムならびにデータ復元方法及び装置 | |
Wu et al. | Error-resilient LZW data compression | |
JP3241787B2 (ja) | データ圧縮方式 | |
KR100607932B1 (ko) | 에러 정정 코드를 이용한 부호화 방법 및 이에 적합한 복호화 방법 | |
Roder et al. | Fast list Viterbi decoding and application for source-channel coding of images | |
JPH0629861A (ja) | データ圧縮方法 | |
JP3051501B2 (ja) | データ圧縮方法 | |
JP2006504316A (ja) | 可変長誤り符号を生成する方法及び装置 | |
CN117955500A (zh) | 一种基于硬件架构的高效lzma编解码方法 | |
JPH06149537A (ja) | データ圧縮方法及び復元方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |