掌桥专利:专业的专利平台
掌桥专利
首页

点云的混合几何译码

文献发布时间:2023-06-19 09:54:18


点云的混合几何译码

相关申请的交叉引用

本申请要求Futurewei Technologies,Inc.在2018年6月25日提交、申请号为62/689,666、发明名称为“使用混合编码树进行点云译码的方法和装置”的美国临时专利申请的优先权,其内容结合于此作为参考。

技术领域

公开的实施例总体上涉及PCC,尤其涉及点云的混合几何译码。

背景技术

点云使用相对大量的数据,因此点云通信使用相对大量的带宽。然而,许多网络以其带宽容量操作或接近其带宽容量操作。此外,客户要求较高的点云质量,这需要使用甚至更多数据。因此,需要减少点云使用的数据量并且提高点云质量。一种解决方案是在编码过程中对点云进行压缩,并在解码过程中对点云进行解压缩。

发明内容

第一方面涉及一种装置,包括处理器和发射器,该处理器用于获得点云,在父节点的八叉树(octree)编码或四叉树(quadtree)编码之间进行选择,以及基于上述选择将父节点编码成位流(bitstream);该发射器耦合到处理器并且用于发送位流。

在根据第一方面的装置的第一实施方式中,八叉树编码是三维(three-dimensional,3D)的。

在根据第一方面或第一方面的任何先前的实施方式的装置的第二实施方式中,八叉树编码使用八个立方体(cube)子节点。

在根据第一方面或第一方面的任何先前的实施方式的装置的第三实施方式中,四叉树编码是二维(two-dimensional,2D)的。

在根据第一方面或第一方面的任何先前的实施方式的装置的第四实施方式中,四叉树编码使用四个正方形(square)子节点。

在根据第一方面或第一方面的任何先前的实施方式的装置的第五实施方式中,处理器还用于进一步基于平面度参数(flatnessparameter)进行选择。

在根据第一方面或第一方面的任何先前的实施方式的装置的第六实施方式中,处理器还用于进一步基于率失真(ratedistortion)进行选择。

第二方面涉及一种方法,该方法包括:获得点云;在父节点的八叉树编码或四叉树编码之间进行选择;基于上述选择将父节点编码成位流;以及发送位流。

在根据第二方面的方法的第一实施方式中,八叉树编码是3D的。

在根据第二方面或第二方面的任何先前的实施方式的方法的第二实施方式中,八叉树编码使用八个立方体子节点。

在根据第二方面或第二方面的任何先前的实施方式的方法的第三实施方式中,四叉树编码是2D的。

在根据第二方面或第二方面的任何先前的实施方式的方法的第四实施方式中,四叉树编码使用四个正方形子节点。

在根据第二方面或第二方面的任何先前的实施方式的方法的第五实施方式中,该方法还基于平面度参数进行选择。

在根据第二方面或第二方面的任何先前的实施方式的方法的第六实施方式中,该方法还包括进一步基于率失真进行选择。

第三方面涉及一种装置,包括接收器和处理器,该接收器用于接收位流,该处理器耦合到接收器并且用于从位流中解析第一参数,该第一参数指示点云译码(point cloudcoding,PCC)的深度,使用八叉树解码对该深度之前的第一节点进行解码,从位流中解析第二参数,该第二参数指示该深度处以及该深度之后的第二节点的节点译码模式,以及基于第二参数对第二节点进行解码。

在根据第三方面的装置的第一实施方式中,八叉树解码是3D的并且使用八个立方体子节点。

在根据第三方面或第三方面的任何先前的实施方式的装置的第二实施方式中,四叉树解码是2D的并且使用四个正方形子节点。

在根据第三方面或第三方面的任何先前的实施方式的装置的第三实施方式中,处理器还用于进一步对第一节点和第二节点进行解码,直到达到细节层次(level ofdetail,LoD)。

第四方面涉及一种方法,该方法包括:接收位流;从位流中解析第一参数,该第一参数指示PCC的深度;使用八叉树解码对深度之前的第一节点进行解码;从位流中解析第二参数,该第二参数指示深度处以及深度之后的第二节点的节点译码模式;基于第二参数对第二节点进行解码。

