编码坐标内插符、解码比特数据流的装置及方法

文档序号:7966211阅读:169来源:国知局
专利名称:编码坐标内插符、解码比特数据流的装置及方法
技术领域
本发明涉及用于编码和解码合成图像的装置和方法,尤其涉及用于编码和解码一种坐标内插符的装置和方法,该坐标内插符使用每个都包括x、y、z分量的顶点坐标表示在一个基于关键帧的图形动画中的目标的每个顶点的位置。
背景技术
三维(3D)动画技术已经广泛地采用在3D计算机游戏或虚拟现实计算机应用中。虚拟现实模型语言(VRML)是这种3D动画技术的一个典型实例。
国际多媒体标准,例如用于场景(BIFS)的MPEG-4和虚拟现实模型语言(VRML),使用一个内插符节点支持基于关键帧的3D动画。在MPEG-4BIFS和VRML中,有各种类型的内插符,包括标量内插符、位置内插符、坐标内插符、定向内插符、法线内插符和色彩内插符,这些内插符以及其功能和特性在表1中示出。
表1

在表1所示的内插符中,坐标内插符被用于表示在基于关键帧的动画中构成3D目标的每一顶点位置上的信息,并且包括关键字字段和关键值字段。关键字字段使用范围在-∞和∞之间的不连续数字,表示在时间轴上每一关键帧的位置。每一个关键值字段规定了在由每一关键字表示的确定瞬时的构成3D目标的每一个顶点位置上的信息,并且包括三个分量x、y和z。每一个关键值字段包括与关键字字段一样多的关键字值。在这种基于关键帧的动画中,预定的关键帧定位在一个时间轴的任意位置,并且由线性内插填充在关键帧之间的动画数据。
由于MPEG-4 BIFS和VRML中采用线性内插,所以要求相当量的关键字数据和关键值数据来使用线性内插符把一个动画表现得尽可能地自然和平滑。此外,为了存储和发送这种自然和平滑的动画,需要相当大容量的存储器和可观的时间。因此,最好是选择压缩内插符,以便使得更容易存储和发送该内插符。
在已经采用在MPEG-4 BIFS中用于编解码内插符节点的方法之一的预测MF字段编码(PMFC)中,使用量化器、差分脉码调制(DPCM)操作器和熵编码器编码坐标内插符的关键值数据,如图1所示。参考图1,量化器和DPCM操作器消除该关键值数据的冗余,该DPCM操作器把其操作的结果输出到熵编码器。然而,PMFC在对关键值数据进行编码中不是充分有效,因为其只熵编码从一般DPCM操作获得的差分数据,并且仅考虑在一个动画中构成3D目标顶点之间的空间相关性而不考虑在这种顶点之间的时间相关性,在一个基于关键帧的动画中,这种时间相关性是很重要的。

发明内容
为了解决上述和其它问题,本发明的一个方面是提供一个用于编码坐标内插符的装置,包括一个关键字数据编码器,其以高效率压缩动画关键字数据,同时缩减在数据当中的冗余度;和一个关键值数据编码器,其考虑在关键值数据之间的时间相关性以及在关键值数据之间的空间相关而编码关键值数据。
本发明的另一方面是提供一种用于解码的装置,解码由根据本发明的用于编码坐标内插符的装置编码的一个比特数据流。
本发明的另一方面是提供一种记录介质,能够以高压缩比率提供一个高质量的动画,其上记录有由根据本发明的用于编码坐标内插符的方法和装置所编码并且由根据本发明的用于解码坐标内插符的方法和装置待解码的一个比特数据流。
因此,为了实现本发明的上述和其它方面,提供一个用于编码坐标内插符的装置,该坐标内插符包括指示在时间轴上的每一关键帧的位置的关键字数据;以及使用每一个都包括x、y和z分量的顶点的坐标表示在每一关键帧中的一个目标的每一顶点的位置的关键字数据。该装置包括一个关键字数据编码器、一个关键值数据编码器和一个标题编码器。该关键字数据编码器包括一个第一量化器,其使用预定的量化比特量化坐标内插符的关键字数据,一个第一DPCM处理器,其产生该量化的关键字数据的差分数据,一个DND处理器,其根据在差分数据和在该差分数据当中的一个最大值和一个最小值之间的一个关系对于该差分数据执行一个DND操作,以及一个第一熵编码器,其熵编码从该DND处理器输入的该差分数据。该关键值数据编码器包括一个第二量化器,其使用预定的量化比特量化坐标内插符的关键值数据;一个第二DPCM处理器,其通过对于该量化关键值数据的每一顶点的分量执行一个预定的DPCM操作而产生基于量化关键值数据的每一顶点坐标的时间变化的差分数据和基于量化关键值数据的每一顶点坐标的空间变化的差分数据;一个字典编码器,其产生表示每一顶点的DPCM的差分数据和已经对于该差分数据执行的一个DPCM操作模式的符号以及指示该符号的位置的索引;和一个第二熵编码器,其熵编码该符号和该索引。该标题编码器,编码为了解码由该关键字数据编码器和该关键值数据编码器编码的一个比特数据流所需要的信息。
为了实现本发明的上述以及其它方面,提供有一个用于解码一个比特数据流的装置,其中编码有坐标内插符,该坐标内插符包括指示在一个时间轴上每一关键帧的位置的关键字数据和使用每一个都包括x、y和z分量的顶点坐标表示在每一关键帧中的一个目标的每一顶点的位置的关键值数据。该装置包括一个关键字数据解码器和一个关键值数据解码器。该关键字数据解码器包括一个标题解码器,其解码为了解码来自输入比特数据流的关键字数据和关键值数据所需要的标题信息并且输出该解码的标题信息;一个第一熵解码器,其熵解码该输入的比特数据流并且输出解码的关键字数据的差分数据;一个反向DND处理器,其根据由该标题解码器从该输入比特数据流读出的DND阶数,通过对于该差分数据执行一个反向DND操作而扩展该熵解码的关键字数据的差分数据的范围;一个第一反向DPCM处理器,其对于从该反向DND处理器输入的差分数据执行与从该标题解码器输入的DPCM的阶数一样多次的反向DPCM操作,并且输出量化的关键字数据;以及一个第一反向量化器,其反向量化该量化的关键字数据并且输出解码的关键字数据。该关键值数据解码器包括一个第二熵解码器,其通过熵解码该输入的比特数据流而产生将要被字典解码的数据,包括关键值数据的差分数据的符号、指示该符号的位置的索引和一个DPCM操作模式;一个字典解码器,其根据从该标题解码器输入的一个字典解码模式信息,通过执行一个字典解码操作而产生关键值数据的差分数据;一个第二反向DPCM处理器,其根据该DPCM操作模式,通过恢复从该字典解码器输入的关键帧之间的差分数据和顶点之间的差分数据而产生量化数据;以及一个第二反向量化器,其通过反向量化该量化的数据而产生恢复的关键值数据。
为了实现本发明的上述以及其它方面,提供有一个比特数据流,其中编码有坐标内插符,该坐标内插符包括指示在一个时间轴上每一关键帧的位置的关键字数据和使用每一个都包括x、y和z分量的顶点坐标表示在每一关键帧中的一个目标的每一顶点的位置的关键值数据。该比特数据流包括关键字数据编码/解码信息,其中编码有关键字数据和为了解码该关键字数据所需要的信息;和关键值数据编码/解码信息,其中编码有关键值数据和为了解码该关键值数据所需要的信息。该关键字数据信息包括反向DND操作信息,包括表示将要对于由熵解码该比特数据流产生的差分数据执行的反向DND的预定的周期数的反向DND的阶数,以便扩展该差分数据的范围以及使用在反向DND操作的每一周期中的差分数据当中的最大和最小值;第一反向DPCM操作信息,包括将要对于该反向DND的差分数据执行的反向DPCM操作的阶数,以便把该反向DND的差分数据转换成被用于反向DPCM操作的每一周期的关键字数据和帧内关键字数据;和使用在反向量化中的第一反向量化信息,以便通过反向量化该量化的关键字数据而产生恢复的关键字数据。该关键值数据编码/解码信息包括从该比特数据流熵解码的字典解码信息,包括关于表示被字典编码的关键值数据的差分数据的符号的信息;第一位置索引,指示该符号的位置;和字典解码模式,指示将要对于该第一位置索引执行的一个字典解码方法;第二反向DPCM操作信息,包括指示符号位置的第二位置索引,其被使用在把每一顶点的分量的字典解码的差分数据转换成量化关键值数据的一个反向DPCM操作中,并且对应于反向DPCM操作模式的组合;以及使用在反向量化中的第二反向量化信息,以便通过反向量化该量化的关键值数据而产生恢复的关键值数据。
根据本发明的一个方面,提供了一种用于解码比特数据流的方法,所述比特数据流中编码有坐标内插符,所述坐标内插符包括关键字数据和包含与所述关键字数据有关的信息的关键字标题,所述关键字数据表示在时间轴上的关键帧的位置,该方法包括(a)解码关键字标题;以及(b)根据在(a)中执行的解码的结果而解码关键字数据。
根据本发明的一个方面,提供了一种用于编码坐标内插符的方法,所述坐标内插符包括关键字数据和包含与关键字数据有关的信息的关键字标题,所述关键字数据表示在时间轴上的关键帧的位置,该方法包括(a)编码关键字标题;以及(b)根据在(a)中执行的编码的结果而编码关键字数据。
根据本发明的一个方面,提供了一种用于解码比特数据流的装置,所述比特数据流中编码有坐标内插符,所述坐标内插符包括关键字数据和包含与所述关键字数据有关的信息的关键字标题,所述关键字数据表示在时间轴上的关键帧的位置,该装置包括关键字标题解码单元,其解码关键字标题;以及关键字解码单元,其根据由关键字标题解码单元执行的解码的结果而解码关键字数据。
根据本发明的一个方面,提供了一种用于编码坐标内插符的装置,所述坐标内插符包括关键字数据和包含与所述关键字数据有关的信息的关键字标题,所述关键字数据表示在时间轴上的关键帧的位置,该装置包括关键字标题编码单元,其编码关键字标题;以及关键字编码单元,其根据由关键字标题编码单元执行的编码的结果而编码关键字数据。
根据本发明的一个方面,提供了一种用于解码比特数据流的方法,所述比特数据流中编码有坐标内插符,所述坐标内插符包括关键值数据和包含与所述关键值数据有关的信息的关键值标题,所述关键值数据使用多个由x、y和z分量组成的顶点中的每个的坐标,而表示关键帧上的目标的形状和位置,该方法包括(a)解码关键值标题;以及(b)根据在(a)中执行的解码的结果而解码关键值数据。
根据本发明的一个方面,提供了一种用于编码坐标内插符的方法,所述坐标内插符包括关键值数据和包含与所述关键值数据有关的信息的关键值标题,所述关键值数据使用多个由x、y和z分量组成的顶点中的每个的坐标,而表示关键帧上的目标的形状和位置,该方法包括(a)编码关键值标题;以及(b)根据在(a)中执行的编码的结果而编码关键值数据。
根据本发明的一个方面,提供了一种用于解码比特数据流的装置,所述比特数据流中编码有坐标内插符,所述坐标内插符包括关键值数据和包含与所述关键值数据有关的信息的关键值标题,所述关键值数据使用多个由x、y和z分量组成的顶点中的每个的坐标,而表示关键帧上的目标的形状和位置,该装置包括关键值标题解码单元,其解码关键值标题;以及关键值解码单元,其根据由关键值标题解码单元执行的解码的结果而解码关键值数据。
根据本发明的一个方面,提供了一种用于编码坐标内插符的装置,所述坐标内插符包括关键值数据和包含与所述关键值数据有关的信息的关键值标题,所述关键值数据使用多个由x、y和z分量组成的顶点中的每个的坐标,而表示关键帧上的目标的形状和位置,该装置包括关键值标题编码单元,其编码关键值标题;以及关键值编码单元,其根据由关键值标题编码单元执行的编码的结果而编码关键值数据。


通过参照附图对优选实施例的详细描述,本发明的上述目的和优点将变得更为显见图1是传统坐标内插符编码器和传统坐标内插符解码器的框图;图2是一个根据本发明一个优选实施例的用于编码坐标内插符装置的框图;图3A是一个根据本发明一个优选实施例的关键字数据编码器的框图;图3B是一个图3A所示的DND处理器的框图;图4A至4G是一个按照本发明一个优选实施例用于编码关键字数据方法的流程图;图5是一个表示函数encodeSignedAAC的一个实例的示意图;图6A至6J是表示关键字数据的示意图,该关键字数据已经经过了一个按照本发明优选实施例的关键字数据编码操作;图7A是一个根据本发明优选实施例的关键值数据编码器的框图,而图7B是一个根据本发明优选实施例的用于编码坐标内插符的关键值数据的一种方法的流程图;图8A是一个在根据本发明优选实施例的关键值数据编码器中的DPCM处理器的框图,而图8B是一个根据本发明优选实施例的字典编码器的框图;图9A是一个根据本发明优选实施例的量化操作的流程图,图9B是一个根据本发明优选实施例的DPCM操作的流程图,图9C是一个根据本发明优选实施例的字典编码操作的流程图,而图9D是一个根据本发明优选实施例的熵编码操作的流程图;图10A至10C分别是说明量化的关键值数据、DPCM的关键值数据和循环量化的关键值数据的示意图;图11A是一个说明根据本发明优选实施例的DPCM模式编码方法的示意图,图11B是一个说明根据本发明优选实施例的出现模式编码方法的示意图,而图11C是一个说明根据本发明优选实施例的增量模式编码方法的示意图;图12是一个根据本发明一个优选实施例的用于解码坐标内插符的装置的框图;图13是一个根据本发明一个优选实施例的关键字数据解码器的框图;图14A是一个根据本发明优选实施例的用于解码关键字数据的一种方法的流程图,而图14B是图14A所示步骤S14500的详细流程图;图15A是一个根据本发明优选实施例的用于解码关键值数据的装置的框图,而图15B是根据本发明优选实施例的用于解码关键值数据的一种方法的流程图;图16A是一个根据本发明优选实施例的字典解码器的框图,而图16B是一个在根据本发明的一个用于解码关键值数据的装置中的反向DPCM处理器的框图;图17A是一个根据本发明优选实施例的字典解码方法的流程图,而图17B是一个反向DPCM操作的流程图;图18A是一个表示比特数据流的结构的示意图,该比特数据流包括坐标内插符的顶点和其成份数据;
图18B是一个表示程序代码的实例的示意图,通过该程序代码实现使用在根据本发明的一个熵解码器中的一个函数decodeSignedQuasiAAC();图19A是一个说明根据本发明优选实施例的一种DPCM模式解码方法的示意图,图19B是一个说明根据本发明优选实施例的出现模式解码方法的示意图,而图19C是一个说明根据本发明优选实施例的增量模式解码方法的示意图;以及图20A至20L是示出SDL程序代码的实例的示出,通过该SDL程序代码,实现根据本发明优选实施例的用于对坐标内插符的关键字数据和关键值数据进行解码的装置。
具体实施例方式
下面,将参照表示本发明优选实施例的附图更详细地描述根据本发明优选实施例的用于编码坐标内插符的装置。
图2是根据本发明一个优选实施例的用于编码坐标内插符的装置的框图。参考图2,用于编码坐标内插符的装置包括关键字数据编码器300,编码输入其中的坐标内插符的关键字数据;关键值数据编码器700,编码输入其中的坐标内插符的关键值数据;和标题编码器500,编码为了解码由关键字数据编码器300编码的关键字数据和由关键值数据编码器700编码的关键值数据所需要的信息。
下面参照图3A至6J对关键字数据编码器300进行描述。
图3A是关键字数据编码器300的一个框图。参考图3A,关键字数据编码器300包括一个线性关键字编码器310、一个量化器320、一个DPCM处理器330、一个移位器340、一个折叠处理器350、一个DND处理器360和一个熵编码器370。
线性关键字编码器310识别一个区域,其中该关键字数据在一个完整的关键字数据范围中线性地增加,并且编码该区域。量化器320使用能够最小化一个量化误差的量化方法量化输入其中的关键字数据。DPCM处理器330接收量化的关键字数据并且产生该量化的关键字数据的差分数据。移位器340从所有的差分数据减去具有最高频率的一个差分数据。折叠处理器350把所有的的差分数据变换到一个正数区域或一个负数区域。DND处理器360通过执行一个分割操作,然后有选择地对于该差分数据执行一个上分割操作或一个下分割操作,来减小关键字数据的差分数据的范围。熵编码器370使用函数SignedAAC或UnsignedAAC编码差分数据,由此在每个比特平面上编码该差分数据。
下面,参照图4A和4B描述关键字数据编码器300的操作。图4A和4B是根据本发明的用于编码关键字数据的方法的流程图。
当关键字数据被输入到关键字数据编码器300时,例如关键字数据的数量和关键字数据位数的信息被输入到标题编码器500并且随后被编码。在步骤S4000中,线性关键字编码器310首先在该输入的关键字数据中寻找一个线性关键字区域,即其中以确定的时间间隔出现关键帧、关键字数据具有相同的差值并且该关键字数据线性地关键字数据的一个区域,并且编码该搜索的线性关键字区域。
例如3DMax或Maya的著名应用软件使用在具体的区域之间具有预定的时间间隔的关键字来产生基于关键帧的动画。在此情况中,有可能使用一个线性关键字数据区域的开始和结束关键字数据以及存在于它们之间的关键帧的数目来容易地编码关键字数据。因此,线性预测对于使用一个内插器在一个确定的区域中对关键字进行编码是非常有用的。
下面方程式被用于线性预测。
t(i)=tE-tSE-S+tS(0≤i≤E-S,S<E)···(1)]]>其中,tS表示一个局部线性区域开始之处的关键字的数据,tE表示一个局部线性区域结束之处的关键字的数据,S表示tS的一个索引,而E表示tE的一个索引。在从第S关键字数据到第E关键字数据的一个具体区域中的实际关键字数据之间的误差以及遵循方程式(1)线性预测的关键字数据能够使用下面的方程式计算。
ei=t(i)-ti+S=tE-tSE-Si+tS-ti+S···(2)]]>如果使用方程式(2)计算的误差当中的最大值不大于一个预定的临界值,则ti能够被认为是在区域[tS,tE]中或在一个确定误差范围之内的共线性的。使用下面方程式(3)确定该最大误差值ti是否具有具体的区域共线性。
Ep=MAXi=0,...(E-S)|ei|=MAXi=0,...(E-S)|tE-tSE-Si+tS-ti+S|···(3)]]>
如果Ep≤12nBits+1,]]>ti则与区域[tS,tE]共线性。其中,nBits表示用于编码的比特的数量。
如果线性关键字编码器310寻找该局部线性区域,则该局部线性关键字数据区域的开始和结束关键字数据被输出到一个浮点数转换器315。包括在该线性关键字数据区域中的关键字的数目被输出到标题编码器500并且被编码。使用线性编码有可能显著地降低需编码的数据量。
在稍后描述的浮点数转换器315中,使用浮点数转换执行对于开始关键字数据和结束关键字数据的编码。
浮点数转换器315把二进制表示的关键字数据转换成十进制关键字数据,以便编码该开始关键字数据和结束关键字数据。
计算机以32比特的二进制数字存储浮点数字。如果给出二进制表示的一个浮点数,浮点数转换器315将把该浮点数转换成十进制的一个尾数和一个指数,此过程由随后方程式表示。
例如,一个浮点数12.34能够通过计算机转换成一个下面所示的二进制数。
01100010101110000101000112100000103]]>1符号2二进制尾数3二进制指数该二进制数能够遵循方程式(4)转换成下列所示的十进制数。
011234223]]>1符号2十进制尾数3十进制指数为了把十进制中的尾数和指数包括在一个比特数据流中,必须计算为了表示该尾数和该指数所要求的比特数目。具有在-38和38之间的一个值的指数因此能够连同符号一起使用7比特表示。为了表示该尾数而需要的比特的数量取决于数字的位数。尾数的值和为了表示该尾数而需要的比特的数量以下表示出。
表2

