1. 点云数据基础:概念、获取与格式

各位同学,欢迎来到《点云分割与目标提取》的第一章。

说实话,点云这个概念,刚接触时可能会觉得有点抽象。我当年第一次看到点云数据时,第一反应是——这不就是一堆密密麻麻的坐标点吗?嗯,这么理解也没错。但说白了,点云就是三维世界在计算机里的“数字化快照”。

1.1 什么是点云?

点云,顾名思义,就是大量三维点的集合。每个点通常包含 (X, Y, Z) 坐标,有时还带有颜色、强度、法向量等附加属性。

你可以把点云想象成用无数个“针尖”去戳一个物体表面,每个针尖记录下它戳到的位置。戳得越密,还原的物体就越精细。我在做自动驾驶项目时,经常用 LiDAR 扫一个十字路口,一帧下来就是十几万个点——密密麻麻,但每一帧都藏着关键信息。

核心公式: 一个点云帧 = {P₁, P₂, ..., Pₙ},其中 Pᵢ = (xᵢ, yᵢ, zᵢ, [rᵢ, gᵢ, bᵢ], [intensityᵢ], ...)

点云和普通图像最大的区别在于:图像是二维网格,有固定的行列结构;点云是无序的、稀疏的。你想想看,一张 1920×1080 的图像,每个像素位置是固定的。但点云里的点,没有“第几行第几列”这种说法,它们只是散落在三维空间里。这个特性,直接影响了后面所有算法的设计思路。

1.2 点云是怎么来的?

获取点云的方式,主流的有两种:LiDAR 和 RGB-D 相机。我两种都用过,各有各的脾气。

1.2.1 LiDAR(激光雷达)

LiDAR 的工作原理,说白了就是“激光测距 + 扫描”。它发射激光束,打到物体表面反射回来,根据飞行时间算出距离。配合旋转机构,就能扫出一圈 360° 的点云。

参数 机械式 LiDAR 固态 LiDAR
线数 16 / 32 / 64 / 128 线 等效 120~300 线
视场角 360° 水平 / 30° 垂直 120°×20° 左右
典型距离 100~200 m 50~150 m
成本 高(数万~数十万) 中(数千~数万)
我的经验: 64 线 LiDAR 一帧大约 13 万个点,数据量约 2~3 MB。如果你做实时处理,这个吞吐量必须提前规划好。我曾经在嵌入式平台上硬跑 64 线数据,结果 CPU 直接拉满——嗯,后来老老实实做了降采样。

1.2.2 RGB-D 相机

RGB-D 相机,就是“彩色图 + 深度图”的组合。常见的有三种技术路线:

  • 结构光(如 Kinect v1、Intel RealSense):投射红外散斑,通过变形计算深度。室内效果好,室外见光死。
  • ToF(如 Kinect v2、Azure Kinect):发射调制光,测量相位差。速度快,但分辨率偏低。
  • 双目立体(如 ZED、Intel T265):两个相机视差匹配。不依赖主动光源,但纹理弱的地方容易失效。

RGB-D 相机获取的点云,通常比 LiDAR 稠密得多(640×480 = 30 万个点),但有效距离短(一般 0.5~5 米),而且容易受环境光干扰。我在做室内场景重建时,就吃过这个亏——阳光从窗户照进来,深度图直接出现大片黑洞。

避坑指南: 我曾经在室外用结构光相机做目标检测,结果深度图全是噪点。后来才意识到,结构光在强光下根本没法用。如果你要做室外项目,老老实实上 LiDAR 或者双目相机。

1.3 点云文件格式

拿到点云数据后,总得存下来吧?市面上常见的格式有三种:PCD、PLY 和 LAS。我个人的习惯是:做算法原型用 PCD,做可视化用 PLY,做测绘地理信息用 LAS。

1.3.1 PCD 格式

PCD 是 Point Cloud Library(PCL)的原生格式。结构很简单:头部是 ASCII 文本,后面可以跟 ASCII 或二进制数据。

# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 640
HEIGHT 480
VIEWPOINT 0 0 0 1 0 0 0
POINTS 307200
DATA ascii
0.123 0.456 0.789 128 64 255
0.234 0.567 0.890 255 128 64
...

你看,头部明确写了每个字段的名称、类型、大小。解析起来非常方便。我个人最喜欢 PCD 的一点是:它支持 高度有序的点云(比如 RGB-D 相机出来的数据),可以保留图像的行列结构。

1.3.2 PLY 格式

PLY(Polygon File Format)是斯坦福大学开发的,最初用于 3D 扫描数据。它比 PCD 多了一个东西:面片信息。也就是说,PLY 不仅能存点,还能存三角形网格。

ply
format ascii 1.0
element vertex 307200
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
element face 600000
property list uchar int vertex_indices
end_header
0.123 0.456 0.789 128 64 255
0.234 0.567 0.890 255 128 64
...
3 0 1 2
3 1 2 3
...

注意看,element face 后面定义了三角形面片,每个面由三个顶点索引组成。如果你要做表面重建或者 3D 打印,PLY 是首选。

1.3.3 LAS 格式

LAS 是 ASPRS(美国摄影测量与遥感学会)制定的标准格式,主要用于机载 LiDAR 测绘。它的特点是:

  • 支持 分类标签(地面、植被、建筑等)
  • 包含 强度信息(回波强度)
  • 支持 多次回波(同一激光束可能有多个返回点)
  • 文件结构固定,有公共头、变长记录、点数据三部分

我在做地形建模时,经常拿到 LAS 格式的数据。它的分类标签非常有用——可以直接把地面点和植被点分开,省去了很多预处理工作。

1.3.4 格式对比

特性 PCD PLY LAS
主要用途 算法开发(PCL) 可视化 / 3D 打印 测绘 / 地理信息
支持面片 否 是 否
支持分类 否(需自定义) 否(需自定义) 是
二进制效率 高 中 高
文件大小(10万点) ~1.2 MB ~2.0 MB(含面片) ~1.5 MB

1.4 本章知识体系

下面这张图,帮你把本章的核心脉络理清楚:

点云数据基础 · 知识体系 点云数据 点云概念 无序性 稀疏性 获取方式 LiDAR RGB-D 相机 文件格式 PCD PLY LAS 应用场景:自动驾驶 / 机器人 / 测绘 / 工业检测

这张图把本章的三个核心模块串起来了:概念 → 获取 → 格式。后面的章节,我们会基于这些基础,一步步深入到点云滤波、分割、特征提取、目标识别。每一步都离不开今天讲的内容。

给新手的建议: 如果你刚开始接触点云,建议先装好 PCL 或者 Open3D,找几个 PCD 示例文件,用可视化工具打开看看。亲手旋转、缩放、观察点云的结构,比看一百页文档都管用。我当年就是这么入门的。