整数数据的无损自适应编码与解码

申请号 CN200510108492.7 申请日 2005-09-29 公开(公告)号 CN1767395A 公开(公告)日 2006-05-03
申请人 微软公司; 发明人 H·S·马尔瓦;
摘要 一种使用新颖的后向自适应技术的整数数据 无损压缩 的方法和系统。自适应游程和Golomb/Rice(RLGR) 编码器 和 解码器 (编解码器)及方法在单Golomb/Rice(G/R)编码器模式和使用结合了游程编码码器的G/R编码器之间切换。该后向自适应技术包括新颖的自适应规则,它们在每个已编码码元后调整编码器参数。自适应编码模式参数和G/R参数。编码模式参数控制自适应RLGR编码器和方法是否使用游程编码,如果是,则使用它。G/R参数用于两种模式,以编码每个输入值(在单G/R模式中)或者编码不完全零连串后的数字或值(在RLGR模式中)。该自适应RLGR编解码器和方法还包括一解码器,它能基于逆编码规则来精确实现。
权利要求

1.一种用于编码数字数据(200)的方法,其特征在于,包括:
在第一编码模式和第二编码模式之间选择,以将所述数字数据编码成已编码 比特流(510),所述第一模式使用第一类熵编码器而不使用游程编码器,而所述 第二模式使用与所述游程编码器相结合的所述第一类熵编码器;以及使用后向自适应技术,基于所述已编码比特流自适应所述第一模式和所述第 二模式的编码器(520)。
2.如权利要求1所述的方法,其特征在于,所述第一类熵编码器是结合了所 述第二模式中的游程编码器的Golomb/Rice编码器,以生成游程Golomb/Rice (RLGR)编码器(610)。
3.如权利要求2所述的方法,其特征在于,还包括使用一编码模式参数在所 述第一和第二模式之间选择(520)。
4.如权利要求2所述的方法,其特征在于,还包括更新一Golomb/Rice参数 (650),包括:
按照所述Golomb/Rice参数定义自适应值(910);
如果所述自适应值等于零,则将所述Golomb/Rice参数减少第三整数常数 (920);
如果所述自适应值等于一,则保持所述Golomb/Rice参数不变(930);以及
如果所述自适应值大于一,则将所述Golomb/Rice参数增加所述自适应值 (935);
5.如权利要求2所述的方法,其特征在于,还包括在生成的每个代码字后自 适应所述第一模式和第二模式的编码器。
6.一种包括计算机可执行指令的计算机可读介质(310、331、332、341、352、 356),如果在计算机系统(300)上执行所述指令,将指示所述计算机系统(300) 执行如权利要求1所述的方法。
7.一种用于编码具有整数值的数字整数数据的方法,其特征在于,包括:
接收所述数字整数数据的输入串x(1110);
使用一编码模式参数s在使用下列之一间选择:(a)只使用自适应 Golomb/Rice(G/R)编码器的第一模式;(b)使用自适应游程编码器和所述自适 应G/R编码器的第二模式(1115、1120、1125、1130、1135);
定义一经比例缩放的编码模式参数为S=s*L,其中L是比例缩放参数(1255);
在所述第一和第二模式的自适应G/R编码器中使用经比例缩放的G/R参数K; 以及
使用后向自适应技术更新所述经比例缩放的编码模式参数S(1395)和所述经 比例缩放的G/R参数K(1465)。
8.如权利要求7所述的方法,其特征在于,还包括:
如果s=0,以所述第一模式编码所述输入串(1130);
如果|x|=0,将S增加第一整数常数A1(1245);以及
如果|x|>0,将S减少第二整数常数B1(1250)。
9.如权利要求7所述的方法,其特征在于,还包括:
如果s=0,以所述第二模式编码所述输入串(1135);
如果x包含零连串r,使得r=2s,将S增加第三整数常数A2(1385);以及
如果x包含零连串r,使得r<2s,将S减少第四整数常数B2(1390)。
10.如权利要求9所述的方法,其特征在于,还包括:
定义自适应值p(1425);
如果p=0,将K减少第五整数常数B3(1455);
如果p=1,保持K不变(1445);以及
如果p>1,将K增加p(1460)。
11.一种用于解码已编码比特流(230)的方法,其特征在于,包括:
从所述已编码比特流(230)接收一码字;
在第一解码模式和第二解码模式之间选择以解码所述码字,所述第一模式使 用第一类熵解码器而不使用游程解码器,而所述第二模式使用与所述游程解码器相 结合的所述第一类熵解码器(240);
使用后向自适应技术自适应所述第一模式和第二模式的解码器(240);以及
从所述经解码的码字重建数字数据的值(260)。
12.一种用于解码已编码比特流(230)的计算机实现的过程,所述比特流是 从使用具有后向自适应技术的自适应游程Golomb/Rice(RLGR)编码器(200)编 码数字整数数据中获得的,其特征在于,包括:
从表示所述已编码数字整数数据(230)的已编码比特流中接收码字;
在只执行Golomb/Rice(G/R)解码的第一解码模式和执行游程解码及G/R解 码的第二模式之间切换(240);
使用一编码模式参数s控制使用所述第一和第二解码器中的哪一个(715); 以及
在解码每个码字后使用所述后向自适应技术来更新所述编码模式参数s。
13.如权利要求12所述的计算机实现的过程,其特征在于,还包括:
定义一Golomb/Rice(G/R)参数k(915),来控制所述第一和第二解码模式 两者的G/R解码;以及
在解码每个码字后使用所述后向自适应技术解码来更新所述G/R参数k (940)。
14.如权利要求13所述的计算机实现的过程,其特征在于,还包括如果s=0, 切换到所述第一解码模式(720)。
15.如权利要求13所述的计算机实现的过程,其特征在于,还包括如果s>0, 切换到所述第二解码模式(725、730、735)。
16.如权利要求13所述的计算机实现的过程,其特征在于,还包括:
定义一比例缩放参数L(1255);
定义一经比例缩放的编码模式参数为S=s乘以L(1255);
定义一经比例缩放的G/R参数为K=k乘以L(1465);以及
在解码每个码字后使用所述后向自适应技术和自适应规则来更新所述经缩放 的编码模式参数S(1385、1390)和所述经比例缩放的G/R参数K(1455、1460), 而不是s和k。
17.一种自适应游程和Golomb/Rice(RLGR)解码器(240),用于解码具有 表示包含整数值的已编码数字整数数据的码字的已编码比特流(230),其特征在 于,包括:
一自适应Golomb/Rice(G/R)解码器(240),用于解码所述已编码比特流(230) 的码字;
一自适应游程解码器,用于解码所述码字(240);
一用于使用编码模式参数s在只包含所述自适应G/R解码器的第一解码模式 和包含所述自适应游程解码器和所述自适应G/R解码器的第二模式之间切换(405) 的装置;以及
一用于使用具有自适应规则的后向自适应技术来更新所述编码模式参数s (435)的装置。
18.如权利要求17所述的自适应RLGR解码器(240),其特征在于,还包 括:
Golomb/Rice(G/R)参数k(445),用于使用所述第一和第二解码模式两者 的自适应G/R解码器来解码所述码字;
一用于使用具有自适应规则的后向自适应技术来更新所述G/R参数k(440) 的装置。
19.如权利要求18所述的自适应RLGR解码器(240),其特征在于,所述 自适应规则还包括:
一用于如下更新所述编码模式参数s(430)的装置:
如果s=0,将s增加第一整数常数A1(1245);
如果s>0,将s减少第二整数常数B1(1250);
如果零连串r是完全连串,使得r=2s,将s增加第三整数常数A2(1385);
如果零连串r是不完全连串,使得r<2s,将s减少第四整数常数B2(1390);
以及
一用于如下更新所述G/R参数k(440)的装置:
定义自适应值p(1425);
如果p=0,将k减少第五整数常数(1455);
如果p=1,将k保持相同(1445);
如果p>1,将k增加p(1460)。
20.如权利要求19所述的自适应RLGR解码器(240),其特征在于,还包 括:
一用于如下定义经比例缩放的编码模式参数S和经比例缩放的G/R参数K的 装置:
定义比例缩放参数L;
定义S=s*L(1255);
定义K=k*L(1465);以及
一用于使用所述各自的自适应规则更新S和K而非s和k的装置。

说明书全文

技术领域

发明一般涉及数字数据的处理,尤其是使用新颖的后向自适应技术进行整 数数据的无损编码与解码的改进方法和系统。

背景技术