第五方面涉及一种装置,包括处理装置和发射装置,该处理装置用于获得点云,在父节点的八叉树编码或四叉树编码之间进行选择,以及基于该选择将父节点编码成位流;该发射装置耦合到处理装置并且用于发送位流。

任何上述实施例可以与任何其他上述实施例组合以创建新的实施例。通过结合附图和权利要求的以下具体实施方式,将更清楚地理解这些特征和其他特征。

附图说明

为了更完整地理解本公开,现在结合附图和具体实施方式参考以下简要描述,在附图中,相似的附图标记表示相似的部分。

图1是译码系统的示意图。

图2是示出简化的译码方法的流程图。

图3是示出根据本公开实施例的基于平面度约束的混合几何编码方法的流程图。

图4A是具有沿平面或基本沿平面的点的父节点的示意图。

图4B是没有沿平面或基本沿平面的点的父节点的示意图。

图5是示出根据本公开实施例的基于成本的混合几何编码方法的流程图。

图6是根据本公开实施例的混合几何解码方法。

图7是示出根据本公开实施例的混合几何编码方法的流程图。

图8是示出根据本公开实施例的混合几何解码方法的流程图。

图9是根据本公开实施例的装置的示意图。

图10是译码装置的示意图。

具体实施方式

首先应理解,虽然以下提供了一个或多个实施例的说明性实施方式,但是公开的系统和/或方法可以使用任何数量的当前已知或现有的技术来实现。本公开不限于以下示出的说明性实施方式、附图、以及技术(包括本文示出和描述的示例性设计和实施方式),而是可以在所附权利要求的范围及其等同物的全部范围内进行修改。

以下缩写适用:

ASIC:application-specific integrated circuit(专用集成电路)

CPU:central processing unit(中央处理器)

DSP:digital signal processor(数字信号处理器)

EO:electrical-to-optical(电光)

FPGA:field-programmable gate array(现场可编程门阵列)

LoD:level of detail(细节层次)

OE:optical-to-electrical(光电)

PCC:point cloud coding(点云译码)

RAM:random-access memory(随机存取存储器)

RF:radio frequency(射频)

ROM:read-only memory(只读存储器)

RX:receiver unit(接收器单元)

SRAM:static RAM(静态RAM)

TCAM:ternary content-addressable memory(三态内容可寻址存储器)

TX:transmitter unit(发射器单元)

2D:two-dimensional(二维)

3D:three-dimensional(三维)

图1是译码系统100的示意图。译码系统100包括源设备110、介质150、以及目的地设备160。

源设备110包括点云生成器120、编码器130、以及输出接口140。点云生成器120是适于生成点云的组件。编码器130可以称为译码器。编码器130根据一组规则执行编码。输出接口140是天线或适于向目的地设备160发送数据的另一组件。或者,点云生成器120、编码器130、以及输出接口140在设备的组合中。

介质150是局域网、无线网络、互联网、或另一适当介质。介质150在源设备110和目的地设备160之间传输数据。

目的地设备160包括输入接口170、解码器180、以及投影仪190。输入接口170是天线或适于从源设备110接收数据的另一组件。解码器180也可以称为译码器。解码器180根据一组规则执行解码。投影仪190是适于投影点云的组件。或者,输入接口170、解码器180、以及投影仪190在设备的组合中。

在操作中,在源设备110中,点云生成器120捕获点云,编码器130对点云进行编码以创建编码点云,输出接口140通过介质150向目的地设备160发送编码点云。源设备110可以本地存储点云或编码点云,或者源设备110可以指示将点云或编码点云存储在另一设备上。在目的地设备160中,输入接口170从源设备110接收编码点云,解码器180对编码点云进行解码以获得解码点云,投影仪190投影解码点云。与编码器130如何对点云进行编码相比,解码器180可以以相反方式对编码点云进行解码。目的地设备160本地存储编码点云或解码点云,或者目的地设备160指示将编码点云或解码点云存储在另一设备上。

点云生成器120可以是激光雷达、传统相机、红外相机、飞行时间相机、激光系统、扫描仪、或扫描对象并生成表示这些对象的点云的其他设备。这些对象可能是车辆,因此点云可能是3D。点云可以包括数十万或数百万个点。因此,点云需要对大量数据进行编码并且需要大量带宽进行通信。因此,需要对点云进行高效的译码以及通信。

