在点云压缩中使用直接译码的方法和设备

文档序号:1205571 发布日期:2020-09-01 浏览:5次 >En<

阅读说明:本技术 在点云压缩中使用直接译码的方法和设备 (Method and apparatus for using direct transcoding in point cloud compression ) 是由 D·弗林 S·拉瑟雷 于 2019-01-10 设计创作,主要内容包括:使用直接译码模式来对与当前节点相关联的子体积内的点的坐标而不是对子节点的占用模式编码的用于对点云译码的方法和设备。使用直接译码的资格基于来自另一节点的占用数据。如果有资格,则在比特流中表示标志以发信号通知直接译码是否被应用于子体积中的点。(Methods and apparatus for coding a point cloud using a direct coding mode to encode coordinates of a point within a sub-volume associated with a current node rather than an occupancy pattern for the sub-node. The qualification to use direct decoding is based on occupancy data from another node. If qualified, a flag is represented in the bitstream to signal whether direct coding is applied to a point in the sub-volume.)

在点云压缩中使用直接译码的方法和设备

技术领域

本申请总体上涉及点云压缩,并且具体地涉及用于使用人口稀疏体积的所推断的直接译码(coding)来改进点云的压缩的方法和设备。

背景技术

数据压缩被用于通信和计算机网络中以有效地存储、传输和再现信息。对三维对象或空间的表示的兴趣日益浓厚,它可能涉及大型数据集,对此高效且有效的压缩将非常有用并且具有很高价值。在某些情况下,可以使用点云来表示三维对象或空间,点云是一组点,每个点具有三坐标定位(X,Y,Z),并且在某些情况下,还有其他属性,例如颜色数据(例如,亮度和色度)、透明度、反射率、法向矢量等。点云可以是静态的(在单个时间点处的固定对象或环境/对象的快照),也可以是动态的(按时间顺序的点云序列)。

点云的示例应用包括地形和地图应用。自主车辆和其他机器视觉应用可以依赖于诸如来自LiDAR扫描仪的环境的3D扫描形式的点云传感器数据。虚拟现实模拟可以依赖于点云。

将意识到,点云可能涉及大量数据,并且快速且准确地压缩(编码(encoding)和解码)该数据是非常重要的。因此,提供能够更高效和/或有效地压缩点云数据的方法和设备将是有利的。

具体实施方式

本申请描述了编码和解码点云的方法、以及用于编码和解码点云的编码器和解码器。总的来说,本申请描述了使用直接译码模式来对与当前节点相关联的子体积内的点的坐标而不是对子节点的占用模式译码的用于对点云译码的方法和设备。使用直接译码的资格基于来自另一节点的占用数据。另一节点是先前译码的节点,诸如当前节点或当前节点的相邻节点的同级节点。另一节点可以是多个相邻节点。如果有资格,则在比特流中表示标志以发信号通知直接译码是否被应用于子体积中的点。

在一个方面,本申请描述了一种对点云编码以生成压缩点云数据的比特流的方法,点云以具有多个节点的树结构被定义,多个节点具有父子关系并且表示被递归地拆分为子体积并且包含点云的点的体积空间的几何形状。该方法包括遍历树以对子节点集的占用模式熵编码,其中占用模式指示与相应子节点相关联的子体积中的哪些子体积包含至少一个点。遍历包括:对于与子体积相关联的当前节点,基于来自另一节点的占用数据来确定与当前节点相关联的子体积内的点有资格进行直接译码;基于与当前节点相关联的子体积内的点的数目来确定将要应用直接译码;在比特流中***指示将要与当前节点相关联地应用直接译码的标志;以及对子体积内的点中的至少一些点的位置坐标数据熵编码。

在另一方面,本申请描述了一种对压缩点云数据的比特流解码以产生重构点云的方法,点云以具有多个节点的树结构被定义,多个节点具有父子关系并且表示被递归地拆分为子体积并且包含点云的点的体积空间的几何形状。该方法包括遍历树以对子节点集的占用模式熵解码,其中占用模式指示与相应子节点相关联的子体积中的哪些子体积包含至少一个点。遍历包括:对于与子体积相关联的当前节点,基于来自另一节点的占用数据来确定与当前节点相关联的子体积内的点有资格进行直接译码;从比特流解码标志,其中所解码的标志指示直接译码被用于当前节点;以及基于所解码的标志来对子体积内的点的位置坐标数据熵解码。