随着计算机数据(诸如文本、音频、视频、图像和程序文件)的大小持续增 长,数据压缩正变得越来越重要。数据压缩是一种将数字数据编码为比原始数据使 用更少比特的经编码表示的方法。以较少比特表示数据意味着数据占据较少的存储 空间并需要较小的传输带宽。
通常,数据压缩通过预测最常出现的数据并将之以较少的空间存储来压缩数 据。具体地,数据压缩涉及至少两个不同的任务:(1)定义一数据模型来预测输 入数据的概率;以及(2)用编码器从这些概率生成代码。此外,某些数据压缩技 术在数学上变换并量化数据以达到甚至更大的压缩。
压缩技术可以是无损或有损的。无损压缩技术是可逆的,从而编码前的原始 数据和解码后的解压缩数据的每一比特都是相同的。有损压缩利用了数据中有很多 可以扔掉的重复而在质量上有更多损失这一事实。有损压缩接受某些原始数据的损 失以便得到更高的压缩。
无损压缩一般用于压缩文本或二进制数据,而有损压缩一般用于音频、图像 和视频数据。然而,即使有损压缩技术有时也使用无损压缩技术。例如,两种常用 的压缩(或编码)技术是变换编码和预测编码。对于这些种类的压缩系统,原始数 据经变换并随后被量化(舍入到最近的整数),或者根据(固定或自适应的)信号 模型进行预测,且预测误差(原始和预测的数据之间的差异)随后被量化。在这两 种情况下,经量化的数据是整数形式的。一旦获得这些整数,就要用无损压缩技术 来编码经量化的值,以减少表示该数据所需要的比特数。
这些整数值集合通常有相关联的概率分布函数(PDF)。这些PDF具有这样 的分布:当在预测编码中数据性质由预测者很好地模型化时,预测误差应在大多数 时间接近于零。类似地,在变换编码中,大多数量化变换系数为零。图1示出对于 这些整数值的典型概率分布;零是最可能的值,而非零值的概率随数量增加呈接近 指数级下降。数据具有图1所示的概率分布,因为使用无损压缩编码的数据不是原 始数据。图1是通过量化变换系数或预测误差所得的整数数据。
从数学上讲,问题是要找出编码包含N个整数的向量x的有效解决方案。每 个元素x(n),n=0,1,...,N-1,有一个按照类似于图1的概率分布的值,因而最可能值 为零,而距零更远的值具有快速减少的概率。
像图1中这样的概率分布的简单数学模型是拉普拉斯(Laplacian)分布,或 者双边几何(TSG)分布,由参数θ特征化:
P ( x , θ ) = 1 - θ 1 + θ θ | x | - - - ( 1 )
注意,参数θ控制当|x|增长时概率的衰减速率。θ值越大,衰减越快。参数θ可直 接相关于概率,当x=0时,即P(0,θ)=(1-θ)/(1+θ)。同样,源码元的期望绝对值是:
E [ | x | ] = 2 θ 1 - θ 2 - - - ( 2 )
源的熵按比特/码元给出,如下式
H ( x ) = log 2 ( 1 + θ 1 - θ ) - 2 θ 1 - θ 2 log 2 ( θ ) - - - ( 3 )
因此,一个好的编码器应将x的N个值的向量映射到包含不多于N·H(x)个比特(理 论最小值)的比特流。
拉普拉斯分布是媒体压缩系统中的常用模型,用于预测编码器(如大多数无 损音频和图像编码器)中的预测误差,或者用于量化变换系数(如大多数有损音频、 图像和视频编码器)。
对于具有拉普拉斯/TSG分布的源有多种建议的编码器。一个简单而有效的编 码器是Golomb/Rice编码器。首先,通过以下简单的可逆映射将TSG源值x映射 到非负值u:
u = Q ( x ) = 2 x , x 0 - 2 x - 1 , x < 0 - - - ( 4 )
即,等效于将u视作重新排序的字母表的索引{0,-1,+1,-2,+2,...}。新源u 具有接近几何源的概率分布,对它而言Golomb码是最优的,因为它们是几何源的 Huffman码,只要适当地选择Golomb参数。
Golomb/Rice(G/R)码的一个示例示于表1,示出参数m的几个值。应该注 意,当m等于二的幂时,使用了参数k,它通过m=2k与m相关。G/R码优于Huffman 码的主要优点在于对于任意输入值,二进制码字可通过简单的规则来计算。因此, 不需要存储表。这对现代处理器特别有用,对它们而言,从存储表条目的存储位置 读取可能比执行若干指令花更长时间。易于明白,参数m确定多少连续的码字具 有相同的比特数。这也表明计算码字涉及计算u/m。其中u是输入值。对于大多数 处理器,整数除法采用多次循环,因而G/R码对于一般的m并没有吸引。当选 择了对应于Rice码的m=2k,则除法u/m可用位移来代替,因为u/m=u>>k(其中 >>表示右移运算符)。从而,对于任意输入u计算G/R码是容易的;只需计算p=u>>k 和v=u-(p<<k)。随后通过将具有p个1的串与v的k位二进制表示串接来形成代码。   输入   值   m=1   k=0   m=2   k=1   m=3   m=4   k=2   m=5 …   m=8   k=3   0   0   00   00   000   000   0000   1   10   01   010   001   001   0001   2   110   100   011   010   010   0010   3   1110   101   100   011   0110   0011   4   11110   1100   1010   1000   0111   0100   5   111110   1101   1011   1001   1000   0101   6   1111110   11100   1100   1010   1001   0110   7   11111110   11101   11010   1011   1010   0111   8   111111110   111100   11011   11000   10110   10000   9   1111111110   111101   11100   11001   10111   10001   10   11111111110   1111100   111010   11010   11000   10010   11   111111111110   1111101   111011   11011   11001   10011   12   1111111111110   11111100   111100   111000   11010   10100   13   1111111111110   11111101   1111010   111001   110110   10101   :   :   :   :   :   :
                                                  表1
从表1中显而易见,G/R参数k的选择必须依赖于源的统计量。当u增加时, 概率衰减得越慢,因此应选择更大的k。否则,码字长度增长过太。选择k的简单 规则是:对于给定输入值u的码字长度应接近于该值出现概率以2为底的对数。
尽管G/R码对于几何分布源是最优的,但对于经由公式4的映射从拉普拉斯 /TSG源编码码元并非最优。这是因为对于具有TSG分布的输入变量x,从公式4 得到的变量u具有接近但不完全是几何的概率分布。实际上,性能足够接近于最优 (例如,一般具有比熵少5%的速率),因此G/R码相当流行。TSG源的最优码包 括一组四个代码变量,在大多数情况下,实现它们且按5%或更少来改进压缩更为 复杂。因此,在大多数情况下,G/R编码器在性能和简便之间提供最佳折衷。
在图1中,概率分布由单个参数表示,即指数衰减速率。衰减速率越快,则 更可能是零值。这意味着在许多情况下零是很可能的,使得几个零连串变得非常可 能。换言之,如果概率分布衰减速率足够快,则编码连串是个好方法。编码零连串 意味着仅有几个比特用于处理输入数据中的许多项。
对连串数据编码是使用游程编码来有效地执行的。游程编码是数据压缩的简 单形式,其中连续重复的相同值序列(或“连串”)被存储为单个数据值和连串的长 度,而不是原始连串。
例如,如果数据与预测编码中预测器所使用的模型相匹配,则预测误差更可 能为零。但即使有了好模型,偶尔有个大值也是可能的。这会在到达边界时发生, 诸如像素值从背景值到前景值。不时地会出现大数字。当这种现象发生时,比游程 编码更有用的一种类型的编码技术被称为“游程Golomb/Rice(RLGR)”编码技术。 一种这样的RLFT编码技术在美国专利第6,771,828号,Malvar的题为“System and Method for Progressively Transform Coding Digital Data(用于渐进变换编码数字数 据的系统和方法)”和美国专利第6,477,280号,Malvar的题为“Lossless Adaptive Encoding of Finite Alphabet Data(有限字母数据的无损自适应编码)”中公开。
事实上,随着数据源变化,概率将不保持常量而随时间变化。这对于例如图 像和音频都是真实的。通常,这些输入数据中的概率变化可用大量不同的方法来处 理。在JPEG中,例如,有一熵编码器(Huffman编码器),其中不同长度的码字 用于要编码的不同值。Huffman表通常是预先设计的,即,通常是获得大量图像、 测试它们的概率、并构造用于所有图像的平均模型。这种方法的一个问题是对于图 像的每个部分,编码效率上都有损耗,因为熵编码器使用的概率模型平均上很好, 但对图像的某个部分不够好。
从表1可看出,Golomb/Rice码有两个主要问题:(1)概率衰减参数θ,或 者等价的概率P(x=0)必须已知,因此k的近似值才能确定;以及(2)如果衰减 参数太小,则熵H(x)比1小,且因而Golomb/Rice码不是最理想的,因为其平均码 字长度不能小于1比特/码元。
实际上,第一个问题(最优Golomb/Rice参数的估算)通常是通过将输入向 量划分成预定长度的来解决的。对于每个块,编码器两次通过数据。第一次通过 时,计算输入值的平均量。为此,参数θ可从公式2估算,且可确定相应的最优k。 在第二次通过时,编码器通过首先输出二进制形式的k的值,随后是块内数据值的 Golomb/Rice码的串接串,来生成该块的比特流。这是实际上所有使用Golomb/Rice 码的无损压缩系统中都使用的方法,诸如用于无损图像压缩的JPEG-LS、用于无损 音频压缩的SHORTEN及其它等。这被称为“按块自适应”或者“前向自适应”模型。 前向自适应模型在以下意义上上是前向的:编码器在编码前先考察数据、测量统计 参数(通常是平均量)、随后基于该参数编码并将用于编码数据的参数值放入首部, 以便由解码器使用。数据被拆成小部分,即块,而不是试图同时编码所有数据。对 于每个块,测量该块的统计量,对于与缓冲区的内容相匹配的数据部分测量统计参 数,且将熵编码器调整到该参数。在编码文件中,插入首部,指示用于编码该数据 块的参数值。
实践中的第二个问题,即,具有非常低的熵的编码源,通常是使用按块自适 应或前向自适应模型来解决的,且如果块中输入码元的平均量的值小到足以使估算 的熵H(x)小于1,则编码器使用游程编码而非Golomb/Rice编码。
尽管这些方法在实践中用得很好,但有两个主要缺点。一个缺点是编码器需 要两次读取每个输入块,这样在数据上执行两次通过:第一次计算平均量以确定 Golomb/Rice参数,而第二次执行真正的编码。这要求编码器执行附加的工作并增 加了复杂性。在某些应用中,编码时间不是问题,但对于例如数码相机而言,它会 减慢编码过程或增加随机存取存储器的开销。具体而言,前向自适应模型必须先考 察数据并测量统计量,找出模型参数,然后编码。如果编码器在具有大量处理能力 的个人计算机上运行,则这不是个问题。然而,如果用手机拍照,照片要由手机自 己编码,而其处理能力相当有限。
第二个但最重要的缺点涉及选择块尺寸的难度。如果块尺寸太大,则统计量 在块内会剧烈变化。另一方面,如果块尺寸太小,则必须告知解码器哪个参数用于 编码该数据块的额外开销变得难以承担。对于每个块,编码器必须存储正用于编码 该块的参数值。从某种观点看,编码小块所需要的额外开销对于所得到的压缩是不 值得的。这就造成了权衡。一方面,如果用了小块,则块的统计量可匹配,但测量 统计量是困难的,因为只有几个数,且编码的额外开销是巨大的。另一方面,如果 使用大块,则问题是统计量在块内变动巨大。实际上,很难找到这两个矛盾因素之 间的折衷,因此块尺寸通常被选择在128和1,048个样值之间,取决于要编码的数 据类型。
一种解决方案是在编码器中使用后向自适应技术。采用后向自适应,编码始 于解码器和编码器对每个块达成初始状态的一致。换言之,每个参数被初始化为预 定值,随后编码开始。每次当编码器产生一输出码元,该码元即可立即被发送至解 码器,因为解码器知道用于编码它的参数值。在编码器输出码元后,它就按照预定 的自适应规则计算用于编码参数的新值,这取决于所输出的码元。解码器知道该参 数自适应规则,因此它也可计算用于编码参数的新值。因而,编码参数可在每个编 码的码元后调整,且编码器和解码器始终是同步的,即,解码器追踪编码参数中的 变化。这意味着编码器不需要向解码器发送有关什么参数用于编码该数据方面的任 何额外开销信息。
因此,所需要的是一种无损压缩编码器和方法,它通过在用于编码零连串的 游程编码和用于编码零连串后面的数字的Golomb/Rice编码之间切换来提供整数 数据的有效压缩。还有,所需要的是一种能够处理和编码可能出现在零连串后的任 意输入整数数字的自适应编码器和方法。此外,还需要的是一种自适应编码器和方 法,它通过后向自适应技术避免前向自适应的前述问题,以提供对输入数据的快速 追踪和有效压缩。

