MPEG-PCC基于几何点云压缩(G-PCC codec description v12)学习笔记

  • Post author:
  • Post category:其他



目录


前言


一、摘要


二、概述


三、编解码器说明


3.1 预处理与后处理


3.1.1 坐标变换与逆变换


3.2  八叉树几何编解码


3.3 Trisoup几何编解码


3.4 预测几何编码


3.5 几何量化


3.6 几何熵编码


3.7 属性转移(重新着色)


3.8 属性编码(预测变换)


3.9 属性编码(提升变换)


前言

MPEG从2017年呼吁提出建议(CFP),并根据对此 CFP的响应,为点云压缩 (PCC) 标准化活动选择了两种不同的压缩技术:基于视频的 PCC (V-PCC) 和基于几何的 PCC (G-PCC),分别对应测试模型参考软件TMC13和TMC2。

GPCC标准文档目前最新为V12。本文将持续更新。

一、摘要

该文档详细介绍了点云压缩 G-PCC(基于几何的点云压缩)。

点云数据按照获取途径分为三类点云测试数据:静态点云、动态点云和动态获取点云。

G-PCC主要针对第一类静态点云和第三类动态获取点云进行压缩,对稀疏点云更优。V-PCC针对第二类动态点云进行压缩,对密集点云更优。

二、概述

图1描述了G-PCC编码器和解码器。首先对点云位置进行几何编码,然后对属性编码,属性编码要依靠重建后的几何信息。绿色模块通常用于1类数据(静态点云),橙色模块通常用于3类数据(动态获取点云),其他模块在类别1和类别3之间是通用的。

八叉树几何编解码器:

对第三类数据,压缩的几何图形通常表示为从根到叶子节点为单个体素的八叉树,因此对第三类数据的编解码器被称为八叉树几何编解码器。

trisoup几何编解码器:

对第一类数据,压缩的几何图形表示为由修剪的八叉树和表面模型组成,该表面模型是每块包含1-10个三角形的三角剖分,该表面模型近似于修剪后的八叉树的叶子节点的表面(体素)。因此第一类数据的编解码器被称为trisoup几何编解码器。

对第一类数据和第三类数据的编码都是基于八叉树的编码机制。

G-PCC中有3种属性编码方法:

区域自适应分层变换编码 ( Region Adaptive Hierarchical Transform (RAHT) coding)

基于插值的分层最近邻预测 (interpolation-based hierarchical nearest-neighbour prediction (Predicting Transform))

基于插值的带有更新/提升步骤的分层最近邻预测 (interpolation-based hierarchical nearest-neighbour prediction with an update/lifting step (Lifting Transform))

三、编解码器说明

3.1 预处理与后处理

点云的属性和位置表示:

位置表示:
X_{n} = (x_{n},y_{n},z_{n}),...,N
(其中N是点云中点的个数)

属性表示:
A_{n} = (A_{1n},A_{2n},...,A_{Dn}),n=1,...,N
(其中D是点云中属性个数)

点云的几何结构仅包括点的位置,点云的属性仅包含点的属性。在本测试模型中,仅支持三色和反射率(否则没有属性)。点云的几何图形和属性通常在特定于应用程序的空间中表示。测试模型提供了预处理和后处理,以在这些特定于应用程序的空间( application-specific spaces)和有限分辨率的内部空间(finite-resolution internal spaces)之间进行转换,在这些内部空间中,点云被压缩。在点云进行压缩之前会进行预处理,在点云解码完成后会进行后处理。

3.1.1 坐标变换与逆变换


1)编码:

原始点云空间坐标通常用浮点数表示:
X_{n}^{orig}, 1,..., N

包围盒空间坐标表示:
X_{n}^{int},1,...,N

通过坐标变换将原始点云空间坐标转换为包围盒空间坐标,坐标变换公式,

X_{n} = (X_{n}^{orig} - T) / s
,

