一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于点云压缩中的树切换的方法和设备与流程

2022-07-10 16:31:03 来源:中国专利 TAG:


1.本技术整体涉及点云压缩,并且具体地涉及用于处理表示点云数据的树结构的方法和设备。


背景技术:

2.在通信和计算机网络中使用数据压缩来有效地存储、传输和再现信息。对三维对象或空间的表示存在越来越多的兴趣,三维对象或空间的表示可能涉及大的数据集并且对其有效和高效的压缩将是非常有用和有价值的。在一些情况下,三维对象或空间可以使用点云来表示,点云是点集,每个点具有三坐标位置(x,y,z),并且在一些情况下具有其他属性,例如颜色数据(例如,亮度和色度)、透明度、反射率、法向矢量等。点云可以是静态的(静止对象或在单个时间点的环境/对象的快照)或动态的(点云的时间排序序列)。
3.点云的示例应用包括地形图和地图绘制应用。自主车辆和其他机器视觉应用可以依赖于诸如来自激光雷达扫描仪的环境的3d扫描形式的点云传感器数据。虚拟现实仿真可以依赖于点云。
4.应当理解,点云可以涉及大量的数据并且快速和准确地压缩(编码和解码)该数据具有重要意义。因此,提供更有效地和/或高效地压缩点云数据的方法和设备将是有利的。这样的方法可以借助改进的压缩来节省存储需求(存储器)或者节省用于传输压缩数据的带宽,从而导致诸如用于汽车应用的3d视觉系统的改进操作,或者例如虚拟现实系统的改进的操作速度和渲染。
附图说明
5.现在将通过示例的方式、参考示出本技术的示例实施例的附图,其中:
6.图1示出了示例点云编码器的简化框图;
7.图2示出了示例点云解码器的简化框图;
8.图3示出了用于编码的示例部分子体积和相关联的树结构;
9.图4示出了八叉树的递归分割和编码;
10.图5示出了预测点树的示例;
11.图6示出了用于从体积树切换到预测点树的示例解码器的流程图;
12.图7示出了用于从预测点树切换到体积树的示例解码器的流程图;
13.图8示出了编码器的示例简化框图;以及
14.图9示出了解码器的示例简化框图。
15.在不同的附图中使用相同的附图标记来表示相同的部件。
具体实施方式
16.本技术描述了对点云进行编码和解码的方法,以及用于对点云进行编码和解码的编码器和解码器。
17.在一个方面,本技术描述了对点云数据进行编码来生成压缩点云数据比特流的方法,压缩点云数据比特流表示物理对象的三维位置,点云数据位于体积空间内,方法包括:压缩由第一类型的第一树表示的点云数据的第一部分;针对第一树的给定节点,确定是否启用对第二类型树的指派,所述给定节点仍针对第一树被处理;当指派被启用时,压缩由第二类型的第二树表示的点云数据的第二部分,其中与第二树的根节点相关联的特征至少部分地从给定节点获得。
18.在另一方面,本技术将编码方法描述为进一步包括:在比特流中,将指派标志编码以发信号通知是否针对给定节点执行第二类型树的指派。
19.在一个方面,本技术还描述了对表示物理对象的三维位置的经压缩点云数据比特流进行解码来生成点云数据的方法,点云数据位于体积空间内,方法包括:将由第一类型的第一树表示的点云数据的第一部分解码;针对第一树的给定节点,确定是否启用对第二类型树的指派,所述给定节点仍针对第一树被处理;当指派被启用时,对由第二类型的第二树表示的点云数据的第二部分进行解码,其中与第二树的根节点相关联的特征至少部分地从给定节点获得。
20.在另一方面,本技术将解码方法描述为进一步包括:从比特流来解码指派标志,指派标志发信号通知是否针对给定节点执行对第二类型树的指派。
21.在另一方面,本技术描述了第一类型或第二类型的树是通过将体积空间递归分割为包含点云数据的点的子体积而获得的体积树,其中将体积递归分割为子体积创建了体积树,其中每个子体积与体积树的节点相关联,使得压缩数据至少包括子体积的占用信息。
22.在另一方面,本技术描述了第一类型或第二类型的树是预测点树,预测点树将点云数据的至少一个点与每个节点相关联,点的位置被直接编码或者相对于与预测点树的祖先节点相关联的至少一个祖先点被编码为残差位置,使得经压缩数据至少包括表示与预测点树的节点相关联的点的预测位置的信息。
23.在另一方面,本技术描述了被配置为实现这样的编码和解码方法的编码器和解码器。
24.在又一方面,本技术描述了存储计算机可执行程序指令的非暂态计算机可读介质,计算机可执行程序指令在被执行时,使得一个或多个处理器执行所描述的编码和/或解码方法。
25.在又一方面,本技术描述了包含程序指令的计算机可读信号,程序指令在由计算机执行时,使得计算机执行所描述的编码和/或解码方法。
26.本领域普通技术人员通过结合附图阅读以下示例描述将理解本技术的其他方面和特征。
27.关于本发明的一个方面或实施例描述的任何特征也可以被用于一个或多个其它方面/实施例。参考本文中描述的实施例,本发明的这些和其它方面将是显而易见的并被阐明。
28.在以下描述中,术语“节点”、“体积”和“子体积”可以互换使用。应当理解,在体积树中,节点与体积或子体积相关联。节点是树上的特定点,其可以是内部节点或叶节点。体积或子体积是节点表示的有界物理空间。在某些情况下,术语“体积”可以用来指代为包含点云而限定的最大有界空间。为了构建用于对点云数据进行编码的互连节点的树结构,体
积可以被递归地划分为子体积。
29.在本技术中,术语“和/或”旨在涵盖所列元素的所有可能组合和子组合,包括所列元素中的单独任一个、任何子组合或所有元素,并且不一定排除附加元素。
30.在本技术中,短语
“…


