对位置内插器进行编码和译码的方法和装置的制作方法

文档序号:7942707阅读:238来源:国知局
专利名称:对位置内插器进行编码和译码的方法和装置的制作方法
技术领域
本发明涉及一种用于对三维动画数据进行编码和译码的方法,更具体讲,涉及用于对表示目标在三维动画路径中的位置的位置内插器进行编码和译码的方法和装置。
背景技术
在3D计算机游戏或虚拟现实计算机应用中,已经广泛采用了三维(3D)动画技术。虚拟现实造型语言(VRML)是这种3D动画技术的典型例子。
诸如用于景物的MPEG-4二进制格式(BIFS)和虚拟现实造型语言(VRML)的国际多媒体标准使用内插器节点支持基于关键帧的3D动画。在MPEG-4BIFS和VRML中,有包括标量内插器、位置内插器、坐标内插器、定向内插器、标准行间内插器和颜色内插器在内的各种内插器,这些内插器和它们的功能及特征示于表1中。
表1

在表1所示的内插器中,位置内插器被用于表示有关动画路径的位置的信息,并且由密钥和密钥值字段组成。密钥字段使用在-∞和∞之间范围内的不连续数表示在时间轴上每个关键帧的位置。每个密钥值字段规定与在某个时刻由每个密钥表示的目标的位置相关的信息并由三个分量x、y和z组成。密钥值字段中的每一个包括与密钥字段中的每一个所具有的密钥值相同数量的密钥值。
在图1A和1B中示出了位置内插器的例子。具体来说,图1A示出了密钥数据,图1B示出了密钥值数据。MPEG-4BIFS提供了一种用于编码和译码内插器节点的方法,称之为预测MF编码(PMFC)。
图2为常规的PMFC编码器以及常规的PMFC译码器的框图。如图2所示,在PMFC中,使用量化器、差分脉冲码调制(DPCM)操作器和熵编码器对位置内插器的密钥数据和密钥值数据进行编码。参见图2,量化器和DPCM操作器消除了密钥数据和密钥值数据中的冗余,并且DPCM操作器将其操作的结果输出给熵编码器。但是,由于PMFC只对从一般DPCM操作中获得的差分数据进行熵编码,所以其在编码密钥数据和密钥值数据方面不够有效。另外,由于熵编码器存在局限性,几乎不可能提供高质量的动画。

发明内容
为了解决上述以及其他问题,本发明的一个方面是提供一种用于编码和译码位置内插器的方法和装置,它们能够提供具有高压缩率的高质量动画。
本发明的另一个方面是提供一种测量原始位置内插器和经过译码的位置内插器之间的误差的方法,以及一种利用测量原始位置内插器和经过译码的位置内插器之间的误差的方法,提取输入位置内插器的断点的方法。
因此,为了实现本发明的上述和其他方面,提供了一种用于编码位置内插器的装置,该位置内插器包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标的位置的密钥值数据。所述装置包括一个断点提取器,用于从由输入给它的位置内插器组成的第一动画路径中提取最小数量的断点,这可能在第一动画路径和由所提取的断点产生的第二动画之间引起不大于预定的可允许误差极限的误差;一个密钥数据编码器,用于编码从断点提取器输入的密钥数据;和一个密钥值数据编码器,用于编码从断点提取器输入的密钥值数据。
为了实现本发明的上述和其他方面,提供了一种用于编码位置内插器的装置,该位置内插器包括用于指示关键帧在时间轴上的位置的密钥数据和指示目标位置的密钥值数据。该装置包括一个重取样器,用于将由密钥数据和密钥值数据组成的动画路径取样为预定数量的具有预定时间间隔的部分,并输出包括重取样的密钥数据和重取样的密钥值数据的位置内插器;一个密钥数据编码器,用于编码从重取样器输入的密钥数据;以及一个密钥值编码器,用于编码从重取样器输入的密钥值数据。
为了实现本发明上述和其他的方面,提供了一种用于将比特流译码为位置内插器的装置,包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标位置的密钥值数据的位置内插器被编码进该比特流中,所述装置包括一个密钥数据译码器,用于译码来自输入比特流的密钥数据;一个密钥值数据译码器,用于译码来自输入比特流的密钥值数据;和一个位置内插器合成器,用于通过将经过译码的密钥值数据与利用经过译码的密钥值数据进行线性内插的密钥值数据合成,生成位置内插器。
为了实现本发明的上述和其他的方面,提供了一种用于编码位置内插器的方法,该位置内插器包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标的位置的密钥值数据,所述方法包括(b)通过从由位置内插器组成的第一动画路径中提取最小数量的断点,产生将被编码的密钥数据和密钥值数据,这可以在第一动画路径和将由所提取的断点产生的第二动画之间引起不大于预定的可允许误差极限的误差;(d)编码在步骤(b)中产生的密钥数据;以及(e)编码在步骤(b)中产生的密钥值数据。
为了实现本发明的上述和其他的方面,提供了一种用于编码位置内插器的方法,该位置内插器包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标位置的密钥值数据。所述方法包括(b)将由位置内插器组成的动画路径取样为预定数量的具有预定时间间隔的部分,并且由此产生包括重取样的密钥数据和重取样的密钥值数据的位置内插器;(d)编码在步骤(b)中产生的密钥数据;和(e)编码在步骤(b)中产生的密钥值数据。
为了实现本发明上述和其他的方面,提供了一种用于将比特流译码为位置内插器的方法,包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标位置的密钥值数据的位置内插器被编码进该比特流中。所述方法包括(a)译码来自输入比特流的密钥数据;(b)译码来自输入比特流的密钥值数据;和(c)通过将经过译码的密钥值数据与利用具有经过译码的密钥数据的经过译码的密钥值数据进行线性内插的密钥值数据合成,生成位置内插器。
为了实现本发明的上述和其他的方面,提供了一种用于计算在由多个第一路径点组成的第一路径和由多个第二路径点组成的第二路径之间的误差的方法,其中每一个第一路径点由多个数据分量组成,每一个第二路径点由多个数据分量组成。所述方法包括(a)将多个路径点内插到第一和第二动画路径中,从而使第一和第二动画路径就包括在每个路径点中的参考数据分量而言具有相同的路径点;(b)根据参考数据分量将第一和第二动画路径分为预定数量的部分,从而使预定数量的部分分别对应于路径点;(c)计算每个部分中的第一和第二动画路径之间的误差;以及(d)检查是否已经对所有预定数量的部分执行了步骤(c),然后对在步骤(c)中获得的误差进行规范。
为了实现本发明的上述和其他的方面,提供了一种利用线性逼近从由包括多个分量数据的路径点组成的路径中提取断点的方法。所述方法包括(a)提取原始路径的开始点和结束点;(b)从未提取的路径点中选择一个路径点并利用所选择的路径点对其他未选择的路径点进行线性内插;(c)计算在原始路径和使用内插路径点产生的内插动画路径之间的误差;(d)对所有未被选择的路径点执行步骤(b)和(c)并提取导致在原始动画路径和内插路径之间最小误差的路径点;以及(e)将原始路径和使用包括在步骤(d)中提取的路径点的所有被提取路径点所产生的路径之间的误差与预定的可允许误差极限进行比较,检查计算的误差是否小于可允许的误差极限,如果是,则完成提取断点的处理,如果不,则重复执行步骤(b)到(d)。


通过下面结合附图对本发明的优选实施例进行的详细描述,本发明的上述和其他方面以及优点都将变得更加清楚,其中图1A示出了位置内插器的密钥数据,图1B示出了位置内插器的x、y和z分量的密钥值数据;图2为MPEG-4BIFS PMFC编码器和MPEG-4 BIFS PMFC译码器的框图;图3A为按照本发明的优选实施例的、用于对位置内插器进行编码的装置的框图,图3B为按照本发明的优选实施例的、用于对位置内插器进行编码的方法的流程图;图4A到4C为按照本发明优选实施例的分析器的例子的框图;
图5A为示出了图3B所示步骤S320的详细流程图;图5B为按照本发明优选实施例的重取样方法的流程图;图5C为按照本发明优选实施例的提取断点方法的流程图;图6A示出了原始密钥数据和重取样的密钥数据,和图6B示出了原始动画路径和重取样的动画路径;图7A到7F示出了按照本发明优选实施例的提取断点的方法;图8示出了以发生方式从断点提取器输出的密钥数据和密钥值数据;图9A为按照本发明优选实施例的密钥数据编码器的框图;图9B为在图9A中示出的DND处理器的框图;图10A到图10G为按照本发明优选实施例的、编码密钥数据的方法的流程图;图11示出了函数encodeSignedAAC的一个例子;图12A到12J示出了按照本发明优选实施例的、通过执行编码操作获得的密钥数据;图13A为按照本发明优选实施例的密钥值数据编码器的框图;图13B为图13A中所示的量化误差最小化器的框图,和图13C为图13A中所示的DPCM处理器的框图;图14A到14H为按照本发明优选实施例的、编码密钥值数据的方法的流程图;图15A示出了对量化密钥值数据执行一般预测DPCM操作的结果,和图15B示出来对量化密钥值数据执行经过修改的预测DPCM操作的结果;图16A示出了量化数据,图16B和16C分别示出了对图16A所示的量化数据执行DPCM操作的结果以及对图16A所示的量化数据执行循环量化DPCM操作的结果;图17示出了函数UnaryAAC的例子;图18A和18B示出了函数SQAAC的例子;图19A为按照本发明优选实施例的、用于译码位置内插器的装置的框图,和图19B为按照本发明优选实施例的、用于译码位置内插器的方法的流程图;图20为按照本发明优选实施例的密钥数据译码器的框图;图21A和21B为按照本发明优选实施例的、译码密钥数据的方法的流程图;
图22A为按照本发明优选实施例的密钥值数据译码器的框图,和图22B为在图22A中所示的逆DPCM处理器的框图;图23A到23E为按照本发明优选实施例的、译码密钥值数据的方法的流程图;图24为按照本发明优选实施例的、用于合成位置内插器的密钥数据和密钥值数据的方法的流程图;图25A和25B示出了在图3A所示分析器中执行的、测量在动画路径之间的误差的方法;图26A到26C示出了用于测量在将被编码的位置内插器和译码的位置内插器之间的误差的方法;以及图27为用于测量在将被编码的位置内插器和译码的位置内插器之间的误差的方法的流程图。
图28A-28J是本发明所使用的一部分程序。
具体实施例方式
此后,结合示出了本发明优选实施例的附图,更加全面地对本发明进行描述。
图13A为按照本发明优选实施例的、用于编码位置内插器的装置的框图。参看图13A,所述用于编码位置内插器的装置包括分析器40、密钥数据编码器200、密钥值数据编码器300和标题编码器400。
图3B为按照本发明优选实施例的、用于编码位置内插器的方法的流程图。参看图3B,将被编码的位置内插器在步骤S300被输入给所述分析器40。在步骤S320,分析器40从包括所述位置内插器的x、y和z分量的密钥值数据的第一动画路径中提取将被编码的密钥数据和密钥值数据,将所提取的密钥数据输出给密钥数据编码器200,并将所提取的密钥值数据输出给密钥值数据编码器300。
在步骤S340,密钥数据编码器200使用预定数量的量化比特量化从分析器40输入的密钥数据,通过对量化的密钥数据执行预定的DPCM操作,产生差分数据并对所述差分数据熵编码。
在步骤S360,密钥值数据编码器300使用预定数量的量化比特量化从分析器40输入的密钥值数据,通过对所述量化数据执行预定的DPCM操作产生差分数据并编码所述差分数据。
在步骤S380,标题编码器400从密钥数据编码器200和密钥值数据编码器300中接收译码所述密钥数据和密钥值数据所需的信息并编码所述信息。
下面将结合附图更加详细的描述分析器40、密钥数据编码器200及密钥值数据编码器300的结构和操作。
图4A为按照本发明第一实施例的分析器40的例子的框图。虽然可以使用分析器40对密钥值数据的所有分量(x、y和z)执行提取将被编码的密钥数据和密钥值数据的处理,但是,为了便于说明,下面的段落仅仅描述对密钥值数据的一个分量的处理。
参看图4A,按照本发明第一实施例的分析器包括重取样器43,用于在输入位置内插器的基础上,将第一动画路径取样成彼此之间具有预定时间间隔的预定数量的部分,并将经过取样的第一动画路径输出给密钥编码器200、密钥值编码器300、和标题编码器400;断点提取器42,用于提取最小数量的断点,这样可以避免在所述第一动画路径和根据从第一动画路径提取的断点产生的第二动画路径之间的误差超过预定的可允许误差极限,并且所述断点提取器42将所提取的断点输出给密钥数据编码器200、密钥值编码器300、和标题编码器400;以及选择器41,用于响应一个外部输入信号将输入的位置内插器输出给重取样器43或断点提取器42。断点提取器42包括线性内插器42a、误差计算器42b和确定单元42c。
图5A的流程图示出了根据本发明第一实施例的分析器40的操作。参看图5A,在步骤325,选择器41从外部接收位置内插器和设置信号。该设置信号包括用于确定产生将被编码的密钥数据和密钥值数据的方法的产生方法设置信号和用于确定产生将被编码的密钥数据和密钥值数据的模式的产生模式设置信号。
在下面的段落中,将首先描述用于产生密钥数据和密钥值数据的模式。
分析器40通过减少输入给它的、位置内插器的关键帧的数量来减少密钥数据和密钥值数据的数量。假设分析器40依据从外部输入给它的模式设置信号具有动画路径保存模式或动画密钥保存模式。
在动画路径保存模式中,位置内插器仅用于描述对动画路径的插入,并且对关键帧的随机存取是不需要的。为了在预定误差范围内有效地编码动画路径保存模式下的位置内插器,可以删除位置内插器中的密钥数据和与密钥数据对应的密钥值数据。
另一方面,在动画密钥保存模式中,必须使用诸如‘替换’、‘删除’或‘插入’的MPEG-4BIFS命令对关键帧进行随机存取。在动画密钥保存模式中,位置内插器中的密钥数据的数量不会改变。后面将更详细地描述动画路径保存模式和动画密钥保存模式。
再次参看图5A,选择器41按照从外部输入的产生模式,选择用于产生将被编码的密钥数据和密钥值数据的模式。在步骤S330,选择器41向断点提取器42输出输入的位置内插器。如果输入的产生模式是动画路径保存模式,则在步骤S330,选择器41响应从外部输入的产生方法设置信号,向重取样器43或断点提取器42输出输入的位置内插器和产生密钥数据及密钥值数据所需的信息。
具体地说,在通过重取样产生将被编码的密钥数据和密钥值数据的情况下,选择器41将密钥数据的数量(即时间间隔)和产生模式与位置内插器一起输出给重取样器43。在通过提取断点产生将被编码的密钥数据和密钥值数据的情况下,选择器41将原始动画路径和将通过所提取的断点产生的路径之间的可允许误差极限以及产生模式输出给断点提取器42。
重取样器43通过以预定时间间隔,对从选择器41输入的位置内插器产生的动画路径进行取样,产生取样的密钥数据和取样的密钥值数据,而断点提取器42在步骤S335提取最小数量的断点,这样可以避免在由输入位置内插器产生的动画路径和将由所提取的断点产生的动画路径之间的误差超过预定的可允许误差极限。
图5B的流程图示出了按照本发明的优选实施例的重取样器43的操作。参看图5B,在步骤S502,重取样器43从选择器41接收位置内插器和将被重取样的密钥数据的数量(m)。将被重取样的密钥数据的数量(m)可以由用户任意设置或预先被设置为预定值。
在步骤S504,重取样器43选择由输入的位置内插器产生的原始动画路径的第一路径点和最后路径点,并将要被重取样的密钥数据的初始值(i)设置为1。
然后,在步骤S506中,重取样器43以预定时间间隔产生第i个密钥数据。
图6A示出了原始密钥数据和重取样的密钥数据。由于输入的位置内插器的密钥数据表示关键帧在时间轴上的位置,所以,密钥数据单调增加,但是密钥数据之间的间隔是不规则的,如图6A所示。
因此,如图6A所示,重取样器43通过将分别表示在步骤504选择的第一路径点和最后路径点的密钥数据之间的差值除以将被重取样的密钥数据的数量获得预定时间间隔,然后以该预定时间间隔对要被重取样的密钥数据进行重取样。
在步骤S508中,重取样器43通过使用原始动画路径进行线性内插,产生与由重取样产生的密钥数据对应的密钥值数据。换言之,使用与刚好在重取样的密钥数据之后的密钥数据对应的密钥值数据和与刚好在重取样的密钥数据之前的密钥数据对应的密钥值数据,对与重取样的密钥数据对应的密钥值数据进行线性内插。
然后,在步骤S510中,重取样器43确认是否已经对所有要被重取样的密钥数据执行了重取样处理并重复执行步骤S506和S508,直到所有的密钥数据和它们的对应密钥值数据都被重取样为止。
图5C的流程图示出了按照本发明第一实施例的提取断点的方法,图7A到7F示出了按照本发明的优选实施例的、从位置内插器提取断点的每个步骤。
参看图4A、5C和图7A到7F,在步骤S520中,断点提取器42的线性内插器42a从选择器41接收位置内插器和一个可允许的误差极限eth。图7A示出了由输入的位置内插器构成的动画路径。
如图7A所示,在步骤S522中,线性内插器42a提取由输入的位置内插器构成的动画路径的第一路径点Q0和最后路径点Qn,并将计数器(i)设置为1。
在步骤S524中,线性内插器42a任意地或顺序地逐一选择在第一路径点Q0和最后路径点Qn之间的路径点。接着,在步骤S526中,线性内插器42a使用所选择的路径点线性内插还没有被选择的路径点,并向误差计算器42b输出所选择的路径点和经过内插的路径点。
在步骤S528中,误差计算器42b计算在原始动画路径和由所选择的路径点和经过内插的路径点构成的候选动画路径之间的误差(e),并将误差(e)输出给确定单元42c。计算误差(e)的方法将在后面进行说明。
误差计算器42b检查在还没有被线性内插器42a选择的路径点当中是否仍然存在当计算误差(e)时没有被考虑到的路径点。如果存在当计算误差(e)时还没有被考虑到的路径点,则在步骤S530中,误差计算器42b通过重复执行步骤S524到S528,计算在所述路径点和原始动画路径之间的误差。
图7C示出了步骤S524到S530。参看图7C,线性内插器42a通过在第一路径点Q0和断点Q1之间线性内插多个路径点,在预定的时刻k1提取与密钥数据对应的断点Q1和产生第一候选动画路径。误差计算器42b计算原始动画路径和第一候选动画路径之间的误差e1。此后,利用相同的方式,线性内插器42a通过在所述第一路径点Q0和断点Qk之间以及在断点Qk和最后路径点Qn之间线性内插多个路径点提取另一个的断点Qk并产生第k个候选动画路径。误差计算器42b计算在原始动画路径和第k个候选动画路径之间的误差(ek)。
如果已经对还没有被线性内插器42a选择的所有路径点执行了步骤S524到S530,那么,在原始动画路径和其中的每个都是按照步骤S524到S530产生的候选动画路径之间的误差被输出给确定单元42c。然后,在步骤S532中,确定单元42c选择一个断点,该断点形成与原始动画路径有最小误差的候选动画路径,并将所述计数器(i)的值加1。
在步骤S534中,确定单元42c检查在原始动画路径和由所提取的断点构成的候选动画路径之间的误差(e)是否大于可允许的误差极限eth以及计数器(i)的值是否大于密钥数据的数量(n),即在第一路径点Q0和最后路径点Qn之间的路径点的数量。
如果误差(e)小于可允许的误差极限eth,则意味着已经提取了编码所需的所有断点。如果最后选择作为将被编码的断点的数量等于‘n’,则意味着对所有路径点进行提取断点的处理都被完成。
但是,如果所选择的断点的数量小于n并且误差(e)大于可允许的误差极限eth,这意味着仍然存在要被提取的断点,所提取的断点被输出给线性内插器42a,然后再次执行步骤S524到S532。
下面将描述假设当产生模式是动画路径保存模式时,从重取样器43和断点提取器42输出给密钥数据编码器200和密钥值数据编码器300的数据。
重取样器43分别向密钥数据编码器200和密钥值数据编码器300输出密钥数据和密钥值数据,并分别作为将被编码的密钥数据和密钥值数据。
下面结合图8,描述在产生模式的基础上从断点提取器42输出的密钥数据和密钥值数据。
如图8所示,假设最后被提取的断点被称为0,3,6和8,利用密钥选择标记输出与断点0,3、6和8对应的密钥数据和密钥值数据,表示如下表所示。
表2

