一、点云是什么
1. 核心定义
点云是三维空间中大量离散采样点组成的数据集合。每个点至少包含空间坐标,通常表示为:
text
p = (x, y, z)
也可以携带更多属性,例如反射强度、颜色、时间戳、回波编号、法向量、曲率、语义类别、实例 ID、置信度等。
更准确地说:
点云是在某个坐标系、某个时间条件、某种传感器或重建算法下,对现实世界可见表面进行离散采样得到的三维数据集合。点云不是物体本身,也不是连续曲面,而是对物体或场景表面的有限观测。
这个定义里有几个关键点非常重要。
第一,点云是离散采样。它不是连续表面,点和点之间默认没有三角面片、拓扑边、实体边界。表面、边缘、法向量、曲率、物体实例等信息都需要后续估计或推理。
第二,点云依赖坐标系 。同一个点 (1, 2, 3),在 LiDAR 坐标系、相机坐标系、机器人底盘坐标系、世界坐标系里的意义完全不同。ROS 的 PointCloud2 消息明确包含采集时间和坐标系 frame_id,并通过字段描述点云数据布局。(ROS Documentation)
第三,点云依赖观测条件。单帧点云通常只能看到传感器视角下可见的表面,被遮挡的背面、透明物体、高反光区域、吸光区域、超出量程区域都可能缺失或产生错误点。
2. 点云和 2D 图像的区别
普通 2D RGB 图像是规则网格上的像素阵列,每个像素通常携带颜色或灰度信息。点云则是三维空间中的点集合,每个点携带三维位置,能够直接表达空间结构。
普通 RGB 图像本身没有显式深度;双目图像、深度图、RGB-D 图像虽然也是二维栅格形式,但可以通过视差、深度值和相机内参反投影成点云。OpenCV 的双目深度教程说明,两张不同视角图像可以通过视差恢复深度信息。(OpenCV 文档)
点云是否具有真实物理尺度,取决于它的来源。LiDAR、RGB-D 相机、结构光相机、线激光轮廓仪通常可以输出米制或毫米级物理坐标;但纯单目 SfM / MVS 重建得到的点云常常存在尺度不确定性,需要标定物、GPS/IMU、已知基线、已知物体尺寸或其他外部约束来恢复真实尺度。COLMAP 官方文档也将图像三维重建分为 SfM 稀疏重建和 MVS 稠密重建两个阶段。(COLMAP)
所以更准确的说法是:
点云比普通 RGB 图像更直接地表达三维几何,但点云是否具备真实尺度,取决于传感器、标定和重建流程。
3. 无序点云与有序点云
点云可以分为两类:
| 类型 | 特点 | 常见来源 |
|---|---|---|
| 无序点云 | 点的排列顺序不表示空间邻接关系,通常只是一组点集合 | 机械 LiDAR、融合点云、三维扫描仪、SfM/MVS 输出 |
| 有序点云 | 保留类似图像的行列结构,可以通过像素邻接关系找到空间邻域 | RGB-D 相机、ToF 相机、双目深度相机、部分 range image LiDAR |
ROS PointCloud2 中的 height 和 width 就体现了这个区别:无序点云通常 height = 1,width = 点数;有序点云则可以像二维图像一样具有行列结构。ROS 文档也说明,深度传感器如 stereo 或 ToF 可以产生 image-like 的点云。(ROS Documentation)
有序点云可以利用图像邻域快速做滤波、法向估计、边缘检测;无序点云则通常需要 KNN、半径搜索、KD-Tree、Octree、Voxel Grid 等空间索引结构来查找邻域。
二、点云数据
1. 点云 = N×C 矩阵 + 相关信息元
在深度学习或数学建模中,点云常被抽象成一个 N×C 张量:
text
N = 点的数量
C = 每个点的属性维度
例如:
text
[x, y, z] → N × 3
[x, y, z, intensity] → N × 4
[x, y, z, r, g, b] → N × 6
[x, y, z, nx, ny, nz] → N × 6
但在真实工程中,点云不只是一个矩阵,而是包含字段、类型、坐标系、时间戳、存储布局、传感器元数据的数据结构。PCL 的 PCD 文件格式通过 FIELDS、SIZE、TYPE、COUNT、WIDTH、HEIGHT、VIEWPOINT、POINTS、DATA 等头字段描述点云数据。(Point Cloud Library)
所以应该这样理解:
算法里,点云可以抽象成
N×C张量;工程里,点云是带字段定义、坐标系、时间戳、存储格式和传感器元数据的三维数据结构。
2. 点云的常见属性
| 属性类别 | 常见字段 | 说明 |
|---|---|---|
| 基础几何属性 | x, y, z |
点在某个坐标系下的三维位置 |
| 反射/辐射属性 | intensity, reflectance, ambient |
LiDAR 反射强度、反射率、环境光信息 |
| 颜色属性 | r, g, b, rgba |
RGB-D、三维扫描、MVS 点云常见 |
| 时间属性 | timestamp, time_offset |
扫描式 LiDAR 做运动补偿时很重要 |
| 回波属性 | return_number, number_of_returns, echo_id |
多回波 LiDAR、机载 LiDAR 常见 |
| 估计属性 | normal_x, normal_y, normal_z, curvature |
通常由邻域几何估计得到 |
| 标签属性 | class, semantic_label, instance_id |
人工标注或模型推理结果 |
| 质量属性 | confidence, range_sigma, invalid_flag |
深度相机或算法给出的可信度信息 |
语义标签不是原始点云天然具备的属性。语义类别、实例 ID、置信度一般来自人工标注、传统算法或深度学习模型推理, 这样才能区分点的语义(eg:A点属于车辆,B属于路面背景)。
3. 常见点云文件格式
不同领域使用不同点云格式。
| 格式 | 常见场景 | 特点 |
|---|---|---|
| PCD | PCL、机器人、科研 | 字段灵活,适合点云算法开发 |
| PLY | 三维重建、MeshLab、Open3D | 可存点、颜色、法向,也可存 mesh |
| LAS / LAZ | 航测、测绘、遥感 LiDAR | 测绘行业常用,支持分类、回波、GPS 时间等 |
| E57 | 三维激光扫描、建筑、BIM、逆向工程 | 适合三维扫描数据交换,可存点、强度、颜色、图像和元数据 |
| BIN / NPY / NPZ | 自动驾驶数据集、深度学习 | 简单高效,常用于模型训练 |
| ROS PointCloud2 | 机器人系统实时通信 | 二进制 blob 加字段描述,适合在线传输 |
ASPRS LAS 是遥感 LiDAR 领域常用格式,PDAL 文档也指出 LAS 是最常用的 LiDAR 格式之一。ASTM E57 则是三维成像数据交换格式,可以存储 3D 点、点属性以及 2D 图像。(PDAL)
三、点云来源
点云来源决定了点云质量、密度分布、噪声类型、尺度是否可靠、是否有颜色、是否有时间戳、是否存在运动畸变。不能简单分成"主动式好、被动式差",而要理解每类传感器的物理机制和误差模式。
1. 主动式深度测量
主动式测量设备会主动发射光、激光或红外信号,然后根据回波、相位、图案形变或三角测量恢复深度。
1.1 LiDAR 激光雷达
LiDAR 通过发射激光并接收回波来测距,常见测距方式包括直接飞行时间 ToF、相位式测距、FMCW 等。自动驾驶、机器人、测绘、矿山、港口、无人机等领域大量使用 LiDAR。
LiDAR 点云的特点通常是:
- 距离远;
- 尺度可靠;
- 坐标精度较高;
- 点云稀疏;
- 远处点更稀;
- 容易受雨、雾、尘、玻璃、强反射、黑色吸光材料、多路径反射影响;
- 旋转式或扫描式 LiDAR 在运动平台上会产生运动畸变。
需要特别注意,LiDAR 的"单帧点数"不能随便写成固定范围。更专业的参数是点频、通道数、视场角、角分辨率、扫描频率、回波模式。单帧点数大致由点频和帧率共同决定。
1.2 结构光相机
结构光相机会投射编码图案、条纹、散斑或线激光,再通过相机观察图案变形,根据几何关系计算深度。它常用于工业三维检测、消费级 3D 扫描、人脸识别、短距离建模等。
结构光的优势是近距离精度高、细节丰富;缺点是容易受环境光、高反光、透明体、黑色吸光材料、表面纹理和视角影响。室外强阳光下,结构光设备可能严重失效。
结构光不一定都"依赖相位差"。结构光包括编码光、条纹相移、随机散斑、线激光三角测量等多种形式,不能和 iToF 的相位测距混为一谈。
1.3 ToF 相机
ToF 相机通过测量光的飞行时间估计深度,常见形式包括直接 ToF 和间接 ToF。间接 ToF 常通过发射调制光并测量相位差估计距离。
ToF 相机的优势是结构紧凑、帧率高、能直接输出深度图;缺点是分辨率通常低于 RGB 相机,容易受多路径反射、环境光、串扰、低反射率目标和高反目标影响。
2. 被动式视觉重建
被动式重建不主动发射光,而是通过图像之间的几何关系恢复三维结构。
2.1 双目视觉
双目视觉通过两台相机之间的视差估计深度。视差越大,目标越近;视差越小,目标越远 。OpenCV 的双目深度教程展示了通过两张图像生成深度图的基本原理。(OpenCV 文档)
双目视觉的优势是成本低、信息丰富、可同时获得颜色;缺点是依赖纹理、光照和匹配质量,对弱纹理、重复纹理、透明体、反光体、远距离小视差目标不稳定。
2.2 SfM:运动恢复结构
SfM(Structure from Motion)通常从多张图像中同时估计相机位姿和稀疏三维点。它更像是在解决"相机怎么动、场景大致在哪里"的问题。
SfM 的输出通常包括:
- 相机内参;
- 相机外参;
- 稀疏三维点;
- 图像特征匹配关系。
但 SfM 点云通常比较稀疏,不适合直接作为完整几何模型。
2.3 MVS:多视图立体重建
MVS(Multi-View Stereo)通常在已知或已估计相机位姿的基础上,进一步估计密集深度、法向量和稠密点云 。COLMAP 官方文档明确描述了传统图像三维重建流程:先通过 SfM 恢复稀疏场景和相机位姿,再将其作为 MVS 输入恢复稠密场景。(COLMAP)
因此,更准确的关系是:
text
多张图像
→ 特征提取与匹配
→ SfM:估计相机位姿 + 稀疏点云
→ MVS:估计稠密深度/法向
→ 融合成稠密点云或 mesh
3. 仿真点云
仿真器可以根据虚拟场景和传感器模型生成 LiDAR 或深度相机点云。自动驾驶、机器人、无人机训练中经常使用仿真点云。
仿真点云的优势是可控、便宜、安全、可批量生成标注;缺点是真实感取决于传感器模型是否准确。真实 LiDAR 会有噪声、回波、多路径、遮挡、运动畸变、天气影响、材质反射差异,而简单仿真点云往往过于干净,和真实数据存在 domain gap。
4. 模型采样点云
CAD 模型、mesh 模型、医学体数据、NeRF、3D Gaussian、数字孪生场景都可以采样成点云。
这类点云往往几何完整、无噪声、密度可控,但不一定符合真实传感器采集规律。模型点云适合仿真、训练、重建评估、逆向工程对比,但不能简单等同于真实扫描点云。
四、点云的核心本质特性
1. 离散性
点云是离散点集合,不是连续曲面。点与点之间没有天然连接关系,因此不能直接知道哪里是面、哪里是边、哪里是洞、哪里是物体边界。
很多后续任务本质上都是在弥补离散性带来的信息缺失:
- 法向估计:根据邻域点拟合局部平面;
- 曲率估计:根据邻域形状变化估计弯曲程度;
- 表面重建:从点恢复 mesh 或隐式曲面;
- 分割:根据局部几何和语义把点划分成区域;
- 补全:根据先验推测缺失部分。
2. 无序性
对于无序点云,点的排列顺序没有物理意义。把第 1 个点和第 1000 个点交换,点云表达的几何对象不应改变。
这也是点云深度学习与图像深度学习的重要区别。PointNet 论文明确针对点集的置换不变性设计网络,使模型能够直接消费原始点云而不是先转成体素或多视图图像。(arXiv)
3. 非均匀密度
点云采样密度通常不均匀。
LiDAR 常按角分辨率采样,距离越远,同样角度间隔对应的空间距离越大,所以远处点更稀。斜视角、遮挡、材质反射率、传感器运动、融合视角数量也会改变点密度。
密度不均会影响很多算法:
- KNN 邻域在近处可能太小,在远处可能跨越不同物体;
- 固定半径邻域在稠密区点太多,在稀疏区点太少;
- 统计滤波可能误删远处稀疏目标;
- 分割算法可能把稀疏目标断开;
- 深度学习模型可能偏向训练集中常见密度。
PointNet++ 论文也指出,点集通常具有变化的采样密度,因此提出了多尺度特征组合来增强对密度变化的鲁棒性。(arXiv)
4. 局部邻域决定几何语义
单个点只有坐标和少量属性,本身几乎没有"形状"概念。点云的几何意义来自邻域。
例如:
- 一片局部点近似共面,可以认为是平面;
- 邻域法向变化剧烈,可能是边缘或角点;
- 点呈细长结构,可能是杆状物;
- 点密集形成闭合轮廓,可能是某个物体表面;
- 邻域高度平稳且大面积连续,可能是地面或墙面。
因此,点云算法的核心不是看单个点,而是看邻域结构。
5. 坐标系依赖
点云必须依附于坐标系。常见坐标系包括:
| 坐标系 | 含义 |
|---|---|
| LiDAR frame | 激光雷达自身坐标系 |
| Camera frame | 相机坐标系 |
| IMU frame | 惯性测量单元坐标系 |
| Base / body frame | 机器人或车辆本体坐标系 |
| Map frame | 局部地图坐标系 |
| World frame | 全局世界坐标系 |
坐标变换通常写成:
text
p_world = T_world_base · T_base_lidar · p_lidar
其中:
p_lidar是 LiDAR 坐标系下的点;T_base_lidar是 LiDAR 到机器人本体的外参;T_world_base是机器人本体在世界坐标系下的位姿;p_world是转换到世界坐标系后的点。
ROS tf2 的核心作用就是维护多个随时间变化的坐标系,并允许在任意时间查询不同坐标系之间的变换。(ROS Documentation)
6. 时间依赖
对于扫描式 LiDAR,一帧点云往往是在一段时间内逐线或逐点扫描得到的。如果传感器安装在运动平台上,例如车、机器人、无人机,那么一帧点云中的不同点其实是在不同时间、不同位姿下采集的。
这会导致运动畸变,也叫 deskew 问题 。移动 LiDAR 的距离测量是在不同时间接收的,运动估计误差会造成点云 mis-registration。(Robotics Proceedings)
因此,移动平台点云处理中,时间戳、IMU、轮速计、里程计、点级时间偏移非常重要。
7. 不完整性
单个传感器只能看到视线可达的表面。遮挡区域、物体背面、透明表面、镜面反射区域、超出量程区域都可能没有有效点。
所以点云天然存在"不完整"问题。点云补全、表面重建、多视角融合、TSDF 融合、Poisson 重建等方法,本质上都在试图从不完整观测中恢复更完整的几何结构。
Open3D 的表面重建文档也说明,要从无结构点云得到三角网格,需要执行表面重建,并提供 Alpha Shapes、Ball Pivoting、Poisson 等方法。(Open3D)
8. 不确定性
每个点都带有测量误差。误差大小与传感器类型、距离、入射角、材质、环境光、反射率、温度、标定状态、运动状态有关。
点云处理应该考虑:
- 这个点的置信度是多少?
- 这个点是否可能是多路径反射?
- 这个点是否来自弱回波?
- 这个点是否处于物体边缘混合区域?
- 这个点是否受运动畸变影响?
- 这个点是否与邻域几何一致?
五、点云为什么会"脏"
1. 脏点云
点云中存在的错误点、离群点、噪声点、虚假点、缺失区域、密度异常、运动畸变、坐标错位、任务无关点和冗余点,都会降低后续配准、分割、检测、测量、重建或建图任务的效果,这些问题统称为点云质量问题。
点云质量问题主要包括六类:
| 类型 | 表现 | 常见原因 |
|---|---|---|
| 随机噪声 | 表面发毛、厚墙、点抖动 | 测距噪声、热噪声、散斑、量化误差 |
| 离群点 | 空中飞点、孤立点、远离表面的点 | 弱回波、错误匹配、多路径、边缘混合 |
| 系统误差 | 整体偏移、尺度错误、重影 | 标定错误、时间同步错误、位姿估计错误 |
| 缺失 | 洞、断裂、黑区 | 遮挡、透明体、吸光体、超出量程 |
| 伪影 | 鬼影、镜像点、玻璃后虚点 | 多路径、镜面反射、折射 |
| 任务无关点 | 地面、天空、墙、工作台、背景 | 真实存在但对当前任务无用 |
2. 采集设备带来的固有误差
2.1 LiDAR 固有误差
LiDAR 点云常见误差包括测距误差、角度误差、机械抖动、通道标定误差、回波强度异常、多路径反射、边缘混合、雨雾尘干扰等。
典型表现包括:
- 物体表面点轻微抖动;
- 墙面变厚;
- 边缘出现飞点;
- 玻璃附近出现虚点;
- 远距离目标点稀疏且噪声变大;
- 多传感器融合时出现重影;
- 移动平台采集时出现拖影或扭曲。
2.2 结构光和 ToF 相机误差
结构光和 ToF 相机常见问题包括:
- 环境光干扰;
- 多路径反射;
- 相位解缠错误;
- 像素串扰;
- 边缘混合像素;
- 高反表面饱和;
- 黑色物体回波弱;
- 透明物体深度错误;
- 深度空洞。
所以不能简单说主动式传感器"抗干扰能力强、精度高"。主动式传感器确实能直接提供深度,但也会被光学环境、目标材质和测量机制限制。
2.3 被动视觉重建误差
SfM、MVS、双目视觉常见问题包括:
- 特征匹配错误;
- 弱纹理区域无法匹配;
- 重复纹理导致误匹配;
- 光照变化导致匹配失败;
- 相机位姿估计错误;
- 尺度不确定;
- 稠密重建产生浮点和噪声面;
- 遮挡边缘出现错误深度。
因此,被动视觉重建的点云通常颜色丰富,但几何可靠性强烈依赖图像质量、纹理、相机标定和匹配算法。
3. 环境与目标材质带来的问题
现实世界中的材质是点云"脏"的核心来源之一。
3.1 透明和半透明物体
玻璃、亚克力、水、透明塑料会导致光线透射、折射和反射混合。传感器可能测到玻璃表面,也可能测到玻璃后的物体,还可能生成折射导致的虚假点。
在自动驾驶、机器人导航、工业抓取中,透明物体是三维感知的难点。
3.2 高反光和镜面物体
镜面金属、抛光石材、车漆、水面、镜子可能让光线偏离传感器,导致无回波;也可能经过其他表面反射后返回,产生多路径鬼影点。
3.3 强吸光物体
黑色橡胶、哑光黑材料、碳纤维等会吸收大量光能,使回波信号弱,导致深度缺失、飞点或测距不稳定。
3.4 雨、雾、尘、烟
雨滴、雾滴、灰尘、烟雾可能反射或散射激光,生成大量漂浮点,也会衰减真实目标回波。
3.5 遮挡
遮挡是点云缺失的根本原因之一。传感器只能看到视线方向上的第一个或若干回波目标,被遮挡区域不会凭空产生真实数据。
4. 标定、同步和坐标变换误差
工程中很多"脏点云"不是传感器原始噪声,而是系统问题。
4.1 内参误差
相机焦距、主点、畸变参数不准,会导致反投影点云变形。OpenCV 相机标定文档说明,相机内参包括焦距和光心,内参矩阵可以用于去除镜头畸变。(OpenCV 文档)
4.2 外参误差
多传感器融合时,LiDAR、相机、IMU、机器人本体之间的相对位姿必须准确。外参有微小误差,也会造成投影错位、点云重影、颜色贴错、检测框偏移。
4.3 时间同步误差
LiDAR、相机、IMU、轮速计如果时间戳不同步,动态场景中会出现严重错位。例如相机看到的是 t=1.00s 的车辆,LiDAR 点云是 t=1.05s 的车辆,融合结果就会错。
4.4 位姿估计误差
SLAM 或里程计的漂移会让多帧点云融合后变厚、重影、墙面弯曲、地图撕裂。
5. 点云离散采样带来的表观问题
即使传感器完全没有噪声,点云作为离散采样也会带来问题。
5.1 冗余点
同一平面可能被采样成大量重复点,对几何表达贡献有限,却显著增加计算量。
5.2 密度不均
近处密、远处疏;正对传感器的面密,斜视角面稀;多视角重叠区域密,单视角区域稀。这会影响邻域搜索、配准、分割和学习模型。
5.3 边缘锯齿
物体边界由离散点表达时,看起来会像锯齿,而不是连续轮廓。
5.4 空洞
遮挡、反光、透明、吸光、视角不足都会造成点云空洞。空洞不是"噪声点",不能靠简单滤波解决,需要补全、融合或重建。
六、点云滤波
1. 滤波不是万能去噪
点云滤波是根据几何规律、统计规律、传感器特性和任务先验,对点云进行无效点剔除、区域裁剪、离群点去除、下采样、密度均衡、平滑、背景过滤和属性筛选的预处理过程。
2. 点云预处理的常见动作
| 动作 | 作用 | 典型方法 |
|---|---|---|
| 无效点剔除 | 去掉 NaN、inf、超量程、无效深度 | 有效深度范围过滤 |
| ROI 裁剪 | 只保留任务区域 | PassThrough、CropBox、多边形裁剪 |
| 条件过滤 | 根据属性筛选点 | intensity、range、height、timestamp |
| 离群点去除 | 去掉飞点、孤立点 | SOR、ROR |
| 下采样 | 减少点数、均衡密度 | VoxelGrid、均匀采样、随机采样、FPS |
| 平滑 | 减少表面抖动 | MLS、双边滤波、高斯滤波 |
| 背景过滤 | 去地面、墙面、工作台 | RANSAC、地面分割、背景建模 |
| 法向估计 | 为重建、配准、分割提供局部几何 | PCA 邻域拟合 |
| 特征提取 | 为配准和识别提供局部描述 | FPFH、SHOT、ISS、学习式特征 |
Open3D 官方文档也将点云下采样和离群点去除作为点云基础处理内容,指出扫描设备采集的点云往往包含噪声和伪影。(Open3D)
七、四类基础滤波操作
1. 区域裁剪:先去掉不关心的点
区域裁剪通常是点云处理中最先做、也最有效的步骤之一。它的目标不是判断点对不对,而是判断点和当前任务有没有关系。
例如:
- 自动驾驶只关心车辆周围一定范围内的点;
- 工业检测只关心工件区域,不关心工作台外的点;
- 机械臂抓取只关心桌面上方目标区域;
- 室内建图可能不关心天花板以上的点;
- 隧道检测可能只保留隧道壁范围内的点。
常见方法包括:
1.1 直通滤波 PassThrough
按某个坐标轴范围过滤,例如:
text
保留 -2m < z < 3m 的点
保留 0m < x < 80m 的点
保留 -30m < y < 30m 的点
适合快速裁剪长方体区域。
1.2 CropBox
用一个三维盒子裁剪点云,比单轴 PassThrough 更灵活,可以处理旋转后的 ROI。
1.3 多边形裁剪
在俯视图或空间中定义多边形区域,只保留区域内点。工业检测、地图区域裁剪、语义地图编辑中常用。
1.4 基于距离和高度过滤
例如去掉过近点、过远点、地面以下点、天空方向点。
2. 离群点剔除:去掉孤立或统计异常的点
离群点通常是明显偏离局部几何结构的点,例如空中飞点、孤立噪声点、错误匹配点、多路径虚点。
2.1 统计离群点滤波 SOR
SOR(Statistical Outlier Removal)统计滤波基本思想是:
- 对每个点寻找 K 个近邻;
- 计算该点到近邻的平均距离;
- 统计所有点的平均邻距分布;
- 将远超整体统计范围的点判为离群点。
PCL 官方 SOR 教程说明,该方法使用统计分析技术从点云数据集中移除噪声测量,例如离群点。(Point Cloud Library)
SOR 适合去除全局范围内的随机离群点,但要注意:
- 远距离稀疏目标可能被误删;
- 细小结构可能被误删;
- 多密度点云中,全局统计假设不一定成立;
- 参数
MeanK和StddevMulThresh需要根据场景调节。
2.2 半径离群点滤波 ROR
ROR(Radius Outlier Removal)基本思想是:
- 给定搜索半径
r; - 对每个点统计半径内邻居数量;
- 邻居数量少于阈值,则认为是离群点。
PCL 官方文档说明,RadiusOutlierRemoval 会移除在指定范围内没有足够邻居的点。(Point Cloud Library)
ROR 适合去掉孤立飞点,但对密度变化敏感。远处点本来就稀疏,如果半径和邻居数设置不合理,会把真实目标删掉。
2.3 条件滤波
条件滤波根据字段值过滤,例如:
text
range < 0.5m → 过近无效点
range > 120m → 超出可靠量程
intensity < 阈值 → 弱回波点
z < -2m → 地面以下点
confidence < 阈值 → 低置信度深度点
条件滤波非常工程化,常常比复杂算法更有效。
3. 下采样:减少点数并改善密度
下采样的目是降低计算量、均衡点密度、保留主要几何结构。
3.1 体素下采样 VoxelGrid
体素下采样把空间划分成大小固定的三维网格,每个体素内用一个代表点代替多个点。PCL 的 VoxelGrid 类就是使用体素化网格方法对点云进行下采样 。(Point Cloud Library)
常见代表点选择方式包括:
- 体素内点的重心;
- 体素中心;
- 距离体素中心最近的点;
- 保留某个属性最优的点。
体素下采样的关键参数是体素大小:
text
体素太大:细节丢失,边缘变钝,小目标消失
体素太小:降采样效果不明显,计算量仍然大
3.2 均匀采样
每隔固定数量的点保留一个点,简单快速,但依赖原始点顺序,不一定能保持空间均匀。
3.3 随机采样
随机保留一定比例点,适合训练数据增强或快速粗处理,但几何可控性较差。
3.4 最远点采样 FPS
FPS 每次选择距离已选点集合最远的点,使采样点尽量覆盖整个空间。它常用于点云深度学习,但计算开销比简单采样更高。
3.5 曲率/特征保持采样
在平面区域少保留点,在边缘、角点、曲率变化大的区域多保留点。适合逆向工程、三维重建和工业检测,但需要先估计局部几何特征。
4. 平滑:减少表面抖动,但可能改变几何
平滑的目标是降低局部高频噪声,让表面更连续。但平滑会移动点的位置,因此在工业测量、缺陷检测、尺寸检测中必须谨慎使用。
4.1 MLS 移动最小二乘
MLS(Moving Least Squares)它通过邻域点拟合局部光滑曲面,然后将点投影或重采样到曲面上 。PCL 官方 MLS 教程说明,MLS 可用于平滑和重采样噪声数据,尤其是小距离测量误差造成的数据不规则。(Point Cloud Library)
MLS 适合:
- 表面重建前预处理;
- 法向估计稳定化;
- 多视角扫描后减少轻微 double wall;
- 噪声表面平滑。
MLS会改变点的位置,可能把真实划痕、凹坑、毛刺、边缘缺陷当作噪声抹掉。工业检测中是否使用 MLS,要看检测目标、误差预算和缺陷尺度。
4.2 双边滤波
双边滤波同时考虑空间距离和属性相似性。用于点云时,属性相似性可以是法向差异、深度差异、强度差异或局部平面距离。
它的优点是相对于普通高斯滤波更能保护边缘;缺点是效果依赖参数、法向估计和邻域质量。
双边滤波是一类保边平滑方法,可以在一定程度上减少边缘被磨平的问题,但无法保证完美保边。
4.3 高斯平滑
高斯平滑根据空间距离加权平均邻域点,适合噪声较小、表面连续、没有尖锐结构的场景。但它容易模糊边缘、磨平棱角。
八、背景过滤与模型分割
很多时候,点云中最大的问题不是噪声,而是背景太多。
1. 地面过滤
自动驾驶和移动机器人中,地面点占据大量点数。地面过滤可以减少计算量,并帮助检测障碍物。
常见方法包括:
- RANSAC 平面拟合;
- 高度阈值;
- 栅格最低点;
- 渐进形态学滤波;
- 地面坡度模型;
- 深度学习地面分割。
单平面 RANSAC 适合平坦地面,但不适合坡道、坑洼、路缘、复杂地形。
2. 平面、圆柱、球体模型分割
RANSAC 可以拟合几何模型,例如平面、圆柱、球体。典型应用包括:
- 拟合桌面并提取桌面上物体;
- 去除墙面;
- 检测管道;
- 检测圆柱工件;
- 提取地面。
3. 背景建模
固定相机或固定扫描场景中,可以先建立背景点云,然后用新采集点云与背景比较,提取变化区域。
这在工业产线、安防、仓储、固定机械臂抓取中很常见。
九、点云处理的通用工程流水线
通用流程可以写成:
text
原始数据包 / 深度图 / 点云文件
→ 解析字段、时间戳、坐标系
→ 去 NaN / inf / 无效深度 / 超量程点
→ 时间同步
→ 坐标变换与外参应用
→ 运动补偿 deskew(移动平台需要)
→ ROI 裁剪 / 距离过滤 / 高度过滤
→ 背景、地面、墙面、工作台过滤
→ 离群点剔除
→ 下采样或体素化
→ 平滑或重采样(按任务决定)
→ 法向量、曲率、局部特征估计
→ 配准 / 分割 / 检测 / 重建 / 测量 / 建图
不同场景的重点不同。
| 场景 | 处理重点 |
|---|---|
| 自动驾驶 3D 检测 | 时间同步、运动补偿、ROI、体素化/柱状编码、实时性 |
| 工业尺寸检测 | 标定精度、重复性、误差预算、保留细节、谨慎平滑 |
| 机器人抓取 | 桌面分割、目标分割、点云补洞、姿态估计 |
| LiDAR SLAM | deskew、特征提取、局部地图、配准鲁棒性、回环 |
| RGB-D 重建 | 深度图滤波、多帧融合、TSDF、表面重建 |
| 航测 LiDAR | 坐标参考系统、LAS/LAZ、地面点分类、DEM/DSM |
| 三维扫描建模 | 多视角配准、去噪、重采样、法向估计、mesh 重建 |
十、坐标系、标定和时间同步是点云工程的根基
1. 相机内参
相机内参描述相机如何把三维点投影到图像平面,主要包括:
- 焦距
fx, fy; - 主点
cx, cy; - 畸变参数;
- 图像分辨率。
相机内参不准,会导致深度反投影错误、点云变形、RGB 与深度对不齐。
2. 外参
外参描述两个坐标系之间的相对姿态,通常包括旋转和平移:
text
T = [ R t
0 1 ]
例如:
text
T_base_lidar
T_camera_lidar
T_world_base
外参错误会造成:
- 多帧点云重影;
- LiDAR 与相机投影错位;
- 检测框偏移;
- 地图变厚;
- 机器人抓取点错误。
3. 时间同步
点云系统常常同时使用 LiDAR、相机、IMU、GNSS、轮速计。只要时间不同步,动态场景就会出错。
例如:
text
相机图像:t = 10.000s
LiDAR 点云:t = 10.080s
车辆速度:15 m/s
时间差:0.080s
空间误差:1.2m
这足以让自动驾驶感知出现严重错位。
4. 运动补偿
扫描式 LiDAR 在一帧内逐点采样。如果平台运动,一帧点云会被拉伸或扭曲。运动补偿需要每个点的采集时间,并结合 IMU、里程计或连续位姿估计,把每个点校正到统一时刻。
十一、点云滤波之后
点云学习不能停在滤波。滤波只是点云处理的入口,后面还有大量核心任务。
1. 点云配准
配准是把多个点云对齐到同一坐标系。常见于多帧建图、三维扫描拼接、CAD 对齐、SLAM。
常见方法包括:
- ICP;
- point-to-plane ICP;
- Generalized ICP;
- NDT;
- FPFH + RANSAC;
- TEASER;
- 学习式配准。
ICP 是经典三维形状配准方法,通过迭代寻找对应关系并优化变换。Open3D 的 ICP 文档也说明,ICP 输入两组点云和初始变换,输出更精确的对齐变换。(SPIE Digital Library)
2. 点云分割
分割是把点划分成不同区域或类别。
常见类型包括:
- 语义分割:每个点属于什么类别;
- 实例分割:每个点属于哪个独立物体;
- 几何分割:平面、圆柱、边缘、曲面;
- 聚类分割:按空间连通性分成多个对象。
常见方法包括:
- 欧式聚类;
- 区域生长;
- RANSAC 模型分割;
- 图割;
- PointNet++;
- KPConv;
- SparseConv;
- Transformer 点云模型。
3. 三维目标检测
三维检测输出物体的类别、三维边界框、朝向和置信度。
自动驾驶中常见输出形式:
text
class, x, y, z, length, width, height, yaw, score
典型模型包括:
- VoxelNet;
- SECOND;
- PointPillars;
- PV-RCNN;
- CenterPoint;
- BEVFusion。
VoxelNet 将点云划分为等间隔三维体素,并通过 VFE 层学习体素特征。PointPillars 则把点云组织成竖直柱状 pillars,再用 PointNet 学习柱特征,并接入 2D 卷积检测网络。(arXiv)
4. 表面重建
表面重建是从点云恢复连续曲面或三角网格。
常见方法包括:
- Alpha Shapes;
- Ball Pivoting;
- Poisson Surface Reconstruction;
- TSDF Fusion;
- Delaunay;
- 隐式神经场;
- NeRF / 3D Gaussian 相关表面提取。
Open3D 官方文档列出了 Alpha Shapes、Ball Pivoting 和 Poisson 表面重建等方法。(Open3D)
5. 点云测量与工业检测
工业场景中,点云常用于:
- 尺寸测量;
- 平面度检测;
- 圆柱度检测;
- 轮廓度检测;
- CAD 对比;
- 缺陷检测;
- 间隙面差测量;
- 焊缝检测;
- 零件装配检查。
这类任务最重要的是误差预算和可重复性,而不是单纯追求点云看起来"平滑"。过度滤波可能把真实缺陷抹掉。
6. SLAM 与建图
LiDAR SLAM 或 RGB-D SLAM 要解决"我在哪里"和"环境长什么样"两个问题。
基本流程包括:
text
点云预处理
→ 运动补偿
→ 特征提取或直接配准
→ 帧间里程计
→ 局部地图匹配
→ 回环检测
→ 图优化
→ 全局地图
LOAM 系列方法的核心思想就是将实时里程计和低频建图分开处理,从而兼顾速度和精度。(Robotics Proceedings)
十二、点云的深度学习
现代点云学习不仅依赖传统滤波,还会把特征提取、聚合、分割、检测放进神经网络中学习。
1. Point-based 方法
Point-based 方法直接处理点集,不先转成图像或体素。
代表方法:
- PointNet;
- PointNet++;
- DGCNN;
- KPConv;
- Point Transformer。
PointNet 直接消费原始点云,并通过对称函数处理点集无序性;PointNet++ 进一步通过层次化局部区域学习补足 PointNet 对局部结构建模不足的问题。(arXiv)
优点:
- 保留原始点坐标;
- 不需要体素量化;
- 适合分类、分割、局部特征学习。
缺点:
- 大规模点云计算成本高;
- 邻域搜索开销大;
- 对工程部署不一定最友好。
2. Voxel-based 方法
Voxel-based 方法把点云划分成三维体素,再使用 3D 卷积或稀疏卷积处理。
代表方法:
- VoxelNet;
- SECOND;
- SparseConvNet;
- MinkowskiNet。
优点:
- 适合大规模场景;
- 可以利用卷积结构;
- 对检测任务效果好。
缺点:
- 体素化会带来量化误差;
- 3D 卷积计算量大;
- 小体素精度高但慢,大体素快但丢细节。
3. Pillar / BEV 方法
Pillar 方法把三维空间划分为竖直柱,不在高度方向细分体素,然后把点云编码成鸟瞰图特征。
代表方法:
- PointPillars;
- CenterPoint;
- BEVFusion。
优点:
- 速度快;
- 适合自动驾驶;
- 能使用成熟的 2D CNN 检测框架。
缺点:
- 高度方向表达较粗;
- 对立体结构复杂的场景表达有限。
4. Range Image 方法
旋转式 LiDAR 可以投影成 range image,即距离图。每个像素对应一个激光角度方向。
优点:
- 数据结构规则;
- 推理快;
- 适合语义分割和实时感知。
缺点:
- 投影会引入遮挡和扭曲;
- 不同 LiDAR 线束结构差异大;
- 对非旋转式 LiDAR 不一定适用。
十三、点云质量评价
| 任务 | 常见指标 |
|---|---|
| 去噪 | 点到真值表面距离、Chamfer Distance、Hausdorff Distance、normal consistency |
| 配准 | fitness、inlier RMSE、旋转误差、平移误差 |
| 分割 | OA、mIoU、per-class IoU、instance AP |
| 检测 | 3D AP、BEV AP、mAP、IoU |
| 重建 | Chamfer Distance、F-score、mesh accuracy、mesh completeness |
| 工业测量 | 重复性、再现性、点到 CAD 偏差、平面度、圆柱度、轮廓度 |
| SLAM | ATE、RPE、漂移率、回环误差、地图一致性 |
| 压缩 | 压缩率、几何误差、颜色误差、传输延迟 |
评价指标必须和任务绑定。自动驾驶检测不一定需要每个点非常平滑;工业检测不一定需要大范围语义理解;SLAM 不一定需要语义类别,但需要几何一致性和位姿稳定。
总结
点云是三维视觉、机器人、自动驾驶、工业检测、测绘建模中的核心数据载体,是传感器或重建算法在特定坐标系、特定时间、特定观测条件下得到的离散采样。
学习点云要先建立以下认知:
- 点云不是连续表面,而是离散采样点集合。
- 点云不一定天然有真实尺度,尺度是否可靠取决于传感器和标定。
- 点云不只是
N×C矩阵,工程中还包含字段、坐标系、时间戳、格式和元数据。 - 点云可能是无序的,也可能是有序的 image-like 结构。
- 点云质量问题不只是噪声,还包括离群点、缺失、密度不均、伪影、重影、运动畸变和任务无关点。
- 点云滤波不是万能修复,而是根据任务目标进行筛选、裁剪、去噪、下采样和平滑。
- 坐标系、外参、内参、时间同步和运动补偿,比单个滤波算法更重要。
- 不同任务对点云质量的要求不同:自动驾驶看重实时性和鲁棒性,工业检测看重精度和细节,SLAM 看重时空一致性,重建看重完整性和表面连续性。
- 深度学习中的点云处理路线主要包括 point-based、voxel-based、pillar/BEV-based 和 range image-based。
参考资料
- ROS
sensor_msgs/PointCloud2官方文档:点云字段、坐标系、organized / unorganized 结构。(ROS Documentation) - PCL PCD 文件格式官方文档:PCD 字段、宽高、视点、数据存储方式。(Point Cloud Library)
- PCL StatisticalOutlierRemoval、RadiusOutlierRemoval、VoxelGrid、MLS 官方教程:基础点云滤波、离群点去除、下采样、平滑重采样。(Point Cloud Library)
- Open3D 官方文档:离群点去除、ICP、全局配准、表面重建。(Open3D)
- COLMAP 官方教程:SfM 与 MVS 图像三维重建流程。(COLMAP)
- OpenCV 官方文档:相机标定与双目深度。(OpenCV 文档)
- ROS tf2 官方文档:多坐标系随时间变换管理。(ROS Documentation)
- ASPRS LAS、PDAL、ASTM E57 文档:测绘与三维扫描点云格式。(asprslas.org)
- PointNet、PointNet++、VoxelNet、PointPillars 论文:点云深度学习基础路线。(arXiv)
- LOAM、ICP、FPFH 相关论文与文档:LiDAR SLAM、点云配准和局部几何特征。(Robotics Proceedings)