用于点云的二进制熵编解码的方法和设备

文档序号:639583 发布日期:2021-05-11 浏览:84次 >En<

阅读说明:本技术 用于点云的二进制熵编解码的方法和设备 (Method and apparatus for binary entropy encoding and decoding of point clouds ) 是由 S·拉瑟雷 于 2019-10-02 设计创作,主要内容包括:用于对点云进行编码或解码的方法和设备。使用熵编解码来对表示体积的子体积的占用模式的比特序列进行编解码。针对当前子体积,用于对占用模式进行熵编解码的相应熵编解码器的概率可以基于当前子体积的多个邻近子体积的占用数据和用于细分邻近子体积的占用数据而被选择。(Methods and apparatus for encoding or decoding point clouds. A bit sequence representing an occupancy pattern of a sub-volume of the volume is coded using entropy coding. For a current sub-volume, probabilities of a respective entropy codec used to entropy decode occupancy patterns may be selected based on occupancy data of a plurality of adjacent sub-volumes of the current sub-volume and occupancy data used to subdivide the adjacent sub-volumes.)

具体实施方式

本申请描述了对点云进行编码和解码的方法和用于对点云进行编码和解码的编码器和解码器。可以使用熵编解码(例如二进制熵编解码)来对表示体积的子体积的占用模式的比特序列进行编解码。可以基于当前子体积的邻近子体积的占用数据并且进一步基于邻近子体积中的至少一个邻近子体积的子子体积的占用数据来选择与用于对占用模式进行熵编码的相应熵编解码器相关联的概率。

在对理解本申请有用的示例中,上下文可以基于邻居配置和比特序列中的先前编解码的比特的部分序列。可以做出关于是否要应用上下文约简操作的确定,且如果确定要应用上下文约简操作,那么该操作约简可用上下文的数目。示例上下文约简操作包括:基于通过与先前编解码的比特相关联的子体积进行的屏蔽来约简邻居配置、对空邻居配置的特殊处理以及基于统计的上下文合并。可以在编解码之前应用约简,并且可以在编解码期间做出关于是否满足用于使用约简的上下文集合的情况的确定。

在一个方面,本申请提供了一种对点云进行编码以生成压缩后的点云数据的比特流的方法,该点云在具有多个节点的树形结构中被定义,多个节点具有父子关系并且其表示体积空间的几何形状,该体积空间的几何形状被递归地拆分成子体积并且包含点云的点。该方法包括:针对与被拆分成其他子体积的子体积相关联的当前节点,每个其他子体积对应于当前节点的子节点;基于子节点的占用状态来确定用于当前节点确定的占用模式。该方法还包括:选择与用于对占用模式进行熵编码的相应熵编解码器相关联的一种或多种概率,其中该选择基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点的子节点的占用数据。该方法还包括:使用相关联的一个或多个熵编解码器,基于所选择的一种或多种概率来对占用模式进行熵编码,以产生用于比特流的编码数据。

在另一方面,本申请提供了一种对压缩后的点云数据的比特流进行解码以产生重构的点云的方法,该点云在具有多个节点的树形结构中被定义,多个节点具有父子关系并且其表示体积空间的几何形状的多个节点,该体积空间被递归地拆分成子体积并且包含点云的点。该方法包括:针对与被拆分成其他子体积的子体积相关联的当前节点,每个其他子体积对应于当前节点的子节点,选择与用于对占用模式进行熵解码的相应熵编解码器相关联的一种或多种概率,其中该选择基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点的子节点的占用数据。该方法还包括:使用一个或多个相关联的熵编解码器,基于所选择的一种或多种概率来对比特流进行熵解码,以产生用于当前节点的表示子节点的占用的重构占用模式。

在一些实施方式中,选择一种或多种概率可以基于邻近配置,该邻近配置是基于当前节点的邻近节点中的每个邻近节点的占用状态而被确定的。

在一些实施方式中,如果当前节点的邻近节点的占用数据指示其被占用、并且邻近节点的子节点的占用数据指示其占用子节点中的至少一个子节点与当前节点邻近,那么该邻近节点可以被视为出于确定邻近配置的目的而被占用。

在一些实施方式中,如果当前节点的邻近节点的占用数据指示其被占用、并且邻近节点的子节点的占用数据指示其占用子节点中没有一个子节点与当前节点邻近,那么该邻近节点可以被视为出于确定邻近配置的目的而未被占用。这可以对应于(故意地/人为地)在确定邻近配置时将该邻近节点的占用比特设置为零。

在一些实施方式中,如果当前节点的邻近节点的占用数据指示其被占用、并且邻近节点尚未被编解码,那么该邻近节点可以被视为出于确定邻近配置的目的而被占用。当邻近节点尚未被编解码时,解码器尚不具有关于其子节点的占用的信息,因此,这种信息不能用于将邻近节点视为出于确定邻近配置的目的而被占用或未被占用。

在一些实施方式中,如果当前节点的邻近节点的占用数据指示其未被占用,那么该邻近节点可以被视为出于确定邻近配置的目的而未被占用。

在一些实施方式中,当前节点的邻近节点可以是在树形结构中与当前节点处于相同深度处的那些节点,并且那些节点的相关联的子体积与当前节点的子体积相交。

在一些实施方式中,与当前节点邻近的子节点可以是在树形结构中比当前节点低了一个深度的那些节点,并且那些节点的相关联的子体积与当前节点的子体积相交。

在一些实施方式中,多个邻近节点的占用数据可以包括多个邻近节点中的每个邻近节点的占用状态。

在一些实施方式中,树形结构可以表示八叉树。

在一些实施方式中,编码方法还可以包括:对标记进行编码,该标记指示了与用于对占用模式进行熵编码的相应熵编解码器相关联的一种或多种概率已经基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点的子节点的占用数据而被选择。

在一些实施方式中,解码方法还可以包括:对标记进行解码,该标记指示了与用于对占用模式进行熵解码的相应熵编解码器相关联的一种或多种概率应该基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点的子节点的占用数据而被选择。

在另一方面中,本申请提供了一种对点云进行编码以生成压缩后的点云数据的比特流的方法,该点云在具有多个节点的树形结构中被定义,多个节点具有父子关系并且其表示体积空间的几何形状的多个节点,该体积空间被递归地拆分成子体积并且包含点云的点,其中使用比特序列来指示体积的子体积的占用,其中该比特序列的每个比特指示了相应子体积在体积内按扫描顺序的占用,并且其中体积具有多个邻近体积,邻近体积的占用模式是邻居配置。该方法包括:针对体积的比特序列中的至少一个比特,确定满足上下文约简条件,且在此基础上,选择约简的上下文集合,该上下文集合包含的上下文比邻居配置的计数与序列中的若干先前编解码的比特的乘积少;基于邻近体积中的至少一些邻近体积的占用状态和比特序列的至少一个先前编解码的比特,从约简的上下文集合中选择上下文,用于对至少一个比特进行编解码;使用二进制熵编码器基于所选择的上下文,对至少一个比特进行熵编码以产生用于比特流的编码数据;以及更新所选择的上下文。

在另一方面中,本申请提供了一种对压缩后的点云数据的比特流进行解码以产生重构的点云的方法,该点云在具有多个节点的树形结构中被定义,多个节点具有父子关系并且其表示体积空间的几何形状,该体积空间被递归地拆分成子体积并且包含点云的点,其中使用比特序列来指示体积的子体积的占用,其中该比特序列的每个比特指示了相应子体积在体积内按扫描顺序的占用,并且其中体积具有多个邻近体积,邻近体积的占用模式是邻居配置。该解码方法包括:针对体积的比特序列中的至少一个比特,确定满足上下文约简条件,且在此基础上,选择约简的上下文集合,该上下文集合包含的上下文比邻居配置的计数与序列中的若干先前编解码的比特的乘积少;基于邻近体积中的至少一些邻近体积的占用状态和比特序列的至少一个先前编解码的比特,从约简的上下文集合中选择上下文,用于对至少一个比特进行编解码;使用二进制熵解码器基于所选择的上下文来对至少一个比特进行熵解码,以根据比特流产生重构比特;以及更新所选择的上下文。

在一些实施方式中,上下文约简条件可以包括:确定一个或多个先前编解码的占用比特与一个或多个相应子体积相关联,该相应子体积定位于与至少一个比特相关联的子体积和邻近体积中的一个或多个邻近体积之间。在一些情况下,这可以包括:确定与先前编码的比特相关联的四个子体积与特定邻居体积共享面。

在一些实施方式中,上下文约简条件可以包括:确定先前已经对比特序列的至少四个比特进行了编解码。

在一些实施方式中,确定满足上下文约简条件可以包括:确定邻近体积的占用模式指示多个邻近体积是未占用的。在那些情况中的一些情况下,所选择的约简的上下文集合可以包括对应于比特序列中的先前编解码的比特的数目的若干上下文,并且可选地,选择上下文可以包括基于比特序列中的先前编解码的比特之和来选择上下文。

在一些实施方式中,上下文约简条件可以包括:确定先前已经对比特序列中的至少阈值数目的比特进行了编解码,并且约简的上下文集合可以包括查找表,该查找表将邻居配置与比特序列中的先前编解码的比特的模式的每个可能组合映射到较少上下文。在一些示例中,在确定了相应的可用上下文对之间的距离测量小于阈值的基础上,可以基于将可用上下文迭代地分组为多种类别来生成查找表,并且多种类别中的每种类别可以在较小集合中包括相应上下文,并且针对邻居配置与比特序列中的先前编解码的比特的模式的每个可能组合,都可以存在可用上下文。

在一些实施方式中,邻近体积中的至少一些邻近体积是与体积共享至少一个面的邻近体积。

在另一方面,本申请描述了配置为实施这种编码和解码方法的编码器和解码器。

在再一方面,本申请描述了存储计算机可执行程序指令的非瞬态计算机可读介质,该计算机可执行程序指令在被执行时使一个或多个处理器执行所描述的编码和/或解码方法。

