一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

结合rANS和LZ4编码的数据无损压缩、解码方法

2022-05-21 04:41:43 来源:中国专利 TAG:

结合rans和lz4编码的数据无损压缩、解码方法
技术领域
1.本发明涉及数据无损压技术领域,特别是一种结合rans和lz4编码的数据无损压缩、解码方法、系统和介质。


背景技术:

2.随着数字通信的发展,数据呈现出了爆炸式增长,存储和传输数据需要相当大的成本。现代高速涌现的大量多样化大数据给数据的存储和传输都带来了巨大的困难。减小数据的大小,可以在相同的存储空间中存储更多的数据,并且在有限的带宽里更快更多地传输数据。因此,高效的数据压缩技术至关重要。
3.数据压缩包含有损压缩和无损压缩两种方式。有损压缩不能准确地恢复成原始数据,但具有较高的压缩率,广泛应用于存储图像、视频和音频文件,因为这些数据的部分损失是可以接受的,人类的视觉系统无法感知到这类失真。而无损压缩可以从压缩的数据中准确地恢复原始数据,不涉及数据的丢失,保持了数据的完整性。无损压缩通常应用于压缩文本内容、医学图像、军事图像、卫星遥感图像等对精确度要求高、不允许产生误差的数据上。以医学图像为例,现代医学诊断在很大程度上依赖于数字图像,为了能够准确分析人类健康问题,这些医学图像应该以无损格式保存,不丢失任何关键部分。对于远程医疗诊断的情况,高效的无损压缩技术可以节省图像的传输时间,提高治疗效率。因此,提高无损压缩技术的压缩性能有着重要意义。
4.目前常见的无损压缩方法一般基于熵编码或字典编码。熵编码就是利用符号序列的统计概率进行压缩,使压缩结果尽可能接近其熵值。常见在图像压缩及视频压缩方法中。目前主流的熵编码技术包括广泛应用的霍夫曼编码和算数编码,以及近几年提出的非对称数字系统(asymmetric numeral system,ans)。基于字典的编码方法在原始数据包含更多重复模式的情况下很有用。当重复模式出现在输入序列中时,将使用字典索引对其进行编码。lempel-ziv方法(lz)是一种基于字典的编码技术,常用于无损文件压缩。lz方法有大量的变体。除lz77和lz78之外,还有许多其他变体,例如,lzw、lzma、lzss、lzfse、lz4、snappy和zstandard等。还有其他无损压缩方法,包括游程编码和bwt变换等。
5.但大多数无损压缩方法存在压缩速度和压缩率不可兼得的情况。要获得高的压缩率,一般压缩速度就会比较慢,例如霍夫曼编码和算数编码等。若是想要较快的压缩速度,就需要在压缩率上作出妥协。


技术实现要素:

6.针对现有技术中的缺陷,本发明的目的是提供一种结合rans和lz4编码的数据无损压缩、解码方法、系统和介质。
7.根据本发明的一个方面,提供一种结合rans和lz4编码的数据无损压缩方法,包括:
8.利用rans计算输入原始数据的压缩数据状态值;
9.将所述压缩数据状态值转化为字符型状态值;
10.利用lz4块结构对所述字符集型状态值进行匹配压缩,获得压缩数据。
11.优选地,所述利用rans计算输入原始数据的压缩数据状态值,包括:
12.初始化rans编码器;
13.限制所述压缩数据状态值在归一化区间i内,
14.i:={l,l 1,

,bl-1}
15.其中l是一个任意正整数,b是一个大于等于2的整数;
16.计算所述输入原始数据的符号出现概率fs,并且限制所述原始数据符号出现概率的总和为1;
17.假设原始数据由不同符号s构成。若已对前i个符号{s1s2s3…
si}进行了rans编码,继续对输入符号s
i 1
进行rans编码,设当前状态值为xi,由状态转移公式c(xi,s
i 1
)循环迭代计算输出下一状态值x
i 1

[0018][0019]
其中n为设定的量化系数,cs=f0 f1

