基于树的点云编解码的角度模式的制作方法

文档序号:30102686发布日期:2022-05-18 13:30阅读:102来源:国知局
基于树的点云编解码的角度模式的制作方法

1.本技术大体上涉及点云压缩,具体地涉及针对在基于树的点云编解码中改进占用数据压缩的方法和设备。


背景技术:

2.数据压缩被用于通信和计算机网络中,以高效地存储、传输和再现信息。人们对三维对象或空间的表示越来越感兴趣,这种表示可能涉及大型数据集,并且针对这种表示的高效且有效的压缩将非常有用且有价值。在一些情况下,三维对象或空间可以使用点云来表示,点云是分别具有三个坐标位置(x、y、z)的点集,并且在一些情况下,还使用其他属性来表示,如颜色数据(例如亮度和色度)、透明度、反射率、法向向量等。点云可以是静态的(静止的对象或环境/对象在单个时间点的快照)或动态的(按时间顺序的点云序列)。
3.点云的示例应用包括地形和映射应用。自主车辆和其他机器视觉应用可能依赖于环境的3d扫描形式的点云传感器数据,诸如来自激光雷达(lidar)扫描仪。虚拟现实模拟可能依赖于点云。
4.应当理解,点云可能涉及大量数据,并且快速且准确地压缩(编码和解码)该数据具有重要意义。因此,提供更高效和/或有效地压缩点云数据的方法和设备将是有利的。作为示例,这种方法可以通过改进压缩节省存储要求(存储器),或节省传输压缩数据的带宽,从而导致改进的3d视觉系统的操作(诸如用于汽车应用)或例如改进操作速度并且渲染虚拟现实系统。
附图说明
5.现在将通过示例参照示出了本技术的示例实施例的附图,并且其中:
6.图1示出了示例点云编码器的简化框图;
7.图2示出了示例点云解码器的简化框图;
8.图3和图4图示了在其占用的子子体积中表现出平面性的体积的示例;
9.图5以流程图的形式示出了使用平面编解码模式编码点云数据的一种示例方法;
10.图6以流程图的形式示出了使用平面编解码模式解码点云数据的一种示例方法;
11.图7示出了用于基于平面性信息编解码占用位的过程的一个示例的一部分;
12.图8示出了用于基于平面性信息编解码占用位的过程的另一示例的一部分;
13.图9图解地图示了在确定用于编解码平面模式标志或平面位置标志的上下文中的可能因素;
14.图10示出了用于追踪在相同深度处和公共平面中的最近已编解码的占用节点的一种示例机制;
15.图11示出了用于获取点云的波束组合的示例的简化图示;
16.图12示出了波束组合中的单个波束发射器的示例的简化图示;
17.图13示出了坐标轴相对于波束组合的示例指派;
18.图14示出了包括在(r,θ)平面中表示的示例点云的点的图;
19.图15示出了坐标轴相对于点云的点的示例指派;
20.图16示出了图14中的图的细节;
21.图17示出了波束组合的波束发射器相对于波束组合的参考位置的布置的示例;
22.图18示出了包括角度θ的校正已经基于波束组合的特点执行之后在(r,θ)平面中表达的示例点云的点的图;
23.图19示出了点云数据的体积的角度大小相对于由波束组合发射的波束之间的角度差的示例;
24.图20以流程图的形式示出了使用角度编解码模式编码点云数据的一种示例方法;
25.图21以流程图的形式示出了使用角度编解码模式解码点云数据的一种示例方法;
26.图22示出了点云数据体积的子体积组相对于波束发射器的角度的示例;
27.图23示出了点云数据体积的子体积相对于波束发射器的角度的示例;
28.图24示出了波束组合的主轴的示例布置;
29.图25示出了图24的波束组合的波束发射器相对于波束组合的参考位置的布置的示例;
30.图26示出了图24的波束组合的波束发射器相对于波束组合的参考位置的布置的另一示例;
31.图27以流程图的形式示出了一种示例方法,该方法基于指示已经获取点云的波束组合的特点的句法元素从位流解码点云数据;
32.图28以流程图的形式示出了一种示例方法,该方法基于指示已经获取点云的波束组合的特点的句法元素将点云数据编码为位流;
33.图29示出了点云数据体积的形状和体积的子体积组相对于波束发射器的角度的示例;
34.图30示出了编码器的示例简化框图;以及
35.图31示出了解码器的示例简化框图。
36.类似的附图标记可能已经在不同的附图中用于表示类似的组件。
具体实施方式
37.本技术描述了编码和解码点云的方法,以及用于编码和解码点云的编码器和解码器。
38.在一个方面中,本技术描述了一种编码点云以生成表示对象的三维位置的压缩点云数据的位流的方法,该点云位于递归地拆分为子体积并且包含点云的点的体积空间内,其中体积被分隔为第一子子体积集和第二子子体积集,第一子子体积集位于第一平面中,并且第二子子体积集位于平行于第一平面的第二平面中,并且其中与每个相应的子子体积相关联的占用位指示该相应子子体积是否包含至少一个点。该方法可以包括:基于包含至少一个点的所有子子体积是否位于第一集或第二集中来确定体积是否是平面的;在位流中编码平面模式标志以发信号通知体积是否是平面的;在位流中编码第一集的子子体积的占用位包括,针对至少一个占用位,基于体积是否是平面的来推断其值并且不在位流中对其进行编码;以及输出压缩点云数据的位流。
39.在另一方面中,本技术描述了一种解码压缩点云数据的位流以产生表示物理对象的三维位置的重构点云的方法,该点云位于递归地拆分为子体积并且包含点云的点的体积空间内,其中体积被分隔为第一子子体积集和第二子子体积集,第一子子体积集位于第一平面中,并且第二子子体积集位于平行于第一平面的第二平面中,并且其中与每个相应的子子体积相关联的占用位指示该相应子子体积是否包含至少一个点。该方法可以包括:通过从位流解码指示体积是否是平面的平面模式标志重构占用位来重构点云的点,其中如果包含至少一个点的所有子子体积位于第一集或第二集,则该体积是平面的;以及从位流解码第一集的子子体积的占用位包括,针对至少一个占用位,基于体积是否是平面的来推断其值并且不从位流对其进行解码。
40.在一些实施方式中,确定体积是否是平面的可以包括:通过确定第一集中的至少一个子子体积包含至少一个点并且第二集中没有子子体积包含任何点来确定体积是平面的,并且该方法还可以包括:基于体积是平面的,对平面位置标志编码以发信号通知所述至少一个子子体积在第一平面中。在这种实施方式中,在一些情况下,对占用位编码包括避免对与第二集相关联的占用位进行编解码,并且基于不包含点的第二集来推断与第二集相关联的占用位的值。对占用位编码还可以包括:基于确定按照编解码顺序的第一集的所有其他占用位具有指示未占用的值,推断与按照编解码顺序的第一集相关联的占用位中的最后一个具有指示占用的值。
41.在一些实施方式中,确定体积是否是平面的包括:确定体积不是平面的,并且在此基础上,基于具有指示占用的值的第一集中的至少一个占用位和第二集中的至少一个占用位来对占用位编码。
42.在一些实施方式中,点云相对于体积空间中的笛卡尔轴被限定,该笛卡尔轴具有与水平平面的垂直定向正交的z轴,并且第一平面和第二平面平行于水平平面。在一些其他实施方式中,第一平面和第二平面正交于水平平面。
43.在一些实施方式中,该方法包括:首先确定体积合格用于平面模式编解码。确定体积合格用于平面模式编解码可以包括:确定平面性的概率,并且确定平面性的概率大于阈值合格性值。
44.在一些实施方式中,对平面模式标志编码可以包括:对水平平面模式标志编码,并且对垂直平面模式标志编码。
45.在再一方面中,本技术描述了一种编码点云以生成表示对象的三维位置的压缩点云数据的位流的方法,该点云位于递归地拆分为子体积并且包含点云的点的体积空间内,其中体积被分隔为第一子子体积集和第二子子体积集,第一子子体积集位于第一平面中,并且第二子子体积集位于平行于第一平面的第二平面中,并且其中与每个相应的子子体积相关联的占用位指示该相应子子体积是否包含至少一个点,第一平面和第二平面都正交于轴。该方法可以包括:基于包含至少一个点的所有子子体积是位于第一集还是第二集来确定体积是否是平面的;在位流中熵编码平面模式标志,以发信号通知体积是否是平面的,其中熵编码包括部分地基于以下一项或多项来确定用于编解码平面模式标志的上下文:(a)包含体积的父体积在占用中是否是平面的,(b)邻近体积在父深度处的占用,邻近体积与该体积相邻并且具有与父体积共有的面,或者(c)体积与最近已编解码的占用体积之间的距离,该占用体积的深度与该体积相同并且轴上的位置与该体积相同;编码子子体积中的至
少一些的占用位;以及输出压缩点云数据的位流。
46.在又一方面中,本技术描述了一种解码压缩点云数据的位流以产生表示物理对象的三维位置的重构点云的方法,该点云位于递归地拆分为子体积并且包含点云的点的体积空间内,其中体积被分隔为第一子子体积集和第二子子体积集,第一子子体积集被定位于第一平面中,并且第二子子体积集被定位于平行于第一平面的第二平面中,并且其中与每个相应的子子体积相关联的占用位指示该相应子子体积是否包含至少一个点,第一平面和第二平面都正交于轴。该方法可以包括:通过从位流熵解码指示体积是否是平面的平面模式标志重构占用位来重构点云数据的点,其中如果包含至少一个点的所有子子体积位于第一集或第二集,则体积是平面的,其中熵解码包括部分地基于以下一项或多项来确定用于解码平面模式标志的上下文:(a)包含体积的父体积在占用中是否是平面的,(b)邻近体积在父深度处的占用,邻近体积与该体积相邻并且具有与父体积共有的面,或者(c)体积与最近已编解码的占用体积之间的距离,该占用体积的深度与该体积相同并且轴上的位置与该体积相同;以及重构子子体积的占用位。
47.在一些实施方式中,如果父平面模式标志指示父体积是平面的,则包含体积的父体积在占用中是平面的。
48.在一些实施方式中,距离是近的或远的,并且可以基于计算距离度量并且将其与阈值进行比较。
49.在一些实施方式中,确定用于编解码平面模式标志的上下文可以基于(a)、(b)和(c)的组合。
50.在一些实施方式中,确定体积是否是平面的包括:确定体积是平面的,并且因此,熵编码平面位置标志以发信号通知至少一个点被定位于第一集还是第二集。熵编码平面位置标志可以包括:确定用于编解码平面位置标志的上下文。确定上下文可以部分地基于以下一项或多项:(a’)邻近体积在父深度处的占用;(b’)体积与最接近的已编解码的占用体积之间的距离;(c’)最接近的已编解码的占用体积的平面位置(如果有的话);或者(d’)父体积内的体积的位置。在一些情况下,确定用于编解码平面位置标志的上下文可以基于(a’)、(b’)、(c’)和(d’)中的三个或多个的组合。
51.在一些实施方式中,距离是近的、不太远或远的,并且可以基于计算距离度量并且将其与第一阈值和第二阈值进行比较。
52.在又一方面中,本技术描述了一种编码借助于包括波束集的波束组合获取的点云(例如点云的几何形状)以生成压缩点云数据的位流的方法。点云(例如点云的几何形状)可以被限定在具有多个节点的树形结构中(例如由树形结构限定),该多个节点具有父子关系并且表示体积空间的所述几何形状。此外,点云可以位于递归地拆分为子体积并且包含点云数据的点的体积空间内。体积可以被分隔为子子体积集。与每个相应的子子体积相关联的占用位可以指示该相应子子体积是否包含至少一个点。该方法可以包括:针对与拆分为子子体积的体积相关联的当前节点,基于体积的子子体积的占用状态来确定体积的占用模式。该方法还可以包括:将占用模式的表示熵编码为位流。其中,熵编码占用模式可以包括:确定体积的子子体积或者子子体积组的角度信息。角度信息可以指示相对于与体积空间内的波束组合相关联的位置的一个或多个仰角。熵编码占用模式还可以包括:基于角度信息来确定用于编码占用模式的表示的上下文。熵编码占用模式还可以包括:使用所确定的上
下文来熵编码占用模式的表示。
53.在又一方面中,本技术描述了一种解码压电点云数据的位流以生成重构点云(例如重构点云的几何形状)的方法。点云(例如点云的几何形状)可能已经借助于包括波束集的波束组合来获取。点云可以被限定在具有多个节点的树形结构中(例如由树形结构限定),该多个节点具有父子关系并且表示体积空间的所述几何形状。此外,点云可以位于递归地拆分为子体积并且包含点云数据的点的体积空间内。体积可以被分隔为子子体积集。与每个相应的子子体积相关联的占用位可以指示该相应的子子体积是否包含至少一个点。该方法可以包括:针对与拆分为子子体积的体积相关联的当前节点,确定体积的子子体积或子子体积组的角度信息。角度信息可以指示相对于与体积空间内的波束组合相关联的位置(并且例如相对于包含与波束组合相关联的位置的平面,诸如水平平面)的一个或多个仰角。该方法还可以包括:基于角度信息来确定用于解码体积的占用模式的表示的上下文。占用模式可以指示体积的子子体积的占用状态。该方法还可以包括:使用所确定的上下文熵解码位流,以生成占用模式的重构表示。
54.在一些实施方式中,确定角度信息可以包括:确定体积内的参考位置相对于波束组合的参考位置的第一仰角。确定角度信息还可以包括:基于第一仰角,确定被假设为已经获取体积内的点的特定波束。确定角度信息还可以包括:确定特定波束的原点位置。确定角度信息还可以包括:确定体积的子子体积或子子体积组相对于特定波束的原点位置的一个或多个仰角。
55.在一些实施方式中,该方法还可以包括:通过确定从波束组合的参考位置看到的体积的角度大小的度量,首先确定体积合格用于基于角度信息来确定上下文。确定体积是合格的还可以包括:将角度大小的度量与波束组合的相邻波束之间的差角的度量进行比较。确定体积是合格的还可以包括:基于比较结果,确定体积合格用于基于角度信息来确定上下文。
56.在一些实施方式中,平面体积可以是在相应平行平面中分隔为多个子子体积集的体积,包含至少一个点的所有子子体积位于相同平面中。然后,确定用于编解码占用模式的表示的上下文可以包括:基于角度信息来确定用于编解码平面位置标志的上下文。平面位置标志可以发信号通知包含至少一个点的子子体积所处的平面的位置。进一步地,熵编码占用模式的表示可以包括:使用所确定的上下文来熵编码平面位置标志。
57.在一些实施方式中,确定角度信息可以包括:相对于特定波束的原点位置,针对多个平行平面中的每个平面来确定相应仰角。确定用于编解码平面位置标志的上下文可以包括:将多个平行平面中的每个平面的相应仰角与特定波束的波束角进行比较(例如通过计算相应角度之间的差)。确定用于编解码平面位置标志的上下文还可以包括:基于相应比较的结果来确定用于编解码平面位置标志的上下文。
58.在一些实施方式中,基于相应比较的结果确定用于编解码平面位置标志的上下文可以基于以下至少一项:特定波束的波束角与多个平行平面中的每个平面的相应仰角之间的差、特定波束的波束角与多个平行平面中的每个平面的相应仰角之间的差的幅度和/或特定波束的波束角和多个平行平面中的每个平面的相应仰角之间的差的幅度中的最大差的幅度与特定波束的波束角和多个平行平面中的每个平面的相应仰角之间的差的幅度中的最小差的幅度之间的差的量化结果。
59.在一些实施方式中,确定用于编解码占用模式的表示的上下文可以包括:确定用于编解码体积的子子体积的占用位的上下文。然后,熵编码占用模式的表示可以包括:使用所确定的上下文来熵编码占用位。
60.在一些实施方式中,确定角度信息可以包括:相对于特定波束的原点位置,针对体积的子子体积中的每个子子体积来确定相应仰角。确定用于编解码体积的子子体积的占用位的上下文可以包括:将体积的子子体积中的每个子子体积的相应仰角与特定波束的波束角进行比较。确定用于编解码体积的子子体积的占用位的上下文还可以包括:基于相应比较的结果,确定用于编解码体积的子子体积的占用位的上下文。
61.在一些实施方式中,波束组合可以是旋转波束组合。点云可以相对于体积空间中的笛卡尔轴被限定。笛卡尔轴可以具有垂直定向的z轴,该z轴与水平平面正交并且基本上平行于旋转波束组合的旋转轴。
62.在一些实施方式中,位流可以包括描述波束组合的特点的一个或多个参数。
63.在又一方面中,本技术描述了一种对压缩点云数据的位流解码以生成重构点云的方法。点云可能已经借助于波束集获取。进一步地,点云可以位于递归地拆分为子体积并且包含点云数据的点的体积空间内。该方法可以包括:从位流解码指示角度模式是否应该被用于编解码点云数据的第一参数。该方法还可以包括:如果第一参数指示点云数据应该使用角度模式编解码,则从位流解码第一角度信息,该第一角度信息与波束集相对于相应的波束原点位置的波束角相关。该方法还可以包括:针对被拆分为子体积的当前体积,确定第二角度信息,该第二角度信息与体积的子体积或子体积组相对于与波束集相关联的位置的角度相关。该方法还可以包括:基于第一角度信息和第二角度信息,解码体积的点云数据。
64.在一些实施方式中,解码第一角度信息可以包括:针对包括波束集中的至少一些波束的波束组合,从位流解码指示波束组合中的波束数量的第二参数,并且基于第二参数来确定波束组合中的波束数量。该方法还可以包括:针对由第二参数指示的多个波束中的每个波束,从位流解码指示相应波束的波束原点位置的一个或多个第三参数。
65.在一些实施方式中,解码指示相应波束的波束原点位置的一个或多个第三参数可以包括:解码指示波束的波束原点位置是否相对于波束组合的参考位置表达的参数。解码一个或多个第三参数还可以包括:如果波束的波束原点位置相对于波束组合的参考位置表达,则解码指示波束的波束原点位置沿着波束组合的主轴的坐标的参数。解码一个或多个第三参数还可以包括:如果波束的波束原点位置相对于波束组合的参考位置表达,则解码指示波束原点位置是否从波束组合的主轴位移的参数。解码一个或多个第三参数还可以包括:如果波束的波束原点位置相对于波束组合的参考位置表达,并且如果波束原点位置从波束组合的主轴位移,则解码表达波束原点位置从波束组合的主轴位移的参数。
66.在一些实施方式中,解码第一角度信息可以包括:检查位流是否包括第四参数,该第四参数指示分别包括波束集中的至少一些波束的波束组合数量,并且如果是,则以位流解码第四参数。解码第一角度信息还可以包括:如果第四参数不存在或者等于零,则推断波束组合数量为1。解码第一角度信息还可以包括:如果第四参数等于1,则解码指示波束组合数量减去2的第五参数。
67.在一些实施方式中,解码第一角度信息可以包括:针对包括波束集中的至少一些波束的波束组合,检查位流是否包括第六参数,该第六参数指示波束组合的参考位置是否
处于体积空间的坐标系的原点处,并且如果是,则解码第六参数。解码第一角度信息还可以包括:如果第六参数不存在于位流中或者如果第六参数指示波束组合的参考位置处于坐标系的原点处,则将坐标系的原点视为波束组合的参考位置。解码第一角度信息还可以包括:否则从位流解码指示波束组合的参考位置的坐标的参数。
68.在一些实施方式中,解码第一角度信息可以包括:针对包括波束集中的至少一些波束的波束组合,从位流解码第七参数,该第七参数指示波束组合的主轴是否沿着体积空间的坐标轴布置。解码第一角度信息还可以包括:如果第七参数指示波束组合的主轴沿着体积空间的坐标轴布置,则解码指示波束组合的主轴沿其布置的特定坐标轴的参数,并且将特定坐标轴视为波束组合的主轴(例如主轴的定向)。解码第一角度信息还可以包括:另外解码指示角度的参数,该角度表达波束组合的主轴的定向,并且基于这些参数来确定波束组合的主轴。主轴可以被假设为贯穿波束组合的参考位置。
69.在一些实施方式中,解码第一角度信息可以包括:针对包括波束集中的至少一些波束的波束组合,从位流解码指示波束组合中的波束数量的第八参数,并且基于第八参数来确定波束组合中的波束数量。解码第一角度信息还可以包括:针对波束组合中的多个波束中的每个波束,从位流解码指示相应波束的波束角的一个或多个第九参数。
70.在一些实施方式中,解码指示相应波束的波束角的一个或多个第九参数可以包括:解码指示波束角是否被表达为角度的正切的参数。解码一个或多个第九参数还可以包括:解码表达波束角的参数。
71.在一些实施方式中,该方法还可以包括:首先确定体积合格用于基于第一角度信息和第二角度信息来解码体积的点云数据。针对包括波束集中的至少一些波束的波束组合,角度合格性的确定可以包括:确定从波束组合的参考位置看到的体积的角度大小的度量。角度合格性的确定还可以包括:将角度大小的度量与波束组合的相邻波束的角度之间的差角的度量进行比较。角度合格性的确定还可以包括:基于比较结果,确定体积是否(或者确实)合格用于基于第一角度信息和第二角度信息来解码体积的点云数据。
72.在一些实施方式中,确定第二角度信息可以包括:确定体积内的参考位置相对于包括波束集中的至少一些波束的波束组合的参考位置的第一角度。确定第二角度信息还可以包括:基于第一仰角,确定被假设为已经获取体积内的点的波束组合的特定波束。确定第二角度信息还可以包括:确定特定波束的波束原点位置。确定第二角度信息还可以包括:确定体积的子体积或子体积组相对于特定波束的波束原点位置的角度。
73.在又一方面中,本技术描述了一种对借助于波束集获取的点云编码以生成压缩点云数据的位流的方法。点云可以位于递归地拆分为子体积并且包含点云数据的点的体积空间内。该方法可以包括:将第一参数编码为位流,该第一参数指示角度模式是否应该被用于编解码点云数据。该方法还可以包括:如果第一参数指示点云数据应该使用角度模式编解码,则将第一角度信息编码为位流,该第一角度信息与波束集相对于相应的波束原点位置的波束角相关。该方法还可以包括:如果第一参数指示点云数据应该使用角度模式编解码,则针对拆分为子体积的当前体积,确定第二角度信息,该第二角度信息与体积的子体积或子体积组相对于与波束集相关联的位置的角度相关。该方法还可以包括:如果第一参数指示点云数据应该使用角度模式编解码,则针对当前体积,基于第一角度信息和第二角度信息来编码体积的点云数据。
74.在又一方面中,本技术描述了被配置为实施这种编解码和解码方法的编码器和解码器。
75.在再一方面中,本技术描述了存储计算机可执行程序指令的非瞬态计算机可读介质,该计算机可执行程序指令在被执行时使一个或多个处理器执行所描述的编码和/或解码方法。
76.在再一方面中,本技术描述了一种包含程序指令的计算机可读信号,该程序指令在由计算机执行时使计算机执行所描述的编码和/或解码方法。
77.通过结合附图阅读示例的以下描述,本技术的其他方面和特征将由本领域的普通技术人员理解。
78.关于本发明的一个方面或实施例描述的任何特征也可以就一个或多个其他方面/实施例而言使用。参照本文描述的实施例,本发明的这些和其他方面将变得显而易见并且得以阐明。
79.有时在下面的描述中,术语“节点”、“体积”和“子体积”可以互换使用。应当理解,节点与体积或子体积相关联。节点是树上的特定点,其可以是内部节点或叶节点。体积或子体积是节点所表示的有界物理空间。在一些情况下,术语“体积”可以被用于指代为包含点云而被限定的最大有界空间。为了构建互连节点的树形结构以对点云数据进行编解码,体积可以被递归地划分为子体积。将体积分隔为子体积的树状结构可以被称为“父”和“子”关系,其中子体积是父节点或父体积的子节点或子子体积。同一体积内的子体积可以被称为兄弟节点或兄弟子体积。
80.在本技术中,术语“和/或”旨在覆盖所列元素的所有可能的组合和子组合,包括单独列出的元素中的任何一个、任何子组合或所有元素,并且不一定需要排除附加的元素。
81.在本技术中,短语
“…