在又一方面中,本申请描述了一种包含程序指令的计算机可读信号,该程序指令在被计算机执行时使计算机执行所描述的编码和/或解码方法。

本申请还描述计算机实施的应用,包括地形应用、制图应用、汽车工业应用、自动驾驶应用、虚拟现实应用以及文化遗产应用等。这些计算机实施的应用包括以下进程:接收数据流或数据文件、将数据流或数据文件解包以获得压缩后的点云数据的比特流、以及对如在以上方面及其实施方式中所描述的比特流进行解码。由此,这些计算机实施的应用根据贯穿本申请所描述的方面及其实施方式利用点云压缩技术。

本申请还描述对点云进行编码和解码的方法和用于对点云进行编码和解码的编码器和解码器。在一些实施方式中,接收单元接收通过对编解码的点云数据与其他编解码的数据类型(诸如元数据、图像、视频、音频和/或图形)进行复用而获得的复用数据。接收单元包括用于将复用数据分离成编解码的点数据和其他编解码数据的解复用单元和用于对编解码的点云数据进行解码的至少一个解码单元(或解码器)。在一些其他实施方式中,发射单元发射通过对编解码的点云数据与其他编解码的数据类型(诸如元数据、图像、视频、音频和/或图形)进行复用而获得的复用数据。发射单元包括用于对点云数据进行编码的至少一个编码单元(或编码器)和用于将编解码的点云数据和其他编解码数据组合成复用数据的复用单元。

本领域的普通技术人员将通过结合附图对示例的以下描述进行回顾来理解本申请的其他方面和特征。

也可以相对于一个或多个其他方面/实施例来使用相对于本发明的一个方面或实施例描述的任何特征。本发明的这些和其他方面将根据本文中所描述的实施例而变得显而易见并且参考本文中所描述的实施例加以说明。

有时,在以下描述中,术语“节点”、“体积”以及“子体积”可以互换地使用。应了解,节点与体积或子体积相关联。节点是树上的可为内部节点或叶节点的特定点。体积或子体积是节点表示的有界物理空间。在一些情况下,术语“体积”可以用于指指代被定义用于包含点云的最大有界空间。出于构建互连节点的树形结构以对点云数据进行编解码的目的,可以将体积递归地划分为子体积。

在本申请中,术语“和/或”旨在涵盖所列元件的所有可能组合和子组合,包括单独列出的元件中的任何一个、任何子组合或所有元件,但不必排除附加元件。

在本申请中,短语“……或……中的至少一个”旨在涵盖所列元件中的任何一个或多个,包括单独列出的元件中的任何一个、任何子组合或所有元件,但不必排除任何附加元件,也不一定需要所有元件。

点云是三维坐标系中的点集合。这些点通常旨在表示一个或多个物体的外部表面。每个点具有三维坐标系中的一个地点(位置)。该位置可以由三个坐标(X、Y、Z)表示,其可以是笛卡尔或任何其他坐标系。这些点可以具有其他相关联的属性(诸如颜色),在一些情况下,这些属性也可以是三个分量值,诸如R、G、B或Y、Cb、Cr。依赖于点云数据的期望应用,其他相关联的属性可以包括透明度、反射率、法线向量等。

点云可以是静态的或动态的。例如,物体或地形的详细扫描或映射可以是静态点云数据。出于机器视觉目的的基于LiDAR的环境扫描可以是动态的,这是由于点云(至少潜在地)随着时间而改变,例如随着对体积的每次连续扫描。因此,动态点云是点云的时间顺序的序列。

点云数据可以在若干应用中被使用,给出一些示例,包括保护(对历史或文化物体的扫描)、地图绘制、机器视觉(诸如自主或半自主汽车)和虚拟现实系统。用于如机器视觉等应用的动态点云数据可以与用于保护目的静态点云数据完全不同。例如,汽车视觉通常涉及通过LiDAR(或类似)传感器以高捕获频率获得的相对小的分辨率、无色、高度动态的点云。此类点云的目的不用于人类消耗或查看,而是用于决策进程中的机器物体检测/分类。作为示例,典型的LiDAR帧包含数以万计的点,而高质量的虚拟现实应用需要数百万个点。可以预期随着时间的流逝,随着运算速度的增加和新应用的发现,将需要更高分辨率的数据。

虽然点云数据是有用的,但缺乏有效且高效的压缩(即,编码和解码进程)可能会妨碍采用和部署。在对点云进行编解码时在其他数据压缩(比如音频或视频)的情况下不会出现的特定挑战是对点云的几何形状进行编解码。点云往往分布稀疏,这使得高效地对点的地点进行编解码更具挑战性。

用于对点云数据进行编解码的更普遍的机制中的一种机制是通过使用基于树的结构。在基于树的结构中,将点云的有界三维体积递归地划分为子体积。树的节点对应于子体积。可以基于树的分辨率和/或是否存在子体积中所包含的任何点,来决定是否要进一步划分子体积。叶节点可以具有占用标记,该占用标记指示其相关联的子体积是包含点还是不包含点。拆分标记可以表示节点是否具有子节点(即,当前体积是否已经进一步被拆分成子体积)。在一些情况下,可以对这些标记进行熵编解码,且在一些情况下,可以使用预测编解码。

常用的树形结构是八叉树。在该结构中,体积/子体积都是立方体,并且子体积的每次拆分都产生八个其他子体积/子立方体。另一种常用的树形结构是KD树,在KD树中,体积(立方体或长方体)被与轴中的一个轴正交的平面递归地划分为两个部分。八叉树是KD树的特殊情况,其中体积被三个平面划分,三个平面分别与三个轴中的一个轴正交。这两个示例都涉及立方体或长方体;然而,本申请不限于此类树形结构,并且在一些应用中,体积和子体积可以具有其他形状。体积并不一定要被分成两个子体积(KD树)或八个子体积(八叉树),而是可以涉及其他分区,包括划分为非矩形形状或涉及不相邻的子体积。

为了便于解释,并且由于八叉树是用于汽车应用的流行的候选树形结构,因此本申请可以参考八叉树,但应理解,本文中所描述的方法和设备可以使用其他树形结构来实施。

现在参考图1,其示出了根据本申请的方面的点云编码器10的简化框图。点云编码器10包括用于接收点云数据并且产生树(在该示例中为八叉树)的树构建模块12,该树表示包含点云的体积空间的几何形状并指示来自该几何形状中的点云的点的地点或位置。

用于创建八叉树以对点云进行编解码(code)的基本进程可以包括:

1.从包含坐标系统中的点云的有界体积(立方体)开始

2.将体积拆分成8个子体积(八个子立方体)

3.针对每个子体积,如果子体积为空,那么用0标记子体积,或如果在子体积中存在至少一个点,那么用1标记子体积

4.针对用1标记的所有子体积,重复(2)以拆分这些子体积,直到达到最大拆分深度为止

5.针对最大深度的所有叶子体积(子立方体),如果其是非空,那么用1标记叶立方体,否则用0标记叶立方体。

以上进程可以被描述为占用等于拆分进程,其中拆分暗示占用,约束是存在最大深度或分辨率,超过该最大深度或分辨率将不会发生进一步拆分。在这种情况下,单个标记表示节点是否被拆分,因此表示该节点是否被至少一个点占用,反之亦然。在最大深度处,标记表示占用,其中不可能进行进一步拆分。

在一些实施方式中,拆分和占用是独立的,使得节点可以被占用并且可以被拆分或可以不被拆分。存在该实施方式的两种变型:

1.拆分后占用。信号标记指示节点是否被拆分。如果被拆分,那么节点必须包含点——即,拆分暗示占用。否则,如果节点不被拆分,那么另一占用标记表示节点是否包含至少一个点。因此,当节点不被进一步拆分(即,该节点是叶节点)时,叶节点必须具有相关联的占用标记,以指示该叶节点否包含任何点。

2.占用后拆分。信号标记指示节点是否被占用。如果不被占用,那么不发生拆分。如果被占用,那么对拆分标记进行编码,以指示节点是被进一步拆分还是不被进一步拆分。

不管使用上述进程中的哪个进程来构建树,都可以按预定义顺序(宽度优先或深度优先以及根据每个划分后的子体积内的扫描模式/顺序)遍历树,以根据标记(占用和/或拆分标记)产生比特序列。这可以被称为树的序列化或二进制化。如图1中所示出,在该示例中,点云编码器10包括用于对八叉树进行二进制化以产生表示树的二进制化数据的比特流的二进制化器14。

然后可以使用熵编码器16对该比特序列进行编码,以产生压缩后的比特流。熵编码器16可以使用上下文模型18对比特序列进行编码,该上下文模型基于熵编码器16的上下文确定来指定用于对比特进行编解码的概率。在对每个比特或所定义的比特集合进行编解码之后,可以自适应地更新上下文模型18。在一些情况下,熵编码器16可以是二进制算术编码器。在一些实施方式中,二进制算术编码器可以采用上下文自适应二进制算术编解码(CABAC)。在一些实施方式中,可以使用除算术编解码器以外的编解码器。

在一些情况下,熵编码器16可以不是二进制编解码器,而是可以对非二进制数据进行操作。来自树构建模块12的输出的八叉树数据可以不以二进制形式被评估,而是可以被编码为非二进制数据。例如,在八叉树的情况下,可以将子体积内的按其扫描顺序的八个标记(例如占用标记)视为28-1比特数(例如具有在1与255之间的值的整数,这是由于对于拆分的子体积而言,值0是不可能的,即,如果子体积完全未被占用,那么将不会拆分该子体积)。在一些实施方式中,可以通过熵编码器使用多符号算术编解码器来对该数进行编码。在子体积(例如立方体)内,定义了该整数的标记的序列可以被称为“模式”。

如同视频或图像编解码,点云编解码可以包括预测性操作,在该预测性操作中,努力预测子体积的模式。预测可以是空间的(依赖于相同点云中的先前编解码的子体积)或时间的(依赖于点云的时间顺序序列中的先前编解码的点云)。

