3D点云基础知识
- 3D图像描述
- RGB-D
- 点云
- 何为点云?
- 点云的获取
- 点云的内容
- 点云的属性
- 点云目前的主要存储格式包括:pts、LAS、PCD、.xyz 和. pcap 等
- 相应基础算法库对不同格式的支持
- 三维点云有多种表示方法
- 相比于图像数据,点云不直接包含空间结构,因此点云的深度模型必须解决三个主要问题
- DataSets
- Metric
- 基于点云的分类
- 基于点云的分割
- 基于点云的目标检测
- 点云数据的增强和完整化
三维图像是在二维彩色图像的基础上又多了一个维度,即深度(Depth,D),可用一个很直观的公式表示为:
三维图像 = 普通的 RGB 三通道彩色图像 + Depth Map。
3D图像描述:
- 第一种分法:
- 第多边形网格
- 基于体素的描述
- 点云
- 隐式表面
- 基于视图的描述
- 第二种分法:
- 深度图像(depth images)
- 点云
- 网格(meshes)
- 体积网格(volumetric grids)
RGB-D
RGB-D 是广泛使用的 3D 格式,其图像每个像素都有四个属性:即红(R)、绿(G)、蓝(B)和深度(D)。
在一般的基于像素的图像中,我们可以通过(x,y)坐标定位任何像素,分别获得三种颜色属性(R,G,B)。而在 RGB-D 图像中,每个(x,y)坐标将对应于四个属性(深度 D,R,G,B)。
点云
我们在做 3D 视觉的时候,处理的主要是点云,点云就是一些点的集合。相对于图像,点云有其不可替代的优势——深度,也就是说三维点云直接提供了三维空间的数据,而图像则需要通过透视几何来反推三维数据。
何为点云?
- 其实点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。点云在组成特点上分为两种,一种是有序点云,一种是无序点云。
- 有序点云:一般由深度图还原的点云,有序点云按照图方阵一行一行的,从左上角到右下角排列,当然其中有一些无效点因为。有序点云按顺序排列,可以很容易的找到它的相邻点信息。有序点云在某些处理的时候还是很便利的,但是很多情况下是无法获取有序点云的。
- 无序点云:无序点云就是其中的点的集合,点排列之间没有任何顺序,点的顺序交换后没有任何影响。是比较普遍的点云形式,有序点云也可看做无序点云来处理。
点云表示的优点:
- 点云表示保留了三维空间中原始的几何信息,不进行离散化
点云当前面临的挑战:
- 数据集规模小
- 高维性
- 3维点云的非建构化特性
点云的获取:
- 点云不是通过普通的相机拍摄得到的,一般是通过三维成像传感器获得,比如 双目相机 、 三维扫描仪 、 RGB-D 相机 等。目前主流的 RGB-D 相机有微软的 Kinect 系列、Intel 的 realsense 系列、structure sensor(需结合 iPad 使用)等。点云可通过扫描的 RGB-D 图像,以及扫描相机的内在参数创建点云,方法是通过相机校准,使用相机内在参数计算真实世界的点(x,y)。因此,RGB-D 图像是网格对齐的图像,而点云则是更稀疏的结构。此外,获得点云的较好方法还包括 LiDAR 激光 探测与测量,主要通过星载、机载和地面三种方式获取。
点云的内容:
- 根据激光测量原理得到的点云,包括三维坐标(XYZ)和激光反射强度(Intensity),强度信息与目标的表面材质、粗糙度、入射角方向以及仪器的发射能量、激光波长有关。根据摄影测量原理得到的点云,包括三维坐标(XYZ)和颜色信息(RGB)。结合激光测量和摄影测量原理得到点云,包括三维坐标(XYZ)、激光反射强度(Intensity)和颜色信息(RGB)。
点云的属性:
- 空间分辨率、点位精度、表面法向量等。
- 点云可以表达物体的空间轮廓和具体位置,我们能看到街道、房屋的形状,物体距离摄像机的距离也是可知的;其次,点云本身和视角无关,可以任意旋转,从不同角度和方向观察一个点云,而且不同的点云只要在同一个坐标系下就可以直接融合。
点云目前的主要存储格式包括: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 码或二进制码。数据本体部分由点的笛卡尔坐标构成,文本模式下以空格做分隔符。
PCD 存储格式是 PCL 库官方指定格式,典型的为点云量身定制的格式。优点是支持 n 维点类型扩展机制,能够更好地发挥 PCL 库的点云处理性能。文件格式有文本和二进制两种格式。
- .xyz 一种文本格式,前面 3 个数字表示点坐标,后面 3 个数字是点的法向量,数字间以空格分隔。
- .pcap 是一种通用的数据流格式,现在流行的 Velodyne 公司出品的激光雷达默认采集数据文件格式。它是一种二进制文件
- obj 是一种文本文件,通常用以“#”开头的注释行作为文件头,数据部分每一行的开头关键字代表该行数据所表示的几何和模型元素,以空格做数据分隔符
相应基础算法库对不同格式的支持
- PCL (Point Cloud Library)库支持跨平台存储,可以在 Windows、Linux、macOS、iOS、Android 上部署。可应用于计算资源有限或者内存有限的应用场景,是一个大型跨平台开源 C++ 编程库,它实现了大量点云相关的通用算法和高效数据结构,其基于以下第三方库:Boost、Eigen、FLANN、VTK、CUDA、OpenNI、Qhull,实现点云相关的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等操作,非常方便移动端开发。
- VCG 库(Visulization and Computer Graphics Libary)是专门为处理三角网格而设计的,该库很大,且提供了许多先进的处理网格的功能,以及比较少的点云处理功能。
- C GAL(Computational Geometry Algorithms Library)计算几何算法库,设计目标是以 C++ 库的形式,提供方便、高效、可靠的几何算法,其实现了很多处理点云以及处理网格的算法。
- Open3D 是一个可以支持 3D 数据处理软件快速开发的开源库。支持快速开发处理 3D 数据的软件。Open3D 前端在 C++ 和 Python 中公开了一组精心选择的数据结构和算法。后端经过高度优化,并设置为并行化。Open3D 是从一开始就开发出来的,带有很少的、经过仔细考虑的依赖项。它可以在不同的平台上设置,并且可以从源代码进行最小的编译。代码干净,样式一致,并通过清晰的代码审查机制进行维护。在点云、网格、rgbd 数据上都有支持。
三维点云有多种表示方法
- (如图所示),不同的表示对应着不同的处理方法。比较容易的处理方式为将其投影为二维图像或者转换为三维体素 (Voxel),从而将无序的空间点转变为规则的数据排列;也可以使用原始点作为表示,不做任何变换,该方式的好处为最大可能保留所有原始信息。此外,点云作为空间无序点集,可以被看作普适意义上的图数据。点云还有另外一种表示,称作网格 (Mesh),其也可以被看作是构建了局部连接关系的点,即为图。将点云看作图数据,可以使用图领域新兴的图卷积 (Graph Convolution) 技术进行处理。需要提及的是,原始点的表示和图表示之间并无明确界限(事实上原始点云和网格 (Mesh) 之间有一定区别,但若从语义理解方法的角度看,可暂时忽略此区别,将Mesh看作是增加了一种连接关系)
- 基于二维投影的方法 。CNN 最好的应用领域在于图像处理,将三维点云数据投影到二维图像平面,即可使得 CNN 应用于点云数据成为可能。
- 基于三维体素的方法 。对三维点云进行二维投影降低了算法处理的难度,但是三维到二维的投影必然带来几何结构信息的损失,直接进行三维特征的提取在一些场景下是非常有必要的。一种最自然的想法便是 CNN 的延拓,将二维卷积神经网络拓展一个维度,使其可以处理三维排列的数据;同时,对点云进行体素化 (Voxelization),将其转换为空间上规则排布的栅格,使得三维卷积神经网络(Three Dimension Convolutional Neural Network, 3DCNN) 可以直接应用在这种表示上。
- 基于原始点的方法 。无论是二维投影还是三位体素,均需要对原始点云进行一定的转换,而转换必然带来数据信息的损失。
- 基于图的方法 。现实生活中存在大量的非结构化数据,如交通网络、社交网络等,这些数据的节点间存在联系,可以表示为图。研究图数据的学习是近年来学界的热点。三维点云数据可以看作图数据的一种,图网络的很多思想可以被借鉴于点云数据的特征学习中。图卷积 (Graph Convolution Network, GCN) 可分为基于谱的图卷积(Spectralbased GCN) 和基于空间的图卷积 (Spatial-based GCN)。
- 如何从稀疏的点云找到高信息密度的表示,
- 如何构建一个网络满足必要的限制如size-variance和permutation-invariance,
- 如何以较低的时间和计算资源消耗处理大量数据
- Classification method: overall accuracy , mean accuracy
- Segmentation models: accuracy , (m)IoU
- detection tasks: (m)IoU , accuracy , precision , recall
- Object tracking: MOTA , MOTP
- scene for estimation: EPE
- 3D match and registration models: ROC curves
- 对点云的分类通常称为三维形状分类。与图像分类模型相似,三维形状分类模型通常是先通过聚合编码器生成全局嵌入,然后将嵌入通过几个完全连通的层来获得最终结果。
- 基于点云聚合方法,分类模型大致可分为两类: 基于投影的方法 和 基于点的方法
- 基于投影的方法
- 基于投影的方法将非结构化的三维点云投影到特定的预设模态中(例如体素、柱状体),并从目标格式中提取特征,从而在相应方向上受益于之前的研究成果。
- Multi-view representation
- MVCNN:
- GVCNN
- Volumetric representation
- VoxNet
- 3D ShapeNet
- OctNet
- OCNN
- Basis point set
- BPS
- 基于点的方法:
- 与基于投影的方法从空间邻域中聚合点相比,基于点的方法尝试从单个点中学习特征。
- MLP networks
- Convolutional networks
- Graph networks
- 图网络将点云视为图,将图的顶点视为点,并根据每个点的邻居生成边。特征将在空间或光谱领域学习
- 数据来自 Mobile Laser Scanners (MLS) , Aerial Laser Scanners (ALS) , static Terrestrial Laser Scanners (TLS) , RGBD cameras and other 3D scanners
- 3D分割的目的是对每个点进行标记,这需要模型在每个点上收集全局上下文和详细的局部信息。。在三维图像分割中,主要有两个任务:语义分割和实例分割。
- Semantic Segmentation
- 语义分割方法大致可分为基于投影的方法和基于点的方法
- Projection-based methods
- Huang和You将输入点云投射到占用体素中,然后将其送入3D卷积网络,生成体素级标签。
- ScanComplete利用全卷积网络来适应不同的输入数据大小,并部署一个由粗到细的策略来提高预测的层次分辨率。
- Point-based methods
- Instance Segmentation
- Proposal-based methods
- 可以看作是目标检测和掩模预测的结合。
- Proposal-free methods
- 无提案的方法倾向于基于聚类等算法的语义分割来生成实例级标签。
- 无提案方法不受区域提案层计算复杂度的影响;然而,它们通常很难从聚类中产生区分对象边界
- 同时解决语义分割和实例分割的朴素方法有两种:(1)先解决语义分割,根据语义分割的结果在某些标签点上运行实例分割;(2)先解决实例分割,直接分配带有实例标签的语义标签。这两个阶梯式范式高度依赖于第一步的输出质量,不能充分利用两个任务之间的共享信息。
- 3D目标检测可以分为3类:multi-view method,projection-based method,point-based method
- Projection-based methods
- Point-based method
- 大多数基于点的方法都试图在特征提取过程中使信息损失最小化,是目前性能最好的一组方法。
- 与上述多视图方法相比,基于分割的方法对于复杂场景和遮挡对象有更好的效果。
- 由激光雷达收集的点云,特别是那些来自室外场景的点云,遭受不同种类的质量问题,如噪音,异常值,和遗漏点。所以我们的目标是补全缺失的点,移除掉异常的点。
- Discriminative Methods
- 传统的方法包括局部表面拟合、邻域平均和猜测底层噪声模型
- PointCleanNet提出了一种基于数据驱动的方法去消除错误点减少噪声
- PCPNet首先对异常值进行分类并丢弃它们,然后估计一个将噪声投影到原始表面的修正投影
- Total Denoising,在不需要额外数据的情况下实现了非监督降噪对点云数据
- 临界点层(CPL)在保留重要点的同时学会减少点的数量。这一层是确定性的,不确定顺序的,并且通过避免邻接搜索也很有效。
- 通过将采样后的点近似为原始点的混合来逼近点采样的可微松弛
- Generative Methods
- 通过生成假样本,帮助定位网络的潜在缺陷。
- point perturbation and point generation:扰动是通过对已有的点进行可忽略的移动来实现的,生成是通过添加一些独立分散的点或少量具有预定义形状的点簇来实现的。
- 除了对抗性生成,生成模型也用于点云上采样。向上采样点云通常有两种动机。一是减少数据的稀疏性和不规则性,二是恢复遮挡造成的缺失点
相比于图像数据,点云不直接包含空间结构,因此点云的深度模型必须解决三个主要问题:
DataSets
Metric
基于点云的分类
基于点云的分割
基于点云的目标检测
点云数据的增强和完整化