4. 点云特征提取

点云配准要解决的核心问题是“把两片来自不同视角或不同时间的点云对齐”。如果直接拿全部点做 ICP,容易陷入局部最优,尤其在初始位姿差异较大时。因此,工程上通常先提取局部特征,用描述子建立候选对应关系,再交给 RANSAC 或 ICP 精配准。本节围绕法向量、曲率、PFH、FPFH、SHOT 以及描述子评价方法展开。

一、核心原理:从几何邻域到可区分描述

点云特征提取的本质,是把每个点及其邻域内的几何形状编码成一个向量。这个向量需要满足两个矛盾的要求:可区分性(不同位置、不同结构应产生不同描述)和鲁棒性(噪声、分辨率变化、轻微遮挡下描述应稳定)。

  • 法向量:描述局部表面的朝向,是许多描述子的基础。通常对邻域点做 PCA,最小特征值对应的特征向量即为法向量。
  • 曲率:反映局部表面的弯曲程度。PCA 中最小特征值与特征值之和的比值可作为曲率近似,平面接近 0,边缘和角点较大。
  • PFH(Point Feature Histogram):对邻域内所有点对计算 Darboux 框架下的三个角度特征,统计成直方图,描述能力强但计算量随邻域点数平方增长。
  • FPFH(Fast Point Feature Histogram):PFH 的加速版本,只计算查询点与邻域点的 SPFH,再对邻域 SPFH 加权求和,复杂度降为线性,是 PCL 中最常用的描述子之一。
  • SHOT(Signature of Histograms of OrienTations):把邻域按径向、方位角、俯仰角划分成多个空间网格,在每个网格内统计法向量方向直方图,对噪声和遮挡更稳健,适合物体识别与粗配准。
一句话记忆:法向量和曲率是“基础几何量”,PFH/FPFH/SHOT 是“把邻域几何统计成向量”的描述子,特征匹配则是“用向量距离找对应点”。

二、方法流程:特征提取与匹配的完整链路

在 PCL 中,典型流程如下:

// 1. 估计法向量
pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
ne.setInputCloud(cloud);
ne.setSearchMethod(tree);
ne.setRadiusSearch(0.03);
ne.compute(*normals);

// 2. 计算 FPFH 描述子
pcl::FPFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33> fpfh;
fpfh.setInputCloud(cloud);
fpfh.setInputNormals(normals);
fpfh.setSearchMethod(tree);
fpfh.setRadiusSearch(0.05);
fpfh.compute(*descriptors);

// 3. 特征匹配(KdTree 最近邻)
pcl::KdTreeFLANN<pcl::FPFHSignature33> match_tree;
match_tree.setInputCloud(descriptors_target);
match_tree.nearestKSearch(descriptor_source, 1, idx, dist);

流程可概括为:下采样 → 法向量估计 → 描述子计算 → 特征匹配 → 对应关系过滤 → RANSAC 粗配准 → ICP 精配准。其中下采样用于控制点数,法向量质量直接决定描述子质量,匹配阶段常用最近邻加距离阈值,过滤阶段常用互惠检查、法向量夹角约束和 RANSAC。

点云特征提取与匹配链路 原始点云 Source / Target 体素下采样 VoxelGrid 法向量 + 曲率 PCA 邻域分析 描述子计算 PFH / FPFH / SHOT 特征匹配 最近邻 + 阈值 对应关系过滤 互惠检查 / 法向夹角 RANSAC 粗配准 估计初始变换 ICP 精配准 位姿优化 描述子评价:召回率 Recall · 精确率 Precision · 匹配距离分布 · 配准误差 RMSE 评价应结合场景:噪声、分辨率、遮挡、视角变化

三、案例/场景:室内场景粗配准

假设我们用两帧 RGB-D 点云配准一个室内桌面场景。第一帧看到桌角和杯子,第二帧视角旋转约 40°。直接 ICP 可能因为初始位姿差太大而失败。此时可先对两帧点云做体素下采样(如 0.01 m),估计法向量(半径 0.03 m),计算 FPFH(半径 0.05 m),然后做最近邻匹配。匹配后通常会有大量错误对应,需要过滤:

  • 互惠检查:source 到 target 的最近邻与 target 到 source 的最近邻互为对方。
  • 距离阈值:描述子距离小于 0.3 或取距离分布的 20% 分位数。
  • 法向量一致性:对应点法向量夹角小于 30°。
  • RANSAC:随机采样 3 对对应点估计变换,统计内点,迭代 1000 次。

若场景纹理弱、平面多,FPFH 可能区分度不足,此时可改用 SHOT 或加入颜色特征。SHOT 对平面区域的描述更稳定,但计算量略大。

四、描述子评价方法与常见误区

描述子好不好,不能只看“匹配数量”,而要看匹配质量和配准效果。常用评价指标如下表:

指标 含义 适用场景
召回率 Recall 正确对应中被成功找到的比例 评估描述子是否漏掉真实匹配
精确率 Precision 找到的对应中真正正确的比例 评估错误匹配是否过多
匹配距离分布 正确匹配与错误匹配的描述子距离分布 判断阈值是否可分
配准 RMSE 配准后对应点距离均方根误差 最终评价配准精度
计算耗时 描述子提取与匹配总时间 实时性要求高的场景
常见误区:
1. 只看法向量可视化,不检查法向量方向一致性,导致描述子符号翻转。
2. 邻域半径过大,把不同结构混在一起,描述子失去区分度。
3. 匹配后不做过滤,直接送 ICP,导致配准失败。
4. 用单一指标评价描述子,忽略场景噪声、分辨率和遮挡差异。
复盘建议:在项目中固定一套评价流程——先看匹配距离分布,再看召回率和精确率,最后看配准 RMSE。若召回率低,优先增大邻域或换描述子;若精确率低,优先加强过滤和 RANSAC 内点阈值。

总结来说,法向量和曲率是局部几何的基础,PFH、FPFH、SHOT 是把邻域几何编码成向量的不同策略。FPFH 适合快速粗配准,SHOT 适合对遮挡和噪声更敏感的场景。特征匹配不是终点,而是为 RANSAC 和 ICP 提供初始对应。只有把描述子评价与配准误差结合起来,才能判断特征提取是否真正服务于三维地图构建。