【深度学习初探】Day32 - 三维点云数据基础
文章目录
- 【深度学习初探】Day32 - 三维点云数据基础
- 一、点云的定义
- 二、点云的获取
- 三、点云的属性
- 四、点云的存储格式
- 4.1 pts
- 4.2 LAS
- 4.3 PCD
- 4.4 .xyz
- 4.5 .pcap
- 五、三维点云的表示方法
- 5.1 二维投影
- 5.2 三维体素
- 5.3 原始点云
- 5.4 图
- 六、点云的算法库
我们在做 3D 视觉的时候,处理的主要是点云,点云相较于图像有着不可替代的优势,也就是深度值,三维点云直接提供了三维空间的数据,而不需要像二维图像那样通过透视几何反推三维数据。
一、点云的定义
点云是某个坐标系下的点的集合。这些点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。点云在组成特点上分为两种,一种是有序点云,一种是无序点云。
- 有序点云:一般由深度图还原的点云,有序点云按照图方阵一行一行从左上角到右下角排列,其中还会有一些无效点。有序点云按顺序排列,很容易找到它的相邻点信息,在某些处理下还是比较便利的,但是获取有序点云难度很大,在很多情况下是无法获取的。
- 无序点云:无序点云更为常见和普遍,它就是点的集合,点的排列之间无任何顺序,点顺序交换后也不会有任何影响。
二、点云的获取
见 Day31 。
三、点云的属性
点云可以表达物体的空间轮廓和具体位置,它本身和视角无关,可以任意旋转,从任何角度和方向观察,不同的点云只要在同一个坐标系下,就可以直接融合。
四、点云的存储格式
点云存储格式有很多,主要有:pts、LAS、PCD、.xyz 、.pcap 等。
4.1 pts
pts 格式是最简便的点云格式,直接按 XYZ 顺序存储点云数据,可以是整型或者浮点型。内容就是 XYZ 三维坐标。
4.2 LAS
LAS 格式是通过激光雷达(LiDAR)扫描得到的,它的格式也有一个统一的规定:
C:class(所属类),
F:flight(航线号),
T:time(GPS 时间),
I:intensity(回波强度),
R:return(第几次回波),
N:number of return(回波次数),
A:scan angle(扫描角),
RGB:red green blue(RGB 颜色值)。
4.3 PCD
PCD格式是用于PCL库(一种现有的三维处理较成熟的库)的一种特殊的格式。是 PCL 库官方指定格式,典型的为点云量身定制的格式。优点是支持 n 维点类型扩展机制,能够更好地发挥 PCL 库的点云处理性能。文件格式有文本和二进制两种格式。
4.4 .xyz
.xzy 相较于pts,多了三列数据,后面三个数字是点的法向量,数字间用空格分隔。
4.5 .pcap
.pcap是一种通用的数据流格式,现在流行的 Velodyne 公司出品的激光雷达默认采集数据文件格式。它是一种二进制文件。
五、三维点云的表示方法
点云的表示方法有很多,根据表示方法不同,处理方式也会不同。
第一种较容易的处理方式是,将其投影为二维图像或转换为三维体素(Voxel),从而将无序的空间点转变为规则的数据排列。
第二种是使用原始点作为表示,不做任何变换,可以最大限度保留所有原始信息。
此外,点云还有一种表示,称为网格(Mesh),其可以被看作是构建了局部连接关系的点,即为图。将点云看作图数据,可以使用图领域新兴的图卷积(Graph Convolution)技术进行处理。
5.1 二维投影
二维投影把点云变为了图像,让卷积神经网络(CNN)应用于点云数据成为可能。
5.2 三维体素
三维体素其实是对点云的特征提取,将点云体素化(Voxelization),将其转换为空间上规则排布的栅格。然后把二维卷积神经网络拓展一个维度,让它可以处理三维数据,这样的神经网络我们称为三维卷积神经网络(3DCNN),而三维体素可以直接应用在这种表示上(因为其规则排布,可卷积)。
5.3 原始点云
点云不做处理,直接展示,将点云可视化,可以把数据信息损失降到最低。
5.4 图
三维点云数据可以看作图数据的一种,而图网络很多思想可以应用于点云处理。因此,图卷积(Graph Convolution Network, GCN)可以用来处理点云数据。GCN 又分支为基于谱的图卷积(Spectralbased GCN)和基于空间的图卷积(Spatial-based GCN)。
六、点云的算法库
关于点云,现今已经有很多算法库支持处理点云,主流的三维算法库都可以处理。
- PCL(Point Cloud Library):这个库就是专门处理点云的。可以在多平台部署,本身是一个大型跨平台开源C++ 编程库。它实现了大量点云相关的通用算法和高效数据结构,实现点云相关的获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等操作,非常方便移动端开发。
- VCG 库(Visualization and Computer Graphics Library)是专门为处理三角网格而设计的,该库很大,且提供了许多先进的处理网格的功能,以及比较少的点云处理功能(不推荐)。
- CGAL(Computational Geometry Algorithms Library),计算几何算法库,以 C++ 库的形式,提供方便、高效、可靠的几何算法,实现了很多处理点云及处理网格的算法。
- Open3D 是一个可以支持 3D 数据处理软件快速开发的开源库。它最大的优点是支持 Python。它是从一开始就开发出来的,带有很少的、经过仔细考虑的依赖项。从源代码进行最小的编译,代码干净、样式一致。支持点云、网格、RGB-D等数据。