在一些实现中,确定当前节点有资格进行直接译码包括基于当前节点的父节点的占用数据来确定资格。在某些情况下,父节点的占用数据包括当前节点的同级节点是否被占用。

在一些实现中,确定当前节点有资格进行直接译码包括基于当前节点的相邻节点的占用状态来确定资格。在一些示例中,相邻节点是与与与当前节点相关联的子体积共享至少一个面的相应子体积相关联的节点。在一些其他示例中,相邻节点是与与与当前节点相关联的子体积共享至少一个边的相应子体积相关联的节点。在其他示例中,相邻节点是与与与当前节点相关联的子体积共享至少一个顶点的相应子体积相关联的节点。

在一些实现中,确定当前节点有资格进行直接译码包括基于当前节点的祖父母节点的占用数据来确定资格。在某些情况下,祖父母节点的占用数据包括当前节点的父节点的同级节点是否被占用。

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

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

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

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

有时,在以下描述中,术语“节点”和“子体积”可以互换使用。应当理解,节点与子体积相关联。节点是树上的特定点,其可以是内部节点或叶节点。子体积是节点表示的有限物理空间。术语“体积”可以用于指代被定义用于包含点云的最大有界空间。为了建立互连节点的树结构以对点云数据译码,体积被递归地拆分为子体积。

在本申请中,术语“和/或”旨在涵盖所列出的元素的所有可能的组合和子组合,包括以下中的任一项:单独列出的元素、任何子组合、或所有元素,而不必排除其他元素。

在本申请中,短语“……或……中的至少一个”旨在覆盖所列出的元素中的任何一个或多个,包括以下中的任一项:单独列出的元素、任何子组合、或所有元素,而不必排除其他元素,也不必要求所有元素。

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

点云可以是静态或动态的。例如,对象或地形的详细扫描或映射可以是静态点云数据。用于机器视觉目的的环境的基于LiDAR的扫描可以是动态的,因为点云(至少可能)会随时间改变,例如每次连续扫描一个体积。因此,动态点云是按时间顺序的点云序列。

点云数据可以在很多应用中使用,给出一些示例,包括保护(历史或文化对象的扫描)、映射、机器视觉(诸如自动或半自动汽车)和虚拟现实系统。用于机器视觉等应用的动态点云数据可能与用于保护目的的静态点云数据完全不同。例如,汽车视觉通常涉及通过LiDAR(或类似)传感器以较高捕获频率获取的分辨率较低的无色高动态点云。这种点云的目的不是供人类消费或查看,而是用于决策过程中的机器对象检测/分类。例如,典型的LiDAR帧包含数万个点,而高质量的虚拟现实应用则需要数百万个点。可以预期,随着计算速度的提高和新应用的出现,随着时间的流逝将需要更高分辨率的数据。

尽管点数据是有用的,但是缺乏有效和高效的压缩(即,编码和解码过程)可能会妨碍采用和部署。

用于对点云数据译码的更普遍的机制之一是使用基于树的结构。在基于树的结构中,点云的有界三维体积被递归地拆分为子体积。树的节点对应于子体积。是否进一步划分子体积的决定可以基于树的分辨率和/或子体积中是否包含任何点。叶节点可以具有占用标志,该占用标志指示其相关联的子体积是否包含点。拆分标志可以发信号通知节点是否具有子节点(即,当前体积是否已经进一步拆分为子体积)。在某些情况下,可以对这些标志熵译码,并且在某些情况下,可以使用预测译码。

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

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

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

用于创建八叉树以对点云译码的基本过程可以包括:

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

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

3.对于每个子体积,如果子体积为空,则用0标记子体积,而如果其中至少有一个点,则用1标记子体积。

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

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

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

