用于树结构的自适应熵编码的方法

文档序号:6484851阅读:164来源:国知局
用于树结构的自适应熵编码的方法
【专利摘要】在3D网格编码时,通过基于空间树的方法来压缩几何数据。从用于编码3D网格模型的基于空间树的方法的树结构的遍历产生的比特流具有对称的特殊冗余,利用它来进一步改进网格模型压缩。一种编码比特流的方法,包括以下步骤:定义(51)二进制码元的至少第一和第二码元组,S1是S2的子集;确定(52)该比特流内的第一区段(J1,J2)、第二区段(K1)和第三区段(N1,N2,N3),其中第一区段具有Th1个或更多个连续S1码元,第二区段具有Th2个或更多个连续S2码元;编码(54)该比特流,其中,使用不同的代码来编码(54A,54B,54C)第一区段、第二区段和第三区段;并且编码(55)指示该比特流中第一、第二和第三区段之间的边界位置的值(C1)。
【专利说明】用于树结构的自适应熵编码的方法
【技术领域】
[0001]本发明涉及一种树结构的自适应熵编码的方法,以及一种对应的装置。此外,本发明涉及一种树结构的自适应熵解码的方法,以及一种对应的装置。
【背景技术】
[0002]熵编码已经被研究了数十年。基本上,存在三种类型的熵编码方法:类似于霍夫曼编码的变长编码(VLC)、算术编码,以及类似于Lempel-Ziv压缩或者Lempel-Ziv-Welch压缩的基于字典的压缩。VLC编码使用整数个比特来表示每个码元。霍夫曼编码是被最广泛使用的VLC方法。它向具有较大概率的码元分配较少的比特,而向具有较小概率的码元分配更多的比特。然而,如果每个码元的概率不是1/2的整数幂,则霍夫曼编码可能不是最优的。相反,算术编码可以向每个码元分配少量比特,使得它可以更好地接近一组数据的熵。霍夫曼编码和算术编码已经被广泛地用于现有的图像/视频压缩标准,例如,JPEG,MPEG-2, H.264/AVCo Lempel-Ziv(LZ)或者 Lempel-Ziv_WeIch (LZW)利用基于表格的压缩模型,其中对于重复的数据串替换表格条目。对于多数LZ方法,从较早输入的数据中动态地生成该表格。该算法被设计地更快地实现,但是通常不是最优的,这是因为它仅仅执行数据的有限的分析。这种类别的算法已经在GIF,Zip,PNG和一些其它标准中采用。
[0003]在3D网格编码中,通常通过基于空间树的方法,例如基于kd树[0G00]或者基于八叉树[PK05]来压缩几何数据。这些算法通过一些空间树来组织输入空间点。然后,它们遍历树结构并且记录必要的信息用于稍后恢复输入点。在构建空间树的同时,单元(cell)被递归地细分,直到每个非空的单元小到仅仅包含一个顶点并且使得足以精确地重构顶点位置。初始地,围绕3D模型的所有点构造边界框。在开始时,所有3D点的整个边界框被视为是单个单元。由于可以从对应单元的边界框中恢复顶点位置,基于空间树的算法包括它们可以实现多分辨率压缩并且与单分辨率压缩算法相同的压缩率。
[0004]利用每次迭代,[0G00]将一个单元细分为两个子单元,并且编码两个子单元之一中的多个顶点,如图1所示。如果父单元包含P个顶点,则可以利用算术编码器使用1g2(p+l)个比特来编码子单元之一中的多个顶点。
[0005]另一方面,[PK05]在每次迭代中将一个非空单兀细分为八个子单兀。对于每个八叉树单元细分,几何编码器对数量T(1≤T≤8)个非空子单元和KT=C8T个可能组合中的非空子单元的配置进行编码。当直截了当地编码数据时,T取3个比特并且非空子单元配置取log2KT个比特。为了提高编码效率,[PK05]对每个子单元估计不为空的伪概率。根据概率降序来适应子单元的遍历顺序。为了容易说明,在图2中示出了导致四叉树子单元的2D示例,以及产生的编码字。通过箭头来表示遍历顺序。
[0006]然而,总是期望改进压缩以便实现更高的压缩率。具体地,期望在没有数据损失的情况下实现这一点,即,一种允许全质量解压缩、导致(准)无损再现的方法。