发明内容

这里所公开的本发明包括自适应游程Golomb/Rice(RLGR)编码器和解码器 (编解码器),以及用于整数数据的无损编码方法。自适应RLGR编解码器和方 法使用后向自适应来提供对输入数据中变化的统计量的快速追踪。使用后向自适 应,自适应RLGR编解码器和方法快速获知输入数据中的统计量的任何变化。此 外,自适应RLGR编解码器和方法能够编码任何输入整数值。自适应RLGR编解 码器和方法可应用于各种各样的压缩应用,包括诸如音频、图像和视频编码器等多 媒体压缩系统。
自适应RLGR编解码器和方法以一种新颖的方式组合了游程编码和 Golomb/Rice(G/R)编码。具体而言,该自适应RLGR编解码器和方法具有只有 G/R编码的第一模式(单G/R模式)和G/R编码加游程编码的第二模式(RLGR 模式)。自适应RLGR编解码器和方法还使用了在每个编码的码元后调整编码参 数的新颖的后向自适应技术。编码模式(单G/R模式或RLGR模式)从参数值自 动确定。不需要概率表或码字表,因而自适应RLGR编解码器和方法可适合于小 存储器场合。自适应RLGR编解码器和方法因此很适于现代处理器,其中存储器 访问通常比指令取出和执行花费更多的周期。它也很好地适用于只有有限存储器和 有限处理能力的小型设备,因为自适应RLGR编解码器和方法不需要缓冲块中的 输入数据,也不需要两次处理每个数据值。
自适应RLGR编解码器和方法使用简单而新颖的编码规则组合,根据编码模 式将输入数据串映射到输出码字。自适应RLGR编解码器和方法还使用了具有新 颖的自适应规则的后向自适应技术。使用了两个参数,即,编码器连串参数(s) 和Golomb/Rice(G/R)参数(k)。编码器连串参数控制自适应RLGR编解码器和方 法是否使用游程编码(对于s>0),且如果是,如何使用游程编码。G/R参数用于 两种编码模式,或者直接编码输入值(在单G/R模式中,s=0),或者编码不完全 零连串后的输入值(在RLGR模式中)。
自适应RLGR编解码器和方法的主要优点之一是在生成的每个码字之后调整 和更新其参数(s和k)。这使得输入数据的统计量中的任何变化都能被很快追踪 到。不需要将编码参数发送到解码器的额外开销,因为它们的变化都能被解码器追 踪。由于自适应规则是简单的,因此使用后向自适应的计算复杂度很低。因而,自 适应RLGR编解码器和方法对许多实际应用都有吸引力。
自适应RLGR方法包括在使用熵编码器而不是游程编码器的第一模式和使用 结合游程编码器和熵编码器的第二模式之间进行选择,并使用后向自适应技术来自 适应第一和第二模式的编码器。一般而言,熵编码器是Golomb/Rice编码器。后向 自适应技术包括使用编码模式参数s以在第一和第二模式之间选择,并使用 Golomb/Rice(G/R)参数k用于G/R编码器。如果s=0,则选择第一编码模式,且 如果s>0,则选择第二编码模式。这些参数的每一个都在由游程编码器或G/R编码 器生成的每个码字之后更新。
编码规则取决于编码模式。如果s=0,则下一输入值x是通过先经简单的1-1 映射规则(当x>0时u=2x,当x<0时u=-2x-1)将它映射到非负值u上、然后使用 带有参数k的Golomb/Rice编码器编码来编码的,因此输出码字被表示为GR(u,k)。 如果s>0,则先检查输入值x的零连串r。如果r=2s,则连串r被定义为完全连串 且输出码字是等于0的单个比特。如果r<2s,则连串r被定义为不完全连串且码 字是1+bin(r,s)+GR(u,k),其中bin(r,s)是s个比特中不完全连串r的长度的二进制表 示,而GR(u,k)是跟在不完全连串r后的值的Golomb/Rice码(再次使用从x到u 的映射)。
在编码一个码元后,应用参数自适应规则。后向自适应技术的自适应规则包 括用于参数s和k的每一个的规则。s的自适应规则如下。如果s=0(单G/R模式), 则检查输入值x的绝对值。如果|x|=0,则将s经比例缩放的形式,即S,增加第一 整数常数A1。如果|x|>0,则S减少第二整数常数B1。如果s>0(RLGR模式), 则如果连串r是完全连串,则S增加第三整数常数A2。如果连串r是不完全连串, 则s减少第四整数常数B2。要用于生成下一码字的s值随后被计算为s=S/L,其中 L是固定参数(如果L被选择为二的幂,则除以L的除法就是位移运算)。
用于k的自适应规则如下。从输入值u(记住G/R编码器总是在u值上运算), 通过p=u>>k来计算临时值p(其中>>表示右移运算符)。如果p=0,则k的经比 例缩放的形式,即K,减少第五整数常数B3。如果p=1,则k保持不变。如果p> 1,则K增加p。以这种方法,在生成每个码字后,对于第一和第二模式中的G/R 编码器更新参数k。随后计算要用于生成下一码字的k值,为k=K/L,其中L是固 定参数(记住如果L选为二的幂,则除以L的除法只是位移运算)。
从以下自适应规则的描述中可以看出,自适应RLGR方法还包括称为“小数自 适应”的特征。小数自适应允许对自适应速率的更精细控制。首先,定义比例缩放 参数L,且L值一般被设为二的幂。接着,定义经比例缩放的编码模式参数S=s*L 和经比例缩放的G/R参数K=k*L。当使用以上关于s和k的自适应规则时,经比 例缩放的参数值S和K增加或减少整数常数,这取决于所生成的码字。在S和K 的自适应后,最终的参数值s和k通过s=S/L和k=K/L来计算。那样,S和K的整 数增量可以被视为s和k的小数增量,这使得能够对s和k进行更平滑控制,从而 更好地追踪输入统计量中的变化。如果在每个编码的码元后只是按整数增量来调整 s和k,则它们的值将波动太大。这种参数值中的噪声将导致压缩比(以直接二进 制格式存储输入数据所需的比特数与存储所编码的比特流所需比特数之比)的降 低。
一种自适应RLGR编解码器包括用于结合上述自适应RLGR方法的模块。
自适应RLGR编解码器和方法通过使用对应于以上编码规则的解码规则,并 使用上述相同的参数自适应规则来工作。解码器处的解码规则反转了前述的编码器 处的编码规则。即,如果s=0,则解码器根据GR参数k的当前值,从输入比特流 (或文件)中读取与所述的一样多的比特。以这种方法,解码器按照表1读取对应 于有效的Golomb/Rice码GR(u,k)的完整码字。由于Golomb/Rice码对每个参数k 是唯一可解码的,因此解码器随后可解码该码字。换言之,解码器可确定现在在编 码器处的码元值u。从u,解码器可简单地通过使用1-1逆映射规则来确定相应的 数据值x。具体而言,如果u是偶数,则x=u/2,而当u是奇数时,则x=-(u+1)/2。 如果s>0,则解码器从输入比特流或文件中读取下一比特。如果该比特等于0(零), 则解码器产生r个零的串的输出,其中r=2s。如果该比特等于1(一),则解码器 读取下s个比特,作为变量r的二进制表示。解码器然后根据GR参数k的当前值, 从输入比特流(或文件)中读取与所述的一样多的比特。以这种方法,读取对应于 有效的Golomb/Rice码GR(u,k)的完整码字。从G/R码,解码器可确定临时变量u, 并通过1-1逆映射规则来计算跟在零的部分串后的输入数据值x。特别地,如果u 是偶数,则x=u/2,而当u是奇数时,则x=-(u+1)/2。解码器然后输出后面跟着值x 的r个零的串。执行上述解码过程,以将输入码字解码成完全匹配在编码器处所见 到的输出值或值串。这样,解码过程是无损的。
在如上所述解码来自输入比特流或文件的码字后,解码器然后计算如以上对 编码器所述的相同自适应规则。以这种方式,解码器将以与编码器完全相同的方法 调整参数值s和k。从而,参数将具有用于解码下一比特流(或文件)码字的正确 值。
附图说明
本发明可通过参考以下描述和示出本发明各方面的附图来进一步理解。通过 结合附图阅读以下本发明的详细描述,其它特征和优点将是显而易见的,附图作为 示例示出了本发明的原理。
现在参考附图,其中相同的参考标号通篇表示相应的部件:
图1示出适用于此处所公开的自适应游程Golomb/Rice(RLGR)编码器和方 法的整数值的典型概率分布。
图2A是示出此处所公开的RLGR编解码器和方法的编码器部分的示例性实 现的框图
图2B是示出此处所公开的RLGR编解码器和方法的解码器部分的示例性实现 的框图。
图3示出其中可实现图2所示的自适应RLGR编解码器的合适的计算系统环 境的示例。
图4是示出图2所示的自适应RLGR编码器的组件的概括框图。
图5是示出图2和4所示的自适应RLGR编码器和方法的概括操作的概括流 程图。
图6是进一步示出图5所示的自适应RLGR编码器和方法的细节的流程图
图7是图4所示的自适应RLGR编码器和方法的编码器模式选择器的操作的 详细流程图。
图8是图4所示的自适应RLGR编码器和方法的编码器模式参数自适应模块 的操作的详细流程图。
图9是图4所示的自适应RLGR编码器和方法的Golomb/Rice(G/R)参数自 适应模块的操作的详细流程图。
图10是图9所示的Golomb/Rice(G/R)参数自适应模块所使用的自适应值的 计算的流程图。
图11是示出选择用于自适应RLGR编码器和方法的编码器模式的细节的工作 示例。
图12是示出单G/R模式的编码细节和附随的编码模式参数s自适应的工作示 例。
图13是示出RLGR模式的编码细节和附随的编码模式参数s自适应的工作示 例。
图14是示出自适应单G/R模式的编码细节和其时的G/R参数k自适应规则的 工作示例。