在图2中示出了对应于编码器10的示例点云解码器50的框图。点云解码器50包括使用由编码器10使用的相同上下文模型54的熵解码器52。熵解码器52接收压缩数据的输入比特流,并对数据进行熵解码以产生解压缩比特的输出序列。然后通过树重构器56将序列转换为重构的点云数据。树重构器56根据解压缩的数据和对树数据进行二进制化的扫描顺序的知识来重建树形结构。因此,树重构器56能够重构来自点云的点的地点(受树编解码的分辨率限制)。

在图3中示出了示例部分子体积100。在该示例中,为了易于说明,以二维方式示出了子体积100,并且子体积100的大小为16×16。应注意,已经将子体积划分为四个8×8子正方形,并且已经将这四个子正方形中的两个子正方形进一步细分为4×4子正方形,将4×4子正方形中的三个4×4子正方形进一步划分为2×2子正方形,并且然后将2×2子正方形中的一个2×2子正方形划分为1×1正方形。1×1正方形是树的最大深度并且表示针对位置点数据的最高分辨率。将来自点云的点示出为图中的圆点。

在子体积100的右侧示出了树102的结构。在树102的右侧示出了以预定义的宽度优先扫描顺序获得的拆分标记104的序列和占用标记106的对应序列。将观察到,在该说明性示例中,针对未被拆分(即,具有设置为零的相关联的拆分标记)的每个子体积(节点)存在占用标记。可以对这些序列进行熵编码。

在图4中示出了采用占用≡拆分条件的另一示例。图4图示了八叉树150的递归拆分和编解码。图中仅示出了八叉树150的一部分。将FIFO 152示出为处理用于拆分的节点,以图示本进程的宽度优先性质。FIFO 152输出在FIFO 152中排队的占用节点154,以便在处理其父节点156之后进行进一步拆分。树构建器将与占用节点154相关联的子体积拆分成八个子体积(立方体)并且确定其占用。可以通过每个子体积的占用标记来指示占用。按规定的扫描顺序,标记可以被称为节点154的占用模式。可以通过表示与呈预定义扫描顺序的子体积相关联的占用标记的序列的整数来指定模式。在八叉树的情况下,模式是在范围[1,255]内的整数。

熵编码器然后基于由上下文模型指定的概率来使用非二进制算术编码器对该模式进行编码。在该示例中,概率可以基于初始分布模型的模式分布并且被自适应地更新。在一种实施方式中,模式分布实际上是已经在编解码期间遇到每种模式(从1到255的整数)的次数的计数器。可以在对每个子体积进行编解码之后更新模式分布。由于模式的相对频率与概率评估有密切关系并且与绝对计数无密切关系,因此可以根据需要对模式分布进行归一化。

基于模式,然后将被占用(例如具有标记=1)的那些子节点推送到FIFO 152中,以便依次进行进一步拆分(倘若节点不是树的最大深度)。

现在参考图5,其示出了来自八叉树的示例立方体180。将立方体180细分为八个子立方体。用于读取标记的扫描顺序产生八比特字符串,可以将该八比特字符串读取为呈二进制形式的整数[1,255]。基于扫描顺序和字符串中的每个子立方体的标记的所得比特位置,子立方体具有图5中所示出的值。倘若编码器和解码器两者使用相同的扫描顺序,那么扫描顺序可以是子立方体的任何序列。

作为示例,图6示出了占用四个“前”子立方体的立方体180。在被占用的子立方体是立方体1+4+16+64的基础上,这将对应于模式85。整数模式编号指定子立方体中的占用模式。

因为树倾向于因式分解点坐标的高阶比特,所以八叉树表示或更一般地任何树表示在表示具有空间相关性的点时是高效的。针对八叉树,每个深度层级针对每个分量将子体积内的点的坐标细化一个比特,每次细化需要花费八个比特。通过对与每个树节点相关联的拆分信息(即,模式)进行熵编解码来获得进一步压缩。因为模式分布是不均匀的(不均匀性是相关性的另一结果),所以该进一步压缩是可能的。

当前系统中的一种潜在的低效率在于,在对点云进行编解码的过程中发展了模式分布(例如在树的先前编解码的节点中看到的模式编号的直方图)。在一些情况下,模式分布可以被初始化为等概率的,或可以被初始化为某种其他预定分布;但是使用一种模式分布意味着上下文模型没有考虑或不利用局部几何相关性。

在欧洲专利申请第18305037.6号中,本申请人描述了用于基于来自特定节点附近的先前编解码的节点的一些占用信息来在用于对特定节点的占用模式进行编解码的可用模式分布之间进行选择的方法和设备。在一种示例实施方式中,从父节点到特定节点的占用模式获得占用信息。在另一种示例实施方式中,从与特定节点邻近的一个或多个节点获得占用信息。欧洲专利申请第18305037.6号的内容通过引用的方式并入本文。

现在参考图7,其以流程图形式示出了对点云进行编码的一种示例方法200。在该示例中,方法200涉及对占用节点(子体积)的递归拆分和用于编解码的树的宽度优先的遍历。

在操作202中,编码器确定当前节点的占用模式。当前节点是占用节点,其已经被拆分成八个子节点,每个子节点对应于一个相应的子立方体。当前节点的占用模式以扫描顺序指定八个子节点的占用。如上文所描述,可以使用在1与255之间的整数(例如八比特二进制字符串)来指示该占用模式。

在操作204中,编码器从概率分布集合中选择概率分布。对概率分布的选择基于来自附近的先前编解码的节点(即,作为当前节点的邻居的至少一个节点)的一些占用信息。在一些实施例中,如果两个节点与共享至少一个面的相应子体积相关联,那么这两个节点是邻近的。在更广义的定义中,如果节点共享至少一个边缘,那么这些节点是邻近的。在又一更广义的定义中,如果两个节点共享至少一个顶点,那么这两个节点是邻近的。当前节点是子节点的父模式将当前节点和七个同级节点的占用数据提供给当前节点。在一些实施方式中,占用信息是父模式。在一些实施方式中,占用信息是邻居节点集合的占用数据,该邻居节点集合包括在与当前节点处于相同的树深度层级处但具有不同父节点的节点。在一些情况下,这些的组合是可能的。例如,邻居节点集合可以包括一些同级节点和一些非同级节点。

如由操作206所指示的,一旦已经选择了概率分布,编码器然后使用所选择的概率分布来对当前节点的占用模式进行熵编码。编码器然后基于占用模式来在操作208中更新所选择的概率分布,例如编码器可以对对应于该占用模式的计数进行增量。在操作210中,编码器评估是否存在要编解码的其他节点,如果存在,那么返回至操作202以对下一个节点进行编解码。

在操作204中的概率分布选择将基于附近的先前编解码的节点的占用数据。这允许编码器和解码器两者独立地进行相同选择。针对概率分布选择的以下讨论,将参考图8,其以图表方式图示了包括当前节点302的部分八叉树300。当前节点302是占用节点并且正在进行评估以用于进行编解码。当前节点302是父节点306的八个子中的一个子,该父节点又是祖父节点(未示出)的子。将当前节点302划分为八个子节点304。当前节点302的占用模式基于子节点304的占用。例如,如所图示的,使用黑色圆点是占用节点的规范,占用模式可以是00110010,即,模式50。

当前节点302具有同级节点308,该同级节点具有相同的父节点306。父模式是父节点306的占用模式,如所图示的,占用模式将为00110000,即,模式48。父模式可以充当用于选择合适的概率分布以对当前节点的占用模式进行熵编码的基础。

图9图示了在当前节点周围的邻居集合,其中邻居被定义为共享面的节点。在该示例中,节点/子体积是立方体,并且在图像的中心处的立方体具有六个邻居,每个面存在一个邻居。在八叉树中,应了解,当前节点的邻居将包括三个同级节点。当前节点的邻居还将包括不具有相同的父节点的三个节点。因此,邻近节点中的一些邻近节点的占用数据将是可用的,这是因为他们是同级的,但是一些邻近节点的占用数据可以是或可以不是可用的,这依赖于是否先前已对那些节点进行编解码。可以将特殊处理应用于处理缺失的邻居。在一些实施方式中,缺失的邻居可以被假定为被占用或可以被假定为未占用。应了解,可以将邻居定义扩展为包括基于共享边缘或基于共享顶点的邻近节点,以在评估中包括附加的相邻子体积。

应了解,前述进程着眼于附近节点的占用,以试图确定当前节点302的占用的可能性,以便选择更合适的(多个)上下文并且使用更准确的概率以用于对当前节点302的占用数据进行熵编解码。应理解,与以关于同级节点的占用状态的评估为基础相比,与当前节点302共享面的邻近节点的占用状态可以是对当前节点302是否有可能会被隔离的更准确的评估,这些同级节点中的三个同级节点将仅共享边缘,并且这些同级节点中的一个同级节点将仅共享顶点(在八叉树的情况下)。然而,对同级的占用状况的评估具有模块化的优点,这是由于用于评估的所有相关数据都是父节点的一部分,这意味着其具有较小存储器占用来用于实施,而对邻居占用状态的评估涉及对树占用数据进行缓冲,以防在结合对未来的附近节点进行编解码来确定邻居占用状态时需要该树占用数据。

可以按有效地向每个邻居指派值的扫描顺序读取邻居的占用,这与上文相对于占用模式所描述的非常相似。如所图示的,邻近节点有效地采取值1、2、4、8、16或32,且因此,存在64(0至63)个可能的邻居占用配置。该值在本文中可以被称为“邻居配置”。作为示例,图10图示了邻居配置15的示例,在该邻居配置中,邻居1、2、4以及8被占用,而邻居16和32为空。

在一些情况下,两种上述准则(父模式和邻居配置)可以同时应用或可以在其间进行选择。例如,如果邻居可用,那么可以基于邻近节点来进行概率分布选择;然而,如果邻居中的一个或多个邻居因其来自尚未编解码的节点而不可用,那么概率分布选择可以恢复为基于同级节点的分析(父模式)。