【发明内容】
[0007]本发明是基于对以下事实的认识:如果比特流从用于编码3D网格模型的基于空间树的树结构的遍历方法中产生,则该比特流系统地具有特殊的冗余,并且可以利用这一点来进一步改进网格模型的压缩。具体地,可以对基于树的方法,诸如例如,对基于四叉树或基于八叉树方法,实现更高的压缩效率,其中每个单元细分产生不止两个子单元。
[0008]因此,本发明提供了至少一种编码比特流的方法、一种解码所编码的比特流的方法、一种编码比特流的装置,和一种解码所编码的比特流的装置。
[0009]基本地,一种编码比特流的方法,包括以下步骤:定义二进制码元的至少第一和第二码元组,SI是S2的子集;确定该比特流内的第一区段、第二区段和第三区段,其中第一区段具有Thl个或更多个连续SI码元,第二区段K具有Th2个或更多个连续S2码元;编码该比特流,其中,使用不同的代码来编码第一区段、第二区段和第三区段;并且编码指示该比特流中第一、第二和第三区段之间的边界位置的值。
[0010]在一个实施例中,一种编码比特流的方法包括以下步骤:
[0011]定义二进制码元的至少第一和第二码元组,其中第一码元组是第二码元组的子集;
[0012]确定该比特流内的两个或者更多个第一区段,零个或者多个第二区段和两个或者更多个第三区段,其中每个第一区段具有第一码元组的至少Thl个连续码元,每个第二区段具有第二码元组的至少Th2个连续码元(但不是第一码元组的至少Thl个连续码元),并且其中比特流的剩余部分是第三区段;
[0013]确定该比特流中仅仅包括第一和第三区段的部分;
[0014]编码比特流,其中使用第一代码编码所述第一区段,使用第二代码编码所述第二区段(如果存在),使用第三代码编码所述第三区段;其中还编码用于指示该比特流中的第一、第二和第三区段之间的边界位置的值,其中在仅仅包括第一和第三区段的所述部分中,如果第三区段具有预定义的长度,跳过对第一区段和相邻的第三区段之间的边界位置的编码,并且如果第三区段具有与预定义的长度不同的长度,进行隐含地编码。
[0015]S卩,比特流的每个第三区段不具有第一码元组的至少Thl个连续码元和第二码元组的至少Th2个连续码元。典型地,比特流的第三区段是非常短的并且仅仅包括非常少的码元,通常是仅仅一个码元。
[0016]对第二部分中的第一区段和相邻的第三区段之间的边界位置进行不同类型的隐含编码是可能的,例如,通过交换两个相邻边界位置(其可以被确定,因为边界位置具有单调的递增或者递减顺序),或者通过可以是单独的或者附接到另一边界位置值的换码序列(escape sequence),或者通过被不同存储的码元。
[0017]在一个实施例中,被跳过的边界位置(即,跳过对其进行的编码)是该比特流的所述部分内的第三区段的左侧(或者初始的,或者开放的)边界。在另一个实施例中,被跳过的边界位置是该比特流的所述部分内的第三区段的右边(或者最终的,或者闭合)边界。
[0018]在一个方面中,一种编码比特流的方法包括以下步骤:
[0019]定义二进制码元的至少第一和第二码元组,其中第一码元组比第二码元组包括较少的码元,并且第一码元组的码元也被包括在第二码元组中;
[0020]确定该比特流内的两个或者更多个第一区段、零个或者多个第二区段和两个或者更多个第三区段,其中每个第一区段至少具有第一码元组的定义的第一最小数量个连续码元,每个第二区段至少具有第二码元组的定义的第二最小数量个连续码元,两个或者更多个第三区段包括比特流的剩余部分;
[0021]将比特流分割为至少连续的第一部分和连续的第二部分,其中第一部分包括所述第三区段和所述零个或者多个第二区段中的至少一个,第二部分包括所述第一区段和所述至少两个第二区段中的至少一个;
[0022]编码比特流,其中在第一编码器中使用第一代码编码所述一个或多个第一区段,在第二编码器中使用第二代码编码所述一个或多个第二区段,在第三编码器中使用第三代码编码所述一个或多个第三区段;以及
[0023]编码比特流中的第一、第二和第三区段的长度(或者相应地边界位置),其中至少在第二部分中,如果该长度是预定义的长度(S卩,边界位置具有距离预定义的相邻边界位置的预定义距离),那么跳过编码第一区段的长度(或者边界位置的至少之一)。
[0024]换句话说,构建比特流的第二部分使得它不包括任何第三区段。在一个实施例中,它是比特流的最终部分。在一个实施例中,在确定各个区段时,累计相等类型的相邻区段,使得流中的相邻区段总是具有不同的类型。
[0025]在一个方面,一种编码比特流的装置包括一个或者多个处理部件,包括:
[0026]处理部件,定义二进制码元的至少第一和第二码元组,其中第一码元组是第二码元组的子集;
[0027]处理部件,确定该比特流内的两个或者更多个第一区段,零个或者多个第二区段和两个或者更多个第三区段,其中每个第一区段至少具有第一码元组的Thl个连续码元,每个第二区段至少具有第二码元组的Th2个连续码元(不是第一码元组的至少Thl个连续码元),并且其中比特流的剩余部分是第三区段;
[0028]处理部件,确定该比特流中仅仅包括第一和第三区段的部分;
[0029]编码部件,编码比特流,其中使用第一代码在第一编码器中编码所述第一区段,使用第二代码在第二编码器中编码所述第二区段(如果存在),使用第三代码在第三编码器中编码所述第三区段;以及
[0030]边界/长度编码部件,编码用于指示该比特流中的第一、第二和第三区段之间的边界位置(或者第一、第二和第三区段的长度)的值,其中在仅仅包括第一和第三区段的所述部分中,如果第三区段具有预定义的长度(即,边界位置具有距离预定义的相邻边界位置的预定义的距离),跳过对第一区段和相邻的第三区段之间的边界位置的编码。
[0031]一种计算机可读介质,具有使得计算机执行如上指定的方法的可执行指令。
[0032]在从属权利要求、以下说明书和附图中公开了本发明的有利实施例。
【专利附图】