中的至少一个”旨在覆盖所列元素中的任何一个或多个,包括单独列出的任何一个元素、任何子组合或所有元素,而不一定需要排除任何附加元素,并且不一定需要所有元素。
82.点云是三维坐标系中的点集。这些点通常旨在表示一个或多个对象的外表面。每个点在三维坐标系中都有一个位置(位置)。该位置可以由三个坐标(x、y、z)表示,其可以是笛卡尔坐标系或任何其他坐标系。这些点可能具有其他关联的属性,诸如颜色,其在一些情况下也可能是三分量值,诸如r、g、b或y、cb、cr。其他关联属性可能包括透明度、反射率、法向向量等,这取决于点云数据的期望应用。
83.点云可以是静态的或动态的。例如,对象或地形的详细扫描或映射可能是静态点云数据。用于机器视觉目的的基于激光雷达的环境扫描可能是动态的,因为点云(至少潜在地)随时间而变化,例如每次连续扫描一个体积。因此,动态点云是按时间排序的点云序列。
84.点云数据可以被用于许多应用,给出一些示例,包括保护(历史或文化对象的扫描)、映射、机器视觉(诸如自动或半自动汽车)和虚拟现实系统。用于机器视觉等应用的动态点云数据可能与出于保护目的的静态点云数据完全不同。例如,汽车视觉通常涉及通过具有高捕获频率的激光雷达(或类似的)传感器获得的相对较小分辨率、非彩色、高动态的点云。这种点云的目的不是供人类消耗或查看,而是用于决策过程中的机器对象检测/分类。作为示例,典型的激光雷达帧包含数万个点,而高质量的虚拟现实应用则需要数百万个量级的点。随着计算速度的提高和新应用的发现,随着时间的推移,可能会出现对更高分辨
率数据的需求。
85.虽然点云数据是有用的,但缺乏有效和高效的压缩(即,编码和解码过程)可能会阻碍采用和部署。在其他数据压缩(如音频或视频)的情况下不会出现对点云进行编解码的特定挑战是点云几何形状的编解码。点云往往是稀疏的,这使得高效编解码点的位置更具挑战性。
86.用于编解码点云数据的更常见机制中的一个机制是通过使用基于树的结构。在基于树的结构中,针对点云的边界三维体积被递归地划分为子体积。树的节点对应于子体积。决定是否进一步划分子体积可以基于树的分辨率和/或子体积中是否包含任何点。节点可能具有占用标志,该占用标志指示其关联的子体积是否包含点。拆分标志可以发信号通知节点是否具有子节点(即,当前体积是否已被进一步拆分为子体积)。这些标志在一些情况下可以进行熵编码,并且在一些情况下,预测编解码可以被使用。
87.点云的三维体积也可以通过使用边界框而被限定。边界框的四叉树加二叉树(qtbt)结构允许将点云分隔为非立方体积,这可以更好地表示点云的整体形状或点云内的对象。四叉树(qt)分隔将体积拆分为四个子体积,例如通过使用两个平面拆分体积,从而将体积切割为四个部分。二叉树(bt)分隔将体积拆分为两个子体积,例如通过使用一个平面拆分体积,从而将体积切割为两个部分。
88.常用的树形结构是八叉树。在该结构中,体积/子体积都是立方体,并且子体积的每次拆分都会导致八个其他子体积/子立方体。另一常用的树形结构是kd树,其中体积(立方体或矩形长方体)被与轴中的一个轴正交的平面递归地划分为两个部分。八叉树是kd树的特殊情况,其中体积被三个平面划分,每个平面都与三个轴中的一个轴正交。kd树通常可以通过递归地应用二叉树(bt)分隔来获得。
89.体积的分隔不一定是两个子体积(kd树)或八个子体积(八叉树),但可能涉及其他分隔,包括划分为非立方体形状或涉及不相邻的子体积。
90.为了便于解释并且因为八叉树是用于汽车应用的流行的候选树形结构,本技术可以引用八叉树,但是要理解的是,本文描述的方法和设备可以使用其他树形结构来实施。
91.现在参照图1,其示出了根据本技术的各个方面的点云编码器10的简化框图。点云编码器10包括树构建模块12,用于接收点云数据,并且产生表示包含点云的体积空间的几何形状的树(在该示例中,八叉树),并且指示点与该几何形状中的点云的位置或位置。
92.在均匀分隔的树形结构的情况下,如八叉树,每个节点可以由占用位序列表示,其中每个占用位对应于节点中的子体积中的一个子体积,并且发信号通知子体积是否包含至少一个点。占用的子体积被递归地拆分为树的最大深度。这可以被称为树的序列化或二值化。如图1所示,在该示例中,点云编码器10包括二值化器14,用于二值化八叉树以产生表示树的二值化数据的位流。
93.然后可以使用熵编码器16对该位序列编码,以产生压缩的位流。熵编码器16可以使用上下文模型18对位序列进行编码,该上下文模型18基于熵编码器16的上下文确定来指定用于对位编解码的概率。上下文模型18可以在对每个位或限定的位集编解码之后自适应地更新。在一些情况下,熵编码器16可以是二元算术编码器。在一些实施方式中,二元算术编码器可以采用上下文自适应二元算术编解码(cabac)。在一些实施方式中,除算术编解码器之外的编解码器可以被使用。
94.在一些情况下,熵编码器16可能不是二元编解码器,而是可以对非二元数据进行操作。来自树构建模块12的输出八叉树数据可以不被评估为二元形式,而是可以被编码为非二元数据。例如,在八叉树的情况下,按照其扫描顺序的子体积内的八个标志(例如占用标志)可以被认为是2
8-1位数(例如值在1到255之间的整数,因为该值0对于拆分子体积是不可能的,即,如果它完全未被占用,则不会被拆分)。在一些实施方式中,这个数字可以由熵编码器使用多符号算术编解码器来编码。在子体积(例如立方体)内,限定这个整数的标志序列可以被称为“模式”。
95.通常在点云压缩中使用的惯例是占用位值为1发信号通知关联节点或体积被“占用”,即,它包含至少一个点,并且占用位值为0发信号通知关联节点或体积是“未占用”,即,它不包含点。更一般地,占用位可以具有指示被占用的值或指示未被占用的值。在下面的描述中,为了便于解释,示例实施例可以被描述,其中使用1=占用和0=未占用的惯例;然而,要理解的是,本技术不被限于该惯例。
96.在图2中示出了对应于编码器10的示例点云解码器50的框图。点云解码器50包括熵解码器52,该熵解码器52使用与编码器10所使用相同的上下文模型54。熵解码器52接收压缩数据的输入位流,并且熵解码数据以产生解压缩位的输出序列。该序列然后由树重构器56转换为重构的点云数据。树重构器56通过解压缩数据和树数据被二值化的扫描顺序的知识来重构树形结构。树重构器56因此能够从点云重构点的位置(取决于树编解码的分辨率)。
97.在欧洲专利申请号18305037.6中,本技术人描述了用于基于来自特定节点附近的先前编解码节点的一些占用信息在编解码特定节点的占用模式时使用的可用模式分布中进行选择的方法和设备。在一个示例实施方式中,占用信息是从父节点对特定节点的占用模式被获得的。在另一示例实施方式中,占用信息从与特定节点邻近的一个或多个节点被获得。欧洲专利申请号18305037.6的内容通过引用并入本文。这被称为确定“邻居配置”并且至少部分地基于邻居配置来选择上下文(即,模式分布)。
98.在欧洲专利申请号18305415.4中,本技术人描述了用于二元熵编码占用模式的方法和设备。欧洲专利申请号18305415.4的内容通过引用并入本文。
99.某些类型的点云数据倾向于具有强方向性。非自然环境尤其表现出很强的方向性,因为这些环境往往具有均匀的表面。例如,在激光雷达的情况下,道路和相邻建筑物的墙壁通常是水平或垂直平面。在房间内的内部扫描的情况下,地板、天花板和墙壁都是平面的。用于汽车视觉和类似应用的激光雷达往往分辨率较低,并且需要快速且高效地压缩。
100.八叉树是高效的树形结构,因为它们基于在每种情况下使用三个正交平面将立方体等分为八个子立方体的统一分隔过程,因此发信号通知它们的结构是高效的。然而,使用当前信令过程的八叉树无法利用识别一些非自然环境的平面性质所获得的效率。然而,kd树能够更好地调整分隔为点云的方向性。这使它们成为这些类型环境的更高效和更有效的结构。kd树的缺点是其结构的信令需要比八叉树多得多的数据。kd树不均匀的事实意味着用于改进八叉树压缩的一些技术对kd树不可用,或者在计算上难以实施。
101.因此,具有一种用于以通过利用水平和/或垂直方向性改进压缩的方式使用基于统一分隔的树形结构来表示非自然环境的机制将是有利的。
102.根据本技术的一个方面,改进的点云压缩过程和设备以平面编解码模式为特征。
平面模式被发信号通知以指示体积在其占用方面满足平面性的某些要求。具体地,如果体积的所有占用的子体积都定位在或位于公共平面中,则该体积是平面的。用于信令的句法可以指示体积是否是平面的,并且如果是,则指示公共平面的位置。通过利用这种平面性知识,压缩增益可以被实施。应用合格性准则以启用平面模式和用于平面模式信令的上下文自适应编解码的机制有助于提高压缩性能。
103.在下面的描述中,平面性被假定为相对于与体积和子体积的结构对准的笛卡尔轴。如果所有占用的子体积都位于与该笛卡尔轴之一正交的公共平面中,则该体积是平面的。作为惯例,轴将假定z轴是垂直的,这意味着(水平)平面与z轴正交。在下面的许多示例中,水平平面性将被用于说明概念;然而,将理解的是,本技术不被限于水平平面性,并且可以备选地或附加地包括相对于x轴、y轴或x和y轴两者的垂直平面性。此外,在一些示例中,平面性不必须通过与笛卡尔轴的正交性来对准。为了说明,在一个示例中,对角垂直平面性可以被限定为与x和y轴都成45度角。
104.现在参照图3和4,其中每一个都示出了示例体积300和400。在该示例中,水平平面性将被图示和讨论,但是本领域的普通技术人员将理解该概念将被扩展到垂直或其他平面性。
105.体积300被示出分隔为八个子体积。占用的子体积使用阴影指示,而未占用的子体积被示出为空。要注意的是,体积300中的较低(在z轴或垂直意义上)的四个子体积被占用。这种占用模式是水平平面的;即,每个被占用的子体积都在同一水平平面中,即,具有相同的z位置。体积400示出了水平平面占用模式的另一示例。体积400的所有占用子体积都在同一水平平面中。体积300示出了下平面被占用的情况。体积400示出了上平面被占用的情况。这可以被称为“平面位置”,其中平面位置发信号通知平面子体积在体积内的位置。在这种情况下,它是二元