已经寻找并且使用上述处理而转换的该线性关键字数据区域的开始和结束关键字数据被遵循图4C和4D所示的编码处理编码,输出到标题编码器500,并且存储在该比特数据流中。
图4C和4D示出对输入到浮点数转换器315的两个浮点数字进行编码的一个处理。将参考图4C和4D描述浮点数转换器205编码一个浮点数的方法。
浮点数转换器315接收原始关键字数据的位数Kd、开始关键字数据S和结束E,并且在步骤S4040中遵循方程式(4)对它们转换。
浮点数转换器315首先编码S。具体地说,浮点数转换器315检验S的位数是否不同于Kd。如果位数S不同于Kd,则获得S的位数并且在步骤S4042中输出到标题编码器500。浮点数转换器315使用函数Digit()获得S的位数。
如果S的位数大于7,则在步骤4043中使用一个预定的比特数量把S输出到标题编码器500(在本发明中,按照IEEE标准754的浮点数方式使用32比特),以便在该比特数据流中能够包括该S的位数。
如果该S的位数不是0并且小于7,则浮点数转换器315在步骤4044中把S的符号输出到标题编码器。使用表格2获得为了编码S的尾数的绝对值需要的比特数目。随后,使用在步骤4045中用表格2获得的比特数目,把S的尾数的绝对值输出到标题编码器500。在步骤S4046中,浮点数转换器315计算S的指数,输出S的符号到标题编码器500,并且输出该指数到标题编码器500,作为例如6比特的一个预定的数量。这种关键字数据转换使得有可能显著地降低包括在比特数据流中比特的数量。
如果S的位数是0,则对于该开始关键字数据的编码结束,并且该方法转到对该结束关键字数据E进行转换的步骤,因为当该S的位数是0时,该对应浮点数也是0,不需要进行编码。
在对开始关键字数据S进行转换和编码之后,浮点数转换器315转换结束关键字数据E。E的转换几乎与S的转换相同。具体地说,在步骤S4047中验证E的指数是否与S的指数相同。如果E的指数与S的指数相同,则只有表示E的指数与S的指数是相同的一个标记位被输出到标题编码器500。如果E的指数与S的指数不相同,则在步骤S4048中以与S的指数输出到标题编码器500的同样方式把E的指数以及该标记位输出到标题编码器500。
在不属于该线性关键字区域的输入关键字数据当中的关键字数据被输入到量化器320中,然后根据一个预定的量化比特大小nKeyQBit被量化。
但是,在用一个解码器解码该量化的关键字数据的情况下,由于在原始关键字数据和该量化关键字数据之间的误差的原因,不可能的完全地恢复原始关键字数据。因此,本发明的量化器320获得在输入关键字数据当中的最大值和最小值,并且使用该最大和最小值量化该输入关键字数据。此外本发明的量化器320包括一个量化误差最小化器325,使得在原始关键字数据和其量化的关键字数据之间的误差能够使用在输入关键字数据当中的该最大和最小值被最小化。
在步骤S4100,量化误差最小化器325预先使用控制量化范围的一种方法量化或反向量化该输入的关键字数据,使得能够最小化该量化误差。
具体地说,如果用于量化的混合最大值是由Max表示,被控制用于量化的最小值由Min表示,输入值由Xi表示,用于量化的比特数目由nQuantBit,则使用下面方程式获得量化输入值 反向量化值 和误差ei。
X~i=floor(Xi-MinMax-Min*(2nQuantBit-1)+0.5)···(5)]]>X^i=X~i*(Max-Min)2nQuantBit-1+Min]]>ei=Xi-X^i]]>有两种减小误差取和∑ei的方法。一种降低误差的取和的方法是通过连续控制器Min直到错误的取和被最小化。另外一种方法如下。
首先假定Xi=(i+n)Δx+εi,其中Xi表示一个输入关键字数据序列,Δx表示输入数据的一个基本步骤规模,n是一个任意的整数,而εi表示零平均随机噪声。
随后,当di≡Xi-Xi-1=Δx+(εi-εi-1)时,Δ’x=E[di]并且Min=Max-Δ’x*(2nQuantBit-1)。
有可能最小化一个量化误差的Min同Max被输入到量化器320,并且被用于关键字数据的量化。
量化器320接收最大值Max和能够最小化量化误差和的最小值Min,并且在步骤S4200中遵循方程式(6)量化关键字数据fKeyi。
nQKeyi=floor(fKeyi-fKeyMinfKeyMax-fKeyMin(2nKeyQBit-1)+0.5)···(6)]]>其中,i表示量化后关键字数据的一个索引,nQKeyi表示量化关键字数据的整数的一个数组,fKeyi表示量化关键字数据的浮点数字数组,fKeyMax表示从量化误差最小化器325输入的最大值,fKeyMin表示从量化误差最小化器325输入的最小值,nKeyQBit表示量化比特的大小。在方程式(6)中,函数floor(v)是一个输出不大于一个确定的浮点值v的最大整数的函数。
本发明的量化器320可以不使用降低一个量化误差的算法,这时仅使用输入关键字数据中的最大和最小值fKeyMax和fKeyMin进行量化。
参照图4E更详细地描述本发明的量化操作。
量化器320在步骤S4210中接收关键字数据,并且在步骤4220中检测是否从量化误差最小化器325输入了最大和最小值MAX和MIN。
如果输入了MAX和MIN,量化器320在步骤4230中分别把用于量化的最大和最小值fKeyMax和fKeyMin设置为MAX和MIN,并且把这新的最大和最小值fKeyMax和fKeyMin输出到浮点数转换器315。该最大和最小值fKeyMax和fKeyMin经过上述浮点数转换处理而被转换并且编码,并且被输出到标题编码器500,使得它们能够被包括在进行解码中使用的一个关键字标题中。
如果没有从该量化误差最小化器325输入的值,则在步骤S4240中,量化器320分别把第一关键字数据fKey0和最终关键字数据fKeyN-1设置为最小值fKeyMin和最大值fKeyMax。
随后,量化器320在步骤S4250中检验最大值fKeyMax是否小于1但大于0,以及最小值fKeyMin是否大于0。如果最大值fKeyMax不小于1或不大于0,则该最大和最小值fKeyMax和fKeyMin被输出到浮点数转换器315,并且经过上述浮点数转换过程被转换和编码。随后,在步骤S4260中,已经转换和编码的最大和最小值fKeyMax和fKeyMin被包括在关键字标题中,使得它们可被用于进行解码。
另一方面,如果最大值fKeyMax小于1并且最小值fKeyMin大于0,则在步骤S4270中检验的一个标志,该标志表示最大和最小值fKeyMax和fKeyMin是否将被包括在用于在进行解码使用的关键字标题中。如果该标志被设置而使得最大和最小值fKeyMax和fKeyMin能够被包括在该关键字标题中,则执行步骤S4260,以使最大和最小值fKeyMax和fKeyMin被输出到标题编码器500。如果没有设置该标志,则量化器320将不允许该最大和最小值fKeyMax和fKeyMin包含在该关键字标题中。
在该最大和最小值fKeyMax和fKeyMin不被包括在该关键字标题中的一个情况中,关键字数据编码器300和一个关键字数据解码器被分别来执行编码和解码处理,分别以1和0建立该最大和最小值fKeyMax和fKeyMin。在此情况中,量化器320在步骤S4280中分别以1和0设置该最大和最小值fKeyMax和fKeyMin。对于该关键字数据解码器来说,该最大和最小值fKeyMax和fKeyMin是已经知道的,使得fKeyMax和fKeyMin不需要包括在该关键字标题中。
通过将上述处理已经设置的最大和最小值fKeyMax和fKeyMin替代到方程式(6)中,量化器320在步骤S4290中量化该输入的关键字数据,并且把该量化的关键字数据输出到一个DPCM处理器330。
DPCM处理器330接收该量化的关键字数据,并且对于该量化的关键字数据执行预定的次数的DPCM。随后,DPCM处理器330输出DPCM的阶数以及每一个周期中获得的DPCM的帧内关键字数据到标题编码器500,通过该DPCM的阶数获得分散程度中的最小值。在步骤S4300中,DPCM处理器330把由DPCM产生的差分数据输出到移位器340。
参考图4F,在步骤S4310中,DPCM处理器330对于输入的关键字数据执行预定次数的DPCM,并且按照DPCM的阶数存储DPCM的周期数目。在本发明的一个优选实施例中,DPCM可以被执行三次。
然后,在步骤S4320中,DPCM处理器330计算DPCM的每一周期的结果的分散程度。这里,分散程度可以由分散角、标准偏差或四分位偏移表示,而在本发明的一个优选实施例中,可以使用四分位偏移。
随后,DPCM处理器330选择DPCM的一个周期,通过该DPCM周期能够获得在该分散程度中的最小值,并且把该选择的DPCM阶数的结果输出到移位器340。在步骤S4330中,DPCM的选择周期、DPCM的每一周期的帧内关键字数据以及用于DPCM所需要的信息的其它部分被输出到标题编码器500。然而在本发明的一个优选实施例中,如果关键字的数目小于5,则DPCM仅执行一次。例如,DPCM的第一周期的执行遵循方程式(7)。
Δi=nQKeyi+1-nQKeyi…(7)其中,i表示量化后关键字数据的索引,nQKeyi表示整数数组,而Δi表示差分数据。
在步骤S4340中,DPCM处理器330计算为了对DPCM选择的周期的结果进行编码所要求的比特数目以及已经由DPCM在一个预定的存储器中产生的该关键字数据的差分数据(nQStep_DPCM)。为了进行编码所要求的比特数量的计算也可以稍后在选择将要被编码的关键字数据的随后步骤中执行,这对本专业技术人员来说是显然的。
移位器340从来自DPCM处理器330的输入差分数据当中选择具有最高频率的一个差分数据(在下文称作一个模式)。随后,在步骤S4400中,移位器340从所有的差分数据减去该模式,以使大部分将要被编码的数据围绕0排列并且用于编码所需要的比特数目能够被减少。
这种移位操作通过从量化关键字数据减去模式nKeyShift进行,由下面方程式表示。
shift(nQKeyi)=nQKeyi-nKeyShft…(8)
其中,i表示量化后关键字数据的一个索引,nQKeyi表示整数数组,而nKeyShft表示一个模式值。作为移位操作的结果,具有最高频率的差分数据成为0,使得用于进行编码所需要的比特数目能够被显著地降低。
已经通过该移位操作的关键字数据被输出到折叠处理器350和DND处理器360,并且模式值nKeyShift被输出到标题编码器500,以使其被包括在该关键字标题中。
在步骤S4500中,折叠处理器350对于移位器340的输出执行一个折叠操作,并且该折叠操作的结果输出到DND处理器360。
该折叠操作被用于降低差分数据的范围,通过把它们集中在正或负数区域中,该差分数据广泛地散布在一个正数区域和一个负数区域之上。在本实施例中,折叠操作遵循方程式(9)执行,以便把差分数据集中在该正数区域中。
fold(nQKeyi)=2·nQKeyi(if nQKeyi≥0)…(9)=2|nQKeyi|-1(if nQKeyi<0)其中,i表示量化后关键字数据的索引,而nQKeyi表示整数数组。作为折叠操作的结果,正差分数据被转换成偶数,而负差分数据被转换成奇数。
折叠处理器350计算为了编码已经通过该折叠操作的差分数据所需的比特数量并且将其存储在预定的存储器nQStep_fold中。在此步骤中,用于编码的所需比特数量的计算可以稍后在选择将要被熵编码的差分数据的一个随后步骤中执行,像步骤S9300那样,这对本专业人员来说是显然的。由折叠处理器350中的折叠操作产生的数据被输出到DND处理器360。
为了提高熵编码的效率,在步骤S4600中DND处理器360对于该关键字数据执行预定次数的DND操作,因此降低差分数据的范围。
参考图3B,DND处理器360包括DND操作器362,对于差分数据执行DND操作;第一差分数据选择器364,根据用于进行编码的比特数目选择将要被熵编码的差分数据;上移操作器366对于已经通过DND操作的差分数据执行一个上移操作;和第二差分数据选择器368,在仅通过DND操作的差分数据和已经通过上移位操作的差分数据之间选择具有较低分散程度的差分数据,并且把所选择的差分数据输出到熵编码器370。
在下面段落中将描述DND操作器362中执行的DND操作。
当该差分数据已经通过在该折叠处理器362中的折叠操作被输入到DND操作器362中时,它们被分为两组,具有比另一组差分数据更高范围的一组差分数据通过一个分割函数被移到该正数区域。该分割函数由下面方程式定义。
divide(nQKeyi,nKeyMax)···(10)]]>=nQKeyj-(nKeyMax+1),(if nQKeyj>nKeyMax2)]]>=nQKeyi,(if nQKeyj≤nKeyMax2)]]>其中,j表示输入差分数据的一个索引,nQKeyj表示整数的一个数组,而nKeyMax表示在已经通过该折叠操作的差分数据当中的一个最大值。特别地,在大部分差分数据沿着考虑所有的差分数据的整个区域的边界密集填充情况下,则有可能使用该分割操作显著地降低所有的差分数据的整个区域。
在该分割操作之后,计算该分散程度,其中用于进行编码而需要的比特的大小被用作分散的度量,因此能够选择用于进行编码的比特大小的最小值。
DND操作之后,进一步执行不同种类的DND操作,即上分割操作或下分割操作。根据差分数据的一个正范围的大小和差分数据的一个负范围的大小确定是否将进一步执行一个上分割操作或一个下分割操作。
如果具有正值的该差分数据范围大于具有负值的该差分数据的范围,则执行通过下面方程式定义的一个下分割操作。
divide-down(nQKeyj,nKeyMax)···(11)]]>=-2(nKeyMax-nQKeyj+1)+1,(if nQKeyj>nKeyMax2)]]>=nQKeyj,(if0≤nQKeyj≤nKeyMax2)]]>=2·nQKeyj,(ifnQKeyj<0)]]>另一方面,如果具有正值的差分数据的范围大于具有负值的差分数据的范围,则执行由如下方程式定义的一个上分割操作。
divide-up(nQKeyj,nKeyMin)···(12)]]>=nQKeyj,(nQKeyj≥0)]]>=2·nQKeyj,(nKeyMin2≤nQKeyj≤0)]]>=2(nKeyMin-nQKeyj-1)+1,(nQKeyj<nKeyMin2)]]>
在方程式(11)和(12)中,j表示量化后关键字数据的一个索引,nQKeyj表示整数的一个数组,nKeyMax表示nQKeyj的一个最大值,而nKeyMin表示nQKeyj的最小值。
在下面将参照图4G描述DND操作器362的操作。
当输入的关键字数据的差分数据是来自折叠处理器350的输入,则DND操作器362在步骤S4610中获得在输入差分数据当中的最大值nKeyMax和最小值nKeyMin。随后,在步骤S4620中DND操作器362比较该nKeyMax的绝对值与nKeyMin的绝对值。如果nKeyMax不小于nKeyMin的绝对值,则在步骤S4622中DND操作器362把nKeyMax设置为在当前DND操作周期中的一个最大值。
DND操作器362检测该DND操作的阶数是否为1,换句话说,在步骤S4624中检测DND操作的阶数是否为1,并且如果其是1,则在步骤S4630中DND操作器362执行对于该输入差分数据的一个分割操作,替代方程式(10)中最大值nKeyMax。
然后,DND操作器362在步骤S4640中使用函数getQBit()测量为了编码已经使用该分割操作被减小的该差分数据范围所需要的比特的大小。如果在步骤S4650中该DND操作的阶数出现是1,则用于进行编码所需要的比特大小被存为表示为了进行编码的比特的最小大小的一个值nQBitDND,并且DND操作的阶数在步骤S4655中被增加1。
随后,该DND处理器362再一次执行步骤S4610至S4622。如果在步骤S4624中的DND操作的阶数不是1,则该DND操作器252在步骤S4634中执行一个下分割操作,代替方程式(11)中的最大值nKeyMax。在步骤S4640中,DND操作器362计算用于编码已经通过该下分割操作的该差分数据所需要的比特的数量。如果该数目小于在先前DND操作周期中存储的该最小值nQBitDND,则在步骤S4658的DND操作之后替代用于编码所需的比特的最小量。
如果在步骤S4620中该最小值nKeyMin的绝对值出现为大于最大值nKeyMax,则在步骤S4623中把DND操作的当前周期中的最大值更新为一个最小值,然后在步骤S4638中执行上分割操作,替代方程式12中的最小值nKeyMin。然后,DND操作器362在步骤S4640中计算用于编码已经通过该上分割操作的差分数据的比特的数量。如果该计算的结果是小于已经在步骤S4652中的DND操作的预先周期中存储的nQBitDND,则在步骤S4658中替代用于DND操作之后进行编码所需的该最小比特数nQBitDND。
DND处理器362执行预定次数的DND操作,并且该DND操作的执行的数量可以改变。例如在本实施例中,该DND操作被执行7次。DND操作器362输出nQBitDND和对应于nQBitDND的差分数据到第一差分数据选择器364。DND操作器362把对应已经产生的差分数据的DND的阶数输出到标题编码器500,并且使得它们被包括在该比特数据流中。
第一差分数据选择器364接收已经通过该移位操作的差分数据、已经通过折叠操作的差分数据和已经通过DND操作的差分数据,并且在这三个差分数据当中确定将被熵编码的差分数据。
参考图3A,第一差分数据选择器364选择该DPCM的结果,并且如果在该DND操作以后的用于进行编码所需的最小比特数目nQBitDND不小于在步骤S4700中的该DPCM操作之后的用于进行编码的比特大小nQStep-DPCM,在步骤S4710中对于该DPCM的结果执行一个移位操作。随后,在步骤S4710中,第一差分数据选择器364把该移位操作的结果输出到熵编码器370,并且使得它们被熵编码。在此情况下,DND操作的阶数被设置在-1,被输出到标题编码器500,并且被包括在该关键字标题中。
但是,如果在步骤S3720中结果变为该nQBitDND小于nQStep-DPCM并且不小于折叠操作之后的用于进行编码的比特的大小,则第一差分数据选择器364把已经通过该折叠操作的该差分数据输出到熵编码器370,并且使得它们在步骤S4730中被熵编码,其中DND操作的阶数被设置在0,输出到标题编码器500,并且因此被包括在该关键字标题中。
如果在DND操作之后用于编码该差分数据的比特数目是最小的,则第一差分数据选择器364把已经通过该DND操作的差分数据输出到该上移位操作器366,然后该上移位操作器366在步骤S4740中计算从第一差分数据选择器364输入的差分数据的第一分散程度。随后,该上移位操作器366在步骤S4800中对于已经通过该DND操作的该差分数据执行由下面方程式定义的一个上移位操作,并且在步骤S4810中计算该上移位结果的一个第二分散程度。
shift-up(nQKeyj,nKeyMax)…(13)=nQKeyj(if nQKeyj≥0)=nKeyMax-nQKeyj(if nQKeyj<0)其中,j表示量化后关键字数据的差分数据的一个索引,nQKeyj表示整数的一个数组,而nKeyMax表示在差分数据当中的一个最大值。
当已经通过DND操作的差分数据和已经通过上移位操作的差分数据被输入时,第二差分数据选择器368在步骤S4900中把该第一分散程度与该第二分散程度相比较。如果该第二分散程度小于该第一分散度,则在步骤S4910中第二差分数据选择器368把已经通过该上移位操作的差分数据输出到熵编码器370并且使得它们被熵编码。该第二差分数据选择器468把使用在该DND操作的最大和最小值nKeyMax和nKeyMin、以及使用在上移位操作中的最大值nKeyMax输出到标题编码器500,并且使得它们被包括在关键字标题中。
但是,如果该第一分散程度小于该第二分散程度,则第二差分数据选择器368把已经通过该DND操作的差分数据输出到熵编码器370,并且使得它们在步骤S4920中被熵编码。然后,第二差分数据选择器368仅把使用在该DND操作中的该最大和最小值nKeyMax和nKeyMin输出到标题编码器500。在本发明的一个优选实施例中,标准偏差可以被用作该第一和第二分散程度的一个度量。
根据差分数据的特性,熵编码器370对于差分数据执行两个不同的操作。例如,已经通过DPCM操作和一个移位操作的差分数据,以及只通过一个分割操作的差分数据既有正值又有负值,并且因此要求执行每一差分数据的符号的编码处理以及该差分数据本身的编码处理。另一方面,由于已经通过折叠操作的差分数据仅有正值,所以执行仅编码该差分数据的处理。
在本发明的一个优选实施例中,函数encodeSignedAAC被用于编码该差分数据和其符号,而函数encodeUnsignedAAC被用于仅编码差分数据。
图5是表示一个函数encodeSignedAAC的一个实例的示意图。参考图5,当一个输入值是74而用于编码该输入值的比特数目是8时,其符号是0,并且其与二进制数字1001010相同。符号以及整个比特平面以下列方式编码第一步骤一个二进制数以从其最高有效比特(MSB)到其最低有效比特(LSB)的次序在每一比特平面上编码一个二进制数;第二步骤检验当前正被编码的比特是否为0;第三步骤如果当前被编码的比特不是0,则该二进制数的符号被随后编码;和第四步骤该二进制数的其余比特被编码。
使用关于该值的一个上下文,函数encodeUnsignedAAC把没有符号的值编码为一个自适应算法编码比特数据流。除了存在一个符号上下文之外,此函数与函数encodeSignedAAC几乎相同。
图6A至6J是表示关键字数据的曲线示意图,其关键字数据已经经过了按照本发明一个优选实施例的操作。在图6A至6J中,该X轴表示每一个关键字数据的索引,而Y轴表示该关键字数据的值。
图6A是表示输入到该本发明的编码器的原始关键字数据的一个曲线图。图6A所示的关键字数据被输出到量化器320,然后以九个量化比特量化,以便获得图6B所示的量化的关键字数据。如果对于图6B所示的量化关键字数据执行DPCM,则获得图6C所示的差分数据。
随后,使用大约7的一个模式值移位该量化关键字数据的差分数据,以便获得图6D所示的差分数据。随后,如果对于该移位的差分数据执行一个折叠操作,则可以获得如图6E所示的仅有正值的数据。
图6F至6H示出对于图6E示出的折叠数据执行一个DND操作的结果。具体地说,对于图6F示出的折叠数据执行一个分割操作的结果。如图6F所示,正关键字数据值范围从0到28,而负关键字数据值范围从29到0,其意味着负关键字数据值的范围大于正关键字数据值的范围。因此,要求对于图6F中所示数据执行一个上分割操作,而该上分割操作的结果在图6G中示出。
作为该上分割操作的结果,负关键字数据值的范围被大大降低,使得其比正关键字数据值的范围小得多。在DND操作的一个随后周期中,对于该上分割操作的结果执行一个下分割操作。图6H是表示对于图6G所示差分数据执行一个下分割操作的结果。对于图6H所示的关键字数据执行一个上移位操作的结果在图6I中示出。
如图6A至6G所示,关键字数据和差分数据的范围逐步减小。然而,如图6H和6I所示,上移位操作以后的差分数据的范围比该操作之前的范围增加得更大,这表明如图6H所示该已经通过下分割操作的差分数据是最后唯一被编码的差分数据,如图6J所示。
下面段落将描述在标题编码器500编码并且存储在关键字标题中的信息。
当输入将要被编码的关键字数据时,标题编码器500编码将要被编码的关键字数据的数字数目和关键字数目。随后,标题编码器500从线性关键字编码器310接收有关于输入的关键字数据中是否存在已经通过该线性关键字编码的一个线性关键字区域以及在该线性关键字数据区域中的关键字数据的数量的信息,并且从浮点数转换器315接收该已经通过浮点数转换的线性关键字数据区域的开始和结束关键字数据。
在浮点数转换器315接收能够实现一个最小量化误差的最大和最小值并且把它们转换成浮点数字的情况下,该转换的最大和最小值被从浮点数转换器315输入到标题编码器500,以使它们能被再一次用于进行反向量化。此外,量化比特的大小也被输入到标题编码器500并且被包括在该关键字标题中。
标题编码器500从DPCM处理器330接收DPCM的阶数以及在DPCM的每一周期中的内关键字数据,并且从移位器340接收已经用于一个移位操作的一个模式值。此外,标题编码器500从DND处理器360接收有关是否已经执行一个上移动操作的信息,能够最小化差分数据的分散程度的DND的阶数的信息以及在DND操作的每一周期中的最大和最小值信息。
最终,标题编码器500从熵编码器370接收用于进行编码的比特数目并且将其编码作为一个关键字标题。
下面,参考图7A至11C更详细地描述根据本发明一个优选实施例的用于对坐标内插符的关键值数据进行编码的一个装置和方法。
图7A是根据本发明优选实施例的关键值数据编码器的框图,而图7B是根据本发明优选实施例的用于对坐标内插符的关键值数据进行编码的一种方法的流程图。
参考图7A,关键值数据编码器700包括量化器710,使用预定的量化比特量化输入其中的坐标内插符的关键值数据每一顶点的成份的数据;DPCM处理器720,对于每一顶点的量化分量数据执行一个预定的DPCM操作;字典编码器750,将差分数据转换成符号和指示该符号的位置的索引;以及熵编码器760,熵编码输入其中的符号和差分数据的索引。
在下面的段落中,参照图7B描述用于编码坐标内插符的关键值数据的方法。参考图7B,在步骤S9000中以NXM矩阵的形式把坐标内插符的关键值数据输入到量化器710。一个输入的坐标内插符的关键值数据的实例在下列表中示出。
表3