在一些实现中,拆分和占用是独立的,使得节点可以被占用并且可以被拆分或可以不被拆分。这种实现有两种变体:

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

2.占用然后拆分。单个标志指示节点是否被占用。如果未被占用,则不会发生拆分。如果被占用,则对拆分标志译码以指示该节点是否被进一步拆分。

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

然后,可以使用熵编码器16对该比特序列编码以产生压缩比特流。熵编码器16可以使用上下文模型18对比特序列译码,该上下文模型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子正方形,并且其中的两个8×8子正方形已经进一步细分为4×4子正方形,其中的三个子正方形进一步划分为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中以进一步依次拆分(前提是,这些节点不是树的最大深度)。

八叉树表示或更一般地是任何树表示在表示具有空间相关性的点时是有效的,因为树倾向于分解点坐标的高阶位。对于八叉树,每个深度水平对于每个组件将子体积内的点的坐标细化一个位,每次细化以八个位为代价。通过对与每个树节点相关联的划分信息(即,模式)熵译码来获取进一步的压缩。这个进一步的压缩是可能的,因为模式分布不均匀——不均匀是相关性的另一结果。

然而,在树结构中压缩点云数据的问题之一是,它不一定很好地处理孤立点。子体积的递归拆分以及拆分后的子体积内的点的定位涉及计算负担和时间,并且发信号通知子体积的递归拆分以指出一个或几个孤立点的定位在带宽/内存存储以及计算时间和资源方面成本很高。此外,孤立点“污染”了模式的分布,诱发了很多模式具有仅一个占用子节点,从而改变了分布的平衡并且不利于其他模式的译码。

因此,在一个方面,本申请提出了针对孤立点的位置信息的直接译码。点的位置(例如,体积或子体积内的坐标)的直接译码可以称为直接译码模式(DCM)。

对所有点使用DCM效率极低。一种选择是使用专用标志为每个占用节点发信号通知DCM是否将用于该节点内的任何点;但是,这个选项可能导致信令开销过大,从而产生较差的压缩性能。

因此,根据本申请的另一方面,基于来自其他节点的占用信息来确定将DCM用于占用节点的资格。如果占用节点有资格使用DCM,则在比特流中***标志以发信号通知是否应用DCM。

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

在操作204中,关于当前占用节点,例如与由至少一个点占用的树的节点相关联的当前子体积,确定该子体积是否有资格进行DCM。如果否,则在操作206中,根据通常的树译码过程来拆分并且译码该节点。也就是说,至少在该示例中,如操作216所示,将子体积拆分为子子体积,并且在操作218中对这些子子体积的占用模式熵编码。在操作220中,被至少一个点占用的这些子子体积中的任何一个被缓冲以进一步拆分/编码(放入FIFO缓冲器中)。尽管没有明确示出,但是应当理解,方法200并入了停止条件,例如最大树深度,在该停止条件之后,该方法将不再进一步拆分子体积。

如果在操作204中对该节点进行评估并且确定该节点有资格进行DCM,则在操作208中对照阈值来评估该子体积中包含的点数。如果子体积中的点数小于阈值,则使用DCM。如果点数等于或大于阈值,则不使用DCM。阈值是预先设置的,并且可以硬译码或由用户确定。它可以在标头信息中从编码器传送到解码器。该阈值可以是2或更大。应当理解,如果该数目小于或等于阈值,则可以修改评估以启用DCM,并且在这种情况下可以将阈值设置为低一个点以实现相同的结果。无论如何,如果不使用DCM,则在操作210中,将DCM标志设置为负(在一些实现中可以发信号通知为值0),并且在比特流中输出以向解码器通知在该子体积中将不使用DCM。然后,方法200循环到操作206以便以通常的方式拆分和编码子体积。

如果将使用DCM,则在操作212中,将DCM标志设置为正(其在某些实现中值可以为1),并且在操作214中,通过对其在子体积内的坐标位置编码来对子体积内的至少一些点编码。在一些实现中,这可以包括对相对于子体积的拐角的X、Y和Z笛卡尔坐标位置编码。例如,该拐角可以是最接近坐标系的原点的子体积顶点。取决于实现,可以应用用于对坐标编码的各种技术,包括预测操作、差分译码等。