在又一实施例中,备选地或附加地,概率分布选择可以基于祖父模式。换言之,概率分布选择可以基于作为父节点306的同级的叔父节点的占用状态。

在再一实施方式中,可以在概率分布选择中将附加或备选评估考虑进去。例如,概率分布选择可以着眼于父节点的邻居节点或祖父节点的邻居节点的占用状态。

可以在一些实施方式中组合地使用用于评估局部占用状态的上述准则中的任何两种或更多种准则。

在非二进制熵编解码器的情况下,可以通过选择概率分布来对当前节点的占用数据进行编解码。概率分布包含对应于当前节点的可能的占用模式的数目的一些概率。例如,在对八叉树的占用模式进行编解码的情况下,存在28-1=255种可能模式,这意味着每种概率分布包括255种概率。在一些实施例中,概率分布的数目可以等于选择准则中的可能占用结果的数目,即,使用邻居、同级和/或父占用数据。例如,在将八叉树的父模式用作用于确定要使用的概率分布的选择准则的情况下,将存在分别涉及255种概率的255种概率分布。在邻居配置的情况下,如果将邻居定义为共享面,那么将存在64种概率分布,其中每种分布包含255种概率。

应理解,太多的分布可以由于数据不足(即,上下文稀释)而导致缓慢的适应。因此,在一些实施例中,可以对类似模式进行分组,以便使用相同的概率分布。例如,单独分布可以用于对应于完全占用、垂直定向、水平定向、大部分为空,然后是所有其他情况的模式。这可以将概率分布的数目约简为约五个。应了解,可以形成模式的不同分组以导致不同数目的概率分布。

现在参考图11,其以图表方式示出了使用依赖于父模式的上下文的点云熵编码的进程400的一个说明性实施例。在该示例中,已经将当前节点402拆分成八个子节点,并且将使用非二进制熵编码器406对当前节点的占用模式404进行编码。非二进制熵编码器406使用从六种可能概率分布408中的一种可能概率分布中选择的概率分布。该选择基于父模式——即,该选择基于从父节点到当前节点402的占用信息。父模式通过在1与255之间的整数标识。

对概率分布的选择可以是决策树,该决策树评估了模式是否对应于整个节点(例如模式=255)、水平结构(例如模式=170或85;假设Z轴是垂直的)、垂直结构(例如模式=3、12、48、192)、稀疏填充的分布(例如模式=1、2、4、8、16、32、64或128;即,同级节点中没有一个同级节点被占用)、半稀疏填充的分布(当前节点和同级节点之间的被占用的节点的总数≤3)以及所有其他情况。针对不同类别指示的示例模式仅仅是示例。例如,“水平”类别可以包括涉及相同水平层级上的两个或三个被占用的立方体的模式。“垂直”类别可以包括涉及呈壁状布置的三个或四个被占用的立方体的模式。还应了解,可以使用更精细的分级。例如,可以将“水平”类别进一步细分为立方体的上部部分中的水平和立方体的下部部分中的水平,其中每种情况存在不同的概率分布。可以进行对具有某种相关性的占用模式的其他分组,并且将其分配给对应概率分布。下文进一步阐述了关于邻居配置的上下文中的模式分组和邻居配置之间的不变性的进一步讨论。

图12示出了使用依赖于邻居配置的上下文的点云熵编码的进程500的说明性实施例。该示例假设上文结合图9所使用的邻居和邻居配置编号的定义。该示例还假定了每个邻居配置具有专用的概率分布,这意味着存在64种不同的概率分布。当前节点502具有待编码的占用模式504。基于当前节点502的邻近节点来选择概率分布。即,找到[0,63]中的邻居配置NC并且将其用于选择相关联的概率分布。

应了解,在一些实施例中,可以对邻居配置进行分组,使得一个以上的邻居配置基于模式中的类似性来使用相同概率分布。在一些实施例中,进程可以使用邻居的不同布置来进行对分布的上下文分析(选择)。可以添加附加邻居,诸如在所有的三个轴上对角相邻的八个邻居、或在两个轴上对角相邻的十二个邻居。还可以使用避开特定邻居的实施例,例如以避免使用在深度优先的扫描中引入附加依赖性的邻居或仅引入对特定轴的依赖性以便约简大树的编解码器状态。

在该示例中,以特定方式处理NC=0的情况。如果不存在被占用的邻居,那么可以指示当前节点502被隔离。因此,进程500进一步检查当前节点502的占用子节点的数目。如果只有一个子节点被占用(即,NumberOccupied(NO)等于1),那么对标记进行编码,该标记指示了单个子节点被占用并且使用3个比特对节点的索引进行编解码。如果一个以上的子节点被占用,那么进程500使用NC=0种概率分布来对占用模式进行编解码。

现在参考图13,其以流程图形式示出了用于对编码的点云数据的比特流进行解码的一种示例方法600。

在操作602中,解码器基于来自当前节点附近的一个或多个节点的占用信息来选择概率分布中的一种概率分布。如上文所描述,占用信息可以是从父节点到当前节点的父模式(即,当前节点及其同级的占用),或其可以是当前节点的邻近节点的占用,这些邻近节点可以包括同级节点中的一些同级节点。在一些实施方式中可以使用其他或附加占用信息。

一旦已经选择了概率分布,则在操作604中,解码器就使用所选择的概率分布来对比特流的一部分进行熵解码,以重构当前节点的占用模式。占用模式由解码器用于重构树,以便重构编码的点云数据。一旦对点云数据进行了解码,就可以从解码器输出这些点云数据以供使用,诸如用于渲染视图、分割/分类或其他应用。

在操作606中,解码器基于重构的占用模式来更新概率分布,然后如果存在要解码的其他节点,那么其移动至缓冲器中的下一个节点并返回操作602。

已经证明上述方法的示例实施方式提供了压缩改进,其中编解码复杂度的增加可忽略不计。尽管基于邻居的选择具有更高的运算复杂度和更大的存储器使用量,但是基于邻居的选择显示出比基于父模式的选择更好的压缩性能。在一些测试中,每点比特数相对于MPEG点云测试模型的相对改进在4%与20%之间。已经注意到,与利用均匀分布进行初始化相比,基于利用测试数据得出的分布来初始化概率分布致使性能提高。

以上示例中的一些示例是基于树编解码进程的,该树编解码进程使用非二进制编解码器来表示占用模式。下文进一步提出了采用二进制熵编解码器的新发展。

在基于邻居的概率分布选择的一种变型中,可以通过利用邻域的对称性来约简分布的数目。通过置换邻域或置换模式分布,具有对称线的结构类似的配置可以重新使用相同分布。换言之,可以将可使用相同模式分布的邻居配置分组为类别。包含一个以上的邻居配置的类别在本文中可以被称为“邻居配置”,这是由于这些邻居配置中的一个邻居配置通过反射或置换那些其他配置的方式来将其他邻居配置有效地归入于内。

作为示例,考虑了分别表示拐角邻居模式的对称性的八种拐角模式NC∈[21,22,25,26,37,38,41,42]。NC的这些值有可能与节点的特定但不同的模式良好地相关。这些相关模式还有可能遵循与邻居模式相同的对称性。作为示例,可以实施重新使用单个分布表示NC的多种情况的方法,该重新使用是通过置换该分布的概率来实现的。

编码器基于子节点的占用来导出节点的模式编号。编码器根据邻居配置来选择分布和置换函数。编码器根据置换函数对包含在分布内的概率进行重新排序,随后使用经过置换的分布对模式编号进行算术编码。算术编码器对置换分布的概率的更新通过逆置换函数而被映射回原始分布。

对应解码器首先根据邻居配置来选择相同的分布和置换函数。以与编码器相同的方式产生置换分布,其中经过置换的分布由算术解码器用于对模式编号进行熵解码。然后将包括模式编号的比特分别指派给对应子。

应注意,可以实现相同置换,但不重新排序分布本身的数据,而是引入间接层级并且使用置换函数来置换对分布中的给定索引的查找。

备选实施例考虑模式本身的置换而非分布,从而允许分别在熵编码/解码之前或之后进行重排。这种方法有可能更适合于通过逐比特的重排操作进行高效实施。在这种情况下,编码器或解码器中任一者均不执行分布的重新排序,而是将编码模式编号的运算修改为其中ci是第i个子的占用状态,并且σ(i)是置换函数。一个这种示例置换函数允许将NC=22的分布用于NC=41的分布。可以由解码器使用置换函数,以使用从编码的模式编号中导出子节点的占用状态。

用于导出所需置换的方法可以基于邻居配置的旋转对称性或可以基于沿着特定轴的反射。此外,不必使置换根据例如对称性来置换所有位置;相反,可以使用部分置换。例如,当将NC=22置换为NC=41时,对称轴中的位置可能不会被置换,从而产生了映射其中位置0、2、4、6不会被置换。在其他实施例中,仅调换了对1和7。

在下文中针对具有与当前立方体共享公共面的六个邻居的八叉树的特殊情况提供了基于旋转对称性和反射的实施例的示例。在不损失一般性的情况下,如图16中所示出,Z轴相对于查看图的方向垂直地延伸。然后,应该将邻居的相对位置、诸如“上方”(相应地“下方”)理解为沿着Z轴在增大(相应地减小)的Z方向上。相同注释适用于沿着X轴的左/右以及沿着Y轴的前/后。

图16分别示出了沿着Z、Y以及X轴的三种旋转2102、2104以及2106。这三种旋转的角度为90度,即,这三种旋转沿着其相应的轴执行四分之一圈的旋转。

图17示出了在沿着Z轴的旋转2102的一次或数次迭代下的邻居配置的不变性类别。该不变性表示沿着属于XY平面的任何方向的点云几何形状的相同统计行为。对于在通过XY平面局部近似的地球表面上移动的汽车的用例尤其如此。独立于上方邻居(2202)和下方邻居(2204)的占用,水平配置是四个邻居(位于当前立方体的左、右、前以及后)的给定占用。在旋转2102下,四个水平配置2206、2208、2210以及2212属于相同类别的不变性。类似地,两个配置2214和2216属于相同类别的不变性。在旋转2102下仅存在六种类别的不变性(在类别集合2218下进行分组)。

