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)边缘/角点检测、分割
FPFH33无O(nk)粗配准、回环检测
SHOT352有O(nk²)物体识别、精细配准
PFH125无O(nk²)离线配准、精度对比

五、方法流程与工程实现

一个完整的特征提取流程通常包括:点云预处理、邻域搜索、法向量估计、描述子计算、特征匹配与验证。预处理包括降采样、去噪、地面分割;邻域搜索常用 KD-Tree 或 Octree;法向量估计为描述子提供输入;描述子计算后,通过最近邻搜索或 RANSAC 进行匹配。

  1. 预处理:体素降采样到 0.2~0.5 m,去除离群点,分割地面。
  2. 邻域搜索:根据点云密度选择 K 或半径,通常 K=20~50,r=0.3~0.8 m。
  3. 法向量估计:PCA 计算,视点定向,检查曲率分布。
  4. 描述子计算:FPFH 用于粗配准,SHOT 用于识别与精细匹配。
  5. 匹配与验证:特征最近邻 + 距离阈值 + RANSAC 几何验证。

工程建议:特征提取前先做体素降采样,保证点云密度均匀;法向量估计的邻域半径应与描述子半径匹配;FPFH 适合快速粗配准,SHOT 适合对旋转鲁棒性要求高的场景;描述子维度越高,匹配越慢,需在精度与实时性之间权衡。

六、案例场景:激光雷达点云配准

在两帧激光雷达点云配准中,先用 FPFH 计算关键点描述子,通过特征匹配得到初始对应关系,再用 RANSAC 估计初始变换,最后用 ICP 精配准。若场景中存在大量重复结构(如走廊、隧道),FPFH 可能产生误匹配,此时可改用 SHOT 或引入语义约束。对于自动驾驶中的地点识别,FPFH 直方图可作为全局描述子的局部补充,提升回环检测召回率。

七、误区与复盘

  • 误区一:邻域越大越好。邻域过大会混入不同结构,导致描述子模糊;邻域过小则对噪声敏感。应通过实验确定最佳半径。
  • 误区二:忽略法向量定向。未定向的法向量会使 FPFH、SHOT 出现符号翻转,匹配失败。务必使用视点约束。
  • 误区三:直接对原始点云计算描述子。原始点云密度不均、噪声大,应先降采样和去噪。
  • 误区四:只用一种描述子。FPFH 与 SHOT 互补,粗配准用 FPFH,精细识别用 SHOT,可提升整体鲁棒性。

复盘要点:特征提取不是孤立步骤,它与点云质量、邻域参数、法向量估计、匹配策略紧密耦合。调试时应先可视化法向量和曲率,再检查描述子直方图分布,最后评估匹配内点率。若内点率低,优先排查法向量定向和邻域半径,而不是盲目更换描述子。

点云特征提取:从局部几何到描述子 原始点云 XYZ + Intensity 预处理 降采样 / 去噪 / 分割 邻域搜索 KD-Tree / Octree 法向量 + 曲率 PCA 特征值分解 FPFH 33 维 · 无局部参考系 O(nk) · 粗配准 SHOT 352 维 · 有局部参考系 O(nk²) · 识别/精配准 PFH / VFH 125 维 / 全局描述 离线对比 / 物体识别 特征匹配与几何验证 最近邻搜索 + 距离阈值 + RANSAC + ICP 法向量与曲率是描述子的基础输入;FPFH 与 SHOT 分别面向快速粗配准与旋转鲁棒识别

综上,点云特征提取的关键在于理解局部几何量的物理含义,并根据任务需求选择合适的描述子。法向量与曲率提供基础几何信息,FPFH 以低复杂度实现快速匹配,SHOT 以局部参考系提升旋转鲁棒性。工程中应结合点云质量、邻域参数和匹配策略,形成“预处理—法向量—描述子—匹配—验证”的完整闭环,才能在实际激光雷达感知系统中稳定发挥作用。