当前位置: 首页 > news >正文

ICP之点云特征计算

这次我们来聊一下点云的特征计算方法, 主流的有两类
1:基于直方图的特征计算
2:基于签名的特征计算
这次我将介绍基于直方图的方式。

基于直方图的特征方法中,PFH(Point Feature Histograms)和FPFH(Fast Point Feature Histograms)是两种常用的局部特征描述符。它们主要用于点云配准任务中,通过计算点云中每个点的局部特征来进行匹配。以下是对这两种方法的分析:

1. PFH(Point Feature Histograms)

计算方法

PFH是一种局部特征描述符,主要通过邻域点的法向量关系来描述点的局部几何信息。计算过程分为以下几个步骤:

  1. 邻域搜索:为每个关键点确定一个邻域范围,通常是半径邻域或K近邻。
    假设领域有5个点

  2. 法向量计算:计算关键点和邻域点的法向量。

  3. 特征对计算:对于关键点的邻域内的每一对点 ( p i , p j ) (p_i, p_j) (pi,pj),通过法向量之间的夹角和距离,计算出四个特征参数 ( ( α , ϕ , θ , d ) (\alpha, \phi, \theta, d) (α,ϕ,θ,d)),分别表示点与法向量的角度关系和距离。
    在这里插入图片描述
    先利用法向量计算中间变量
    **加粗样式**
    利用中间变量计算特征参数

  4. 直方图构建:将所有特征对的参数值构建直方图,这个直方图就是关键点的PFH特征。

所构建的直方图特征如下, 只考虑 ( α , ϕ , θ ) (\alpha, \phi, \theta) (α,ϕ,θ)
在这里插入图片描述

优缺点
  • 优点:PFH能较完整地描述局部几何信息,对复杂表面适应性强。
  • 缺点:计算代价高,计算每个点的PFH需要考虑所有邻域点对,导致复杂度为 O ( n 2 ) O(n^2) O(n2)
输入和输出
  • 输入:关键点、邻域点、以及法向量。
  • 输出:关键点的特征直方图,描述了其局部表面的几何分布。

2. FPFH(Fast Point Feature Histograms)

FPFH是PFH的加速版本,通过减少特征对计算的复杂度来提升性能。它分两步进行特征计算,具体如下:

计算方法
  1. SPFH计算:首先为每个点计算一个简化的特征直方图(SPFH),其中只考虑关键点与其邻域点的特征对,而不考虑邻域点之间的特征对关系。每个关键点的SPFH特征描述了该点与其邻域点的关系。
    只考虑查询点和领域点,以及领域点和其领域点的特征SPFH
    在这里插入图片描述

  2. FPFH加权计算:在得到所有关键点的SPFH后,通过加权方式将邻域点的SPFH信息累加到关键点,形成最终的FPFH特征。这样可以在不增加大量计算量的情况下,提高特征的描述力。
    在这里插入图片描述

优缺点
  • 优点:相比PFH,FPFH计算速度更快,复杂度降为 O ( n ) O(n) O(n),且特征信息较为全面。
  • 缺点:FPFH虽然在计算上优化了,但特征描述的完整性略低于PFH,因此在某些精细场景中的匹配效果可能不如PFH。
输入和输出
  • 输入:关键点、邻域点、法向量。
  • 输出:FPFH特征直方图,用于描述关键点周围的局部几何信息。

总结对比

特征计算过程复杂度适用场景优点缺点
PFH邻域内所有点对的特征计算 O ( n 2 ) O(n^2) O(n2)高精度场景特征描述完整计算量大
FPFH邻域内单点对简化加权计算 O ( n ) O(n) O(n)实时场景、速度优先计算速度快,特征丰富描述力稍弱于PFH

在实际应用中,如果计算性能是重点,可以优先选择FPFH;而在对精度要求较高、且计算资源充足的场景,PFH可能会更适用。


http://www.mrgr.cn/news/59964.html

相关文章:

  • C++STL之stack
  • Java拦截器应用
  • MyBatis常见面试题总结
  • Unity中使用UnityEvent遇到Bug
  • Electron 离线环境打包解决方案(electron-forge)
  • ubuntu内核更新导致显卡驱动掉的解决办法
  • 只需要写几行 SQL,这个网站就搭好了?
  • shell脚本每日一练4
  • GitHub 上传项目保姆级教程
  • 【C++单调栈 贡献法】907. 子数组的最小值之和|1975
  • python基于django线上视频学习系统设计与实现_j0189d4x
  • 【Linux系统编程】——Linux入门指南:从零开始掌握操作系统的核心(指令篇)
  • 基于SpringBoot的中药材进存销管理系统设计与实现
  • 在浏览器中运行 Puppeteer:解锁新能力
  • React 中组件通信的几种主要方式
  • Python实现摇号系统
  • 还没想好说什么
  • Linux:指令再认识
  • 【在WindoWs 10 cmd查询管理目录下所有文件及其相对位置】
  • C语言基础题(大合集2)
  • 重学SpringBoot3-Spring WebFlux之SSE服务器发送事件
  • Rust中常用的命令工具
  • 存储期类别
  • Autosar 启动过程-基于ETAS工具
  • StringBuilder——练习
  • Java | ReentrantLock 锁和 synchronized 锁的区别和共同特点是什么?