具体实施方式

在本发明的以下描述中,对附图进行了参考,附图构成本发明的一部分,其 中作为说明给出可实施本发明的特定示例。要理解,也可使用其它实施例且可作出 结构性变化,而不脱离本发明的范围。
I. 介绍
这里所公开的游程Golomb/Rice(RLGR)编码器和方法可用于各种各样的压 缩应用中。多媒体压缩系统(例如音频、图像和视频编解码器)以及使用预测或变 换方法进行压缩的其它系统通常生成带有类似于图1那样的概率分布的整数数据。 可在应用中实现RLGR编解码器和方法,用于图像、音频、地形标高和几何地图 数据的压缩。在这些应用中使用RLGR编解码器和方法的结果是具有可与最复杂 的熵编码器相比较,但以更简单的实现的压缩比。
这里所公开的RLGR编解码器和方法是用于整数数据的无损压缩的改进技 术。包含整数值的向量由编码器映射到比特流中,它稍后可由解码器精确重建。为 改进性能使用后向自适应,RLGR编解码器和方法快速获知和自适应输入数据的统 计量中的变化。RLGR编解码器和方法可应用于各种各样的压缩应用中,包括诸如 音频、图像和视频编解码器等多媒体压缩系统。
RLGR编解码器和方法以一种新颖的方法组合了游程编码和Golomb/Rice编 码,并以在每个编码的码元后调整编码器参数的后向自适应策略为特征。概率表或 码字表是不需要的,它们使RLGR编解码器和方法适合于很小的存储器情况。因 而RLGR编解码器和方法特别适合现代处理器,其中存储器访问通常比指令取出 和执行花费更多的周期。
RLGR编解码器和方法与以前各种熵编码器相比的一个关键优点是其后向自 适应策略快速获知数据的统计量中的变化。因而,实际上RLGR编解码器和方法 展示出比诸如Huffman编码器、块自适应Golomb/Rice编码器或上下文自适应算术 编码器等其它各种编码器更好的性能。使用后向自适应策略用于编码参数的另一个 优点是不需要概率估算器。RLGR编解码器和方法还有另一个优点是它在每个编码 的码元之后执行自适应,只在数据上通过一次,这样比使用按块或前向自适应的编 码器产生更好的压缩结果和更快的编码。
II. 概览
图2A和B是方框图,示出此处所公开的自适应游程Golomb/Rice(RLGR) 编解码器和方法的示例性实现。在图2A中,示出了自适应游程RLGR编解码器和 方法的编码器部分的框图。在图2B中,示出了自适应游程RLGR编解码器和方法 的解码器部分的框图。应该注意,图2A和B只是其中可实现和使用自适应RLGR 编解码器和方法的几种方式中的两种。
参考图2A,自适应RLGR编码器200运行在第一计算设备210上。自适应 RLGR编码器200输入并处理整数数据220。一般而言,给定整数数据220,诸如 包含整数值的向量,自适应RLGR编码器200将整数数据220编码或映射为已编 码比特流230。整数数据220一般包含整数向量,因而大多数可能值为零且任意非 零值具有随值增长而减少的概率。这种类型的整数数据一般具有类似于图1所示的 概率分布函数(PDF)。在编码了整数数据后,已编码比特流230可被存储或发送。
参考图2B,RLGR解码器240驻留在第二计算设备250上。应该注意,尽管 示出为单独的计算设备,但第一计算设备210和第二计算设备250可以是同一计算 设备。换言之,RLGR编码器200和解码器240可驻留在同一计算设备上。一般而 言,RLGR解码器240处理编码器比特流230并输出经重建的整数数据260。因为 自适应RLGR编码器200执行整数数据220的无损编码,因此RLGR解码器240 可读取已编码比特流230,并精确地重建包含在整数数据220中的原始数据向量。
应该注意,在实际应用中,设备或仪器可包含RLGR编码器而不包含RLGR 解码器(例如,数码相机)。同样地,设备或仪器可包含RLGR解码器而不包含 RLGR编码器(例如,数字音频播放器或数字图像查看器)。
III. 示例性操作环境
自适应游程Golomb/Rice(RLGR)编解码器和方法被设计为在计算环境中和 计算设备上运行,诸如图2所示的第一计算设备210和第二计算设备250。现在将 讨论自适应RLGR编解码器和方法在其中运行的计算环境。以下讨论旨在提供可 在其中实现自适应游程Golomb/Rice(RLGR)编码器和方法的适当计算环境的简 要概括描述。
图3示出可在其中实现图2所示的自适应RLGR编解码器和方法的适当计算 系统环境的示例。计算系统环境300只是适当计算环境的一个示例,而不旨在对本 发明使用范围或功能提出任何限制。计算环境300不应被解释为对于示例性操作环 境300中所示任意一个组件或其组合具有任何依赖或需求。
自适应RLGR编解码器和方法可用大量其它通用或专用计算系统环境或配置 来操作。众所周知的适于自适应RLGR编解码器和方法使用的计算系统、环境和/ 或配置的示例包括,但不限于,个人计算机、服务器计算机、诸如蜂窝电话和PDA 等手持式、膝上型或移动计算机或通信设备、多处理器系统、基于微处理器的系统、 机顶盒、可编程消费电子产品、网络PC、小型机、大型计算机、可包括任意以上 系统或设备的分布式计算环境等等。
自适应RLGR编解码器和方法可在诸如程序模块等由计算机执行的计算机可 执行指令的通用上下文环境中描述。一般而言,程序模块包括例程、程序、对象、 组件、数据结构等,它们执行特定任务或实现特定抽象数据类型。自适应RLGR 编解码器和方法还可在分布式计算环境中实施,其中任务由通过通信网络连接的远 程处理设备执行。在分布式计算环境中,程序模块可位于包括存储器存储设备在内 的本地和远程计算机存储介质中。参考图3,用于实现自适应RLGR编解码器和方 法的示例性系统包括计算机310形式的通用计算设备。计算机310是图2所示第一 计算设备210和第二计算设备250的示例。
计算机310的组件可包括,但不限于,处理单元320、系统存储器330和将包 括系统存储器的各种系统组件耦合到处理单元320的系统总线321。系统总线321 可以是任意几种类型的总线结构的任一种,包括存储器总线或存储器控制器、外围 总线或外部总线、和/或使用任意各种各样总线体系结构的任一种的局部总线。作 为示例,而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道 体系结构(MSA)总线、扩展ISA(EISA)总线、视频电子技术标准协会(VESA) 局部总线以及外围部件互连(PCI)总线,也称为Mezzanine总线。
计算机310通常包括各种计算机可读介质。计算机可读介质可以是能够被计 算机访问的任何可用介质,包括易失性和非易失性介质、可移动和不可移动介质。 作为示例,而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机 存储介质包括以用于诸如计算机可读指令、数据结构、程序模块或其它数据等信息 的存储的方法或技术实现的任何易失性和非易失性、可移动和不可移动介质。
计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储 器技术、CD-ROM、数字多功能盘(DVD)或者其它光盘存储、磁盒、磁带、磁 盘存储或者其它磁存储设备,或者可用于存储需要的信息并且可由计算机310访问 的任何其它介质。通信介质一般具体化为在如载波或其它传送机制等已调制数据信 号中的计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递 介质。
注意,术语“已调制数据信号”意指以将信息编码到该信号中的方式设置或改 变其一个或多个特征的信号。作为示例,而非限制,通信介质包括有线介质,诸如 有线网络或者直接线连接,以及无线介质,诸如声学、RF、红外和其它无线介质。 任何上述内容的组合也包括在计算机可读介质的范围内。
系统存储器330包括以易失性和/或非易失性存储器形式的计算机存储介质, 诸如只读存储器(ROM)331和随机存取存储器(RAM)332。基本输入/输出系 统333(BIOS)一般存储在ROM 331中,它包含诸如在启动期间帮助在计算机310 内各元件间传送信息的基本例程。RAM 332一般包含由处理单元320可直接访问 和/或目前正运行的数据和/或程序模块。作为示例而非限制,图3示出操作系统334、 应用程序335、其它程序模块336和程序数据337。
计算机310还可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。 仅作为示例,图3示出读写不可移动非易失性磁介质的硬盘驱动器341、读写可移 动非易失性磁盘352的磁盘驱动器351,以及读写如CD-ROM或其它光介质等可 移动非易失性光盘356的光盘驱动器355。
可在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机 存储介质包括,但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态 RAM、固态ROM等等。硬盘驱动器341一般通过诸如接口340等不可移动存储 器接口连接到系统总线321,而磁盘驱动器351和光盘驱动器355一般通过诸如接 口350等可移动存储器接口连接到系统总线321。
以上讨论并在图3中示出的驱动器及其相关联的计算机存储介质为计算机 310提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图 3中,硬盘驱动器341被示出为存储操作系统344、应用程序345、其它程序模块 346和程序数据347。注意这些组件可以相同或不同于操作系统334、应用程序335、 其它程序模块336和程序数据337。操作系统344、应用程序345、其它程序模块 346和程序数据347在这里给出不同的标号是为了指出至少它们是不同的副本。用 户可通过诸如键盘362和定点设备361(通常指鼠标轨迹球触摸板)等输入设 备将命令和信息输入到计算机310。
其它输入设备(未示出)可包括话筒、操纵杆、游戏垫、圆盘式卫星天线、 扫描仪、无线电接收器或者电视或广播视频接收器等等。这些和其它输入设备通过 耦合到系统总线321的用户输入接口360连接到处理单元320,但也可通过其它接 口和总线结构,如并行端口、游戏端口或通用串行总线(USB)来连接。监示器 391或其它类型的显示设备也通过接口,如视频接口390连接到系统总线321。除 了监示器以外,计算机还可包括其它外设输出设备,诸如扬声器397和打印机396, 它们可通过输出外围接口395连接。
计算机310可使用到一或多个远程计算机,如远程计算机380的逻辑连接在 网络化环境中工作。远程计算机380可以是个人计算机、服务器、路由器、网络 PC、对等设备或其它普通网络节点,并且一般包括上面相对于计算机310所述的 许多或所有元件,尽管在图3中所示的只有存储器存储设备381。图3所示的逻辑 连接包括局域网(LAN)371和广域网(WAN)373,但也可包括其它网络。这样 的图络环境在办公室、企业范围计算机网络、企业内部互联网和因特网中是很常见 的。
当在LAN环境中使用时,计算机310通过网络接口或适配器370连接到LAN 371。当在广域网环境中使用时,计算机310一般包括调制解调器372或通过WAN 373,如因特网建立通信的其它装置。调制解调器372可以是内置或外置的,通过 用户输入接口360或其它适当机制连接到系统总线321。在网络化环境中,相对于 计算机310描述的程序模块或其部分可存储在远程存储器存储设备中。作为示例而 非限制,图3例示了远程应用程序385驻留在存储器设备381上。要理解,所示的 网络连接是示例性的,并且可使用在计算机之间建立通信链路的其它手段。
IV. 系统组件
图4是示出图2所示的自适应RLGR编码器200组件的总框图。自适应RLGR 编码器接收输入值(或值串)400作为输入。然后使用编码器模式选择器405在自 适应RLGR编码器200的两个模式之间选择和切换。具体而言,如图4所示,编 码器模式选择器405可以选择单Golomb/Rice模式或者游程和Golomb/Rice编码器 模式。单Golomb/Rice模式只使用具有自适应参数的Golomb/Rice编码器410。游 程和Golomb/Rice编码器模式使用具有自适应参数的游程编码器415和自适应 Golomb/Rice编码器410。
使用以上两种模式之一来编码输入值(或串)400以获得码字420。在每个输 入值(或串)400的编码后,编码参数被自适应来追踪输入数据的统计量。自适应 RLGR编码器200使用至少两种类型的参数。第一种,使用编码模式参数来控制编 码模式是否使用游程编码器,以及如果是这样,如何使用游程编码器。第二种,在 两种模式中都使用Golomb/Rice(G/R)参数,以便:(a)编码每个输入值(如果 编码器是单G/R模式);以及(b)编码跟在不完全0连串后的数字(如果编码器 在RLGR模式)。这些参数及这些参数的自适应将在下面详细讨论。
编码模式参数自适应模块430用于使用后向自适应技术来更新编码模式参数。 模块430产生更新编码模式参数435。类似地,G/R参数自适应模块440用于使用 后向自适应技术来更新原始G/R参数。这产生经更新的G/R参数445。编码模式 参数和G/R参数的自适应都将在下面详细讨论。一旦参数被更新,下一个输入值 450将由自适应RLGR编码器200用更新后的编码模式参数435和更新后的G/R 参数445来处理。
V. 操作概览
现在将讨论如图2和4所示的自适应RLGR编码器200的操作和其中所使用 的方法。图5是总流程图,示出自适应RLGR编码器和方法的总操作。该方法始 于输入要编码的数字数据(框500)。在一个经测试的实施例中,输入数字数据是 具有整数值元素的向量形式的整数数据。应该注意,每个输入数字数据值可以是任 意整数值,而不限于特定的范围(例如,二进制或二进制加符号,因为这在其它熵 编码器中很常见)。接下来,选择自适应RLGR编码器的编码器模式(框510)。 模式可以是单G/R模式或RL+G/R模式,取决于编码模式参数的值。所选择的编 码器然后编码输入数字数据。
数字数据在所选模式中使用被初始化为某些值的编码参数来编码。然而,由 于输入数字数据的统计量可以变化,因此RLGR编码器200是自适应的。这种自 适应使得自适应RLGR编码器200能够追踪输入数字数据的统计量并快速自适应 到那些统计量,以提供更高的编码效率。自适应RLGR编码器200和方法使用后 向自适应技术来更新编码参数(框520)。编码参数的这种更新在编码了输入数字 数据的每个值或值串后发生。此外,后向自适应技术包括新颖的自适应规则,这将 在下面详细讨论。然后,输出已编码数字数据(框530)。接下来,使用刚才描述 的方法处理输入数字数据的下一值或串。编码参数的更新值用于编码下一输入值或 串。一直重复这个过程,直到所有数字数据都被编码成已编码比特流。
图6是一流程图,示出图5所示的自适应RLGR编码器和方法的进一步细节。 特别地,数字数据的值或串作为输入接收(框600)。接下来,从下列模式中选择 编码模式:(a)单G/R模式;以及(b)游程和G/R模式(框610)。然后使用所 选的编码器模式来编码输入值或串(框620)。
在编码了输入值或串后,更新G/R参数。该自适应过程始于定义小数自适应 参数(框630)。小数自适应参数用来减慢编码参数的自适应,这样可更紧密地追 踪最优参数值。小数自适应参数将在下面更详细地讨论。接下来,使用包含新颖的 自适应规则的后向自适应技术来更新编码模式参数的小数自适应形式(框640)。 类似地,使用后向自适应技术和新颖的自适应规则来更新G/R参数(框650)。经 编码的输入值或串被追加到已编码比特流后,且输入要编码的下一个数字数据值或 串(框660)。该过程重新开始,用更新后的编码模式参数和G/R参数编码下一值 或串。
VI. 操作细节
现在将讨论以上所述图4、5和6的自适应RLGR编码器200和方法的操作细 节。
编码器模式选择器
图7是图4所示的自适应RLGR编码器200和方法的编码器模式选择器405 的操作的详细流程图。一般而言,编码器模式选择器405基于编码模式参数的值在 两种编码器模式之间选择和切换。编码器模式的选择发生在数字数据的值或串被编 码及编码参数被更新之后。
该过程始于接收初始编码模式参数(框705)和要编码的输入值(或零串)(框 710)为输入。做出关于编码模式参数值是否等于零的判断(框715)。如果是, 则编码模式为G/R模式。否则,编码模式为RLGR模式。
在G/R模式中,使用自适应G/R编码器编码输入值(框720)。这是使用用 于G/R参数的后向自适应自适应规则的G/R编码器。在RLGR模式中,意味着编 码模式参数大于零,可期望输入值包含一连串零的高概率。做出关于零连串是完全 还是不完全连串的判断(框725)。连串被定义为彼此邻接的相同值的串。完全连 串被定义为具有的零的个数等于2的编码模式参数的幂的连串。例如,如果编码模 式参数等于3,则23=8。因而,在这个示例中,完全连串是8个零的连串。
如果连串是完全连串,则使用自适应游程编码器将输入值串编码为码字=0(框 730)。换言之,完全连串由零码字表示。在以上示例中,8个零的串(它表示完 全串)将由码字=0表示。如果连串是不完全连串,则编码该输入值串,以便告知 编码器该连串是不完全的、不完全连串中的零的个数以及紧随在不完全连串后的 值。特别地,使用自适应游程编码器将输入值串编码为不完全连串,由码字=1表 示(框735)。这通知解码器该连串是不完全连串。接着,不完全连串的长度被添 加到已编码输入值串(框740)。该已编码值表示不完全连串的长度。例如,如果 不完全连串的长度是4个零,则值4(或二进制表示法中的“100”)被添加到已编 码比特流,以告知解码器连串长度等于四。
剩下的要编码的唯一信息是紧随不完全连串后的值。使用自适应G/R编码器 来编码紧随在不完全连串后的值(框745)。当使用自适应G/R编码器时使用G/R 参数。最后,输出已编码输入值(如果编码模式为G/R模式)或已编码输入值串 (如果编码模式为RLGR模式)(框750)。
编码模式参数自适应模块
图8是图4所示的自适应RLGR编码器200和方法的编码模式参数自适应模 块430的操作的详细流程图。一般而言,编码模式参数自适应模块430使用后向自 适应技术更新初始编码模式参数。更新在编码了数字数据的每个值或串后执行。后 向自适应技术使用新颖的自适应规则来更新编码模式参数。
该过程始于接收初始编码模式参数(框805)和要编码的输入值(框810)作 为输入。然后做出关于编码模式参数是否等于零的判断(框815)。如果是,则编 码模式为单G/R模式,否则编码模式为RLGR模式。
对于单G/R模式,做出关于输入值的绝对值是否等于零的判断(框820)。 如果是,则当前经比例缩放的编码模式参数增加第一整数常数(框825)。如果不 是,则当前经比例缩放的编码模式参数减少第二整数常数(框830)。
对于RLGR模式,做出关于值串中的零连串是完全还是不完全连串的判断(框 835)。如果连串是完全连串,则当前经比例缩放的编码模式参数增加第三整数常 数(框840)。如果连串是不完全连串,则当前经比例缩放的编码模式参数减少第 四整数常数(框845)。
一旦当前经比例缩放的编码模式参数被更新,用更新后的编码模式参数来替 代当前编码模式参数(框850)。这通过将经比例缩放的编码模式参数除以固定比 例缩放因子并保留结果的整数部分来获得。由于自适应按整数步长调整了经比例缩 放的编码模式参数,因此实际的编码参数就象是由小数步长调整的一样。这称为“小 数自适应”,它允许对自适应速度的更精细控制。然后输出最终的更新后的编码模 式参数(框855)。再一次,在编码了每个输入值或串后更新当前经比例缩放编码 模式参数。然后,更新后的编码模式参数用于下一输入值或串的编码。
Golomh/Rice(G/R)参数自适应模块
图9是图4所示的自适应RLGR编码器200和方法的Golomb/Rice(G/R)参 数自适应模块440的操作的详细流程图。一般而言,G/R参数自适应模块440使用 具有新颖的自适应规则的后向自适应技术来更新初始G/R参数。更新是在编码数 字数据的每个值或串后执行的。
该操作始于接收初始G/R参数(框905)和自适应值(框910)作为输入,稍 后将描述其计算。随后做出关于自适应值是否等于零的判断(框915)。如果是, 则自适应规则将使经比例缩放的G/R参数减少第五整数常数(框920)。
如果自适应值不等于零,则做出关于自适应值是否等于一的判断(框925)。 如果是,则自适应规则保持经比例缩放的G/R参数不变(框930)。如果不是,则 自适应规则将经比例缩放的G/R参数增加自适应值(框935)。
一旦G/R参数已被更新,用更新后的G/R参数替换当前G/R参数(框940)。 这可通过将经比例缩放的G/R模式参数除以固定比例缩放因子并保留结果的整数 部分来获得。由于自适应按照整数步长调整经比例缩放的G/R模式参数,因此实 际G/R参数就象它是由小数步长来自适应的一样。再一次,这是“小数自适应”的 示例,它允许对自适应速度的更精细控制。当然,如果G/R参数保持不变(框930), 则不进行更新,且当前G/R参数是相同的。最后,输出更新后的G/R参数(框945)。
图10是自适应值计算模块1000的操作的详细流程图。参考图7和9,自适应 值计算模块1000产生作为图9的流程图的输入的自适应值(框910)。该操作始 于接收两个输入到图7的Golomb/Rice编码器(框720和745),即当前G/R参数 值(框1005)和输入值(框1010)。接着,输入值右移与G/R参数值相同的位数 (框1020)。结果值就是自适应值,随后输出它(框1030)。
VII. 工作示例
为了更全面地理解这里所公开的自适应RLGR编码器和方法,给出示例性工 作示例的操作细节。应该注意,这个工作示例只是其中可实现自适应RLGR编码 器和方法的一种方法。
游程Golomb/Rice(RLGR)编码器和方法是在以上提到的美国专利第6,477,280 号中公开的PTC熵编码器的扩展。然而,美国专利第6,477,280号的PTC熵编码 器是用于编码二进制数据的(一般是整数数据的位平面)。此处所公开的RLGR 编码器和方法可使用任意输入值来编码整数数据。换言之,此处所公开的自适应 RLGR编码器和方法可编码任意字母的数据。还应该注意,尽管此处所描述的 RLGR编码器和方法在数据可能包含零连串时更有效,但修改上述编码操作来计算 更可能出现在连串中的任何其它值的连串只是很小的问题。
此处所公开的RLGR编码器和方法的一个优点是,不象PTC熵编码器,不需 要了解输入数据的最大可能数。相反,RLGR编码器和方法可处理任意大小的输入 值,不论有多大。这意味着RLGR编码器假设输入数据具有如图1所示的拉普拉 斯分布,当突然有大数字出现在输入数据中,RLGR编码器和方法能够编码这个大 数字。尽管大数字将比小数字使用更多比特,但大数字仍将被编码。然而,使用更 多比特只在大数字出现时才自承其果,而不是对每个其它值。这归因于以下提出的 新模式选择和自适应规则。
用PTC熵编码器,接收输入数据、分解成位平面、然后用G/R编码器编码每 个位平面。在此处所公开的自适应RLGR编码器和方法中,G/R编码器被扩展成 直接处理拉普拉斯数据。这有自适应RLGR编码器和方法使用单次通过编码的优 点,使得它比PTC熵编码器要快得多。
PTC熵编码器的输入数据具有拉普拉斯分布,其中小数字更可能。有时,小 数字有更多可能,使得编码零连串对于比特流的特定部分更加有效。然而,PTC 熵编码器将拾取数据,在最高位平面上进行一次通过,并回去在下一位平面上进行 一次通过。例如,如果数据是16位,通过首先在位#16上完成并编码。当然,大 多数数据将是零,因为该位只对很大的数分割,然后继续向下。当到了位#5、4、3、 2和1,这些位具有许多零和一,这意味着它到达了编码它们已没有什么帮助的一 点。通常最低位是随机的,以至于必须用一个比特来编码这个位,即每个输入比特 都直接复制到输出。PTC熵编码带来的问题是位平面上的编码需要几次通过数据。 具体而言,PTC熵编码器不得不编码最高位、下一位、然后再下一位等等。显然, 这花费了太大量的时间,而且在某些情况下,PTC熵编码器比此处所公开的自适 应RLGR编码器和方法慢1.5到3倍。
选择编码器模式
图11是示出选择用于自适应RLGR编码器和方法的编码器模式的细节的工作 示例。该过程开始(框1105)于读取具有元素x(n)的输入向量,其中n=0,1,...,N-1 (框1110)。在这个工作示例中,输入向量具有与图1所示的拉普拉斯分布类似 的概率分布。概率分布由单个参数来表示,它是指数衰减速率。图1所示的拉普拉 斯衰减下降得相当快。实际上,衰减一般可以更快或更慢。衰减速率越快,则值越 可能等于零。
自适应RLGR编码器和方法对于整数的有效编码是有用的。特别地,这发生 在有需要有效地编码的全是整数的向量(或缓冲区)时。通常,整数数据将是这样 的,小数字比大数字更可能。且如果数据概率分布的衰减速率足够高(意味着指数 快速衰减),这意味着零变得更可能。在这种情况下,编码零连串是个好方法。
在这个工作示例中,输入数据具有与图1所示的理想状态相似的概率分布, 因为要编码的数据(或输入数据)不是原始多媒体数据。例如,在音频文件的情况 下,自适应RLGR编码器和方法不直接应用于每个音频样值。类似地,在图片文 件的情况下,自适应RLGR编码器和方法不应用于每个像素值。相反,在许多应 用(包括音频和图像编码)中,存在数据的某个模型。这意味着某些预测器可用于 做出数据应该是什么的合理猜测。因而,预测误差可以是输入数据,且就是要编码 的预测误差。预测误差是实际值和预测值之间的差异。而且,如果数据模型是合理 的,预测误差更可能为零。但即使是好的模型,偶尔有一个大的值也是可能的。这 会发生在到达边界时,诸如当像素值从背景值到了前景值。换言之,即使是如图1 所示的概率分布,时不时也有大数字会出现。在其它多媒体编码应用中,原始数据 值(例如音频样值或像素)经由变换运算来变换,其目的是将信息集中在少量大值 变换系数和大量小值变换系数上。这些系数然后被量化(舍入为最接近的整数)。 这样,当读取所有量化后的变换系数为向量时,该向量的元素更可能包含小值,而 且因而相当适用于经由此处所公开的自适应RLGR编码器和方法的压缩。
此外,自适应RLGR编码器和方法是无损的。无损压缩意味着输入数据被压 缩进较小尺寸并且随后可被解码以恢复为与原来完全相同的输入数据值。相反,有 损压缩不能恢复与原始输入数据完全相同的值。音频和视频压缩可使用有损压缩。 但是,在许多这种有损压缩技术中,对数据生成变换或预测器。变换或预测器随后 被量化,意味着它们被舍入为最接近的整数。一旦获得这些整数,通常使用无损压 缩。这意味着大多数多媒体有损编解码器通常具有无损编码器部分,以编码经量化 的预测和变换运算的整数值。自适应RLGR编码器和方法可用于编码这些整数值。 通常,这些整数值的每一个都具有相关联的概率分布函数(PDF)。这些PDF都 类似于图1的概率分布,其意在于如果模型是好的,则大多数时间里预测误差应接 近于零。
参考图11,接下来初始化编码参数{s,S}和{k,K}(框1115)。然后计数器n 和run被设为零(框1120)。在这个工作示例中,s是编码模式参数,S是经比例 缩放的编码模式参数,k是G/R参数,而K是经比例缩放的G/R参数。通常,s 控制编码模式及如何使用游程编码器,而k控制G/R编码器。参数s=S/L,其中L 是比例缩放参数。在这个工作示例中,L等于16,它是2的幂。这使得除法能够 通过只做位移来执行。
自适应RLGR编码器和方法具有两种不同的编码模式。第一编码模式只执行 Golomb/Rice(G/R)编码,而没有任何游程编码。当数据中零不是那么可能的时 候,应用该单G/R模式,这样将不会频繁地有零连串。第二编码模式执行游程加 G/R编码。当输入数据中零连串非常可能时,使用该RLGR编码模式,这样编码 零连串节省了比特。从而,存在两种不同的编码模式,且自适应RLGR编码器和 方法根据编码模式参数s的值在编码模式之间自动选择和切换。
做出关于s是否等于零的判断(框1123)。如果是,则编码模式为单G/R模 式。在这种情况下,输入数据x(n)是使用自适应G/R编码器来编码的(框1130)。 如果s不等于零,则编码模式是RLGR模式。这种情况下,输入数据x(n)是使用自 适应游程编码器和自适应G/R编码器来编码的(框1135)。接着,用n+1替换n (框1140),并做出关于n是否等于N的判断(框1145)。如果否,则过程以新 的x(n)重新开始(点1150)。否则,写输出比特流(框1155),且该过程对给定 输入数据完成(框1160)。
编码规则
自适应RLGR编码器和方法使用新颖的编码规则,它们基于编码模式参数s 和G/R参数k。表2给出自适应RLGR编码器和方法用于将整数值x映射到二进 制比特流的编码规则。从表2中可以看出,由参数{s,k}控制代码。参数s控制操作 的主模式(单G/R或者游程+GR),而参数k控制G/R编码器。   s=0   “单Golomb/Rice”模式   x≥0:u=2|x|   x<0:u=2|x|-1 代码=GR(u,k)   s>0   “游程+Golomb/Rice”模式   r=2s个值x=0的连串 代码=0   r<2s个值x=0的连串,   后面跟着值x≠0 x>0:u=2|x|-1 x<0:u=2|x|-2 代码=1+bin(r,s)+GR(u,k)
                                  表2