独立于位于当前立方体的左、右、前以及后的四个邻居的占用,垂直配置是两个邻居2202和2204的给定占用。如图18中所示出,存在四种可能的垂直配置。因此,如果人们考虑到相对于沿着Z轴的旋转2102的不变性,那么存在6×4=24个可能配置。

在图16中示出了沿着Z轴的反射2108。图18中所描绘的垂直配置2302和2304在反射2108下属于相同类别的不变性。在反射2108下存在三种类别的不变性(在类别集合2306下进行分组)。在反射2108下的不变性意味着在点云几何形状统计方面,向上方向和向下方向的行为基本上相同。这是对在道路上的正在移动的汽车的准确假设。

如果人们假设了在旋转2102和反射2108两者下的不变性,那么存在由两个集合2218与2306的乘积得到的18种类别的不变性。在图19中表示了这18种类别。

在两个其他旋转2104和2106下应用另外的不变性,这两个配置2401和2402属于相同类别的不变性。此外,两个配置2411和2412、两个配置2421和2422、三个配置2431、2432以及2433、两个配置2441和2442、两个配置2451和2452以及最后两个配置2461和2462都属于相同类别。因此,在三种旋转(2102、2104以及2106)和反射2108下的不变性引起10种类别的不变性,如图20中所示出。

根据在上文中所提供的示例,假设或不假设在三种旋转和反射下的不变性,有效邻居配置的数目(即,可以对64个邻居配置进行分组的类别)为64、24、18或10中的任一者。

在熵编解码之前,模式经历相同变换(即,旋转和反射),这是由于邻居配置确实属于不变性类别中的一种不变性类别。这保留了不变的邻居配置与编解码模式之间的统计一致性。

还应理解,在遍历树期间,子节点将具有在相同的树深度下的某些邻近节点,这些邻近节点先前已经被访问并且可以有因果地用作依赖关系。针对这些相同层级的邻居(即,与子节点处于相同层级处),代替咨询父并置邻居,可以使用相同层级的邻居。由于相同层级的邻居具有父的减半尺寸,因此如果四个直接相邻的邻近子节点(即,与当前节点共享面的四个子节点)中的任何邻近子节点被占用,那么一个配置考虑了被占用的邻居。因此,如下文将更详细地描述的,可以基于当前节点的邻近节点的占用数据并且进一步基于邻近节点中至少一个邻近节点的子节点的占用数据,来确定当前节点的邻居配置。因此,不仅可以基于当前节点的多个(相同层级,即,与当前节点处于相同层级处)邻近节点的占用数据,而且还可以基于多个(相同层级)邻近节点中的至少一个(可能地所有)邻近节点的子节点的占用数据,来选择与用于对当前节点的占用模式进行熵编解码(例如二进制熵编解码)的相应熵编解码器相关联的一种或多种概率。

现在参考图27,其示出了当前节点(即,其相关联的(子)体积或当前(子)体积)4000及其六个邻居4010、4020、4030、4040、4050以及4060。针对八叉树的当前示例,当前节点的邻居可以是其相关联的体积与当前体积共享面的那些节点(在树的相同层级或深度处)。邻近节点的其他定义也是可行的。例如,当前节点的邻居可以是如下那些节点(在树的相同层级或深度处):其相关联的体积与当前体积共享边缘(或顶点)。通常,不考虑树的结构如何,邻近节点可以是如下那些节点(在树的相同层级或深度处):其相关联的体积与当前体积相交。

在本申请的上下文中,应理解,彼此相交的体积(节点)是相邻体积(节点)。因此,在本申请的上下文中可以将术语“与……相交”和“与……相邻”视为是同义的。

值得注意的是,在每个子体积本身是可以细分为子体积的体积的意义上,表达“体积”和“子体积”可以在某种程度上互换地使用。在任何情况下,通过指定所涉及的节点/体积之间的父子关系,可以清楚地理解体积/子体积关系。

假设按宽度优先的方式,以增加X顺序、然后以增加Y顺序且最后以增加Z顺序来执行节点的扫描顺序。这样做,已经对具有最低X坐标(即,邻居4010)、最低Y坐标(即,邻居4030)以及最低Z坐标(即,邻居4050)的三个邻居进行了编解码。因此,如果这三个邻居中的一个邻居被占用,那么与被占用的邻居相关联的占用子体积的配置是已知的。虽然本示例以增加X顺序、然后以增加Y顺序且最后以增加Z顺序定义了扫描顺序,但其他宽度优先的扫描顺序也可以用于本目的。

现在参考图28,其示出了所有的三个已经被编解码的邻居(即,邻居4010、4030以及4050)都被占用的示例性当前体积。邻居4010的占用子体积是子体积4011、4012以及4013;邻居4030的占用子体积是子体积4031、4032以及4033;且邻居4050的占用子体积是子体积4051和4052。在该示例中,所有的三个已经被编解码的邻居都被占用,但是应理解,通常实际上只有两个邻居或两个邻居中的一个邻居可以被占用,或甚至他们中没有一个邻居被占用。

已经被编解码的占用邻居的占用子体积的知识可以用于在邻居占用配置的运算中细化邻居的占用状态。现在参考图29(a),其中邻居4010已经占用了子体积4014和4015,并且他们中没有一个与当前体积4000共享面。在这种情况下,在邻居占用配置的运算中将邻居4010视为未占用可以是有利的。在图29(b)中,邻居4010的子体积4016和4017中的至少一个子体积与当前体积4000共享面。在这种情况下,在邻居占用配置的运算中将邻居4010视为被占用。

现在参考图30,其以流程图形式示出了对点云进行编码以生成压缩后的点云数据的比特流的方法4100的示例。将点云定义为具有多个节点的树形结构(例如八叉树),多个节点具有父子关系并且其表示体积空间的几何形状,该体积空间被递归地拆分成子体积并且包含点云的点。下文所描述的方法4100的操作分别针对与被拆分成其他子体积的(子)体积相关联的当前节点而执行,每个其他子体积对应于当前节点的子节点。在操作4110中,基于子节点的占用状态来确定当前节点的占用模式。在操作4120中,选择与相应熵编解码器相关联的一种或多种概率(例如上下文)以便对占用模式进行熵编码。该选择基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点(可能地邻近节点中的所有邻近节点)的子节点的占用数据。在操作4130中,使用相关联的一个或多个熵编解码器,基于所选择的一种或多种概率来对占用模式进行熵编码,以产生用于比特流的编码数据。

在一些实施方式中,方法4100还可以包括基于占用模式来更新一种或多种所选择的概率的操作(在图30中未示出)。

可以使用非二进制熵编解码器来对当前节点的占用模式进行熵编解码。在这种情况下,在方法4100的操作4120中选择一种或多种概率可以对应于或涉及选择概率分布(和相关联的非二进制熵编解码器)用于对占用模式进行熵编解码。更新一种或多种所选择的概率然后可以对应于或涉及更新所选择的概率分布。

另一方面,如下文将更详细地描述的,可以使用一个或多个二进制熵编解码器的级联来对当前节点的占用模式进行熵编解码。因此,方法4100的操作4120可以涉及:针对表示占用模式的比特序列的每个比特,选择用于对该比特进行编解码的相应概率(且对应地,相关联的熵编解码器)。选择该概率可以基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点(可能地所有邻近节点)的子节点的占用数据。此外,选择该概率可以基于比特序列的已经被编解码的比特的部分序列。换句话说,针对比特序列的每个比特,可以基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点(可能地所有邻近节点)的子节点的占用数据来选择上下文。此外,选择上下文可以基于比特序列的已经被编解码的比特的部分序列。就上下文而言,可以说方法4100的操作4120涉及:基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点(可能地所有邻近节点)的子节点的占用数据来选择用于对占用模式进行熵编解码的上下文。然后,在一些实施方式中,可以基于占用模式来更新该上下文。

现在参考图31,其以流程图形式示出了对压缩后的点云数据的比特流进行解码以产生重构的点云的方法4200的示例。点云在具有多个节点的树形结构(例如八叉树)中进行定义,多个节点具有父子关系并且其表示体积空间的几何形状,该体积空间被递归地拆分成子体积并且包含点云的点。下文所描述的方法4200的操作分别针对与被拆分成其他子体积的子体积相关联的当前节点而执行,每个其他子体积对应于当前节点的子节点。在操作4210中,选择与用于对占用模式进行熵解码的相应熵编解码器相关联的一种或多种概率。该选择基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点的子节点的占用数据。在操作4220中,使用一个或多个相关联的熵编解码器,基于所选择的一种或多种概率来对比特流进行熵解码,以产生用于当前节点的表示子节点的占用的重构占用模式。在一些实施方式中,方法4200还可以包括基于重构占用模式来更新一种或多种所选择的概率的操作(在图31中未示出)。

可以使用非二进制熵编解码器来对当前节点的占用模式进行熵编解码。在这种情况下,在方法4200的操作4210中选择一种或多种概率可以对应于或涉及选择概率分布(和相关联的非二进制熵编解码器)用于对占用模式进行熵编解码。更新一种或多种所选择的概率然后可以对应于或涉及更新所选择的概率分布。

另一方面,可以使用一个或多个二进制熵编解码器的级联来对当前节点的占用模式进行熵编解码。然后,按照与用于编码的方式相同的方式,方法4200的操作4210可以涉及:针对表示占用模式的比特序列的每个比特,选择用于对该比特进行编解码的相应概率(且对应地,相关联的熵编解码器)。选择该概率可以基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点(可能地所有邻近节点)的子节点的占用数据。此外,选择该概率可以基于比特序列中的已经被编解码的比特的部分序列。换句话说,针对比特序列的每个比特,可以基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点(可能地所有邻近节点)的子节点的占用数据来选择上下文。此外,选择上下文可以基于比特序列中的已经被编解码的比特的部分序列。就上下文而言,可以说方法4200的操作4210涉及:基于当前节点的多个邻近节点的占用数据和多个邻近节点中的至少一个邻近节点(可能地所有邻近节点)的子节点的占用数据来选择用于对占用模式进行熵编解码的上下文。然后,在一些实施方式中,可以基于重构占用模式来更新该上下文。