在表3中,N表示关键字数据(关键帧)的数目,M表示每一关键帧中的顶点的数量。
根据本发明的关键值数据编码器700以两种不同模式操作来编码坐标内插符的关键值数据。模式之一是顶点模式,而另外一个模式是转置模式。表3中,示出以顶点模式在量化器710中量化的关键值数据的结构。在量化表3所示的输入关键值数据之前,关键值数据编码器700把输入的关键值数据转置成一个MHN矩阵。在解码关键值数据过程中反向量化该转置矩阵,并且把解码的关键值数据转换成NHM矩阵,使得能够恢复与输入关键值数据一样的关键值数据。
参考图7B,在步骤S9100中,量化器710检查从外部输入的关键值数据的编码方式是否为转置模式。如果输入的关键值数据的编码模式是一个转置模式,则在步骤S9200中,输入关键值数据的NHM矩阵被转置成一个MHN矩阵。
然后,在步骤S9300中,量化器710以预定的量化比特量化输入其中的该关键值数据矩阵中的每一个分量的数据,并且在步骤S9300把每一个分量的量化的关键值数据输出到DPCM处理器720。在同一个步骤中,量化器710把在每一个成份的输入的关键值数据当中的最小值和在该成份的数据范围当中的最大范围转换成十进制数字,并且把该十进制数字输出到标题编码器500。
在步骤S9400中,DPCM处理器720对于输入其中的量化的关键值数据执行一个时间DPCM操作、一个空间DPCM操作和一个时空DPCM操作,对于该三个不同的DPCM操作的结果,即对于从该三个DPCM操作获得的每一差分数据执行一个循环量化操作,并且把在它们当中的具有最低熵值的差分数据输出到字典编码器750。
在步骤S9600中,字典编码器750产生和输出对应于从DPCM处理器720输入的差分数据的字典符号Si,j和位置索引Ii,j。具体地说,字典编码器750产生的该字典符号和该位置索引,表明已经对于该输入差分数据执行的DPCM操作的模式,把该输入的差分数据转换成对应于该输入差分数据值的符号或一个符号标志,和表示该符号的位置的位置索引,并且把该符号和位置索引输出到熵编码器760。
在步骤S9800中,熵编码器760通过对从该字典编码器750输入的该符号和位置索引进行熵编码而产生一个比特数据流。
下面,参照图8A至11C更详细地描述步骤S9300至S9800。
参考图9A,在步骤S9320中,量化器710选择在每一个成份数据当中的最大值和最小值。
在步骤S9340中,量化器710使用选择的该最大和最小值计算该分量的数据范围,并且确定在该成份的数据范围当中的一个最大范围。
在步骤S9360中,量化器710使用下面方程式所示的每一成份数据当中的最小值和各成份的整个数据范围当中的最大范围量化每一分量的关键值数据。
V~i,j,x=floor(Vi,j,x-fMin_XfMax(2nKVQBit-1)+0.5)···(14)]]>V~i,j,y=floor(Vi,j,y-fMin_YfMax(2nKVQBit-1)+0.5)]]>V~i,j,z=floor(Vi,j,z-fMin_ZfMax(2nKVQBit-1)+0.5)]]>方程式(14)中,i表示关键字数据,j表示一个顶点,而nKVQBit表示量化比特大小。此外,fMin_X、fMin_Y、fMin_Z表示在每一个成份的数据中的最小值,而fMax表示在该成份数据范围中的最大范围。
量化器710把每一分量的量化关键值数据输出到DPCM处理器720,并遵循方程式(4)和表2,把fMin_X、fMin_Y、fMin_Z和fMax变换成十进制数字,并且把该十进制数字输出到标题编码器500。
下面将参照图8A和9B更详细地描述该DPCM处理器720的结构和操作。
图8A是根据本发明的DPCM处理器720的一个框图。参考图8A,DPCM处理器720包括一个DPCM操作器730,对于从量化器710输入的每一成份的数据执行一个时间DPCM操作、空间DPCM操作和一个时空DPCM操作,一个循环量化器740,降低从该DPCM操作器730输入的差分数据的范围,以及一个DPCM模式选择器745,选择从循环量化器740输入的差分数据之一。DPCM操作器730包括一个时间DPCM操作器731,对于每一个成份的量化数据执行一个时间DPCM操作,一个空间DPCM操作器733,对于每一个成份的量化数据执行一个空间DPCM操作,以及一个时空DPCM操作器735,对于每一个成份的量化数据执行一个时空DPCM操作。
图9B是根据本发明优选实施例的一个DPCM操作的流程图。参考图9B,在步骤S9420中,每一个分量的量化数据从量化器710输入到时间DPCM操作器731、空间DPCM操作器733、和时空DPCM操作器735,然后在分别的操作器731、733以及735中对于每一个分量的量化数据执行时间DPCM操作、空间DPCM操作以及时空DPCM操作。
时间DPCM操作器731计算在一个当前关键帧中的顶点的分量数据和在一个先前关键帧中的顶点的分量数据之间的差值。一个时间DPCM操作由下面方程式表示。
Di,j=V~i,j-V~i-1,j···(15)]]>方程式(15)中,i表示关键字数据,j表示一个顶点的位置索引。
空间DPCM操作器733计算在同一个关键帧中的顶点之间的差值。具体地说,空间DPCM操作器733使用下面方程式计算前个顶点的熵,在当前顶点受到空间DPCM操作之前已经对于该前个顶点执行了空间DPCM操作。
Entropy(P)=-Σi=0N-1Pilog2Pi···(16)]]>在方程式(16)中,Pi表示某符号在一个顶点产生的概率,并且等于Fi/N,其中Fi表示该符号被产生了多少次,而N表示关键字数据的数量。
空间DPCM操作器733把在该顶点中的具有该最低熵的一个顶点确定为一个参考顶点,并且计算在当前受到空间DPCM操作的一个顶点的数据和该参考顶点的数据之间差分数据。一个空间操作由下面方程式表示。
Di,j=V~i,j-V~i,Ref···(17)]]>该时空DPCM操作器735对于该当前关键帧的顶点执行一个空间DPCM操作,使用在该先前关键帧的顶点中的一个对应于该当前关键帧的参考顶点、并作为参考顶点的顶点,对于该先前关键帧的顶点执行空间DPCM操作,并且计算在对应于该当前关键帧的顶点的差分数据和对应于该先前关键帧的顶点的差分数据之间的差分数据。换句话说,该时空DPCM操作器735对于该空间DPCM操作的结果执行一个时间DPCM操作。该时空DPCM操作由下面方程式表示。
Di,j=V~i,j-{V~i-1,j+(V~i,Ref-V~i-1,Ref)}···(18)]]>在该空间DPCM操作和该时空DPCM操作过程中,如果 或 小于在每一分量的量化数据中的最小值,则该最小值被用于空间DPCM操作和时空DPCM操作。另一方面,如果 或 大于在每一分量的量化数据中的最大值,则该最大值被用于该空间DPCM操作和该时空DPCM操作。
在步骤S9440中,DPCM操作器730把计算的差分数据输出到循环量化器740,而循环量化器740对于该时间DPCM的差分数据、空间DPCM差分数据和时空DPCM差分数据执行循环量化操作,并且把该循环量化的结果输出到DPCM模式选择器745。
图10A是量化器710的一个输出实例的曲线图,而图10B是对于图10A中所示的量化数据执行DPCM操作的结果的曲线图。如图10B所示,通过执行对于量化数据的一个DPCM操作,将要被编码的数据范围能够增加为其原数据范围的两倍。循环量化的目的是在保持量化值的数据范围的同时执行一个DPCM操作。
在本发明中,假设在DPCM的差分数据中的一个最大值被循环连接到在DPCM的差分数据中的一个最小值而执行该循环量化。如果对于两个连续量化数据执行的线性DPCM操作的结果大于在DPCM的差分数据中的最大值的一半,则从该线性DPCM的结果中减去从该DPCM的差分数据的一个最大范围值,以便产生具有较小绝对值的一个差分数据。另一方面,如果该线性DPCM的结果小于该最大范围中的一个最小值的一半,则把该最大范围值加到该线性DPCM的结果,以便产生具有较小绝对值的一个值。
通过下面的方程式表示循环量化器740的操作。
CircularQuanti zation(Xi) …(19)X′i=Xi-(nQMax-nQMin+1) (if Xi≥0)X′i=Xi+(nQMax-nQMin+1) (otherwise)X~i=min(|Xi|,|X′i|)]]>在方程式(19)中,nQMax表示在DPCM的差分数据中的一个最大值,而nQMin表示在DPCM的差分数据中的一个最小值。图10C示出对于图10B所示的DPCM的差分数据执行循环量化的结果。
循环量化器740把该循环量化的差分数据输出到DPCM模式选择器745。
在步骤S9460中,DPCM模式选择器745遵循方程式(16)计算从时间DPCM操作、空间DPCM操作和时空DPCM操作获得的每一DPCM差分数据的熵。
下面,DPCM模式选择器745在步骤S9480中选择在时间DPCM操作、空间DPCM操作、时空DPCM操作的结果中具有最低熵的DPCM差分数据作为每一顶点的DPCM操作模式,并且把对应于该选择的DPCM模式的该DPCM差分数据和关于该DPCM模式的信息输出到字典编码器750。
下面,参照图8B和9C描述字典编码器750及其操作。
图8B是根据本发明的字典编码器750的一个框图。参考图8B,字典编码器750包括一个DPCM模式编码器752,编码已经对于输入其中的每一个顶点的每一分量的数据执行的DPCM的模式,一个出现模式编码器756,产生表示每一顶点的每一分量的差分数据的值的符号和表示该符号的位置的位置索引,一个增量模式编码器758,产生对应于该符号和表示该符号位置的位置索引的一个符号标志,以及一个表格大小计算器754,计算用于表示每一顶点的每一成份的差分数据的符号表格以及一个符号标志表格的大小,并且把从DPCM模式编码器752输入的该差分数据输出到该出现模式编码器756或增量模式编码器758之一。
字典编码器750检测每一顶点的每一成份的差分数据的一个量化选择标志是否为1,如果是,则执行将在下面描述的后续处理。另一方面,如果某顶点的差分数据的量化选择标志是0,即意味着该顶点整个关键帧中具有相同的量化值,则该字典编码器750将省略字典编码处理,并且把该量化值QMin编码到一个关键字值标题。
图9C是根据本发明的一个字典编码处理的流程图。参考图9C,在步骤S9620中,在DPCM处理器720中已经产生的每一顶点的每一成份的差分数据被输入到DPCM模式编码器752中,然后DPCM模式编码器752产生表示已经对于每一顶点的每一成份的数据执行的DPCM操作模式的符号,以及指示该符号的位置的位置索引。
图11A是说明根据本发明的DPCM模式编码器752中执行的编码DPCM模式的一种方法的示意图。参考图11A,DPCM模式编码器752预先制备一个表格,其中示出每一顶点的每一成份的DPCM模式和其分别的符号,如图表4所示。表4示出DPCM操作的组合以及其对应符号。表4中,时间DPCM操作、空间DPCM操作和时空DPCM操作分别表示为T、S和T+S。
表4

