第2章:点云数据基础
点云数据长什么样?说白了,就是一堆三维空间里的点。每个点带着自己的坐标,可能还带着点别的信息。我刚开始接触点云时,打开一个PCD文件,看到满屏的数字,说实话有点懵。后来慢慢摸清了门道,发现其实结构很简单。
2.1 点云的核心数据结构
一个点云,本质上就是N个点的集合。每个点最少要有三维坐标,也就是XYZ。但实际项目中,光有坐标往往不够用。
2.1.1 XYZ坐标
这是点云的基础。每个点用(x, y, z)表示在空间中的位置。单位通常是米,但有些传感器输出的是毫米。嗯,这里要注意:不同传感器的坐标系定义可能不一样。比如激光雷达,有的定义X轴朝前,有的定义Y轴朝前。
我踩过的坑: 有一次做多传感器融合,激光雷达和相机标定死活对不上。查了两天,发现是激光雷达的坐标系定义和代码里假设的不一致。从那以后,我拿到任何点云数据,第一件事就是确认坐标系定义。
2.1.2 强度值(Intensity)
强度值反映了目标表面对激光的反射强度。这个值很有用。比如道路标线反射强,沥青路面反射弱,靠强度值就能区分它们。
强度值的范围取决于传感器。Velodyne的强度是0-255,但有些工业雷达能到16位。我个人习惯在做处理前,先把强度值归一化到0-1之间,这样算法更稳定。
2.1.3 时间戳
每个点什么时候被采集到的?这就是时间戳的作用。对于静态场景,时间戳可能不重要。但一旦涉及运动物体,或者做SLAM,时间戳就非常关键。
时间戳的精度差异很大。有些传感器给的是微秒级,有些只有毫秒级。做高精度SLAM时,时间戳的精度直接影响运动畸变校正的效果。
避坑指南: 我曾经遇到过一个问题:两个传感器的系统时间没同步,导致融合后的点云出现重影。后来我强制要求所有传感器都用PTP协议同步时间,问题才解决。
2.2 常见点云格式
点云格式很多,但常用的就那几种。我按使用频率排个序:PCD、LAS、PLY。每种格式都有自己的适用场景。
2.2.1 PCD格式
PCD是Point Cloud Data的缩写,由Willow Garage提出,是ROS和PCL的标配格式。它的结构很清晰:头部是元数据,后面是点数据。
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z intensity
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 1000
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 1000
DATA ascii
1.0 2.0 3.0 128
2.0 3.0 4.0 200
...
你看,头部信息里包含了字段名、数据类型、点数等。我个人很喜欢PCD的一点是:它支持ASCII和二进制两种存储方式。调试时用ASCII,方便查看;正式运行时用二进制,速度快、体积小。
2.2.2 LAS格式
LAS是ASPRS制定的标准格式,主要用于测绘和地理信息领域。它的特点是:除了XYZ和强度,还包含分类信息(比如地面、建筑、植被等)。
| 字段 | 说明 | 我常用的场景 |
|---|---|---|
| X, Y, Z | 三维坐标(通常带缩放因子) | 所有场景 |
| Intensity | 回波强度 | 地物分类 |
| Classification | 点云分类标签 | 滤波后验证结果 |
| Return Number | 第几次回波 | 植被穿透分析 |
| GPS Time | 采集时间 | 时序分析 |
注意: LAS格式的坐标通常存储为整数,配合缩放因子和偏移量使用。如果你直接读整数当坐标用,那结果会非常离谱。我见过有人犯这个错,花了半天才找到原因。
2.2.3 PLY格式
PLY是斯坦福大学开发的格式,在计算机图形学领域用得很多。它支持顶点和面片信息,所以不光能存点云,还能存网格模型。
PLY的头部和PCD类似,但更灵活。你可以自定义字段,比如加上RGB颜色信息。我在做三维重建时,经常用PLY来保存带纹理的模型。
ply
format ascii 1.0
element vertex 1000
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
end_header
1.0 2.0 3.0 255 0 0
2.0 3.0 4.0 0 255 0
...
2.3 格式选择建议
这么多格式,到底选哪个?我的经验是这样的:
- 做SLAM或机器人项目:首选PCD。PCL库支持最好,读写方便。
- 做测绘或地理信息:用LAS。行业标准,各种GIS软件都支持。
- 做三维重建或图形学:用PLY。支持面片和颜色,可视化效果好。
核心要点: 格式只是载体,真正重要的是数据本身。我建议你掌握PCD和LAS两种格式的读写,因为90%的项目都离不开它们。PLY可以等需要时再学,上手很快。
2.4 本章知识体系
下面这张图总结了点云数据基础的核心内容。你可以看到,点云结构、常见格式、以及它们之间的关系。
这张图把本章的核心内容串起来了。左边是数据结构,右边是文件格式,下面是应用场景。你想想看,掌握了这些基础,后面做滤波、分割、配准,心里就有底了。
我的建议: 刚开始学点云,别急着上复杂算法。先把数据结构和格式搞明白。打开一个PCD文件,看看里面到底存了什么。动手写几行代码,读一个点云,打印出前几个点的XYZ和强度。这一步走扎实了,后面事半功倍。
好了,点云数据基础就讲到这里。记住:XYZ是骨架,强度是血肉,时间戳是脉搏。三种格式各有千秋,选对工具才能事半功倍。