f
s-1
,mod(xi,fs)表示xi模除fs,得到两者相除后的余数。
[0020]
优选地,rans编码器以逆序的方式存放编码好的符号。
[0021]
优选地,所述将压缩数据状态值转化为字符型状态值,包括:
[0022]
rans编码结束后,得到最终的压缩数据状态值;
[0023]
根据所述最终的压缩数据状态值的大小,为所述lz4块结构提供相应的最大内存空间;
[0024]
将所述最终的压缩数据状态值转换为字符类型。
[0025]
优选地,所述lz4块结构由序列组成,每个序列依序包括:
[0026]
token块,每一个序列以一个字节的token开始;每个token的高4位记录没有被匹配到未被压缩的字面序列长度,低4位记录匹配序列长度;
[0027]
字面序列长度块,若所述序列长度超过token的高4位,则在token后继续扩展任意数量的字节;
[0028]
字面序列块,所述字面序列块存放未压缩的字面;
[0029]
偏移量块,所述偏移量块记录当前字符到匹配项的距离;
[0030]
匹配序列长度块,若所述序列长度超过token的低4位,则在偏移量块后继续扩展任意数量的字节;
[0031]
使用所述偏移量和所述匹配序列长度,解码器从已解码的缓冲区中复制重复的数据。
[0032]
优选地,所述利用lz4块结构对字符集型状态值进行匹配压缩,获得压缩数据,包括:
[0033]
读取所述最终rans编码得到的字符型数据状态值;
[0034]
每个字节进行遍历,读取4个字节计算出哈希值,并从哈希表中寻找匹配;
[0035]
如果匹配,进入下个环节;如果不匹配,则将所述哈希值和当前遍历的位置存入所述哈希表中,并继续遍历字节;
[0036]
在哈希表中寻找到匹配时,在输出缓冲中构造一个字节的token,将字面长度存入
token高4位,若字面长度超过token高4位,则在token块后的字面序列长度块继续扩展超出部分的字节,直到存下所有字面序列长度为止;
[0037]
将当前位置与匹配位置作差,得到偏移量,将其存放入字面序列长度块之后的2个字节里;
[0038]
从匹配位置继续往后对比字节,以得到最长的匹配序列,将匹配序列长度存入token的低4位,若有超出4位长度部分,则将其存入偏移量块后的字节,直到存下所有匹配序列长度为止;
[0039]
重复对字节进行遍历,直到所有的数据都被压缩,得到压缩数据。
[0040]
根据本发明的第二个方面,提供一种结合rans和lz4编码的数据无损解码方法,所述解码过程与所述权利要求1-6任一项所述的结合rans和lz4编码的数据无损压缩方法中的压缩过程相反,其以逆序执行所述压缩过程。
[0041]
优选地,所述解码过程,包括:
[0042]
读取待解压的压缩数据;
[0043]
从所述lz4压缩数据块中读取第一个序列作为当前操作位置;
[0044]
视所述当前操作位置为token,读取高4位数据作为字面序列长度;如果长度是15,则表示字面序列长度超过token的高4位,则继续读取token后面的字节,加到字面序列长度中;
[0045]
根据所述字面序列长度读取字面序列,输出到缓存中;
[0046]
读取2个字节的偏移量,从输出缓存的当前位置往前追溯偏移量个字节得到匹配位置;
[0047]
读取匹配长度,根据匹配位置得到匹配序列,输出到缓存中;
[0048]
持续解压,直到所有的lz4块解压完毕,缓存中存有字符型rans状态值;
[0049]
将缓存中的字符型rans状态值转换为整数型,对其进行rans解码,得到原始数据。
[0050]
根据本发明的第三个方面,提供一种结合rans和lz4编码的数据无损压缩、解码系统,包括:
[0051]
压缩系统:对输入原始数据采用所述的结合rans和lz4编码的数据无损压缩方法进行压缩,得到压缩数据;
[0052]
解压系统:对所述压缩数据采用所述的结合rans和lz4编码的数据无损压解码方法进行解码,得到所述输入原始数据。
[0053]
根据本发明的第四个方面,提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以下任一种方法:
[0054]-所述的结合rans和lz4编码的数据无损压缩方法,或,
[0055]-所述的结合rans和lz4编码的数据无损压解码方法。
[0056]
与现有技术相比,本发明具有如下的有益效果:
[0057]
本发明提供的实施例,结合了rans和lz4对数据无损压缩的特性。字典编码方法lz4改变过去传统字典编码压缩速度慢的弊端,专注于压缩速度的提升,其压缩速度目前是所有无损压缩编码中最快的。因此将数据利用lz4的块结构的压缩具有极快的压缩速度。
[0058]
本发明提供的实施例中的rans是新一代熵编码非对称数字系统ans的一个变体,
具有接近霍夫曼编码的压缩速度和算数编码的压缩效率,可以压缩处理较大规模的数据。利用rans计算数据得到压缩数据状态字符集后,再用lz4块结构对其进行匹配压缩,可在较快速度下得到较高的压缩率。
[0059]
本发明提供的实施例,利用了rans和lz4的算法复杂度低的特点,压缩和解压方便。
附图说明
[0060]
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0061]
图1为本发明的一实施例的压缩过程的流程框图;
[0062]
图2为本发明的一优选实施例的lz4的块结构示意图;
[0063]
图3为本发明的一优选实施例的lz4压缩算法过程流程图;
[0064]
图4为本发明的优选实施例在silesia corpus数据集上与各无损压缩方法压缩比比较柱状图。
具体实施方式
[0065]
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明的保护范围。
[0066]
本发明提供一个优选实施例,一种结合rans和lz4编码的数据无损压缩方法,包括:
[0067]
s1、利用rans压缩器计算输入原始数据的压缩数据状态值;
[0068]
s2、将所述压缩数据状态值转化为字符型状态值;
[0069]
s3、利用lz4块结构对所述字符集型状态值进行匹配压缩,获得压缩数据。
[0070]
lz4编码改变过去传统字典编码压缩速度慢的弊端,专注于压缩速度的提升,其压缩速度目前是所有无损压缩编码中最快的。rans是新一代熵编码非对称数字系统ans的一个变体,具有接近霍夫曼编码的压缩速度和算数编码的压缩效率,可以压缩处理较大规模的数据。本实施例结合了rans压缩效率高和lz4压缩速度快的优点,实现在较快压缩速度下得到较高压缩率,提高无损数据压缩算法的性能。
[0071]
为了提高压缩率,本发明提供一个优选实施例,一种结合rans和lz4编码的数据无损压缩方法,参照图1,包括:
[0072]
s101,读取原始数据;
[0073]
s102,初始化rans编码器;为了防止rans编码结果状态值超出范围,将状态值限制在归一化区间i内:
[0074]
i:={l,l 1,

,bl-1}
[0075]
其中l是一个任意正整数,b是一个大于等于2的整数。本发明中,l和b的值均为2
16
,因此状态值x的取值范围为{2
16
,

,2
32-1}。
[0076]
s103,计算输入数据的符号出现概率fs,并且限制输入数据符号概率的总和为1;
[0077]
s104,rans编码得到整型状态值,包括:
[0078]
s1041,假设原始数据由不同符号s构成。若已对前i个符号{s1s2s3…
si}进行了rans编码,继续对输入符号s
i 1
进行rans编码,假设当前状态值为xi,由状态转移公式c(xi,s
i 1
)循环迭代计算输出下一状态值x
i 1