每一顶点包括三个分量x、y和z,并且相应的DPCM操作的组合的数量是27。
如图11A所示,根据该差分数据已经通过的DPCM操作,每一个顶点的差分数据对应于表4示出的符号之一。DPCM模式编码器752使得该顶点的DPCM模式对应于表4中示出的分别的符号,并且设置标志,指示该符号存在于分别的顶点差分数据中。
DPCM模式编码器752把对应于该顶点的DPCM模式的符号排列在一个列中,并且以从用于具有较小幅值的一个符号的位置索引到用于具有最大幅值的一个符号的位置索引的次序产生用于该符号的位置索引。
如图11A所示,对应于该顶点差分数据的DPCM模式的符号的一个数组是(4,1,5,1,4,5)。在该符号当中,1是最小的符号,并且对应于(T,T,S)。DPCM模式编码器752产生用于该符号1的一个位置索引,使得符号的数组中出现1的位置由1表示。因此,该位置索引是(0,1,0,1,0,0)。
随后,DPCM模式编码器752产生用于次最小符号4的位置索引,其对应于DPCM模式(T,S,S),使得其中4所在的位置由1表示。在用于符号4的位置索引的产生中,不计算符号1的位置。因此,针对该符号4的位置索引是(1,0,1,0)。以同样方式,DPCM模式编码器752产生用于符号5的位置索引,其对应于(T,S,T+S)。用于该符号5的位置索引是(1,1)。
随后,DPCM模式编码器752把该标志和该位置索引输出到该表格大小计算器754。
再一次参考图8B和9C,表格大小计算器754计算用于编码在一个出现模式中的输入的差分数据的一个符号表的大小(A),以及用于编码在一个递增模式中的输入的差分数据的一个符号标志的大小(B),其对应于步骤S9640中在预先设置的符号表中的符号。
在步骤S9660中,表格大小计算器754把使用在该出现模式编码器756中的符号表的大小(A=S*(AQP+1),其中S表示差分数据中包括的符号的数量而AQP表示用于表示一个符号的比特的大小)与对应分别符号的符号标志的大小(B=2AQP+1-1,其中AQP表示用于表示一个符号的比特的大小)相比较。
如果A小于B,则表格大小计算器754把每一个顶点的差分数据输出到出现模式编码器756,如果B小于A,则把该差分数据输出到增量模式编码器758。
下面参照图11B描述出现模式编码器756的操作。
在步骤S9680中,出现模式编码器756产生对应于每一顶点的输入差分数据的值的符号,以及表示其各自符号的位置的位置索引。
参考图11B,当一个顶点的输入差分数据是(3,7,3,7,-4,7,3,-4,3,7,-4,-4),时,该出现模式编码器756制备一个表格,其中对应于每一顶点的差分数据的差分值的符号3,7,和-4被顺序地写入一行。
出现模式编码器756编码该符号数组中的第一个符号3并且产生针对该符号3的位置索引,以使3处在而位置由1表示而其它位置由0表示。针对该符号3的位置索引是(01000101000)。
随后,出现模式编码器756产生用于下一个符号7的位置索引。如图11B所示,在用于下一个符号的位置索引的产生中,前个符号的位置不被再次计算。因此,针对该符号7的位置索引是(1010100)。
在出现模式编码器756中,仅考虑尚未编码的符号位置产生用于符号的全部位置索引,因此用于一个符号-4的位置索引是(111)。
在图11B中,标志bSoleKV被设置为0。标志bSoleKV表示在差分数据的符号数组中一个符号是否仅出现一次。如果一个符号仅出现一次并且因此其位置索引仅包括0,则用于该对应符号的bSoleKV被设置为1,并且该对应符号的位置索引不被编码。出现模式编码器756把该输入差分数据的符号、该符号的位置索引以及bSoleKV输出到用于熵编码差分数据的熵编码器760。
下面参照图11C描述根据本发明的增量模式编码器758的操作。
在步骤S9690,增量模式编码器758产生指示包括在一个预定符号表中的符号是否存在于输入的差分数据中的一个符号标志以及用于该符号的位置索引。
增量模式编码器758预先产生用于被期望存在于输入差分数据中的符号的一个表格。在该表格中,以从具有最低绝对值的一个符号到具有最低大对值的一个符号的次序把符号排列在列中,并且在具有相同的绝对值的两个符号之间,具有正值的一个符号被放置在比另一符号更高的行中。因此,符号写入该表格中的次序是0,1,-1,2,-2,3,-3,...。对应于一个符号表中的符号的一个符号标志的大小为2AQP+1-1。例如,如果AQP是2,则能够由一个符号标志表示的符号的数量是7。如果一个值对应于存在差分数据中的一个符号,则该符号标志设置为1。仅针对其符号标志被设置为1的符号产生位置索引。
参考图11C,如果输入到增量模式编码器758的差分数据是(-1,-3,-1,-3,2,-3,-1,2,-1,-3,2,2),则存在于该差分数据中的符号是(-1,2,-3),因此确定该符号标志为(0,0,1,1,0,0,1)。
增量模式编码器758产生用于一个符号的位置索引,该符号在符号表中的定位首先在比其它符号高的行中。如图11C所示,增量模式编码器758设置一个符号-1所在的位置,在该符号表中排列该差分数据中存在的符号中的第一个以1出现的符号,并且以0设置其它放置,使得用于该符号-1的位置索引是(101000101000)。
随后,增量模式编码器758产生用于一个符号2的位置索引(00101011)而不考虑该已经编码的符号-1的位置。最后,增量模式编码器758产生用于符号3的位置索引(1111),而不考虑该已经编码的符号-1和2的位置。增量模式编码器758把用于其各自符号的符号标志和位置索引输出到熵编码器760。
由出现模式编码器756和增量模式编码器758产生的全部位置索引具有称为nTrueOne的一个标志,其指示原来的位置索引是否已经反向。具体地说,如果nTrueOne被设置为0,则认为位置索引是通过反向其原来位置索引而获得的。在位置索引包括许多1的情况中,有可能通过反向该位置索引而增强该算法编码效率,以便增加0的数量。
下面参照图9D描述熵编码器760的操作。
根据本发明的熵编码器760,使用函数enodeSignedQuasiAAC()熵编码从增量模式编码器758输入的表示该差分数据的符号的符号标志和用于该符号的位置索引,并且熵编码从出现模式编码器756输入的该差分数据的符号和其各自的位置索引。
在encodeSignedQuasiAAC中,使用涉及输入值和其符号的一个上下文产生一种自适应算法编码的比特数据流。具体地,在encodeSignedQuasiAAC()中,不为0的一个第一比特被编码,随后编码其符号,并且使用一个零上下文编码其它比特。
图9D是使用encodeSignedQuasiAAC()编码一个符号的一个处理的流程图。
在步骤S9810中,熵编码器760接收将要被编码的差分数据的符号nValue和其比特大小QBit。
在步骤S9820中,熵编码器760从nQBit减去2,并且存储该相减的结果作为可变i。
在步骤S9830中,熵编码器760把该符号nValue的绝对值存储作为变量val,并且对于val执行次数为i的右移位(SR)操作。在同一个步骤中,熵编码器760对于1和该SR操作的结果执行一个逻辑″与″操作,并且把该逻辑″与″操作的结果存储为一个变量比特。
在使用encodeSignedQuasiAAC()编码一个符号的处理的第一周期中,检测除了符号位以外的将要被熵编码的输入值中的第一比特,并且在随后的周期中逐个读出其它比特。
在步骤S9840中,熵编码器760检测val是否大于1。如果val大于1,则在步骤S9850中,在一个零上下文下使用函数qf_encode()编码该′比特′的值。另一方面,如果val不大于1,则在步骤S9860中,在一个第i上下文之下使用函数qf_encode()编码该′比特′的值。
当val不大于1时,在步骤S9870中,熵编码器760再一次检验val是否为1。如果val是1,则在步骤S9880设置nValue的符号,并且在步骤S9890中根据其符号和一个符号上下文编码nValue。
当完成针对一个比特的编码处理时,熵编码器760在步骤S9900中把i减1,随后在步骤S9910中检测i的当前值是否小于0。通过重复地执行S9830至S9900,熵编码器760熵编码该输入值,直到i小于0为止。
因此,随着分配到该第一比特的一个上下文,熵编码器760编码输入值不是0的第一比特,并且编码跟随该零上下文的其它比特。
下面参照图7A描述在标题编码器500中的将要被编码成一个关键字值标题的信息。
标题编码器500接收一个输入的坐标协调程序并且编码一个数据模式、每一关键帧中的顶点的数目、用于该顶点数目的所需要的比特数、以及每一浮点数的有效位的最大数目。
标题编码器500编码一个量化比特数、每一顶点的每一成份的关键值数据中的最小值和每一顶点的每一成份的数据范围中的最大数据范围、以及每一顶点的每一分量的量化数据中的最大和最小值。
标题编码器500从DPCM处理器720接收已经对于每一顶点的每一成份的数据执行的一个DPCM操作的模式,从该字典编码器750接收一个字典编码模式,并且编码该DPCM操作模式和该字典编码方式。
下面参照附图更详细地描述根据本发明优选实施例的一个用于解码一个比特数据流的方法和装置,其比特数据流中编码有坐标内插符的关键字数据和关键值数据。
图12是根据本发明一个优选实施例的用于解码坐标内插符的装置的框图。参考图12,用于解码坐标内插符的装置包括关键字数据解码器1300,从一个输入比特数据流中解码关键字数据;关键值数据解码器1500,从该输入比特数据流中解码关键值数据;以及标题解码器1800,解码标题信息并且把该解码的标题信息提供到关键字数据1300以及关键值数据解码器1500,该标题信息是用于解码来自输入比特数据流的关键字数据和关键值数据的必需的信息。
下面参照图13至14B更详细地描述关键字数据解码器1300的结构和操作。
图13是根据本发明的一个优选实施例的关键字数据解码器1300的一个框图。关键字数据解码器1300接收一个编码的比特数据流并且通过解码而将其重新构成关键字数据。
关键字数据解码器1300包括一个熵解码器1310、一个反向DND处理器1320、一个反向折叠处理器1330、一个反向移位器1340、一个反向DPCM处理器1350、一个反向量化器1360、一个线性关键字解码器1380和一个浮点数反向转换器1370。
图14A是根据本发明优选实施例的用于解码关键字数据的一种方法的流程图。参考图14A,其上压缩有关键字数据的一个比特数据流被输入到标题解码器1800和熵解码器1310。
在步骤S14000中,标题解码器1800解码为了进行解码的每一步骤所需的信息段并且将它们提供到对应解码步骤。下面按每一解码步骤描述由标题解码器1800解码的信息。
在步骤S14100中,熵解码器1310从标题解码器1800接收将要被解码的差分数据的数目以及已经用于编码的比特数量,即将要被用于进行解码的比特数目,并且解码该输入的比特数据流。差分数据的数目等于从关键字数据的数量减去通过执行DPCM获得的帧内关键字数据数目的结果。
在本实施例中,熵解码器1310根据包括在该比特数据流中的预定的信息,例如bSignedAACFlag,标识将要被解码的差分数据是否具有负值或正值。如果该编码的差分数据具有负值,则熵解码器1310使用函数decodeSignedAAC()解码该差分数据。另一方面,如果该编码的差分数据仅具有正值,则熵解码器1310使用函数decodeUnsignedAAC()解码该差分数据。随后,该解码的差分数据被发送到反向DND处理器1320。
反向DND处理器1320在每一DND的周期中从标题解码器1800接收DND的阶数以及最大值nKeyMax。
如果DND的阶数是-1,这意味着正解码的该编码的差分数据已经经历一个DPCM操作和一个移位操作而不经历DND被熵解码,并且本方法直接进入执行一个反向移位操作的步骤。如果DND的阶数是0,这意味着正解码的该编码的差分数据已经经历一个折叠操作而不经历DND被熵解码,并且因此本方法直接进入执行一个反向折叠操作的步骤。如果DND的阶数大于0,则在步骤S14200中执行一个反向DND操作。
反向DND处理器1320在步骤S14300中确定正被解码的编码的差分数据是否已经经历一个上移动操作而被编码。在本发明的一个优选实施例中,通过查验在一个比特数据流中包含的nKeyInvertDown是否大于0而确定该正解码的该编码差分数据已经经历一个上移位操作而被编码。
如果正被解码的该编码差分数据尚未通过上移位操作,则该方法进入执行一个反向DND的步骤。另一方面,如果正被解码的该编码差分数据已经通过一个上移位操作,在步骤S14400中,通过执行一个上移位,已经从一个正数区域转移到一个负数区域的差分数据被移回到该负数区域。在本发明的一个优选实施例中,通过执行由下面方程式表示的一个下移位操作(一个反向下操作)恢复已经通过上移动操作的差分数据。
invert-down(v) …(20)=v (if v≤nKeyInvertDown)=nKeyInvertDown-v (if v>nKeyInvertDown)这里,nKeyInvertDown具有与使用在上移位操作中的最大值nKeyMax相同的值。作为下移位操作的结果,具有超过nKeyInvertDown值的差分数据被转换成低于-1的负值。
根据每一个DND周期中的最大值nKeyMax,对于已经通过下移位操作的差分数据有选择地执行一个反向下分割操作或反向上分割操作。
参考图14B,反向DND处理器1320执行一个次数与该差分数据在编码过程中已经通过的DND操作的次数一样多的反向DND操作。换句话说,反向DND处理器1320设置一个反向DND阶数的初始值等于DND的阶数。随后,反向DND处理器1320每次执行一个反向DND操作就从该反向DND的阶数的初始值减去1,并且保持执行该反向DND操作,直到该反向DND的阶数变成1为止。在步骤S14510中,反向DND处理器1320在DND的每一周期中搜索nKeyMax并且检验每一nKeyMax是否不小于0。
如果nKeyMax小于0,则意味着该编码处理中已经执行了上分割操作,并且因此反向DND处理器1320在步骤S14530中通过执行一个反向上分割操作而把正在解码的差分数据的范围延伸到一个负数区域。在本发明的一个优选实施例中,可以使用由方程式(21)定义的一个反向上分割操作。
inverse-divide-up(v)···(21)]]>=v,(if v≥0)]]>=(nKeyMaxi-1)-v-12,(if v<0,vmod2≠0)]]>=v2,(if v<0,vmod2=0)]]>但是,如果nKeyMax不小于0,则反向DND处理器1320检测该反向DND的阶数是否为1。如果反向DND的阶数不是1,则意味着在编码处理中该正解码的差分数据已经被执行了下分割操作,因此反向DND处理器1320在步骤S14570中通过执行一个反向下分割操作把该差分数据的范围延伸到一个正数区域。
在本发明的一个优选实施例中,可以使用下面方程式定义的一个反向下分割操作。
inverse-divide-down(v)···(22)]]>=v,(if v≥0)]]>=(nKeyMaxi+1)+v-12,(if v<0,vmod2≠0)]]>=v2,(if v<0,vmod2=0)]]>如果nKeyMax不小于0而反向DND的阶数是1,则反向DND处理器1320在步骤S14590中执行一个反向分割操作之后完成整个反向DND操作。在本发明的一个优选实施例中,可以使用由方程式(23)定义的一个反向分割操作。
inverse-divide(v)…(23)=v (if v≥0)=v+(nKeyMax0+1) (if v<0)已经通过相反DND操作的关键字数据的差分数据被输入到反向折叠处理器1330,并且反向折叠处理器1330在步骤S14600中对于该差分数据执行一个反向折叠操作,使得该只被用于一个正数区域中的差分数据被分成正值和负值。在本发明的一个优选实施例中,可以使用由方程式(24)定义的一个反向折叠操作。
inverse-fold(v)=-(v+1)2,(ifvmod2≠0)···(24)]]>=v2,(if vmod2=0)]]>=0,(if v=0)]]>已经通过反向折叠操作的差分数据被输出到反向移位器1340,在步骤S14700中,反向移位器1340把从标题解码器1800输入的、在编码处理中使用的一个模式nKeyShift加到从反向折叠处理器1340输入的差分数据。此操作由下面方程式表示。
inverse-shift(v)=v+nKeyShift…(25)在步骤S14800中,反向DPCM处理器1350使用从标题解码器1800输入的DPCM的阶数把从反向移位器1340输入的差分数据恢复成量化关键字数据。反向移位器1340遵循方程式(26)执行与DPCM的阶数一样多次的反向DPCM操作。
v(i+1)=v(i)+delta(i)…(26)其中,i表示差分数据和关键字数据的一个索引,v表示整数的一个数组,而delta(i)表示差分数据。
已经通过该反向DPCM操作的量化关键字数据被输入到反向量化器1360。随后,反向量化器1360从标题解码器1800接收有关量化比特的大小nKeyQBit和用于反向量化的最大和最小值是否由浮点数转换器315编码的信息,并且在步骤S14900中使用下面方程式把该量化的关键字数据转换成反向量化的关键字数据。
inverse-quantize(v)=fKeyMin+v2nKeyQBit-1×(fKeyMax-fKeyMin)···(27)]]>如果用于量化的最大和最小值在编码关键字数据的处理中尚未由浮点数转换器315转换,则方程式(27)所示的fKeyMin和fKeyMax被分别设置为0和1。但是,如果用于量化的最大和最小值已经由浮点数转换器315所转换,则由浮点数反向转换器1370反向转换的最大和最小值分别被用作该最大和最小值,以便反向量化。
稍后描述实现反向量化的反向DND操作的程序代码的一个实例。
从反向量化器1360输出的解码的关键字数据加到在线性关键字解码器1380中解码的关键字数据,因此构成解码的关键字数据。
下面,在下列段落中描述一个线性关键字解码过程S15000。
标题解码器1800解码来自一个比特数据流的关键字标题信息。如果在该比特数据流中存在关于一个线性关键字区域的信息,则标题解码器1800把用于解码该线性关键字数据区域的开始和结束关键字数据所需的信息输出到浮点数反向转换器1370,并且把编码为线性关键字的关键字数目输出到线性关键字解码器1380。
浮点数反向转换器1370把由十进制数表示的该线性关键字数据区域的开始和结束关键字反向地转换成二进制数字,并且把该二进制数字输出到线性关键字解码器1380。
假定将要被解码的两个浮点数称为fKeyMin和fKeyMax,则解码fKeyMin的一个处理如下。
标题解码器1800从比特数据流读出fKeyMin的位数。如果fKeyMin的位数是0,则fKeyMin被设置为0,并且从该比特数据流读出fKeyMax的位数以便解码fKeyMax。如果fKeyMax的位数不小于8,则意味着fKeyMax已经遵循IEEE标准754被编码。因此,在读出32比特的fKeyMax之后,解码该浮点数fKeyMax。
但是,如果fKeyMax的位数在1和7之间,标题解码器1800从该比特数据流读出一个符号位。在本发明的一个优选实施例中,如果符号位是1,则MinKeyMantissaSign被设置为-1。另一方面,如果符号位是0,则MinKeyMantissaSign被设置为1。然后,参考表格1获得用于进行解码所需的比特的数量,表格1示出一个尾数的位数和用于进行编码所需的比特数目之间的关系。随后,与用于进行编码所需的比特数一样多的比特数据流的比特被读出并且存储在nMinKeyMantissa中。随后,读出该比特数据流的下一个比特,并且存储在MinKeyExponentSign中,与作为尾数的符号存储在MinKeyMantissaSign中的方式相同。对应于一个指数值的该比特数据流的随后六个比特被读出并且存储在nMinKeyExponent中。
通过把从标题解码器1800输入的值替代到方程式(28)中,浮点数反向转换器1370恢复fKeyMin。
fKeyMin=MinKeyMantissaSign*nMinKeyMantissa10MinKeyExponentSign*nMinKeyExponent···(28)]]>恢复fKeyMax的处理与恢复fKeyMin的处理相同。具体地说,在从该比特数据流读出fKeyMax的指数之前,确定是否fKeyMin指数的相同值被用作fKeyMax的指数。如果fKeyMin的指数相同的值不被用作fKeyMin的指数,则以从比特数据流读出fKeyMin的指数的同样方式从该比特数据流读出fKeyMax的指数。
线性关键字解码器1380从浮点数反向转换器1370接收该线性关键字数据区域的开始和结束关键字,并且遵循方程式(29)解码该线性关键字数据区域。
Keyi=fKeyMin+(fKeyMax-fKeyMin)*i(nNumberOfLinearKey-1)···(29)]]>(i=0,...,nNumberOfLinearKey-1)其中,fKeyMin和fKeyMax分别表示该线性关键字数据区域的开始和结束关键字数据。
使用上述方法解码的该线性关键字数据区域中的关键字数据被加到从相反量化器1360输出的关键字数据,然后该相加的结果被输出作为最终关键字数据。
下面将参照图15A和15B描述根据本发明的解码坐标内插符已编码的关键值数据的一个关键值数据解码器和根据本发明的用于解码坐标内插符的关键值数据的一种方法。
图15A是根据本发明优选实施例的关键值数据解码器的框图,而图15B是根据本发明优选实施例的用于解码已编码的关键值数据的一种方法的流程图。
参考图15A,关键值数据解码器1500包括熵解码器1505,熵解码一个输入的比特数据流并且因此产生将要被字典解码的数据,包括DPCM的差分数据、符号标志、用于该符号的位置索引和一个DPCM操作模式;字典解码器1510,根据将要被字典编码的数据的符号和其位置索引产生差分数据;反向DPCM处理器1530,根据一个DPCM操作模式,通过对于差分数据执行一个预定的反向DPCM操作而产生量化数据;反向量化器1550,通过反向量化已经量化的数据而产生恢复的关键值数据;以及标题解码器1800,其解码用于从该输入比特数据流解码坐标内插符需要的信息,并且把该信息输出到字典解码器1510、反向DPCM处理器1530和反向量化器1550。
在下面将参照图15B描述根据本发明的用于解码坐标内插符的已编码的关键值数据的方法。
在步骤S1710中,其上被编码有坐标内插符的一个比特数据流被输入到熵解码器1505,然后熵解码器1505解码该输入的比特数据流。如果该输入的比特数据流已经以一个出现模式编码,则熵解码器1505在步骤S1720中把每一顶点的符号和其位置索引输出到字典解码器1510。另一方面,如果该输入的比特数据流已经以一个增量模式编码,则熵解码器1505在步骤S1720中把指示符号存在的符号标志和用于该符号的位置索引输出到字典解码器1510。
在步骤S1730中,根据该输入的字典编码模式,字典解码器1510通过解码从该熵解码器1510以出现模式输入的该符号和位置索引或通过解码从熵解码器1510以增量模式输入的符号标志和位置索引而产生差分数据,并把该产生的差分数据输出到反向DPCM处理器1530。
在步骤S1740中,反向DPCM处理器1530根据该输入差分数据的解码的DPCM工作模式,通过对于从字典解码器1510输入的该差分数据执行反向时间DPCM操作、反向空间DPCM操作以及反向时空DPCM操作之一而产生量化的关键值数据,并且把该量化的关键值数据输出到反向量化器1550。
在步骤S1750中,反向量化器1550使用从该关键字值标题解码器1800输入的每一个成份的数据中的最小值和该最大数据范围,反向量化从反向DPCM处理器1530输入的已量化的关键值数据。
在步骤S1760中,反向量化器1550检查该反向量化的关键值数据的矩阵是否已经在该编码处理过程中转换成一个转置矩阵,并且如果该反向量化的关键值数据的矩阵已经转置,则在步骤S1765中反向地转换该转置矩阵。
在步骤S1770中,反向量化器1550输出一个恢复的坐标内插符的关键值数据。
下面参照图16A至17B更详细描述该关键值数据解码器1500的结构和操作。
熵解码器1505首先从一个输入比特数据流中解码一个指示一个DPCM模式的比特数据流,然后解码包括bSelFlag、nKVACodingBit、nQMin和nQMax的数列。
在该编码处理中,首先把bSelFlag和nKVACodingBit分别设置为1和0。如果bSelFlag被解码成1,则熵解码器1505解码nKVACodingBit、nQMin和nQMax。另一方面,如果bSelFlag被解码成0,则熵解码器1505只解码nQMin。
在解码bSelFlag、nKVACodingBit、nQMin和nQMax的数列以后,熵解码器1505解码指示字典编码模式的nDicModeSelect。根据nDicModeSelect的值,将要被解码的比特数据流被分成下面段落将被描述的两个不同种类。
图18A是一个说明坐标内插符的每一顶点和每一个顶点的分量数据的比特数据流的结构的示意图。如图18A所示,如果nDicModeSelect是0,一个比特数据流包括已经在出现模式编码器中编码的符号和位置索引。另一方面,如果nDicModeSelect是1,则一个比特数据流包括已经在增加模式编码器中编码的符号标志和位置索引。
上面已经描述的根据本发明的熵解码器使用以图18B所示的程序代码实现的一个函数decodeSignedQuasiAAC()。在函数encodeSignedQuasiAA()中,使用涉及输入值及其符号的一个上下文对一种自适应算法编码的比特数据流进行编码。具体地说,在函数decodeSignedQuasiAAC()中,使用一个零上下文对跟随一个符号位后的比特解码。熵解码器1505把该解码的数据输出到字典解码器1510。
图16A是根据本发明的字典解码器1510的一个框图,而图17A是字典编码方法的流程图。
如图16A所示,字典解码器1510包括DPCM模式解码器1512,恢复输入其中的每一顶点的一个DPCM模式;字典模式选择器1514,选择输入每一顶点的字典解码模式;出现模式解码器1516,从字典模式选择器1514接收每一顶点的每一分量的符号和针对该符号的位置索引,并且恢复差分数据;以及增量模式解码器1518,其从字典模式选择器1514接收一个符号标志和用于该符号的位置索引,并且恢复差分数据。
参考图17A,在步骤S1731中,包括该符号、符号标志和位置索引的每一顶点的熵解码的分量数据被输入到DPCM模式解码器1512。
在字典解码的差分数据被输出到反向DPCM处理器1530之前,在步骤S1732中,DPCM模式解码器1512解码一个反向DPCM操作的模式,该反向DPCM操作是在反向DPCM处理器1530中将对于每一顶点的每一成份的差分数据执行的操作。
下面参考图19A描述DPCM模式解码。
除了表示每一顶点的每一分量的DPCM模式的组合的符号数目被固定在27、因此符号表的大小也被固定在27之外,DPCM模式解码与稍后将被描述的增量模式解码相同。
DPCM模式解码器1512接收一个DPCM模式标志并且跟随输入的位置索引把对应于该DPCM模式标志的符号记录在一个数据组中。
例如,如图19A所示,对应于该输入DMCM模式标志的符号是1(TTS),4(TSS),和5(TST+S),而其各自的索引是(010100)、(1010)和(11)。因此,使用符号1和其位置索引(010100)恢复一个数据组(X1X1XX),使用符号4和其位置索引(1010)恢复一个数据组(41X14X),以及使用符号5和其位置索引(11)恢复一个数据组(415145)。
该恢复的数据组(415145)被转换成DPCM模式(TSS)(TTS)(TST+S)(TTS)(TSS)(TST+S)的组合的一个数组。因此,有可能根据恢复的数据组识别已经对于每一顶点的每一分量执行了哪一种DPCM。
DPCM模式解码器1512把每一顶点的每一分量的差分数据连同该解码的DPCM模式信息一起输出到字典模式选择器1514。
在步骤S1734中,字典模式选择器1514根据每一顶点的每一分量的nDicModeSelect的值,把从DPCM模式解码器1512输入的每一顶点的成份数据输出到出现模式解码器1516或增量模式解码器1518。
如果nDicModeSelect是0,则字典模式选择器1514把顶点的成份数据输出到出现模式解码器1516,而如果nDicModeSelect是1,则字典模式选择器1514把顶点的成份数据输出到增量模式解码器1518。
在步骤S1736中,出现模式解码器1516把每一个分量的该符号数据和位置索引恢复成差分数据。
图19B是说明出现模式解码的一个实例的示意图。参考图19B,出现模式解码器1516从字典模式选择器1514接收符号数据并且检验bSoleKV和nTrueOne。
如果bSoleKV表示在差分数据中有多个输入符号并且nTrueOne表示位置索引尚未反向,则出现模式解码器1516通过在一个数据组中在由其各自位置索引指示的各自位置上插入输入符号而恢复差分数据。
例如,出现模式解码器1516顺序地接收符号3、7和-4以及其各自的位置索引(01000101000)、(1010100)和(111)。
出现模式解码器1516在跟随位置索引(01000101000)的一个差分数据组中记录第一符号3。因此,通过把符号3插入在该差分数据组中的对应于该位置索引(01000101000)中1所处在的位置而获得(3X3XXX3X3XXX)。
出现模式解码器1516恢复该随后的符号7。在恢复该符号7的过程中,不考虑该差分数据组中的符号3的位置,使得用于该符号7的位置索引不是(0101000100),而是(1010100)。
出现模式解码器1516在该差分数据组中的没被符号3占用的位置中的第一位置记录该符号7,然后在该差分数据组中对应于位置索引(1010100)中的1处在的位置记录该符号7。因此,在恢复符号7之后,该差分数据组是(3737X73X37XX)。
出现模式解码器1516按照该索引(111)恢复该符号-4,并且因此产生差分数据组是(3737-473-4374-4)。
如果bSoleKV被设置为1,则意味着在差分数据中仅存在一个输入符号,并且没有用于该输入符号的位置索引。因此,出现模式解码器1516把该输入符号记录在一个空白差分数据组中的第一位置,并且执行用于恢复该下一个符号的处理。
在步骤S1736中,增量模式解码器1518把每一个分量的符号标志和位置索引恢复成差分数据。下面参考图19C描述增量模式解码。
增量模式解码器1518从字典模式选择器1514接收指示在差分数据中是否存在符号的符号标志、指示位置索引是否已经反向的nTrueOne以及该位置索引。
增量模式解码器1518根据该输入符号标志解码在该差分数据中包括的符号。像用于增量模式编码的符号表一样,在用于增量模式解码的一个符号表中,按照从具有最低绝对值的符号到具有最大绝对值的符号的次序把符号排列为一列,并且在具有相同绝对值的两个符号之间,具有正值的符号排列在比另外一个符号高的一行中。符号标志的大小是2nKVCodingBit+1-1,其中nKVCodingBit表示在熵解码器1505中解码的量化比特的数量。因此,如果一个符号标志是(0011001),则增量模式解码器1518解码存在于该差分数据中作为符号存在的-1,2,和-3。
符号标志之后输入的位置索引分别是(101000101000),(00101011),和(1111)并且分别对应于符号-1、2和3。
增量模式解码器1518在差分数据组中对应于该位置索引(101000101000)中1处在的位置的位置记录符号-1,使得产生的数据组是(-1X-1XXX-1X-1XXX)。
随后,增量模式解码器1518通过在该差分数据组中的对应于在该位置索引(00101011)中1处在的位置的位置中记录2而恢复该符号2。在恢复该符号2的过程中,不考虑该差分数据组中的第一个符号-1的位置,使得该产生的差分数据组是(-1X-1X2X-12-1X22)。
增量模式解码器1518通过在该差分数据组中的对应于在位置索引(1111)中的1处在的位置的位置记录-3而恢复该符号-3,使得产生的差分数据组是(-1-3-1-32-3-1-322)。
在步骤S1739中,出现模式解码器1516和增量模式解码器1518恢复每一顶点的每一分量的差分数据,并且把恢复的差分数据输出到反向DPCM处理器1530。
图16B是根据本发明的反向DPCM处理器1530的一个框图,而图17B是一个反向DPCM操作的流程图。
参考图16B,根据本发明的反向DPCM处理器1530包括反向时间DPCM操作器1542,对于输入的差分数据执行一个反向时间DPCM操作和一个反向循环量化操作,然后输出坐标内插符的量化的关键值数据;反向空间DPCM操作器1544,对于输入的差分数据执行一个反向空间DPCM操作和一个反向循环量化操作,随后输出该量化的关键值数据;反向时空DPCM操作器1546,对于输入的差分数据执行一个反向时空DPCM操作和一个反向循环量化操作,随后输出该量化的关键值数据;以及反向DPCM模式选择器1535,把输入其中的差分数据输出到反向时间DPCM操作器1542、反向空间DPCM操作器1544和反向时空DPCM操作器1546之一。
参考图17B,在步骤S1742中,反向DPCM模式选择器1535将根据在DPCM模式解码器1512中恢复的每一顶点的每一分量的DPCM操作模式而确定将对于输入其中的差分数据执行的一个反向DPCM操作,并且按照该反向DPCM操作模式而输出每一顶点的每一分量的该输入的差分数据。
DPCM操作器1542、1542和1546的每一个同时对于输入其中的差分数据执行一个反向DPCM操作和一个反向循环量化操作。
在步骤S1744中,反向时间DPCM操作器1542遵循方程式(30)对于该输入的差分数据执行一个反向时间DPCM操作,在步骤S1746中,反向空间DPCM操作器1544遵循方程式(31)对于输入的差分数据执行一个反向空间DPCM操作,在步骤S1748中,反向时空DPCM操作器1546遵循方程式(32)对于该输入的差分数据执行一个反向时空DPCM操作。
V~i,j=Di,j+V~i-1,j···(30)]]>V~i,j=Di,j+V~i,Ref···(31)]]>V~i,j=Di,j+{V~i-1,j+(V~i,Ref-V~i-1,Ref)}···(32)]]>在方程式(30)至(32)中, 表示在第i关键帧中的第j个顶点的量化关键值数据,Di,j表示在该第i关键帧中的该第j个顶点的差分数据,而Ref表示一个参考顶点。
在方程式(31)和(32)中,如果 或 小于每一个成份的量化关键值数据中的最小值,则使用该最小值而不使用 或 如果 或 大于在每一分量的量化关键值数据当中的最大值,则使用该最大值而不使用 或 DPCM操作器1542、1544和1546的每一个都使用方程式(33)执行一个反向DPCM操作并且同时执行一个反向循环量化操作,以便扩展已经在该编码处理过程中降低的差分数据的范围。
InverseCircularQuantization(Xi)…(33)X′i=X~i-(nQMax-nQMin+1),(ifX~i≥0)]]>X′i=X~i+(nQMax-nQMin+1),(otherwise)]]>X^i=X^i-1+X~i(if nQMin≤X^i-1+X~i≤nQMax)]]>X^i=X^i-1+X′i,(if nQMin≤X^i-1+X′i≤nQMax)]]>在方程式(33)中, 是与Di,j相同的输入值, 是与 或 一样的一个在前反向循环量化值。nQMax和nQMin分别表示在DPCMed差分数据中的最大值和最小值。
在步骤SS1749中,反向DPCM处理器1530把已经反向DPCM的和反向循环量化的每一顶点的每一分量的关键值数据输出到反向量化器1550。
参考图15B,反向量化器1550遵循方程式(4),把在从该关键字值标题解码器1800输入的在输入成份数据中的最小值fMin_X、fMin_Y和fMin_Z以及最大范围值fMax转换成二进制数,并且通过把fMin_X、fMin_Y、fMin_Z和fMax替代到方程式(34)中而反向量化从反向DPCM处理器1530输入的量化关键值数据。
V^i,j,x=fMin_X+V~i,j,x2nKVQBits-1×fMax···(34)]]>V^i,j,y=fMin_Y+V~i,j,y2nKVQBits-1×fMax]]>V^i,j,z=fMin_Z+V~i,j,z2nKVQBits-1×fMax]]>方程式(34)中,nKVQBits表示用于反向量化的一个量化比特的大小。
反向量化器1550必须以表2示出的矩阵的形式输出每一顶点的每一分量的反向量化的关键值数据。为了实现此目的,在步骤S1760中,反向量化器1550在输出该反向量化的关键值数据之前检验该反向量化的关键值数据的模式是否为一个转置模式。如果该反向量化的关键值数据的模式是一个转置模式,则在步骤S1765中,反向量化器1550通过反向转换该转置矩阵而产生并且输出坐标内插符的解码的关键值数据。
图20A至20L是示出SDL程序代码的实例的图表,通过该SDL程序代码,实现根据本发明优选实施例的用于解码坐标内插符的关键字数据和关键值数据的装置。
图20A是说明一个类CompressedCoordinateInterpolator的示意图,它是用于读出坐标内插符的压缩比特数据流的最高类。在图20A中,KeyHeader和Key是用于从比特数据流读出关键信息的类,对应于常规CoordinateInterpolator节点中的关键字字段数据。CoordIKeyValueHeader和CoordIKeyValue是用于读出对应于在常规CoordinateInterpolator结点中的keyValue字段数据的keyValue信息的类。函数qf_start()被用于在读出该比特数据流的AAC-编码的部分以前初始化一个算法解码器。
图20B是说明用于解码一个关键字标题的类的示意图,它是用于一个解码处理所需要的信息。
该关键字标题中的主信息是关键字的数目、量化比特、帧内关键字数据、用于进行解码的DND标题和实际比特。nKeyQBit是用于该反向量化以便恢复该浮点关键字值的量化比特。nNumKeyCodingBit表示关键字数据数的nNumberOfKey的比特大小,它表示关键字数据的数目。nKeyDigit表示在该原始关键字数据中的最大有效位,并且能被用于舍入该解码的值。当在该标题中包括有关线性关键字子区域的信息时,bIsLinearKeySubRegion标志设置为1。在此情况中,能够使用跟随该bIsLinearKeySubRegion标志的解码的标题信息计算在整个关键字范围之内的某一子区域中包括的关键字。bRangeFlag指示关键字数据的范围是否从0到1。如果该范围不是0到1,则从KeyMinMax类解码最小值和最大值。KeyMinMax类重建用于反向量化的最小值和最大值。每一个值能够被分成尾数和指数。nBitSize是若干关键字标题信息数据的比特量,它们是nQIntraKey、nKeyShift和nKeyMax。nQIntraKey是第一量化的帧内数据的幅值。它连同表示nQIntraKey的符号的nQIntraKeySign结合在一起。它被用作对该量化的关键字数据的剩余部分进行恢复的一个基础。对于在该内插符压缩中的所有的符号位,值0表示一个正号而1表示一个负号。nKDPCMOrder是DPCM的阶数减1。该阶数的范围可以从1到3。量化帧内数据的数目与DPCM的阶数相同。
nKeyShift,连同符号位nKeyShiftSign一起,是表明在该关键字数据解码器中移位的量的整数。如果该bShiftFlag被设置为真,则解码这两个值。nDNDOrder是DND(分割-与-分割)的阶数。DND在该关键字数据解码器中描述。如果nDNDOrder的值是7,则bNoDND被解码。此布尔值表示是否将进行反向DND处理。nKeyMax是在连续反向DND处理每一个过程中使用的最大值或最小值。nKeyCodingBit是用于编码关键字数据的比特。bSignedAACFlag表示哪个解码方法被用于AAC解码。如果该值是0,则执行无符号AAC解码。否则,执行有符号的AAC解码。bKeyInvertDownFlag是表示是否使用nKeyInvertDown的布尔值。nKeyInvertDown是整数值,使得所有的量化的高于该整数值的关键字数据被反向到从-1和低于-1开始的负值。如果nKeyInvertDown是-1,则不执行反向。图20C是说明一个类LinearKey的示意图。图20C中,nNumLinearKeyCodingBit是表示为了编码线性可预测关键字的一个预定的数量的所需比特数目的一个值。nNumberOfLinearKey是表示线性可预测关键字数目的一个值。
图20D是说明一个类KeyMinMax的示意图。图20D中,bMinKeyDigitSame是一个标志,表示全部关键字的最高有效位的数目(nKeyDigit)和在关键字当中的一个最小值的最高有效位的数量是否相同。nMinKeyDigit是表示在该关键字当中的该最小值的最高有效位数目的一个值。nMinKeyMantissaSign是表示nMinKeyMantissa的符号的一个值。
nMinKeyMantissa是表示在关键字当中的最小值的尾数的一个值。nMinKeyExponentSign是表示nMinKeyExponent的一个符号的一个值。
nMinKeyExponent是表示在关键字当中的最小值的指数的一个值。fKeyMin是表示在关键字当中的最小值的一个值。bMaxKeyDigitSame是一个标志,指示全部关键字的最高有效位的数目nKeyDigit和在关键字当中的一个最大值的最高有效位的数目是否相同。nMaxkeyDigit是表示在该关键字当中的该最大值的最高有效位数目的一个值。nMinKeyMantissaSign是表示nMaxKeyMantissa的符号的一个值。nMaxKeyMantissa是表示在该关键字当中最大值的尾数的一个值。
bSameExponent是一个标志,指示在关键字当中的最大值的指数是否nMinKeyExponent相同。nMaxKeyExponentSign是表示nMaxKeyExponent的符号的一个值。nMaxKeyExponent是表示在关键字当中的最大值的指数的一个值。FKeyMax是表示在关键字当中的最大值的一个值。
图20E是说明一个类Key的示意图。在图20E中,nQKey是从一个比特数据流解码的量化关键字数据的一个数组。KeyContext是用于读取nQKey的一个幅值的一个上下文。KeySignContext是用于读取nQKey的一个符号的一个上下文。
DecodeUnsignedAAC是一个函数,利用下面将描述的一个给出上下文执行自适应算术编码的一个无符号解码过程。DecodeSignedAAC是一个函数,利用下面将描述的一个给出上下文执行自适应算术编码的一个有符号解码过程。
图20F是说明一个类CoordIKeyValueHeader的示意图。图20F中,在解码关键字标题数据之后,解码关键字值标题数据。一个关键字值标题包括顶点的数量、用于关键值数据的量化参数以及在将被用于量化的关键值数据当中的最小值和最大值。bTranspose是指示当前模式是否为一个转置模式或一个顶点模式的标志。如果bTranspose是1,则选择一个转置模式。否则,选择一个顶点模式。nKVQBit表示为了用于恢复浮点数字的反向量化所需的量化比特。nCoordQBit表示nNumberOfCoord的比特大小,nNumberOfCoord表示顶点数目。nKVDigit在一个反向量化之后使用,表示关键值数据的有效位的最大数目。一个类KeyValueMinMax恢复在关键值数据的每一成份的量化值和一个将用于反向量化最大关键值数据范围中的最小值。上述的值的每一个能够被分成各自的尾数和指数。标题信息的其它部分包括在该关键值数据的每一分量的量化值中的最大和最小值中的一个最大值和一个最小值。具体地说,nXQMinOfMax表示在每一个顶点的x成份的量化值中的最大值当中的一个最小值。
图20G和20H是表示程序代码的实例的示意图,借助该程序代码实现根据本发明优选实施例的一个DPCM模式解码器。参考图20G和20H,nDPCMMode是表示每一顶点的每一个成份x、y和z的一个DPCM模式的一个整数数组。nDPCMMode可以具有值1(一个时间DPCM操作)、2(一个空间DPCM操作)或3(一个时空操作)。
bSelFlag是用于每一顶点的每一分量的选择标志。只有针对bSelFlag被设置为‘真′的具有分量的顶点才使用字典编码器340编码。selectionFlagContext是用于读出bSelFlag的一个上下文。
nKVACodingBit是一个整数数组,表示为了编码每一顶点的每一分量所需的比特。aqpXContext是用于读出nKVACodingBit的一个上下文。
nRefVertexis是表示用于全部顶点的一个参考顶点的索引的整数数组。refContext是用于读出nRefVertex的一个上下文。nQMin是一个整数数组,表示在每一顶点的每一分量的量化值中的最小值。qMinContext是用于读出nQMin的一个上下文。qMinSignContext是用于读取nQMin的符号的一个上下文。
nQMax是一个整数数组,表示在每一顶点的每一分量的量化值中的最大值。qMaxContext是用于读出nQMax的一个上下文。qMaxSignContext是用于读取nQMax的符号的一个上下文。
图20I是一个类CoordIDPCMMode的示意图,用于根据本发明优选实施例而解码一个DPCM模式。bAddressOfDPCMMode表示在DPCM字典表格中的DPCM字典符号的用法,其中每一个包括用于每一成份的DPCM模式。存在DPCM模式的三个类型T、S和T+S,并且一个顶点包括三个分量。因此如上面表3所示,存在27个字典符号指示所有可能的DPCM模式的组合。dpcmModeDicAddressContext是用于读出bAddressOfDPCMMode的一个上下文。
bDPCMIndex指示已经用于每一个顶点的一个DPCM符号。dpcmModeDIcIndexContext是用于读出dpcmModeDicIndexContext的一个上下文。
图20J是一个类CoordIKeyValueDic的示意图,该类用于根据本发明优选实施例而解码一个字典编码模式。图20J中,nDicModeSelect指示在一个字典编码处理过程中已经使用了哪个编码模式。当nDicModeSelect设置为1时,意味着该编码模式是一个增量模式。另一方面,当nDicModeSelect是0,则意味着该字典编码模式是一个出现模式。
图20K是表示一个类CoordIIncrementalMode的示意图,通过该类实现根据本发明优选实施例的一个增量模式解码方法。图20K中,bAddress表示量化关键值数据的递增字典符号的用法。增量字典表格中的符号数目是2(nKVCodingBit+1)-1。dicAddressContext是用于读出bAddress的一个上下文。
nTrueOne是指示索引数据是否已经反向的一个值。如果nTrueOne设置为1,则在一个位置索引中的‘1’值被编译为指示一个符号的位置的真值。如果nTrueOne设置为0,则在该位置索引中的‘0’值被编译为指示该符号的位置的真值。
bAddrIndex指示哪个增量字典符号已经被用于每一顶点的每一分量。dicIndexContext是用于读出bAddrIndex的一个上下文。
图20L是表示一个类CoordIOccurrenceMode的示意图,通过该类实现根据本发明优选实施例的一个出现模式解码方法。图20L中,nQKV是包括对应于量化关键值数据的发生字典符号的一个整数数组。kvXContext、kvYContext和kvZContext是用于读出nQKV的上下文。kvSignContext是用于读取nQKV的一个符号的一个上下文。
bSoleKV表示一个符号是否仅出现一次。当一个预定符号仅出现一次时,bSoleKV设置为1。dicSoleKVContext是用于读出bSoleKV的一个上下文。bDicIndex指示哪个发生字典符号已经被用于每一顶点的每一分量。dicIndexContext是用于读出bDicIndex的一个上下文。
本发明能够实现为写在计算机可读取记录介质上的计算机可读代码。其中,计算机可读记录介质包括能够由计算机系统读出的任何种类的记录介质。例如,该计算机可读记录介质可以包括ROM、RAM、CD-ROM、磁带、软盘、光数据存储器、载波(通过互联网络发送)等。该计算机可读记录介质能够经过网络连接与计算机系统分散配置,并且一个计算机能够以分散的方法读出该记录介质。
由于根据本发明的用于编码坐标内插符的装置包括一个关键字数据编码器,该关键字数据编码器利用关键字数据单调增加的事实对关键字数据进行编码,所以该装置能够以高效率编码动画关键字数据。此外,由于根据本发明的用于编码坐标内插符的装置包括一个关键值数据编码器,其考虑了在关键值数据之间的时间相关性以及在关键值数据之间的空间相关而编码关键值数据,所以该装置能够以少量的数据来恢复高品质的动画。
虽然已经参照几个优选实施例具体地展示和描述了本发明,但是本领域技术人员将理解,在不背离由所附的权利要求书定义的本发明的精神和范围的条件下可以进行各种形式和细节上的改变。
权利要求
1.一种用于解码比特数据流的方法,所述比特数据流中编码有坐标内插符,所述坐标内插符包括关键字数据和包含与所述关键字数据有关的信息的关键字标题,所述关键字数据表示在时间轴上的关键帧的位置,该方法包括(a)解码关键字标题;以及(b)根据在(a)中执行的解码的结果而解码关键字数据。
2.根据权利要求1所述的方法,其中,(b)包括通过执行熵解码、反向移位、反向差分脉码调制(DPCM)、反向量化、以及线性关键字合成,而解码关键字数据。
3.根据权利要求2所述的方法,其中,关键字标题包括量化比特量(nKVQBit),其指示用来量化关键字数据的比特数;关键字数据量(nNumberOfKey),其指示关键字数据的数目;关键字数据位数(nKeyDigit),其指示关键字数据的位数;线性关键字标志(bIsLinearKeySubRegion),其指示关键字是否包括线性关键字区域;开始/结束关键字数据(IKey),如果线性关键字标志(bIsLinearKeySubRegion)被设置为值1,则开始/结束关键字数据(IKey)被包括在关键字标题中,开始/结束关键字数据(IKey)指示线性关键字区域开始和结束的位置;量化误差调节标志(bRangeFlag),其指示是否使用可使量化误差最小的方法来调节关键字数据的最大值和最小值;已调节的关键字数据的最大值和最小值(KeyMinMax),如果量化误差调节标志(bRangeFlag)被设置为值1,则已调节的关键字数据的最大值和最小值被包括在关键字标题中,已调节的关键字数据的最大值和最小值(KeyMinMax)被用来执行反向量化;DPCM阶数(nKDPCMOrder),其指示已执行了多少次DPCM迭代;参考关键字数据(nQIntraKey),其用来确定是否执行DPCM,其中,参考关键字数据(nQIntraKey)的数目与DPCM阶数(nKDPCMOrder)相对应;关键字数据符号位(nQIntraKeySign),其中,关键字数据符号位(nQIntraKeySign)的数目与DPCM阶数(nKDPCMOrder)相对应;移位标志(bShiftFlag),其基于在通过DPCM得到的所有关键字数据之中具有最高频率的关键字数据,而指示是否对所有关键字数据移位;移位值(nKeyShift),其表示要对所有关键字数据移位的程度;移位值符号位(nKeyShiftSign),其为移位值(nKeyShift)的符号位;分割-与-分割(DND)阶数(nDNDOrder),其指示已执行了多少次DND迭代,以调节DPCM结果的范围;用来执行DND的最大值和最小值中的至少一个(nKeyMax),其中,最大值和最小值的数目与DND阶数(nDNDOrder)相对应;符号位(nKeyMaxSign),其标识最大值和最小值中的至少一个(nKeyMax),其中,符号位(nKeyMaxSign)数目与DND阶数(nDNDOrder)相对应;反向下标志(bKeyInvertDownFlag),其指示是否对DND结果进行反向下操作;反向下值(nKeyInvertDown),其指示要对DND结果进行反向下的程度;以及自适应算法编码(AAC)标志(bSignedAACFlag),其指示已使用有符号AAC方法还是无符号AAC方法而执行了熵编码,其中,线性关键字区域是关键字数据线性增大的区域。
4.根据权利要求3所述的方法,其中,(b)包括如果AAC标志(bSignedAACFlag)指示已使用有符号AAC方法而对编码的关键字数据进行了编码,则通过执行反向有符号AAC而对编码的关键字数据执行熵解码,并且,如果AAC标志(bSignedAACFlag)指示已使用无符号AAC方法而对编码的关键字数据进行了编码,则通过执行反向无符号AAC而对编码的关键字数据执行熵解码;如果DND阶数(nDNDOrder)被设置为1或更大的值,则对熵解码的结果执行反向DND;如果DND阶数(nDNDOrder)被设置为-1之外的值,则对熵解码的结果执行反向折叠;如果DND阶数(nDNDOrder)被设置为-1之外的值,则将反向折叠的结果反向移位与所述移位值(nKeyShift)一样多,并且,如果DND阶数(nDNDOrder)被设置为-1的值,则将熵解码的结果反向移位与所述移位值(nKeyShift)一样多;根据DPCM阶数(nKDPCMOrder)而对反向移位的结果执行反向DPCM;如果已调节了最大和最小关键字数据,则调节反向DPCM的结果,并且,根据量化比特大小(nKeyQBit)而对已调节的结果执行反向量化;以及如果解码的关键字标题包括线性关键字区域,则使用开始/结束关键字数据(IKey)而对线性关键字区域的关键字数据解码,并且,对解码的结果和反向量化的结果执行线性关键字合成。
5.根据权利要求4所述的方法,其中,在执行反向DND时,如果DND阶数(nDNDOrder)被设置为1或更大的值、且反向下值不为-1,则执行反向下操作,即在熵编码期间执行的上移位操作的反向操作,如果DND阶数(nDNDOrder)被设置为1或更大的值、且反向下值不为-1,则不执行反向下操作,并且,反向DND的执行包括执行反向DND预定次数,该预定次数与DND阶数(nDNDOrder)相对应,其中,如果反向DND的当前迭代不是反向DND的最后迭代、且所述至少一个(nKeyMax)为正值,则使用反向下分割方法而执行反向DND的当前迭代,如果反向DND的当前迭代不是反向DND的最后迭代、且所述至少一个(nKeyMax)为负值,则使用反向上分割方法而执行反向DND的当前迭代,并且,如果反向DND的当前迭代是反向DND的最后迭代,则无论所述至少一个(nKeyMax)是正值还是负值,均使用反向上分割方法而执行反向DND的当前迭代。
6.一种用于编码坐标内插符的方法,所述坐标内插符包括关键字数据和包含与关键字数据有关的信息的关键字标题,所述关键字数据表示在时间轴上的关键帧的位置,该方法包括(a)编码关键字标题;以及(b)根据在(a)中执行的编码的结果而编码关键字数据。
7.根据权利要求6所述的方法,其中,(b)包括通过执行量化、差分脉码调制(DPCM)、以及熵编码,而编码关键字数据。
8.根据权利要求7所述的方法,其中,关键字标题包括量化比特量(nKVQBit),其指示用来量化关键字数据的比特数;关键字数据量(nNumberOfKey),其指示关键字数据的数目;关键字数据位数(nKeyDigit),其指示关键字数据的位数;线性关键字标志(bIsLinearKeySubRegion),其指示关键字是否包括线性关键字区域;开始/结束关键字数据(IKey),如果线性关键字标志(bIsLinearKeySubRegion)被设置为值1,则开始/结束关键字数据(IKey)被包括在关键字标题中,开始/结束关键字数据(IKey)指示线性关键字区域开始和结束的位置;量化误差调节标志(bRangeFlag),其指示是否使用可使量化误差最小的方法来调节关键字数据的最大值和最小值;已调节的关键字数据的最大值和最小值(KeyMinMax),如果量化误差调节标志(bRangeFlag)被设置为值1,则已调节的关键字数据的最大值和最小值被包括在关键字标题中,已调节的关键字数据的最大值和最小值(KeyMinMax)被用来执行量化;DPCM阶数(nKDPCMOrder),其指示已执行了多少次DPCM迭代;参考关键字数据(nQIntraKey),其用来确定是否执行DPCM,其中,参考关键字数据(nQIntraKey)的数目与DPCM阶数(nKDPCMOrder)相对应;关键字数据符号位(nQIntraKeySign),其中,关键字数据符号位(nQIntraKeySign)的数目与DPCM阶数(nKDPCMOrder)相对应;移位标志(bShiftFlag),其基于在通过DPCM得到的所有关键字数据之中具有最高频率的关键字数据,而指示是否对所有关键字数据移位;移位值(nKeyShift),其表示要对所有关键字数据移位的程度;移位值符号位(nKeyShiftSign),其为移位值(nKeyShift)的符号位;分割-与-分割(DND)阶数(nDNDOrder),其指示已执行了多少次DND迭代,以调节DPCM结果的范围;用来执行DND的最大值和最小值中的至少一个(nKeyMax),其中,最大值和最小值的数目与DND阶数(nDNDOrder)相对应;符号位(nKeyMaxSign),其标识最大值和最小值中的至少一个(nKeyMax),其中,符号位(nKeyMaxSign)数目与DND阶数(nDNDOrder)相对应;反向下标志(bKeyInvertDownFlag),其指示是否对DND结果进行反向下操作;反向下值(nKeyInvertDown),其指示要对DND结果进行反向下的程度;以及自适应算法编码(AAC)标志(bSignedAACFlag),其指示已使用有符号AAC方法还是无符号AAC方法而执行了熵编码,其中,线性关键字区域是关键字数据线性增大的区域。
9.根据权利要求8所述的方法,其中,(b)包括根据量化比特大小(nKeyQBit)而对关键字数据执行量化;通过根据DPCM阶数(nKDPCMOrder)而对量化的结果执行DPCM,生成差分数据;对差分数据执行DND,以便使差分数据的最大值和最小值之间的差最小;以及对DND的结果执行熵编码。
10.一种用于解码比特数据流的装置,所述比特数据流中编码有坐标内插符,所述坐标内插符包括关键字数据和包含与所述关键字数据有关的信息的关键字标题,所述关键字数据表示在时间轴上的关键帧的位置,该装置包括关键字标题解码单元,其解码关键字标题;以及关键字解码单元,其根据由关键字标题解码单元执行的解码的结果而解码关键字数据。
11.根据权利要求10所述的装置,其中,关键字解码单元通过执行熵解码、反向移位、反向差分脉码调制(DPCM)、反向量化、以及线性关键字合成,而解码关键字数据。
12.根据权利要求11所述的装置,其中,关键字标题包括量化比特量(nKVQBit),其指示用来量化关键字数据的比特数;关键字数据量(nNumberOfKey),其指示关键字数据的数目;关键字数据位数(nKeyDigit),其指示关键字数据的位数;线性关键字标志(bIsLinearKeySubRegion),其指示关键字是否包括线性关键字区域;开始/结束关键字数据(IKey),如果线性关键字标志(bIsLinearKeySubRegion)被设置为值1,则开始/结束关键字数据(IKey)被包括在关键字标题中,开始/结束关键字数据(IKey)指示线性关键字区域开始和结束的位置;量化误差调节标志(bRangeFlag),其指示是否使用可使量化误差最小的方法来调节关键字数据的最大值和最小值;已调节的关键字数据的最大值和最小值(KeyMinMax),如果量化误差调节标志(bRangeFlag)被设置为值1,则已调节的关键字数据的最大值和最小值被包括在关键字标题中,已调节的关键字数据的最大值和最小值(KeyMinMax)被用来执行反向量化;DPCM阶数(nKDPCMOrder),其指示已执行了多少次DPCM迭代;参考关键字数据(nQIntraKey),其用来确定是否执行DPCM,其中,参考关键字数据(nQIntraKey)的数目与DPCM阶数(nKDPCMOrder)相对应;关键字数据符号位(nQIntraKeySign),其中,关键字数据符号位(nQIntraKeySign)的数目与DPCM阶数(nKDPCMOrder)相对应;移位标志(bShiftFlag),其基于在通过DPCM得到的所有关键字数据之中具有最高频率的关键字数据,而指示是否对所有关键字数据移位;移位值(nKeyShift),其表示要对所有关键字数据移位的程度;移位值符号位(nKeyShiftSign),其为移位值(nKeyShift)的符号位;分割-与-分割(DND)阶数(nDNDOrder),其指示已执行了多少次DND迭代,以调节DPCM结果的范围;用来执行DND的最大值和最小值中的至少一个(nKeyMax),其中,最大值和最小值的数目与DND阶数(nDNDOrder)相对应;符号位(nKeyMaxSign),其标识最大值和最小值中的至少一个(nKeyMax),其中,符号位(nKeyMaxSign)数目与DND阶数(nDNDOrder)相对应;反向下标志(bKeyInvertDownFlag),其指示是否对DND结果进行反向下操作;反向下值(nKeyInvertDown),其指示要对DND结果进行反向下的程度;以及自适应算法编码(AAC)标志(bSignedAACFlag),其指示已使用有符号AAC方法还是无符号AAC方法而执行了熵编码,其中,线性关键字区域是关键字数据线性增大的区域。
13.根据权利要求12所述的装置,其中,关键字解码单元包括第一熵解码单元,如果AAC标志(bSignedAACFlag)指示已使用有符号AAC方法而对编码的关键字数据进行了编码,则第一熵解码单元通过执行反向有符号AAC而对编码的关键字数据执行熵解码,并且,如果AAC标志(bSignedAACFlag)指示已使用无符号AAC方法而对编码的关键字数据进行了编码,则第一熵解码单元通过执行反向无符号AAC而对编码的关键字数据执行熵解码;反向DND单元,如果DND阶数(nDNDOrder)被设置为1或更大的值,则反向DND单元对由熵解码单元执行的熵解码的结果执行反向DND;反向折叠单元,如果DND阶数(nDNDOrder)被设置为-1之外的值,则反向折叠单元对由熵解码单元执行的熵解码的结果执行反向折叠;反向移位单元,如果DND阶数(nDNDOrder)被设置为-1之外的值,则反向移位单元将由反向折叠单元执行的反向折叠的结果反向移位与所述移位值(nKeyShift)一样多,并且,如果DND阶数(nDNDOrder)被设置为-1的值,则反向移位单元将由熵解码单元执行的熵解码的结果反向移位与移位值(nKeyShift)一样多;第一反向DPCM单元,其根据DPCM阶数(nKDPCMOrder)而对由反向移位单元执行的反向移位的结果执行反向DPCM;第一反向量化单元,如果已调节了最大和最小关键字数据,则第一反向量化单元调节由所述反向DPCM单元执行的反向DPCM的结果,并且,根据量化比特大小(nKeyQBit)而对已调节的结果执行反向量化;以及线性关键字合成单元,如果解码的关键字标题包括线性关键字区域,则使用开始/结束关键字数据(IKey)而对线性关键字区域的关键字数据解码,并且,对解码的结果和由反向量化单元执行的反向量化的结果执行线性关键字合成。
14.根据权利要求13所述的装置,其中,如果DND阶数(nDNDOrder)被设置为1或更大的值、且反向下值不为-1,则执行反向下操作,即在熵编码期间执行的上移位操作的反向操作,如果DND阶数(nDNDOrder)被设置为1或更大的值、且反向下值为-1,则不执行反向下操作,并且,执行反向DND预定次数,该预定次数与DND阶数(nDNDOrder)相对应,其中,如果反向DND的当前迭代不是反向DND的最后迭代、且所述至少一个(nKeyMax)为正值,则使用反向下分割方法而执行反向DND的当前迭代,如果反向DND的当前迭代不是反向DND的最后迭代、且所述至少一个(nKeyMax)为负值,则使用反向上分割方法而执行反向DND的当前迭代,并且,如果反向DND的当前迭代是反向DND的最后迭代,则无论所述至少一个(nKeyMax)是正值还是负值,均使用反向上分割方法而执行反向DND的当前迭代。
15.一种用于编码坐标内插符的装置,所述坐标内插符包括关键字数据和包含与所述关键字数据有关的信息的关键字标题,所述关键字数据表示在时间轴上的关键帧的位置,该装置包括关键字标题编码单元,其编码关键字标题;以及关键字编码单元,其根据由关键字标题编码单元执行的编码的结果而编码关键字数据。
16.根据权利要求15所述的装置,其中,关键字编码单元通过执行量化、差分脉码调制(DPCM)、以及熵编码,而编码关键字数据。
17.根据权利要求16所述的装置,其中,关键字标题包括量化比特量(nKVQBit),其指示用来量化关键字数据的比特数;关键字数据量(nNumberOfKey),其指示关键字数据的数目;关键字数据位数(nKeyDigit),其指示关键字数据的位数;线性关键字标志(bIsLinearKeySubRegion),其指示关键字是否包括线性关键字区域;开始/结束关键字数据(IKey),如果线性关键字标志(bIsLinearKeySubRegion)被设置为值1,则开始/结束关键字数据(IKey)被包括在关键字标题中,开始/结束关键字数据(IKey)指示线性关键字区域开始和结束的位置;量化误差调节标志(bRangeFlag),其指示是否使用可使量化误差最小的方法来调节关键字数据的最大值和最小值;已调节的关键字数据的最大值和最小值(KeyMinMax),如果量化误差调节标志(bRangeFlag)被设置为值1,则已调节的关键字数据的最大值和最小值被包括在关键字标题中,已调节的关键字数据的最大值和最小值(KeyMinMax)被用来执行量化;DPCM阶数(nKDPCMOrder),其指示已执行了多少次DPCM迭代;参考关键字数据(nQIntraKey),其用来确定是否执行DPCM,其中,参考关键字数据(nQIntraKey)的数目与DPCM阶数(nKDPCMOrder)相对应;关键字数据符号位(nQIntraKeySign),其中,关键字数据符号位(nQIntraKeySign)的数目与DPCM阶数(nKDPCMOrder)相对应;移位标志(bShiftFlag),其基于在通过DPCM得到的所有关键字数据之中具有最高频率的关键字数据,而指示是否对所有关键字数据移位;移位值(nKeyShift),其表示要对所有关键字数据移位的程度;移位值符号位(nKeyShiftSign),其为移位值(nKeyShift)的符号位;分割-与-分割(DND)阶数(nDNDOrder),其指示已执行了多少次DND迭代,以调节DPCM结果的范围;用来执行DND的最大值和最小值中的至少一个(nKeyMax),其中,最大值和最小值的数目与DND阶数(nDNDOrder)相对应;符号位(nKeyMaxSign),其标识最大值和最小值中的至少一个(nKeyMax),其中,符号位(nKeyMaxSign)数目与DND阶数(nDNDOrder)相对应;反向下标志(bKeyInvertDownFlag),其指示是否对DND结果进行反向下操作;反向下值(nKeyInvertDown),其指示要对DND结果进行反向下的程度;以及自适应算法编码(AAC)标志(bSignedAACFlag),其指示已使用有符号AAC方法还是无符号AAC方法而执行了熵编码,其中,线性关键字区域是关键字数据线性增大的区域。
18.根据权利要求17所述的装置,其中,关键字编码单元包括第一量化单元,其根据量化比特大小(nKeyQBit)而对关键字数据执行量化;第一DPCM单元,其通过根据DPCM阶数(nKDPCMOrder)而对由量化单元执行的量化的结果执行DPCM,生成差分数据;第一DND单元,其对差分数据执行DND,以便使差分数据的最大值和最小值之间的差最小;以及第一熵编码单元,其对DND的结果执行熵编码。
19.一种用于解码比特数据流的方法,所述比特数据流中编码有坐标内插符,所述坐标内插符包括关键值数据和包含与所述关键值数据有关的信息的关键值标题,所述关键值数据使用多个由x、y和z分量组成的顶点中的每个的坐标,而表示关键帧上的目标的形状和位置,该方法包括(a)解码关键值标题;以及(b)根据在(a)中执行的解码的结果而解码关键值数据。
20.根据权利要求19所述的方法,其中,(b)包括通过执行熵解码、字典解码、反向差分脉码调制、以及反向量化,而解码关键值数据。
21.根据权利要求20所述的方法,其中,(b)包括(b1)以x、y和z分量为单位对关键值数据进行熵解码;(b2)以x、y和z分量为单位对熵解码的关键值数据进行字典解码;(b3)以x、y和z分量为单位对字典解码的关键值数据进行反向差分脉码调制;以及(b4)以x、y和z分量为单位对反向差分脉码调制的关键值数据进行反向量化。
22.根据权利要求21所述的方法,其中,关键值标题包括转置标志(bTranspose),其指示要以顶点模式还是转置模式解码关键值数据,其中,(b)还包括(b5)确定转置标志指示要以顶点模式还是转置模式解码关键值数据,并且,如果确定转置标志指示要以转置模式解码关键值数据,则将反向量化的结果转置。
23.根据权利要求19所述的方法,其中,关键值标题包括量化比特量(nKVQBit),其指示用来量化关键值数据的比特数量;顶点的x、y和z分量的关键值数据的最大值和最小值(KVMinMax);关键值数据位数nKVDigit,其指示读取最大值和最小值(KVMinMax)所需的关键值数据的位数;转置标志(bTranspose),其指示要以顶点模式还是转置模式解码关键值数据;顶点量(nNumberOfCoord),其指示顶点的数目;以及顶点的x、y和z分量的量化的关键值数据之中的最大值和最小值(nXQMinOfMin、nXQMaxOfMin、nXQMinOfMax、nXQMaxOfMax、nYQMinOfMin、nYQMaxOfMin、nYQMinOfMax、nYQMaxOfMax、nZQMinOfMin、nZQMaxOfMin、nZQMinOfMax、nZQMaxOfMax)。
24.一种用于编码坐标内插符的方法,所述坐标内插符包括关键值数据和包含与所述关键值数据有关的信息的关键值标题,所述关键值数据使用多个由x、y和z分量组成的顶点中的每个的坐标,而表示关键帧上的目标的形状和位置,该方法包括(a)编码关键值标题;以及(b)根据在(a)中执行的编码的结果而编码关键值数据。
25.根据权利要求24所述的方法,其中,(b)包括通过执行量化、字典编码、差分脉码调制(DPCM)、以及熵编码,而编码关键值数据。
26.根据权利要求25所述的方法,其中,(b)包括(b1)以x、y和z分量为单位对关键值数据进行量化;(b2)以x、y和z分量为单位对量化的关键值数据进行差分脉码调制;(b3)以x、y和z分量为单位对差分脉码调制的关键值数据进行字典编码;以及(b4)以x、y和z分量为单位对字典编码的关键值数据进行熵编码。
27.根据权利要求26所述的方法,其中,(b2)包括使用用来生成关键帧之间的差分数据的时间DPCM方法、用来生成关键帧中的顶点之间的差分数据的空间DPCM方法、或用来生成关键帧之间的差分数据和关键帧中的顶点之间的差分数据的时间和空间DPCM方法,而对量化的关键值数据进行差分脉码调制。
28.一种用于解码比特数据流的装置,所述比特数据流中编码有坐标内插符,所述坐标内插符包括关键值数据和包含与所述关键值数据有关的信息的关键值标题,所述关键值数据使用多个由x、y和z分量组成的顶点中的每个的坐标,而表示关键帧上的目标的形状和位置,该装置包括关键值标题解码单元,其解码关键值标题;以及关键值解码单元,其根据由关键值标题解码单元执行的解码的结果而解码关键值数据。
29.根据权利要求28所述的装置,其中,关键值解码单元通过执行熵解码、字典解码、反向差分脉码调制、以及反向量化,而解码关键值数据。
30.根据权利要求29所述的装置,其中,关键值解码单元包括第二熵解码器,其以x、y和z分量为单位对关键值数据进行熵解码;字典解码器,其以x、y和z分量为单位对熵解码的关键值数据进行字典解码;第二反向差分脉码调制器,其以x、y和z分量为单位对字典解码的关键值数据进行反向差分脉码调制;以及第二反向量化器,其以x、y和z分量为单位对反向差分脉码调制的关键值数据进行反向量化。
31.根据权利要求28所述的装置,其中,关键值标题包括量化比特量(nKVQBit),其指示用来量化关键值数据的比特数;顶点的x、y和z分量的关键值数据的最大值和最小值(KVMinMax);关键值数据位数nKVDigit,其指示读取最大值和最小值(KVMinMax)所需的关键值数据的位数;转置标志(bTranspose),其指示要以顶点模式还是转置模式解码关键值数据;顶点量(nNumberOfCoord),其指示顶点的数目;以及顶点的x、y和z分量的量化的关键值数据之中的最大值和最小值(nXQMinOfMin、nXQMaxOfMin、nXQMinOfMax、nXQMaxOfMax、nYQMinOfMin、nYQMaxOfMin、nYQMinOfMax、nYQMaxOfMax、nZQMinOfMin、nZQMaxOfMin、nZQMinOfMax、nZQMaxOfMax)。
32.一种用于编码坐标内插符的装置,所述坐标内插符包括关键值数据和包含与所述关键值数据有关的信息的关键值标题,所述关键值数据使用多个由x、y和z分量组成的顶点中的每个的坐标,而表示关键帧上的目标的形状和位置,该装置包括关键值标题编码单元,其编码关键值标题;以及关键值编码单元,其根据由关键值标题编码单元执行的编码的结果而编码关键值数据。
33.根据权利要求32所述的装置,其中,关键值标题编码单元通过执行量化、字典编码、差分脉码调制(DPCM)、以及熵编码,而编码关键值数据。
34.根据权利要求33所述的装置,其中,关键值编码单元包括第二量化器,其以x、y和z分量为单位对关键值数据进行量化;第二差分脉码调制器,其以x、y和z分量为单位对量化的关键值数据进行差分脉码调制;字典编码器,其以x、y和z分量为单位对差分脉码调制的关键值数据进行字典编码;以及第二熵编码器,其以x、y和z分量为单位对字典编码的关键值数据进行熵编码。
35.根据权利要求34所述的装置,其中,第二差分脉码调制器使用用来生成关键帧之间的差分数据的时间DPCM方法、用来生成关键帧中的顶点之间的差分数据的空间DPCM方法、或用来生成关键帧之间的差分数据和关键帧中的顶点之间的差分数据的时间和空间DPCM方法,而对量化的关键值数据进行差分脉码调制。
全文摘要
提供了编码坐标内插符、解码比特数据流的装置及方法。在用于解码比特数据流的方法中,所述比特数据流中编码有坐标内插符,所述坐标内插符包括关键字数据和包含与所述关键字数据有关的信息的关键字标题,所述关键字数据表示在时间轴上的关键帧的位置,该方法包括(a)解码关键字标题;以及(b)根据在(a)中执行的解码的结果而解码关键字数据。
文档编号H04N9/00GK1941910SQ200610110089
公开日2007年4月4日 申请日期2002年11月27日 优先权日2001年11月27日
发明者李信俊, 郑锡润, 张义善, 禹相玉, 韩万镇, 金道均, 张敬子 申请人:三星电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1