上面描述了按照本发明第一实施例的分析器40的结构。但是,对于本领域普通技术人员来说,很明显,分析器40可以仅仅由断点提取器42组成而没有选择器41和重取样器43或者仅仅由重取样器43组成而没有选择器41和断点提取器42。
下面将描述按照本发明第二实施例的分析器40的例子。
参看图4B,按照本发明第二实施例的分析器40包括用于接收和重取样位置内插器的重取样器45,和用于提取重取样的位置内插器的断点并输出将被编码的密钥数据和密钥值数据的断点提取器46。本发明第二实施例中的断点提取器46与本发明第一实施例的断点提取器类似,也包括线性内插器46a、误差计算器46b和确定单元46c。
当位置内插器被输入给分析器40时,重取样器45将由位置内插器构成的第一动画路径重取样为彼此具有预定时间间隔的预定数量的部分。
重取样器45将由取样的密钥数据和取样的密钥值数据组成的位置内插器输出给断点提取器46的线性内插器46a。
线性内插器46a通过执行图5C所示的步骤S522到S526,内插位置内插器,并将内插的位置内插器输出给误差计算器46b。误差计算器46b通过执行步骤S528和S530,计算第一动画路径和由所述内插的位置内插器组成的第二动画路径之间的误差。确定单元46C选择将导致在所述第一和第二动画路径之间最小误差的一个路径点,确认对应的误差是否大于可允许的误差极限eth,并确认第一动画路径的所有路径点是否都已经被选择,并且产生将被编码的密钥数据和密钥值数据。
如上所述,在按照本发明第二实施例的分析器40中,除了断点提取器46接收由从重取样器45输出的密钥数据和密钥值数据组成的位置内插器和对由从重取样器45输入的位置内插器构成的动画路径执行的提取断点处理以外,重取样器45和断点提取器46的操作与本发明第一实施例中的对应部件的操作相同。
下面结合图4C描述按照本发明第三实施例的分析器40的例子。
参看图4C,分析器40包括断点提取器48,用于接收位置内插器,从由位置内插器构成的第一动画路径中提取断点,并输出密钥数据和密钥值数据;还包括重取样器49,用于以预定时间间隔,对由位置内插器构成的第二动画路径重取样,该位置内插器由从断点提取器48输入的密钥数据和密钥值数据组成。与本发明第一和第二实施例的断点提取器类似,断点提取器48也包括线性内插器48a、误差计算器48b和确定单元48c。
与本发明第一实施例的断点提取器相似,断点提取器48向重取样器49输出从第一动画路径提取的密钥数据和密钥值数据。
重取样器49以预定时间间隔,对从断点提取器48输入的、由包括密钥数据和密钥值数据的位置内插器组成的动画路径重取样,并输出将被编码的密钥数据和密钥值数据。重取样器49的功能与本发明第一和第二实施例的重取样器相同,这里不再重复。
从在本发明第一到第三实施例中的分析器40输出的密钥数据和密钥值数据分别被输出给密钥数据编码器200和密钥值数据编码器300。
下面结合图9A到12J,描述按照本发明优选实施例的密钥数据编码器200的例子。
图9A的框图示出了按照本发明优选实施例的密钥数据编码器200的例子。参看图9A,密钥数据编码器200包括线性密钥编码器900、量化器910、DPCM处理器920、移位器930、折叠处理器940、DND处理器950和熵编码器960。
线性密钥编码器900识别其中在整个密钥数据范围中密钥数据线性增加的区域并编码该区域。量化器910使用能够使量化误差最小的量化方法,量化输入给它的密钥数据。DPCM处理器920接收量化的密钥数据并产生该密钥数据的差分数据。移位器930从差分数据中减去所有差分数据中具有最高频率的差分基准点。折叠处理器940将差分数据传输给正数或负数区域。DND处理器950通过对所述差分数据选择执行分频操作、上分频操作和下分频操作,减小密钥数据的差分数据的范围。熵编码器960使用被用于对每个比特平面上的差分数据进行编码的函数SignedAAC或UnsignedAAC,编码差分数据。
下面将结合图10A和10B,描述密钥数据编码器200的操作。图10A和10B的流程图示出了按照本发明优选实施例的编码密钥数据的方法。
当密钥数据被输入给密钥数据编码器200时,密钥数据的数量和每个密钥数据的数位被输入给标题编码器400并被编码。线性密钥编码器900从输入的密钥数据中搜索线性密钥区域,即关键帧被以预定时间间隔置位的区域,密钥数据彼此之间具有相同的差值,由此,密钥数据线性增加,然后,在步骤S9000中,首先编码线性密钥区域。
诸如3Dmax或Maya等著名的3D应用软件在一个特定的区域中,使用其间具有预定时间间隔的密钥,产生基于关键帧的动画。在这种情况下,可以很容易地使用线性密钥数据区域的开始和结束密钥数据和存在于它们之间的关键帧的数量,编码密钥数据。因此,线性预测对于在某个区域中使用内插器编码密钥是非常有用的。
下面的等式被用于线性预测。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=o,…(E-S)|tE-tSE-Si+tS-ti+S|…(3)]]>如果Ep≤12nBits+1,]]>则ti与区域[tS,tE]共线。这里,nBits表示用于编码的比特数。
如果线性密钥编码器900寻找部分线性区域,则部分线性密钥数据区域的开始和结束密钥数据被输出给浮点数转换器905。包括在线性密钥数据区域中的密钥的数量被输出给标题编码器400并被编码。使用线性编码可以显著地减少要被编码的数据的数量。
使用浮点数转换对开始密钥数据和结束密钥数据进行编码,这将在后面描述。
浮点数转换器905将由二进制系统表示的密钥数据转换为十进制系统,以便编码开始密钥数据和结束密钥数据。
计算机将所述浮点数存储为32位的二进制数。如果给出以二进制系统表示的浮点数,则浮点数转换器905将该浮点数转换为十进制系统的尾数和指数,这一处理由下述等式表示。 例如,如下所示,可以利用计算机将浮点数12.34转换为二进制数。01100010101110000101000112100000103]]>1符号;2二进制系统的尾数;3二进制系统的指数。
如下所示,按照等式(4)可以将二进制数转换成十进制数。011234223]]>1符号;2十进制系统的尾数;3十进制系统的指数。
为了将十进制系统的尾数和指数包括在比特流中,必须计算表示尾数和指数所需的比特数。尾数具有-38和38之间的值,由此能够与其符号一起用7位表示。表示尾数所需的比特数根据数位决定。尾数的值和表示该尾数需要的比特数示于下表中。
表3