中的至少一个”旨在涵盖所列元素中的任一个或多个,包括所列元素中的任一个、任何子组合或所有元素,而不必排除任何附加元素,并且不必要求所有元素。
31.点云是三维坐标系中的点集。点通常用于表示一个或多个对象的外表面。每个点在三维坐标系中具有位置(定位)。位置可以由三个坐标(x,y,z)表示,三个坐标可以是笛卡尔坐标或任何其它坐标系。点可以具有其它相关的属性,诸如颜色,颜色在某些情况下也可以是三分量值,诸如r、g、b或y、cb、cr。根据点云数据的期望应用,其它相关属性可以包括透明度、反射率、法向矢量等。
32.点云可以是静态的或动态的。例如,对象或地形图的详细扫描或地图绘制可以是静态点云数据。用于机器视觉目的的环境的基于激光雷达的扫描可以是动态的,例如随着体积的每次连续扫描,点云可以随时间改变。动态点云因此可以是点云的时序排序序列。
33.点云数据可以被用于许多应用,包括例如保存(历史或文化对象的扫描)、地图绘制、机器视觉(诸如自主或半自主汽车)和虚拟现实系统。针对诸如机器视觉的应用的动态点云数据可以与针对例如保存目的的静态点云数据完全不同。例如,汽车视觉通常涉及通过具有高频捕获的激光雷达(或类似的)传感器获得的相对小分辨率、非彩色、高动态的点云。这样的点云的主要目的之一是在决策过程中实现机器对象检测/分类,而不是提供高质量的人类观看体验。例如,典型的激光雷达帧包含数万个点的量级,而高质量虚拟现实应用需要数百万个点。可以预期,随着计算速度的增加和发现新的应用,将存在对更高分辨率数据的需求。
34.虽然点云数据正在成为数据的主要3d表示之一,但是缺乏有效和高效的压缩,即,编码和解码过程,可能妨碍采用和部署。在其它数据压缩(例如音频或视频)的情况下不会出现的编码点云的特定挑战是点云的几何形状的编码。在一些应用中,点云往往稀疏填充,这使得有效地编码点的位置更具挑战性。在诸如虚拟现实的一些其它应用中,点云可以更密集地填充。在更密集填充的点云中,可以利用局部几何形状(例如空间相关)来改进编码效率。
35.用于表示点云的几何形状的体积树
36.用于编码点云数据的更常见机制之一是通过使用基于树的结构。在基于树的结构中,针对点云的有界三维体积被递归地划分为子体积。树的节点对应于子体积。是否进一步划分子体积的判定可以基于树的分辨率和/或是否在子体积中存在被包含的任何点。叶节点可以具有指示其相关联的子体积是否包含点的占用标志。分割标志可以发信号通知节点是否具有子节点(即,当前体积是否已被进一步分割为子体积)。在一些情况下可以对这些标志进行熵编码,并且在一些情况下可以使用预测编码。
37.通过将有界三维体积递归地划分为子体积来表示点云的几何形状的树在本文中被称为“体积树”,子体积的占用标志指示体积中是否存在点。如稍后将详细描述的,其他类型的树(例如,非体积树)可以被用来表示点云的几何形状。
38.常用的体积树结构是八叉树。在该结构中,体积/子体积均是立方体,并且子体积
的每个分割产生另外八个子体积/子立方体。另一常用的体积树结构是kd树,其中体积(立方体或矩形立方体)由与其中一个轴正交的平面递归地分为两个。八叉树是kd树的特定情况,其中体积被三个平面划分,每个平面与三个轴之一正交。这些示例均涉及立方体或矩形立方体;然而,本技术不限于这样的体积树结构,并且体积和子体积在一些应用中可以具有其它形状。体积的划分不一定是两个子体积(kd树)或八个子体积(八叉树),但可以涉及其它划分,包括划分为非矩形形状或涉及非相邻子体积。
39.在另一示例中,体积树可以是四叉树,使得子体积的每个分割产生四个另外的子体积/子立方体。
40.在又一示例中,体积树可以是二叉树,使得子体积的每个分割产生四个另外的子体积/子立方体。
41.体积树的组合可以获得更复杂的体积树的结构。例如,体积树可以包括从根节点向下到特定深度的第一类型的树(二叉树、四叉树或八叉树),然后针对另一深度变为第二类型的树。类似地,第一类型体积树的(叶)节点可以是继续划分与第一类型体积树的(叶)节点相关联的体积的第二类型体积树的根节点。
42.为了便于说明,本技术可以参考八叉树,并且因为它们是用于表示点云的几何形状的流行的候选体积树结构,但是应当理解,本文中描述的方法和设备可以使用其它体积树结构来实现。
43.现在参考图1,其示出了根据本技术的各方面的点云编码器10的简化框图。点云编码器10包括体积树构建模块12,用于接收点云数据并产生体积树(在该示例中为八叉树),体积树表示包含点云的体积空间的几何形状并指示来自该几何形状中的点云的点的位置或定位。
44.创建(体积)八叉树来编码点云的基本过程可以包括:
45.1.以包含坐标系中的点云的有界体积(立方体)开始;
46.2.将体积分割为8个子体积(8个子立方体);
47.3.针对每个子体积,如果子体积为空,则使用0标记子体积,或者如果子体积中存在至少一个点,则使用1标记子体积;
48.4.针对被标记为1的所有子体积,重复(2)来分割这些子体积,直到达到最大分割深度;
49.5.针对最大深度的所有叶子体积(子立方体),如果它是非空的,使用1标记叶立方体,否则为0。
50.以上过程可以被描述为占用相等分割过程,其中分割意味着占用,约束是存在最大深度或分辨率,超过最大深度或分辨率将不会发生进一步的分割。在该情况下,单个标志发信号通知节点是否被分割,并且因此表示它是否被至少一个点占用,反之亦然。在最大深度处,标志发信号通知占用,而不可能进一步分割。
51.在一些实现方式中,分割和占用是独立的,使得节点可以被占用并且可以被分割或可以不被分割。该实现方式有两个变型:
52.1.分割后占用。信号标志指示节点是否被分割。如果分割,则节点必须包含点,即分割意味着占用。否则,如果节点未被分割,则另一占用标志发信号通知节点是否包含至少一个点。因此,当节点没有被进一步分割时,即,它是叶节点时,叶节点必须具有相关联的占
用标志来指示它是否包含任何点。
53.2.占用后分割。单个标志指示节点是否被占用。如果未被占用,则不发生分割。如果它被占用,则分割标志被编码为指示节点是否被进一步分割。
54.不管使用上述过程中的哪一个来构建体积树,其都可以以预定义的顺序(宽度优先或深度优先,并且根据每个划分的子体积内的扫描模式/顺序)来遍历,以从标志(占用和/或分割标志)产生比特序列。这可以被称为体积树的串行化或二进制化。如图1所示,在该示例中,点云编码器10包括二进制化器14,用于对八叉树(或另一其它类型的树)进行二进制化来产生表示体积树的二进制化数据的比特流。
55.该比特序列然后可以使用熵编码器16来编码,以产生压缩比特流。熵编码器16可以使用上下文模型18来对比特序列进行编码,上下文模型18基于通过熵编码器16的上下文确定来指定用于对比特进行编码的概率。上下文模型18可以在每个比特或所定义的比特集的编码之后自适应地更新。在一些情况下,熵编码器16可以是二进制算术编码器。在一些实现方式中,二进制算术编码器可以采用上下文自适应二进制算术编码(cabac)。在一些实现方式中,可以使用除算术编码器之外的编码器。
56.在一些情况下,熵编码器16可以不是二进制编码器,而是可以对非二进制数据进行操作。来自体积树构建模块12的输出八叉树(或另一其它类型的树)数据可以不以二进制形式被评估,而是可以被编码为非二进制数据。例如,在八叉树的情况下,子体积内的扫描顺序中的八个标志(例如,占用标志)可以被认为是2
8-1比特数(例如,具有在1和255之间的值的整数,因为值0对于所分割的子体积是不可能的,即,如果它完全未被占用则它将不被分割)。在一些实现方式中,该数可以由熵编码器使用多符号算术编码器来编码。在子体积(例如立方体)内,限定该整数的标志序列可以被称为“模式”或“占用模式”。
57.与视频或图像编码类似,点云编码可以包括预测操作,在其中付出努力以预测体积中的点的位置。根据点的预测位置,可以预测子体积的占用模式。预测可以是空间的(根据相同点云中的先前编码的子体积)或时间的(根据点云的时间排序序列中的先前编码的点云)。
58.图2示出了与编码器10相对应的示例点云解码器50的框图。点云解码器50包括使用编码器10所使用的相同上下文模型54的熵解码器52。熵解码器52接收压缩数据的输入比特流,并且对数据进行熵解码来产生解压缩比特的输出序列。序列然后通过体积树重建器56而被转换为重建点云数据。体积树重建器56根据解压缩数据和对树数据进行二进制化的扫描顺序的知识来重建树结构。体积树重建器56因此能够从点云重建点的位置(服从体积树编码的分辨率)。
59.图3中示出了示例部分子体积100。在该示例中,为了便于例示,以二维示出了子体积100,并且子体积100的尺寸是16
×
16。应当注意,子体积已被划分为四个8
×
8的子正方形,并且其中的两个已被进一步细分为4
×
4的子正方形,其中的三个被进一步划分为2
×
2的子正方形,并且2
×
2子正方形中的一个然后被划分为1
×
1的正方形。1
×
1正方形是体积树的最大深度,并且表示位置点数据的最精细分辨率。来自点云的点在图中以圆点示出。
60.体积树102的结构被示出在子体积100的右侧。以预定义的宽度优先扫描顺序获得的分割标志序列104和对应占用标志序列106被示出在体积树102的右侧。将观察到,在该例示性示例中,存在针对未被分割的每个子体积(节点)的占用标记,即,具有被设置为零的关
联分割标志。这些序列可以被熵编码。
61.在图4中示出了采用占用分割条件的另一示例。图4图示了(体积)八叉树150的递归分割和编码。在图中仅示出了八叉树150的一部分。先进先出(fifo)152被示出为处理用于分割的节点,以例示本过程的宽度优先性质。fifo 152输出在fifo152中排队的占用节点154,以在处理其父节点156之后进一步分割。体积树构建器将与占用节点154相关联的子体积分割为八个子体积(立方体)并确定它们的占用率。占用率可以由每个子体积的占用标志来指示。在规定的扫描顺序中,标志可以被称为节点154的占用模式。模式可以由表示与预定义扫描顺序的子体积相关联的占用标志序列的整数来指定。在八叉树的情况下,模式是[1,255]范围内的整数。
[0062]
熵编码器然后基于由上下文模型指定的概率,使用非二进制算术编码器来对该模式进行编码。在该示例中,概率可以是基于初始分布模型并自适应更新的模式分布。在一个实现方式中,模式分布实际上是每个模式(从1到255的整数)在编码期间遇到的次数的计数器。模式分布可以在每个子体积被编码之后更新。模式分布可以根据需要而被归一化,因为图案的相对频率与概率评估密切相关,而与绝对计数无关。
[0063]
基于模式,被占用的那些子节点(例如,具有标志=1)然后被推入fifo 152中,用于进一步依次分割(假设节点不是体积树的最大深度)。将子节点推送到fifo对应于体积树的节点的宽度优先扫描顺序。应当理解,本技术不限于这样的扫描顺序。其它扫描顺序包括深度优先扫描顺序或体积树的节点的任何扫描顺序。
[0064]
在欧洲专利申请号18305037.6中,本技术人描述了用于基于来自特定节点附近的先前编码的节点的一些占用信息,在可用模式分布之中选择用于对特定节点的占用模式进行编码的方法和设备。在一个示例实现方式中,从父节点到特定节点的占用模式获得占用信息。在另一示例实现方式中,从与特定节点相邻的一个或多个节点获得占用信息。
[0065]
在一些实现方式中,占用模式占用的比特可以被算术编码,每个比特被轮流算术编码。每个比特bi表示当前节点(子体积)的相应子节点的占用,其中比特b0,