上’或

下’信号。
106.体积的平面性不被限于平面的所有子体积(例如2x2x2体积的上半部分的所有子体积)都被占用的情况。在一些情况下,只有该平面中的一些子体积被占用,前提是该平面之外没有被占用的子体积。事实上,只有一个占用的子体积可以被认为是“平面的”。体积302、304、306、308、402、404、406和408分别图示了水平平面占用的示例。注意,相对于体积308和408,它们满足水平平面的要求,因为在每种情况下,体积308和408的上半部分或下半部分是空的,即,所有占用的子体积(在这些示例中,一个子体积)位于体积308和408的水平的半部分中。还应当理解,在这些示例中,具有单个占用子体积的体积也将满足相对于y轴的垂直平面性和相对于x轴的垂直平面性的要求。即,体积308和408在三个方向上都是平面的。
107.平面性可以通过平面模式标志相对于体积发信号通知,例如isplanar。在可能存在多种平面模式的情况下,例如相对于z轴、y轴和x轴,可能有多个标志:iszplanar、isyplanar、isxplanar。在该示例中,为了便于图示,假定仅水平平面模式被启用。
108.平面模式标志指示体积是否是平面的。如果它是平面的,那么第二句法元素、平面位置标志、planeposition可以被用于发信号通知平面在体积内的位置。在该示例中,planeposition标志发信号通知平面占用的子体积是在体积的上半部分还是下半部分。
109.在涉及非正交平面(例如相对于一个或多个轴是对角的平面)的更复杂的实施方式中,涉及多个标志或非二元句法元素的更复杂的信令句法可以被使用。
110.平面模式标志和/或平面位置标志可以使用任何合适的编码方案在位流中编解码。在一些实施方式中,标志可以使用预测和/或上下文自适应编解码熵编码以改进压缩。用于确定针对编解码标志的上下文的示例技术在下面进一步讨论。
111.占用编解码和平面模式
112.通过发信号通知平面性,占用位的编解码可以被更改,因为平面性信息允许做出关于缩短占用信令的占用模式的推断。例如,如果体积是平面的,那么平面位置标志未指向的四个子体积可以被假定为空,并且它们的占用位不需要被编解码。仅占用平面的最多四位需要被编解码。此外,如果该平面的前三个编解码位为零(未被占用),那么按照编解码顺序的最后(第四)位可以被推断为1(已被占用),因为平面信令指示该平面已被占用。附加地,如果平面信令指示体积不是平面的,那么必须在两个平面中有至少一个占用的子体积,如果任一平面的前三个占用位为零,则允许附加推断任一平面的最后位的占用。
113.因此,信令平面模式可以提供占用数据编解码的效率。然而,平面模式信令将句法元素添加到位流,并且可能无法在所有情况下都提供效率。例如,在密集的点云中和在某些深度下,信令平面性可能不是有利的,因为根据定义具有超过五个被占用的子节点的任何节点都无法是平面的。因此,具有针对启用平面模式的合格性准则可能是更有利的。提供适应当地数据的合格性准则将更有利。
114.在一个示例中,合格性可能偏向于与稀疏云一起使用。例如,合格性准则可以基于诸如体积中占用的子节点的平均数量等指标。该运行平均值可以针对树的某个深度确定,并且然后用于在下一较低深度处的平面模式的合格性。在一个示例中,如果占用的子体积的平均数量大于3,则平面模式可以被禁用。这种技术具有简单的优点,但缺乏对云的本地属性的适应。
115.在另一示例中,运行概率因子可以被确定。概率因子可以指示节点是平面的可能性,即,平面性的概率。如果概率低,则指示信令平面性的成本会很高,而潜在的增益很小。如果当时的概率因子大于阈值,则阈值合格性值可以被设置,并且平面模式可以针对给定的体积/节点启用:
116.p=prob(planar)≥阈值
117.作为示例,所选的阈值可以是0.6;然而,应当理解,其他值可以被用于其他情况。概率在编解码过程期间更新。更新过程可以针对特定应用的快速或缓慢更新进行调谐。更快的更新可能会向最近编解码的节点给出更大的权重或偏差。
118.示例概率更新过程可以被表达为:
119.p
new
=(lp+δ(coded node))/(l+1)
120.在以上表达式中,p为当前概率,p
new
为更新概率,δ(coded node)为当前节点的平面状态,其针对非平面为0并且针对平面为1,并且l为调谐更新发生的速度的加权因子。加权因子l可以被设置为2的幂减去1,诸如255,以允许简单的整数实施方式;更具体地,除法可以使用简单的偏移操作来实施。注意,平面状态并不一定意味着平面模式标志被编码,,概率都会追踪最近节点中的平面性,无论平面模式是否被启用。例如,在解码过程期间,任何节点的平面状态在解码与该节点相关联的占用位之后是已知的,而与平面模式标志是否被解码无关。
121.例如,当节点占用被编码或解码时,可能会发生概率的更新。在另一示例中,当节
点平面信息针对当前节点解码时,可以发生概率的更新。更新的概率然后被用于确定针对平面模式信令的编解码顺序中的下一节点的合格性。
122.如早前提到的,平面模式可以针对水平平面(z轴)或垂直平面(x轴或y轴)或任何两个或所有三个平面发信号通知。在可以为多于一个方向发信号通知平面模式的情况下,合格性准则可能会有所不同。即,针对节点发信号通知的每个附加平面模式在占用信令方面的益处是一半。利用第一平面模式,如果是平面的,则占用位的一半可以被推断。利用第二平面模式,仅剩余四个占用位中的两个可以被推断,依此类推。因此,用于发信号通知附加平面模式的阈值可以高于第一平面模式。
[0123]“第一”、“第二”和“第三”平面模式的定义可以基于概率和其从最可能到最不可能的顺序。阈值然后可以被应用于合格性,其中第一阈值低于第二阈值,依此类推。示例阈值是0.6、0.77和0.88,尽管这些仅仅是说明性的。在另一实施例中,仅存在一个阈值,并且即使多于一个平面模式满足阈值,也仅启用最可能的平面模式。
[0124]
现在参照图5,其以流程图的形式示出了使用平面模式对点云数据编码的示例方法500。方法500反映了用于对体积的占用信息进行编码的过程。在该示例中,根据基于八叉树的编解码,体积被均匀地分隔为八个子体积,每个子体积都具有占用位。为了简单起见,本示例假设仅一种(例如,水平)平面模式被使用。
[0125]
在操作502中,编码器评估体积是否合格用于平面编解码模式。如上面讨论的,在一个示例中,合格性可以基于云密度,这可以使用被占用子节点的平均数量来评估。为了提高局部适应性,合格性可以基于概率因子追踪。如果平面编解码模式不合格,那么如操作504所指示的,体积的占用模式不使用平面编解码模式编码。
[0126]
如果平面模式被启用,那么在操作506中,编码器评估体积是否是平面的。如果不是,那么在操作508中,它对平面模式标志进行编码,例如isplanar=0。在操作510中,编码器然后基于每个平面至少有一个占用的子体积来对占用模式编码。即,占用模式被编码,并且如果为任一平面(上平面或下平面)编解码的前三位为零,那么该平面的最后(第四)位未被编解码,并且由于对应的子体积必须被占用而被推断为1。
[0127]
如果平面模式被启用并且体积是平面的,那么在操作512中,平面模式标志被编码,例如isplanar=1。因为体积是平面的,所以编码器然后还对平面位置标志planeposition进行编码。平面位置标志发信号通知平面占用的子体积是在体积的上半部分还是下半部分。例如,planeposition=0可能对应于下半部分(即,下z轴位置),并且planeposition=1可能对应于上半部分。然后占用位基于体积的平面性和占用的子体积的位置的知识来编码。即,多达四位被编码,因为四个可能被推断为零,并且如果编码的前三个为零,则第四位可能被推断为1。
[0128]
对编码的点云数据进行解码的示例方法600在图6中示出。示例方法600由接收编码数据的位流的解码器实施。针对当前体积,解码器在操作602中确定该体积是否合格用于平面模式。合格性评估与在编码器处执行的评估相同。如果不合格,那么解码器按照通常不使用平面模式信令对占用模式进行熵解码,如操作604所指示的。
[0129]
如果平面模式被启用,那么在操作606中,解码器解码平面模式标志。解码的平面模式标志指示体积是否是平面的,如操作608所指示的。如果不是平面的,那么解码器解码占用位,从而知道每个平面中的至少一个子体积被占用。这可以允许解码器取决于解码的
其他位的值来推断占用位中的一个或两个。
[0130]
如果解码的平面模式标志指示体积是平面的,那么在操作612中,解码器解码平面位置标志。解码的平面位置标志指示占用的子体积是在体积的上半部分还是下半部分。基于该知识,解码器然后将未占用的一半中的四个占用位的值推断为零,并且它对占用的一半的占用模式的多达四位进行解码,如操作614所示。
[0131]
如早前提到的,占用位的编解码可以包括部分地基于邻居配置熵编码,其中邻居配置反映与当前体积共享至少一个面的各种体积的占用。在评估邻居配置时,如果邻居配置(nc)为零,意味着没有邻近体积被占用,那么标志可以被编解码以发信号通知当前体积是否具有单个占用的子体积。
[0132]
使用nc和单节点信令的占用位编解码可以基于图7所示的平面模式信令来适应。图7示出了占用位编解码的示例方法700。流程图的示出方法700的部分反映了平面信令对占用位编解码的影响。尽管未示出,但可以假定发生了合适的合格性测试,并且平面标志和位置标志(如果适用的话)被编码/解码。在该示例中,将假定只有一种平面模式是可能的,但扩展到其他模式或附加模式将被理解。
[0133]
在操作702中,编解码器评估nc是否为零,即,所有邻近体积是否都是空的。如果不是,那么编解码器在操作704中评估体积是否是平面的。如果不是平面的,那么编解码器在知道每个平面中的至少一位是1的情况下对八个占用位进行编码或解码,如操作706所示。如果是平面的,那么编解码器推断未占用平面的位为零,并且编解码其他四位,从而知道占用位中的至少一个是1。
[0134]
如果nc为零,那么编解码器确定是否存在单个占用的子体积,这在位流中由单个节点标志指示,如操作710所示。如果单个节点为真,那么在操作712中,数据被旁路编解码以发信号通知关于体积内的单个节点的位置的任何剩余xyz位置数据,这些数据尚未从编解码的平面模式和平面位置标志中获得。例如,如果平面模式被启用以对水平平面信息进行编解码,那么为了向单个节点位置发信号通知,x和y标志被旁路编解码,但z位置是从平面位置标志中已知的。
[0135]
如果单个节点为假,那么在知道至少两个子体积被占用的情况下,占用位被编解码,如操作714所指示的。这可以包括确定体积是否是平面的,并且如果是,则确定其平面位置,然后相应地编解码占用位。例如,如果是平面,那么未占用平面可以被推断为包含所有零位,并且占用平面的位可以被编解码,并且其中最多两个可以基于至少两个子体积被占用的知识来推断。
[0136]
现在参照图8,其示出了图示利用可能的三种平面模式对占用位进行编解码的一种示例方法800的流程图。流程图的示出方法800的部分反映了平面信令对占用位编解码的影响。尽管未示出,但可以假定发生了合适的合格性测试,并且平面标志和位置标志(如果适用的话)被编码/解码。编解码器首先评估所有三个平面模式是否指示体积相对于所有三个轴是平面的,如操作802所示。如果是,那么它们共同指示单个占用的子体积的位置,并且所有占用位可以被推断,如操作804所示。
[0137]
如果不是都是平面的,那么编解码器在操作806中评估邻居配置是否为零。如果nc不为零,那么在操作808中,占用位基于平面模式信令编解码。如上面讨论的,占用位编解码可以由平面模式信令屏蔽,允许一些可能的推断被进行来缩短占用编解码。
[0138]
如果nc为零,那么单个节点标志可以被编解码。编解码器首先评估平面模式标志中的至少一个是否指示平面模式为假。如果是,则这意味着它无法是单节点情况,因为多于一个子体积被占用。因此,如果不是这种情况,即,在操作810中没有平面为假,那么单节点标志在操作812中被评估和编解码。如果单节点标志被设置,则单节点位置的x、y、z位可以被旁路编解码到它们尚未从平面位置数据中推断出的程度,如操作814所示。
[0139]
如果操作810确定至少一个平面模式标志指示体积是非平面的,或者如果在操作812中信号节点标志指示它不是单个节点,那么编解码器在操作816中评估是否存在指示体积在两个方向上是平面的两个平面模式标志,并且如果是,那么所有占用位可以在操作804中推断。如果不是,那么占用位在操作818中编解码,从而知道平面性(如果有的话)并且至少两个位是非零的。
[0140]
本领域的普通技术人员将理解,针对点云编解码的当前测试模式中采用的特征是推断直接编解码模式(idcm),其用于处置非常孤立的点。由于与邻近节点几乎没有相关性,因此孤立点的位置被直接编解码,而不是对级联的单个子节点的占用信息进行编解码。该模式在节点孤立的条件下是合格的,并且在合格性的情况下,idcm激活由idcm标志发信号通知。在激活的情况下,属于该节点的一个或多个点的局部位置被编解码,然后该节点成为叶节点,有效地停止了该节点的递归分隔和基于树的编解码过程。
[0141]
发信号通知平面性的本过程可以通过在发信号通知idcm之前发信号通知平面性(如果合格的话)并入到具有idcm模式的编解码过程中。首先,节点用于idcm的合格性可能会受到平面信息的影响。例如,如果节点不是平面的,则该节点可能不合格用于idcm。其次,在idcm激活的情况下,平面知识有助于对与节点相关联的体积中的点的位置进行编解码。例如,以下规则可以被应用:
[0142]

