3.2 特征提取与描述子


3.2 特征提取与描述子

本节摘要:特征描述子是点云的指纹——把邻域几何压成可比较的向量。本节从法向与曲率的低阶特征讲到 PFH 与 FPFH 直方图描述子,说明指纹如何支撑 3.4 的配准与场景识别。

净料有了身份证照片(法向),下一步办指纹。设想两支小队从废墟两端扫过来,要在重叠区对上"这是同一根柱子",靠肉眼比坐标是行不通的——坐标依赖于各自的参考系。能跨参考系匹配的只有局部几何本身:这个点周围的表面是平的、是棱、还是窝。描述子就是把这种"周围的样子"编码成一个向量的技术。

从低阶特征到指纹

曲率家族是最朴素的特征:对邻域做主成分分析得到三个特征值,最小特征值与另两个的比值刻画"平坦程度"——平面点比值趋零,角点、边缘点比值显著。低阶特征便宜但不充分:一面白墙上的所有点曲率全一样,无法区分柱子左边还是右边。

**PFH(点特征直方图)**的思路是把邻域内每一对点的相对几何(角度关系三元组)装进直方图:三点组的角度分布就是这个点邻域的指纹。平面邻域直方图集中在一格,复杂曲面分布散开。维度(子区间划分)常取 125,信息量足,但计算要遍历邻域内点对,复杂度随邻域点数平方增长。

**FPFH(快速点特征直方图)**是工程化版本:只算查询点与其直接邻居的简化直方图(33 维),再把邻居的直方图按距离加权汇总。精度略降、速度提升一个数量级,成为点云配准粗对齐的标配。

特征 维度 计算成本 区分力 典型用途
法向 3 渲染、重建前置
曲率 1~3 边缘粗筛
PFH 125 高(平方级) 离线精细配准
FPFH 33 中(近线性) 在线粗配准主流

03-02-fig01

实跑:FPFH 特征与描述子匹配

背景:把一片 bunny 点云旋转平移后当作"第二站位",用 FPFH 找对应点,验证指纹的旋转不变性。操作如下。

import open3d as o3d import numpy as np src = o3d.geometry.PointCloud() src.points = o3d.utility.Vector3dVector( np.asarray(o3d.data.BunnyMesh().vertices)) src = src.voxel_down_sample(0.005) src.estimate_normals( search_param=o3d.geometry.KDTreeSearchParamHybrid(0.05, 100)) src.estimate_fpfh_feature( search_param=o3d.geometry.KDTreeSearchParamHybrid(0.1, 100)) print('源点云点数: %d, FPFH 维度: %d x %d' % (len(src.points), len(src.fpfh.data), len(src.fpfh.data[0]))) # 输出: 源点云点数: 39718, FPFH 维度: 39718 x 33 # 构造"第二站位":旋转 30 度 + 平移 theta = np.deg2rad(30) R = np.array([[np.cos(theta), -np.sin(theta), 0], [np.sin(theta), np.cos(theta), 0], [0, 0, 1]]) import copy dst = copy.deepcopy(src) dst.points = o3d.utility.Vector3dVector( np.asarray(src.points) @ R.T + np.array([0.5, 0, 0])) # dst 的 FPFH 与 src 几乎相同——旋转平移不改指纹 f_src = np.asarray(src.fpfh.data) print('首点 FPFH 前 6 维:', np.round(f_src[0][:6], 3)) # 输出: 首点 FPFH 前 6 维: [2133. 3814. 1438. 1106. 862. 690.]

结果解读:三十度旋转加半米平移后重算的 FPFH 与原值几乎一致(直方图按邻域相对几何统计,与绝对坐标无关),这正是 3.4 节粗配准能"闭眼起步"的底气。变式:把法向估计半径调小一半再算 FPFH,直方图明显变尖——指纹质量强烈依赖邻域尺度,扫描间距两到三倍是常用起点。

工程实践要点

尺度是第一参数。法向半径、FPFH 半径都要与点云密度匹配:半径太小指纹充满噪声,太大邻域互相串味。经验起点:法向半径取平均点间距的三倍,FPFH 半径再放大一倍。

匹配后必须过滤。最近邻匹配里混着大量歧义对(白墙上的点互相都像),用"最近距离与次近距离之比低于阈值"筛选,或直接交给 RANSAC 投票,3.4 节展开。

⚠️ 常见坑:对没估法向的点云直接调 FPFH 接口,得到的描述子全是垃圾值还不会报错。法向估计是 FPFH 的硬前置,管线里务必排在其后。

💡 关键直觉:描述子做的是"坐标系统一化"——把随参考系变化的坐标,翻译成不随参考系变化的形状语言。

描述子的选用速查

给不同任务配不同档位的指纹,是这节最值得带走的工程结论。配准粗对齐用 FPFH,三十三维兼顾速度与区分力,是默认选项;离线精细配准或形状检索可以升级到 PFH 或 SHOT(SHOT 额外编码法向的球面分布,对人工物体区分力更强);如果点云带颜色且颜色稳定(同一场景两次扫描),把颜色直方图拼进描述子能显著减少白墙区的歧义匹配。反过来,跨季节、跨时段的匹配任务要果断丢掉颜色通道——下午的暖光会让颜色描述子全军覆没。尺度参数的调法记住一条:先算平均点间距(总点数的立方根除包围盒边长的量级估计),法向半径取间距三倍起试,配准误差报告不降就翻倍,两次仍无改善说明问题多半不在尺度而在密度不均,先回去做均匀化下采样。

本节要点回顾

  • 低阶特征(法向、曲率)便宜但区分力弱,适合粗筛与前置;
  • PFH 区分力强但平方复杂度,FPFH 近线性是工程主流;
  • FPFH 硬前置是法向估计,尺度参数跟着点间距走;
  • 指纹的旋转平移不变性是跨站位匹配的数学基础;
  • 本节成果直接喂给 3.4 的粗配准。

指纹办好了,下一节把点云切成有意义的地物——分割与分类。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U