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

Open3D 计算点云FPFH特征

目录

一、概述

1.1法线估计

1.2SPFH(Simplified Point Feature Histograms)计算

1.3FPFH计算

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果

3.1原始点云

3.2计算数据


一、概述

        FPFH(Fast Point Feature Histogram)特征是一种用于描述点云局部几何特征的描述子。它由Rusu等人在2009年提出,旨在高效地描述三维点云的局部几何特征,并用于点云配准、分类和分割等任务。

        FPFH特征的计算过程分为三个主要步骤:法线估计、SPFH计算和FPFH计算。

1.1法线估计

        在计算FPFH特征之前,首先需要估计点云中每个点的法线。这通常通过邻域搜索和PCA(主成分分析)方法来完成。

步骤:

  1. 对于点云中的每个点,确定一个邻域(例如,通过k近邻搜索或半径搜索)。
  2. 使用PCA方法计算邻域点的协方差矩阵,并获取其特征向量。特征值最小的特征向量对应的方向即为法线方向。

1.2SPFH(Simplified Point Feature Histograms)计算

        SPFH特征是对点云中每个点及其邻域点的几何关系的描述,具体通过以下三个角度计算:

        对于每个点 𝑝,通过计算它与每个邻域点 𝑞 的上述三个角度,可以构建一个三维的特征直方图,这就是SPFH特征。

1.3FPFH计算

        FPFH特征通过组合点的SPFH特征及其邻域点的SPFH特征来进一步描述点云的局部几何特征。具体步骤如下:

  1. 对于点云中的每个点 𝑝,计算其SPFH特征。
  2. 对于点云中的每个点 𝑝,收集其邻域点的SPFH特征。
  3. 通过将点 𝑝 的SPFH特征与其邻域点的SPFH特征加权求和,计算点 𝑝 的FPFH特征。

二、代码实现

2.1关键函数

def compute_fpfh_feature(input, search_param): input:输入的点云
search_param:KD树的近邻搜索方式
Returns:33xN的数组,33表示特征描述子,N用来表示计算FPFH的点的个数

2.2完整代码

import open3d as o3d# -------------传入点云数据,计算FPFH------------
def fpfh_compute(pcd):radius_normal = 0.01  # kdtree参数,用于估计法线的半径,print(":: Estimate normal with search radius %.3f." % radius_normal)pcd.estimate_normals(o3d.geometry.KDTreeSearchParamHybrid(radius=radius_normal, max_nn=30))# 估计法线的1个参数,使用混合型的kdtree,半径内取最多30个邻居radius_feature = 0.02  # kdtree参数,用于估计FPFH特征的半径print(":: Compute FPFH feature with search radius %.3f." % radius_feature)pcd_fpfh = o3d.pipelines.registration.compute_fpfh_feature(pcd,o3d.geometry.KDTreeSearchParamHybrid(radius=radius_feature,max_nn=100))  # 计算FPFH特征,搜索方法kdtreereturn pcd_fpfh  # 返回FPFH特征# ----------------读取点云数据--------------
source = o3d.io.read_point_cloud("hand.pcd")
# -----------------计算的FPFH---------------
source_fpfh = fpfh_compute(source)
print(source_fpfh)

三、实现效果

3.1原始点云

3.2计算数据

Estimate normal with search radius 0.010.
:: Compute FPFH feature with search radius 0.020.
Feature class with dimension = 33 and num = 327323
Access its data via data member.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Mongodb索引使用限制
  • 【spark】Exception in thread “main“ ExitCodeException exitCode=-1073741701
  • 记录一次微信小程序申诉定位权限过程
  • Spring Boot 事件监听机制实战【自定义 Spring Boot 事件监听】
  • MACOS查看硬盘读写量
  • 【JavaWeb程序设计】Servlet(二)
  • linux 内核 红黑树接口说明
  • 股票分析系统设计方案大纲与细节
  • 基于对称点模式SDP(SDP, symmetrized dot pattern)轴承故障诊断方法(matlab和python实现开源)
  • 高并发内存池联调问题
  • 链表 OJ(一)
  • LIO-SAM编译ubuntu20.04 Noetic
  • Python地图可视化三大秘密武器
  • 数智驱动丨zAIoT 连续落地军工、科研院所和机械制造场景,推动数智化转型升级...
  • base SAS programming学习笔记10(combine data)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • angular2 简述
  • DataBase in Android
  • JavaScript 一些 DOM 的知识点
  • JS笔记四:作用域、变量(函数)提升
  • leetcode386. Lexicographical Numbers
  • mysql外键的使用
  • React的组件模式
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 半理解系列--Promise的进化史
  • 大整数乘法-表格法
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于使用markdown的方法(引自CSDN教程)
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用 QuickBI 搭建酷炫可视化分析
  • 栈实现走出迷宫(C++)
  • ###C语言程序设计-----C语言学习(3)#
  • #13 yum、编译安装与sed命令的使用
  • #QT(智能家居界面-界面切换)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (03)光刻——半导体电路的绘制
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (八十八)VFL语言初步 - 实现布局
  • (笔试题)合法字符串
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (七)Flink Watermark
  • (转)http协议
  • .net Application的目录
  • .NET Core 项目指定SDK版本
  • .NET Project Open Day(2011.11.13)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET单元测试
  • .net和php怎么连接,php和apache之间如何连接
  • .net实现客户区延伸至至非客户区
  • .net网站发布-允许更新此预编译站点
  • @angular/cli项目构建--Dynamic.Form