在这个工作示例中,定义映射值u。自适应RLGR编码器和方法的输入值x 可正可负。输入值x映射到值u,其中u只有正值。因而,带符号的输入值x被转 换成不带符号的等价表示u。公式4给出从x到u的映射。具体而言,该映射表示, 0映射到0、1映射到1、-1映射到2、2映射到3、-2映射到4等等,因而u值总 是正的。这完成后,就可使用G/R表(表1),因为G/R表只用于非零值。这种 映射使得自适应RLGR编码器和方法能处理任何输入字母。换言之,由于使用了 G/R表(它可处理任何输入数),因此输入字母可以是无限的,且自适应RLGR 编码器和方法可处理任意大小的数字输入。自适应RLGR编码器和方法只受限于 操作系统可处理的数字的大小。应该注意,实际上,G/R编码表1不需要存储在存 储器中。很容易明白,表条目具有足够的结构,使得对于任意u值和编码参数k, 都能方便地计算出码字。
给定u数据,表2给出该方法中的代码,只要参数s和k是已知的。表2中 的规则精确定义了编码器如何编码,这意味着解码器可使用表2中的相同规则来恢 复(或解码)已编码数据。
在单G/R模式中,也即s=0,表2陈述使用自适应G/R编码器和表1例示的 G/R编码规则来编码输入值x的映射值u。因而,用于编码x的码字基于u和k值。 G/R参数k是使用后向自适应技术来更新的,如以下详细讨论。
在RLGR模式中,也即s>0,输入数据被视为r个值x=0的连串。观察表2 中关于RLGR模式,在一种情况中(第二行),输入数据为2s个值x=0的连串。 这称为完全连串。作为示例,假设s=3。如果一行中输入数据是23=8个零,则该 连串使用表2的规则被编码为等于0的单个比特。换言之,8个零的整个连串被映 射到其值为0的单个比特。解码器了解,如果它读取一个0,它必须将它解码为2s 个零的串。这种情形下,达到了最大压缩。本发明所达到的总压缩是RLGR模式 和G/R模式的平均。
如果输入数据有少于2s个零的连串,则该连串为不完全连串。参考表2,第 三行,如果输入数据一行中只有例如7个零(或少于2s),则码字不能为0,因为 0指一行中8个零,即完全连串。因此,码字必须起始为1;这通知解码器,后面 跟着不完全连串。接着,码字包含不完全连串长度的二进制表示。该二进制表示使 用了s个比特来指明不完全连串的长度r。
例如,假设r=7,这样不完全连串具有7个零。那么码字首先始于“1”,以便 让解码器了解后面跟着一个不完全连串。由于在这个示例中s=3,则不完全连串的 长度只能是0到7之间的一个数(由于只占了3个比特来表示0到7之间的一个数)。 换言之,r不能占据超过s个比特来表示。因此追加该码字以包括等于111(二进 制7)的3个比特。现在,解码器了解了该连串是不完全连串且该连串长度为7个 零。
接下来,追加该码字,以表述什么值紧跟在该不完全连串后。跟在不完全连 串后的该值由来自自适应G/R编码器的码字表示。如表2所示,首先,不完全连 串后的值通过使用公式4映射。然后,使用自适应G/R编码器获得G/R码,它是 {u,k}的函数。表2右下格底部示出用来编码不完全连串的完整码字:代码 =1+bin(r,s)+GR(u,k),其中bin(r,s)是由s个比特表示的不完全连串的长度r的二进 制表示,而GR(u,k)是由表示紧跟在不完全连串后的值的表1给出的G/R码。
小数自适应
小数自适应使用S和K来代替s和k。小数自适应是减慢自适应的一种方法。 使用没有小数自适应的自适应RLGR编码器和方法是可能的。然而,如果没有小 数自适应,则自适应通常变化太快,而无法正确追踪用于输入数据的最优参数。
在这个工作示例中,s和k参数的自适应是使用经比例缩放的S和K参数来 完成的。因而,更新S和K而非s和k。s和S以及k和K之间的关系如下:s=S/L 以及k=K/L,其中L是如上解释的比例缩放参数。因此,当进行自适应时,自适应 S值,而S除以L就获得s值。注意,所有值都是整数,所以通过s=S/L,意味着 是结果的整数部分。还要记住,固定比例缩放参数L被设为等于2的幂的值(例 如L=16),则除以L的除法可通过位移运算来有效执行。
小数自适应是较佳的,因为自适应RLGR编码器和方法对生成的每个代码都 进行了参数(s和k)的调整。换言之,在编码了输入值或串后,运行自适应规则。 如果s和k直接通过整数值变化来自适应,则由于它们是整数,所有可做的是保持 相同或至少增减1。然而,假设输入数据变得更大,意味着参数应该增加。如果增 加s,如加1,它可能太多了。例如,如果s=3,则8个零的连串将被编码。s增加 1,s则等于4,这意味着现在经由单个码字=0编码了16个零的连串。从8到16 的跳跃有点大了。当编码下一串时,它会发现s太大,而减少s到3。然而,这可 能太小了,而s是振荡的。
小数自适应允许s的小数增加。例如,s可以用.5代替1来增加。然而,这是 不允许的,因为s是整数参数。因此小数自适应执行S的整数增加,且用L除以S 给出s的小数增加。例如,假设L=16,s=3,这意味着S=48。假设输入数据变得 更小,则S应该增加。下一次S从48增加到52,当除以16时,s仍为3,但S是 52。如果另一小输入数据出现,则S应该从52增加到64,而当S=64时,则s=4。 这样,花了两次发现输入数据值中的减少以从s=3变成s=4,而不是只因为出现一 个较小的输入数据s就立即跳到4。这保证了参数s和k没有振荡。
作为使用自适应,定义一个标志是可能的,这样如果数据有增减,在增减该 参数前通过则某些数量的编码周期。可定义追踪编码周期数的新参数。换言之,该 参数将追踪在参数改变前条件(输入数据增加或减少)发生了多少次。但是应该注 意,这一技术是经试验的,且小数自适应提供了较好的结果。
编码模式参数自适应
编码模式参数s在编码了每个输入值或串后被自适应。当使用小数自适应时, 实际自适应了小数编码模式参数S,而非直接自适应s。表3给出编码模式参数s 的自适应规则。在自适应后,s的值被设为s=S/L,其中L是比例缩放参数。在这 个工作示例中,L等于二的幂,因此除法可由右移来实现。在这个工作示例中,L= 16。   s=0   “单Golomb/Rice”模式   |x|=0:S←S+A1   |x|>0:S←S-B1   s>0   “游程+Golomb/Rice”模式   r=2s个值x=0的连串   代码=0   r<2s个值x=0的连串,   后面跟着值x≠0   S←S+A2   S←S-B2
                         表3