其中
(T=(t_{x},t_{y},t_{z}))
为包围盒中点的位置,s为包围盒大小。
X_{n}^{int},1,...,N
位于包围盒
[0,2^{d})^{3}
内,其中d为包围盒划分次数。

在包围盒中,已压缩和解压缩的点的坐标表示为
\bar{X}_{n},n=1,...,N_{out}
, 其中
N_{out}
是解码点云中点的个数。
N_{out}

N
可以不相等。


2)解码:

原始点云坐标通过坐标变换从包围盒中解码点云坐标获得,变换公式,

\bar{X}_{n}^{orig}=s\bar{X}_{n}+T

可以通过齐次变换表示,公式如下,

如果使用Trisoup几何编解码器,s由triSoupIntToOrigScale 参数指定,T=[0,0,0],d由triSoupDepth参数指定。如果有必要,可将包围盒
[0,2^{d})^{3}
外的点
(x_{n},y_{n},z_{n})
裁剪到
[0,2^{d}-1]
内。

如果使用八叉树几何编解码器,1/s由positionQuantizationScale参数指定,T和d分别由以下公式确定,

其中,

Ceil,

Log2,Max的定义如下,


Ceil(x) =

the least integer greater than or equal to x.

Log2(x) = the base-2 logarithm of x.

Max(x1,…,xN) = the maximum of x1, …, xN.

3.1.2 颜色变换与逆变换

颜色分量的属性量化与分量的颜色空间无关,因为分量是独立处理的。然而,如果需要,TM支持从RGB到YCbCr再转换(ITU Rec.709)

3.1.3 点量化和重复点去除(体素化)

点位置在内部表示为非负d位整数。为了获得这些整数,将内部坐标系中的点位置舍入。设
X_{n}^{int}
是内部坐标系中的一个点位置。则其作为非负d位整数的表示为:

其中Round()是将向量的分量舍入为最接近的整数的函数:

其中Floor(x)为小于或等于x的最大整数。

这样量化之后,可能存在具有相同位置的多个点,称为重复点。重复点删除过程是可选的。如果启用,将删除具有相同量化坐标的点。为了检测重复,利用STL中的set数据结构。

具有相同量化位置和不同属性的多个点将合并到单个点中。与单个点相关的属性将由第3.7节所描述的属性传递模块计算。

位置量化、删除重复点以及将属性分配给剩余点的过程称为体素化。即,体素化是将点分组为体素的过程。体素集合是单位立方体

,其中i,j,k的值为0和
2^{d}-1
之间的整数。具体地,将体素内所有点的位置量化到体素中心,并且将体素中所有点的属性组合(例如,平均)并分配给体素。如果体素包含点云的任何点,则称其被占用。

3.2  八叉树几何编解码

使用八叉树几何编码解码器,过程如下。首先,由两个端点(0,0,0)和(2^d,2^d、2^d)定义立方体轴对齐的边界框B。然后通过递归细分B来构建八叉树结构。在每个阶段,一个立方体被细分为8个子立方体。然后,通过将1位值与每个子立方体相关联来生成8位代码(称为占用代码),以指示其是否包含点(满且值为1)(空且值为0)。只有大小大于1的完整子立方体(即,非体素)被进一步细分。由于可以复制点,所以可以将多个点映射到大小为1的相同子立方体(即,相同体素)。为了处理这种情况,还对维度1的每个子立方体的点数进行算术编码。使用相同的算术编码器对放入比特流的所有信息进行编码。目前使用[1]中的实现。

3.3 Trisoup几何编解码

3.4 预测几何编码

3.5 几何量化

3.6 几何熵编码

3.7 属性转移(重新着色)

3.8 属性编码(预测变换)

参见:

点云压缩 GPCC属性编码 LOD划分方式介绍_点云渣的博客-CSDN博客_点云压缩编码

3.9 属性编码(提升变换)

待续



版权声明:本文为cheche012345原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。