【附图说明】
[0033]参照附图来描述本发明的示范性实施例,在附图中:
[0034]图1示出了 2D情形下kd_树几何编码的原理;
[0035]图2示出了 2D情形下四叉树几何编码的原理;
[0036]图3示出了比特流的基本结构;
[0037]图4示出了表示3D网格模型的示范性比特流;
[0038]图5示出了编码方法的流程图;[0039]图6示出了解码方法的流程图;
[0040]图7示出了将比特流分解为第一、第二和第三区段的示范性方法。
[0041]图8示出了与基于四叉树的2D几何编码比较的基于八叉树3D几何编码的原理;
[0042]图9示出了各种示范性比特流的结构;
[0043]图10示出了示范性的比特流的首部的结构;
[0044]图11示出了编码比特流的装置700的框图;以及
[0045]图12示出了解码比特流的装置700的框图。
【具体实施方式】
[0046]以下实施例是基于3D网格模型的八叉树表示。本发明可以适应于其它数据集或者应用,如以下进一步定义的。3D网格编码方案的八叉树表示的基本方法在[0G00]中是已知的,并且在此文中参照图2进行了解释。尽管图2示出了 2D情形下四叉树几何编码的原理,但其可以容易地适应于3D模型,如以下关于图8示出的。对于编码,当前的父单元被分解为以预定义的顺序遍历的四个子单元,并且每个子单元的单个比特指示是否在该子单元内存在点。例如在图2a)中,示出了遍历两个父单元1,2的子单元,(非空的子单元被涂上灰色)。由于遍历的第一和第三子单元10,12是非空的(即包含一个或多个点),这上用I表示,通过第一序列1010编码第一父 单元I的子单元10,11,12,13。第二和第四子单元11,13是空的(即,不包含点),这用零编码。图2b)示出了使用不同遍历的相同的单元和作为结果的编码。
[0047]图8示出了八叉树方案的父单元和子单元。在八叉树方案中,父单元被分解为八个子单元80,…,86 (左下单元82后面的隐藏的一个子单元未被示出)。一种可能的遍历顺序可以是左右、上下和前后,产生单元的遍历序列80-81-82-83-84-85-(左下单元82后面的隐藏的单元)_86。相应地,在八叉树的情形下,非空子单元配置由覆盖空子单元和非空子单元的所有255种可能组合的8比特二进制表示。不需要单独编码多个非空子单元。表格I是非空子单元配置序列的示例。
[0048]11111111
[0049]01100110
[0050]00111011
[0051]11001100
[0052]…
[0053]00010000
[0054]00000010
[0055]00000010
[0056]10000000
[0057]00000001
[0058]表格1:子单元配置序列
[0059]尽管以上详细地进行了描述,对于本发明而言,父单元内的子单元的遍历顺序不是非常相关。在原理上,对于本发明而言,基本上可以等效地使用任何遍历顺序。
[0060]可以通过常规的算术编码来有效地压缩8比特码元,但是结果不如看上去那么好(gp,效率)。本发明提供了一种具有提高的效率的编码方法,以及一种对应的解码方法。
[0061]在表格2中示出了在典型的复杂3D模型(ml007)中最频繁出现的码元的分布概率。如可见的,在二进制表示中仅仅具有I个“I”的码元以压倒性的概率出现。几何解释是在若干次细分之后,顶点很少共享一个单元。根据本发明,定义其元素是任何可能的码元的码元集S0={1,2,3,…,255}。此外,定义其元素是2的整数幂的另一码元集S1={1,2,4,8,16,32,64,128},即频繁出现的码元。已经观察到经常存在SI中包含的码元
的长游程(run)。因此,概率模型被简化为仅包含SI码元的子序列中的8码元模型。
[0062]
【权利要求】
1.一种编码比特流的方法,所述方法包括以下步骤: -定义(51) 二进制码元的至少第一和第二码元组,其中第一码元组(SI)是第二码元组(S2)的子集; -确定(52)该比特流内的两个或者更多个第一区段(J1,J2),零个或者多个第二区段(Kl)和两个或者更多个第三区段(NI,N2,N3),其中每个第一区段至少具有第一码元组(SI)的预定义的第一数量(Thl)个连续码元,每个第二区段至少具有第二码元组的预定义的第二数量(Th2)个连续码元,并且其中比特流的剩余部分是第三区段(NI,N2,N3); -确定(53)该比特流中仅仅包括第一和第三区段(Jl,J2,N2)的部分(H2); -编码(54)该比特流,其中使用第一代码编码(54A)所述第一区段,使用第二代码编码(54B)所述第二区段,使用第三代码编码(54C)所述第三区段;以及 -编码(55)用于指示该比特流中的第一、第二和第三区段之间的边界位置的值(C1),其中在仅仅包括第一和第三区段的所述部分(H2)中,如果第三区段(N2)具有预定义的长度,则跳过对第一区段(Jl,J2)和相邻的第三区段(N2)之间的边界位置的编码,并且进行隐含地编码,如果第三区段(N2)具有与预定义的长度不同的长度(LN2)。
2.根据权利要求1的方法,其中第一码元组(SI)包括具有一个比特被设置为I和剩余比特被设置为O的二进制码元 ,第二码元组(S2)包括具有一个或两个比特被设置为I和剩余比特为O的二进制码元。
3.根据权利要求1或2的方法,其中该比特流表示空间数据结构,具体是3D网格模型的遍历八叉树表示。
4.根据权利要求1-3任一项的方法,其中编码步骤(54)包括使用基于第一码元集(Smbl)的第一代码的第一编码(54Α),使用基于第二码元集(Smb2)的第二代码的第二编码(54B)和使用基于第三码元集(Smb3)的第三代码的第三编码(54C),并且其中同时执行第一、第二和第三编码(54A,54B, 54C)的至少一部分。
5.根据权利要求1-4任一项的方法,其中在比特流的开始处编码解码器控制信息,该解码器控制信息包括用于指示比特流的第一、第二和第三区段之间的边界位置的所述值(C1)0
6.根据权利要求1-5任一项的方法,其中该比特流中的第一、第二和第三区段的边界位置或者长度被编码为值序列(cmax,…,C(l),其中对于比特流的第一部分(Hl)和对于第二部分(H2)的第一区段,如果不跳过边界,则以单调顺序编码表示边界位置的值,并且其中第一区段(J1,J2)和相邻的第三区段(N2)之间的边界位置的所述隐含编码包括交换所述第一区段(Jl)的边界顺序(即,下界和上界)。
7.根据权利要求1-6任一项的方法,其中,所述比特流的第三区段(N2)的所述预定义的长度(Ln2)是I。
8.一种解码比特流的方法,包括以下步骤: -从比特流的开始处解码(61)[包括第一、第二和第三区段的长度的]控制信息(C1); -根据所述控制信息确定(62)该比特流内的至少两个或者更多个第一区段(J1,J2),零个或者多个第二区段(Kl)和两个或者更多个第三区段(NI,N2, N3),其中每个第一区段具有第一码元组(SI)的连续码元,每个第二区段具有第二码元组(S2)的连续码元,并且第三区段具有第三码元组(S3)的码元,其中所述第三区段(NI)和所述零个或者多个第二区段(Kl)中的至少一个处于该比特流的连续第一部分(HI)中,并且所述第一区段(N2)和所述至少两个第二区段(Jl,J2)中的至少一个处于该比特流的连续的第二部分(H2)中; -使用第一码元解码器[基于第一码元组(SI)]将所述至少两个或者更多个第一区段(Jl,J2)的连续码元解码(64A)为固定长度的码元; -如果确定至少一个第二区段(Kl ),使用第二码元解码器将所述零个或者多个第二区段(Kl)的连续码元解码(64B)为固定长度的码元[基于第二码元组(S2),其中第二码元组(S2)包括第一码元组(SI)的所述码元和附加码元];以及 -使用第三码元解码器[基于第三码元组(S3)]将所述两个或者更多个第三区段(NI,N2,N3)的码元解码(64C)为固定长度的码元,其中第三码元组(S3)仅仅包括未被包括在第二码元组(S2)中的码元;以及 -根据所述控制信息以相继的顺序提供(66)解码后的该比特流中的第一、第二和第三区段的码元。
9.根据权利要求7的方法,其中第一码元组包括具有一个比特被设置为I和剩余比特为O的二进制码元,第二码元组包括具有一个或两个比特被设置为I和剩余比特为O的二进制码元。
10.根据权利要求7或8的方法,其中该比特流表示3D网格模型的遍历八叉树表示。
11.根据权利要求7-9任一项的方法,其中从该比特流的开始处解码(61)控制信息(C1)的步骤包括:解码指示比特流中的第一、第二和第三区段的边界位置的值序列(cmax,…,Ctl),其中表示比特流的第一部分(Hl)的边界位置的值具有单调的顺序,并且其中表示比特流的第二部分(H2)的第一区段(J1,J2)的边界位置的值具有单调的顺序,该方法还包括步骤: -检测(66B)表示具有交换的单调顺序的比特流的第二部分(H2)中的边界位置的至少一对值(c3, C4);以及 -根据所述值之一在边界位置插入(66C)具有根据所述至少一对值(c3,c4)之间的差的长度的所述第一区段(N2,N3)之一。
12.根据权利要求7-10任一项所述的方法,其中至少部分地同时执行(至少部分时间重叠):解码(64A)至少两个或者更多个第一区段(J1,J2),在确定至少一个第二区段(Kl)的情况下,解码(64B)所述零个或者多个第二区段(Kl ),以及解码(64C)所述两个或者更多个第三区段(NI,N2,N3),并且其中提供(66)解码后的比特流的第一、第二和第三区段的码元的步骤包括重新排序(66A)所述第一、第二和第三区段。
13.一种编码比特流的装置(700),包括: -定义模块(751),定义二进制码元的至少第一和第二码元组,其中第一码元组(SI)是第二码元组(S2)的子集; -第一确定模块(7 52),确定该比特流内的两个或者更多个第一区段(J1,J2),零个或者多个第二区段(Kl)和两个或者更多个第三区段(NI,N2,N3),其中每个第一区段至少具有第一码元组(SI)的预定义的第一数量(Thl)个连续码元,每个第二区段至少具有第二码元组的预定义的第二数量(Th2)个连续码元,并且其中比特流的剩余部分是第三区段(N1,N2,N3); -第二确定模块(753),确定该比特流中仅仅包括第一和第三区段(J1,J2,N2)的部分(H2); -第一编码模块(754),编码该比特流,其中使用第一代码在第一子编码器(754A)中编码所述第一区段,使用第二代码在第二子编码器(754B)中编码所述第二区段,使用第三代码在第三子编码器(754C)中编码所述第三区段; -第二编码模块(755),编码用于指示该比特流中的第一、第二和第三区段之间的边界位置的值(C1),其中在仅仅包括第一和第三区段的所述部分(H2)中,如果第三区段(N2)具有预定义的长度,则跳过对第一区段(J1,J2)和相邻的第三区段(N2)之间的边界位置的编码,并且进行隐含地编码,如果第三区段(N2)具有与预定义的长度不同的长度(LN2)。
14.一种解码比特流的装置(800),包括: -第一解码模块(861),从比特流的开始处解码控制信息(C1); -第一确定模块(862),根据所述控制信息确定该比特流内的至少两个或者更多个第一区段(J1,J2),零个或者多个第二区段(Kl)和两个或者更多个第三区段(NI,Ν2,Ν3),其中每个第一区段具有第一码元组(SI)的连续码元,每个第二区段具有第二码元组(S2)的连续码元,并且第三区段具有第三码元组(S3)的码元,其中所述第三区段(NI)和所述零个或者多个第二区段(Kl)中的至少一个处于该比特流的连续第一部分(Hl)中,并且所述第一区段(Ν2)和所述至少两个第二区段(J1,J2)中的至少一个处于该比特流的连续的第二部分(H2)中; -第二解码模块(864)包括: -第一解码子模块(864A),基于第一码元组(SI),使用第一码元解码器将所述至少两个或者更多个第一区段(Jl,J2)的连续码元解码为固定长度的码元; -第二解码子模块(864B),在确定了至少一个第二区段(Kl)的情况下,使用第二码元解码器将所述零个或者多个第二区段(Kl)的连续码元解码为固定长度的码元; -第三解码子模块(864C),使用第三码元解码器[基于第三码元组(S3)]将所述两个或者更多个第三区段(N1,N2,N3)的码元解码为固定长度的码元,其中第三码元组(S3)仅仅包括未被包括在所述第二码元组(S2)中的码元;以及 -重构和输出模块(866),根据所述控制信息以相继的顺序提供解码后的比特流中的第一、第二和第三区段的码元。
15.根据权利要求14的装置,其中用于从比特流的开始处解码控制信息(C1)的解码模块(861)执行对指示比特流中的第一、第二和第三区段的边界位置的值序列(Cmax,…,Ctl)的解码,其中表示比特流的第一部分(Hl)的边界位置的值具有单调的顺序,并且其中表示比特流的第二部分(H2)的第一区段(J1,J2)的边界位置的值具有单调的顺序,并且其中所述解码模块(861)还包括: -检测模块(866B),检测表示具有交换的单调顺序的比特流的第二部分(H2)中的边界位置的至少一对值(c3, C4);以及 -插入模块(866C),根据所述值之一在边界位置插入具有根据所述至少一对值(c3,c4)之间的差的长度的所述第一区段(N2,N3)之一。
【文档编号】G06T9/00GK103814396SQ201180072369
【公开日】2014年5月21日 申请日期:2011年7月18日 优先权日:2011年7月18日
【发明者】江文斐, 蔡康颖, 陈志波 申请人:汤姆逊许可公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1