上面将操作214描述为对至少一些点编码,而不是对所有点编码,因为在一些可能的实现中,可以应用速率失真优化过程以评估对点进行DCM译码的速率成本是否超过不对点译码的失真成本。注意,如果这种RD优化评估影响父节点是否已经被“占用”,则可能需要在译码过程中更早地执行RD优化,和/或该过程可能涉及两遍译码。

一旦通过使用DCM或通过模式的常规编码对节点进行了编码,则方法200从FIFO缓冲器中获取下一占用节点/子体积,如操作222所示,并且循环返回以评估该节点/子体积是否有资格进行DCM。如上所述,停止条件将最终停止子体积的进一步细分,并且FIFO中的所有节点都将已经被处理。

在操作204中的资格评估将基于先前译码的节点的占用数据。这允许编码器和解码器两者独立地进行资格的相同确定。对于下面的资格评估讨论,将参考图6,图6示意性地示出了包括当前节点302的部分八叉树300。当前节点302是占用节点,并且正在被评估以译码。要么将其进一步拆分并且对其模式编码,要么对其点进行DCM编码。当前节点302是父节点304的八个子节点之一,而父节点304又是祖父母节点306的子节点。

在一个实施例中,资格可以基于父模式。也就是说,资格标准可以基于作为父节点304的子节点的其他七个节点(即,当前节点302的同级节点307)的占用状态。例如,如果没有同级节点307被占用,则可以表明当前节点302被隔离,并且是可能的DCM译码的良好候选。

在另一实施例中,资格可以基于相邻节点(子体积)。在一些实施例中,如果两个节点与共享至少一个面的相应子体积相关联,则两个节点相邻。在更广泛的定义中,如果节点共享至少一个边,则它们是相邻的。在更广泛的定义中,如果两个节点共享至少一个顶点,则它们是相邻的。图7示出了围绕当前节点的一组邻居,其中邻居被定义为共享面的节点。在该示例中,节点/子体积是立方体,并且图像的中心处的立方体具有六个邻居,每个面有一个邻居。

在八叉树中,将认识到,当前节点302的邻居将包括三个同级节点307。它还将包括不具有相同父节点304的三个节点。因此,一些相邻节点将因为它们是同级节点而可用,但是某些相邻节点可以可用,也可以不可用,这取决于这些节点是否先前被译码。可以应用特殊处理来处理丢失的邻居。在一些实现中,取决于过程是否偏向DCM,丢失的邻居可以被假定为被占用或可以被假定为未被占用。应当理解,邻居定义可以被扩展为基于共享边或基于共享顶点而包括相邻节点,以在评估中包括附加的相邻子体积。

还将认识到,与评估同级节点的占用状态相比,基于相邻节点的占用状态来评估当前节点302的紧邻周围邻域可以是对隔离的更准确的评估,其中的三个仅会共享边并且其中的一个仅会共享顶点。然而,对同级节点的占用状态的评估具有模块化的优点,因为用于评估的所有相关数据都是父节点304的一部分,这表示其实现具有较小的内存占用空间,而对邻居的占用状态的评估涉及在需要对未来的相邻节点执行资格评估的情况下缓冲树占用数据。

在某些情况下,以上两个标准可以同时应用或可以在两者之间选择。例如,如果邻居可用,则可以基于邻居节点进行资格评估;但是,如果一个或多个邻居不可用,因为它们来自尚未译码的节点,则资格评估可以恢复为基于同级节点307(父模式)的分析。

在又一实施例中,资格可以替代地或另外地基于祖父母模式。换言之,资格可以基于作为父节点304的同级节点的叔节点308的占用状态。如果父节点304是祖父母模式下的唯一占用节点,则这可以是关于节点的点是隔离的强烈指示。

在其他实现中,可以将附加或替代评估纳入资格评估。例如,评估可以查看父节点的邻居节点或祖父母节点的邻居节点的占用状态。

