下面把点云特征提取讲成一套**从基础几何 → 局部统计 → 描述子 → 应用(边缘点提取)**的完整体系,覆盖面试常问的原理、公式直觉、参数选择与工程用法。


一、特征提取总体框架

点云特征本质是: 在局部邻域内刻画点的几何结构(平面 / 边缘 / 曲面)

典型流程:

  1. 邻域搜索(KD-Tree,kNN或半径搜索)
  2. 计算局部几何(协方差矩阵)
  3. 特征计算(法向、曲率)
  4. 构建描述子(FPFH / SHOT)

二、法向量估计(Normal Estimation)

1. 原理(核心)

对点 ( p ) 的邻域点做主成分分析(PCA)

  1. 计算邻域点的协方差矩阵
  2. 求特征值与特征向量
  3. 最小特征值对应的特征向量 = 法向量

2. 直观理解

  • 如果点在平面上:
    • 两个方向变化大(平面内)
    • 一个方向变化小(法向方向)

3. 数学形式(理解即可)

协方差矩阵:

$$ [ C = \frac{1}{k} \sum (p_i - \bar{p})(p_i - \bar{p})^T ] $$

特征值排序:

$$ [ \lambda_0 \le \lambda_1 \le \lambda_2 ] $$

则:

  • 法向量 = 对应 (\lambda_0) 的特征向量

4. 关键问题:法向量方向不唯一

  • 法向量有正负(n 或 -n)
  • 解决:
    • 朝向传感器
    • 或统一方向传播

5. 参数

  • 邻域大小(k 或 radius)

影响:

  • 小邻域 → 噪声大
  • 大邻域 → 细节丢失

6. 工程用途

  • 区域生长
  • 平面分割
  • 点云配准(Point-to-Plane ICP)

三、曲率计算(Curvature)

1. 原理

基于PCA特征值定义:

曲率:

$$ [ \sigma = \frac{\lambda_0}{\lambda_0 + \lambda_1 + \lambda_2} ] $$

2. 直观理解

  • 平面:
    • λ0 很小 → 曲率接近 0
  • 边缘:
    • λ0 较大 → 曲率大
  • 噪声点:
    • λ0 ≈ λ1 ≈ λ2 → 曲率大

3. 用途

  • 边缘点检测
  • 特征点筛选(LOAM)
  • 表面分析

四、FPFH描述子(Fast Point Feature Histogram)

1. 背景

  • FPFH 是 PFH 的加速版本
  • 用于描述点的局部几何结构

2. 原理

在邻域内构造点对之间的几何关系:

计算三个角度特征:

  • α(法向差)
  • φ(方向关系)
  • θ(夹角)

构建直方图(Histogram)


3. 特点

  • 维度:33维
  • 对旋转不敏感
  • 计算较快

4. 优点

  • 区分能力强
  • 适用于点云匹配

5. 缺点

  • 对噪声敏感
  • 依赖法向量质量

6. 应用

  • 点云配准(粗配准)
  • 回环检测
  • 特征匹配

五、SHOT描述子(Signature of Histograms of Orientations)

1. 原理

结合:

  • 空间划分(3D网格)
  • 法向方向统计

步骤:

  1. 建立局部参考系(LRF)
  2. 划分空间为多个区域
  3. 统计法向分布

2. 特点

  • 高维(通常352维)
  • 更稳定
  • 抗噪性更强

3. 优点

  • 描述能力强
  • 对复杂结构更鲁棒

4. 缺点

  • 计算量大
  • 实时性较差

5. FPFH vs SHOT 对比

特征FPFHSHOT
维度33352
速度
精度
抗噪性一般

六、如何提取点云中的边缘点?(重点)

这是面试高频问题。


方法一:基于曲率(最常用)

原理

  • 边缘点 → 曲率大

步骤

  1. 计算法向量
  2. 计算曲率
  3. 设定阈值:
    • σ > threshold → 边缘点

优点

  • 简单高效
  • 易实现

缺点

  • 对噪声敏感
  • 依赖邻域大小

方法二:基于法向变化

原理

  • 边缘处法向变化剧烈

判断

  • 邻域法向夹角 > 阈值

方法三:基于深度突变(Range Image)

(LOAM核心方法)

原理

  • 将点云转为range image
  • 比较相邻点距离差

判断

  • 若深度变化大 → 边缘

方法四:基于RANSAC(结构边缘)

  • 拟合多个平面
  • 平面交线为边缘

七、LOAM中的边缘提取(面试高分点)

LOAM方法:

  1. 按 scan line(ring)处理
  2. 计算每个点的“曲率”(类似一阶差分)
  3. 排序:
    • 选最大的一部分 → 边缘点
    • 选最小的一部分 → 平面点

八、工程经验总结(非常重要)

邻域选择

  • k = 10 ~ 50(常用)
  • 或 radius = 0.1 ~ 0.5 m

边缘提取建议

  • 先去噪(SOR)
  • 再计算法向
  • 再提取曲率

实际Pipeline

  1. KD-Tree建索引
  2. 法向量估计
  3. 曲率计算
  4. 特征点筛选(边缘 / 平面)
  5. 描述子计算(FPFH/SHOT)

九、面试标准回答(建议背)

如果被问:

“如何提取点云中的边缘点?”

可以这样回答:

点云中的边缘点通常通过局部几何特征来提取,常见方法是基于曲率或法向变化。 一般流程是先计算点的法向量,再通过PCA得到曲率,曲率较大的点通常位于边缘区域。此外,也可以通过比较邻域点的法向夹角或深度变化来检测边缘。在实际工程中,例如LOAM算法,会通过计算每个点的曲率并排序,选取曲率最大的点作为边缘特征点。


十、结合你项目的加分表达

你可以补一句:

在我的项目中,通常通过法向量和曲率来提取关键特征点,用于后续的点云配准或分割,从而减少计算量并提高匹配稳定性。


如果你想继续深入,我可以帮你讲:

  • ICP中为什么用“法向量”(Point-to-Plane本质)
  • FPFH如何用于初始位姿估计(面试高频)
  • LOAM中特征点筛选的完整代码逻辑(非常加分)