4. 点云特征提取
点云特征提取是激光雷达感知链路中承上启下的关键环节。原始点云只提供离散的三维坐标与反射强度,而后续的分割、配准、识别、跟踪等任务,都需要更紧凑、更具判别力的表达。特征提取的目标,就是把“一堆点”转化为“可比较、可匹配、可学习的描述”。本节围绕几何特征、法向量、曲率、FPFH 与 SHOT 等描述子,梳理其原理、计算流程与工程实现要点。
一、核心原理:从局部几何到全局描述
点云特征大致可分为两类:局部特征与全局特征。局部特征描述某个点邻域内的几何形态,如法向量、曲率、PFH、FPFH、SHOT;全局特征则描述整个点云或物体的整体分布,如 VFH、ESF、全局直方图。工程中最常用的是局部特征,因为它们对遮挡、部分可见和配准更鲁棒。
局部特征的核心思想是:以查询点为中心,在半径 r 或 K 近邻范围内构建局部支撑区域,统计邻域点之间的几何关系,形成直方图或向量。法向量描述局部平面的朝向;曲率描述局部表面的弯曲程度;FPFH 描述点与邻域点法向量之间的角度关系;SHOT 则进一步引入局部参考系,把邻域划分为多个空间网格,统计每个网格内的法向量方向直方图。
关键认知:特征描述子的判别力来自“局部参考系 + 几何量统计”。没有稳定的局部参考系,描述子会随视角和旋转变化而失效;没有合理的统计分箱,描述子又会过于稀疏或过于平滑。
二、法向量与曲率:最基础的局部几何量
法向量估计通常基于主成分分析(PCA)。对查询点 p 的 K 近邻点集,计算协方差矩阵 C,对其进行特征值分解,最小特征值对应的特征向量即为法向量方向。特征值 λ1 ≥ λ2 ≥ λ3 还可用于计算曲率:曲率 ≈ λ3 / (λ1 + λ2 + λ3)。曲率越大,说明局部表面越弯曲;曲率越小,说明越接近平面。
法向量存在方向二义性,即 n 与 -n 都满足平面法向。工程中常用视点约束进行定向:若 n·(v - p) < 0,则翻转法向量,其中 v 为传感器视点。对于激光雷达,视点通常取原点或传感器中心。
# PCL 法向量与曲率估计示例
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
ne.setInputCloud(cloud);
ne.setSearchMethod(tree);
ne.setKSearch(20); // 或 setRadiusSearch(0.3)
ne.setViewPoint(0, 0, 0); // 视点定向
pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
ne.compute(*normals);
// 曲率可从 Normal 中读取
float curvature = normals->points[i].curvature;
法向量和曲率本身不是“描述子”,但它们是 FPFH、SHOT 等高级描述子的输入。法向量估计质量直接决定后续描述子的稳定性,因此邻域半径、K 值、点云密度和噪声水平必须匹配。
三、FPFH:快速点特征直方图
PFH(Point Feature Histogram)通过统计查询点与邻域点对之间的三个角度特征(α、φ、θ)构建直方图,判别力强但计算复杂度为 O(nk²)。FPFH(Fast Point Feature Histogram)对其简化:先计算查询点与每个邻域点的 SPFH(Simplified Point Feature Histogram),再对邻域内所有点的 SPFH 加权求和,得到最终 FPFH。复杂度降为 O(nk),适合实时场景。
FPFH 的每个分量对应一个角度区间的统计值,通常输出 33 维向量。它对点云密度变化和噪声有一定鲁棒性,常用于粗配准、回环检测和地点识别。其局限是:没有显式局部参考系,对旋转的鲁棒性弱于 SHOT;在平坦区域判别力下降。
// PCL FPFH 计算示例
pcl::FPFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33> fpfh;
fpfh.setInputCloud(cloud);
fpfh.setInputNormals(normals);
fpfh.setSearchMethod(tree);
fpfh.setRadiusSearch(0.5);
pcl::PointCloud<pcl::FPFHSignature33>::Ptr descriptors(new pcl::PointCloud<pcl::FPFHSignature33>);
fpfh.compute(*descriptors);
四、SHOT:方向直方图描述子
SHOT(Signature of Histograms of OrienTations)的核心是构建一个可重复的局部参考系(LRF)。它以查询点为中心,利用邻域点的协方差矩阵确定三个正交轴,然后将球形邻域沿径向、方位角、俯仰角划分为 32 个空间网格。每个网格内统计邻域点法向量与局部参考系之间的夹角余弦直方图,最终拼接成 352 维描述子。
SHOT 的优点是具有显式局部参考系,对旋转、平移和点云密度变化更鲁棒,适合物体识别和精细配准。缺点是计算量大于 FPFH,且局部参考系的估计在对称或平坦区域可能不稳定。
| 特征/描述子 | 维度 | 局部参考系 | 计算复杂度 | 典型用途 |
|---|---|---|---|---|
| 法向量 | 3 | 无 | O(nk) | 平面检测、法向约束 |
| 曲率 | 1 | 无 | O(nk) | 边缘/角点检测、分割 |
| FPFH | 33 | 无 | O(nk) | 粗配准、回环检测 |
| SHOT | 352 | 有 | O(nk²) | 物体识别、精细配准 |
| PFH | 125 | 无 | O(nk²) | 离线配准、精度对比 |
五、方法流程与工程实现
一个完整的特征提取流程通常包括:点云预处理、邻域搜索、法向量估计、描述子计算、特征匹配与验证。预处理包括降采样、去噪、地面分割;邻域搜索常用 KD-Tree 或 Octree;法向量估计为描述子提供输入;描述子计算后,通过最近邻搜索或 RANSAC 进行匹配。
- 预处理:体素降采样到 0.2~0.5 m,去除离群点,分割地面。
- 邻域搜索:根据点云密度选择 K 或半径,通常 K=20~50,r=0.3~0.8 m。
- 法向量估计:PCA 计算,视点定向,检查曲率分布。
- 描述子计算:FPFH 用于粗配准,SHOT 用于识别与精细匹配。
- 匹配与验证:特征最近邻 + 距离阈值 + RANSAC 几何验证。
工程建议:特征提取前先做体素降采样,保证点云密度均匀;法向量估计的邻域半径应与描述子半径匹配;FPFH 适合快速粗配准,SHOT 适合对旋转鲁棒性要求高的场景;描述子维度越高,匹配越慢,需在精度与实时性之间权衡。
六、案例场景:激光雷达点云配准
在两帧激光雷达点云配准中,先用 FPFH 计算关键点描述子,通过特征匹配得到初始对应关系,再用 RANSAC 估计初始变换,最后用 ICP 精配准。若场景中存在大量重复结构(如走廊、隧道),FPFH 可能产生误匹配,此时可改用 SHOT 或引入语义约束。对于自动驾驶中的地点识别,FPFH 直方图可作为全局描述子的局部补充,提升回环检测召回率。
七、误区与复盘
- 误区一:邻域越大越好。邻域过大会混入不同结构,导致描述子模糊;邻域过小则对噪声敏感。应通过实验确定最佳半径。
- 误区二:忽略法向量定向。未定向的法向量会使 FPFH、SHOT 出现符号翻转,匹配失败。务必使用视点约束。
- 误区三:直接对原始点云计算描述子。原始点云密度不均、噪声大,应先降采样和去噪。
- 误区四:只用一种描述子。FPFH 与 SHOT 互补,粗配准用 FPFH,精细识别用 SHOT,可提升整体鲁棒性。
复盘要点:特征提取不是孤立步骤,它与点云质量、邻域参数、法向量估计、匹配策略紧密耦合。调试时应先可视化法向量和曲率,再检查描述子直方图分布,最后评估匹配内点率。若内点率低,优先排查法向量定向和邻域半径,而不是盲目更换描述子。
综上,点云特征提取的关键在于理解局部几何量的物理含义,并根据任务需求选择合适的描述子。法向量与曲率提供基础几何信息,FPFH 以低复杂度实现快速匹配,SHOT 以局部参考系提升旋转鲁棒性。工程中应结合点云质量、邻域参数和匹配策略,形成“预处理—法向量—描述子—匹配—验证”的完整闭环,才能在实际激光雷达感知系统中稳定发挥作用。