法律状态公告日
法律状态信息
法律状态
2019-07-30
授权
授权
2017-05-03
实质审查的生效 IPC(主分类):H03M7/40 申请日:20161115
实质审查的生效
2017-04-05
公开
公开
技术领域
本发明属于数据压缩领域,涉及一种无损数据压缩编码方法。
背景技术
算术编码是一种非常经典而知名的无损数据压缩编码方法。数据压缩技术在信息技术中具有极其重要的地位,数据压缩方法又分为有损压缩和无损压缩。有损压缩方法一般基于人类感知器官(听觉系统、视觉系统)的特性,删除大量感知冗余数据,但又不影响人们的收听和收视的感知质量。例如,音频MP3技术利用了人类听觉系统的时域或频域屏蔽特性和听阈特性;而视频MPEG编码技术充分利用了人眼帧采样频率的特性对图像帧间运动估计作出有效补偿,从而删除大量的帧间冗余信息达到数据压缩的效果。无损压缩技术通常用于计算机文档、医学图像的数据压缩中,在那里数据是需要严格无损耗恢复的。此外,无损压缩技术还可以作为有损压缩技术系统的后端,对输入的有损压缩数据流作进一步的无损压缩,如图1所示。
在无损压缩技术中Huffman编码是广泛使用的熵编码算法,相对于算术编码方法来说,其最大的问题是基于分组扩展模式来对字符串流进行编码处理,随着分组宽度的增加,其编码冗余度降低,因而逼近熵最优。但是由于分组宽度增加带来了字符表设计的复杂度的增加,且在实际应用中分组宽度固定的可扩展性、灵活度较差,实际上而逊于算术编码。算术编码是自然的流式编码,其没有分组扩展的概念,任意长短的输入字符串流皆可映射到一个[0,1]单位区间的有理数(或互不相交的区间段),适用性、灵活性都较Huffman编码高,且基于对字符源的概率分布的准确估计,算术编码也是熵最优编码,字符源的概率分布估计越精确,算术编码的冗余度越低、从而越接近熵最优。正因为算术编码的优势,导致它在技术上被研究得最充分,被授权的相关的专利也最多,虽然很多专利在上个世纪90年代失效了,但是近年来又有很多算术编码相关的专利被申请、并得到授权。反过来,由于算术编码被广泛地授权专利,所以反而给Huffman编码留出了很多工业应用的空间。
经典的算术编码的思想是将输入字符串流映射到[0,1]区间的一个有理数(十进制形式),再将这个数使用二进制表示成比特流,该比特流就是编码结果;解码过程将比特流转成[0,1]区间的十进制小数,通过符号源的概率分布,从首至尾逐个解出字符。具体编码过程如下,设符号源为{1,2,3,......,n},它们的概率分布为{p1,p2,...,pn},输入字符串为J1J2J3......Jn-1JK长度为K,其中Ji∈{1,2,...,n},该字符串对应的区间的左右端点分别为
其中约定
解码过程如下,首先引入记号
1)计算τ*=(τ-τlL-1)/(τrL-1-τlL-1)
2)确定满足Fi-1<=τ*<=Fi,
3)
4)如L<K,则L=L+1,回到步骤1,否则结束。
以上就是算术编码解码的方法框架,在实际实现时仍有一些软件代码设计的细节。
现有的算术编码方法停留在软件代码实现的细节方面或者是将算术编码运用到其他系统的设计中。
发明内容
为了克服已有算术编码方法存在的依赖于除法的不足,本发明提供了一种不需要除法的基于算术编码的无损数据压缩编码方法,并和已有算术编码同样是熵最优码,而且是非分组扩展模式的,使用方式灵活。
本发明解决其技术问题所采用的技术方案是:
一种基于算术编码的无损数据压缩编码方法,包括以下过程:
1)编码:假设n个源符号的概率分布为{0<p1<=p2<=...<=pn<1},是按照下标进行单调增序排列,给n个符号配上符号标号为{n-1,n-2,......,1,0},概率为pi的符号配上标号为n-i,i=1,2,...,n,假设输入的长度为K字符串
将τ看作是十进制数,在数学上证明它是属于[0,1]单位区间的,将其转换成二进制表示,表示结果的二进制序列即为编码的输出比特流;
2)解码:将所述比特流转成十进制有理数对应在单位区间[0,1]内的有理数,设为τ,令L=1,τ1=τ以下分三个步骤解码:
2.1)在集合
2.2)JL=k*;
2.3)如L<K,则
进一步,所述步骤2.1)中,满足τL>=kpLn-k的k总是存在的,至少k=0总满足,因而每次都存在最大的k*;得到J1J2J3......Jn-1JK即为解码的结果。
本发明的有益效果主要表现在:它也是一个流式编码,不依赖于分组扩展模式,使用方式灵活;此外,数学上证明它也是熵最优编码。
附图说明
图1是无损压缩技术作为有损压缩系统的后端模块的示意图。
具体实施方式
下面对本发明作进一步描述。
一种基于算术编码的无损数据压缩编码方法,该算术编码从某个角度可以看成是从基本思路上突破了原有的算术编码的方法框架,包括以下过程:
1)编码:假设n个源符号的概率分布为{0<p1<=p2<=...<=pn<1},注意,是按照下标进行单调增序排列(在经典算术编码方式中并无此排列要求),给n个符号配上符号标号为{n-1,n-2,......,1,0},概率为pi的符号配上标号为n-i,i=1,2,...,n,从数学上证明
将τ看作是十进制数,在数学上证明它是属于[0,1]单位区间的,将其转换成二进制表示,表示结果的二进制序列即为编码的输出比特流;
2)解码:将上述比特流转成十进制有理数对应在单位区间[0,1]内的有理数,设为τ,令L=1,τ1=τ以下分三个步骤解码:
2.1)在集合
2.2)JL=k*;
2.3)如L<K,则
所述步骤2.1)中,满足τL>=kpLn-k的k总是存在的,至少k=0总满足,因而每次都存在最大的k*;得到J1J2J3......Jn-1JK即为解码的结果。
算例一:一种基于算术编码的无损数据压缩编码方法,过程如下:
1)输入字符串CBAB
对应编号为0121,对应的有理数为25/256=0.09765625,对应的比特流为00011001。解码,首先将00011001转换成十进制有理数25/256,在集合{1/2,1/4,0}中满足τL>=kpLn-k的最大k为0,所以J1=0;再在集合{1/8,1/16,0}中满足τL>=kpLn-k的最大k为1所以J2=1;再对9/256在集合{1/32,1/64,0}寻找满足τL>=kpLn-k的最大k为2所以J3=2;最后对1/256在集合{1/128,1/256,0}寻找满足τL>=kpLn-k的最大k为1所以J4=1,最终解码得到J1J2J3J4=0121对应于字符串CBAB。
2)输入字符串CACCB
对应编号为02001,对应的有理数为0.1259765625,对应的比特流为0010000001。解码过程0010000001对应的有理数为0.1259765625,在{1/2,1/4,0}中满足τL>=kpLn-k的最大k为0所以J1=0;在集合{1/8,1/16,0}满足要求的最大k为2所以J2=0;同理得到所以J3=J4=0,J5=1。
算例二::一种基于算术编码的无损数据压缩编码方法,过程如下:
输入字符串ABCCCCE对应于编号序列2100003,对应在有理数为0.4400003。解码如下,在{0.3,0.4,0.2,0}中最大的满足要求的k是2,其次在{0.03,0.08,0.04,0}中最大的满足要求的k是1,在{0.003,0.016,0.008,0}中的k是0,此后连续4次都为0,到第7次在{0.0000003,0.0000256,0.0000128,0}中k是3。最终解码得到2100003。
机译: 基于上下文的算术编码设备,基于上下文的算术编码方法,基于上下文的算术解码设备,基于上下文的算术解码方法和至少一种计算机可读介质。
机译: 用于无损上下文自适应二进制算术编码的H.264 / AVC编码器和用于编码器的上下文自适应二进制算术编码方法,能够在熵编码过程中改善无损编码的压缩
机译: 基于字典的无损数据压缩的数据压缩引擎