在方法4100和方法4200的一些实施方式中,在操作4120和4210处的相应选择可以基于邻近配置。如上文所描述的,可以基于当前节点的(相同层级)邻近节点的占用数据来确定邻近配置。进一步地,多个邻近节点中的至少一个邻近节点(可能地所有邻近节点)的子节点的占用数据可以用于适应邻居配置的计算。具体地,多个邻近节点中的给定邻近节点的子节点的占用数据可以用于确定是否应该将给定邻近节点视为出于计算邻居配置的目的而被占用。将参考图32描述了邻近配置的计算的这种适应的一个示例。

现在参考图32,其以流程图形式示出了用于决定邻居配置的运算中的邻居(邻近节点)的占用的一种示例方法4300。针对当前体积执行方法,以确定当前体积的邻居配置。在操作4310中,选择当前体积的邻居。针对每个所选择的邻居,在操作4330中检查邻居的占用。如果邻居未被占用(在操作4330中为“否”),那么方法继续进行到操作4340,并且所选择的邻居将被视为在邻居占用配置的运算中为未占用(例如具有为零的占用比特)。即,这种邻居的占用被视为用于确定邻居配置。方法随后继续进行到操作4320。如果所选择的邻居被占用(在操作4330中为“是”),那么在操作4350中检查是否已经对该邻居进行了编解码。如果尚未对该邻居进行编解码(在操作4350中为“否”),那么方法继续进行到操作4360,并且尚未编解码的邻居将被视为在邻居占用配置的运算中被占用。同样针对这种邻居,这种邻居的占用被视为用于确定邻居配置。方法随后继续进行到操作4320。如果已经对所选择的邻居进行了编解码(在操作4350中为“是”),那么在操作4370中检查已经被编解码的邻居的占用子体积中的至少一个子体积是否与当前体积共享面。一般而言,在操作4370中检查已经被编解码的邻居的占用子体积中的至少一个子体积是否与当前体积相交。如果是相交(在操作4370中为“是”),那么方法继续进行到操作4360,并且已经被编解码的邻居将被视为在邻居配置的运算中被占用。因此,同样针对这种邻居,其占用被视为用于确定邻居配置。否则(在操作4370中为“否”),那么方法继续进行到操作4340,并且已经被编解码的邻居将被视为在邻居配置的运算中未占用。即,在确定邻居配置时,该邻居的占用比特将被(故意地/人为地)设置为零。方法随后继续进行到操作4320。在操作4320中,检查是否存在当前体积的尚未被选择的邻居。如果是(在操作4320中为“是”),那么方法返回到操作4310以选择当前体积的下一个邻居。一旦已经处理了所有邻居(在操作4320中为“否”),那么在操作4380中依赖于在操作4340中或在操作4360中决定的邻居的相应占用(例如占用比特)来计算邻居配置。该运算可以以与上述方式相同的方式继续进行,但是考虑到了如在操作4340和4360中确定的当前体积的邻居的占用。其中,可以说操作4340仅基于相应邻居的占用数据相对于直接确定来修改占用。同样,可以说所确定的邻居配置相对于直接确定而被修改,但不考虑已经被编解码的邻居的子体积的占用数据。

除非比特流中的去激活标记指示应该使用原始邻居配置,否则使用邻居的修改后的占用确定的(修改后的)邻居配置可以分别用于选择在方法4100的操作4120中和方法4200的操作4210中的一种或多种概率。下文对此进行了更详细地描述。

已经证明方法4100、4200以及4300在不考虑已经被编解码的占用邻居的子体积的情况下相对于直接确定邻居配置在点云的几何形状上提供了高于1%的压缩增益。

应理解,在上文中所描述的方法不限于与当前体积共享面的邻居(或邻居的子体积)。例如,当前体积的邻居可以是与当前体积共享面或边缘的所有那些相同层级的体积。然后,将必须通过检查邻居是否具有与当前体积共享面或边缘的占用子体积来替换方法4300的操作4370中的判据。在图33中图示了此邻居定义的示例。作为另一示例,当前体积的邻居可以是与当前体积共享面、边缘或顶点的所有那些相同层级的体积。然后,将必须通过检查邻居是否具有与当前体积共享面、边缘或顶点的占用子体积来替换方法4300的操作4370中的判据。在图34中图示了此邻居定义的示例。

在一般情况下,当前体积的邻居可以是与当前体积相交的所有那些相同层级的体积。而且,无论当前体积的邻居的定义如何,都可以通过检查邻居是否具有与当前体积相交的占用子体积来替换方法4300的操作4370中的判据。换言之,应理解,可以将方法4100、4200以及4300应用于具有相关联的体积的节点的任何树,其中将当前节点的邻近节点定义为具有与当前节点相同的深度(层级)的节点,针对该节点,相关联的体积与关联于当前节点的当前体积具有非空交集。例如,该交集可以是面、边缘、顶点或任何非空点集合。当且仅当已经被编解码的占用邻居的占用子节点中的至少一个子节点具有相关联的体积(其与当前体积具有非空交集)时,才在邻居占用配置的运算中将已经被编解码的占用邻居视为被占用。

现在参考图33,其示出了与当前体积4000共享边缘的邻近体积4070。在图33(a)中,邻居4070已经占用了子体积4071和4072,并且他们中没有一个子体积与当前体积4000共享边缘。在这种情况下,在邻居占用配置的运算中将邻居4070视为未占用。在图33(b)中,邻居4070的子体积4073和4074中的至少一个子体积与当前体积4000共享边缘。在这种情况下,在邻居占用配置的运算中将邻居4070视为被占用。

现在参考图34,其示出了与当前体积4000共享顶点的邻近体积4080。在图34(a)中,邻居4080已经占用了子体积4081和4082,并且他们中没有一个子体积与当前体积4000共享顶点。在这种情况下,在邻居占用配置的运算中将邻居4080视为未占用。在图34(b)中,邻居4070的子体积4083和4084中的至少一个子体积与当前体积4000共享顶点。在这种情况下,在邻居占用配置的运算中将邻居4078视为被占用。

已经观察到方法4100、4200以及4300在密集的面向虚拟现实的点云上提供了超过1%的压缩增益,即,压缩后的比特流大小的超过1%的约简。相对于方法的简易性,存在令人感兴趣的增益。

然而,在例如通过附接至移动车辆的Lidar捕获到的稀疏点云上,这些方法可以显示少许增益或没有增益(或甚至在极其稀疏的点云中显示甚至轻微的损失)。因此,将表示当前体积的邻居的占用的适应的激活(标记值1)或去激活(标记值0)的标记添加到比特流中可以是有利的。去激活意味着在邻居占用配置的运算中将邻居视为被占用/未占用,而与邻居的占用子节点的地点无关。

使用二进制编解码来对树占用模式进行熵编解码

在欧洲专利申请第18305037.6号中详述了使用邻居占用信息来对树占用进行编解码的上述技术中的一些技术。所描述的实施例将重点放在使用占用模式的非二进制熵编解码上,其中基于邻居占用信息来选择模式分布。然而,在一些情况下,使用二进制编解码器就硬件实施而言可以是更高效的。而且,对许多概率的运行中更新可能需要在算术编解码器的心脏内的快速接入存储器和运算。因此,找到用于使用二进制算术编解码器对占用模式进行熵编码的方法和设备可以是有利的。如果可以在不显著地降低压缩性能的情况下完成使用二进制编解码器且同时防范要跟踪的上下文数目过多,那么使用二进制编解码器将是有利的。

在熵公式中反映了使用二进制编解码器代替非二进制编解码:

H(X1,X2|Y)=H(X1|Y)H(X2|Y,X1)

其中X=(X1,X2)是要编解码的非二进制信息,且Y是用于编解码的上下文,即,邻居配置或所选择的模式分布。为了将X的非二进制编解码转换为二进制编解码,将信息(X1,X2)拆分成信息X1和X2,可以在不增加熵的情况下分别对这些信息进行编解码。为此,两种信息中的一种信息必须依赖于另一种信息来编解码,此处X2依赖于X1。这可以扩展为X中的n个比特的信息。例如,针对n=3:

H(X1,X2,X3|Y)=H(X1|Y)H(X2|Y,X1)H(X3|Y,X1,X2)

应理解,随着占用模式(即,比特序列X)变得越长,存在用于对序列中的较后的比特进行编解码的更多条件。针对二进制编解码器(例如CABAC),这意味着要跟踪和管理的上下文的数目大大增加。以八叉树为例,其中占用模式是八比特序列b=b0…b7,可以将比特序列拆分成八个二进制信息比特b0…b7。编解码可以使用邻居配置N(或NC)来确定上下文。假设如上文所描述,可以通过将邻居配置分组为不变性类别来将邻居配置约简至10个有效邻居配置,则N是属于{0,1,2,…,9}的整数。出于简写起见,“不变的邻居配置的类别”在本文中有时可以被简称为“邻居配置”,但应了解,可以基于根据不变性来对邻居配置进行基于类别的分组,进而实现该数目约简的邻居配置。

图21图示了将八比特模式或序列拆分成八个单独比特以用于进行二进制熵编解码。应注意,基于邻居配置来对序列的第一比特进行编码,因此存在总共十个上下文可用。基于邻居配置和任何先前编码的比特(即,比特b0)来对序列的下一个比特进行编码。这包含总共20个可用上下文:作为来自N的10与来自b0的2的乘积而获得。使用从1280个可用上下文中选择的上下文来对最终比特b7进行熵编码:作为来自N的10与来自由先前编码的比特b0、...、b6给定的部分模式的128的乘积而获得。即,针对每个比特,上下文的数目(即,条件/依赖性的可能组合)是所定义的邻居配置的数目(在此示例中为10个,基于将64个邻居配置分组为类别)与来自n-1个先前编码的比特的有序序列(由2n-1给定的)的可能的部分模式的数目的乘积。