[0079][0080]
其中n为设定的量化系数,本实施例中n值为14。cs=f0 f1

f
s-1
,本质上是给定符号序列的累计概率;mod(xi,fs)表示xi模除fs;本实施例中,x0,f0分别设定为2
16
,0。
[0081]
s1042,由于rans编码器类似于堆栈后进先出,编码后的最后一个值将是解码器返回的第一个值。因此需以逆序的方式存放编码好的符号,即编码器反向处理存放数据(从末端到前端),而解码器前向处理读取数据(从前端到末端)。
[0082]
s1043,对输入数据rans编码结束得到最终的状态值后,计算状态值大小,为lz4块结构开辟相应的最大内存空间。
[0083]
s105,将rans最终的状态整型值转换为字符类型;
[0084]
s106,对字符类型进行lz4块结构压缩编码;
[0085]
s107,得到压缩数据。
[0086]
为了提高压缩速度,本发明提供一个优选实施例。如图2所示,为本实施例中的lz4的压缩块的结构示意图。每一个序列以一个字节的标记(token)开始,高4位记录没有被匹配到未被压缩的字面序列长度(literal length),低4位记录匹配序列长度(match length)。若长度超出4位,则可在token后继续扩展任意数量的字节。在记录字面长度之后,存放未压缩的字面(literals)。偏移量(offset)记录当前字符到匹配项的距离。使用偏移量和匹配序列长度,解码器可以从已解码的缓冲区中复制重复的数据。
[0087]
进一步的,基于上述优选实施例中的lz4的压缩块执行压缩,如图3所示,包括:
[0088]
s201,读取上一步骤中转换成字符类型的rans最终状态值;
[0089]
s202,对每个字节进行遍历,读取4个字节计算出哈希值;
[0090]
s203,从哈希表中寻找匹配;如果匹配,则进行下一步s204;如果不匹配,则将哈希值和当前遍历的位置存入哈希表中,继续遍历字节;
[0091]
s204,若在哈希表中找到匹配,则构造lz4块结构,包括:
[0092]
s2041,在输出缓存中构造一个字节的token,将字面长度存入token高4位,若字面长度超过token高4位,则在token块后的字面序列长度块继续扩展超出部分的字节,直到存下所有字面序列长度为止;
[0093]
s2042,将当前位置与匹配位置作差,得到偏移量,将其存放入字面序列之后的2个字节里;
[0094]
s2043,从匹配位置继续往后对比字节,以得到最长的匹配序列,将匹配序列长度存入token的低4位,若有超出4位长度部分,则将其存入偏移量块后的字节,直到存下所有匹配序列长度为止;
[0095]
s205,重复s202,直到所有的数据都被压缩,得到最终压缩后的数据。
[0096]
结合上述实施例的rans和lz4的数据无损压缩方法对silesia corpus数据集进行压缩,将压缩结果与其他不同无损压缩算法(包括算数编码、霍夫曼编码、rans和lz4)进行比较,压缩结果指标采用压缩比来表示:
[0097][0098]
压缩比越小,表明压缩率越高,压缩效果越好。实验结果如图4所示,可以看出,本发明提出的rans lz4算法的压缩比在压缩率上相较算数编码、霍夫曼编码、rans和lz4分别平均提升了73.65%、75.03%、74.92%和68.65%,压缩比最小,压缩效果最好。
[0099]
本实施例还计算了上述结合rans和lz4的数据无损压缩算法和其他无损压缩算法压缩silesia corpus数据集所用的时间。实验结果如表1所示,可以看出,虽压缩时间上慢于速度最快的lz4方法,但相较算数编码、霍夫曼编码和rans分别平均降低了83.98%、81.26%和4.86%。
[0100]
表1 silesia corpus数据集上各无损压缩算法压缩时间比较(单位:秒)
[0101][0102]
综上所述可见,结合了新一代熵编码非对称数字系统rans压缩效率高和lz4压缩速度快的优点,实现了在较快压缩速度下得到较高压缩率,提高了无损数据压缩算法的性能。
[0103]
基于相同的构思,本发明提供一个结合rans和lz4编码的数据无损解码方法,其解码过程与压缩过程相反,以逆序执行各个压缩步骤。
[0104]
本发明提供一个对压缩数据进行解码的优选实施例,包括:
[0105]
s301,读取待解压的压缩数据;
[0106]
s302,从lz4压缩数据块中读取第一个序列作为当前操作位置;
[0107]
s303,视当前操作位置为token,取高4位数据作为字面序列长度。如果长度是15,则表示字面序列长度超过token的高4位,继续读取token后面的字节,加到字面序列长度中;
[0108]
s304,根据字面序列长度读取字面序列,输出到缓存中;
[0109]
s305,读取2个字节的偏移量,从输出缓存的当前位置往前追溯偏移量个字节可得到匹配位置;
[0110]
s306,再以类似步骤读取匹配长度,根据匹配位置得到匹配序列,输出到缓存中;
[0111]
s307,持续解压,直到所有的lz4块解压完毕,此时缓存中存有字符型rans状态值;
[0112]
s308,将缓存中的字符型rans状态值转换为整数型,对其进行rans解码,得到原始
数据。
[0113]
基于相同的构思,本发明还提供一种结合rans和lz4编码的数据无损压缩系统,包括:
[0114]
压缩系统:对输入原始数据采用上述的结合rans和lz4编码的数据无损压缩方法进行压缩,得到压缩数据;
[0115]
解压系统:对所述压缩数据采用上述的结合rans和lz4编码的数据无损压解码方法进行解码,得到所述输入原始数据。
[0116]
技术相同的构思,本发明还提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以下任一种方法:
[0117]-上述的结合rans和lz4编码的数据无损压缩方法,或,
[0118]-上述的结合rans和lz4编码的数据无损压解码方法。
[0119]
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。上述各优选特征在互不冲突的情况下,可以任意组合使用。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献