4. 点云特征提取
点云特征提取是LiDAR感知与SLAM系统中的核心基础环节。原始点云数据通常包含数十万乃至数百万个三维点,直接进行配准、分割或目标识别不仅计算开销巨大,而且对噪声和密度变化极为敏感。特征提取的本质是将原始几何信息压缩为具有判别力、鲁棒性和紧凑性的描述子,使得后续算法能够在更高层次上理解三维结构。本章将系统讲解法向量与曲率估计、FPFH与SHOT局部特征描述子,以及关键点检测方法,并给出工程实践中的选型建议与常见误区。
上图展示了本章的知识体系:原始点云经过法向量与曲率估计、FPFH/SHOT描述子计算以及关键点检测三个分支,最终输出可供配准、分割、识别和SLAM回环检测使用的特征集合。下面逐一展开每个模块的原理与工程实现。
4.1 法向量与曲率估计
4.1.1 核心原理
法向量是描述点云局部几何属性的基础量,它表示该点所在局部表面的朝向。曲率则刻画了局部表面的弯曲程度。两者共同构成了点云局部几何特征的最基本表达。工程中最常用的方法是主成分分析(PCA),其基本假设是:在点p的邻域内,局部表面可以近似为一个平面,该平面的法向量即为邻域点集协方差矩阵最小特征值对应的特征向量。
具体计算流程如下:对于点p,首先通过k近邻搜索或半径搜索获取邻域点集{p₁, p₂, …, pₖ},计算其质心:
p̄ = (1/k) * Σ pᵢ
然后构建3×3协方差矩阵:
C = (1/k) * Σ (pᵢ - p̄)(pᵢ - p̄)ᵀ
对C进行特征值分解,得到特征值λ₁ ≥ λ₂ ≥ λ₃及对应的特征向量v₁, v₂, v₃。最小特征值λ₃对应的特征向量v₃即为法向量方向。曲率σ定义为:
σ = λ₃ / (λ₁ + λ₂ + λ₃)
曲率值越接近0,表示局部越平坦;越接近1/3,表示局部越尖锐(如边缘或角点)。
4.1.2 工程实现与注意事项
在PCL库中,法向量估计通常使用NormalEstimation类,核心参数包括搜索半径或k值、以及视点方向。视点方向用于法向量朝向一致性调整——默认情况下,法向量方向是歧义的(±n等价),需要根据传感器视点位置将法向量统一指向视点一侧,否则后续特征计算会出错。
4.1.3 案例拆解:地面分割中的法向量应用
在自动驾驶场景中,地面分割是预处理的关键步骤。某测试车辆搭载64线LiDAR,采集一帧约12万点。初始目标是将地面点与非地面点分离。直接使用高度阈值在坡道上会失效,而结合法向量可以稳健地识别地面:地面点的法向量应近似垂直于Z轴(即法向量Z分量接近±1),且曲率极小。
实际操作中,设置搜索半径r=0.3m,计算每个点的法向量和曲率。筛选条件为:法向量Z分量值大于0.92,且曲率小于0.05。在包含8°坡道的场景中,该方法的误分割率仅为2.3%,而单纯高度阈值法的误分割率高达15.7%。代价是法向量计算耗时约180ms(单线程),通过VoxelGrid降采样至4万点后耗时降至60ms,满足10Hz处理需求。
4.2 FPFH与SHOT局部特征描述子
4.2.1 FPFH:快速点特征直方图
FPFH(Fast Point Feature Histogram)是对PFH(Point Feature Histogram)的加速改进。PFH通过计算邻域内所有点对之间的角度关系构建高维直方图,计算复杂度为O(nk²)。FPFH将其简化为两步:首先计算每个点的简化特征直方图SPFH(Simplified Point Feature Histogram),然后通过邻域加权融合得到最终描述子。
对于点p及其邻域点pᵢ,定义三个角度特征:
α = v · nᵢ
φ = u · (pᵢ - p) / ||pᵢ - p||
θ = arctan(w · nᵢ, u · nᵢ)
其中u, v, w是点p处定义的局部坐标系(u = n, v = (pᵢ-p)×u / ||...||, w = u×v)。每个角度特征划分为11个区间,SPFH为33维。FPFH最终描述子为:
FPFH(p) = SPFH(p) + (1/k) * Σ (1/ωᵢ) * SPFH(pᵢ)
其中ωᵢ为点p与pᵢ之间的距离权重。FPFH维度为33,计算效率高,适合实时配准场景。
4.2.2 SHOT:方向直方图签名
SHOT(Signature of Histograms of OrienTations)描述子结合了局部参考系(LRF)和拓扑直方图。首先在关键点邻域内建立独特的局部参考系(通过特征值分解),然后将邻域划分为2(半径方向)× 8(方位角)× 2(俯仰角)= 32个子空间,在每个子空间内统计法向量与参考系Z轴的夹角余弦值直方图(每个直方图11维),最终得到32×11=352维描述子。
SHOT的优点是判别力强,对噪声和密度变化鲁棒,但计算量较大。在点云配准中,SHOT通常配合ISS关键点使用,以获得高精度的对应点匹配。
| 属性 | FPFH | SHOT |
|---|---|---|
| 维度 | 33 | 352 |
| 计算复杂度 | 低(O(nk)) | 高(O(nk) + LRF构建) |
| 判别力 | 中等 | 高 |
| 对密度变化鲁棒性 | 中等 | 高 |
| 典型应用 | 实时配准、粗匹配 | 精细配准、目标识别 |
| 内存占用 | 低 | 较高 |
4.2.3 实战场景:LiDAR里程计中的特征选择
在LOAM系列算法中,通常不使用FPFH或SHOT,而是基于曲率提取边缘点和平面点。但在基于特征的SLAM系统中(如基于ICP的变种),FPFH常用于粗配准阶段。某室内移动机器人采用RGB-D相机,帧率30Hz,点云约30万点。在粗配准阶段,先提取ISS关键点(约500个),计算FPFH描述子,使用RANSAC进行对应点估计,获得初始变换矩阵,再用ICP精配准。整个流程耗时约45ms,匹配精度(ATE)达到1.2cm。若改用SHOT,精度提升至0.8cm,但耗时增至120ms,无法满足实时性要求。因此,在算力受限的嵌入式平台上,FPFH是更务实的选择。
4.3 关键点检测方法
4.3.1 ISS关键点
ISS(Intrinsic Shape Signatures)算法基于特征值分解检测显著点。对于每个点p,在邻域内计算协方差矩阵的特征值λ₁ ≥ λ₂ ≥ λ₃,然后判断该点是否为关键点:
λ₂ / λ₁ < γ₁ (避免各向同性点)
λ₃ / λ₂ < γ₂ (避免平面点)
典型阈值γ₁=0.975,γ₂=0.975。ISS关键点倾向于检测到几何结构变化剧烈的区域,如角点、边缘点,且分布均匀。
4.3.2 Harris3D与SIFT3D
Harris3D将2D Harris角点检测扩展到3D,通过计算点云的法向量分布构建响应函数。SIFT3D则通过尺度空间极值检测,能够适应不同尺度的几何特征。但SIFT3D计算量较大,在实时系统中较少使用。
4.3.3 案例拆解:关键点检测在回环检测中的应用
在SLAM回环检测中,关键点检测的质量直接影响回环识别的准确性。某园区自动驾驶项目,累计行驶轨迹2.3km,需要检测回环以消除累积漂移。系统采用ISS关键点+SHOT描述子,对每帧点云提取约300个关键点,构建描述子后使用KD-tree进行匹配。在回环候选帧中,通过几何一致性检验(RANSAC)剔除误匹配。实际运行中,系统成功检测出3处回环,位置误差从1.8m降至0.3m。关键参数:ISS邻域半径0.4m,γ₁=γ₂=0.975,SHOT搜索半径0.8m。
值得注意的是,关键点数量并非越多越好。过多的关键点会增加匹配计算量并引入噪声;过少则可能漏检回环。实践中,通过调整ISS的邻域半径和阈值,将关键点数量控制在每帧200~500个范围内,取得了最佳平衡。
4.4 常见误区与总结复盘
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 未统一法向量方向 | 特征描述子计算错误,匹配失败 | 根据视点方向统一法向量朝向 |
| 邻域半径固定不变 | 密度变化区域特征质量下降 | 根据点云密度自适应调整半径 |
| 直接在全点云上计算FPFH | 计算量巨大,实时性差 | 先提取关键点,再计算描述子 |
| 忽略曲率阈值 | 平面点被误认为关键点 | 结合曲率过滤平坦区域 |
| SHOT用于所有场景 | 算力消耗大,实时性不足 | 根据任务需求选择FPFH或SHOT |
总结本章要点:法向量与曲率是点云局部特征的基础,PCA方法是工程首选;FPFH与SHOT各有优劣,需根据实时性要求和精度需求权衡;关键点检测是特征提取的“前哨”,ISS在LiDAR场景中表现稳健。在实际项目中,建议先对点云进行降采样和去噪,再提取关键点,最后计算描述子,形成完整的特征提取流水线。特征提取的质量直接决定了上层配准、分割和SLAM系统的性能上限,值得投入时间精心调参。