在表3上部,给出当编码器处于单G/R模式时s自适应的规则。如果要编码 的码元x的绝对值等于0,则参数s增加称为A1的第一整数常数。左向箭头(←) 指S由S+A1置换。如果x的绝对值大于0,则参数s减少称为B1的第二整数常 数。整数常数A1和B1都是说明s应该向上或下调整多少的增量或减量。
在表3的下部,给出当编码器处于RLGR模式时s自适应的规则。如果连串 是完全连串,意味着该连串包含2s个值x=0,则参数s增加第三整数常数A2。但 如果连串是部分连串,意味着该连串包含少于2s数量的零并跟着一个不是零的x 值,则参数s减少第四整数常数B2。使用这些自适应规则,参数s(或S,如果使 用了小数自适应)在编码了每个输入值或串后被更新。
通过使用包含在表3中的自适应规则,隐式测算出输入数据的概率模型。事 实上,不是先测算概率随后尝试自适应参数,而是参数直接被改变了。在这个工作 示例中,找到以下值来达到极好的效果:L=16,A1=3,B1=3,A2=4,B2=6以及 B3=2。如果使用了适当的A1、B1、A2、B2值,则可观察到实际上自适应RLGR 编码器和方法将比现有技术更快地追踪输入数据的统计量中的变化。这是因为现有 技术首先测算整个统计模型,然后调整参数,诸如G/R参数。现有技术这样做是 因为为了计算合理的概率估算,需要大量的数据。唯一可用的数据是当前解码的值 和以前解码的值。这意味着为使概率估算精确,必须在可进行概率估算和找到G/R 参数之前使用大量数据。即,在编码过程中将有延迟。例如,如果正在编码音频文 件,则在检测输入数据中的变化时存在延迟。这意味着G/R参数不匹配一段时间 中的输入数据。换言之,表3(对于s参数)和下面表4(对于k参数)所给出的 自适应规则要快得多,并且比现有技术方法更快地自适应输入数据的统计量。事实 上,这是超过现有技术的巨大优点,即对输入数据的统计量的快速自适应。
单Golomb/Rice模式
图12是示出单G/R模式编码细节及附随的编码模式参数s自适应的工作示例。 该过程开始(框1205)于读取输入向量x(n)(框1210)。单G/R模式的二个主要 过程是码元编码(框1215)和编码模式参数自适应(框1220)。码元编码过程开 始于定义映射值u(框1225),如表2对于单G/R模式所示的。接着,使用自适 应G/R编码器来编码输入值(框1230)。应该注意,自适应G/R编码器使用了 G/R参数k自适应,如图14所示。码元编码过程结束于将G/R码追加到输出编码 比特流(框1235)。
编码模式参数自适应过程开始于确定u值是否等于零(框1240)。如果否, 则更新S并用S增加第一整数常数A1来替换(框1245)。如果u不等于零,则 更新S并用S减少第二整数常数B1来替换(框1250)。最后,设置s等于S除以 L(框1255),且该过程结束(框1260)。
RLGR模式
图13是示出RLGR模式编码细节和附随的编码模式参数s自适应的工作示例。 该过程开始(框1305)于读取输入向量x(n)(框1310)。再一次,RLGR模式的 两个主要过程是码元编码(框1315)和编码模式参数自适应(框1320)。但这次, 码元编码过程使用了自适应游程编码器和自适应G/R编码器来编码输入值x(n)。
码元编码过程开始于确定x值是否等于零(框1325)。如果这样,则run由 run+1替换(框1330)。接着,确定是否run=2s(框1335)。换言之,连串是完 全连串还是不完全连串。如果连串是不完全连串,则该过程结束(点1340)。如 果连串是完全连串,则比特=0追加到比特流(框1345)。然后设置run值等于零 (框1350)。
如果x值不等于零(框1325),则比特=1追加到比特流(框1355)。接着, run的s位二进制值(或由s个比特表示的不完全连串长度)追加到比特流(框1360)。 然后使用自适应G/R编码器来编码不完全连串后的值。具体而言,定义映射值u (框1365),使用自适应G/R编码器来编码该值,并将G/R码追加到比特流(框 1370)。再一次,应该注意,自适应G/R编码器使用G/R参数k自适应,如图14 所示。码元编码过程结束于设置run等于零(框1380)。
如果值x等于零(框1325),编码模式参数自适应过程更新S并用S增加第 三整数常数A2来替换(框1385)。如果x值不等于零(框1325),则更新S并 用S减少第四整数常数B2来替换(框1390)。最后,该过程设置s等于S除以L (框1395)且该过程结束(框1398)。如前面所指出的,如果L值选择为二的幂, 则除以L的除法可通过位移运算来实现。
Golomb/Rice(k)参数自适应
G/R参数k在编码了每个输入值或串后被自适应。当使用小数自适应时,实 际上自适应经比例缩放的G/R参数K,而非直接自适应k。表4给出用于G/R参 数k的自适应规则。在编码了值u后,通过自适应值p=u>>k来控制自适应,这意 味着u向右移k位。在自适应后,k的值被设为k=K/L,其中L是常数。在这个工 作示例中,L=16。   p=0   通过设置K←K-B3来减少K   p=1   不改变   p>1   通过设置K←K+p来增加K
          表4