在一些实现中,可以结合使用以上用于评估本地占用状态的两个或更多个标准。

基于以上评估中的任何一个或评估组合来确定资格可以基于所有周围节点未被占用。在某些情况下,它可以基于不多于阈值数目的周围节点未被占用。在一些实施例中,阈值可以设置为一个。可以根据期望DCM的程度来选择用于确定资格的其他阈值。

在以上示例中,实际使用DCM的决定(与该节点是否简单地有资格使用它相反)基于节点中的点数。如上所述,可以为特定实现选择标记DCM与常规拆分和模式译码之间的决策点的阈值数。阈值可以是1点、2点或针对特定应用的任何其他合适的数字。在某些情况下,DCM仅允许使用一个点。在这种情况下,不需要在比特流中发信号通知要译码的点的数目,因为DCM标志为正可以有效地告诉解码器在比特流中将对单个点进行DCM译码。如果可以译码一个以上的点,则比特流包含点的数目。点(如果在比特流中被译码)的数目可以使用任何合适的译码机制来发信号通知。

坐标也可以使用任何合适的译码机制来译码。例如,在某些实现中,它们可以被直接旁路编码。在一些实现中,可以使用熵译码。在一些实现中,三个坐标可以被独立地译码。坐标所需要的位数取决于树的分辨率和发生DCM的子体积的深度。例如,如果当前子体积是大小为2D的立方体,则每个坐标可以使用D位。

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

在操作402中,解码器评估点云数据树的当前占用节点是否有资格进行DCM。解码器使用与由编码器使用的相同的有资格确定。通常,资格确定基于来自同级节点或相邻节点的一些占用数据,其示例已经在上面描述。

如果节点没有资格,则在操作404中,解码器拆分该节点并且对占用模式熵解码,然后在操作406中,将任何占用子节点推入FIFO缓冲器中。但是,如果节点有资格进行DCM,则解码器在操作408中对DCM标志解码。如操作410所示,解码的DCM标志指示DCM是否实际用于对当前节点中的点编码。在该示例中,DCM标志值1对应于使用DCM,而标志值0对应于不使用DCM。如果DCM标志指示未使用DCM,则方法400进行到操作404和406以照常对模式解码。如果DCM标志指示使用了DCM,则在操作414中,解码器对节点中的任何点的坐标点数据解码。

如果在每个节点有多于一个点的情况下,编码器和解码器被配置为使用DCM,则在操作412中,解码器对点的数目解码。应当认识到,由于已知该值必须是一个或多个,因此该值可以被编码为小于一个的数字。一旦解码器知道了编码点的数量,就在操作414中对每个点的坐标数据解码。

在解码器已经解码了模式或解码了点坐标数据之后,然后在操作416中,它从FIFO缓冲器中获取下一占用节点并且返回操作402以评估其是否有资格进行DCM译码。

已经证明上述方法的示例实现提供了可忽略的压缩变化,但是译码复杂度显著降低。由于DCM比八叉树拆分复杂得多,因此降低了复杂性。该树自然被DCM译码“修剪”了,在某些测试中,译码时间减少了约40%。在测试中发现,在将父级邻居(叔节点)合并到资格确定中时,可以实现更显著的压缩性能改进(以每点的位数进行测量)。

上面的一些示例基于使用先占用后拆分原则的树译码过程。DCM译码过程也可以通过合适的修改而应用于依赖于先拆分后占用原则的树译码过程。

在一个示例实现中,除了译码这些点的坐标数据,DCM译码还可以以高于树的最低分辨率的水平给出子体积的坐标数据,然后照常进行树译码。这可以称为“跳过深度”DCM。在这种实现中,可以预设要跳过的树深度级别的规定最小数目,并且可以在断言DCM标志之后在比特流中发信号通知要跳过的实际数目。在发信号通知深度级别的数目之后,对恢复树译码的子体积的坐标编码。

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

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

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

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

本申请还提供了一种计算机可读信号,其对通过根据本申请的编码过程的应用而产生的数据编码。

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

20页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于对点云进行熵编码的方法和设备

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!

技术分类