编码器130和解码器180执行点云的PCC。PCC包括属性译码和几何译码。译码(coding)包括编码(encoding)和解码(decoding)。属性译码对诸如颜色、反射率、以及透明度之类的属性进行译码。几何译码对点在空间中的位置进行译码。八叉树译码是一种几何译码。

八进制译码从父节点开始,父节点是包含点云中所有的点的3D立方体;将父节点划分为八个子节点,这些子节点也是3D立方体;并且重复上述划分直到所需终点。在每次划分时,被划分的节点是父节点,父节点被划分为的节点是子节点。每个父节点用八个位进行译码,其中,每个位指示对应的子节点是否包括点。一些父节点可能没有点分布在其3D空间中。相反,那些父节点可以具有沿平面或基本沿平面的点。因此,将那些父节点划分为八个子节点效率较低。

本文公开了点云的混合几何译码的实施例。在此上下文中,点云的混合几何译码包括3D译码和2D译码,例如八叉树译码和四叉树译码。四叉树译码从父节点开始,该父节点是3D立方体;将父节点中的点投影到2D平面上;并且将该平面划分为四个子节点,这些子节点是2D正方形。父节点用四个位进行译码,其中,每个位指示对应的子节点是否包括点。使用八叉树译码还是四叉树译码基于平面度参数、率失真、或其他度量。虽然讨论了与八叉树译码和四叉树译码相关的混合几何译码,但是这些实施例也适用于具有不同数量的节点的其他类型的编码。此外,虽然讨论了平面度参数和率失真,但是实施例也适用于使2D译码更高效,同时保持可接受的质量水平的其他度量。

图2是示出简化的译码方法200的流程图。译码系统100实现方法200。简化的译码方法200说明了译码过程的一部分。因此,译码过程可以包括其他步骤,例如属性译码。

在步骤210,编码器130对点云执行几何编码以获得第一编码位流。下面参考图3和图5进一步描述步骤210。在步骤220,编码器130对第一编码位流执行算术编码以获得第二编码位流。在步骤230,输出接口140发送第二编码位流。

在步骤240,输入接口170接收第二编码位流。在步骤250,解码器180对第二编码位流执行算术解码以获得解码位流。最后,在步骤260,解码器180对第一解码位流执行几何解码以获得点云。下面参考图6进一步描述步骤260。

图3是示出根据本公开实施例的基于平面度约束的混合几何编码的方法300的流程图。方法300可以实现图2中的步骤210。在步骤305,编码器130计算父节点的特征值λ

在判定315,编码器130确定是否λ

图4A是具有沿平面或基本沿平面的点的父节点410的示意图。因此,对于父节点410,方法300将进行到步骤320。图4B是没有沿平面或基本沿平面的点的父节点420的示意图。因此,对于父节点420,方法300将进行到步骤340。

返回图3,在步骤320,编码器130将父节点设置为四叉树节点。例如,编码器130对node_coding_mode=1进行编码。在步骤325,编码器130计算平面的参数。具体地,编码器130确定对应于λ

编码器130使用质心平移分量(centroid translationcomponent)t

T将原点从父节点的中心移位到平面中心。编码器130还将平面一侧的大小计算为2

QTNodeSizeLog2=NodeSizeLog2

QTNodeSizeLog2=NodeSizeLog2–1。 (4)

在步骤330,编码器130将点云中的点投影到平面上。具体地,编码器130使用(Rx,Ry,Rz)和T将点从3D(x,y,z)坐标系投影到2D(u,v)坐标系。在步骤335,编码器130将父节点编码成四叉树节点。

作为将点投影到平面上的第一替代方案,编码器130在进行旋转之后使用投影轴索引和距离。在那种情况下,编码器130可以只对这些点进行三次旋转。作为将点投影到平面上的第二替代方案,编码器130使用斜投影而无需旋转到子节点表面之一。在那种情况下,编码器130对法向量n(x,y,z)、到平面的质心的距离d、以及投影平面索引进行编码。例如,投影平面索引对于xy是00,对于xz是01,对于yz是10。投影平面可以是投影法线的最小平面,如下所示:

min{n

如果法向投影大小为0,则该平面平行于对应的坐标平面,因此编码器130可以只对距离和投影平面索引进行编码。因此,如果不存在法向量,则该平面平行于对应的坐标平面。

在步骤340,编码器130将父节点设置为八叉树节点。在步骤345,编码器130将父节点编码成八叉树节点。最后,在步骤350,编码器130生成子节点。当父节点是四叉树节点时,编码器130如下计算子节点的中心点:

ChildQTNodeSizeLog2=QTNodeSizeLog2–1 (6)

当父节点是八叉树节点时,编码器130使用标准八叉树编码计算子节点的中心点。

编码器130重复方法300,直到达到LoD,LoD指示节点划分或拆分的预定义最大次数。一旦编码器130将父节点设置为四叉树节点,则编码器130将每个后续子节点、孙节点等编码成四叉树节点,直到方法300达到LoD。

为了减少信令,编码器130可以假设八叉树编码,并且执行方法300,该方法300从minQuadTreeDepth指示的深度、maxQuadTreeSizeLog2指示的深度、或父节点中点数低于阈值处开始。编码器130可以对minQuadTreeDepth或maxQuadTreeSizeLog2进行编码。深度表示节点拆分的次数。如果minQuadTreeDepth=0,则未使用四叉树译码。编码器130可以信令通知minQuadTreeDepth或maxQuadTreeSizeLog2。

图5是示出根据本公开实施例的基于成本的混合几何编码方法500的流程图。方法500可以实现图2中的步骤210。在步骤505,编码器130计算父节点的八叉树译码的成本C

编码器130重复方法500,直到其达到LoD。一旦编码器130将父节点设置为四叉树节点,则编码器130将每个后续子节点、孙节点等编码成四叉树节点,直到方法300达到LoD。

为了进一步实现图2中在图3的方法300和图5的方法500中进一步描述的步骤210,编码器130可以将以下语法编码成几何位流语法:

表1.几何位流语法

bitstream_size_in_bytes指定压缩几何位流以字节为单位的大小。minQuadTreeDepth指定当前点云中四叉树分解的最小深度。当minQaudTreeDepth=0时,位流不包含四叉树节点。如果未定义minQaudTreeDepth,则为0。

GeometryNodeOccupancyCnt[depth][xN][yN][zN]表示在给定深度的位置(xN,yN,zN)处的八叉树节点中存在的子节点的数量。未定义的GeometryNodeOccupancyCnt值视为0。如下将其初始化:GeometryNodeOccupancyCnt[-1][0][0][0]=8。

NodeX[depth][nodeIdx]、NodeY[depth][nodeIdx]、NodeZ[depth][nodeIdx]表示在给定深度在解码顺序上为第idx个节点的x、y、z坐标。如下将其初始化:NodeX[0]=NodeY[0]=NodeZ[0]=0。NumNodesAtDepth[depth]表示在给定深度的待解码节点的数量。如下将其初始化:NumNodesAtDepth[0]=1。

此外,编码器130可以将以下语法编码成几何节点语法:

表2.几何节点语法

深度为MaxGeometryCodeTreeDepth的节点是最后的子节点,可以称为叶节点。对于四叉树译码,节点的位置由其左下角位置的坐标给出为(uN,vN)。uPn和yvn如下指示节点的父节点的位置:

uPn=uN>>1

vPn=vN>>1。 (7)

对于八叉树编码,节点的位置由其左下角位置的坐标给出为(xN,yN,zN)。xPn、yPn、zPn如下指示节点的父节点的位置:

xPn=xN>>1

yPn=yN>>1

zPn=zN>>1。 (8)

如下导出NodeSizeLog2:NodeSizeLog2=MaxGeometryOctreeDepth–depth。如下导出ChildNodeSizeLog2:ChildNodeSizeLog2=NodeSizeLog2–1。如下导出NeighbourPattern:

NeighbourPattern=

((GeometryNodeOccupancyCnt[depth-1][xPn+1][yPn][zPn]!=0)<<0)

((GeometryNodeOccupancyCnt[depth-1][xPn-1][yPn][zPn]!=0)<<1)

((GeometryNodeOccupancyCnt[depth-1][xPn][yPn-1][zPn]!=0)<<2)

|((GeometryNodeOccupancyCnt[depth-1][xPn][yPn+1][zPn]!=0)<<3)

|((GeometryNodeOccupancyCnt[depth-1][xPn][yPn][zPn-1]!=0)<<4)

|((GeometryNodeOccupancyCnt[depth-1][xPn][yPn][zPn+1]!=0)<<5)。

对于四叉树译码,假设相邻模式为空节点。single_occupancy_flag=1指示该节点包含单个子节点。single_occupancy_flag=0指示该节点可能包含多个子节点。occupancy_idx标识父节点中存在的单个子节点。如果存在,则将OccupancyMap设置为等于1<

当存在occupancy_idx或occupancy_map时,以下条件适用:

如下导出DirectModeFlagPresent:

当以下所有条件都为真时,DirectModeFlagPresent=1:

inferred_direct_coding_mode_enabled_flag=1

NodeSizeLog2>1

GeometryNodeOccupancyCnt[depth-1][xPn][yPn][zPn]≤2

GeometryNodeOccupancyCnt[depth][xN][yN][zN]=1

否则,DirectModeFlagPresent=0。

num_points_eq_1_flag=1指示当前子节点包含单个点。num_points_eq_1_flag=0指示子节点至少包含两个点。如果不存在,则推断num_points_eq_1_flag=1。num_points_minus2指示子节点表示的点数。direct_mode_flag=1指示父节点的单个子节点是叶节点并且包含一个或多个增量点坐标(delta point coordinate)。direct_mode_flag=0指示父节点的单个子节点是八叉树节点。如果不存在,则推断direct_mode_flag=0。

当direct_mode_flag等于1时,以下条件适用:GeometryNodeOccupancyCnt[depth][xN][yN][zN]=0。当direct_mode_flag等于0时,以下条件适用:

num_direct_points_minus1指示子节点中的点数。point_rem_x[i][j]、point_rem_y[i][j]、point_rem_z[i][j]指示当前子节点的第i点相对于由索引GeometryNodeChildren[0]标识的子节点的原点的相应x、y、z坐标的第j位。

图6是根据本公开实施例的混合几何解码方法600。方法600可以实现图2中的步骤260。在判定610,解码器180确定是否minQuadTreeDepth=0。如果是,则方法600进行到步骤620。如果否,则方法600进行到判定630。或者,一旦解码器180到达父节点中点数低于阈值的深度,则解码器180可以进行到步骤620。在步骤620,解码器180将当前节点作为八叉树节点解码。解码器180重复步骤620,直到达到LoD。

在判定630,解码器180确定是否node_coding_mode=0。如果是,则方法600进行到步骤640。如果否,则方法进行到步骤650。在步骤640,解码器180将当前节点作为八叉树节点解码。此外,如果当前节点是八叉树节点并且其父节点也是八叉树节点,则解码器180可以不从位流读取附加信息。在步骤650,解码器180将当前节点作为四叉树节点解码。如果当前节点是四叉树节点并且其父节点是八叉树节点,则解码器180从位流读取比例参数(scale parameter)、偏移参数(mean_value_x,mean_value_y,mean_value_z)、以及法向参数(normal parameter)(projection_rot_x,projection_rot_y,projection_rot_z),并且解码器180应用反比例参数(inverse scale parameter)(scale_projection)将点投影到平面上。如果当前节点是四叉树节点并且其父节点也是四叉树节点,则解码器180从位流读取比例参数、偏移参数(mean_value_x,mean_value_y,mean_value_z)、以及从父节点继承的法向参数(projection_rot_x,projection_rot_y,otation_rot_z),并且解码器180应用反比例参数(scale_projection)将点投影到平面上。解码器180重复判定630以进行步骤640,并且重复步骤640至步骤650,直到其达到LoD。

图7是示出根据本公开实施例的混合几何编码方法700的流程图。源设备110实现方法700。在步骤710,获得点云。例如,点云生成器120记录点云。在步骤720,在父节点的八叉树编码或四叉树编码之间进行选择。例如,编码器130进行图3中的判定315或图5中的判定515。在步骤730,基于该选择将父节点编码成位流。例如,编码器130执行图3中的步骤335或步骤345,或者执行图5中的步骤535或步骤545。最后,在步骤740,发送位流。例如,输出接口140通过介质150将位流发送到目的地设备160。

图8是示出根据本公开实施例的混合几何解码方法800的流程图。目的地设备160实现方法800。在步骤810,接收位流。例如,输入接口170从源设备110接收位流。在步骤820,从位流中解析第一参数,该第一参数指示PCC的深度。例如,解码器180从位流中解析minQuadTreeDepth。在步骤830,使用八叉树解码对该深度之前的第一节点进行解码。例如,在图6中的判定610的结果为是之后,解码器180执行步骤620。在步骤840,从位流中解析第二参数,该第二参数指示该深度处以及该深度之后的第二节点的节点译码模式。例如,解码器180从位流中解析node_coding_mode。最后,在步骤850,基于第二参数对第二节点进行解码。例如,解码器180执行图6中的步骤640或步骤650。

图9是根据本公开实施例的装置900的示意图。装置900可以实现公开的实施例。装置900包括用于接收数据的入口端口910和RX 920;用于处理数据的处理器、逻辑单元、基带单元、或CPU 930;用于发送数据的TX 940和出口端口950;用于存储数据的存储器960。装置900还可以包括耦合到入口端口910、RX 920、TX 940、以及出口端口950以提供光信号、电信号、或RF信号的入口或出口的OE组件、EO组件、或RF组件。

处理器930是硬件、中间件、固件、或软件的任何组合。处理器930包括一个或多个CPU芯片、核、FPGA、ASIC、或DSP的任意组合。处理器930与入口端口910、RX 920、TX 940、出口端口950、以及存储器960通信。处理器930包括混合几何译码组件970,几何译码组件970实现公开的实施例。因此,混合几何译码组件970的包括为装置900的功能提供了实质性的改进,并且实现了装置900到不同状态的转换。或者,存储器960将混合几何译码组件970存储为指令,并且处理器930执行那些指令。

存储器960包括磁盘、磁带驱动器、或固态驱动器的任何组合。装置900可以将存储器960用作溢出数据存储设备,以在装置900选择待执行的程序时存储那些程序,并且存储在那些程序的执行期间装置900读取的指令和数据,例如存储为计算机程序产品。存储器960可以是易失性或非易失性的,并且可以是ROM、RAM、TCAM、或SRAM的任何组合。

计算机程序产品可以包括存储在非暂时性介质(例如存储器960)上的计算机可执行指令,该计算机可执行指令在由处理器(例如处理器930)执行时使装置执行任何实施例。

图10是译码装置1000的示意图。在实施例中,译码装置1000实现在PCC设备1002(例如,编码器130或解码器180)中。PCC设备1002包括接收装置1001。接收装置1001用于接收待编码的图像或接收待解码的位流。PCC设备1002包括耦合到接收装置1001的发射装置1007。发射装置1007用于将位流发送到解码器或将解码图像发送到显示装置。

PCC设备1002包括存储装置1003。存储装置1003耦合到接收装置1001或发射装置1007中的至少一个。存储装置1003用于存储指令。PCC设备1002还包括处理装置1005。处理装置1005耦合到存储装置1003。处理装置1005用于执行存储在存储装置1003中的指令以执行本文公开的方法。

虽然在本公开中已提供多个实施例,但是可以理解,在不脱离本公开的精神或范围的情况下,可以以许多其他特定形式实现所公开的系统和方法。本示例视为说明性而非限制性的,并且本发明不限于本文给出的细节。例如,各种元件或组件可以组合或集成在另一系统中,或者可以省略或不实现某些特征。

此外,在各种实施例中描述并示出为离散或分离的技术、系统、子系统、以及方法可以在不脱离本公开的范围的情况下与其他系统、组件、技术、或方法组合或集成。示出或讨论为耦合的其他项目可以直接耦合,或者可以通过某接口、设备、或中间组件,以电气、机械、或其他方式间接耦合或通信。改变、替换、以及变更的其他示例可以由本领域的技术人员确定,并且可以在不脱离本文公开的精神和范围的情况下做出。

相关技术
  • 点云的混合几何译码
  • 一种基于三维点云几何特征学习的点云配准方法及系统
技术分类

06120112348602