表1的G/R码取决于参数k。例如,如果一个不完全连串后的值为13,13的 GR码是“1111111111110”(对于k=0),且如果k=1,则为“11111101”。k越大, 则表示13的数将越小。而k越小,则表示13的数将越大。因而,参数k必须已知。 这意味着如果对s和k选择了合适的值,自适应RLGR编码器和方法会完成得很 好。但是,使用k的大值并不总是有利的,因为这将对于输入数据的较小值产生较 长串,如表1所示。换言之,k值的合适选择取决于输入数据。如果值为13,则使 用k的大值是个好主意。但是,假设不完全连串后的值为“1”。则k的较小值是所 希望的。因而,对于不完全连串之后的小值,使用小k更好,而对于大值,使用大 k更好。因此,k的选择与值的概率有关。在现有技术中,有对为此目的的大量理 论成果:输入数据的概率已知(例如,如果输入数据是拉普拉斯,其中存在控制衰 减的单个参数),则有众所周知的公式,从中可计算要使用的衰减参数,即参数k。 这平均起来使映射使用尽可能少的比特。
因而,k参数是自适应的是很重要的。以这种方法,如果在输入数据上有大值 出现,则k应该增加,因为对于大值,k越大越好。另一方面,如果有较小值出现, 则k应该减少。直观上,能够明白,对于大数字,k应该增加,而对于小数字,k 应该减少。因此,只要k以足够小的幅度改变(诸如当使用小数自适应时),对于 输入数据的最优参数将总是被正确地追踪。
表4所示的k的自适应规则是相当新颖的。在自适应RLGR编码器和方法中, 任何值都可在不完全零连串后出现,因此这个值必须被编码。编码是使用自适应 G/R编码器和G/R参数k来完成的。参考表4,输入数据是x。输入数据x可以是 任何整数,小x更可能(可以是正的或是负的)。但是,G/R编码只用于正数。x 的直接映射(见公式4)用于将x映射成u。k的自适应是由自适应值p来控制的, p被定义为u向右移k位。因而,自适应值p是u的按比例缩小形式。或者,等价 地,p参数是近似于u/2k的整数。向右移k位等于将此数除以2k。例如,如果一个 数向右移5位,这就与将此数除以32(即25)相同。余数被舍去,而只使用商。
参考表4,如果自适应值p等于零,则K被更新并由K减少第五整数常数B3 来替换。如果自适应值p等于一,则K不变。如果自适应值p大于一,则K被更 新并由K减少自适应值p来替换。
如果p的自适应值等于一,这意味着u值接近于2k,且就是对它们而言参数k 是正确的那些值。因此,如表4所示,没有变化。如果自适应值p的值是0,这意 味着输入值小于2k。即要开始减少k(因为输入值小于2k)。自适应值p大于1的 情况是不太可能的,因为输入值不可能非常大。但如果数字是大的且p>1,则要开 始增加k参数。
自适应G/R编码器
图14是示出自适应G/R编码器模块的编码细节的工作示例,包括G/R参数k 自适应规则。应该注意,k自适应用于单G/R模式和RLGR模式两者,但未在图 12和13中示出以免弄乱附图。该过程开始(框1405)于读取输入值u(框1410)。 自适应G/R模式的两个主要过程是G/R编码(框1415)和G/R参数自适应(框1420)。
G/R编码过程始于计算自适应值p和v(框1425)。向比特流追加等于一的p 个比特(框1430)。v的k位二进制值则被追加在该比特流后(框1435)。这些 操作包括如表1所定义的Golomb/Rice编码器。
G/R参数自适应过程包括确定自适应值p是否等于一(框1440)。如果是, 则自适应值p保持不变(点1445)。否则,做出关于自适应值p是否等于零的另 一判断(框1450)。如果不是,则K被更新并用K减少第五整数常数B3来替换 (框1455)。否则,K被更新并用K增加自适应值p来替换(框1460)。最后, 该过程设置k等于K除以L(框1465),并且该过程结束(框1470)。
结果
该工作示例的RLGR编码器和方法已在图像、音频和地图数据压缩的应用中 实现。在这些应用中使用RLGR编码器和方法的结果是压缩比可与最复杂熵编码 器相比,但以更简单的实现方式。
特别地,对于用于整数数据的现有熵编码器,RLGR编码器和方法对于大量 如图1中的源码元概率分布达到了接近于理论最大值(由源熵所规定的)压缩比。 作为示例,众所周知的Golomb/Rice和Huffman编码器只对于每码元1个比特或更 高些的源熵有效。
VIII.解码
自适应RLGR编解码器和方法还包括可基于上述编码器精确实现的解码器。 参考图2B,计算设备(框250)可以只实现RLGR解码器240。自适应RLGR解 码器240和方法从已编码比特流接收码字(框230)。接着,自适应RLGR解码器 240通过应用对应于单G/R模式或RLGR模式中的规则的逆规则来解码码字。接 下来,编码模式和G/R参数使用与编码器的规则(以上所述的)完全相同的规则 来自适应。最后,输出解码后的(或重建的)整数数据(框260)。
由于编码规则是唯一可解码的,且解码器的自适应规则与编码器的相同,因 此前面描述的编码规则和自适应规则也精确地描述了解码器的操作。
本发明的以上描述已为说明和描述之途而给出。它并不旨在穷尽本发明或将 本发明限于所公开的精确形式。各种修改和变体鉴于以上示教都是可能的。本发明 范围不受本发明详细描述所限,而只受所附权利要求书所限。
QQ群二维码
意见反馈