因此,总共存在要结合占用模式的二进制编解码维持的2550个上下文。这是要跟踪的大量上下文,并且相对不足可以由于上下文稀释而导致不佳性能,尤其是对于序列中的较晚的比特。

因此,在一个方面中,本申请公开了确定是否可以约简上下文集合的编码器和解码器,并且如果确定可以,那么应用上下文约简操作以实现更小的可用上下文集合,以便使用二进制编解码器来对占用模式的至少部分进行熵编解码。在另一方面中,本申请还公开了编码器和解码器,该编码器和解码器使用相同的上下文约简操作来应用一轮或多轮状态约简,以便从固定数目的上下文中执行有效的上下文选择。在一些实施方式中,在生成上下文和/或算法条件的查找表时先验地应用上下文约简,然后通过编码器或解码器在选择合适的上下文时使用该查找表。约简基于可测试的条件,编码器和解码器评估可测试的条件以确定要从哪个查询表中进行选择或如何从该查询表中进行索引/选择以获得所选择的上下文。

现在参考图22,其以流程图方式示出了用于使用二进制编解码在基于树的点云编解码器中对占用模式进行编解码的一种示例方法3000。方法3000可以通过编码器或解码器来实施。在编码器的情况下,正在对编解码操作进行编码,且在解码器的情况下,正在对编解码操作进行解码。编码和解码是基于上下文的熵编码和解码。

示例方法3000用于对特定节点/体积的占用模式(即,比特序列)进行熵编解码。占用模式表示节点/体积的子节点(子体积)的占用状态。在八叉树的情况下,存在八个子节点/子体积。在操作3002中,确定邻居配置。邻居配置是一个或多个体积的占用状态,该体积邻近占用模式将要为其进行编解码的体积。如上文所讨论的,存在用于确定邻居配置的各种可能的实施方式。在一些示例中,存在10个邻居配置,并且基于与当前体积共享面的六个体积的占用来标识当前体积的邻居配置。

在操作3004中,将当前体积的子节点的索引i设置为0。然后,在操作3006中,评估上下文约简是否为可能的。下文更详细地讨论了不同的可能上下文约简操作。可以基于例如正在对比特序列中的哪个比特(例如索引值)进行编解码,评估上下文约简是否为可能的。在一些情况下,对于序列中的较晚的比特而非对于前几个比特,上下文约简可以是可能的。评估上下文约简是否为可能的可以例如基于邻居配置,这是由于某些邻居配置可以实现简化。在一些实施方式中,可以使用附加因素来评估上下文约简是否为可能的。例如,可以提供上限Bo作为二进制编解码器可以用于对比特进行编解码的上下文的最大数目,并且如果用于对比特进行编解码的上下文的初始数目高于Bo,那么应用上下文约简(否则不应用上下文约简),使得在约简之后的上下文数目最多为Bo。这种界限Bo可以在编码器和/或解码器规范中进行定义,以便确保能够处理Bo上下文的软件或硬件实施将始终能够在不生成就上下文的数目而言的上溢的情况下对点云进行编码和/或解码。预先知道界限Bo还允许预期由二进制熵编解码器引起的复杂度和存储器占用,因而有助于硬件的设计。Bo的典型值是从十到几百。

如果将上下文约简确定为可用,那么在操作3008中,应用上下文约简操作。上下文约简操作将可用上下文集合中的可用上下文的数目约简为包含更少的总上下文的更小集合。将回顾的是,由于上下文可以依赖于来自比特序列的先前编解码的比特的部分模式,因此可用上下文的数目可以部分地依赖于序列中的比特位置,即,索引。在一些实施方式中,在约简之前,在集合中可用的上下文的数目可以基于邻居配置的数目乘以可能的部分模式的数目连同先前编解码的比特。针对索引i处的比特(其中i的范围介于0至n),部分模式的数目将由2i给定。

如上文所提及,在一些实施方式中,在编解码之前进行上下文约简操作,并且所产生的约简的上下文集合是在编解码操作期间可供编码器和解码器使用的上下文集合。在编解码期间使用和/或选择约简的上下文集合可以基于评估一个或多个条件,该评估一个或多个条件先于使用那些约简集合,这些约简集合对应于在用于确定可以约简上下文的数目的操作3006中评估的条件。例如,在允许使用约简的上下文集合的特定邻居配置的情况下,编码器和/或解码器可以首先确定是否满足该邻居配置条件,然后如果满足该邻居配置条件,那么使用对应的约简的上下文集合。

在操作3010中,基于邻居配置和比特序列中的先前编解码的比特的部分模式来确定比特bi的上下文,即,从可用上下文的集合(或约简集合,若存在)中选择比特bi的上下文。然后在操作3012中,通过熵编解码器使用所选择的上下文来对当前比特进行熵编码。

在操作3014中,如果索引i指示当前编解码的比特是序列中的最后一个比特(即,i等于imax),那么编解码进程前进到下一个节点。否则,在操作3016中使索引i递增,并且进程返回至操作3006。

应了解,在一些实施方式中,上下文选择可以不依赖于邻居配置。在一些情况下,可以仅依赖于序列中的先前编解码的比特的部分模式(若存在)。

在图23中图示了示例编码器3100的一部分的简化框图。在该图示中,应理解,在对应体积被分成子节点并且循环通过保留点云的几何形状的FIFO缓冲器3104时获得占用模式3102。将占用模式3102的编码图示为涉及二进制编码器3106的级联,模式的每个比特存在一个二进制编解码器。在二进制编解码器3106中的至少一些二进制编解码器之间的是上下文约简操作3108,其操作以将可用上下文约简为更小的可用上下文集合。

尽管图23图示了一系列二进制编解码器3106,但在一些实施方式中,仅使用一个二进制编解码器。在使用一个以上的编解码器的情况下,可以使编解码(部分地)并行化。考虑到一个比特对比特序列中的前述比特的上下文依赖性,模式的编解码可能并不一定完全并行化,但有可能通过针对模式使用级联的二进制编解码器来改进流水线化,以实现一定程度的并行化和速度提高。

上下文约简操作

以上示例提出,编解码进程包括相对于占用模式的至少一个比特的上下文约简操作,以便将可用上下文集合约简为更小的可用上下文集合。在此意义上,可以将“上下文约简操作”理解为标识和合并在特定比特bi的情况下被视为重复或冗余的上下文。如上文所提及,可以在编解码之前确定约简的上下文集合,并且可以将该约简的上下文集合提供给编码器和解码器,并且编码器和解码器基于下文所描述的用于约简上下文集合的相同条件来确定是否要使用约简的上下文集合。

通过筛选/屏蔽的邻居配置约简

第一示例上下文约简操作涉及基于筛选/屏蔽来约简邻居配置的数目。原则上,在邻近体积帮助指示当前体积或子体积是否有可能会被占用的基础上,邻居配置将邻近体积的占用状态纳入上下文选择进程的考虑中。在对与当前体积中的子体积相关联的比特进行解码时,则也将他们纳入上下文选择的考虑中;然而,来自附近的子体积的信息可以比位于来自当前子体积的子体积的另一侧上的邻近体积的占用信息更为重要且更具信息性。在此意义上,先前解码的比特与“筛选”或“屏蔽”邻近体积的子体积相关联。这可以意味着在此类情况下,可以忽略邻近体积的占用,这是由于其占用状态的相关性由当前子体积与邻近体积之间的子体积的占用状态归入于内,从而允许约简邻居配置的数目。

现在参考图24,其以图表方式示出了基于邻居筛选的示例上下文约简操作。示例涉及对体积3200的占用模式进行编解码。占用模式表示体积3200内的八个子体积的占用状态。在该示例中,已经对体积3200的上半部分中的四个子体积进行了编解码,因此这四个子体积的占用状态是已知的。正在编解码的占用模式的比特与第五子体积3204相关联,该第五子体积位于体积3200的在四个先前编解码的子体积下方的下半部分中。

在该示例中,编解码包括:基于邻居配置来确定上下文。示出了10个邻居配置3202。包含要编解码的第五子体积3204的体积3200以浅灰色示出并且利用附图标记3200进行指示。邻居配置3202基于与体积3200相邻并且与该体积3200共享面的体积的占用状态。邻近体积包括顶部邻近体积3206。

在该示例中,可以通过忽略配置中的至少一些配置中的顶部邻近体积3206将邻居配置的数目从10个约简到7个。如图24中所示出,可以将示出了顶部邻近体积3206的四个配置中的三个配置归入于不计入顶部邻近体积3206中的等效配置下,从而将邻居配置的数目约简为总共7个。保持示出了所有的六个邻近体积的配置仍然可以是有利的,这是由于不存在可以合并6体积配置的现有5体积邻居配置(已经消除了一个5元素),这意味着即使移除了顶部邻近体积,也会产生新的5元素邻居配置,并且不会发生上下文中的整体约简。

在该示例中,可以从邻居配置中消除顶部邻近体积3206,这是因为用于对与第五子体积3204相关联的占用比特进行编解码的上下文确定将已经考虑到其正上方的四个先前编解码的子体积的占用状态,与更远的顶部邻近体积3206的占用状态相比,该四个先前编解码的子体积更好地指示了第五子体积的占用的可能性和方向性。

通过先前编解码的子体积在对与第五子体积3204对应的占用比特进行编解码时筛选或屏蔽顶部邻近体积3206的以上示例仅仅是一个示例。依赖于体积3200内的编解码顺序,可以实现并利用多种其他可能的筛选/屏蔽情况来约简可用邻居配置。

现在参考图25,其示出了筛选/屏蔽的第二示例。在该示例中,体积3200的占用模式几乎被完全编解码。要编解码的子体积是第八子体积并且在后方的底部拐角(不可见)处隐藏于图中。在这种情况下,已经对所有的七个其他子体积的占用状态进行编解码。具体地,沿着顶部(因此将邻居配置约简为总共七个)以及沿着右侧和前侧的子体积。因此,除了筛选顶部邻近体积之外,具有先前编解码的占用比特的子体积屏蔽了前方邻近体积3210和右侧邻近体积3212。这可以允许将邻居配置从总共七个约简为总共五个,如所图示的。