,b7的有序串或序列是该当前节点的占用模式。已发现,至少对于密集填充的点云,来自相邻子体积的局部信息可以被用于预测当前子体积的子-子体积的占用。对子节点的占用的这种预测可以被用于在对用信号通知子节点的占用的比特序列进行编码时改进压缩。在一些情况下,通过使用子节点占用的局部化预测,上下文选择可以更准确,从而改进占用模式的比特的算术编码。在一些实现方式中,基于邻居的占用预测可以被用于通过确定哪一个上下文集用于对占用比特bi进行编码来操纵或驱动算术编码器,并且诸如上述邻居配置等其它技术可以被用于从集合中选择特定上下文。
[0066]
表示点云几何形状的预测点树
[0067]
可以被用于表示点云的几何形状的另一类型的树结构包括“预测点树”。
[0068]
文档号为m51012,2019-10-03的z.gao等人的"predictive geometry coding",128mpeg meeting october 2019,geneva,ch提供了预测点的示例。预测点树在图5中图示。树的每个节点由圆圈(例如5001、5002或5003)图示,并且与点云的点相关联。每个箭头5004对应于树的预测分支。箭头的尖端指示父节点。节点5001是树的根节点,因为它没有父节点。节点5002是树的内部节点,因为它具有父节点和至少一个子节点。节点5003是叶节点,因为它没有子节点。
[0069]
与预测点树的节点相关联的点属于点云的一部分,该部分被包含在体积5005中。预测点树的结构由编码过程确定,以典型地根据点云部分的几何结构的最大压缩来获得最优结构。
[0070]
通过首先确定从与该节点的祖先节点(父节点、祖父节点等)或兄弟节点相关联的至少一个点获得的预测坐标(x
p
,y
p
,z
p
),然后将预测坐标减去该坐标以获得残差坐标,并且最后对残差坐标进行编码,与预测点树的节点相关联的点的坐标(x,y,z)使用预测点树编码结构进行编码。可以使用熵编码器对残差坐标进行编码。
[0071]
预测坐标(x
p
,y
p
,z
p
)例如使用与祖先和/或兄弟节点相关联的点的坐标的线性组合来获得。线性组合的系数可以从可能的线性组合集中选择,并且选择指数可以用信号通知。例如,如果p0是与父节点相关联的点的坐标,p1是与祖父节点相关联的点的坐标,并且p2是与曾祖父节点相关联的点的坐标,则获得预测坐标的可能线性组合可以是:
[0072]
0*p0 0*p1 0*p2(无预测)
[0073]
1*p0 0*p1 0*p2(德尔塔预测)
[0074]
2*p0-1*p1 0*p2(线性预测)
[0075]
2*p0 1*p1-1*p2(平行四边形预测器)
[0076]
与根节点相关联的点(在本文中也被称为根点)不能使用任何预测坐标来编码(或等效地可以仅使用无预测模式来编码),并且其坐标相对于体积5005被直接编码。
[0077]
golomb rice编码、exp-golomb编码或另一可变长度编码方法可以被用作对残差坐标进行编码的熵编码器。备选地,也可以使用上下文算术编码。熵编码器的参数可以根据线性组合的指数或祖先之间的距离来选择:例如,父母对祖父母和祖父母对祖祖父母之间的平均距离。
[0078]
由编码器为点集构造预测点树可以如下执行。在一个实施例中,编码器首先从与预测点树的根节点相关联的点集中选择一个点。该单个根节点首先被认为是叶节点,因为它还没有子节点。从该点集中去除所选择的点。然后,编码器从点集中递归地选择点,将所选择的点与正在构造的预测点树的叶节点相关联,并且从点集中移除所选择的点。当点集变空时,递归过程停止。
[0079]
在一个变型中,编码器首先标识点的群集,并通过将最接近群集中心的点作为根点(例如,与根节点相关联的点)并将群集的其他点关联为其子点来为每个点群集构建预测点树。然后,根点集被视为待被群集的新的点集,并且过程被递归地应用,直到根点集仅包含一个点。该变型是从叶节点到根节点构造树的自底向上的过程。
[0080]
预测点树的预测结构完全由与每个节点相关联的预测选择指数和每个节点的子节点的数量来确定。解码器然后可以从预测结构和每个点的残差坐标来获得点坐标。因此,用信号通知预测点树的比特流由每个节点的子节点数、预测选择指数和每个节点的残差坐标组成。
[0081]
树的扫描顺序可以按照预定的编码顺序来执行。例如,预测点树的扫描顺序可以在节点的深度优先遍历之后执行。在另一示例中,预测点树的扫描顺序可以遵循节点的宽度优先遍历。
[0082]
在一个变型中,针对节点的子节点数量n小于或等于最大界限n_child_nodes。例如,数量n可以使用哥伦布编码(golomb rice coding),在知道最大界限的情况下,在比特
流中针对每个节点编码。最大界限也可以在比特流中编码。
[0083]
在另一变型中,与节点的子节点相关联的点的数量是固定的,或者从解码器可用的信息中算法推导。在这种情况下,不需要用信号通知节点的子节点的数量。
[0084]
每个类型树的优点和限制
[0085]
与来自相邻节点的占用预测组合的体积树是用于压缩密集点云的强大树结构,其中大多数点不是孤立的,例如,存在其相关联的体积包含点的当前节点的至少一个占用相邻节点。
[0086]
已观察到,相对于体积树,预测点树可以提供对属于稀疏点云的点的位置的更好压缩。当点与其最近的相邻点之间的典型距离显著大于经编码的点的位置的空间精度时,点云被认为是稀疏的。然而,在压缩密集点云时,预测点树显著比体积树差。因此,期望以灵活的方式组合体积树和预测点树,以独立地在点云或点云区域的性质(密集或稀疏)上获得两个类型的树的最佳压缩。
[0087]
灵活性被理解为对点云的性质(密集或稀疏)的局部自适应。由于一些实际的点云可能具有不同密度的区域,因此需要局部性。例如,在激光雷达捕获的点云中,点的密度根据距激光雷达的距离而变化;发现靠近激光雷达的密集区域和远离激光雷达的区域是稀疏的。此外,当考虑体积树时,被占用的子节点的密度与体积树中的深度相关。例如,当考虑稀疏点云时,在低深度(接近体积树的根节点)处,许多被占用的子节点被占用,并且被占用的子节点的密度随着深度的增加而减小。实际上,可以看到所有点云在体积树中的低深度处是密集的。
[0088]
以下详细描述例如从体积树到预测点树以及从预测点树到体积树的两个切换机制。这些机制允许树结构(体积树或预测点树)对点云的局部空间特性的局部自适应。
[0089]
切换机制还可以被称为将第二树(例如,体积树或预测点树)指派给第一树(例如,体积树或预测点树)的给定节点。
[0090]
从体积树到预测点树的切换机制
[0091]
当体积树的节点被标识为足够稀疏时,即,属于与节点相关联的体积的点云部分是稀疏的时,可以决定从体积树切换到预测点树。例如,稀疏性可以由编码器通过分析点云来确定,然后编码器通过使用稀疏标志来发信号通知稀疏性,以指示节点是否稀疏。可以针对体积树节点的每个节点对稀疏标志进行熵编码。为了避免对所有节点的稀疏标志进行编码,可以仅针对达到给定体积树深度的节点,对稀疏标志进行编码。最大深度可以在比特流中(例如在帧参数集中)用信号通知。
[0092]
在另一示例中,通过分析相邻节点和/或父节点的相邻节点的占用来确定节点足够稀疏。这是不需要比特流中的任何信令的隐式确定。
[0093]
在又一示例中,通过分析相邻节点和/或父节点的相邻节点的占用来将节点确定为符合稀疏性。如果节点符合条件,则稀疏标志被编码来用信号通知节点内容是否稀疏。合格性确保了避免为不太可能稀疏的节点编码稀疏标志。
[0094]
当体积树的节点被标识为足够稀疏时,体积树结构停止,例如,节点是体积树的叶节点,并且属于与节点相关联的体积的点使用预测点树编码结构来编码。在该情况下,体积5005是与体积树的叶节点相关联的体积。
[0095]
现在参考图6,其示出了在示例解码器600处针对点云数据的过程的框图。解码器
包括fifo缓冲器,用于保持点云数据,诸如与体积树的节点相关联的体积。如上所述,体积根据诸如八叉树或任何其它类型的树的基于树的编码结构(体积树)被递归地分割为子体积。在步骤601处,fifo缓冲器利用体积树的根节点(等效地,根体积)针对唯一元素初始化。当fifo缓冲器不为空(步骤602)时,在步骤603处从fifo缓冲器检索(弹出)当前节点。在步骤604处,获得针对当前节点的稀疏信息(例如稀疏合格性和/或稀疏标志)。如果当前节点在步骤605处被确定是稀疏的,则当前节点是体积树的叶节点,并且在步骤606处,与当前节点的体积相关联的预测点树被解码。在对预测点树解码之后,解码器600然后循环回到fifo缓冲器,以弹出体积树的另一节点。如果在步骤607处当前节点被确定为不是稀疏的,则在步骤608处,当前节点的子节点的占用被确定,并且在步骤609处,如果被占用的子节点不是最大深度,则被占用的子节点被推送到fifo缓冲器。解码器600然后循环回到fifo缓冲器来检索(弹出)体积树的另一节点。由体积树编码的解码点从与体积树中最大深度的被占用叶节点相关联的被占用叶体积的位置获得。
[0096]
如上所述,在步骤604处获得当前节点的稀疏信息可以部分地包括对稀疏标志进行解码。可选地,在步骤604处获得稀疏信息还可以部分地包括确定当前节点的稀疏合格性。
[0097]
图6中描述的解码器600是具有使用fifo缓冲器获得的体积树节点的宽度优先扫描顺序的示例解码器。然而,从体积树到预测点树的切换机制不限于体积树的任何扫描顺序。
[0098]
在一个实施例中,确定体积树的节点是否被标识为足够稀疏可以基于阈值。阈值可以指示多少相邻节点被占用,多少父相邻节点被占用,或者多少相邻节点和父相邻节点被占用的组合。如果相邻占用率低于阈值,则节点被确定为稀疏。阈值可以根据点云或内容的类型来设置或动态地确定,然后在比特流中(例如在序列参数集中)用信号通知。
[0099]
在一个实施例中,确定体积树的节点是否被标识为足够稀疏可以基于与节点、相邻节点或父节点和父相邻节点相关联的体积的维度。例如,可以确定,当父节点和父相邻节点具有矩形形状,而当前节点和其相邻节点具有立方体形状时,节点可以符合稀疏性。
[0100]
从预测点树到体积树的切换机制
[0101]
从预测点树切换到体积树在点云可以被群集成若干足够密集(在点的坐标的空间精度的尺度上)的点群集,但是群集被稀疏地定位(例如,在群集尺寸尺度上分离群集的距离较大)的情况下是有利的。
[0102]
在预测点树中,体积树可以使用切换机制,从预测点树的节点(优选地但不限于叶节点)开始。例如,切换标志可以针对每个叶节点编码,从而用信号通知是否切换到体积树。为了避免对预测点树的所有叶节点的切换标志进行编码,只有合格节点可能受到切换标志的切换和随后的编码。例如,根据由预测点树编码的点的局部密度,可以满足合格标准。
[0103]
在另一实施例中,到体积树的切换可以对预测点树的所有叶节点执行。在该情况下,不需要用信号通知切换标志。
[0104]
一旦已针对预测点树的当前节点确定了切换(例如通过对用信号通知切换的切换标志进行解码),则体积树从与(根)体积相关联的根节点开始。根体积的位置和尺寸可以在比特流中直接编码。可选地,根体积的基点的坐标可以使用预测点树的预测机制来编码。换言之,基点被编码为与当前节点相关联的点。在另一示例中,两个基点可以被编码来完全确
定根体积。在又一示例中,一个基点以及根体积的尺寸和/或形状可以被编码。
[0105]
在根体积是长方体的情况下,确定根体积的两个编码基点可以是长方体的对角相对顶点。
[0106]
在根体积是长方体的情况下,根体积可以通过对长方体的一个顶点和长方体的尺寸(宽度、长度和高度)进步编码来编码。
[0107]
从与(编码的)根体积相关联的根节点开始,由体积树编码的点相对于根体积被编码。例如,由体积树编码的点的解码位置可以通过将由体积树编码的它们的相对坐标添加到根体积基点的坐标来获得。在根体积是长方体的情况下,根体积的基点可以是长方体的顶点。
[0108]
现在参考图7,其示出了针对点云数据的示例解码器700的流程图。解码器包括堆栈缓冲器,用于保存点云数据,诸如预测点树的节点。在步骤701中,与预测点树的根节点相关联的点被解码,并且根节点被推送到在该阶段仅包含根节点的堆栈。然后,当在步骤702处堆栈不为空时,在步骤703处按照节点的给定扫描顺序从堆栈检索(弹出)当前节点。在步骤704处获得针对当前节点的切换信息,该信息例如可以包括(经解码的)切换标志。
[0109]
如果所获得的切换信息指示(例如,切换标志为假)不存在到体积树的切换705,则获得当前节点的子节点的数量(步骤706)。然后,对于当前节点的每个子节点,通过例如在步骤707处对预测模式指数和残差坐标进行解码来获得与子节点相关联的点的位置(例如,3d坐标),并且在步骤708处,子节点被推送到堆栈。一旦所有子节点被处理,解码器就循环回到步骤702。
[0110]
如果所获得的切换信息指示(例如,切换标志为真)存在到体积树的切换709,则在步骤710处根体积通过对根体积信息进行解码来获得,并且在步骤711处,其根节点与根体积相关联的体积树被解码。解码器然后针对没有切换的情况,处理到步骤706-708。
[0111]
在另一实施例中,体积树的解码可以在预测点树的解码之后(例如,在堆栈变空之后)通过累积根体积,直到堆栈为空,然后处理与根体积相关联的体积树的解码来执行。
[0112]
现在参考图8,其示出了编码器1100的示例实施例的简化框图。编码器1100包括处理器1102、存储器1104和编码应用1106。编码应用1106可以包括在存储器1104中存储并包含指令的计算机程序或应用程序,指令在被执行时使得处理器1102执行诸如本文所述的那些操作。例如,编码应用1106可以根据本文所描述的过程来编码和输出经编码的比特流。将理解,编码应用1106可以被存储在非暂态计算机可读介质上,诸如光盘、闪存设备、随机存取存储器、硬盘驱动装置等。当指令被执行时,处理器1102执行指令中所指定的操作和功能,以作为实现所述过程的专用处理器而操作。在一些示例中,这样的处理器可以被称为“处理器电路”或“处理器电路系统”。
[0113]
现在还参考图9,其示出了解码器1200的示例实施例的简化框图。解码器1200包括处理器1202、存储器1204和解码应用1206。解码应用1206可以包括存储器1204中存储并且包含指令的计算机程序或应用程序,指令在被执行时使得处理器1202执行诸如本文中所描述的那些操作。可以理解,解码应用1206可以被存储在计算机可读介质上,诸如光盘、闪存设备、随机存取存储器、硬盘驱动装置等。当指令被执行时,处理器1202执行指令中指定的操作和功能,以作为实现所述过程的专用处理器来操作。在一些示例中,这样的处理器可以被称为“处理器电路”或“处理器电路系统”。
[0114]
应当理解,根据本技术的解码器和/或编码器可以在若干计算设备中实现,包括但不限于服务器、适当编程的通用计算机、机器视觉系统和移动设备。解码器或编码器可以通过包含用于将一个或多个处理器配置为执行本文中描述的功能的指令的软件来实现。软件指令可以被存储在任何合适的非暂态计算机可读存储器上,包括cd、ram、rom、闪存等。
[0115]
应当理解,本文中描述的解码器和/或编码器以及实现用于配置编码器或解码器的所述方法/过程的模块、例程、过程、线程或其它软件组件可以使用标准计算机编程技术和语言来实现。本技术不限于特定处理器、计算机语言、计算机编程惯例、数据结构、其它这样的实现细节。本领域技术人员将认识到,所描述的过程可以被实现为易失性或非易失性存储器中存储的计算机可执行代码的一部分,作为专用集成芯片(asic)的一部分等。
[0116]
本技术还提供了对通过应用根据本技术的编码过程而产生的数据进行编码的计算机可读信号。
[0117]
可以对所描述的实施例进行某些调整和修改。因此,上述实施例被认为是例示性的而不是限制性的。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献