背景技术
近年来,由于在建立图像编码方案的国际标准上的努力,将用于静止图像的JPEG之类的以及用于运动图像的MPEG格式标准化为压缩和解压缩图像的技术。
MPEG(运动图像专家组)编码方案主要是由一个运动补偿帧间预测单元,一个DCT(离散余弦变换)单元,和一个可变长度编码单元构成的。运动补偿帧间预测单元检测来自输入图像数据和早先图像数据的运动向量,和从运动向量和早先图像数据建立残留误差数据。DCT单元对残留误差数据执行的DCT变换。一个量化单元量化DCT系数,和可变长度编码单元将码字赋予量化的DCT系数和运动向量。
MPEG编码方案中的编码图像数据具有一种六层的分层结构:序列(sequence),GOP(画面组(Group OfPicture),画面(picture),片段(slice),宏数据块(macroblock),和数据块(block)。画面是对应于一个单一画面的基本编码单元,并且是由多个片段构成的。一个片段是一个同步恢复单元,一个由一个或多个宏数据块构成的带形区。
可变长度编码是指一种熵编码。因为象后DCT变换系数(DCT系数)和运动向量值之类的值的概率中存在着变化,可变长度编码通过把短码字赋予那些具有高概率的值,和把长码字赋予具有低概率的那些值,减少了平均数据量。
主要的可变长度编码类型包括Huffman编码和算术编码。
Huffman编码是一种通过一个其中每个符号是一个树叶的Huffman代码树确定码字的方法。它使用一个包括每个代码的码字(位串)的对应表(代码表)。
为了提高压缩率,Huffman编码使用了诸如一种其中建立对应于变化中的运动图像的统计特性的代码表之类的方法,和一种其中准备了多个代码表并且响应画面的统计特性切换代码表的方法。信息理论指出,将log2(1/p)位赋予概率p的代码的代码表具有最小平均数据量。这就是为什么,在切换多个代码表的方法中,要从编码数据计算概率,并且要选择代码表,使得能够把接近log2(1/p)位的位数赋予概率p的代码的原因。
算术编码是一种响应概率把符号序列映射到间隔[0,1)的编码技术,并且在该间隔内用带有适当数字的二进制表达一个编号行上的概率空间。在算术编码中,执行编码同时恒定地监视统计特性。具体地讲,响应画面的内容重写概率表,并且在参考概率表的同时确定码字。更具体地讲,在算术编码中,用编码数据连续地更新算术运算中使用的概率,以便能够把log2(1/p)位赋予概率p的代码。
与Huffman编码不同,在算术编码中,可以仅通过算术运算(加、减、乘、和除)获得对应于码字的位串,因此,与Huffman编码相比,可以减少存储代码表所需的存储器的量。此外,在编码过程中可以通过重写概率表响应统计特性中的变化。但是,算术运算,特别是乘法和除法运算,需要大的算术能力,因此,算术编码的一个缺陷是难于在低算术能力的设备中实行算术运算。
在上述自适应编码方法中,由于编码方法连续地通过编码数据动态地优化,所以,与固定编码方法相比,可以提高压缩效率。
但是,当利用编码数据动态地优化编码方法时,会产生以下问题。
例如,基于学习的动态编码方法是对首部后面的画面数据,即,对每个片段、宏数据块、或数据块执行的。在这种情况下,算术编码使用每个子单元的初始值的固定概率表在每个画面中编码,Huffman编码在每个画面中使用一个固定可变长度代码表作为初始代码表。因为用这种方式使用固定初始值,所以,在初始化之后通过学习获得最佳概率表和代码表之前,不能认为编码压缩效率是有利的。特别是,当总数据量小时,学习所需数据比例增加,并且压缩率并不高。
另一方面,当在传输线路中丢失了一部分学习中使用的编码数据时,在译码设备中不能执行适当的学习,并且译码成为不可能。此外,在图像数据的情况下,由于传输误差,造成画面质量下降。尽管定时复位学习的结果,可以防止传输误差,但是当复位间隔长时,这种防护易于发生错误,因此,不可避免地要将复位间隔缩短到一定程度。
除非解决上述传输误差的问题,否则不可能有效地提高当前自适应编码方法的压缩效率。
发明内容
本发明的一个目的是要提高在图像压缩之类的领域中使用的可变长度编码方法的压缩效率。
本发明的另一个目的是要正确地译码由具有提高了压缩效率的可变长度编码方法编码的数据。
根据本发明的一个方面,一种可变长度编码方法,在参考参数表的同时对由多个子数据构成的单元数据进行编码,所述方法包括步骤:把参数表设置到初始值;对与被设置的参数表有关的信息进行编码;从所述参数表获得要在对子数据编码的过程中使用的编码参数;参考所获得的编码参数对子数据进行可变长度编码;和把与所述参数表有关的编码信息放置到能够在编码的单元数据之前获得所述信息的位置。
应当注意,编码参数是指,指示数据的发生频率的,和从参数表得到的,并且在子数据的编码过程中参考的信息。在算术编码的情况下,尽管参数表对应于一个概率表,并且在这里编码参数对应于概率,但是,本发明不限于此。
通过这种编码方法,由于在子数据的编码中使用了从参数表获得的编码参数,所以当编码单元数据时提高了压缩效率。此外,由于将有关初始化的参数表的信息编码并放置在一个可以在编码单元数据之前获得信息的位置上,所以,可以利用参数表作为初始值,在译码过程中正确地对编码单元数据译码。
根据本发明的另一方面,可变长度编码方法根据编码子数据值更新参数表,并且从更新的参数表获得编码参数。
通过这种编码方法,由于根据编码子数据值更新了参数表,所以在编码单元数据时提高了压缩效率。
根据本发明的又一个方面,可变长度编码方法根据紧接着编码子数据之前的值,从参数表获得要在子数据编码步骤中使用的编码参数的初始值。
通过这种编码方法,由于根据紧接着编码子数据之前的值从参数表获得编码参数的初始值,所以可以实时得到编码参数并且提高了编码速度。
根据本发明的再一个方面,可变长度编码方法根据要编码的编码子数据的值,从参数表获得子数据编码步骤中的编码参数的初始值。
通过这种编码方法,根据要编码的编码子数据的值,从参数表获得子数据编码步骤中的编码参数的初始值,并且即使在子数据与紧接着子数据之前的内容大大不同的情况下,也能有高的压缩效率。
根据本发明的再一个方面,可变长度编码方法在子数据编码步骤中,参考编码参数执行子数据的算术编码。
由于把算术编码用作编码子数据的方法,所以通过这种编码方法可以获得良好压缩效率。应当注意,参数表对应于一个概率表,并且编码参数对应于概率。
根据本发明的再一个方面,可变长度编码方法中的有关参数表的信息是参数本身。
根据本发明的再一个方面,在可变长度编码方法的信息编码步骤中,仅对参数表的一部分执行编码。
通过这种编码方法,仅对初始化的参数表的一部分,而不是整个初始化参数表执行编码,因此,可以减小编码量。
根据本发明的再一个方面,可变长度编码方法中的参数表的一部分是对应于具有高概率的编码数据的参数部分。
通过这种编码方法,由于仅对对应于具有高概率的编码数据的初始化参数表的一部分执行编码,从而能够在保证译码过程中满意的正确译码的同时,减小编码量。
根据本发明的再一个方面,可变长度编码方法中的有关参数表的编码信息是指示参数表的信息。
通过这种编码方法,由于仅对指示参数表的编码信息,而不是参数表本身执行编码,因此能够减小编码量。
根据本发明的再一个方面,在可变长度编码方法的编码信息放置步骤中,把指示编码参数表的编码信息作为单元数据的公用数据部分放置。
通过这种编码方法,把指示参数表的信息作为单元数据中的一个公用部分放置,并且在其中发挥一个部分的功能,因此,可以减少编码量。
根据本发明的再一个方面,在可变长度编码方法的信息编码步骤中,用一种固定编码方法编码有关参数表的信息。
通过这种编码方法,由于使用了一种固定编码方法,因此静态地编码有关初始化参数表的信息,并且因此可以可靠地译码有关初始化参数表的信息。
根据本发明的再一个方面,可变长度编码方法进一步包括确定是否编码了有关初始化参数表的信息的编码确定步骤,和将标识该确定的结果的标志放置到一个可以在编码单元数据之前获得标志的位置的标志放置步骤。
通过这种编码方法,利用放置在一个可以在编码单元数据之前获得标志的位置的标志,可以确定是否编码了有关编码参数表的信息。应当注意,当,例如,直到初始化下一个概率表之前的数据量足够大时(也就是说,学习所需的数据量与总数据量的比例足够小,并且因此学习效率好时),或是当用作初始值的参数表实际上与通过学习得到的最佳参数表一致时,不对有关用作初始值的参数表的信息执行编码。
根据本发明的再一个方面,可变长度编码方法中的数据的单元是图像数据中的一个画面。
通过这种编码方法,使所有图像数据的编码参数表的频率最佳化,因此,由于用高的频率给编码概率表译码,所以即使在传输错误中丢失了应当在学习中使用的编码数据部分,并且在译码时不能重放与编码时相同的概率表,也不会出现图像不能播放超过数秒钟的情况。此外,不会出现大量的冗余参数表数据。
根据本发明的再一个方面,可变长度编码方法中的数据单元是图像数据中的一个片段。
通过这种编码方法,使编码参数表的频率对所有图像数据最佳,因此,由于用高的频率给编码概率表译码,所以即使在传输错误中丢失了应当在学习中使用的编码数据部分,并且在译码时不能重放与编码时相同的概率表,也不会出现图像不能播放超过数秒钟的情况。此外,不会出现大量的冗余参数表数据。
根据本发明的再一个方面,可变长度编码译码方法参考参数表对单元数据流译码,单元数据是由多个子数据构成的,该方法包括步骤:对与流的参数表有关的编码信息译码;根据有关参数表的译码信息设置参数表的初始值;从参数表获得要在译码子数据中使用的编码参数;和参考得到的编码参数执行流的子数据的可变长度译码。
通过这种译码方法,由于对有关参数表的信息译码,和,根据译码信息,将得到的参数表设置为初始值,可以正确地译码单元数据。
根据本发明的再一个方面,可变长度译码方法根据译码子数据值更新参数表,和从更新参数表获得编码参数。
根据本发明的再一个方面,可变长度译码方法参考子数据译码步骤中的编码参数执行子数据的算术译码。
根据本发明的再一个方面,可变长度译码方法在封闭的信息译码步骤中,利用一种固定译码方法对包括的有关参数表的信息译码。
根据本发明的再一个方面,一种存储介质存储用于在计算机上执行可变长度编码的程序。可变长度编码是一种在参考参数表的同时给多个子数据构成的单元数据编码的可变长度编码方法,并且包括步骤:将一个参数表设置到初始值;对有关初始化参数表的信息编码;从参数表获得要在子数据编码中使用的编码参数;参考获得的编码参数执行子数据的可变长度编码;和把有关编码参数表的信息放置到一个可以在编码单元数据之前获得信息的位置。
通过这种存储介质,可以通过把存储的程序装载到计算机,在计算机上处理可变长度编码。由于在这个处理过程中,在编码子数据中使用了从参数表获得的编码参数,从而可以在编码单元数据时提高压缩效率。此外,由于对与初始化参数表有关的信息编码,并放置到可以在编码单元数据之前获得信息的位置,所以,当利用这些用作初始值的参数译码时,可以正确地译码编码单元数据。
根据本发明的再一个方面,存储介质存储了用于在计算机上执行可变长度译码的程序。可变长度译码是一种参考参数表对单元数据流译码的可变长度译码方法,单元数据是由多个子数据构成的,该方法包括步骤:对与流的参数表有关的编码信息译码;根据有关参数表的译码信息,设置参数表的初始值;从参数表获得要在译码子数据中使用的编码参数;和参考获得的编码参数执行流的子数据的可变长度译码。
通过这种存储介质,可以通过把存储的程序装载到计算机上,在计算机上处理可变长度译码。在这个处理过程中,由于译码了有关参数表的信息,可以正确地译码单元数据,并且根据信息,把获得的参数表设置为初始值。
根据本发明的再一个方面,一种可变长度编码方法,在切换可变长度代码表的同时对由多个子数据构成的单元数据进行编码,所述方法包括步骤:把可变长度代码表设置到初始值;对指示初始化的可变长度代码表的信息进行编码;选择要在对子数据编码的过程中使用的可变长度代码表;参考所选择的可变长度代码表,对子数据进行编码;和把指示初始化的可变长度代码表的编码信息放置到能够在编码的单元数据之前获得所述编码信息的位置。
通过这种编码方法,由于在编码子数据中使用了选定的可变长度代码表,因此在编码单元数据时提高了压缩效率。此外,由于编码了指示初始化可变长度代码表的信息,并且放置在可以在单元数据之前获得该信息的位置上,因此在译码中使用信息指示的可变长度代码表作为初始值正确地译码编码单元数据。
根据本发明的再一个方面,可变长度编码方法根据编码子数据值选择可变长度代码表。
通过这种编码方法,由于根据编码子数据值选择可变长度代码表,因此在编码单元数据时提高了压缩效率。
根据本发明的再一个方面,要在可变长度编码方法的子数据编码步骤中用于编码的可变长度代码表是根据紧接着编码子数据之前的值选择的可变长度代码表。
通过这种编码方法,由于子数据是根据基于紧接着子数据之前的值选择的可变长度代码表编码的,因此可以实时执行编码并且提高了编码速度。
根据本发明的再一个方面,要在可变长度编码方法的子数据编码步骤的编码中使用的可变长度代码表是根据要编码的编码子数据的值选择的可变长度代码表。
通过这种编码方法,由于子数据是根据基于要编码的编码子数据的值选择的可变长度代码表编码的,因此即使在子数据和紧接着子数据之前的内容大大不同时,也具有高的压缩效率。
根据本发明的再一个方面,在信息编码步骤中,可变长度编码方法利用一种固定编码方法执行编码。
通过这种编码方法,由于使用了固定编码方法,因此能够可靠地译码指示初始化可变长度代码表的信息。
根据本发明的再一个方面,可变长度编码方法进一步包括步骤:确定是否编码了指示初始化可变长度代码表的信息;和把标识确定的结果的标志放置在可以在编码单元数据之前获得该标志的位置上。
通过这种编码方法,通过把一个标志放置在能够在编码单元数据之前获得该标志的位置上,可以确定是否编码了指示初始化可变长度代码表的信息。应当注意,例如,在直到初始化下一个可变长度代码表之前的数据量足够大(也就是说,学习所需的数据量对数据总量的比例足够小,因此学习的效率好)的情况下,或在用作初始值的可变长度代码表与通过学习获得的最佳可变长度代码表实际上一致的情况下,不编码指示用作初始值的可变长度代码表的信息。
根据本发明的再一个方面,可变长度编码方法中的数据单元是图像数据中的一个画面。
通过这种编码方法,用于编码指示可变长度代码表的信息的频率对于所有图像数据都是最佳的,因此即使在传输错误中丢失了一部分编码信息数据,不能播放图像不会超过数秒。此外,不会有大量的冗余编码信息数据。
根据本发明的再一个方面,可变长度编码方法的数据单元是图像数据中的一个片段。
通过这种编码方法,用于编码指示可变长度代码表的信息的频率对于所有图像数据都是最佳的,因此即使在传输错误中丢失了一部分编码信息数据,不能播放图像不会超过数秒。此外,不会有大量的冗余编码信息数据。
根据本发明的再一个方面,可变长度编码方法的子数据的多个句法元素包括用一种其中切换可变长度代码表的可变长度编码方法编码的部分,和用一种固定编码方法编码的部分。
通过这种编码方法,例如,对于图像数据,通过其中切换可变长度代码表的可变长度编码方法可以取得高的压缩效率,并且可以容易地用一种固定编码方法编码共用数据首部。应当注意,由于首部的压缩效率总是很低,因此在使用固定编码方法中不存在特殊的障碍。
根据本发明的再一个方面,一种可变长度译码方法在切换可变长度代码表的同时译码单元数据流,单元数据是由多个子数据构成的,该方法包括步骤:对指示流的可变长度代码表的编码信息译码;根据指示可变长度代码表的译码信息设置可变长度代码表的初始值;选择一个要在译码子数据中使用的可变长度代码表;和参考选择的可变长度代码表执行流的子数据的可变长度译码。
通过这种译码方法,由于对有关可变长度代码表的编码信息译码,并且把信息指示的可变长度代码表设置为初始值,因此可以正确地对编码单元数据译码。
根据本发明的再一个方面,一个存储介质,存储用于在计算机上执行可变长度编码的程序。可变长度编码是一种在切换可变长度代码表的同时编码由多个子数据构成的单元数据的可变长度编码方法,并且包括步骤:把一个可变长度代码表设置到初始值;对指示初始化可变长度代码表的信息编码;选择一个要在编码子数据中使用的可变长度代码表;参考选择的可变长度代码表执行子数据的编码;和把指示编码可变长度代码表的编码信息放置在可以在编码单元数据之前获得该信息的位置。
通过这种存储介质,由于在通过计算机上存储的程序,在编码子数据的过程中使用了一个选择的可变长度代码表,因此在编码单元数据时提高了压缩效率。此外,由于把有关初始化可变长度代码表的信息编码并且放置在一个可以在编码单元数据之前获得信息的位置,因此当利用信息指示为初始值的可变长度代码表译码时,可以正确地译码编码单元数据。
根据本发明的再一个方面,一种存储介质,存储用于在计算机上执行可变长度译码的程序。可变长度译码是一种在切换可变长度代码表的同时对一个单元数据流译码的可变长度译码方法,单元数据是由多个子数据构成的,并且包括步骤:对指示流的可变长度代码表的编码信息译码;根据指示可变长度代码表的译码信息设置可变长度代码表的初始值;选择一个要在对子数据译码中使用的可变长度代码表;和参考选择的可变长度代码表执行流的子数据的可变长度译码。
通过这种存储介质,由于译码了指示代码表的信息,并且在通过存储在计算机上的程序译码的过程中把信息指示的可变长度代码表设置为初始值,因此可以正确地译码编码单元数据。
根据本发明的再一个方面,一种可变长度编码设备,在参考参数表的同时对由多个子数据构成的单元数据进行编码,所述设备包括:初始化装置,用于将参数表设置到初始值;参数表信息编码装置,用于对与被设置的参数表有关的信息进行编码;参数获得装置,用于从参数表获得要在对子数据编码的过程中使用的编码参数;子数据编码装置,用于参考所获得的编码参数对子数据进行可变长度编码;和编码信息放置装置,用于把与所述参数表有关的信息放置到能够在编码的单元数据之前获得信息的位置。
通过这种编码设备,由于在子数据编码装置编码在数据时使用了从参数表获得的编码参数,因此可以在编码单元数据时提高压缩效率。此外,由于通过参数表信息编码装置编码了有关初始化参数表的信息,并且通过编码信息放置装置放置在一个可以在编码单元数据之前获得信息的位置,因此,可以根据该信息,在译码过程中获得参数表,和利用参数表作为初始值正确地对编码单元数据译码。
根据本发明的再一个方面,一种可变长度译码设备参考参数表对单元数据流译码,单元数据是由多个子数据构成的。设备包括参数表信息译码装置、参数表初始化装置、参数获得装置、和子数据译码装置。参数表信息译码装置译码有关流的参数表的编码信息。参数表初始化装置根据有关参数表的译码信息设置参数表的初始值。参数获得装置从参数表获得要在译码子数据中使用的编码参数。子数据译码装置参考获得的编码参数执行流的子数据的可变长度译码。
通过这种译码设备,由于对有关参数表的编码信息译码,并且把根据信息获得的参数表设置为初始值,因此可以正确地对单元数据译码。
根据本发明的再一个方面,一种可变长度编码设备,在切换可变长度代码表的同时对由多个子数据构成的单元数据进行编码,所述设备包括:初始化装置,用于将可变长度代码表设置到初始值;信息编码装置,用于对指示初始化的可变长度代码表的信息进行编码;可变长度代码表选择装置,用于选择要在对子数据编码的过程中使用的可变长度代码表;子数据编码装置,用于参考所选择的可变长度代码表对子数据进行编码;和编码信息放置装置,用于把指示初始化可变长度代码表的编码信息放置到能够在编码单元数据之前获得所述编码信息的位置。
通过这种编码设备,由于在子数据编码装置编码子数据时使用了一个选择的可变长度代码表,因此在编码单元数据时可以提高压缩效率。此外,由于通过参数表信息编码装置编码指示可变长度代码表的信息,和通过编码信息放置装置放置在一个可以在编码单元数据之前获得信息的位置,因此,可以在译码过程中获得该信息指示的可变长度代码表,并且可以利用该可变长度代码表作为初始值正确地译码编码单元数据。
根据本发明的再一个方面,一种可变长度译码设备在切换可变长度代码表的同时对编码单元数据流译码。设备包括可变长度代码表信息译码装置、一个可变长度代码初始化装置、一个可变长度代码表选择装置、和一个子数据译码装置。可变长度代码表信息译码装置译码指示流的一个可变长度代码表的编码信息。可变长度代码表初始化装置根据指示可变长度代码表的译码信息设置一个可变长度代码表的初始值。可变长度代码表选择装置选择一个要在译码子数据中使用的可变长度代码表。子数据译码装置参考选择的可变长度代码表执行流的子数据的可变长度译码。
通过这种译码设备,由于译码了有关可变长度代码表的编码信息,并且根据该信息选择了可变长度代码表,因此可以正确地译码单元数据。
根据本发明的再一个方面,通过一个用于在参考参数表的同时编码单元数据的可变长度编码方法产生一个位流。产生位流的可变长度编码方法是作为本发明的各个方面说明的任何一种可变长度编码方法。
利用一个位流可以获得这些可变长度编码方法的效果,例如,在编码单元数据时提高压缩效率。