应了解,屏蔽的两个前述示例是说明性的,并且在一些情况下,可以合并不同配置以解决不同的屏蔽情况。基于通过先前编解码的子体积进行的屏蔽/筛选的上下文约简操作是一般性的,并且不限于这两个示例,但应了解,在要编解码的第一子体积的情况下无法应用该上下文约简操作,这是由于需要存在与附近子体积相关联的至少一个先前编解码的占用比特,以便用于进行任何屏蔽/筛选。

还应了解,在不同实施方式中,证明邻居配置约简的屏蔽/筛选的程度可以是不同的。在两个上述示例中,在将邻近体积视为屏蔽/筛选且因此从邻居配置中移除该邻近体积之前,与邻近体积共享面的所有的四个子体积已经预先进行了编解码。在其他示例中,部分屏蔽/筛选可以是足够的,例如,从一个先前编解码的子体积到共享面的三个先前编解码的子体积

通过特殊情况处理的上下文约简

存在可以在不损失有用信息的情况下发生上下文约简的某些情况。在上文所描述的示例上下文确定进程中,用于对占用比特进行编解码的上下文基于邻居配置(即,与当前体积邻近的体积的占用模式)和可归因于当前体积中的先前编解码的子体积的占用的部分模式。后一种情况产生要相对于占用模式比特序列中的第八比特跟踪的27=128个上下文。即使将邻居配置约简为总共五个,这意味着要跟踪640个上下文。

比特序列的先前编解码的比特具有顺序并且该顺序在评估上下文时相关,基于上述事实,上下文的数目庞大。然而,在一些情况下,顺序可以不包含有用信息。例如,在邻居配置为空(即,N10=0)的情况下,可以将体积内的任何点假定为是稀疏填充的,这意味着这些点具有的方向性并不强到足以将追踪同级子体积中的不同占用模式的单独上下文适当化。在空邻域的情况下,针对点云不存在局部定向或拓扑,这意味着可以将基于比特序列的先前编解码的比特的2j个条件约简为j+1个条件。即,用于对比特序列的比特中的一个比特进行编解码的上下文基于先前编解码的比特,但并不基于先前编解码的比特的有序模式,而是基于先前编解码的比特的总和。换言之,在该特殊情况下的熵表达式可以表达为:

H(b|n)≈H(b0|0)H(b1|0,b0)H(b2|0,b0+b1)…H(b7|0,b0+b1+…+b6)

在一些实施方式中,可以相对于完全邻居配置进行类似观察。在一些示例中,完全邻居配置缺乏方向性,这意味着在确定上下文时不需要考虑先前编解码的比特的顺序。在一些示例中,该上下文约简操作可以仅应用于比特序列中的比特中的一些比特,诸如序列中的较晚的比特中的一些比特。在一些情况下,将该上下文约简操作应用于较晚的比特,可以以确定与先前编解码的子体积相关联的较早比特也全部都被占用作为条件。

基于统计的上下文约简

统计分析可以用于通过确定哪些上下文引起大致相同的统计行为,并且然后组合这些上下文来约简上下文。可以使用测试数据来先验地执行该分析以开发约简的上下文集合,然后将其提供给编码器和解码器两者。在一些情况下,可以使用两回合编解码来对当前点云执行分析,以开发针对特定点云数据的定制约简的上下文集合。在一些此类情况下,可以通过使用编解码成比特流的专用句法,将从非约简的上下文集合到定制约简的上下文集合的映射表示给解码器。

可以通过“距离”的概念来比较两个上下文。第一上下文c具有比特b的等于零的概率p,且第二上下文c’具有比特b’的等于零的概率。c与c’之间的距离由下式给出:

d(c,c’)=|p log2p–p’log2p’|+|(1-p)log2(1-p)–(1-p’)log2(1-p’)|

使用对类似性(距离)的这种测量,上下文然后可以在进程中进行分组,诸如:

1.从M1个上下文开始并且固定阈值水平ε

2.针对给定上下文,将与给定上下文相距了小于阈值水平ε的距离的所有上下文重新分组为类别

3.针对所有未重新分组的上下文重复2,直到所有未重新分组的上下文都被放入类别中为止

4.标记从1到M2的M2种类别:这产生蛮力约简函数,该蛮力约简函数映射{1,2,…,M1]→[1,2,…,M2],其中M1≥M2

可以将用于将上下文集合映射到更小的上下文集合的蛮力约简函数存储在存储器中,以通过编码器/解码器作为在编解码期间的上下文约简操作来应用。可以存储映射作为查找表或其他数据结构。例如,蛮力约简函数可以仅应用于比特序列(模式)中的较晚的比特。

上下文约简操作的组合和子组合

上文描述了三个示例上下文约简操作。在一些实施方式中可以单独地且独立地应用这些上下文约简操作中的每个上下文约简操作。在一些实施方式中可以组合这些上下文约简操作中的任意两个或更多个上下文约简操作。附加上下文约简操作可以单独地实施或与上文所描述的上下文约简操作中的任何一个或多个上下文约简操作组合地实施。

图26以流程图形式示出了涉及组合上下文约简的占用模式二进制编解码的方法3300的一个示例。给定了在{0,1,2,…,9}中的10元素邻居配置N10,方法3300对8比特二进制模式b0,b1,…,b7进行编解码。所评估的第一条件是邻居配置是否为空,即,N10=0。如果邻居配置为空,那么在不参考比特的顺序的情况下对比特进行编解码,如利用附图标记3302所指示。否则,按照正常方式对比特进行编解码,直到比特b4为止,在比特b4处,编码器和解码器开始应用蛮力上下文约简函数BRi,以通过将由邻居配置和先前编解码的比特的部分模式定义的上下文集合映射到具有基本上类似的统计结果的更小的上下文集合,来约简上下文的数目。

在该示例中,基于屏蔽/筛选,使用约简的邻居配置来对最后两个比特b6和b7进行编解码。

所以函数都可以被实施为用于约简上下文集合的大小的查找表(LUT)。在一种实际实施方式中,将所有约简都纳入约简函数(即,简称为LUT)的考虑中,该约简函数将上下文视为输入并且提供约简的上下文作为输出。在该示例实施例中,上下文的总数已经从2550个约简到576个,其中每个约简函数BRi的输出大小分别是70、106、110以及119。

具有固定数目的上下文的系统中的上下文选择

先前所描述的上下文约简操作中的每个上下文约简操作可以在具有静态(固定)最小数目的上下文的压缩系统中进一步使用。在这种设计中,针对在8比特二进制模式中的给定符号,应用一个或多个约简操作以确定用于对符号进行编码或解码的上下文概率模型。

对压缩性能的影响

使用10个邻居配置和非二进制编解码通过用于点云编解码的MPEG测试模型的当前实施方式来提供压缩增益。然而,使用2550个上下文的级联二进制编解码的10个邻居配置的上文所建议的使用引起了压缩效率的甚至更佳的改进。即使在使用上下文约简时(诸如使用上文详述的三种技术)将上下文约简为总共576个,二进制编解码压缩仍比使用非二进制编解码的实施方式略微更佳并且比测试模型好得多。已经表明这种观察在不同测试点云数据之间是一致的。

现在参考图14,其示出了编码器1100的示例实施例的简化框图。编码器1100包括处理器1102、存储器1104以及编码应用1106。编码应用1106可以包括存储在存储器1104中并且包含指令的计算机程序或应用,该指令在被执行时使处理器1102执行操作,诸如本文中所描述的操作。例如,编码应用1106可以根据本文所描述的过程对比特流进行编码和输出编码的比特流。应理解,可以将编码应用1106存储在非瞬态计算机可读介质(诸如光盘、闪存设备、随机存取存储器、硬盘驱动器等)上。当执行指令时,处理器1102执行指令中所指定的操作和功能,以便作为实施所描述的(多个)进程的专用处理器而运行。在一些示例中,此处理器可以被称为“处理器电路”或“处理器电路系统”。

现在还参考图15,其示出了解码器1200的示例实施例的简化框图。解码器1200包括处理器1202、存储器1204以及解码应用1206。解码应用1206可以包括存储在存储器1204中并且包含指令的计算机程序或应用,该指令在被执行时使处理器1202执行操作,诸如本文中所描述的操作。应理解,可以将解码应用1206存储在计算机可读介质(诸如光盘、闪存设备、随机存取存储器、硬盘驱动器等)上。当执行指令时,处理器1202执行指令中所指定的操作和功能,以便作为实施所描述的(多个)进程的专用处理器而运行。在一些示例中,此处理器可以被称为“处理器电路”或“处理器电路系统”。

应了解,根据本申请的解码器和/或编码器可以被实施在若干计算设备(包括但不限于服务器、适当编程的通用计算机、机器视觉系统以及移动设备)中。解码器或编码器可以通过包含用于配置一个或多个处理器以进行本文中所描述的功能的指令的软件来实施。可以将软件指令存储在任何合适的非瞬态计算机可读存储器(包括CD、RAM、ROM、闪存等)中。

应理解,可以使用标准计算机编程技术和语言来实现本文中所描述的解码器和/或编码器以及实施所描述的用于配置编码器或解码器的方法/进程的模块、例程、进程、线程或其他软件组件。本申请不限于特定处理器、计算机语言、计算机编程规范、数据结构、其他此类实施细节。本领域的技术人员应认识到,所描述的进程可以被实施为存储在易失性或非易失性存储器中的计算机可执行代码的一部分,作为专用集成芯片(ASIC)的一部分等。

本申请还提供一种计算机可读信号,该计算机可读信号对通过根据本申请应用编码处理而产生的数据进行编码。

可以进行所描述的实施例的某些适应和修改。因此,将以上讨论的实施例视为说明性的而非限制性的。

57页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:突发容错解码器及相关系统、方法和设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类