3D点云技术系列(一)-杨军超博士

2021-07-06

1.   引言

3D点云,其主要来源于3D传感器,包括各种3D扫描仪,LiDARs,以及RGB-D相机。3D点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。3D点云可以将现实世界原子化,通过高精度的点云数据可以还原现实世界。点云表示作为一种常用的表示格式,在三维空间中保留了原始的几何信息,不需要任何离散化。因此,它是许多场景理解相关应用(如自动驾驶和机器人)的首选表示。

三维扫描仪(3D scanner)是一种科学仪器,用来侦测并分析现实世界中物体或环境的形状(几何构造)与外观数据(如颜色、表面反照率等性质)。搜集到的数据常被用来进行三维重建计算,在虚拟世界中创建实际物体的数字模型。

 光学雷达(LIDAR),或简称光达,是一种光学遥感技术,它通过向目标照射一束光,通常是一束脉冲激光来测量目标的距离等参数。激光雷达是光学雷达中的一种,常用于3D点云生成。其工作原理是向目标发射探测信号(激光束),然后将接收到的从目标反射回来的信号(目标回波)与发射信号进行比较,作适当处理后,就可获得目标的有关信息,如目标距离、方位、高度、速度、姿态、甚至形状等参数。

图1为3D点云示意图。

 image.png

图1  3D点云示意图

2.   数据存储及算法库

2.1   存储格式

主要存储格式包括:pts、LAS、PCD、.xyz 和. pcap 等。

.pts 点云文件格式是最简便的点云格式,直接按 XYZ 顺序存储点云数据, 可以是整型或者浮点型。

LAS 是激光雷达数据(LiDAR),存储格式比 pts 复杂,旨在提供一种开放的格式标准,允许不同的硬件和软件提供商输出可互操作的统一格式。LAS 格式点云截图,其中 C:class(所属类),F:flight(航线号),T:time(GPS 时间),I:intensity(回波强度),R:return(第几次回波),N:number of return(回波次数),A:scan angle(扫描角),RGB:red green blue(RGB 颜色值)。

PCD 存储格式,现有的文件结构因本身组成的原因不支持由 PCL 库引进 n 维点类型机制处理过程中的某些扩展,而 PCD 文件格式能够很好地补足这一点。PCD 格式具有文件头,用于描绘点云的整体信息:定义数字的可读头、尺寸、点云的维数和数据类型;一种数据段,可以是 ASCII 码或二进制码。数据本体部分由点的笛卡尔坐标构成,文本模式下以空格做分隔符。

.xyz  一种文本格式,前面 3 个数字表示点坐标,后面 3 个数字是点的法向量,数字间以空格分隔。

.pcap 是一种通用的数据流格式,现在流行的 Velodyne 公司出品的激光雷达默认采集数据文件格式(厂商格式)。它是一种二进制文件。整体一个全局头部(GlobalHeader),然后分成若干个包(Packet),每个包有包含头部(header)和数据(data)部分。

2.2   基础算法

PCL(Point Cloud Library)库支持跨平台存储。可应用于计算资源有限或者内存有限的应用场景,是一个大型跨平台开源 C++ 编程库,它实现了大量点云相关的通用算法和高效数据结构,实现点云相关的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等操作,非常方便移动端开发。

VCG 库(Visulization and Computer Graphics Libary)是专门为处理三角网格而设计的,该库很大,且提供了许多先进的处理网格的功能,以及比较少的点云处理功能。

CGAL(Computational Geometry Algorithms Library)计算几何算法库,设计目标是以 C++ 库的形式,提供方便、高效、可靠的几何算法,其实现了很多处理点云以及处理网格的算法。

Open3D 是一个可以支持 3D 数据处理软件快速开发的开源库。支持快速开发处理 3D 数据的软件。Open3D 前端在 C++ 和 Python 中公开了一组精心选择的数据结构和算法。后端经过高度优化,并设置为并行化。Open3D 是从一开始就开发出来的,带有很少的、经过仔细考虑的依赖项。它可以在不同的平台上设置,并且可以从源代码进行最小的编译。代码干净,样式一致,并通过清晰的代码审查机制进行维护。在点云、网格、rgbd 数据上都有支持。

2.3   3D点云的表示方法

基于二维投影的方法。将三维点云数据投影到二维图像平面。

基于三维体素的方法。对三维点云进行二维投影降低了算法处理的难度,但是三维到二维的投影必然带来几何结构信息的损失,直接进行三维特征的提取在一些场景下是非常有必要的。同时,对点云进行体素化 (Voxelization),将其转换为空间上规则排布的栅格,使得可以直接应用在这种表示上。

基于原始点的方法。无论是二维投影还是三位体素,均需要对原始点云进行一定的转换,而转换必然带来数据信息的损失。

基于图的方法。现实生活中存在大量的非结构化数据,如交通网络、社交网络等,这些数据的节点间存在联系,可以表示为图。研究图数据的学习是近年来学界的热点。三维点云数据可以看作图数据的一种,图网络的很多思想可以被借鉴于点云数据的特征学习中。

 image.png

图2 3D点云表示方法

不同的表示对应着不同的处理方法。简单的处理方式为将其投影为二维图像或者转换为三维体素 (Voxel),从而将无序的空间点转变为规则的数据排列;也可以使用原始点作为表示,不做任何变换,该方式的好处为最大可能保留所有原始信息。此外,点云作为空间无序点集,可以被看作普适意义上的图数据。点云还有另外一种表示,称作网格 (Mesh),其也可以被看作是构建了局部连接关系的点,即为图。将点云看作图数据,可以使用图领域新兴的图卷积 (Graph Convolution) 技术进行处理。需要提及的是,原始点的表示和图表示之间并无明确界限(事实上原始点云和网格 (Mesh) 之间有一定区别,但若从语义理解方法的角度看,可暂时忽略此区别,将Mesh看作是增加了一种连接关系)

3.   结束语

3D点云带有空间坐标,因此广泛应用于测绘、建筑、工业、汽车、游戏、刑侦等相当多的领域。在3D点云上进行深度学习仍然面临数个重大挑战,例如数据集规模小,维数高和3D点云的非结构化性质等。同时3D点云的经典处理方法对VR内容处理以及全息视频处理都有一定的借鉴和参考的意义。