使用上述过程已经被搜索和转换的、所述线性密钥数据区域中的开始和结束密钥数据被按照图10C和10D所示的编码处理进行编码,并输出给标题编码器400和存储在比特流中。
图10C和10D示出了对输入给浮点数转换器905的两个浮点数进行编码的处理。下面结合图10C和10D,描述浮点数转换器905编码浮点数的方法。
在步骤S9040中,浮点数转换器905接收原始密钥数据的数位Kd、开始密钥数据S和结束密钥数据E并按照等式(4)对它们进行转换。
浮点数转换器905首先编码S。具体地说,浮点数转换器905检查S的数位是否与Kd不同,如果S的数位与Kd不同,在步骤S9042中获得S的数位并输出给标题编码器400。浮点数转换器905用函数Digit()获得S的数位。
如果S的数位大于7,则在步骤S9043中,使用预定数量的比特(在本发明中,按照IEEE标准754的浮点数方式,使用32比特)将S输出给标题编码器400,从而使S的数位能够被包括在比特流中。
如果S的数位不是0并且小于7,则在步骤S9044中,浮点数转换器905将S的符号输出给标题编码器400。使用表3获得编码S的尾数的绝对值所需的比特数。接着,在步骤S9045中,使用从表3获得的比特数将S的尾数的绝对值输出给标题编码器400。在步骤S9046中,浮点数转换器905计算S的指数,并将S的符号输出给标题编码器400,和将指数作为例如6比特的预定数量的比特输出给标题编码器400。这种密钥数据转换使得可以明显地减少包括在所述比特流中的比特数。
如果S的数位是0,则对开始密钥数据的编码结束,由于当S的数位是0时,对应的浮点数也是不需要编码的0,所以该方法转到对结束密钥数据进行转换。
在转换和编码开始密钥数据S之后,浮点数转换器905对结束密钥数据E进行转换。E的转换几乎与S的转换相同。具体地说,在步骤S9047中,检查E的指数是否与S的指数相同。如果E的指数与S的指数相同,只把表示E的指数与的S的指数相同的标记比特输出给标题编码器400。如果E的指数与S的指数不同,则在步骤S9048中,以与将S的指数输出给标题编码器400相同的方式,将E的指数及标记比特输出给标题编码器400。
不属于线性密钥区域的输入密钥数据中的密钥数据被输入到量化器910中,并被按照预定的量化比特尺寸、即nKeyQBit,进行量化。
但是,在使用译码器译码量化的密钥数据的情况下,由于原始密钥数据和量化的密钥数据之间的误差,不可能完好地将原始数据恢复。因此,本发明的量化器910获得输入密钥数据当中的最大值和最小值,并使用该最大值和最小值量化输入密钥数据。另外,本发明包括一个量化误差最小化器915,从而可以使用输入密钥数据当中的最大值和最小值使原始密钥数据和它们的量化密钥数据之间的误差最小。
步骤S9100中,量化误差最小化器915在使用用于控制量化范围的方法预先量化或逆量化输入密钥数据,从而可以使量化误差最小。
具体地说,如果用于量化的混合最大值用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指示平均值为0的随机噪声。
下面,当di≡Xi-Xi-1=ΔX+(εi-εi-1)时,Δ′X=E[di]并且Min=Max-Δ′X*(2nQuantBit-1)。
可以使量化误差最小的Min以及Max被输入给量化器910并用于量化密钥数据。
在步骤S9200中,量化器910接收能够使量化误差最小的最大值Max和最小值Min,并利用等式(6)量化密钥数据fKeyi。nQKey=floor(fKeyi-fKeyMinfKeyMax-fKeyMin(2nKeyQBit-1)+0.5)…(6)]]>这里,i表示量化密钥数据的下标,nQKeyi表示量化密钥数据的整数数组,fKeyi表示量化密钥数据的浮点数的数组,fKeyMax表示从量化误差最小化器915输入的最大值,fKeyMin表示从量化误差最小化器915输入的最小值,和nKeyQBit表示量化比特尺寸。在等式(6)中,函数floor(v)是一个输出不大于某个浮点值v的最大整数的函数。
本发明的量化器910可以不使用这种减少量化误差的算法,在这种情况下,仅使用输入密钥数据中的最大和最小值fKeyMax和fKeyMin来进行量化。
下面结合图10E更完整地描述本发明的量化处理。
在步骤S9210中,量化器910接收密钥数据,并且在步骤S9220中检查是否已经从量化误差最小化器915输入了最大和最小值MAX和MIN。
如果已经输入了MAX和MIN,量化器910在步骤S9230中分别将用于量化的最大和最小值fKeyMax和fKeyMin设置为MAX和MIN,并将新设置的最大和最小值fKeyMax和fKeyMin输出给浮点数转换器905。经过上述浮点数转换处理,最大和最小值fKeyMax和fKeyMin被转换和编码并输出给标题编码器400,从而它们能够被包括在在译码中使用的密钥标题中。
如果不存在从量化误差最小化器915输入的值,则在步骤S9240中,量化器910分别将第一密钥数据fKey0和最后密钥数据fKeyn-1设置为最小值fKeyMin和最大值fKeyMax。
接着,在步骤S9250中,量化器910检查最大值fKeyMax是否小于1但大于0以及最小值fKeyMin是否大于0。如果最大值fKeyMax不小于1或不大于0,那么,最大和最小值fKeyMax和fKeyMin被输出给浮点数转换器905并通过上述浮点数转换被转换和编码。接着,在步骤S9260中,已经被转换和编码的最大和最小值fKeyMax和fKeyMin被包括在密钥标题中,从而可以在译码时使用它们。
另一方面,如果最大值fKeyMax小于1并且最小值fkeyMin大于0,则在步骤S9270中,检查用于指示在用于译码的密钥标题中是否将包括最大和最小值fKeyMax和fKeyMin的标记。如果该标记已经被设置,从而使最大和最小值fKeyMax和fKeyMin能够被包括在密钥标题中,则执行步骤S9260,以便将最大和最小值fKeyMax和fKeyMin输出给标题编码器400。如果还没有设置该标记,则量化器910不允许将最大和最小值fKeyMax和fKeyMin包括在标题中。
在最大和最小值fKeyMax和fKeyMin没有被包括在标题中的情况下,假设密钥数据编码器和密钥数据译码器被分别用于执行编码和译码,从而将最大和最小值fKeyMax和fKeyMin分别设置为1和0。在这种情况下,量化器910在步骤S9280中分别将最大和最小值fKeyMax和fKeyMin设置为1和0。对于密钥数据译码器来讲,最大和最小值fKeyMax和fKeyMin是已知的,因此,它们不需要被包括在密钥标题中。
在步骤S9290中,量化器910通过将已经经过上述处理设置的最大和最小值fKeyMax和fKeyMin代入等式(6),量化输入密钥数据并将量化的密钥数据输出给DPCM处理器920。
DPCM处理器920接收量化的密钥数据,并对量化的密钥数据执行预定次数的DPCM。接着,DPCM处理器920向标题编码器400输出DPCM的阶数以及在每个DPCM循环内获得的内部密钥数据,利用DPCM的阶数可以获得在离散度方面的最小值。在步骤S9300中,DPCM处理器920将由DPCM产生的差分数据输出给移位器930。
参看图10F,在步骤S9310中,DPCM处理器920对输入密钥数据执行预定次数的DPCM并将DPCM的循环数存储为DPCM的阶数。在本发明的优选实施例中,DPCM可以被执行3次。
此后,在步骤S9320中,DPCM处理器920计算每个DPCM循环结果的离散度。这里,所述离散度可以由离差、标准偏差或四分位差表示,在本发明的优选实施例中,可以使用四分位差。
接着,DPCM处理器920选择DPCM的一个循环,通过这个循环,可以获得离散度的最小值,并向移位器930输出所选择的DPCM的阶数的结果。在步骤S9330中,所选择的DPCM的循环、每个DPCM循环的内部密钥数据和DPCM所需的其他信息段被输出给标题编码器400。但是,在本发明的优选实施例中,如果密钥的数量小于5,则仅仅执行一次DPCM。例如,按照等式(7)执行DPCM的第一循环。
Δi=nQKeyi+1-nQKeyi...(7)这里,i表示量化密钥数据的下标,nQKeyi表示整数数组,和Δi表示差分数据。
在步骤S9340中,DPCM处理器920计算编码所选择的DPCM循环的结果需要的比特数和已由DPCM产生的在预定存储器(nQStep_DPCM)中的密钥数据的差分数据。对于本领域普通技术人员来讲很明显,可以在选择将被编码的密钥数据的后续步骤之后执行编码所需的、对比特数的计算。
移位器930从由DPCM处理器920输入的所有差分数据中选择具有最高频率的差分基准点(此后称之为模式)。然后,在步骤S9400中,移位器930从所有差分数据中减去该模式,以便将大多数将被编码的数据安排在0的周围并减少编码所需的比特数。
执行这种从所有量化的密钥数据中减去模式nKeyshift的移位操作,这种移位操作可由下述等式表示。
shift(nQKeyi)=nQkeyi-nKeyShift ...(8)这里,i表示量化密钥数据的下标,nQKeyi表示整数数组,和nKeyShift表示模式值。作为移位操作的结果,具有最高频率的差分数据变成0,从而可以明显减少编码所需的比特数。
已经被经过移位操作的密钥数据被输出给折叠处理器940和DND处理器950,模式值nKeyShift被输出给标题编码器400从而被包括在密钥标题中。
在步骤S9500中,折叠处理器940对移位器930的输出执行折叠操作并将折叠操作的结果输出给DND处理器950。
折叠操作被用于通过将差分数据集中在正或负数区域内,减少在正数区域和负数区域广泛离散的差分数据的范围。在本实施例中,按照等式(9)执行折叠操作,以便将差分数据集中在所述正数区域中。
fold(nQKeyi)=2·nQKeyi(如果nQKeyi≥0)...(9)=2|nQKeyi|-1(如果nQKeyi<0)这里,i表示量化密钥数据的下标,nQKeyi表示整数数组。作为折叠操作的结果,正差分数据被转换为偶数,负差分数据被转换为奇数。
折叠处理器940计算编码已经经过折叠操作的差分数据所需的比特数,并将其存储在预定的存储器nQStep_fold中。在这个步骤中,对于本领域普通技术人员很明显,编码所需比特数的计算可以在选择将被熵编码的差分数据的后续步骤之后执行。在折叠处理器940中通过折叠操作产生的数据被输出给DND处理器950。
为了提高熵编码的效率,在步骤S9600中,DND处理器950对输入的密钥数据的差分数据执行预定次数的DND操作,由此减少差分数据的范围。
参看图9B,DND处理器950包括DND操作器952,用于对差分数据执行DND操作;第一差分数据选择器954,用于根据编码所需的比特数选择将被熵编码的差分数据;上移位操作器956,用于对已经被执行了DND操作的差分数据执行上移位操作;和第二差分数据选择器958,用于从只经过DND操作的差分数据和已经被执行上移位操作的差分数据之间选择具有较低离散度的差分数据,并将所选择的差分数据输出给熵编码器960。
在下面的段落中,将描述在DND操作器952中执行的DND操作。
当已经在折叠处理器940中被执行了折叠操作的差分数据被输入给DND操作器952时,它们被分成两组,比另一组差分数据具有较高范围的一组差分数据通过一个分频函数被移动到正数区域。该分频函数是通过下述等式定义的。
divide(nQKeyj,nKeyMax) ...(10)=nQKeyj-(nKeyMax+1) (如果nQKeyj> )=nQKeyj-(nKeyMax+1) (如果nQKeyj> )这里,j表示输入差分数据的下标,nQKeyj表示整数数组,和nKeyMax表示已经被进行折叠操作的差分数据当中的最大值。特别是,在大多数差分数据沿着由所有差分数据占据的整个区域的边界密集排列的情况下,使用分频操作可以明显地减少所有差分数据的整个区域。
在分频操作之后,计算离散度,在这种情况下,编码所需的比特数被用作测量离散度,以便可以在用于编码的比特尺寸中选择最小值。
在DND操作之后,进一步执行不同类型的DND操作,即上分频操作或下分频操作。根据差分数据的正范围尺寸和差分数据的负范围尺寸确定是执行上分频操作还是执行下分频操作。
如果具有正值的差分数据的范围大于具有负值的差分数据的范围,则执行由下述等式定义的下分频操作。
divide-down(nQKeyj,nKeyMax) ...(11)=-2(nKeyMax-nQKeyj+1)+1 (如果nQKeyj> )=nQKeyj(如果0≤nQKeyj≤ )=2·nQKeyj(如果nQKeyj<0)另一方面,如果具有正值的差分数据的范围大于具有负值的差分数据的范围,则执行由下述等式定义的上分频操作。
divide-up(nQKeyj,nKeyMin) ...(12)=nQKeyj(nQKeyj≥0)=2·nQKeyj( ≤nQKeyj≤0)=2(nKeyMin-nQKeyj-1)+1 (nQKeyj< )在等式(11)和(12)中,j表示量化密钥数据的下标,nQKeyj表示整数数组,nKeyMax表示nQKeyj的最大值,nKeyMin表示nQKeyj的最小值。
下面将结合图10G描述DND操作器952的操作。
当所述输入密钥的差分数据是从折叠处理器940输入时,在步骤S9610中,DND操作器952获得输入差分数据当中的最大值nKeyMax和最小值nKeyMin。然后,在步骤S9620中,DND操作器952将nKeyMax的绝对值与nKeyMin的绝对值进行比较。如果nKeyMax不小于nKeyMin的绝对值,则DND操作器952在步骤S9622将nKeyMax设置为当前DND操作循环中的最大值。
在步骤S9624中,DND操作器952检查DND操作的阶数是否是1,换言之,检查DND操作的阶数是否是1,如果是,则在步骤S9630中,DND操作器952通过将所述最大值代入等式(10),对输入差分数据执行分频操作。
此后,在步骤S9640中,DND操作器952使用函数getQBit()测量用于编码已经被使用分频操作减少了的差分数据范围所需的比特尺寸。在步骤S9650中,如果DND操作的阶数证明是1,则编码所需的比特尺寸被存储作为指示用于编码的最小尺寸的值nQBitDND,并在步骤S9655中将DND操作的阶数增加1。
接着,DND处理器952再次执行步骤S9610到S9622。如果在步骤S9624中DND操作的阶数不是1,则DND操作器在步骤S9634中执行下分频操作,将所述最大值nKeyMax代入等式(11)。在步骤S9640中,DND操作器952计算编码已经被执行下分频操作的差分数据所需的比特数。如果该数小于在DND操作的前一循环中存储的最小值nQBitDND,则在步骤S9658中,在DND操作之后,它取代编码所需的最小比特尺寸。
在步骤S9620中,如果最小值nKeyMin的绝对值大于所述最大值nKeyMax的绝对值,则在步骤S9623中,在DND操作的当前循环中的最大值被更新为最小值,然后在步骤S9628中执行上分频操作,用所述最小值替换等式(12)中的nKeyMin。此后,在步骤S9640中,DND操作器952计算用于编码已经被执行上分频操作的差分数据的比特数。如果在步骤S9652中证明该计算的结果小于在DND操作的前一循环中已经存储的nQBitDND,则在步骤S9658中,它取代用于在DND操作之后进行编码所需的最小比特数nQBitDND。
DND处理器952执行预定次数的DND操作,并且DND操作的执行次数可以改变。例如,在本实施例中,DND操作被执行7次。DND操作器952向第一差分数据选择器954输出nQBitDND和与nQBitDND对应的差分数据。DND操作器952向标题编码器400输出DND的阶数并使得能够将它们包括在比特流中,利用这个阶数已经产生了相应的差分数据。
第一差分数据选择器954接收已经被执行移位操作的差分数据、已经被执行折叠操作的差分数据和已经被执行DND操作的差分数据,并确定将对这三个差分数据当中的哪个差分数据进行熵编码。
参看图10A和10B,如果在步骤S9700中,用于在DND操作之后进行编码所需的最小比特数nQBitDND不小于用于在DPCM操作之后进行编码所需的比特的尺寸nQStep-DPCM,则第一差分数据选择器954选择DPCM的结果并对它们执行移位操作。接着,在步骤S9710中,第一差分数据选择器954向熵编码器960输出移位操作的结果并允许它们被熵编码。在这种情况下,DND操作的阶数被设置为-1,并被输出给标题编码器400,并被包括在密钥标题中。
但是,如果证明在步骤S9720中执行的结果小于nQStep-DPCM且不小于用于在折叠操作之后进行编码的比特尺寸,则第一差分数据选择器954在步骤S9730中将经过折叠操作的差分数据输出给熵编码器960并允许它们被熵编码,在这种情况下,DND操作的阶数被设置为0,并被输出给标题编码器400,并被包括在密钥标题中。
如果用于在DND操作之后编码差分数据所需的比特数最小,则第一差分数据选择器954向上移位操作器956输出经过DND操作的差分数据,然后,上移位操作器956在步骤S9740中计算从第一差分数据选择器954输入的差分数据的第一离散度。接着,在步骤S9800中,上移位操作器956对经过DND操作的差分数据执行由下述等式规定的上移位操作,并在步骤S9810中计算上移位操作结果的第二离散度。
shift-up(nQKeyj,nKeyMax) ...(13)=nQKeyj(如果nQKeyj≥0)=nKeyMax-nQKeyj(如果nQKeyj<0)这里,j表示量化的密钥数据的差分数据的下标,nQKeyj表示整数数组,和nKeyMax表示差分数据当中的最大值。
当输入已经被执行了DND操作的差分数据和已经被执行了上移位操作的差分数据时,在步骤S9900中,第二差分数据选择器958将第一离散度与第二离散度进行比较。如果第二离散度小于第一离散度,则在步骤S9910中,第二差分数据选择器958向熵编码器960输出经过上移位操作的差分数据并允许它们被熵编码。第二差分数据选择器958向标题编码器400输出在DND操作中使用的最大和最小值nKeyMax和nKeyMin以及在上移位操作中使用的最大值nKeyMax,并允许将它们包括在密钥标题中。
但是,如果第一离散度小于所述第二离散度,则在步骤S9920中,第二差分数据选择器958向熵编码器960输出经过DND操作的差分数据并允许对它们进行熵编码。然后,第二差分数据选择器958向标题编码器400仅输出在DND操作中使用的最大和最小值nKeyMax和nKeyMin。在本发明的优选实施例中,可以使用标准偏差作为第一和第二离散度的测量。
熵编码器960根据差分数据的特征,对差分数据执行两种不同的功能。例如,被执行了DPCM操作和移位操作的差分数据和仅仅被执行了分频操作的差分数据具有正和负值,由此,需要执行用于编码每个差分数据的符号以及差分数据本身的处理。另一方面,由于被执行了折叠操作的差分数据仅具有正值,所以,仅执行用于编码差分数据的处理。
在本发明的优选实施例中,函数encodeSignedAAC被用于编码差分数据和它们的符号,函数encodeUnsignedAAC被用于仅仅编码差分数据。
图11示出了函数encodeSignedAAC例子。参见图11,当输入值是74和用于编码该输入值的比特数是8时,它的符号是0,与二进制数1001010相同。以下述方式对符号和它的所有比特平面编码第一步骤按照从它的最高有效位(MSB)到最低有效位(LSB)的顺序,对每个比特面上的二进制数进行编码;第二步骤检查当前正在被编码的比特是否是0;第三步骤如果当前正在被编码的比特不是0,则接着编码该二进制数的符号;以及第四步骤编码该二进制数的剩余比特。
函数encodeUnsignedAAC使用关于值的上下文将没有符号的值编码为适当的算术编码比特流。除了存在符号上下文之外,这个函数几乎与函数encodeSignedAAC相同。
图12A到12J示出了已经经过根据本发明的优选实施例的操作的密钥数据的图表。在图12A到12J中,水平轴表示每个密钥数据的下标,垂直轴表示密钥数据的值。
图12A示出了输入给本发明的编码器的原始密钥数据的图表。图12A所示的密钥数据被输出给量化器910,然后被利用9个量化比特进行量化,从而获得图12B所示的量化密钥数据。如果对图12B所示的量化密钥数据执行DPCM,则获得图12C所示的差分数据。
接着,使用大约7的模式值移位量化密钥数据的差分数据从而获得图12D所示的差分数据。此后,如果对移位后的差分数据执行折叠操作,可以获得只有正值的数据,如图12E所示。
对图12E所示经过折叠的数据执行DND操作的结果示于图12F到12H中。具体来说,图12F示出了对折叠数据执行分频操作的结果。如图12F所示,正密钥数据值的范围是从0到28,负密钥数据值的范围是从-29到0,这意味着负密钥数据值的范围大于正密钥数据值的范围。因此,需要对图12F所示的数据执行上分频操作,上分频操作的结果示于图12G中。
作为上分频操作的结果,负密钥数据值的范围被明显减少,从而使其比正密钥数据值的范围小得多。在DND操作的后续循环中,对上分频操作的结果执行下分频操作。图12H示出了对图12G所示的差分数据执行下分频操作的结果。在图12I中示出了对图12H所示的密钥数据执行上移位操作的结果。
如图12A到12G所示,密钥数据和差分数据的范围被逐渐减少。但是,如图12H和121所示,在上移位操作之后,差分数据的范围比以前增加很多,这表示图12H所示被执行了下分频操作的差分数据是将被最后编码的差分数据,如图12J所示。
下面结合附图,描述在标题编码器400中编码并存储在密钥标题中的信息。
当输入将被编码的密钥数据时,标题编码器400对密钥数据的数位以及将被编码的密钥的数量进行编码。接着,标题编码器400从线性密钥编码器900中接收有关在输入密钥中是否存在经过线性密钥编码的线性密钥数据区域的信息和该线性密钥数据区域中的密钥数据的数量,并从浮点数转换器905中接收已经经过浮点数转换的线性密钥数据区域的开始和结束密钥数据。
在浮点数转换器905接收可以引起最小量化误差的最大和最小值并将其转换成浮点数的情况下,经过转换的最大和最小值被从浮点数转换器905输入给标题编码器400,从而它们可以被再次用于逆量化。另外,量化比特的尺寸也被输入给标题编码器400并被包括在标题中。
标题编码器400从DPCM处理器920接收在DPCM的每个循环中的DPCM的阶数和内部密钥数据,并从移位器930接收已经被用于移位操作的模式值。另外,标题编码器400从DND处理器950接收关于是否已经执行了上移位操作的信息、能够使差分数据的离散度最小的DND的阶数以及在每个DND操作循环中的最大和最小值。最后,标题编码器400从熵编码器960中接收用于编码的比特数并将其编码为密钥标题。
下面结合图13A到18B描述密钥值数据编码器300的操作和结构。
图13A的框图示出了按照本发明的优选实施例的密钥值数据编码器300的例子,图14A示出了根据本发明的优选实施例的,编码密钥值数据的方法的流程图。
参看图13A,所述密钥值数据编码器300包括规范器1300,用于根据所有分量数据范围当中的最大数据范围,规范输入给它的每个分量的密钥值数据;量化器1310,用于使用预定数量的量化比特,量化规范的密钥值数据;量化误差最小化器1320,用于从规范器中接收最小值和最大范围,调节最小和最大值以便使量化误差最小,并输出经过调节的最大和最小值;浮点数转换器1330,用于从量化误差最小化器1320中接收最小值和最大范围,将经过调节的最大范围和最小值转换成十进制系统的浮点数;DPCM处理器1340,用于获得量化密钥数据的差分数据和预测差分数据,并对差分数据和预测差分数据执行循环量化操作以减少它们的范围;以及熵编码器1350,用于熵编码差分数据并输出其中密钥值数据已经被编码的比特流。
下面结合图14A描述密钥值数据编码器300的操作。
在步骤S14000中,规范器1300接收每个分量(x、y和z)的数据并在步骤S14120中按照等式(14)计算x、y和z分量的数据范围。然后,规范器1300通过在步骤S14140中进行比较,计算在x、y和z分量数据范围当中的最大数据范围。Maxj=Maxi=0n(P-ij)…(14)]]>Minj=Mini=0n(P-ij)]]>Rangemax=Max(Maxx-Minx,Maxy-Miny,Maxz-Minz)然后,规范器1300在步骤S14160使用下面的等式,规范x、y和z分量中每个分量的数据。 在等式(14)和(15)中,n表示数据的数量,i=0,1,...,n-1,和j表示分量x、y和z中的每一个。
如等式(15)所示,使用在x、y和z分量的数据范围当中的最大数据范围Rangemax规范x、y和z分量。作为这种规范的结果,关于不具有最大数据范围Rangemax的分量的数据的冗余增加了,因此,编码效率也增加了。
规范器1300向浮点数编码器1330输出每一个分量的密钥值数据当中的最小值x_min,y_min和z_min、所有分量的密钥值数据当中的最大值max、与一个分量相关并可以从中得到最大值max的信息nWhichAxis以及原始密钥值数据的数位nKeyValueDigit,从而使这些信息被作为密钥值标题包括在比特流中。规范器1300将规范的密钥值数据输出给量化器1310。
x、y和z分量中每个分量的、经过规范的密钥值数据被输入给量化器1310,然后,量化器1310在步骤S14200中使用预定数量的量化比特nQuantBit对经过规范的密钥值数据进行量化。P~ij=floor(P-i,j×2nQuantBit-1)+0.5)…(16)]]>在等式(16)中,函数floor()被用于将输入的浮点数转换成不大于该输入浮点数的最大整数。量化器1310向DPCM处理器1340和量化误差最小化器1320输出量化的密钥值数据。
图13B的框图示出了按照本发明的优选实施例的量化误差最小化器1320的例子。参看图13B,量化误差最小化器1320包括初始值设置单元1321,用于设置最小误差值emin、经过调节的最小值min’、量化误差最小值minmin;经过调节的最小值更新单元1323,用于通过执行预定操作更新经过调节的最小值min’;确定单元1325,用于在更新的经过调节的最小值的数位和值的基础上,将量化误差最小值minmin确定为将被用于逆量化的最小值;和误差值更新单元1327,用于使用更新的经过调节的最小值计算量化误差值,并且如果所计算的误差值小于最小误差值emin,将经过调节的最小值min’和所计算的误差值分别更新为量化误差最小值minmin和最小误差值emin,并将更新的结果输出给经过调节的最小值更新单元1323。
就量化误差最小化器1320通过对输入数据执行量化和逆量化控制量化范围从而使量化误差最小这个事实而言,量化误差最小化器1320与量化误差最小化器915类似。
下面结合图14C描述根据本发明的量化误差最小化器1320的操作。
在步骤S14320中,初始值设置单元1321接收与输入给量化器1310的数据相同的数据以及从量化器1310输出的量化数据。
初始值设置单元1321从所输入的数据中获得最大值max和最小值min并计算最小值min的数位。接着,在步骤S14340中,初始值设置单元1321通过使用最大值max和最小值min对量化数据进行逆量化来计算量化误差e,并将该量化误差e设置为初始最小误差值emin。
初始值设置单元1321从输入数据的最小值min中减去将量化步长QuantSpace除以2的结果并将减法结果设置为初始经过调节的最小值min’。然后,在步骤S14360中,初始值设置单元1321将初始经过调节的最小值min’设置为量化误差最小值minmin并将经过调节的最小值min’输出给经过调节的最小值更新单元1323。
经过调节的最小值更新单元1323通过执行预定的操作,更新从初始值设置单元1321输入的经过调节的最小值min’。根据本发明的优选实施例,经过调节的最小值更新单元1323在步骤S14380中按照等式(17)更新从初始值设置单元1321输入的经过调节的最小值min’并向确定单元1325输出更新的经过调节的最小值min’。min′=Mantissa(min′+1)10Exponent(min′)…(17)]]>在步骤S14400中,确定单元1325计算更新的经过调节的最小值min’的数位,将计算的结果与在初始值设置单元1321中计算的输入数据当中的最小值min的数位进行比较,并将更新的经过调节的最小值min’与将输入数据中的最小值min与将量化比特尺寸QuantSpace除以2的结果进行的结果进行比较。
如果经过更新和调节的最小值min’的数位大于输入数据当中的最小值min的数位,或者如果经过更新和调节的最小值min’大于min+QuantSpace2,]]>则确定单元1325将当前存储的量化误差最小值minmin确定为将被用于逆量化的最小值,并将量化误差最小值minmin输出给输出单元1329。如果经过更新和调节的最小值min’的数位不大于输入数据当中最小值min的数位并且经过更新和调节的最小值min’的数位不大于min+QuantSpace2,]]>则确定单元1325将更新的经过调节的最小值min’输出给误差值更新单元1327。
在步骤S14440中,误差值更新单元1327使用更新的经过调节的最小值min’和由初始值设置单元1321获得的最大值max对量化数据进行逆量化并计算量化误差e。
误差值更新单元1327在步骤S14460中将新计算的误差值e与最小误差值emin进行比较。作为比较的结果,如果新计算的误差值e小于最小误差值emin,则误差值更新单元1327在步骤S14480中利用新计算的误差值e更新最小误差值emin并利用更新的经过调节的最小值min’更新量化误差最小值minmin。另一方面,如果新计算的误差值e大于最小误差值emin,则误差值更新单元1327再次执行步骤S14380而不更新最小误差值emin和量化误差最小值minmin。
通过上述处理获得的、用于使量化误差最小的最大和最小值被输出给浮点数编码器1330并被编码为标题信息。然后,该标题信息被包括在由熵编码器1350产生的比特流中。
下面结合图14D描述在浮点数转换器1330中执行的步骤S14500。浮点数转换器1330的功能与图9A所示的浮点数转换器905类似。
在步骤S14510中,浮点数编码器1330接收x、y和z分量中每个分量的密钥值数据当中的最小值x_min,y_min和z_min、具有最大范围的分量的最大值max、与最大值max所属分量相关的信息nWhichAxis以及原始密钥值数据的数位nKeyValueDigit。
为了通过减少编码所需的比特数来提高编码密钥值数据的效率,浮点数编码器1330在步骤S14520中按照等式(4)将由二进制数表示的x_min,y_min,z_min和max转换成十进制数。
浮点数编码器1330在步骤S14530中检查x_min,y_min,z_min的数位是否相同。如果它们不相同,则在步骤S14540中将它们输出给标题编码器400并编码为标题信息。
如果x_min,y_min,z_min的数位相同,浮点数编码器1330在步骤S14550中检查它们是否与原始密钥值数据的数位相同。如果x_min,y_min,z_min的数位与原始密钥值数据的数位不同,那么,在步骤S14560中,在x_min,y_min,z_min的数位中只有一个被输出给标题编码器400并被编码为标题信息。
此后,在步骤S14570中,浮点数编码器1330检查从哪一个分量的密钥值数据当中选择在x、y和z分量的所有密钥值数据当中的最大值max,并确定max的数位是否与从中获得最大值max的分量的密钥值数据中的最小值的数位相同。
如果max的数位与可以获得最大值max的分量的密钥值数据当中的最小值的数位不相同,则它被输出给标题编码器400并被编码为标题信息。另一方面,如果max的数位与最大值max所属的分量的密钥值数据当中的最小值的数位相同,则在步骤S14580中,描述它们相同的状态信息被输出给标题编码器400。
浮点数编码器1330的前述操作用于编码转换后的浮点数的尾数,下面将描述将浮点数的指数信息编码为密钥值标题的处理。
浮点数编码器1330在步骤S14590中识别x_min,y_min,z_min和max的指数的绝对值当中哪一个是最大值,将所识别的最大值存储为nMaxExp,并将nMaxExp编码为多个比特的密钥值标题。
此后,浮点数编码器1330在步骤S14600中检查x_min,y_min,z_min和max的指数的符号是否相同。如果相同,则bSameSignExp被设置为1并且在步骤S14610将它们的符号输出给标题编码器400。另一方面,如果它们不同,则在步骤S14620中,bSameSignExp被设置为0,然后,与x_min,y_min,z_min和max的指数相关的信息的编码结束。
参看图14E,浮点数编码器1330在将x_min,y_min,z_min和max编码成标题信息之前,在步骤S14630中编码经转换的浮点数的符号。
接着,在步骤S14640中,浮点数编码器1330参照表3计算编码浮点数所需的比特数,并将具有与计算结果相同的比特的浮点数的尾数输出给标题编码器400。
在步骤S14650中,浮点数编码器1330参照表3计算编码nMaxExp所需的比特数并将与计算结果具有相同比特的浮点数的指数输出给标题编码器400。
在步骤S14660中,浮点数编码器1330在bSameSignExp的基础上检查x_min,y_min,z_min和max的指数是否具有相同的符号。如果它们不具有相同的符号,则在步骤S14670中,将它们的符号输出给标题编码器400并编码,由此完成对从规范器1300输入的x、y和z分量中每个分量的密钥数据当中最大值和最小值的编码处理。
浮点数编码器1330按照前述步骤,将从量化误差最小化器1320输入的并能够使每个分量的量化误差最小的最大和最小值编码为标题信息。
图13C的框图示出了按照本发明的优选实施例的DPCM处理器1340的例子,图14F示出了按照本发明的优选实施例的DPCM操作方法的流程图。
参看图13C,DPCM处理器1340包括循环DPCM操作器1341,它包括用于执行一般DPCM操作并输出差分数据的DPCM操作器1342和用于对输入给它的差分数据执行循环量化操作从而减少它们的范围的循环量化操作器1343;预测循环DPCM操作器1345,它包括用于对输入给它的量化数据执行预测DPCM操作并输出预测的差分数据的预测DPCM操作器1346以及用于对输入给它的差分数据执行循环量化操作从而减少它们的范围的循环量化器1347;以及选择器1349,用于在输入给它的差分数据的值的基础上从由循环DPCM操作器1341输入的差分数据和由预测循环DPCM操作器1345输入的差分数据之间选择一个。
下面参照图14F描述按照本发明的优选实施例的DPCM操作。
在步骤S14720,量化的密钥值数据被输入给循环DPCM操作器1341和预测循环DPCM操作器1345。
在DPCM操作器1341中,通过对输入给它的量化数据执行一般DPCM操作产生差分数据,并将所产生的差分数据输出给循环量化器1343。然后,循环量化器1343步骤S14740a中对从DPCM操作器1342输入的差分数据执行循环量化。
具体地说,DPCM操作器1342通过从当前的量化数据中减去以前的量化数据来计算差分数据。然后,循环量化器1343对所计算的差分数据执行循环量化。循环DPCM操作器1341的操作由下述等式表示。P^i=CircularQuantization(P~i-P~i-1)…(i=1,2,…,n)…(18)]]>在等式(18)中,n表示数据的数量。下面将描述循环量化。
在步骤S14740b中,在预测循环DPCM操作器1345中的预测DPCM操作器1346通过对输入给它的差分数据执行预测DPCM操作计算预测差分数据,然后循环量化器1347对预测的差分数据执行循环量化。
具体地说,预测DPCM操作器1346通过从当前量化数据中减去预测数据产生预测差分数据并将其输出。为了获得与当前量化数据有关的预测数据,通过从在前的量化数据中减去在所述在前量化数据之前的量化数据获得差分值,然后把它加到在前的差分数据上,从而计算与当前数据相关的预测数据。
由预测DPCM操作器1346计算的预测数据不能超过输入给它的量化数据的最大范围。换言之,如果预测数据超过了在输入量化数据的量化范围中的最大值,则预测DPCM操作器1346将预测数据设置为输入量化数据的量化范围中的最大值,并通过从预测数据中减去当前数据产生与当前数据相关的差分数据。如果预测数据小于输入数据的量化范围中的最小值,则预测DPCM操作器1346将当前的数据确定为预测差分数据。此后,预测DPCM操作器1346的这个操作被称之为“修改的预测DPCM操作”。
由预测DPCM操作器1346计算的预测差分数据被输入给循环量化器1347并被执行循环量化操作。
预测循环DPCM操作器1346的操作可以由下述等式表示。P~^i=(2nQuaneBit-1)-P~i]]>(如果2×P~i-1-P~i-2>2nQuantBit-1]]>) ...(19)P~^i=P~i]]>(如果2×P~i-1-P~i-2<0]]>)P~^i=P~i-(2×P~i-1-P~i-2)]]>(否则)P^i=CircularQuantization(P~^i)]]>在等式(19)中,i是2和n-1之间的整数,n表示数据的数量。
图15A示出了对具有最大值为1024和最小值为0的50个量化数据执行简单预测DPCM操作的结果,图15B示出了对与图15A所示情况相同的数据执行经过修改的预测DPCM操作的结果,由此在与数据相关的预测数据值超过数据当中的最大值或低于最小值的情况下,按照等式(19)调节与数据相关的差分数据。
作为简单预测DPCM操作的结果,如图15A和15B所示,预测差分数据具有大约3,000的宽范围。作为经过修改的预测DPCM操作的结果,如图16B所示,预测差分数据具有不大于2,000的窄范围。这意味着在经过修改的预测DPCM操作中比简单预测DPCM操作中更容易获得具有较窄范围的预测差分数据。
下面将描述循环量化。
图16A示出了量化数据,和图16B示出了对图16A所示数据执行DPCM操作的结果。如图16B所示,在DPCM操作之后,差分数据的范围可以增加到在DPCM操作之前使用的范围的两倍宽。因此可以说,使用循环量化操作,从而使得能够在将已经被执行了DPCM操作的差分数据范围保持在输入数据范围之内的同时,执行DPCM操作。
在假设量化范围中的最大值和最小值被彼此循环连接的基础上,执行循环量化操作。因此,如果作为对两个连续的量化数据执行线性DPCM的结果的差分数据大于量化范围中的最大值的一半,则可以通过从差分数据的每一个当中减去最大值来减小它们的值。
如果差分数据小于量化范围中的最小值的一半,则可以通过将量化范围中的最大值加到差分数据的每一个上,进一步减小它们的值。
假设X和 分别表示输入差分数据和循环量化的差分数据,循环量化可以由下述等式表示。CircularQuantization(Xi)=X^i=Min(|Xi|,|X′i|)…(20)]]>X′i=Xi-(2nQBits-1)(如果X≥0)X′i=Xi+(2nQBits-1)(否则)在等式(20)中,nQBits表示用于量化的比特尺寸。图16C示出了对图16B所示的差分数据执行循环量化的结果。
再次参看图14F,循环量化的差分数据和循环量化的预测差分数据被输出给选择器1349,然后,选择器1349在步骤S14760中对输入的差分数据执行差分绝对值求和(SAD)操作。这里,执行SAD操作以便使输入数据的绝对值都被相加。在步骤S14760中,选择器1349将循环量化差分数据的所有绝对值相加并将循环量化预测差分数据的所有绝对值相加。
然后,选择器1349在步骤S14780中将量化差分数据的绝对值的和与预测差分数据的绝对值的和进行比较,在量化差分数据和预测差分数据之间,选择具有较小绝对值和的差分数据并输出所选择的差分数据。选择器1349选择具有较小绝对值和的差分数据的原因在于按照推理它们具有较窄范围的值。例如,在熵编码预测差分数据中,可以期望编码绝对值和较小的差分数据所需的比特数少于编码绝对值和较大的差分数据所需的比特数。
对于本领域技术人员来讲很明显,SAD操作仅仅是选择某一组差分数据的方法中的一种,因此,选择器1349可以采用不同方法来选择差分数据。
再次参看图14A,在步骤S14800中,从DPCM处理器1340输出的差分数据在熵编码器1350中被进行熵编码。
参看图14G,熵编码器1350熵编码x、y和z分量中每个分量的密钥值数据的差分数据。
熵编码器1350参考x、y和z分量中每个分量的差分数据,检查x、y和z分量的量化值是否相同,即,x、y和z分量的差分数据是否是0,如果它们是相同,则在步骤S14810中完成熵编码。例如,在三维动画的情况下,一列火车在与x分量方向相同的水平方向运动,x分量的密钥值数据是变化的。但是,在y和z分量中存在少量变化。所以,如果所述y和z分量被量化,估计它们将会具有相同的值。因此,不需要对实际相同的所有密钥值数据进行编码,由此,通过只将密钥值数据中的一个编码成标题信息可以提高编码效率。
如果x、y和z分量中每个分量的量化密钥值数据不同,则熵编码器1350在步骤S14820中读出已经被预先设置的预定值。此后,熵编码器1350使用unaryAAC函数在步骤S14830中对x、y和z分量中每个分量的量化密钥值数据的差分数据进行编码,或在步骤S14850中使用连续量化AAC函数对它们进行编码。
下面结合图17描述unaryAAC函数。unaryAAC函数把将被编码的符号转换为由多个0、一个用于指示所述多个0结束的标记位1和表示所述符号的符号的一个比特组成的预定数量的比特。这里,所述多个0对应于所述符号的幅值。例如,使用unaryAAC函数将256编码为由256个0、用于指示所述0结束的一个标记位1和表示256的符号即加号的0组成的一系列比特。由于unaryAAC函数使表示将被编码的符号的比特的冗余度增加,由此提高了编码符号的效率。
参考图14H、18A和18B,将描述使用SQAAC函数编码符号的方法。SQAAC函数编码连续更新量化范围的符号。
图18A示出了使用SQAAC函数编码符号的方法。如图18A所示,将被编码的输入符号是1,和编码范围中的最小值和最大值分别是0和9。
参看图18A,在编码所述符号的第一步骤中,编码范围被分成两个子域,即上界和下界,然后检查将被编码的符号,即1,是属于上界还是属于下界。由于1属于下界,所以0被编码并且下界被更新为一个新的编码范围。因此,用于第二步骤的新编码范围是从0到4。
在第二步骤中,从0到4的新编码范围被分成两个子域,即上界和下界,然后检查1是属于上界还是属于下界。由于1属于下界,所以,0被编码,编码范围中的最大值被更新为是下界中最大值的1。因此,用于第三步骤的、通常为下界的新编码范围是从0到1。
在第三步骤中,0-1的编码范围被分成上限值和下限值,然后检查1是与上限值还是与下限值相同。由于1等于上限值,所以,1被编码,然后相应编码范围中的最小值被更新为1。因此,新的编码范围是[1,1],由此,它的最大值和最小值彼此相同。当在一个编码范围中的最大和最小值相同时,使用SQAAC函数的编码处理完成。
图14H示出了在按照本发明的熵编码器1350中执行的,使用SQAAC函数编码一个分量的密钥值数据的差分数据的处理的流程图。
参看图14H,熵编码器1350在步骤S14920中接收密钥值数据的差分数据(此后称之为符号)、熵编码符号所需的比特数nQP、表示首先将被编码成比特流的符号的下标的nStartIndex和将被编码的符号的数量(n)。
熵编码器1350在步骤S14940中编码符号的正负号并将符号转换为正数。符号被转换为正数的原因在于在后续处理中不允许负数。
熵编码器1350在步骤S14960中识别正数当中的最大值,将最大值存储为nMax,并将nMax编码成与nQP一样多的比特。
熵编码器1350在步骤S14980中初始化一个符号将在其中被编码的范围,并将该编码范围中的最小值 和最大值 分别设置为0和nMax。另外,熵编码器1350将一个比特的标记 分派给每个符号。标记 被用于在编码符号的过程中改变概率模型。在开始时,标记 被设置为‘假’并且当下一个将被编码的值为1时被转换为‘真’,此后,截止到目前为止用于编码符号的概率模型被其他的模型取代。
接着,熵编码器1350在步骤S15000中识别假设被首先编码的x、y和z分量中每个分量的差分基准点(i=nStartIndex)并将表示对所有符号的编码是否已经完成的标记bDone设置为‘真’。
熵编码器1350重复执行将在下面描述的步骤S15020到S15180,直到用于每个符号编码的编码范围中的最大值和最小值变得相同为止,即,直到没有符号还需要被编码为止。这里,当在与一个符号相关的编码范围中的最大和最小值相同时,可以认为对符号的编码已经完成。
熵编码器1350在步骤S15020中检查 是否等于 。如果 等于 ,则方法移动到编码下一个符号的步骤,如果不等,在步骤S15040中,bDone被设置为‘假’,这意味着当前符号(当前正在被编码的符号)的编码还没有完成。
熵编码器1350在步骤S15060中计算在用于当前符号的编码范围中的中间值nMid并在步骤S15080中将这个中间值nMid与当前符号的值进行比较。在本发明的优选实施例中,使用下述等式计算中间值nMid。nMid=P^i·max+P^i·min2+P^i·min+1]]>在步骤S15100中,作为比较的结果,如果当前符号值不大于所述中间值nMid,这意味着当前符号属于下界,则向比特流发出一个0,并且用于当前符号的编码范围中的最大范围 被中间值nMid代替。
另一方面,如果当前符号值大于中间值nMid,则发出一个1给比特流并且在用于当前符号的编码范围中的最小值 被中间值nMid所取代。当当前正在被编码的符号的值第一次超过中间值nMid时,换言之,当1第一次被发给比特流时, 在步骤S15120中被设置为‘真’,从而改变了用于编码符号的概率模型。
有两种在SQAAC函数中使用的概率模型。一种是notFoundContext,用于熵编码在从每个符号第一次发出1之前输出的比特,另一种是FoundContext,用于熵编码在从每个符号第一次发出1之后输出的比特。使用两种不同的概率模型的目的是增加在使用notFoundContext期间产生0的概率。由于产生0的概率增加,所述熵编码符号的效率增加了。
然后,熵编码器1350在步骤S15140中检查 是真还是假。如果 是真,则熵编码器1350在步骤S15160中使用FoundContext编码符号,如果是假,熵编码器1350在步骤S15180中使用notFoundContext编码符号。
当从步骤S15020到步骤S15180的用于编码当前符号范围的处理被完成时,这意味着熵编码器仅仅在一个阶段中完成了当前符号的编码,在步骤S15200中,熵编码器1350将编码下标增加1。接着,熵编码器1350在步骤S15220中检查当前阶段中的所有符号是否都已经被编码。如果在当前阶段中仍旧还有需要被编码的符号,则熵编码器1350再次执行步骤S15020到步骤S15220。
当在一阶段中的所有符号都被完全编码时,在步骤S15240中,熵编码器1350根据标记bDone检查是否所有阶段的编码都已经完成。如果bDone是真,则熵编码器1350完成了对当前分量的整个编码处理并开始对后续的分量编码,如果不是真,则熵编码器1350再次执行步骤S15000到S15220,以便编码剩余的符号。
图18B示出了使用SQAAC函数编码多个符号的处理。特别是,图18B示出了使用SQAAC函数编码0、1、2、3、4和9的处理。
再次参看图14B,如果按照本发明的、用于编码数据的装置通过熵编码所有输入的密钥值数据产生一个比特流,那么,标题编码器400在步骤S15300中将译码编码的密钥值数据所需的信息编码为标题信息,并将密钥值标题信息加到比特流中,并输出所生成的比特流。
标题编码器400编码将被编码的输入密钥值数据的数量与数位以及所述密钥值数据的量化比特尺寸。接着,标题编码器400识别x、y和z分量中的每一个是否具有相同的量化值(例如,即使x、y和z分量中的每个分量的密钥值数据是变化的,由于所述x分量的密钥值数据的变化程度非常小,所以,x分量的量化密钥值也具有相同的值)并将结果编码为一个标记。
例如,如果x分量的量化值不相同,那么,不管是循环DPCM操作还是预测循环DPCM操作都已经被用于编码x分量的密钥值数据,并且不管是将使用unaryAAC函数还是使用SQAAC函数编码的x分量的密钥值数据都将被编码成标记。如果不期望使用unaryAAC函数编码x分量的密钥值数据,那么,x分量的编码比特尺寸和将被熵编码的x分量的开始下标被编码成密钥值标题。
类似的,如果y和z分量中每个分量的密钥值数据不同,那么,与前述x分量的标题信息正好对应的y和z分量的标题信息被编码成一个标题。
如果x分量的量化值不同,则unaryAAC函数不被用于对x分量的密钥值数据编码,并且将被编码的x分量的开始下标是1,然后,第一量化密钥值的基准点被编码为内部基准点。按照相同的方式,y和z分量中每个分量的第一量化密钥值基准点被编码为一个内部基准点。
标题编码器400识别x、y和z分量中的哪一个分量具有最大数据范围。如果x分量具有最大数据范围,则标题编码器400将变量nWhichAxis设置为0。如果y分量具有最大数据范围,则标题编码器400将nWhichAxis设置为1。如果分量z具有最大数据范围,则标题编码器400将nWhichAxis设置为2。然后,标题编码器400使用浮点数编码器1330将nWhichAxis、x_min、y_min、z_min和max编码成密钥标题。
再次参见图3A和3B,按照本发明的、用于编码位置内插器的装置编码密钥数据和密钥值数据,并使用标题编码器400编码标题信息(在步骤S380),并输出其中所述位置内插器已经与编码的密钥数据、编码的密钥值数据和编码的标题信息一起被编码的一个比特流。
下面结合图19A到24详细描述按照本发明的优选实施例的,用于译码其中位置内插器已经被编码的比特流的方法和装置。
图19A的框图示出了按照本发明的优选实施例的,用于译码编码的位置内插器的装置,图19B示出了按照本发明的优选实施例的,用于译码编码的位置内插器的方法的流程图。
参看图19A,用于译码编码的位置内插器的装置包括密钥数据译码器1920,用于译码来自输入比特流的密钥数据;密钥值数据译码器1950,用于译码来自输入比特流的密钥值数据;标题译码器1910,用于译码来自输入比特流的标题信息并将译码的标题信息输出给密钥数据译码器1920和密钥值数据译码器1950;以及位置内插器合成器1980,用于利用从标题译码器1910输入的译码的标题信息,合成译码的密钥数据和译码的密钥值数据并输出译码的位置内插器。
参看图19B,在步骤S19000中,被用于编码图3A所示的位置内插器的装置编码的比特流被输入给密钥数据译码器1920、密钥值数据译码器1950和标题译码器1910。
在步骤S19100中,标题译码器1910译码来自输入比特流的标题信息并将译码的标题信息输出给密钥数据译码器1920、密钥值数据译码器1950和位置内插器合成器1980。
密钥数据译码器1920熵译码来自输入比特流的密钥数据,通过对密钥数据执行预定的逆DND操作、逆折叠操作和逆移位操作产生译码的密钥数据并将译码的密钥数据输出给位置内插器合成器1980。另外,在步骤S19200中,密钥值译码器1950熵译码来自输入比特流的密钥值数据,通过对密钥值数据执行预定的逆量化操作和逆DPCM操作产生译码的密钥值数据,并将译码的密钥值数据输出给位置内插器合成器1980。
在步骤S19400中,位置内插器合成器1980通过使用包括模式设置信号和密钥选择标记在内的译码的标题信息合成从密钥数据译码器1920输入的译码的密钥值数据和从密钥值数据译码器1950输入的译码的密钥值数据,恢复位置内插器。
下面结合图20到21B详细描述密钥数据译码器1920的结构和操作。按照本发明的密钥数据译码器1920接收编码的比特流并将其组成译码的密钥数据。
密钥数据译码器1920包括熵译码器2060、逆DND处理器2050、逆折叠处理器2040、逆移位器2030、逆DPCM处理器2020、逆量化器2010、线性密钥译码器200和浮点数逆转换器2005。
图21A示出了按照本发明的优选实施例的用于译码密钥数据的方法的流程图。
将比特流输入给标题译码器1910和熵译码器2060。
标题译码器1910在步骤S21000中译码用于译码的每个步骤所需的信息并将它们提供给它们相应的译码步骤。下面将随着每个译码步骤,描述由标题译码器1910译码的信息。
在步骤S21100中,熵译码器2060从标题译码器1910接收将被译码的差分数据的数量以及已经被用于编码的比特数,即将被用于译码的比特数,并译码输入的比特流。差分数据的数量等于从密钥数据的数量中减去通过执行DPCM所获得的内部密钥数据的数量的结果。
熵译码器2060根据包括在比特流中的预定信息,例如本发明中的bSignedAACFlag,识别将被译码的差分数据是具有负值还是具有正值。如果编码的差分数据具有负值,则熵译码器2060使用函数decodeSignedAAC()对它们进行译码。另一方面,如果编码的差分数据仅具有正值,则熵译码器2060使用函数decodeUnsignedAAC()对它们进行译码。此后,译码的差分数据被发送给逆DND处理器2050。
逆DND处理器2050从标题译码器1910中接收DND的阶数和在每个DND循环中的最大值nKeyMax。
如果DND的阶数是-1,这意味着正在被译码的编码差分数据已经经过DPCM操作和移位操作而不是经过DND被进行熵译码,并且该方法直接进入到执行逆移位操作的步骤。如果DND的阶数是0,这意味着正在被译码的编码差分数据已经经过折叠操作而不是DND被进行熵译码,由此该方法直接进入到执行逆折叠操作的步骤。如果所述DND的数阶大于0,则在步骤S21200中执行逆DND操作。
逆DND处理器2050在步骤S21300中确定正在被译码的编码差分数据是否已经经过上移位操作被编码。在本发明的优选实施例中,通过检查包括在比特流中的nKeyInvertDown是否大于0来确定正在被译码的编码差分数据是否已经经过上移位操作被编码。
如果正在被译码的编码差分数据还没有经过上移位操作,则该方法进入到执行逆DND的步骤。另一方面,如果正在被译码的编码差分数据已经经过上移位操作,则在步骤S21400中通过执行上移位操作已经从正数区域变换到负数区域的差分数据被移回到负数区域。在本发明的优选实施例中,通过执行由下述等式表示的下移位操作(反向向下的操作)恢复已经经过上移位操作的差分数据。
invert-down(v) ...(22)=v (如果v≤nKeyInvertDown)=nKeyInvertDown-v(如果v>nKeyInvertDown)这里,nKeyInvertDown与在上移位操作中使用的最大值nKeyMax具有相同的值。作为上移位操作的结果,具有高于nKeyInvertDown的值的差分数据被转换为低于-1的负值。
根据在每个DND循环中的最大值nKeyMax,对已经经过下移位操作的差分数据有选择地执行逆下分频操作或逆上分频操作。
参看图21B,逆DND处理器2050执行与差分数据在编码过程中被执行的DND操作次数相同次数的逆DND操作。换言之,逆DND处理器2050将逆DND的阶数的初始值设置为等于DND的阶数。接着,逆DND处理器2050每执行一次逆DND操作,即从逆DND的阶数的初始值中减1,并保持执行DND操作直到逆DND的阶数变成1为止。在步骤S21510中,逆DND处理器2050搜索每个DND循环中的nKeyMax并检查每个nKeyMax是否不小于0。
如果nKeyMax小于0,则意味着在编码处理中已经执行了上分频操作,由此,逆DND处理器2050在步骤S21530中通过执行逆上分频操作将正在被译码的差分数据的范围扩展到负数区域。在本发明的优选实施例中,可以使用由下述等式(23)定义的逆上分频操作。
inverse-divide-up(v) ...(23)=v (如果v≥0)=(nKeyMaxi-1)-v-12]]>(如果v<0,v mod 2≠0)=v2]]>(如果v<0,v mod 2=0)但是,如果nKeyMax不小于0,则逆DND处理器2050检查逆DND的阶数是否是1。如果逆DND的阶数不是1,则意味着对在编码处理过程中正在被译码的差分数据已经执行了下分频操作,因此逆DND处理器2050通过在步骤S21570中执行逆下分频操作将差分数据的范围扩展到正数区域。
在本发明的优选实施例中,使用由下述等式定义的逆下分频操作。
inverse-divide-down(v) ...(24)=v (如果v≥0)=(nKeyMaxi+1)+v-12]]>(如果v<0,v mod2≠0)=v2]]>(如果v<0,v mod2=0)如果nKeyMax不小于0并且逆DND的阶数是1,那么,逆DND处理器2050在步骤S21590中执行逆分频操作之后,完成全部逆DND操作。在本发明的优选实施例中,使用由下述等式(25)定义的逆分频操作。
inverse-divide(v) ...(25)=v(如果v≥0)=v+(nKeyMax0+1) (如果v<0)在步骤S21600中,已经经过逆DND操作的密钥数据的差分数据被输入给逆折叠处理器2040,逆折叠处理器2040对差分数据执行逆折叠操作,因此,一直在正数区域中的差分数据被分成正值和负值。在本发明的优选实施例中,使用等式(26)定义的逆折叠操作。inverse-fold(v)=-(v+1)2]]>(如果v mod 2≠0) ...(26)=v2]]>(如果v mod 2=0)=0 (如果v=0)已经经过逆折叠操作的差分数据被输出给逆移位器2030,逆移位器2030在步骤S21700中将已经在编码过程中使用并从标题译码器1910输入的模式nKeyShift加到差分数据上。下述等式表示这个操作。
inverse-shift(v)=v+nKeyShift ...(27)在步骤S21800中,逆DPCM处理器2020使用从标题译码器1910输入的DPCM的阶数将从逆移位器2030输入的差分数据复原成量化的密钥数据。逆移位器2030执行次数与下述等式(28)规定的DPCM的阶数相同的逆DPCM操作。
v(i+1)=v(i)+delta(i)...(28)这里,i表示差分数据和密钥数据的下标,v表示整数数组,delta(i)表示差分数据。
已经经过逆DPCN操作的量化密钥数据被输入给逆量化器2010。然后,在步骤S21900中,逆量化器2010从标题译码器1910接收关于浮点数转换器905是否对用于逆量化的量化比特尺寸nKeyQBit以及最大和最小值进行编码的信息,并使用下述等式将所述量化密钥数据转换成逆量化的密钥数据。inverse-quantize(v)=fKeyMin+v2nKeyQBit-1×(fKeyMax-fKeyMin)…(29)]]>如果在编码密钥数据的处理中用于量化的最大和最小值还没有被浮点数转换器905转换,等式(29)中所示的fKeyMin和fKeyMax分别被设置为0和1。但是,如果浮点数转换器905已经对用于量化的最大和最小值进行了转换,那么,被浮点数逆转换器2005逆转换的最大和最小值被分别用做用于逆量化的最大和最小值。
从逆量化器2010输出的译码的密钥数据被加到在线性密钥译码器2000中译码的密钥数据上,由此,构成经过译码的密钥数据。
下面将描述线性密钥译码处理。
标题译码器1910译码来自比特流的密钥标题信息。如果与线性密钥数据区域相关的信息存在于比特流中,则标题译码器1910将译码线性密钥数据区域的开始和结束密钥所需的信息输出给浮点数逆转换器2005,并将被编码为线性密钥的密钥的数量输出给线性密钥译码器2000。
浮点数逆转换器2005将由十进制数表示的所述线性密钥数据区域的开始和结束密钥逆转换为二进制数,并将该二进制数输出给线性密钥译码器2000。
假设将被译码的两个浮点数分别被称做fKeyMin和fKeyMax,下面描述译码fKeyMin的处理。
标题译码器1910从比特流中读出fKeyMin的数位。如果fKeyMin的数位是0,则fKeyMin被设置为0,并从比特流中读出fKeyMax的数位,以便译码fKeyMax。如果fKeyMax的数位不小于8,则意味着fKeyMax已经被遵循IEEE标准754进行了译码。因此,在它的32比特被读出以后译码浮点数的fKeyMax。
但是,如果fKeyMax的数位位于1和7之间,则标题译码器1910从比特流中读出一个符号位。在本发明的优选实施例中,如果符号位是1,则MinKeyMantissaSign被设置为-1。相反,如果符号位是0,则MinKeyMantissaSign被设置为1。此后,参考示出了尾数的数位和编码所需比特数之间关系的表3,获得译码所需的比特数。接着,和译码所需比特数相同的比特流的比特被读出并存储在nMinKeyMantissa中。然后,读出比特流的下一位并以与尾数的符号被存储在MinKeyMantissaSign中相同的方式将其存储在MinKeyExponentSign中。与指数值对应的比特流的下面6位被读出并存储在nMinKeyExponent中。
浮点数逆转换器2005通过将从标题译码器1910输入的值代入等式(30)复原fKeyMin。fKeyMin=MinKeyMantissaSign*nMinKeyMantissa10MinKeyExponentSign*nMinKeyExponent…(30)]]>复原fKeyMax的处理与复原fKeyMin的处理相同。具体地说,它确定在从比特流中读出fKeyMax的指数之前,与fKeyMin的指数相同的值是否被用做fKeyMax的指数。如果与fKeyMin的指数相同的值没有被用做fKeyMin的指数,则以和从比特流中读出fKeyMin的指数相同的方式从比特流中读出fKeyMax的指数。
线性密钥译码器2000从浮点数逆转换器2005中读出线性密钥数据区域的开始和结束密钥,并按照下述等式(31)译码线性密钥数据区域。Keyi=fKeyMin+(fKeyMax-fKeyMin)*i(nNumberOfLinearKey-1)…(31)]]>(i=0,...,nNumberOfL inearKey-1)这里,fKeyMin和fKeyMax分别表示线性密钥数据区域的开始和结束密钥数据。
使用前述方法译码的在线性密钥数据区域中的密钥数据被加到从逆量化器2010输出的密钥数据上,然后加法的结果被输出为最后的密钥数据。
下面结合图22A和23E描述按照本发明的优选实施例的密钥值数据译码器1950的结构和操作。
参看图22A,密钥值数据译码器1950包括熵译码器2220,用于对输入给它的比特流熵译码并输出差分数据;逆DPCM处理器2230,用于对从熵译码器2220输入的差分数据执行逆循环DPCM操作或逆预测循环DPCM操作并输出量化的密钥值数据;逆量化器2240,用于逆量化从逆DPCM处理器2230输入的量化密钥值数据并输出规范的密钥值数据;浮点数译码器2260,用于从标题译码器1910接收最小和最大值,将x、y和z分量中每个分量的密钥值数据当中的最小值和具有最大范围的分量的最大值转换成二进制数,并将该二进制数输出给逆量化器2240;和逆规范器2250,用于从浮点数译码器2260接收x、y和z分量中每个分量的密钥值数据当中的最小值和具有最大范围的分量的最大值,根据来自浮点数译码器1160的最小值和最大值计算最大范围,然后逆规范从逆量化器2250输入的密钥值数据。
下面结合图23A描述按照本发明的优选实施例的,用于译码密钥值数据的方法。参看图23A,经过编码的密钥值数据的比特流被输入给熵译码器1120和标题译码器1910。然后,在步骤S23000中,标题译码器1910译码来自比特流的、译码所需的标题信息并输出译码的标题信息给熵译码器2220、逆DPCM处理器2230和逆量化器2240。
在步骤S23200中,熵译码器2220熵译码比特流并输出差分数据给逆DPCM处理器2230。
图23A详细地示出了熵译码处理的流程图。参见图23A,在步骤S23200中,将比特流Pi输入给熵译码器2220。
在步骤S23220中,熵译码器2220检查分量,例如x,的密钥值数据是否具有相同的量化值。如果分量的密钥值数据具有相同的量化值,则在步骤S23230中,该分量的所有符号都被译码并将它们设置为从标题译码器1910输入的最小值,例如,fMin_X。
如果分量的密钥值数据不具有相同的量化值,则在步骤S23240中,熵译码器2220检查是否已经使用unary AAC函数编码了该密钥值数据。如果已经使用unary AAC函数编码了该密钥值数据,则在步骤S23250中使用unaryAAC函数对它们译码。
unary AAC函数从比特流中读出0直到比特1出现为止,将0的数量转换成绝对值,读出比特‘1’的下一位作为值的正负号,如果该位是‘0’,则该值的正负号为正,如果该位是‘1’,则该值的正负号为负,然后输出被译码的值。
如果分量的密钥值数据还未被用unary AAC函数编码,则熵译码器2220在步骤S23300中使用将在下面描述的SQ AAC函数译码其中分量的密钥值数据已经被编码的比特流。
在步骤S23310中,熵译码器2220译码来自比特流的所有符号的正负号,译码最大值nMax,并且初始化所有符号的译码范围(从0到nMax的范围)和将标记 设置为‘假’。
然后,熵译码器2220在步骤S23320中确定首先将被译码的密钥值基准点(i=nStartIndex)并将bDone设置为‘真’。
熵译码器2220再次执行步骤S23330到S23430以便译码符号。
具体地说,熵译码器2220在步骤S23330中检查在译码范围中的最大值 和最小值 是否相同。
如果 和 相同,则在步骤S23340中,将被编码的符号被确定为译码范围中的最大值(或最小值),如果不同,则在步骤S23350中,熵译码器2220将bDone设置为‘假’并利用下述等式(32)更新译码范围中的中间值nMid。 熵译码器2220在步骤S23360中检查上下文标记 是否是真以便确定用于译码的概率模型。如果所述上下文标记 是真,熵译码器2220在步骤S23370中使用FoundContext译码比特流,如果是假,则熵译码器2220在步骤S23380中使用notFoundContext译码比特流。
已经对来自比特流的一个比特译码的熵译码器2220在步骤S23390中检查从比特流中译码的比特是否是1,如果不是,熵译码器2220在步骤S23400中利用中间值nMid代替译码范围中的最大值 。如果述比特流中译码的比特是1,熵译码器2220在步骤S23410中利用中间值nMid替换在译码范围中的最小值 并将上下文标记 设置为‘真’。
熵译码器2220在步骤S23420中将译码下标i加1,在步骤S23430中检查当前阶段的分量的所有密钥值数据是否都已经被译码,如果还有剩余的符号需要被译码,则执行步骤S23330到S23420。
如果当前阶段中所有的密钥值数据都已经被译码,则熵译码器2220在步骤S22440中检查是否需要附加阶段去译码当前分量的密钥值数据,如果是,则再次执行步骤S23320到S23430。熵译码器检查当前分量的所有密钥值数据是否都已经被译码,熵译码器开始译码下一个分量的密钥值数据。
参看图22A和23B,由熵译码器2220译码的密钥值数据的差分数据被输入给逆DPCM处理器2230,然后,逆DPCM处理器2230依据对输入的差分数据执行的DPCM的类型,对输入的差分数据执行逆循环DPCM操作或逆预测循环DPCM操作。
下面结合图23D描述在步骤S23500中的逆DPCM操作。参看图23D,已经被执行了逆DPCM操作的差分数据被输入给确定单元1132。然后,在步骤S23520中,确定单元1132识别对输入的差分数据执行的DPCM的种类,在识别结果的基础上确定将对输入的差分数据执行哪种逆DPCM,并将差分数据输出给逆循环DPCM操作器2234或逆预测循环DPCM操作器2238。
如果差分数据被输入给逆循环DPCM操作器2234,并且nMax是差分数据量化范围中的最大值,则逆循环DPCM操作器2234在步骤S23540中通过对输入的差分数据 执行逆循环量化,获得逆循环量化的差分数据 ,这由下述等式表示。 (如果 )...(33) (如果 )此后,逆循环DPCM操作器2234通过分别将输入的差分数据 和逆循环量化的差分数据 代入等式(34),获得逆DPCM的差分基准点的值A和逆DPCM的差分基准点的值B。
在等式(34)中,n表示数据的数量,和i表示1和n-1之间的整数。
如果A不小于0且不大于nMax,则逆循环DPCM操作器2234输出A作为逆循环DPCM数据 。如果A小于0或大于nMax,则在步骤S23580中,逆循环DPCM操作器2234输出B。
逆预测循环DPCM操作器2238在步骤S23540中通过使用等式(33),对预测的差分数据 执行逆预测循环量化,获得逆循环量化的预测差分数据 。
在步骤S23560中,如果P=2×P~i-1+P~i-2]]>,其中,P表示用于译码的预测数据,逆预测循环DPCM操作器2338通过将 代入等式(35)计算A和将 代入等式(36)计算B。 (如果P>nMax) ...(35) (如果P<0) (否则) (如果P>nMax)...(36) (如果P<0) (否则)在等式(35)和(36)中,n表示数据的数量,i是1和n-1之间的一个整数。
如果A不小于0并且不大于nMax,则逆预测循环DPCM操作器2238输出A作为逆预测循环DPCM的数据 。如果A小于0或大于nMax,则逆预测循环DPCM操作器2238在步骤S23580中输出B作为 。
逆DPCM处理器2230输出由逆DPCM操作产生的量化密钥值数据 给逆量化器2240,然后,逆量化器2240在步骤S23700中使用从标题译码器1910输入的量化比特nKeyValueQBit逆量化 。当n表示从标题译码器1910输入的密钥值数据的数量时,在逆量化器2240中执行的逆量化可以由下述等式表示。P^ij=P~ij(2nKeyValueQBits-1)]]>(i=nStartIndex,...,n;j=x,y,z)...(37)逆量化器2240通过对x、y和z分量中每个分量的密钥值数据执行逆量化,产生规范的数据并将x、y和z分量中每个分量的规范的密钥值数据输出给逆规范器2250。
逆规范器2250在步骤S23800中使用从浮点数译码器2260输入的信息,逆规范规范的密钥值数据。下面将结合图23E更加详细地描述在逆规范器2250中执行的逆规范。
浮点数译码器2260在步骤S23820中从标题译码器1910中接收将被用于逆规范的最大值fMax,并且分别接收x、y和z分量的最小值fMin_X、fMin_Y和fMin_Z,以及与哪个分量轴具有最大值相关的信息nWhichAxis和与编码类型相关的信息bUse32Float。
浮点数译码器2260在步骤S23840中将以十进制数表示的fMax、fMin_X、fMin_Y和fMin_Z转换为二进制数并将该二进制数输出给逆规范器2250。
在步骤S23860中,逆规范器2250根据bUse32Float识别fMax、fMin_X、fMin_Y和fMin_Z是否是被用IEEE标准754的浮点数格式编码的,如果它们不是被用IEEE标准754的浮点数格式编码的,则逆规范器2250使用下述等式计算在最大数据范围中的最大值Rangemax。如果fMax、fMin_X,fMin_Y和fMin_Z是被用IEEE标准754的浮点数格式编码的,则逆规范器2250确定fMax为Rangemax。
Rangemax=fMax-fMin_X(如果nWhichAxis=0)...(38)Rangemax=fMax-fMin_Y(如果nWhichAxis=1)Rangemax=fMax-fMin_Z(如果nWhichAxis=2)如果Rangemax被确定,则逆规范器2250在步骤S23880中根据Rangemax使用下述等式逆规范x、y和z分量中每个分量的数据。P^i,x=P~^i,x×Rangemax+fMin_X…(39)]]>P^i,y=P~^i,y×Rangemax+fMin_Y]]>P^i,z=P~^i,z×Rangemax+fMin_Z(i=0,1,…n)]]>在等式(39)中,n表示数据的数量。
逆规范器2250在步骤S23900中将逆规范的密钥值数据输出给位置内插器合成器1980。
下面将描述用于合成译码的密钥数据和译码的密钥值数据的位置内插器合成器1980。
图24示出了位置内插器合成器1980的操作流程图。
位置内插器合成器1980在步骤S24000中接收译码的密钥数据和译码的密钥值数据,并从标题译码器1910接收密钥数据的数量、断点产生模式和密钥选择标记。
当所述断点产生模式是动画路径保存模式时,在步骤S24100中,位置内插器合成器1980输出译码的密钥数据和译码的密钥值数据。在已经以动画路径保存模式提取了断点的情况下,密钥数据对应于密钥值数据,因此不需要使用内插产生新的密钥值数据。但是,如果已经以动画密钥保存模式提取了断点,则意味着在所有密钥数据都已经被编码和译码的同时,只有与断点对应的密钥值数据被编码。因此,在这种情况下,密钥数据不对应于密钥值数据,由此需要内插密钥值数据,这将在下面的段落中描述。
当断点产生模式是动画密钥保存模式时,为了标记出是否存在与密钥数据对应的密钥值数据,在步骤S24200中设置一个用于指示密钥选择标记数组的下标的计数器,以便与密钥数据对应。
步骤S24300中,位置内插器合成器1980检查是否存在由计数器指示的、与密钥数据对应的密钥值数据。如果存在由计数器指示的、与密钥数据对应的密钥值数据,则位置内插器合成器1980进入到步骤S24500。
如果不存在由计数器指示的、与密钥数据对应的密钥值数据,则位置内插器合成器1980在步骤S24400中,通过使用与由两个连续断点指示的密钥数据对应的密钥值数据,线性内插当前的密钥值数据产生密钥值数据,所述两个连续断点包括在由计数器指示的密钥数据之前的一个断点和由计数器指示的密钥数据之后的一个断点。
此后,位置内插器合成器1980在步骤S24500中检查所有的密钥数据是否都具有它们的对应密钥值数据以及是否已经对不具有它们对应的密钥值数据的所有密钥数据执行了线性内插。如果仍然存在没有被检查的密钥数据,则位置内插器合成器1980在步骤S24600中更新计数器并再次执行步骤S24300到S24500。如果所有的密钥数据都已经被检查,位置内插器合成器1980输出密钥数据和合成的密钥值数据作为位置内插器。
下面结合图25A到27描述测量动画路径之间的误差的方法。
图25A和25B示出了测量动画路径之间的误差的方法,该方法是在本发明第一到第三最佳实施例中任何一个的分析器40中执行的。
使用在动画路径之间的面积计算在动画路径之间的误差,如图25A和25B所示。
在图25中,原始位置内插器的路径点和通过内插从分析器40的误差计算器154提取的路径点产生的位置内插器的路径点分别被称之为Pi,j和 。另外,在图25中,原始动画路径和使用内插的位置内插器产生的动画路径分别使用实线和虚线标记。这里,i和j表示位置内插器的密钥值数据的分量。
如图25A和25B所示,原始动画路径和使用内插的位置内插器产生的动画路径之间的误差可以由包括规则梯形和扭转的梯形的两个不同形状的梯形表示。分析器40的误差计算器154通过根据构成每个动画路径的密钥数据,将每个分量的两个动画路径分成预定数量的部分,计算每个部分中两个动画路径之间的误差,并将所有的误差相加,来产生两个动画路径之间的最后误差。
特别是,误差计算器154通过在时间轴上安排原始位置内插器和输入给它的内插的位置内插器产生两个动画路径。此后,误差计算器154将两个动画路径中的每一个分成预定数量的部分。
误差计算器154检查在每个部分中的两个动画路径之间的误差是形成梯形还是扭转的梯形。如果在一个部分中的两个动画路径之间的误差形成一个梯形,则误差计算器154使用等式(40)计算梯形的面积。如果在该部分中的两个动画路径之间的误差形成扭转的梯形,则误差计算器154使用等式(41)计算扭转的梯形的面积。ei,j=12(|P^i-1,j-Pi-1,j|+|P^i,j-Pi,j|)×(|ti,j-ti-1,j|)…(40)]]>ei,j=(P^i-1,j-Pi-1,j)2+(P^i,j-Pi,j)22(|P^i-1,j-Pi-1,j|+|P^i,j-Pi,j|)×(|ti,j-ti-1,j|)…(41)]]>利用下述等式(42)计算在一个分量的所有部分中的两个动画路径之间的误差和。ej=Σi=0n-1ei,j]]>(j=x,y,z)...(42)误差计算器154将从等式(42)获得的误差的和输出给确定单元156,确定单元156在将从误差计算器154输入的误差和与一个可允许的误差极限比较之后,确定断点。
另外,可以通过将与密钥值数据的x、y和z分量中每个分量相关的两个动画路径之间的误差相加并且根据空间对误差进行规范,计算在所有部分中的两个动画路径之间的误差,如等式(43)所示。Maxj=Maxi=0n-1(P-i,j)…(43)]]>Minj=Mini=0n-1(P-i,j)]]>Rangemax=Max(Maxx-Minx,Maxy-Miny,Maxz-Minz)ei,j=ex+ey+ez3×Rangemax]]>(i=0,...,n-1),j=x,y,z)根据本发明的用于测量两个动画路径之间的误差的方法,可以被用于计算在使用输入给用于编码位置内插器的一个装置的位置内插器产生的第一动画路径和使用译码的位置内插器产生的第二动画路径之间的误差。
图26A到26C示出了计算第一和第二动画路径之间的误差的处理,图27示出了计算第一和第二动画路径之间的误差的处理的流程图。
下面结合图26A到26C以及图27描述计算第一和第二动画路径之间的误差的方法。
由于译码的位置内插器的密钥数据和密钥值数据在编码处理过程中已经经过了加法、减法、内插和量化,所以,译码的位置内插器与原始位置内插器不同。具体地说,由于与在分析器40中执行的计算两个动画路径之间的误差的处理不同,密钥数据是变化的,所以,必须对所述密钥数据的位置进行补偿。
图26A示出了在第一和第二动画路径之间形成的规则梯形,图26B示出了在第一和第二动画路径之间形成的扭转的梯形。如上所述,必须使构成第一动画路径的密钥数据对应于构成第二动画路径的密钥数据,以便通过将第一和第二动画路径分成多个部分,测量在第一和第二动画路径之间的误差,如等式(40)到(42)所示。
参看图26C和27,在步骤S27000中,在第一动画路径上不存在但在第二动画路径上存在的、与密钥数据对应的路径点被插入到第一动画路径中,并且,在第二动画路径上不存在但在第一动画路径上存在的与密钥数据对应的路径点被插入到第二动画路径中。
然后,在步骤S27100中,根据存在的路径点和内插的路径点,将第一和第二动画路径分成多个部分。
首先验证在每个部分中的第一和第二动画路径之间的误差是形成梯形还是扭转的梯形,然后,在步骤S27200中使用等式(40)和(41)计算在第一和第二动画路径之间的误差。
此后,在步骤S27300中,通过相加以及在时间上和空间上对所有部分中的第一和第二动画路径之间的误差进行规范,来计算使用原始位置内插器产生的第一动画路径和使用译码的位置内插器产生的第二动画路径之间的误差。第一和第二动画路径之间误差的规范可以由下述等式规定。ei,j=ex+ey+ez2(tmax-tmin)Rangemax]]>(i=0,...,n-1,j=x,y,z)...(44)在等式(44)中,tMax和tMin分别表示动画路径的开始密钥数据和结束密钥数据,Rangemax是从等式(43)获得的值。
此后,图28A到28J示出了SDL程序代码的例子,利用该程序代码实现按照本发明的优选实施例的、用于译码位置内插器的装置。
图28A示出了一个类CompressedPositionInterpolator。CompressedPositionInterpolator是用于读出定向内插器的编码比特流的最高级。CompressedPositionInterpolator包括子类KeyHeader、PoslKeyValueHeader、KeySelectionFlag、Key和PoslKeyValue。KeyHeader和PoslKeyValueHeader包括用于译码Key和PoslKeyValue的标题信息。当与密钥数据对应的密钥值数据被包括在PoslKeyValue中时,KeySelectionFlag具有一系列用于指示每个密钥数据的标记。Key和PoslKeyValue是用于从一个比特流中分别读出密钥数据和密钥值数据的类。
图28B示出了用于译码密钥标题的类,密钥标题是译码处理所需的信息。
密钥标题类包括密钥数据、量化比特、内部密钥数据、DND标题的数量以及实际用于译码的比特数。nKeyQBit表示在逆量化中用于复原浮点数密钥值的量化比特。NNumberCodingBit表示代表密钥数据数量的nNumberOfKey的比特尺寸。NKeyDigit表示原始密钥数据最高有效位的数量并被用于完成译码值。
当与线性密钥子区域相关的信息被包括在密钥标题中时,标记blsLinearKeySubRegion被设置为1。在这种情况下,可以使用在标记blsLinearKeySubRegion后的译码标题信息计算包括在整个密钥区域内的特定线性密钥子区域中的密钥。BRangeFlag表示密钥数据的范围是否是从0到1。如果密钥数据的范围不是从0到1,则从类KeyMinMax中译码密钥数据范围内的最小和最大值。KeyMinMax复原进行逆量化所需的最小和最大值。前述值中的每一个都能够被分成其各自的尾数和指数。
nBitSize是nQIntraKey的比特尺寸,和nKeyShift是nKeyMax的初始比特尺寸。NQIntraKey表示第一量化内部数据的幅值并与表示nQIntraKey的正负的nQIntraKeySign相结合。nQIntraKey被用做复原其他量化密钥数据的基础。在内插器压缩中使用的所有正负号位中,值‘0’表示正号,值‘1’表示负号。NKDPCMOrder表示DPCM的阶数减1的值。DPCM的阶数可以是1、2或3。量化的内部数据的数量与DPCM的阶数相同。
nKeyShift与正负号位nKeyShiftSign一起是表示在密钥数据译码器中移位量的整数。如果bShiftFlag被设置为‘真’,则nKeyShift和nKeyShiftSign被译码。nDNDOrder是分频-和-分频(DND)操作的阶数。上面已经利用密钥数据译码器描述了DND操作。如果nDNDOrder的值是7,则bNoDND被译码。BNoDND表示是否将执行逆DND操作。nKeyMax是在逆DND操作的连续循环中使用的最大值或最小值。NkeyCodingBit表示用于编码密钥数据的比特。BSignedAACFlag表示在AAC译码中将被执行的译码处理。如果bSignedAACFlag被设置为0,则将执行一个没有正负号的AAC译码处理。反之,将执行有正负号的AAC译码处理。bKeyInvertDownFlag是一个用于表示是否将使用nKeyInvertDown的布尔值。nKeylnvertDown是一个用于把所有大于其本身的量化密钥数据转换成不大于-1的负值的整数。如果nKeyInvertDown被设置为-1,则将不执行下移位操作。
图28C示出了类LinearKey。在图28C中,nNumLinearKeyCodingBit是表示编码预定数量的线性可预测密钥所需的比特数的值。nNumberOfLinearKey是表示线性可预测密钥的数量的值。
图28D示出了类KeyMinMax。在图28D中,bMinKeyDigitSame是表示所有密钥的最高有效位的数量(nKeyDigit)和密钥中的最小值的最高有效位的数量是否相同的标记。nMinKeyDigit是表示密钥中的最小值的最高有效位的数量的值。nMinKeyMantissaSign是表示nMinKeyMantissaSign的正负号的值。
nMinKeyMantissa是表示在密钥中的最小值的尾数的值。nMinKeyExponentSign是表示nMinKeyExponent的正负号的值。
nMinKeyExponent是表示密钥中的最小值的指数的值。fKeyMin是表示密钥中的最小值的值。bMaxKeyDigitSame是表示所有密钥的最高有效位的数量nKeyDigit和密钥中的最大值的最高有效位的数量是否相同的标记。nMaxKeyDigit是表示密钥中的最大值的最高有效位的数量的值。nMaxKeyMantissaSign是表示nMaxKeyMantissa的正负号的值。nMaxKeyMantissa是表示密钥中的最大值的尾数的值。
bSameExponent是表示密钥中的最大值的指数是否与nMinKeyExponent相同的标记。nMaxKeyExponentSign是表示nMaxKeyExponent的正负号的值。nMaxKeyExponent是表示密钥中的最大值的指数的值。FkeyMax是表示密钥中的最大值的值。
图28E示出了类PoslKeyValueHeader。在图28E中,bPreserveKey表示当前的译码模式是否是动画密钥保存模式,nKVQBit表示密钥值数据的量化比特尺寸。
x_keyvalue_flag,y_keyvalue_flag和z_keyvalue_flag分别表示x、y和z分量,和nKVDigit表示密钥值数据中每一个的最高有效位的最大数量。NKVDPCMOrder_X,nKVDPCMOrder_Y和nKVDPCMOrder_Z分别对应于用于x、y和z分量中每个分量的密钥值数据的DPCM的阶数。如果已经执行DPCM,则标记被设置为0,如果已经执行预测DPCM,则该标记被设置为1。
blsUnaryAAC_X,blsUnaryAAC_Y和blsUnaryAAC_Z中的每一个都表示在熵编码期间已经使用了unary AAC函数。nKVCodingBit_X,nKVCodingBit_Y和nKVCodingBit_Z表示分别用于x、y和z分量的量化比特。nStartIndex_X,nStartIndex_Y和nStartIndex_Z表示每个分量轴的开始下标。firstKV_X,firstKV_Y和firstKV_Z分别表示已经被首先量化的x、y和z分量中每个分量的密钥值基准点。
图28F示出了类KeyValueMinMax。参看图28F,类KeyValueMin复原已经被用于规范密钥值数据的最大和最小值。bUse32float表示32位浮点数是否已经被用于存储最大和最小值。如果bUse32Float是0,则十进制的浮点数已经被用于存储所述最大和最小值。
nWhichAxis表示在x、y和z分量中具有最大数据范围的分量。在本实施例中,如果nWhichAxis是0,则X轴具有最大数据范围。如果nWhichAxis是1,则Y轴具有最大数据范围,和如果nWhichAxis是2,则Z轴具有最大数据范围。
BAllSameMantissaDigitFlag表示x、y和z分量中的每个分量的密钥值数据当中的最小值的尾数是否具有相同的数位,bSameKVDigitFlag表示最小值的尾数的数位与nKeyDigit相同。nMantissaDigit_X,nMantissaDigit_Y和nMantissaDigit_Z表示x、y和z分量中的每个分量的密钥值数据中的最小值的尾数的数位。
BMaxDigitFlag表示最大值的尾数是否与最小值的尾数具有相同的数位。如果最大值的尾数的数位不同于最小值的尾数的数位,则从比特流中读出最大值的尾数的数位。
nMantissaDigit_M表示最大值的尾数的数位,nExponentBits表示用于编码最大值的指数所需的比特数。BAllSameExponentSign表示x、y和z分量的正负号是否相同,nExponentSign表示当bAllSaneExponentSign是真时的指数的正负号。
fpnMin_X、fpnMin_Y、fpnMin_Z和fpnMax表示在十进制系统中被译码的浮点数。下面将利用FloatingPointNumber描述译码fpnMin_X,fpnMin_Y和fpnMin_Z和fpnMax的方法。fMin_X,fMin_Y和fMin_Z表示x、y和z分量中每个分量的密钥值当中的最小值,fMax表示具有最大范围的分量的密钥值数据当中的最大值。
图28G示出了类FloatingPointNumber。类FloatingPointNumber表示使用十进制系统的浮点数。nMantissa表示十进制系统中的浮点数的尾数,nExponent表示浮点数的指数。
nSign表示十进制系统中的浮点数的正负号,nExponentSign表示十进制系统中的浮点数的指数的正负号。
图28H示出了类KeySelectionFlag。在图28H中,KeyFlag表示第i个密钥数据的密钥值数据是否已经被编码,nNumOfKeyValue是表示将被译码的密钥值数据的数量的整数。
图28I示出了类Key。在图28I中,nQKey是来自比特流的、将被译码的量化密钥数据的数组。KeyContext是用于读出nQKey的幅值的上下文,KeySignContext是用于读出nQKey的正负号的上下文。
decodeUnsignedAAC是用于对自适应算术编码的数据执行无符号译码处理的函数,decodeSignedAAC是对自适应算术编码的数据执行有符号译码处理的函数。
图28J示出了类PoslKeyValue。参看图28J,在存储在PoslKeyValue中的变量中,KeyValue_X,KeyValue_Y和KeyValue_Z分别表示在位置内插器中x、y和z分量的每个分量的密钥值数据的数组。如果nStartIndex_X被设置为0,则使用算术译码器从比特流中译码KeyValue_X
。以相同的方式确定KeyValue_Y
和KeyValue_Z
。当从比特流中算术译码KeyValue_X
、KeyValue_Y
和KeyValue_Z
时,使用decodeUnaryAAC或decodeSQAAC函数。
上下文模型kVXSignContext、kVYSignContext和kVZSignContext被分别用于译码KeyValue_X、KeyValue_Y和KeyValue_Z的正负号。上下文模型kVXSignContext、kVYSignContext和kVZSignContext被传输给decodeUnaryAAC或decodeSQAAC函数。
MaxValueContext、FoundContext和NotFoundContext被用于熵译码密钥值的绝对值。例如,kVXMaxValueContext、kVXFoundContext和kVXNotFoundContext被用于译码KeyValue_X。MaxValueContext、FoundContext和NotFoundContext被传输给decodeUnaryAAC或decodeSQAAC函数。
上下文模型kVXUContext、kVYUContext和kVZUContext被用于译码KeyValue_X,KeyValue_Y和KeyValue_Z,并被传输给decodeUnaryAAC函数。
本发明可以利用写在计算机可读记录介质上的计算机可读代码实现。这里,计算机可读记录介质包括任何一种可以被计算机系统读出的记录介质。例如,计算机可读记录介质包括ROM、RAM、CD-ROM、磁带、软盘、光数据存储器和载波(经过互联网传输)。计算机可读记录介质可以被分散到经过互联网连接的计算机系统中,并且一台计算机可以以分散的方式阅读记录介质。
按照用于编码本发明的位置内插器的方法和装置,可以在保持高质量动画的同时高效率地编码和译码密钥数据和密钥值数据。另外,通过使用测量在动画路径之间的误差的方法可以保持高质量的动画数据。此外,通过使用本发明的重取样方法和断点提取方法可以明显减少将被编码的密钥数据和密钥值数据的数量。
尽管本发明是参照其优选实施例来具体描述的,但是本领域的技术人员应该理解,在不脱离由所附权利要求限定的本发明的精神和范围的情况下,可以对其进行形式和细节的各种修改。
权利要求
1.一种用于对位置内插器进行编码的装置,所述位置内插器包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标位置的密钥值数据,该装置包括一个断点提取器,用于从由输入给它的位置内插器构成的第一动画路径中提取最小数量的断点,这些断点能够在第一动画路径和由所提取的断点生成的第二动画路径之间引起不大于预定的可允许误差极限的误差;一个密钥数据编码器,用于对从所述断点提取器输入的密钥数据进行编码;以及一个密钥值数据编码器,用于对从所述断点提取器输入的密钥值数据进行编码。
2.如权利要求1所述的装置,其中,所述断点提取器包括一个线性内插器,用于提取输入动画路径的开始路径点和结束路径点,在所述开始和结束路径点之间选择路径点,并用所选择的路径点和所提取的路径点对还未被选择的其他路径点进行内插;一个误差计算器,用于计算在输入动画路径和由所述线性内插器利用内插生成的内插动画路径之间的误差;以及一个确定单元,用于提取断点,利用这些断点可以使输入动画路径和内插动画路径之间的误差最小,并且如果对应的误差不大于预定的可允许误差极限,则输出所提取的断点。
3.如权利要求2所述的装置,其中,如果与所提取的断点对应的误差大于预定的可允许误差极限,则所述确定单元向所述线性内插器输出所提取的断点,然后,所述线性内插器通过选择除从所述确定单元输入的被提取的断点以外的路径点执行内插。
4.如权利要求2所述的装置,其中,所述误差计算器根据由两个动画路径的路径点构成的一个参考分量,将输入动画路径和内插动画路径分成预定数量的部分,并通过测量每个部分中的输入动画路径和内插动画路径之间的面积,计算在每个部分中的输入动画路径和内插动画路径之间的误差。
5.如权利要求2所述的装置,其中,所述误差计算器根据由多个路径点表示的密钥数据之间的距离和分别与密钥数据对应的密钥值数据之间的距离,测量输入动画路径和内插动画路径之间的误差。
6.如权利要求1所述的装置,还包括一个重取样器,用于将所述第一动画路径取样为预定数量的具有预定时间间隔的多个部分,并输出包括重取样的密钥数据和重取样的密钥值数据的位置内插器;以及一个选择器,用于依据外部输入信号,将输入给它的位置内插器输出给重取样器或断点提取器。
7.如权利要求6所述的装置,其中,所述断点提取器包括一个线性内插器,用于提取输入动画路径的开始路径点和结束路径点,在所述开始和结束路径点之间选择路径点,并利用所选择的路径点和所提取的路径点对还未被选择的其他路径点进行内插;一个误差计算器,用于计算输入动画路径和由线性内插器利用内插产生的内插动画路径之间的误差;以及一个确定单元,用于提取断点,利用这些断点可以使输入动画路径和内插动画路径之间的误差最小,如果对应的误差不大于预定可允许误差极限,则输出所提取的断点。
8.如权利要求6所述的装置,其中,所述重取样器将由位置内插器的密钥数据和密钥值数据构成的动画路径分成预定数量的具有预定时间间隔的部分,将每个部分的结束点作为将被编码的密钥数据输出,并将存在于每个部分中的动画路径上的密钥值数据作为将被编码的密钥值数据输出。
9.如权利要求1所述的装置,还包括一个重取样器,用于将所述第一动画路径取样为预定数量的具有预定时间间隔的部分,并输出包括重取样的密钥数据和重取样的密钥值数据的位置内插器,其中,所述断点提取器从由从所述重取样器输入的位置内插器构成的动画路径中提取断点。
10.如权利要求9所述的装置,其中,所述断点提取器包括一个线性内插器,用于提取输入动画路径的开始路径点和结束路径点,在所述开始和结束路径点之间选择路径点,并用所选择的路径点和所提取的路径点对还未被选择的其他路径点进行内插;一个误差计算器,用于计算在输入动画路径和由所述线性内插器利用内插生成的内插动画路径之间的误差;以及一个确定单元,用于提取断点,利用这些断点可以使输入动画路径和内插动画路径之间的误差最小,并且如果对应的误差不大于预定可允许误差极限,则输出所提取的断点。
11.如权利要求9所述的装置,其中,所述重取样器将由位置内插器的密钥数据和密钥值数据构成的动画路径分成预定数量的具有预定时间间隔的部分,将每个部分的结束点作为将被编码的密钥数据输出,并将存在于每个部分中的动画路径上的密钥值数据作为将被编码的密钥值数据输出。
12.如权利要求1所述的装置,还包括一个重取样器,用于将由从所述断点提取器提取的位置内插器构成的动画路径取样为预定数量的具有预定时间间隔的部分,并将包括重取样的密钥数据和重取样的密钥值数据的位置内插器输出给所述密钥数据编码器和密钥值数据编码器。
13.如权利要求12所述的装置,其中,所述断点提取器包括一个线性内插器,用于提取输入动画路径的开始路径点和结束路径点,在所述开始和结束路径点之间选择路径点,并利用所选择的路径点和所提取的路径点对还未被选择的其他路径点进行内插;一个误差计算器,用于计算输入动画路径和由线性内插器利用内插产生的内插动画路径之间的误差;和一个确定单元,用于提取断点,利用这些断点可以使输入动画路径和内插动画路径之间的误差最小,检查对应的误差是否不大于预定的可允许误差极限,并且输出所提取的断点。
14.如权利要求13所述的装置,其中,所述重取样器将由位置内插器的密钥数据和密钥值数据构成的动画路径分成预定数量的具有预定时间间隔的部分,将每个部分的结束点作为将被编码的密钥数据输出,并将存在于每个部分中动画路径上的密钥值数据作为将被编码的密钥值数据输出。
15.如权利要求1所述的装置。其中,所述密钥数据编码器包括一个量化器,用于利用多个量化比特量化输入的差分数据;一个DPCM处理器,用于产生量化密钥数据的差分数据;一个移位器,用于获得差分数据中具有最高频率的差分基准点(模式),并从每个差分数据中减去该模式;一个折叠处理器,用于将差分数据转换为正数区域或负数区域;一个DND处理器,用于根据转换后的差分数据与它们当中的最大和最小值的关系,对转换后的差分数据执行DND操作,以减少它们的范围,在从所述移位器输入的差分数据、从所述折叠处理器输入的差分数据和已经被执行了DND操作的差分数据中选择一个差分数据,并且输出所选择的差分数据;以及一个熵编码器,用于对从所述DND处理器输入的差分数据进行熵编码。
16.如权利要求1所述的装置,其中,所述密钥值数据编码器包括一个量化器,用于利用预定的量化比特对输入给它的数据进行量化;一个DPCM处理器,用于获得量化数据的差分数据和预测差分数据,并且对差分数据执行循环量化操作,以便输出减少了尺寸的差分数据;以及一个熵编码器,用于对从所述DPCM处理器输入的差分数据进行熵编码。
17.一种用于对位置内插器进行编码的装置,所述位置内插器包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标位置的密钥值数据,该装置包括一个重取样器,用于将由密钥数据和密钥值数据构成的动画路径取样为预定数量的具有预定时间间隔的部分,并且输出包括重取样的密钥数据和重取样的密钥值数据的位置内插器;一个密钥数据编码器,用于对从所述重取样器输入的密钥数据进行编码;以及一个密钥值数据编码器,用于对从所述重取样器输入的密钥值数据进行编码,其中,所述密钥值编码器包括一个量化器,用于利用预定的量化比特对输入给它的数据进行量化;一个DPCM处理器,用于获得量化数据的差分数据和预测差分数据,并且对差分数据执行循环量化操作,以便输出减少了尺寸的差分数据;以及一个熵编码器,用于对从所述DPCM处理器输入的差分数据进行熵编码。
18.如权利要求17所述的装置,其中,所述重取样器将由位置内插器的密钥数据和密钥值数据构成的动画路径分成预定数量的具有预定时间间隔的部分,将每个部分的结束点作为将被编码的密钥数据输出,并将存在于每个部分中的动画路径上的密钥值数据作为将被编码的密钥值数据输出。
19.一种用于对比特流进行译码的装置,在所述比特流中,包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标位置的密钥值数据的位置内插器被编码,所述装置包括一个密钥数据译码器,用于对来自输入比特流的密钥数据进行译码;一个密钥值数据译码器,用于对来自输入比特流的密钥值数据进行译码;以及一个位置内插器合成器,用于通过合成译码的密钥值数据和被用译码的密钥值数据线性内插的密钥值数据,生成位置内插器。
20.如权利要求19所述的装置,其中,如果不存在与当前正在被执行位置内插器合成的密钥数据对应的译码的密钥值数据,则所述位置内插器合成器使用与在前合成的密钥数据对应的译码的密钥值数据和与下一个将被合成的密钥数据对应的译码的密钥值数据,对与当前正在被执行位置内插器合成的密钥数据对应的密钥值数据进行内插。
21.如权利要求19所述的装置,其中,所述密钥数据译码器包括一个熵译码器,用于通过对输入比特流进行熵译码产生差分数据;一个逆DPCM处理器,用于通过对差分数据执行预定的逆DPCM操作,产生量化的密钥数据;以及一个逆量化器,用于通过对量化的密钥数据进行逆量化,产生复原的密钥数据。
22.如权利要求19所述的装置,其中,所述密钥值数据译码器包括一个熵译码器,用于通过对输入比特流进行熵译码产生差分数据;一个逆DPCM处理器,用于通过对差分数据执行预定的逆DPCM操作,产生量化的密钥值数据;以及一个逆量化器,用于通过对量化的密钥值数据进行逆量化,产生复原的密钥值数据。
23.一种用于对位置内插器进行编码的方法,所述位置内插器包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标位置的密钥值数据,所述方法包括如下步骤(b)通过从由所述位置内插器构成的第一动画路径中提取最小数量的断点产生将被编码的密钥数据和密钥值数据,这些断点会在所述第一动画路径和将通过所提取的断点产生的第二动画路径之间引起一个不大于预定的可允许误差极限的误差;(d)对在步骤(b)中产生的密钥数据进行编码;以及(e)对在步骤(b)中产生的密钥值数据进行编码。
24.如权利要求23所述的方法,其中,步骤(b)包括如下步骤(b1)提取第一动画路径的开始路径点和结束路径点;(b2)选择在开始和结束路径点之间的路径点,并且用所选择的路径点和所提取的路径点对还未被提取的其他路径点进行内插;(b3)计算在第一动画路径和通过在步骤(b2)中的内插产生的第二动画路径之间的误差;以及(b4)提取多个断点,利用这些断点可以使第一动画路径与第二动画路径之间的误差最小,如果对应的误差不大于预定的可允许误差极限,则确定将被编码的密钥数据和密钥值数据。
25.如权利要求24所述的方法,其中,在步骤(b3)中,根据由第一和第二动画路径的路径点构成的一个参考分量,将第一动画路径和第二动画路径中的每一个都分成预定数量的部分,并通过测量每个部分中第一动画路径和第二动画路径之间的面积,计算每个部分中第一动画路径和第二动画路径之间的误差。
26.如权利要求25所述的方法,其中,在步骤(b3)中,根据在由路径点指示的密钥数据之间的距离和在分别与密钥数据对应的密钥值数据之间的距离,测量在第一动画路径和第二动画路径之间的面积。
27.如权利要求25所述的方法,其中,在步骤(b4)中,如果与所提取的断点对应的误差大于预定的可允许误差极限,则再次执行步骤(b2)到(b4)。
28.如权利要求23所述的方法,还包括(a)在步骤(b)之前,通过将第一动画路径取样为预定数量的具有预定时间间隔的部分,生成包括重取样的密钥数据和重取样的密钥值数据的位置内插器,其中,在步骤(b)中,从由在步骤(a)中生成的位置内插器构成的动画路径中提取断点。
29.如权利要求28所述的方法,其中,在步骤(a)中,将第一动画路径分成预定数量的具有预定时间间隔的多个部分,将每个部分的结束点设置为取样的密钥数据,并且将在每个部分中第一动画路径上的密钥值数据设置为取样的密钥值数据。
30.如权利要求23所述的方法,还包括(c)通过在步骤(b)之后将用所提取的断点构成的第二动画路径取样为预定数量的具有预定时间间隔的多个部分,生成将被编码的密钥数据和密钥值数据。
31.如权利要求30所述的方法,其中,在步骤(c)中,将第二动画路径分成预定数量的具有预定时间间隔的多个部分,将每个部分的结束点设置为将被编码的密钥数据,并且将在每个部分中的第一动画路径上的密钥值数据设置为将被编码的密钥值数据。
32.如权利要求23所述的方法,其中,步骤(d)包括如下步骤利用预定数量的量化比特,对密钥数据进行量化;通过对量化的数据执行预定的DPCM操作产生差分数据;以及对该差分数据进行熵编码。
33.如权利要求23所述的方法,其中,步骤(e)包括如下步骤利用预定数量的量化比特,对密钥值数据进行量化;通过对量化的密钥值数据执行预定的DPCM操作产生差分数据;以及对该差分数据进行熵编码。
34.一种用于对位置内插器进行编码的方法,所述位置内插器包括用于指示关键帧在时间轴上的位置的密钥数据和用于指示目标位置的密钥值数据,所述方法包括如下步骤(b)将由所述位置内插器构成的动画路径取样为预定数量的具有预定时间间隔的部分,并生成包括重取样的密钥数据和重取样的密钥值数据的位置内插器;(d)对在步骤(b)中生成的密钥数据进行编码;以及(e)对在步骤(b)中生成的密钥值数据进行编码,其中,步骤(e)包括如下步骤用预定的量化比特,对在步骤(b)中生成的密钥数据进行量化;获得差分数据和预测差分数据,并通过对插分数据执行循环量化操作,生成减少了尺寸的差分数据;以及对减少了尺寸的差分数据进行熵编码。
35.如权利要求34所述的方法,其中,在步骤(b)中,将动画路径分成预定数量的具有预定时间间隔的部分,将每个部分的结束点设置为取样的密钥数据,并且将在每个部分中的第一动画路径上的密钥值数据设置为取样的密钥值数据。
36.一种计算机可读记录介质,其中记录有实现权利要求23所述方法的计算机可读程序代码。
37.一种计算机可读记录介质,其中记录有实现权利要求24所述方法的计算机可读程序代码。
38.一种计算机可读记录介质,其中记录有实现权利要求28所述方法的计算机可读程序代码。
39.一种计算机可读记录介质,其中记录有实现权利要求30所述方法的计算机可读程序代码。
40.一种计算机可读记录介质,其中记录有实现权利要求34所述方法的计算机可读程序代码。
41.一种用于对比特流进行译码的方法,在所述比特流中,包括指示关键帧在时间轴上的位置的密钥数据和指示目标位置的密钥值数据的位置内插器已经被编码,所述方法包括如下步骤(a)对来自输入比特流的密钥数据进行译码;(b)对来自输入比特流的密钥值数据进行译码;(c)通过合成译码的密钥值数据和被用具有译码的密钥数据的译码的密钥值数据线性内插的密钥值数据,生成位置内插器。
42.如权利要求41所述的方法,其中,在步骤(c)中,如果不存在与当前正在被执行位置内插器合成的密钥数据对应的译码的密钥值数据,用与在前合成的密钥数据对应的译码的密钥值数据和与下一个将被合成的密钥数据对应的译码的密钥值数据,对与当前正在被执行位置内插器合成的密钥数据对应的密钥值数据进行内插。
43.如权利要求41所述的方法,其中步骤(a)包括通过对输入比特流进行熵译码,生成差分数据;通过对差分数据执行预定的DPCM操作和逆DND操作,生成量化的密钥数据;以及通过对量化的密钥数据进行逆量化,生成复原的密钥数据。
44.如权利要求41所述的方法,其中步骤(b)包括通过对输入比特流进行熵译码,生成差分数据;通过对差分数据执行预定的逆DPCM操作,生成量化的密钥值数据;以及通过对量化的密钥值数据进行逆量化,生成复原的密钥值数据。
45.一种计算机可读记录介质,其中记录有实现权利要求41所述方法的计算机可读程序代码。
46.一种计算机可读记录介质,其中记录有实现权利要求42所述方法的计算机可读程序代码。
47.一种计算机可读记录介质,其中记录有实现权利要求43所述方法的计算机可读程序代码。
48.一种计算机可读记录介质,其中记录有实现权利要求44所述方法的计算机可读程序代码。
49.一种方法,用于计算第一路径和第二路径之间的误差,其中,由其中的每一个都包括多个数据分量的多个第一路径点构成的第一路径,由其中的每一个都包括多个数据分量的多个第二路径点构成的第二路径,该方法包括如下步骤(a)将多个路径点插入到第一和第二动画路径中,从而使第一和第二动画路径就包括在每个路径点中的参考数据分量而言具有相同路径点;(b)根据参考数据分量,将第一和第二路径中的每一个分成预定数量的部分,从而使预定数量的部分分别对应于路径点;(c)计算在每个部分中的第一和第二动画路径之间的误差;以及(d)检查是否已经对所有预定数量的部分执行了步骤(c),并对在步骤(c)中得到的误差进行规范。
50.如权利要求49所述的方法,其中,在步骤(c)中,利用参考数据之间的距离和除参考分量数据以外的分量数据之间的距离,计算在每个部分中的第一和第二路径之间的误差。
51.如权利要求50所述的方法,其中,参考分量数据是包括在位置内插器节点中的密钥数据,并且在步骤(c)中,通过将密钥数据之间的距离设置为梯形的高度并且将其他分量数据之间的距离设置为梯形的上边和下边来计算在每个部分中第一和第二动画路径之间的误差。
52.如权利要求49所述的方法,其中,在步骤(d)中,获得路径点的参考分量数据的极值,然后,利用该极值对在步骤(c)中获得的误差进行规范。
53.一种计算机可读记录介质,其中记录有实现权利要求49所述方法的计算机可读程序代码。
54.一种方法,用于利用线性逼近从由包括多个分量数据的路径点组成的数据中提取断点,该方法包括如下步骤(a)提取原始路径的开始点和结束点;(b)选择一个未被提取的路径点,并且利用所选择的路径点和所提取的路径点对其他未被选择的路径点进行线性内插;(c)计算原始路径和利用内插的路径点生成的内插动画路径之间的误差;(d)对所有未被选择的路径点执行步骤(b)和(c),并提取导致原始动画路径和内插路径之间最小误差的路径点;以及(e)将原始路径和利用包括在步骤(d)中提取的路径点在内的所提取的路径点生成的路径之间的误差与预定的可允许误差极限进行比较,然后重复执行步骤(b)到(d)。
55.如权利要求54所述的方法,其中,步骤(c)包括如下步骤(c1)将原始路径和内插路径分成预定数量的部分,从而使预定数量的部分分别与路径点对应;以及(c2)利用每个路径点的参考分量数据之间的距离和在每个路径点的其他分量数据之间的距离,计算原始路径和内插路径之间的误差。
56.如权利要求55所述的方法,其中,路径点对应于表示三维动画的位置内插器,参考分量数据对应于包括在位置内插器节点中的密钥数据,并且在步骤(c2)中,通过将密钥数据之间的距离设置为梯形的高并且将其他分量数据之间的距离设置为该梯形的上边和下边,计算在每个部分中的原始动画路径和内插动画路径之间的误差。
57.如权利要求55所述的方法,其中,路径点对应于表示三维动画的位置内插器,参考分量数据对应于指示关键帧在时间轴上的位置的密钥数据,而其他分量数据对应于指示目标在动画中的位置的密钥值数据。
58.一种计算机可读记录介质,其中记录有实现权利要求54所述方法的计算机可读程序代码。
59.一种计算机可读记录介质,其中记录有实现权利要求55所述方法的计算机可读程序代码。
60.一种方法,用于利用线性逼近从由路径点构成的动画路径中提取断点,其中,路径点包括多个关键帧在时间轴上的位置和目标在每个关键帧中的位置,该方法包括如下步骤(a)提取与原始动画路径的开始点和结束点对应的关键帧;(b)选择未被提取的关键帧,并且利用所选择的关键帧和所提取的关键帧对其他关键帧进行线性内插;(c)计算原始动画路径和利用内插的关键帧生成的内插动画路径之间的误差;(d)对所有未被选择的关键帧执行步骤(b)和(c),并提取导致原始动画路径和内插动画路径之间最小误差的关键帧;以及(e)将原始动画路径和利用与在步骤(d)中选择的关键帧对应的路径点生成的动画路径之间的误差与预定的可允许误差极限进行比较,然后重复执行步骤(b)到(d)。
61.如权利要求60所述的方法,其中,步骤(c)包括如下步骤(c1)将原始动画路径和内插动画路径分成预定数量的部分,从而使预定数量的部分分别与关键帧对应;以及(c2)利用用于分割每个动画路径的关键帧之间的间隔和关于目标在关键帧中的位置的信息段之间的差,计算在原始动画路径和内插动画路径之间的误差。
62.如权利要求61所述的方法,其中,在步骤(c2)中,通过将在关键帧之间用于分割每个动画路径的间隔设置为梯形的高并且将关于目标在关键帧中的位置的信息段之间的差分别设置为梯形的上边和下边,计算每个部分中原始动画路径和内插动画路径之间的误差。
63.一种比特流,在所述比特流中,对包括指示关键帧在时间轴上的位置的密钥数据和指示目标位置的密钥值数据的位置内插器进行编码,所述比特流包括对密钥数据进行编码/译码所需的密钥数据编码/译码信息;以及对密钥值数据进行编码/译码所需的密钥值数据编码/译码信息,其中,密钥数据编码/译码信息包括逆DND操作信息,包括说明将要对差分数据执行预定数量的逆DND循环的逆DND的阶数和在逆DND操作的每个循环中使用的差分数据当中的最大和最小值,其中,差分数据是通过对该比特流进行熵译码生成的,以便扩展差分数据的范围;第一逆DPCM操作信息,包括将要对经过逆DND的差分数据执行的逆DPCM操作的阶数,对经过逆DND的差分数据执行的逆DPCM操作,从而将经过逆DND的差分数据转换为量化密钥数据和用于逆DPCM操作的每个循环的内部密钥数据;以及第一逆量化信息,用于在逆量化中通过对量化密钥数据执行逆量化,生成复原的密钥数据,并且密钥值数据编码/译码信息包括熵译码信息,包括一个标记,用于指示将被执行的熵译码操作,通过对来自比特流的密钥值数据执行熵译码操作,生成第二插分数据;第二逆DPCM操作信息,包括关于对差分数据执行逆DPCM操作以便在逆DPCM操作的每个循环中将第二差分数据转换为量化的密钥值数据和内部密钥值数据的信息;第二逆量化信息,包括用于通过对量化的密钥值数据进行逆量化,复原原始密钥值数据的预定数量的逆量化比特;和逆规范信息,用于对通过利用逆量化比特进行逆量化而被复原的复原密钥值数据进行逆规范,逆规范信息包括说明具有最大密钥值数据范围的分量的标记、在最大密钥值数据范围中的最大值和在每个分量的密钥值数据当中的最小值。
64.如权利要求63所述的比特流,其中,逆DND操作信息还包括一个标记,用于说明是否对将被执行逆DND操作的差分数据执行下移位操作。
65.如权利要求63所述的比特流,其中,第一量化信息包括用于对量化密钥数据和量化密钥数据当中的最大和最小值进行逆量化的逆量化比特尺寸。
66.如权利要求65所述的比特流,其中,量化密钥数据当中的最大和最小值被用于使量化的密钥数据的量化误差最小。
67.如权利要求63所述的比特流,其中,密钥数据编码/译码信息还包括用于对在比特流中的、密钥数据线性增加的线性密钥区域进行译码的线性密钥译码信息,该线性密钥译码信息包括用于说明在整个密钥数据范围中是否存在线性密钥区域的标记、包括在线性密钥区域中的密钥数据的数量以及线性密钥区域的开始和结束密钥数据。
68.如权利要求63所述的比特流,其中,密钥值数据编码/译码信息还包括被包括在比特流中的、经过编码的密钥值数据的数量和密钥值数据的最大数位。
69.如权利要求63所述的比特流,其中,第二逆量化信息包括在每个分量的密钥值数据当中的、用于使量化的密钥值数据的量化误差最小的最小值。
全文摘要
提供了一种用于对包括密钥数据和密钥值数据的位置内插器进行编码和译码的方法和装置。用于对位置内插器进行编码的方法包括(b)通过从由位置内插器构成的第一动画路径中提取最小数量的断点,生成将被编码的密钥数据和密钥值数据,这些断点可以在第一动画路径和将由所提取的断点生成的第二动画路径之间引起不大于预定的可允许误差极限的误差;(d)对在步骤(b)中生成的密钥数据进行编码;以及(e)对在步骤(b)中生成的密钥值数据进行编码。
文档编号H04N7/32GK1432971SQ0215429
公开日2003年7月30日 申请日期2002年11月27日 优先权日2001年11月27日
发明者金道均, 郑锡润, 张义善, 禹相玉, 李信俊, 韩万镇, 张敬子 申请人:三星电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1