如果节点是x平面的,则平面的位置planexposition是已知的,因此点的x坐标的最高位是从平面位置已知的。该位在idcm中未编解码;解码器将从平面位置推导出它
[0143]

如果节点是y平面的,则平面的位置planeyposition是已知的,因此点的y坐标的最高位从平面位置已知。该位在idcm中未编解码;解码器将从平面位置推导出它
[0144]

如果节点是z平面的,则平面的位置planezposition是已知的,因此点的z坐标的最高位从平面位置已知。该位在idcm中未编解码;解码器将从平面位置推导出它
[0145]
如果节点在多个方向上是平面的,则xyz坐标的最高位的推断仍然成立。例如,如果节点是x平面和y平面的,则x坐标和y坐标的最高位由planexposition和planeyposition推断。
[0146]
平面模式句法的熵编码
[0147]
平面模式句法(诸如平面模式标志或平面位置标志)可以表示位流的重要部分。因此,为了使平面模式在压缩点云数据中有效,确保平面信息利用有效的上下文确定进行熵编码可能是有利的。
[0148]
回想节点/体积是否为平面的是使用平面模式标志isplanar发信号通知的。在示例的本讨论中,将假设平面模式适用于水平平面性,即,相对于z轴。在该示例中,该标志可以被称为iszplanar。标志的熵编码可以采用二元算术编解码器,例如上下文自适应二元算术编解码器(cabac)。上下文(或内部概率)可以使用一个或多个预测因素来确定。
[0149]
当前节点或子体积的平面模式标志发信号通知子体积内的子子体积是否是平面
的。当前节点或子体积存在于父体积内。作为示例,用于确定用于对平面模式标志进行编解码的上下文的预测因素可以包括以下一项或多项:
[0150]
(a)父体积平面性;
[0151]
(b)相邻邻近体积的占用;和
[0152]
(c)到相同深度和相同z轴位置处的最近占用的已编解码节点的距离。
[0153]
图9图示了关于父节点902内的当前节点900的三个示例因素。
[0154]
因素(a)是指父节点902是否是平面的。不管它是否是使用平面模式编解码的,如果父节点902满足平面性准则(在这种情况下,水平平面性),那么父节点902被认为是平面的。因素(a)是二元的:“父是平面的”或“父不是平面的”。
[0155]
因素(b)是指邻近体积904在与父体积的面(与平面对准)相邻的父深度处的占用状态。在水平平面性的情况下,如果当前节点900在父节点902的上半部分,则邻近体积904垂直地在父节点902上方。如果当前节点900在父节点902的下半部分,那么邻近体积904将垂直地在下方。在垂直平面性的情况下,邻近体积将与一侧相邻,这取决于x轴或y轴平面性和当前节点的位置。因素(b)也是二元的:邻居要么被占用,要么未被占用。
[0156]
因素(c)是指在已编解码节点与当前节点900位于相同深度并且位于公共平面(即,在与当前节点900相同的z轴位置)的条件下,最近的已编解码节点906有多远。已编解码节点906不一定在相邻体积中,并且可能在一定距离之外,这取决于云的密度。编解码器追踪已编解码节点,并且标识满足这些准则的最接近节点。当前节点900和已编解码节点906之间的距离d可以通过节点900和906的相对位置来确定。在一些实施例中,为了便于计算,l1范数可以被用于确定距离,即,增量x的绝对值加上增量y的绝对值。在一些实施例中,l2范数可以被用于确定距离,即,由增量x平方加上增量y平方给出的平方和(的平方根)。
[0157]
在一些实施方式中,距离d可以被离散为两个值“近”和“远”。“近”d和“远”d之间的划分可以被适当地选择。通过将距离分类为近或远,因素(c)也是二元的。要了解的是,在一些实施方式中,距离可以被离散为三个或多个值。
[0158]
如果所有三个示例因素在上下文确定中被使用,那么2x2x2=8个单独的上下文可以被维持以用于对平面模式标志编解码。
[0159]
如果平面模式标志针对当前节点900编解码并且当前节点900是平面的,那么平面位置标志可以被编解码,诸如planezposition。平面位置标志发信号通知当前节点900的哪一半包含被占用的子子体积。在水平平面性的情况下,平面位置标志发信号通知下半部分或上半部分。
[0160]
平面位置标志的熵编码也可以采用二元算术编解码器,例如cabac。上下文(或内部概率)可以使用一个或多个预测因素被确定,其可能的示例包括:
[0161]
(a')相邻邻近体积904的占用;
[0162]
(b')到相同深度和相同z轴位置处的最近占用的已编解码节点906的距离;
[0163]
(c')如果相同深度和z轴位置处的最近占用的已编解码节点906是平面的,则它的平面位置;以及
[0164]
(d')当前节点900在父节点902内的位置。
[0165]
因素(a')与上面关于平面模式标志上下文讨论的因素(b)相同。因素(b')与上面关于平面模式标志上下文讨论的因素(c)相同。在一些示例实施方式中,因素(b')可以将距
离离散为三个类别:“近”、“不太远”和“远”。如上面讨论的,距离可以使用l1范数或l2范数或任何其他合适的度量来确定。
[0166]
因素(c')指的是最近占用的已编解码节点906是否是平面的,并且如果是的话,它是上平面还是下平面,即,它的平面位置。结果是,即使是平面的遥远已编解码节点也可能是当前节点的平面性或平面位置的强预测因素。即,因素(c')可能有三种结果:不是平面的、与当前节点900的平面位置相同、与当前节点900的平面位置不同。如果当前节点900和最近的已编解码占用节点906具有相同的平面位置,那么它们所占用的子子体积都在同一z轴位置的公共水平平面中对准。
[0167]
因素(d')指的是当前节点900是位于父节点902的上半部分还是下半部分(在水平平面性的情况下)。因为父由于合格性要求而可能是平面的,所以如果当前节点900是平面的,那么平面位置更可能在父节点902的“外部”而不是朝向中间。因此,当前节点900在其父节点902中的位置对该当前节点900内的平面位置的概率具有显著影响。
[0168]
在组合所有四个因素的实施方式中,在相同z处最近占用的已编解码节点906且深度(作为当前节点900)是平面的情况下,可能存在2x3x2x2=24个预测组合;否则,当在相同z和相同深度处最近的已编解码节点906不是平面的时,特定的上下文被替代地使用。因此,在这种示例中,24+1=25个上下文可以使用二进制算术编解码器对平面位置标志编解码。
[0169]
尽管以上示例在平面模式标志的情况下涉及用于上下文确定的三个因素,并且在平面位置标志的情况下涉及用于上下文确定的四个因素,但是应当理解,本技术包括用于上下文确定的各个因素的使用以及这种因素的所有组合和子组合。
[0170]
现在参照图10,其图解地图示了用于在上下文确定过程期间管理最近占用的已编解码节点的确定的机制的一个示例实施方式。在该示例机制中,编解码设备使用存储器,例如易失性或持久性存储器单元,以实施包含与占用的已编解码节点相关的信息的缓冲器1000。具体地,缓冲器1000分配空间以追踪树中具有相同z轴位置和深度的已编解码节点。在该特定示例中,缓冲器1000追踪与具有相同z轴位置和深度的多达四个已编解码节点相关的信息。
[0171]
示例缓冲器1000的每行对应于z轴位置和深度。四列对应于具有该z轴位置的四个最近已编解码的占用节点。例如,示例行1002包含与四个已编解码占用节点相关的数据。每个已编解码节点的存储数据可以包括已编解码占用节点的x和y位置,无论节点是否是平面的,如果是,则为平面位置。
[0172]
在对当前节点1004进行编解码的过程中,编解码设备访问缓冲器1000,以基于示例行1002用于与当前节点1004相同的z轴位置来从示例行1002中的四个存储节点中标识最近的占用的已编解码节点。如上面讨论的,距离度量可以基于l1范数、l2范数或任何其他距离度量。为缓冲器1000中的每个节点存储的x和y位置辅助直接确定最近节点,尤其是在l1范数的情况下。
[0173]
一旦最近节点被标识出,诸如最近节点1006,它与当前节点1004的距离可能还有它的平面性和/或平面位置在(多个)上下文确定中使用。缓冲器1000然后通过将当前节点1004添加到缓冲器1000的第一位置1008并且右移缓冲器1000的该示例行1002中的所有其他节点数据来更新,从而导致缓冲器1000中的最后一项被丢弃。在一些示例中,基于距离确定,所标识的最近节点可能与当前编解码保留较高的潜在相关性,因此在将当前节点1004
添加到缓冲器1000之前,示例行1002的内容首先被重新布置以将最近的节点1006移动到第一位置1008并且将节点右移以适应,例如在该示例中,第一位置1008和第二位置中的节点数据分别被偏移到第二位置和第三位置。通过这种方式,编解码设备避免过早地将最近标识的最近节点从缓冲器1000中排除。
[0174]
应当理解,所描述的缓冲器1000是用于管理与最近节点相关的数据的机制的一个示例实施方式,但是本技术不一定被限于该示例,并且用于追踪最近节点信息的许多其他机制可以被使用。此外,应当理解,在缓冲器1000中仅保留固定数量的最近编解码占用节点意味着所标识的节点有可能实际上不是最近的占用已编解码节点,而仅仅是可从缓冲器1000获得的最近的已编解码节点;然而,即使当缓冲器被限制为四个候选时,如以上示例所示,对性能的影响是可忽略的。
[0175]
占用模式的角度模式编解码
[0176]
接下来,用于对已由包括波束集的波束组合获取(例如采样)的点云进行编解码的特定模式将被描述。例如,波束可以是光束。在没有旨在限制的情况下,将参照激光雷达作为用于获取点云的这种波束组合的示例,但是要理解的是,其他波束组合也是可行的并且被理解为由本描述覆盖。同样地,没有旨在限制,将参照激光束,但是其他(光学)波束也是可行的并且被理解为由本描述覆盖。例如,波束组合可以涉及任何旋转波束组合,包括但不限于激光雷达。作为备选,波束组合可以与扫描波束组合或固态激光雷达相关。在任何情况下,这些波束组合被假设为以某些预先限定的(和已知)的角度(特别是仰角)发射波束。应当理解,在整个申请中描述的任何波束组合都可以被安装在例如汽车或任何其他车辆上。
[0177]
通常,激光雷达获取的点云是通过自旋激光束集获取的。这种自旋激光束集的示例在图11中示意性地图示。最常见的设置是发射相应激光束1106的垂直布置的激光器1104的阵列(例如16、32或64个激光器)。激光器1104被安装在围绕旋转轴1102旋转的自旋头1101上。备选地,激光器1104本身可以围绕旋转轴1102旋转。包括激光器1104的头部1101可以被称为波束组合。
[0178]
自然地,由特定激光束获取的点相对于垂直于头部轴的平面具有固定的(或固定到噪声和/或测量精度)获取垂直角θ(例如仰角)。这在图12中示意性地图示,其中激光器1204以相对于垂直于头部轴1202的平面1208的获取角度(例如仰角)θ发射激光束1206。图13示出了头部1301的坐标轴的可能定义。
[0179]
图14在r

tan(θ)图中示出了由具有64个激光束的示例激光雷达获得的点云的点。有些固定的激光角tan(θ)在图中可以被清晰地观察到。正角表示激光器指向水平平面上方(即,朝向天空),而负角表示激光器指向水平平面下方(即,指向地面)。值得注意的是,激光雷达的激光被刻意以不同的角度定向——例如使得不同的激光挑选同样高的物体(,如建筑物、电线杆、树等)的不同部分。根据限定并且如图15所示,r是点1505距激光雷达头部1301(或通常的波束组合)的水平距离,并且垂直角tan(θ)的正切被限定为比率z/r,其中z是点1505相对于激光雷达头部1301的垂直仰角。
[0180]
从图14可以看出,点云的点可以在“准”2d空间中表示。例如,在2d空间(x,y)和与激光束相对应的有限垂直角集θ中,理论上表示是可能的。或者等价地在2d极坐标空间(φ,r)中,其中φ是方位角,并且垂直角θ是有限集。换言之,可以在球坐标(φ,r,θ)中表示点,其中θ只能取有限数量的值。这是遮挡的结果,导致每个(φ,θ)最多只有一个点。这种准2d
空间是理论上的,但实际上,测量噪声/精度和时间积分不会导致可能的θ的严格有限集,这是激光器的机械安装的结果。相反,观察到θ的值被散布到有限数量的值θ
laser
周围,并且必须处理这些值周围的“噪声”问题。
[0181]
上述准2d结构主要取决于一个或多个激光雷达(或一般的波束组合)的位置/定向和(多个)激光雷达的固有特点。如将在下面更详细地描述的,因此将句法元素(例如参数、标志)包括到描述(多个)激光雷达(或一般的波束组合/多个组合)的特点的位流中可能是有利的。这些句法元素可以指示波束组合的参考位置、特定波束的原点位置或特定波束的波束角中的至少一个。将这些句法元素包括到位流中可以在帧或序列级别完成。在任何情况下,该数据应该尽可能靠近压缩数据位流,以确保位流的可解码性并且最小化丢失可解码性所需数据的风险。
[0182]
注意到以上内容,本技术的一些实施例寻求在点云的高效表示中使用垂直激光角{θ
laser
}的从激光雷达特点(或相关波束组合的特点)获得的知识,使得压缩被改进。而且,由于强大且稳健的压缩能力已经通过使用八叉树表示和占用节点的邻近配置的使用获得,一些实施例寻求在对点云的八叉树表示进行编解码的上下文中使用该知识。
[0183]
得益于点云的准2d结构的可能解决方案是基于表示空间的变化。在这些基于空间变化的解决方案中,用于对点云编解码的高级句法可以发信号通知相对于空间变化和激光雷达在变化空间中的特点的信息。这种基于空间变化的解决方案的第一缺点是难以在不要求变化空间中的附加精度的情况下构建可逆的离散空间变化。因此,3d点云的无损压缩很难获得良好的性能。空间变化的示例是单色图像中的点云的表示,其中图像帧属于对(φ,θ)的有界空间[0,2π]*[-π/2,+π/2],并且像素的强度由距离r提供。当然,并非“图像”的所有像素都被占用。因此,点云可以被看作角空间(φ,θ)中的深度图。这引发了多个问题,诸如在φ和θ上分离所有点,使得它们中没有两个落在同一像素上所需的精度。此外,这种表示可以被高效地用于压缩点云还有待证明。这可能会使用特定的局部预测(例如得益于围绕固定角度θ
laser
的θ的散布)和其他压缩技术。它显然与点云的八叉树表示不兼容。最后,2d帧表示的主要缺点是无法处理由多于一个激光雷达获取的点云。这是非常实用的用例,因为一些制造商设想将多个激光雷达安装在车辆上(例如安装在所述车辆的侧面),而不是附接至车顶的单个激光雷达。因此,原生3d空间表示似乎是解决多激光雷达获取的唯一合理表示。
[0184]
在点云几何形状的八叉树表示的框架中,本技术提出限定和使用与点云的点或八叉树的节点相关联的角度θ,以改进被附接至父节点的占用位的压缩,并且发信号通知该父节点的子节点的占用。使用与点云的点或八叉树的节点相关联的角度θ的对应编解码模式在本技术中将被称为角度编解码模式。根据角度编解码模式,与点或节点相关联的角度θ与关联于波束(例如激光束)的固定角度{θ
laser
}进行比较,并且该比较被用于构建对子节点的占用的估计。实际上,在二元熵编码器中直接或间接(平面模式)编解码子节点的占用位的上下文的选择是基于估计值来执行的。该方案的可能实施方式现在将在下面更详细地描述。通常,可以说角度编解码模式涉及基于体积的子子体积(或子节点)或子子体积组的角度信息来确定用于熵编码当前体积(或节点)的占用模式的上下文,其中角度信息指示相对于与提供波束的波束组合相关联的位置的一个或多个角度(例如仰角)。
[0185]
令(x
head
,y
head
,z
head
)是(激光雷达的)头部(或一般的波束组合)的位置,在点云的
点所属的三维空间xyz(体积空间)中沿着z轴垂直定向。点(x,y,z)的垂直角θ的正切tan(θ)是仰角z-z
head
与该点相对于头部的距离r的比率。
[0186][0187]
从图16的r

tan(θ)图可以看出,该图示出了相对于图14的详细视图,针对由同一波束探测的点,角度tan(θ)在某种程度上是恒定的,但并非严格恒定。事实上,从图16的图(b)和(c)可以看出,针对每个波束,在(r,tan(θ))图中存在相应的包络,其包含由该波束获取的点。这个包络的宽度(在tan(θ)方向上)显然取决于距离r。这个包络的宽度是由于噪声和获取精度造成的,并且随着较低的r变宽。值得注意的是,相邻波束的包络不相互交叉。
[0188]
虽然将点归属于相应的包络已经提供了可以被用于改进压缩性能的附加知识,但获得通过宽范围的距离r表现出更稳定值的校正角度θ
corr
将是有利的。例如,这可以通过将校正项添加到每个波束发射器(例如激光器)相对于头部位置(或通常相对于波束组合的参考位置)的位置。
[0189]
图17示意性地图示了波束发射器1704相对于波束组合1701的参考位置1710的位置,用于解释校正角度θ以获得校正的角度θ
corr
的示例方法。具体地,波束发射器(例如激光器)l的位置(位置)通过相对于波束组合的参考位置1710(例如头部位置)的偏移(r
l
,z
l
)1712来校正,使得相应的波束1706从垂直位置z
head
+z
l
发射,并且(点的)到波束发射器激光器的距离被校正为r-r
l
。因此,波束发射器的校正位置可以被称为相应波束1706的原点位置或波束原点位置。校正角度θ
corr
取决于波束发射器索引(例如激光器索引)l并且由下式提供
[0190]
针对不太靠近波束组合的点(例如激光雷达的头部),即,距离r的值不太小,这个角度可以由下式近似
[0191][0192]
并且仅需要垂直校正z
l
,而径向校正r
l
可以被忽略。因此,从波束组合的参考位置开始,波束原点位置可以基于可以用(r
l
,z
l
)或仅用z
l
表达的相对位移来确定。
[0193]
图18示出了垂直校正z
l
对角度θ的影响。面板(a)对应于图16中的面板(b),并且面板(b)对应于图16中的面板(c)。面板(a)中的上包络和面板(b)中的下包络与未校正的(即,初始)角度θ相关。面板(a)中的下包络和面板(b)中的上包络与校正角度θ
corr
相关。可以清晰地看出,校正后的角度表现出基本上与距离r无关的平均常数行为。相应波束或波束发射器(例如激光器)l的角度θ
l
=θ
laser
被限定为该常数。
[0194]
为了在编码器侧和解码器侧都能够校正角度θ,以下值可以由编码器确定或提供给编码器,并且被编码为位流,使得解码过程可以使用相同的波束组合信息(例如激光雷达信息)作为编码过程:
[0195]

例如波束组合的参考位置(例如中心位置),诸如(激光雷达的)头部位置(x
head
、y
head
、z
head
)
[0196]

每个波束发射器(例如激光器)的相对位置(r
l
,z
l
)
[0197]

每个波束发射器(例如激光器)的恒定角度θ
l
[0198]
描述已经被用于获取(例如采样)要被编解码的点云的一个或多个波束组合的特
点的句法元素的示例在下面将更详细地描述。
[0199]
作为示例,波束组合的参考位置(例如激光雷达头部的位置)可以由用户提供,并且波束组合的波束发射器(例如激光器)的相对位置和校正角度可以在算法上找到。在一个示例中,这可以如下执行:
[0200]
1.首先,通过分析未校正角度θ的直方图,属于同一激光束l的点被提取
[0201]
2.然后,激光束l的相对位置(r
l
,z
l
)通过最小化提取点上的校正角度θ
corr,l
的标准偏差来确定。例如,这可以通过经典的最小化算法来执行。在仅垂直偏移z
l
被考虑的情况下,这是对候选垂直相对位置的间隔的简单最小化。
[0202]
3.最后,激光l的恒定角度θ
l
是提取点上的校正角度θ
corr,l
的平均值。
[0203]
接下来,用于确定点云的特定点或特定体积、子体积或子体积组的校正角度的示例方法将被描述。具体地,描述了一种用于确定点云的点相对于波束(例如激光束)l的校正角度的正切tan(θ
corr,l
)的方法。通过类似的方式,校正的角度可以通过简单地将节点同化到位于其中心的点来针对八叉树的节点(或其关联体积)确定。类似的考虑适用于体积的子体积或子体积组。
[0204]
关于体积(与八叉树的相应节点相关联),要理解的是,存在关于体积的大小和位置的条件,以明确地确定体积(例如体积中的点)已被哪个波束获取。如果两个波束与体积相交,则存在歧义。为了解决这个问题,本技术提出引入角度编解码模式的体积的(角度)合格性的概念。
[0205]
在一个示例中,体积(或其关联节点)的角度合格性被确定如下:
[0206]
1.计算体积的(参考位置,例如中心)与波束组合的参考位置(例如激光雷达头部的位置(x
head
,y
head
,z
head
))的距离r
[0207]
2.通过δθ=e/r计算体积的正切角度大小δθ,其中e是体积的典型长度(例如立方体边缘的长度)
[0208]
3.如果2δθ≤δθ
min,laser
=min|tan(θ
l1
)-tan(θ
l2
)|,则该体积是合格的,其中所有波束对均采用最小值,即,节点的角度大小小于(角度)最近的两个波束之间的角增量。因子2被选择为用于提供一些安全性边际的非限制性示例。其他因子(例如大于或等于1的因子)也是可行的。
[0209]
图19示出了角度合格的体积1920和角度不合格用于的体积1925的示例。即,体积1925的大小及其与波束组合1901的距离使得它由来自多个波束发射器1904的多个波束1906采样。另一方面,体积1920的大小及其与波束组合1901的距离使得它最多由单个波束1906采样。
[0210]
通常,确定体积(或其关联节点)的角度合格性可以通过首先确定从波束组合的参考位置看到的体积的角度大小的度量来进行。如上面提到的,参考位置可以是头部的位置。角度大小的度量可以与体积边缘从参考位置看到的角度相关,并且可以例如基于体积边缘的长度和体积(的参考位置)与波束组合的参考位置的距离来确定。因此,角度大小的度量例如可以是上面限定的角度大小δθ。然后,角度大小的度量与波束组合的相邻波束之间的差角的度量进行比较,诸如上面限定的差角δθ
min,laser
。即,差角可以是波束组合的最接近的相邻波束之间的差角。最后,基于比较结果确定体积是否是角度合格的。例如,确定角度合格性可以基于角度大小是否小于差角的一半(或差角的任何其他合适的部分,以提供合
适的安全性边际)。如下面将更详细地描述的,体积的角度合格性可能暗示用于编解码体积(的子体积)的占用模式的上下文可以基于角度信息来被确定或被选择。
[0211]
一旦角度合格性已经被确定,属于角度合格的体积的波束l就可以被确定,例如通过以下方法:
[0212]
1.从体积的参考位置(例如体积中心)的位置(x,y,z)确定相对于波束组合位置(x
head
,y
head
,z
head
)的z和r
[0213]
2.计算未校正的角度tan(θ)=z/r
[0214][0215]
3.通过找到|tan(θ)-tan(θ
l
)|最小的波束索引l来确定体积/点属于哪个最近的波束l
[0216]
一旦波束(例如激光束)l已经被确定,经校正的角度就可以通过以下公式计算
[0217][0218]
或者
[0219][0220]
其中,第二个等式可能实际上很有用,因为它避免了计算另一平方根倒数。
[0221]
通常,可以遵循以下方法来确定与八叉树的节点相关联的体积的校正角度θ
corr
。最初,相对于波束组合的参考位置,第一角度(例如仰角)针对体积内的参考位置确定。例如,体积内的参考位置可以是体积的中心。例如,波束组合的参考位置可以是波束组合的中心位置。基于第一仰角,被假设为已获取(或实际已获取)体积内的点的特定波束(或对应的波束发射器)l被确定。接下来,该特定波束的原点位置(波束原点位置)被确定或获取。这可以通过上述任何合适的方法来完成。在特定波束的原点位置可用的情况下,子体积或子体积组(例如体积内的平面)的校正仰角可以相对于特定波束的原点位置确定。
[0222]
图20以流程图的形式图示了对借助于包括波束集的波束组合获取的点云进行编码以生成压缩点云数据的位流的方法2000的示例。点云被限定在具有多个节点的树形结构(例如八叉树结构)中,该多个节点具有父子关系并且表示体积空间的所述几何形状,如本技术中其他地方描述的。点云位于递归地拆分为子体积并且包含点云数据的点的体积空间内。点云可以相对于体积空间中的笛卡尔轴来限定,该笛卡尔轴可以是垂直定向的z轴,其与水平平面正交并且基本上平行于波束组合(例如激光雷达)的主轴或主定向轴(例如旋转轴)。在体积空间中,体积被分隔为子子体积集,并且该体积与树的节点相关联,其子体积与该节点的子节点相关联。与每个相应的子子体积相关联的占用位指示该相应子子体积是否包含至少一个点。可以说子子体积的占用位限定了占用模式。在方法2000中,操作2010到2040针对与拆分为子子体积的体积相关联的当前节点执行。
[0223]
在操作2010中,体积的占用模式基于体积的子子体积的占用状态来确定。操作2020到2040涉及将占用模式的表示熵编码为位流。在操作2020中,体积的子子体积或子子体积组的角度信息被确定。该角度信息指示相对于与体积空间内的波束组合相关联的位置的一个或多个角度(例如仰角)。当从与波束组合相关联的位置看时,仰角可以指示相应子
子体积或子子体积组在与波束组合的主方向(例如主轴)(诸如波束集的公共旋转轴,例如激光雷达的旋转轴)基本正交的平面上方的仰角。在一些实施方式中,该平面可以是水平平面(例如xy平面)。例如,这些角度可以被表达为它们的正切。与波束组合相关联的位置可以是波束组合的(参考)位置或波束组合的特定波束的原点位置。在操作2030中,用于对占用模式的表示编码的上下文基于角度信息被确定。最后,在操作2040中,占用模式的表示是使用所确定的上下文进行熵编码的。
[0224]
图21以流程图的形式图示了对压缩点云数据的位流进行解码以生成重构点云的方法2100的示例。与方法2000一致,假设点云已经借助于包括波束集的波束组合来获取。进一步地,点云被假设为以与上面针对方法2000描述相同的方式限定。操作2110至2130针对与拆分为子子体积的体积相关联的当前节点执行。
[0225]
在操作2110中,体积的子子体积或子子体积组的角度信息被确定。该角度信息指示相对于与体积空间内的波束组合相关联的位置的一个或多个角度(例如仰角)。在操作2120中,用于解码体积的占用模式的表示的上下文基于角度信息来确定。如上文,占用模式指示体积的子子体积的占用状态。最后,在操作2130中,位流被熵解码,以使用所确定的上下文来生成占用模式的重构表示。
[0226]
如上面提到的,角度信息可以与校正的角度(例如校正的仰角)相关,在某种意义上,校正的角度是参照被假设为已经采集(例如采样)当前体积中的点的特定波束的波束原点位置来测量的。因此,确定角度信息可以包括:确定体积内的参考位置相对于波束组合的参考位置的第一(例如初始)仰角。一旦该第一仰角可用,它可以被用于确定可以被假设为已获取体积内的点的特定波束。在知道特定波束的情况下,它的原点位置可以被确定,例如通过使用查找表或通过算法确定它。最后,体积的子子体积或子子体积组的一个或多个仰角可以相对于特定波束的原点位置确定。然后这些仰角将对应于校正的仰角。
[0227]
接下来,在上面介绍的平面编解码模式中使用用于确定对平面位置标志进行熵编码的上下文的角度信息的实施例将被描述。
[0228]
已经观察到,对平面信息(即,平面模式标志(例如标志isplanar)和针对平面位置的平面位置标志位(例如标志planeposition))直接编解码而不进行压缩可能会导致低效的平面模式。因此,压缩与平面模式相关联的句法可以证明是有利的。如上所述,平面位置标志的这种压缩可以通过基于预测方法为平面位置标志选择二元熵编码器的上下文来实现。
[0229]
针对z平面模式,如果节点是平面的(iszplanar==true),则平面位置(底部或顶部)必须由额外位planezposition发信号通知。该位也使用二元算术编解码器进行编解码,其上下文取决于预测信息,如图9所示。该预测信息由以下任何、一些或全部组成:
[0230]

父节点与当前节点相邻的垂直邻居的占用,
[0231]

在相同z和相同深度处与最近的已编解码节点的距离d,其中d可以被离散为三个值“近”或“不太远”或“远”,
[0232]

在相同z和相同深度(与当前节点相同)的最近的已编解码节点的平面位置(如果有的话,底部或顶部),以及
[0233]

当前节点相对于其父节点的垂直坐标z。
[0234]
使用所有以上预测信息,假如在相同z和深度(与当前节点相同)处的最近已编解
码节点是平面的,这会导致2
×3×2×
2=24种可能的预测组合;否则,当在相同z和相同深度处的最近已编解码节点不是平面的时,额外的特定上下文将被替代地使用。因此,可以由二元算术编解码器使用24+1=25个上下文对平面位置编解码。
[0235]
本实施例提出通过使用角度合格的节点的角度信息(例如,tan(θcorr,l))的知识来增强或替换位planezposition的预测信息。
[0236]
因此,该实施例中的操作2030或操作2120中的上下文确定可以取决于该体积是否是(被确定为)平面体积。为此,方法2000和2100可以包括相应的确定步骤。如上所述,平面体积是在相应平行平面中分隔为多个子子体积集的体积,包含至少一个点的所有子子体积位于相同平面中。平行平面可以被理解为平行于水平平面,或正交于波束组合的主轴(例如激光雷达头部的旋转轴)。针对八叉树的情况,例如会有四个子子体积的第一集和四个子子体积的第二集,并且平面位置标志将指示包含点的子子体积是位于第一集还是第二集。
[0237]
如果体积是(被确定为)平面体积,则在操作2030或操作2120中确定用于对占用模式的表示进行编解码的上下文包括基于上面限定的角度信息确定用于对平面位置标志进行编解码的上下文。该平面位置标志(例如标志planezposition)发信号通知包含至少一个点的子子体积所处的平面的位置。而且,在操作2040或操作2130中熵编码占用模式的表示包括使用所确定的上下文来熵编码平面位置标志。
[0238]
在一些实施方式中,上面给出的预测信息可以被角度信息取代、部分取代或增强。因此,确定用于对平面位置标志进行编解码的上下文可以至少部分地基于以下一项或多项:(a')邻近体积在该体积的父体积的深度处的占用,(b')体积与最近已编解码的占用体积之间的距离,(c')最近已编解码的占用体积的平面位置(如果有的话),或者(d')除了角度信息之外的父体积内的体积的位置。距离可以是近的、不太远的或远的,并且基于计算距离度量并且将其与第一阈值和第二阈值进行比较。通常,确定用于编解码平面位置标志的上下文可以基于(a')、(b')、(c')和(d')中的三个或多个的组合和角度信息。
[0239]
被用于确定上下文的角度信息可以包括体积的多个平行平面中的每个平面相对于已经为体积确定的特定波束的原点位置的相应仰角。因此,确定角度信息可以包括确定相应平面的这些仰角。仰角可以针对每个平行平面内相对于特定波束的原点位置的参考位置(例如中心位置)确定。确定用于对平面位置标志进行编解码的上下文可以包括将多个平行平面中的每个平面的相应仰角与假设已经对体积进行采样的特定波束的波束角θ
l
(或tan(θ
l
))进行比较,并且确定基于相应比较的结果对平面位置标志进行编解码的上下文。
[0240]
针对八叉树的情况,以上相当于分别为底部和顶部虚拟平面计算两个角度,即,底部和顶部校正垂直角。在一些实施方式中,两个角度的确定可能取决于节点的子节点是否是角度合格的。这两个角度对应于与位于两个底部和顶部虚拟平面中心的点相关联的校正角tan(θ
bottom,l
)和tan(θ
top,l
),并且如图22所图示的。在该附图中,角度合格的体积2220具有(对应于子体积集的)上平面2230和(对应于子体积集的)下平面2240。当从发射波束2206的波束发射器2204的原点位置看时,该波束2206在体积2220中具有采样点,校正角度tan(θ
top,l
)测量上平面2230的中心位置2232在水平平面2208上方的仰角。同样地,当从波束发射器2204的原点位置看时,校正角度tan(θ
bottom,l
)测量下平面2240的中心位置2242在水平平面2208上方的仰角。
[0241]
一旦体积的虚拟平面的仰角tan(θ
top,l
)和tan(θ
bottom,l
)被计算,它们就可以被用
于确定用于对平面位置标志进行熵编码的上下文。例如,确定上下文可以基于以下至少一项:特定波束的波束角tan(θ
l
)与多个平行平面中的每个平面的相应仰角之间的差、特定波束的波束角与多个平行平面中的每个平面的相应仰角之间的差的幅度以及特定波束的波束角和多个平行平面中的每个平面的相应仰角之间的差的幅度中的最大差的幅度与特定波束的波束角和多个平行平面中的每个平面的相应仰角之间的差的幅度中的最小差的幅度之间的差的量化结果。在一些实施方式中,这可以涉及将特定波束的波束角与多个平行平面中的每个平面的相应仰角之间的所述差相互比较和/或将特定波束的波束角和多个平行平面中的每个平面的相应仰角之间的所述差的幅度相互比较。例如,量化可以是三元量化。
[0242]
针对八叉树的情况,用于对平面位置标志进行熵编码的上下文可以使用两个角度tan(θ
bottom,l
)和tan(θ
top,l
)(可能连同上面给出的预测信息(a')到(d'))确定。
[0243]
例如,角度上下文索引可以通过如下计算上下文索引从底部/顶部垂直角tan(θ
bottom,l
)和tan(θ
top,l
)确定:
[0244]

上下文索引的第一位取决于差tan(θ
l
)-tan(θ
bottom
)和tan(θ
l
)-tan(θ
top
)是否具有相同的符号
[0245]

上下文索引的第二位取决于|tan(θ
l
)-tan(θ
bottom
)|和|tan(θ
l
)-tan(θ
top
)|中的哪一个具有最高幅度
[0246]

上下文索引还取决于|tan(θ
l
)-tan(θ
bottom
)|和|tan(θ
l
)-tan(θ
top
)|中的差d=max-min的量化(例如三元量化)。量化可以相对于与节点中心相关联的反半径r执行,即,值d*r可以被量化
[0247]
在伪代码中,以上示例中的角度上下文索引的确定可以通过以下获得
[0248]
[0249]
在以上示例中,量d*r被量化为对应于d*r值的四个值{0,1,2,3},其小于0.5,介于0.5和1之间,介于1和1.5之间或大于1.5。因此,角度上下文索引可以采用2*2*4=16个值。
[0250]
如上面提到的,角度上下文可以更换在平面模式上下文确定中使用的预测信息(例如预测信息(a')到(d')),或增强预测信息以创建新的(即,更大的)平面/角度上下文集。
[0251]
接下来,使用角度信息来确定用于熵编码体积的子子体积的占用位的上下文的实施例将被描述。
[0252]
当前节点(当前体积)的子节点(子子体积)的占用由相应占用位发信号通知,这些占用位由算术熵编码器编解码,其中“上下文”取决于相邻节点的占用而选择。针对八叉树的情况,八个子节点的占用由八个相应的占用位发信号通知。
[0253]
因此,在本实施例中,确定用于对占用模式的表示编解码的上下文包括确定用于对体积的子子体积的占用位编解码的上下文。进一步地,对占用模式的表示熵编码包括使用所确定的上下文来熵编码占用位。
[0254]
常规来说,占用位的上下文选择是通过所谓的obuf机制对算术编解码器本身执行的,该机制在(非常)有限数量的编解码器中提供二元熵编码器的索引,这些编解码器被选择用于编解码占用位。例如,所选编解码器的索引可以取决于以下信息获得:
[0255]

先前编解码的占用位的值,
[0256]

邻近信息,
[0257]

帧间/帧内预测。
[0258]
实际上,索引可以由其条目反映以上信息的查找表(lut)的输出提供。通常,每个占用位可以由从预先限定的熵编码器集中为该占用位选择的熵编码器进行编解码。
[0259]
本实施例提出至少部分地基于角度信息来确定占用位的上下文。在一些实施方式中,这可能相当于通过将角度信息添加到由条目使用的信息列表来修改编解码器索引的obuf lut条目。
[0260]
图23示出了用于确定用于熵编码当前节点的子节点的占用位的上下文的角度信息的确定示例。针对角度合格的当前体积(与当前节点相关联)2320,一旦被假设为已经采集(例如,采样)体积2320中的点的特定波束l 2306已经被确定,校正角度tan(θ
j,l
)针对当前节点的子节点j 2350中的每个子节点j2350(例如在八叉树的情况下为八个子节点)计算。这些角度可以针对子节点(或其关联的子子体积)的中心位置2352计算。如之前提到前的,当从波束2306的原点位置(或等效地波束发射器2304的位置)看时,这些角度可以是相对于水平平面2308的仰角。然后,针对每个子节点j,与特定波束l的角距离δj可以由下式确定
[0261]
δj=|tan(θ
l
)-tan(θ
j,l
)|
[0262]
通常,在该实施例中,在操作2020或操作2110中确定角度信息包括:相对于特定波束的原点位置,针对体积的子子体积中的每个子子体积来确定相应仰角。然后,用于对体积的子子体积的占用位进行编解码的上下文可以通过将体积的子子体积中的每个子子体积的相应仰角与特定波束的波束角进行比较(例如通过计算相应角度之间的差或角距离δj),并且通过基于相应比较的结果确定用于对体积的子子体积的占用位进行编解码的上下文来确定。
[0263]
用于在上下文确定中使用比较结果(例如角距离δj)的两种示例方法(例如作为obuf lut条目的增强)将在下文中描述。
[0264]
在第一示例中,为占用位选择编解码器(上下文)可以涉及基于体积的子子体积中的每个子子体积的仰角与特定波束的波束角之间的差δj的相应度量来对占用位进行排序。然后,相应编解码器(上下文)可以基于子子体积的相应占用位的顺序索引来选择。
[0265]
具体地,根据第一示例的方法可以如下进行:
[0266]
1.取决于δj的值对子子体积进行排序,例如从小到大。因此,每个子子体积j被分配顺序索引0≤o(j)≤7。
[0267]
2.可选地,顺序索引o(j)可以由小于7的值限制。
[0268]
3.排序索引o(j)直接被用于obuf lut条目,期望较小的索引(即,本示例中较小的δj)导致更高的占用概率。
[0269]
在第二示例中,为占用位选择编解码器(上下文)可以涉及量化该体积的子子体积中的每个子子体积的仰角θ
j,l
与特定波束l的波束角θ
l
之间的差δj的相应度量,并且基于所述差度量的相应量化值选择相应编解码器(上下文)。
[0270]
具体地,根据第二示例的方法可以如下进行:
[0271]
1.针对每个子子体积j,量化值δj(或δj*r)以获得离散值q(δj)。量化值可以被限制为给定阈值。
[0272]
2.量化值q(δj)可以直接被用于obuf lut条目,期望较小的值导致更高的占用概率。
[0273]
应当理解的是,本技术中关于角度的任何陈述同样适用于角度的正切,反之亦然。具体地,涉及相应角度的正切的计算同样可以基于角度本身来执行,反之亦然,可能在适当的三角变换之后。在一些实施方式中,使用角度的正切以避免使用昂贵的三角函数或其近似值可能是有利的。
[0274]
体积形状对角度确定的影响
[0275]
角度合格的体积的形状对角度信息区分被占用和未被占用的子体积集的能力有影响。更精确地,在考虑用于确定熵编码器的上下文的仰角时,沿着垂直方向拉伸的体积倾向于提供更好的区分,该熵编码器对代表子体积集的占用的占用信息进行编解码。
[0276]
现在参照图29,其中每个面板(a)、(b)和(c)是图22的二维表示(在平面(r,z)中)。此处,二维表示是为了简单起见,以表示角度合格的体积2920的形状对通过测量上平面的中心位置2932(分别是下平面的中心位置2942)在从波束发射器2904的原点位置的水平平面2908上方的仰角获得的校正角度tan(θ
top
)(分别为tan(θ
bottom,l
))的影响。发射的波束2906在体积2920中具有采样点2905。面板(a)将体积2920描绘为基本上立方体,面板(b)将体积2920描绘为在径向方向(相对于激光雷达的主轴)拉长,并且面板(c)将体积2920描绘为在激光雷达的主轴方向上拉长。人们应该考虑涵盖基本相同的立方度量的体积2920来比较它们的形状对角度确定的影响。从几何上观察到,涵盖基本相同的立方度量,具有更高的比率h/w的体积2920(其中h是沿着主轴方向的体积高度,并且w是沿着径向方向的体积宽度)导致相对于波束角tan(θ
l
)的tan(θ
top
)与tan(θ
bottom,l
)的更高角度区分,以预测子体积的占用集。因此,当使用角度模式编解码时,构建树使得与树的节点相关联的体积具有严格大于1的比率h/w可能是有利的。
[0277]
在第一示例中,与表示点云的几何形状的树的节点相关联的体积的高比率h/w可以通过从与根节点相关联的初始体积(或边界框)开始(其本身具有高比率h/w),然后按照树形结构(例如八叉树结构或任何其他树形结构)递归地拆分该初始体积,使得与子节点相关联的所有子体积具有相同的比率h/w,直到最小大小被到达为止来获得。
[0278]
在第二示例中,与表示点云的几何形状的树的节点相关联的体积的高比率h/w可以通过从与根节点相关联的初始体积(或边界框)开始(具有任何任意比率h/w),然后沿着径向(例如沿着x和y轴)方向递归地拆分该初始体积,诸如与子节点相关联的子体积通过满足比率条件h/w》=r》1,其中r是给定的比率参数,并且最终在树形结构(例如八叉树结构或任何其他树形结构)之后递归地继续拆分,使得所有后续子体积保持相同的比率条件h/w=r,直到最小子体积大小被达到为止来获得。例如,当子体积的径向(例如x大小或/和y大小)大小已经变成最小可接受大小(例如大小1),并且进一步拆分所述子体积只能沿着主轴(例如z轴)执行而不再保证比率条件时,最小子体积大小可以被达到。进一步拆分可以被执行,直到子体积大小变得最小(例如沿着三个轴的大小为1)为止。
[0279]
不失一般性,与体积相关联的大小h和w代表高度(沿着头部主轴)和沿着体积径向轴的宽度。实际上,h可以是通过将体积投影到主轴(例如z轴)上而获得的分段的长度,使得针对具有凸形形状的任何体积,h被很好地限定。同样地,w可以是通过将体积投影到与主轴正交的(径向)轴(例如x和y轴)获得的两个分段的长度l
x
和ly中的最大值,使得w针对具有凸形形状的任何体积很好地限定。
[0280]
在第二示例的实施例中,当可以是(矩形)长方体(例如鞋盒形)的初始体积使用沿着径向轴(例如x和y轴)的二叉树(bt)和/或四叉树(qt)分隔递归地拆分时,比率条件h/w=r》1被获得。根据限定,沿着径向轴的bt分隔通过使用与径向轴(x或y轴)正交的平面切割体积来将体积拆分为两个子体积。沿着径向轴的qt分隔通过使用两个平面切割体积将体积拆分为四个子体积,每个平面都与径向轴中的一个径向轴正交。在特定实施例中,bt和qt分隔可以被执行,使得拆分平面平行于长方体体积的面,并且使得体积的子体积都是具有相同大小的长方体。使用沿着径向轴的bt和/或qt分隔递归地拆分初始体积被执行,直到具有期望h/w=r》1比率的长方体子体积被获得为止。
[0281]
在另一实施例中,使用沿着径向轴的bt和/或qt分隔递归地拆分初始体积被执行,直到长方体子体积达到最小径向大小(例如x大小和y大小均为1),然后进一步分隔是仅沿着主轴(例如z轴)执行,直到后续的长方体子体积达到最小整体大小(例如沿着三个轴的大小为1)为止。
[0282]
在另一实施例中,仅使用沿着一个径向轴(例如x轴或y轴)的bt分隔递归地拆分初始体积被执行,直到获得的长方体子体积在两个径向方向上具有相等的大小(例如x中的大小等于y中的大小)为止,然后第一次的进一步qt分隔沿着两个径向轴(例如x和y轴)执行,直到后续的长方体子体积达到最小径向大小(例如x大小和y大小均为1)为止,然后第二次的进一步分隔仅沿着主轴(例如z轴)执行,直到后续的长方体子体积达到最小整体大小(例如沿着三个轴的大小为1)为止。
[0283]
在另一实施例中,仅使用沿着一个径向轴(例如x轴或y轴)的bt分隔递归地拆分初始体积被执行,直到获得的长方体子体积在两个径向方向上具有相等的大小(例如x中的大小等于y中的大小)为止,然后第一次的进一步qt分隔沿着两个径向轴(例如x和y轴)执行,
直到后续的长方体子体积达到期望的比率条件h/w=r》1为止,然后第二次的进一步分隔沿着所有轴(例如x、y和z)执行,直到最小径向大小被达到为止,最后第三次的进一步分隔仅沿着主轴(例如z轴)执行,直到后续的长方体子体积达到最小整体大小(例如沿着三个轴的大小为1)为止。
[0284]
在第二示例的再一实施例中,可以在位流中发信号通知目标比率r。编码器和解码器都可以沿着径向轴拆分与节点相关联的体积,例如通过使用bt和/或qt分隔,直到获得的子体积的h/w比率变为至少r(例如h/w》=r)为止。一旦子体积达到目标比率h/w》=r,那么该子体积可以通过使用八叉树分隔或任何其他树分隔(例如沿着主轴的二叉树分隔)进一步拆分。解码器可以从位流接收目标比率r,解码目标比率r并且将其用于初始体积的分隔。在位流中不存在目标比率r的情况下,目标比率r的值可以被推断为预定值(例如r=1),或者初始体积的分隔可以通过任何树分隔直接开始而无需针对子体积的比率h/w的任何值。
[0285]
角度模式句法
[0286]
如上所述,角度信息(例如tan(θ
corr,l
))可以被用于提高例如由八叉树表示的点云的几何形状的压缩能力。在角度模式编解码的上下文中可能出现的一个问题是,哪些信息应该被放入位流中的专用句法中,以完全描述由波束组合(例如激光雷达)获取的点云的点所属的准2d空间,并且辅助确定角度信息。另一问题是该信息应该被放入位流中的什么位置。
[0287]
由于使用句法所提供的信息来提高点云编解码器的压缩能力是一个重要目标,因此应该确保所提出的句法足够紧凑,不会对位流的大小产生不必要的负面影响。此外,句法应该足够灵活,以便能够描述一些复杂的获取场景,涉及具有不同位置和定向(不一定是垂直)的多个波束组合(例如激光雷达)。本实施例提出了解决上述问题和需求的句法(例如高级句法)。
[0288]
首先,波束组合(诸如激光雷达或激光雷达头)的可能特点将参照图24至26描述。在不旨在限制的情况下,将参照激光雷达或激光雷达头,但用于获取点云的波束组合的其他实施方式应该被理解为同样地由本描述涵盖。
[0289]
点云可以由一个或多个激光雷达头捕获(例如获取)。例如,多个激光雷达(激光雷达头)可以被附接至车辆,它们中的每一个都获取(例如采样、探测)场景的一部分。在单个激光雷达头的情况下,将3d xyz空间(例如上述体积空间)与激光雷达定向对准是很自然的。例如,垂直轴z可以与激光雷达头的旋转轴平行布置,并且激光雷达头的中心可以位于xyz坐标的原点o=(0,0,0)。然而,这种对准不应该被强加。更糟糕的是,在处理获取相同点云的多个激光雷达时,它无法适用多于一个激光雷达。因此,提出在句法中至少包含以下激光雷达位置信息:
[0290]

(激光雷达)头的数量
[0291]

针对每个头部
[0292]

头部位置(x
head
,y
head
,z
head
)
[0293]

头部定向(主轴、主定向轴),例如头部的旋转轴的定向
[0294]
现在参照图24,其以示意性形式示出了激光雷达头2401(作为波束组合的非限制性示例)。还示出了激光雷达头2401的中心位置2410和主轴(例如旋转轴)2402。激光雷达头2401的定向可以平行或可以不平行于3d空间的xyz坐标轴,其中点云被限定。如果不是,则
头部的主轴(例如旋转轴)可以通过球坐标中的两个角度(例如θ)或(单一)3d向量在位流中发信号通知。应当理解的是,主轴2402被假设为穿过波束组合的参考位置2410。
[0295]
为了确保单个激光雷达头用例的句法紧凑,在发信号通知头部位于原点的特定情况时使用快捷方式是有利的,即,x
head
=y
head
=z
head
=0,和/或主轴平行于xyz坐标轴中的一个坐标轴。这种快捷方式的示例将在下面描述。
[0296]
关于波束(例如激光),为了能够计算上述校正的角度,提出针对每个头部在句法中包括以下信息:
[0297]

针对每个头部
[0298]

附接至头部或由头部包括的波束(例如激光)的数量
[0299]

针对每个波束
[0300]

波束相对位置(例如波束原点与头部的参考/中心位置的相对位置)
[0301]

波束角
[0302]
如上面讨论的,波束的相对位置对于计算校正角度可能很重要,该校正角度确保由给定波束获取的点的角度是恒定的,与距头部的距离r无关。主要校正因子是波束(波束原点)相对于头部位置沿着主轴(例如旋转轴)的相对位置d
l
。这在图25中示出,其中发射波束2506的波束发射器(例如激光器)2504从头部2501的中心位置2510位移了位移向量2512。在这种情况下,位移向量2512沿着头部2501的主轴(例如旋转轴)2502延伸,使得位移向量2512可以由沿着主轴2502的距离d
l
表达。因此,句法可以包括给定头部的每个波束发射器的相对位移或距离d
l
的指示(例如向量2512的有符号长度)。
[0303]
然而,在一些实施方式中,涉及波束发射器的3d(d
l
,r
l
)相对位置的更复杂的3d校正可以被使用,如图26所描绘的。如本文所示,发射波束2606的波束发射器(例如激光器)2604从头部2601的中心位置2610位移相对位移向量2612。该相对位移向量2612可以由沿着主轴的距离d
l
和正交于主轴的(径向)距离r
l
表达。鉴于此,提出在相对位置沿着旋转轴的情况下,即,r
l
=0,句法结构应该允许紧凑的表述,以便发信号通知d
l
而不是(d
l
,r
l
)就足够了,和/或在相对位置为零的情况下,即,d
l
=r
l
=0,并且波束发射器实际上位于头部位置。后一种情况可能发生在某些类型的激光雷达上,或者如果校正已经在处理原始激光雷达数据期间应用,或者如果用户不知道(多个)波束发射器的相对位置并且想要默认置零。
[0304]
关于波束的角度,因为压缩算法可能使用角度的正切而不是角度本身,所以在句法中发信号通知tan(θ
l
)而不是θ
l
可能是有利的,以避免三角函数的计算。
[0305]
最后,完全绕过从位流中推断关于波束组合的信息的过程可能是有利的,例如如果角度编解码模式未被使用,或者如果与已获取点云的波束集相关的信息未被包括在位流中。
[0306]
鉴于上述考虑而提出的方法2700在图27中以流程图形式图示。该方法是对压缩点云数据的位流进行解码以生成重构点云的方法。点云被假设为借助于波束集获取,例如通过借助于波束集对一个或多个对象进行采样(例如探测)。进一步地,点云被假设为位于递归地拆分为子体积并且包含点云数据的点的体积空间内。尽管在一些实施方式中可能是这种情况,但点云数据并非严格地必须以树形结构(例如八叉树)中被限定。
[0307]
在操作2710中,指示角度模式是否应该被用于对点云数据编解码的第一参数从位流被解码。第一参数的一个示例是下面限定的angular_flag参数。在操作2720中,基于解码
的第一参数检查是否应该使用角度模式对点云数据编解码。如果是(在操作2720中为是),则该方法进行到操作2740。否则(在操作2720中为否),该方法进行到操作2730。在操作2730中,点云数据被解码而不使用角度模式,例如不使用角度信息。在操作2740中,与波束集相对于相应波束原点位置的波束角相关的第一角度信息从位流中解码。第一角度信息可以与位流中所包括的参数、标志或其他句法元素相关。在操作2750中,针对拆分为子体积的当前体积,与体积的子体积或子体积组相对于与波束集相关联的位置的角度相关的第二角度信息被确定。这可以例如以与上述操作2110相同或类似的方式进行。例如,所有位置可以相对于体积空间(诸如相对于体积空间的坐标系)来限定。例如,与该波束集相关联的位置可以是该波束集的参考位置(例如波束组合的中心位置)或波束原点位置中的一个波束原点位置。在操作2760中,体积的点云数据基于第一角度信息和第二角度信息进行解码。这可以涉及基于第一角度信息和第二角度信息选择上下文并且使用所选上下文对点云数据进行熵解码。例如,解码可以以与上述操作2130相同或类似的方式进行。针对某些应用,预计角度模式将被系统地应用(例如针对某些汽车用例),在这种情况下,angular_flag可以从位流中省略,并且推断角度编解码模式应该被使用。在其他应用中,预计相反,角度编解码模式不会被应用,在这种情况下,agular_flag可以从位流中省略,并且推断角度编解码模式未被使用。对推断的理解可以在点云编解码器的配置文件中限定,例如通过描述哪种编解码模式(和例如标志)被使用或不使用。进一步地,角度模式可以取决于平面模式。如果配置文件或平面模式标志指示平面编解码模式不应该被使用,则意味着角度编解码模式也未被使用,并且相关句法元素不存在于位流中。
[0308]
现在参照图28,其以流程图的形式示出了对借助于波束集获取的点云进行编码以生成压缩点云数据的位流的对应方法2800。应当理解的是,方法2800是方法2700的对应方法,并且反映了该方法的相应操作。因此,也为了编码,点云位于递归地拆分为子体积并且包含点云数据的点的体积空间内。
[0309]
在操作2810中,指示角度模式是否应该被用于编解码点云数据的第一参数被编码为位流。在操作2820中,基于第一参数检查点云数据是否应该使用角度模式编解码。如果是(在操作2820中为是),则该方法进行到操作2840。否则(在操作2820中为否),该方法进行到操作2830。在操作2830中,点云数据被编码而不使用角度模式,例如不使用角度信息。在操作2840中,与波束集相对于相应波束原点位置的波束角相关的第一角度信息被编码为位流。在操作2850中,针对拆分为子体积的当前体积,与体积的子体积或子体积组相对于与波束集相关联的位置的角度相关的第二角度信息被确定。在操作2860中,针对当前体积,体积的点云数据基于第一角度信息和第二角度信息被编码。这可以涉及基于第一角度信息和第二角度信息选择上下文并且使用所选上下文对点云数据进行熵编码。例如,编码可以以与上述操作2040相同或类似的方式进行。
[0310]
鉴于计算校正角度所需的头部(例如激光雷达)和波束(例如激光)特点,本技术进一步提出操作2740的以下实施示例,即,从位流中解码第一角度信息。
[0311]
在一个实施示例中,对第一角度信息解码包括:针对包括波束集中的至少一些波束的波束组合(例如头部),从位流对第二参数解码,该第二参数指示波束组合中的波束数量。基于该参数,波束组合中的波束数量可以被确定。然后,针对由第二参数指示的多个波束中的每个波束,指示相应波束的波束原点位置的一个或多个第三参数被解码。这些步骤
可以针对共同提供波束集的多个波束组合中的每个波束组合执行。下面描述的num_of_lasers参数是第二参数的示例。
[0312]
在编码器侧,对该实施示例中的第一角度信息进行编码包括对指示波束组合中的波束数量的第二参数进行编码,并且针对每个波束,对指示相应波束的波束原点位置的一个或多个第三参数进行编码。
[0313]
在以上实施示例中,一个或多个第三参数可以包括指示波束的波束原点位置是否相对于波束组合的参考位置表达的参数、指示波束的波束原点位置沿着波束组合的主轴的坐标的参数、指示波束原点位置是否从波束组合的主轴(径向地)移位的参数以及表达波束原点位置与波束组合的主轴的(径向)移位的参数。一个或多个第三参数还可以包括指示波束组合的主轴的参数。
[0314]
因此,在本实施示例中,对指示相应波束的波束原点位置的一个或多个第三参数解码可以包括:对指示波束的波束原点位置是否相对于波束组合的参考位置表达的参数解码。下面描述的laser_relative_position_to_head_flag是该参数的示例。如果波束的波束原点位置相对于波束组合的参考位置表达,则指示波束的波束原点位置沿着波束组合的主轴的坐标的参数被解码。下面描述的laser_relative_position_dl参数是该参数的示例。进一步地,指示波束原点位置是否从波束组合的主轴(径向)位移的参数被解码。下面描述的relative_position_rl标志是该参数的示例。然后,如果波束原点位置从波束组合的主轴(径向)位移,则表达波束原点位置从波束组合的主轴(径向)位移的参数被解码。下面描述的laser_relative_rl参数是该参数的示例。
[0315]
在编码器侧,以上可以对应于对指示波束的波束原点位置是否相对于波束组合的参考位置表达的参数进行编码。如果波束的波束原点位置相对于波束组合的参考位置表达,则指示波束的波束原点位置沿着波束组合的主轴的坐标的参数被编码为位流。进一步地,指示波束原点位置是否从波束组合的主轴(径向)位移的参数被编码为位流。然后,如果波束原点位置从波束组合的主轴(径向)位移,则表达波束原点位置与波束组合的主轴的(径向)位移的参数被编码为位流。
[0316]
在该实施示例中,可能还需要对用于确定或推断波束组合的参考位置(例如中心位置)和波束组合的定向(例如主轴)的信息解码。这可以按照下面针对相应实施示例陈述的方式进行。
[0317]
在可以与前述实施示例组合的另一实施示例中,解码第一角度信息可以包括解码信息(例如参数)以用于推断或确定构成该波束集的波束组合(例如头部)的数量。因此,在该实施示例中,解码第一角度信息包括检查位流是否包括第四参数,该第四参数指示分别包括波束集中的至少一些波束的波束组合的数量。如果是,则第四参数从位流中解码。如果第四参数在位流中不存在或等于零,则推断波束组合的数量为1,即,波束集中的所有波束都是同一单个波束组合的一部分(例如头部)。另一方面,如果第四参数等于1,则指示波束组合的数量减去2的第五参数从位流中解码。下面描述的num_of_heads_flag是第四参数的示例。下面描述的num_of_heads_minus2参数是第五参数的示例。
[0318]
在编码器侧,以上内容相当于以下内容。如果波束组合的数量为1,则将适当值(例如位值)指示单个波束组合的第四参数编码为位流,或者不将第四参数编码为位流。如果波束组合的数量大于1,则第四参数被编解码为位流,其值不指示单个波束组合。进一步地,指
示波束组合的数量减去2的第五参数也被编码为位流。
[0319]
在可以与一个或多个上述实施示例组合的另一实施示例中,针对包括波束集中的至少一些波束的波束组合,解码第一角度信息可以包括解码信息(例如参数)以用于推断或确定波束组合的参考位置(例如中心位置)。因此,在该实施示例中,解码第一角度信息包括:针对包括波束集中的至少一些波束的波束组合,检查位流是否包括指示波束组合的参考位置是否在体积空间的坐标系的原点o=(0,0,0)的第六参数。如果是,则第六参数从位流中被解码。如果第六参数不存在于位流中或者如果第六参数指示波束组合的参考位置处于坐标系的原点o处,则坐标系的原点o被视为波束组合的参考位置。否则,指示波束组合的参考位置的坐标的参数从位流中被解码。下面描述的head_absolute_is_000_flag是第六参数的示例。下面描述的head_absolute_x、head_absolute_y和head_absolute_z参数是指示波束组合的参考位置的坐标的参数的示例。
[0320]
在编码器侧,以上内容相当于以下内容。如果波束组合的参考位置在坐标系的原点o,则第六参数被编码为位流,其中适当的值(例如位值)指示这一事实,或者第六参数未被编码为位流。如果波束组合的参考位置不在坐标系的原点o,则第六参数被编码为位流,其中适当的值(例如位值)指示这一事实,以及该参数指示波束组合的参考位置的坐标。
[0321]
在可以与一个或多个上述实施示例组合的另一实施示例中,针对包括波束集中的至少一些波束的波束组合,解码第一角度信息可以包括解码信息(例如参数)以用于推断或确定波束组合的定向(例如主轴)。因此,在该实施示例中,解码第一角度信息包括:针对包括波束集中的至少一些波束的波束组合,从位流解码第七参数,该第七参数指示波束组合的主轴是否沿着体积空间的坐标轴布置。如果第七参数指示波束组合的主轴沿着体积空间的坐标轴布置,则指示波束组合的主轴沿着其布置的特定坐标轴的参数从位流中被解码。然后该特定坐标轴被视为波束组合的主轴(的定向)。具体地,主轴可以被认为平行于特定坐标轴并且穿过波束组合的参考位置(例如中心位置)。否则,如果第七参数指示波束组合的主轴不沿着体积空间的坐标轴布置,则指示表达波束组合的主轴的定向的角度的参数从位流中被解码,并且波束组合的主轴是基于这些参数确定的。下面描述的head_parallel_to_axis_flag是第七参数的示例。下面描述的axis_index参数是指示波束组合的主轴沿着其布置的特定坐标轴的参数的示例。最后,下面描述的head_orientation_phi和head_orientation_theta参数是指示表达主轴定向的角度的参数的示例。如果位流中不存在第七参数,则推断波束组合的主轴沿着体积空间的坐标轴布置。
[0322]
在编码器侧,以上内容相当于以下内容。如果波束组合的主轴沿着体积空间的坐标轴布置,则第七参数被编码为位流,其中适当的值(例如位值)指示这一事实。进一步地,指示波束组合的主轴沿着其布置的特定坐标轴的参数也被编码为位流。否则,如果波束组合的主轴未沿着体积空间的坐标轴布置,则第七参数被编码为位流,其中值(例如位值)指示这一事实。此外,指示表达波束组合的主轴的定向的角度的参数也被编码为位流。备选地,当波束组合的主轴沿着体积空间的坐标轴布置时,仅指示波束组合的主轴的特定坐标轴的参数被编码为位流。
[0323]
在可以与一个或多个上述实施示例组合的另一实施示例中,针对包括波束集中的至少一些波束的波束组合,解码第一角度信息可以包括解码信息(例如参数)以用于推断或确定由波束组合提供的波束的波束角。因此,在该实施示例中,解码第一角度信息可以包
括:针对包括波束集中的至少一些波束的波束组合,从位流解码第八参数,该第八参数指示波束组合中的波束数量。波束组合中的波束数量然后基于第八参数确定。针对波束组合中的多个波束中的每个波束,一个或多个第九参数从位流中解码,其指示相应波束的波束角。下面描述的num_of_lasers参数是第八参数的示例。
[0324]
在编码器侧,以上内容相当于以下内容。第八参数被编码为位流,以指示波束组合中的波束数量。针对波束组合中的多个波束中的每个波束,一个或多个第九参数然后被编码为位流,其指示相应波束的波束角。
[0325]
在本实施示例中,对指示相应波束的波束角的一个或多个第九参数解码可以包括:对指示波束角是否被表达为角度的正切的参数解码,然后对表达波束角的参数解码。下面描述的angle_is_tangent_flag是指示波束角是否被表达为角度的正切的参数的示例。下面描述的laser_angle参数是表达波束角的参数的示例。
[0326]
在编码器侧,如果波束角被表达为正切,则这相当于将指示波束角是否被表达为角度的正切的参数编码为位流,该角度的适当值(例如位值)指示这一事实,然后编码表达波束角的参数。直接编码表达波束角的参数可能是有益的,在这种情况下,波束角参数表示一个角度。
[0327]
而且,针对本实施例,使用用于编解码当前体积的点云数据的角度信息可以取决于该体积是否是角度合格用于的来进行。因此,方法2700和/或2800可以包括以下步骤:首先基于第一角度信息和第二角度信息确定体积是否(或确实)合格用于对体积的点云数据进行编解码。这可以涉及:针对包括波束集中的至少一些波束的波束组合,确定从波束组合的参考位置看到的体积的角度大小的度量。所确定的角度大小的度量与波束组合的相邻波束的角度之间的差角的度量(例如任何一对波束之间的最小差角)进行比较。基于第一角度信息和第二角度信息对体积是否(或确实)合格用于对体积的点云数据进行解码的实际确定然后可以基于比较的结果来执行。通常,这可以以与上面参照图19描述的角度合格性的确定相同或类似的方式进行。
[0328]
如上面提到的,在操作2750中确定第二角度信息可以以与上述操作2110中相同或类似的方式进行。同样地,在操作2850中确定第二角度信息可以以与上述操作2020中相同或类似的方式进行。因此,确定第二角度信息可以包括:确定体积内的参考位置相对于波束组合(包括波束集中的至少一些波束)的参考位置的第一角度。例如,体积内的参考位置可以是体积的中心位置。例如,波束组合的参考位置可以是旋转波束组合的中心位置。该参考位置可以例如基于上述第一角度信息来确定。基于第一仰角,被假设为已获取体积内的点的波束组合的特定波束被确定。针对该特定波束,波束原点位置例如基于上述第一角度信息来确定。然后,特定旋转波束的波束原点位置可以用作与操作2750或操作2850中限定的波束组合相关联的位置。最后,体积的子体积或子体积组相对于特定波束的波束原点位置的角度是基于波束原点位置确定的。通常,这可以以与上述角度校正相同或类似的方式进行。
[0329]
鉴于上述计算校正角度的要求,提出下面的表1和表2所描述的句法。确保了针对位于原点o并且平行于xyz轴中的一个轴的头部的最简单情况,句法是紧凑的。还确保了不需要相对位置校正或仅沿着主轴(例如头部旋转轴)进行校正的波束的紧凑句法。在下面的表格中,u(n)指示使用n位的无符号整数,并且s(n)指示使用n位的有符号整数。已经观察
到,相对位置(d
l
,r
l
)的3位小数精度和角度θ
l
或正切tan(θ
l
)的18位小数精度足以在使用波束角时获得最优压缩性能。
[0330]
[0331][0332]
表1
[0333]
特定附加标志的替代句法将允许完全绕过角度过程,或为一些句法元素推断更多值。这种句法的示例如下面的表2所示。
[0334]
[0335][0336]
表2
[0337]
提出句法中发信号通知的信息确实取决于波束组合(例如激光雷达)的物理特点和波束组合在由点云表示的场景中(例如在包含点云的体积空间中)的位置/定向。然而,它不取决于点云的局部结构。因此,提出的句法可以是帧或序列级别的高级句法。在实际示例中,提出的句法可以被放入
[0338]

几何形状参数集(gps)
[0339]

序列参数集(sps)
[0340]

几何形状切片报头
[0341]

带外发送的sei消息
[0342]
例如,附加地,这些句法元素可以被放入任何高级句法和报头中,诸如视频参数集的等效项(例如在多功能视频编解码、hevc之后的新的mpeg视频编解码器中)、帧报头或未来的传感器参数集。
[0343]
接下来,要被用于提出的句法(例如在上面的表格中使用的)的语义示例将被描述。
[0344]
angular_flag等于0指示句法中不存在头部和波束(例如激光)信息。angular_flag是上面限定的第一参数的示例。angular_flag等于1可以指示头部和波束信息存在于句法中。当等于0时,节点(例如体积)的编解码方法不使用角度信息。
[0345]
num_of_heads_flag等于0指示(激光雷达的)头的数量被推断为1。如果num_of_heads_flag等于1,则指示句法中存在num_of_heads_minus2,并且激光雷达/头部的数量等于num_of_heads_minus2+2。当位流中不存在时,激光雷达/头部的数量被推断为1。
[0346]
head_absolute_is_000_flag等于1指示头部绝对位置被推断为x=y=z=0。当head_absolute_is_000_flag等于0时,指示在位流中存在head_absolute_x、head_absolute_y和head_absolute_z,以发信号通知绝对头部位置。当位流中不存在head_absolute_is_000_flag时,可以推断出头部绝对位置为x=y=z=0。绝对值被理解为点云所表示的xyz坐标系中的坐标。
[0347]
head_absolute_x指示头部(捕获设备)在x轴上的绝对位置,例如具有3位小数精度的32位有符号整数,使得头部的x绝对位置为head_absolute_x/8。
[0348]
head_absolute_y指示头部(捕获设备)在y轴上的绝对位置,例如具有3位小数精度的32位有符号整数,使得头部的y绝对位置为head_absolute_y/8。
[0349]
head_absolute_z指示头部(捕获设备)在z轴上的绝对位置,例如具有3位小数精度的32位有符号整数,使得头部的z绝对位置为head_absolute_z/8。
[0350]
head_parallel_to_axis_flag等于1指示头部平行于轴定向。在这种情况下,axis_index存在于流中。head_parallel_to_axis_flag等于0指示头部不平行于轴定向,并且在这种情况下,流中存在head_orientation_phi和head_orientation_theta而不是axis_index。如果在位流中不存在head_parallel_to_axis_flag,则它被推断为等于1。
[0351]
axis_index指示头部平行于哪个轴。例如,axis_index等于0指示头部平行于x轴定向,等于1指示头部平行于y轴定向,并且等于2指示头部平行于z轴定向。
[0352]
head_orientation_phi和head_orientation_theta指示头部在球坐标中的定向。例如,head_orientation_phi是xy平面中的方位角,并且head_orientation_theta是相对于z轴的极角。两者都可以是有符号的32位整数,其具有18位小数精度。
[0353]
num_of_lasers指定给定头部的激光(或波束)数量。它可以是1到1023范围内的10位整数。
[0354]
angle_is_tangent_flag等于1指示由laser_angle提供的信息是角度的正切。angle_is_tangent_flag等于0指示由laser_angle提供的信息是一个角度。当位流中不存
在时,angle_is_tangent_flag被推断为等于1。
[0355]
laser_angle是与给定激光相关联的角度(的正切)。这是相对于垂直于头部方向且激光器(或波束发射器)位置所属的平面的仰角。它可以是有符号的32位整数,其具有18位小数精度。
[0356]
laser_relative_position_to_head_flag等于0指示激光器/波束发射器位置与头部绝对位置相同。laser_relative_position_to_head_flag等于1指示激光器/波束发射器位置与头部绝对位置不同;在这种情况下,laser_relative_position_dl和relative_position_rl_flag存在于位流中。如果在位流中不存在laser_relative_position_to_head_flag,则它被推断为等于0。
[0357]
laser_relative_position_dl指示激光器(波束发射器)相对于头部绝对位置沿着头部定向方向的位置。它可以是16位的有符号整数,其具有3位小数精度。
[0358]
relative_position_rl_flag等于0指示laser_relative_rl不存在于位流中并且被推断为0。relative_position_rl_flag等于1指示laser_relative_rl存在于位流中。当在位流中不存在relative_position_rl_flag,则它被推断为等于0。
[0359]
laser_relative_rl指示激光器(波束发射器)与经过头部绝对位置的平行于头部定向方向的线的(径向)距离。它可以是16位的有符号整数,其具有3位小数精度。
[0360]
现在参照图30,其示出了编码器3000的示例实施例的简化框图。编码器3000包括处理器3002、存储器3004和编码应用3006。编码应用3006可以包括存储在存储器3004中并且包含指令的计算机程序或应用,该指令在被执行时使处理器3002执行诸如本文描述的那些操作。例如,编码应用3006可以编解码和输出根据本文描述的过程编码的位流。要理解的是,编码应用3006可以被存储在非瞬态计算机可读介质上,诸如光盘、闪存设备、随机存取存储器、硬盘驱动器等。当指令被执行时,处理器3002执行指令中指定的操作和功能,以便作为实施(多个)所描述过程的专用处理器进行操作。在一些示例中,这种处理器可以被称为“处理器电路”或“处理器电路系统”。
[0361]
现在还参照图31,其示出了解码器3100的示例实施例的简化框图。解码器3100包括处理器3102、存储器3104和解码应用3106。解码应用3106可以包括存储在存储器3104中并且包含指令的计算机程序或应用,该指令在被执行时使处理器3102执行诸如本文描述的那些操作。应当理解,解码应用3106可以被存储在计算机可读介质上,诸如光盘、闪存设备、随机存取存储器、硬盘驱动器等。当指令被执行时,处理器3102执行指令中指定的操作和功能,以便作为实施(多个)所描述过程的专用处理器进行操作。在一些示例中,这种处理器可以被称为“处理器电路”或“处理器电路系统”。
[0362]
应当理解的是,根据本技术的解码器和/或编码器可以在多个计算设备中实施,包括但不限于服务器、适当编程的通用计算机、机器视觉系统和移动设备。解码器或编码器可以通过软件来实施,该软件包含用于配置一个或多个处理器以执行本文描述的功能的指令。软件指令可以被存储在任何合适的非瞬态计算机可读存储器上,包括cd、ram、rom、闪存等。
[0363]
应当理解的是,本文描述的解码器和/或编码器以及模块、例程、过程、线程或实施用于配置编码器或解码器的所描述方法/过程的其他软件组件可以使用标准计算机编程技术和语言来实现。本技术不被限于特定的处理器、计算机语言、计算机编程约定、数据结构、
其他这种实施细节。本领域技术人员将认识到,所描述的过程可以作为存储在易失性或非易失性存储器中的计算机可执行代码的一部分、作为专用集成芯片(asic)等的一部分来实施。
[0364]
本技术还提供了一种对通过应用根据本技术的编码过程产生的数据进行编码的计算机可读信号。
[0365]
对压缩性能的影响
[0366]
在三个方向x、y和z上使用平面模式利用示例实施方式进行测试已经被执行,其中多个示例点云具有不同特点,并且与动画专家群组(mpeg)测试模型的当前实施方式进行比较。实验中使用的不同类型的点云包括与户外场景相关的点云,包括城市建筑环境、室内建筑环境、3d地图、激光雷达道路扫描和自然景观。在自然景观的情况下,适度的压缩增益可以忽略不计。在3d地图的情况下可以看到2%到4%的压缩增益,压缩增益在室外建筑场景的情况下高达10%,在激光雷达数据的情况下为6%到9%,并且在一些室内建筑场景的情况下高达50%以上。
[0367]
进一步观察到,与仅平面模式相比,角度模式为无损编解码提供超过15%的额外增益,并且为有损编解码提供5%到8%的额外增益。与mpeg测试模型相比,平面+角度的组合提供了22%到24%(无损)和11%到17%(有损)的增益。
[0368]
还进一步观察到,与使用针对与八叉树节点相关联的所有体积具有比率h/w=1的立方八叉树分隔的角度模式相比,使用具有树的角度模式提供约为5%的甚至更多的额外增益,该树被构造为使得与树的节点相关联的体积具有典型的比率h/w,高度与径向宽度相比至少为4。
[0369]
可以对所描述的实施例进行某些改编和修改。因此,上面讨论的实施例被认为是说明性的而不是限制性的。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1