【PCL自学:Feature5】视点特征直方图VFH概念及使用 (持续更新)

2023-05-16

一、视点特征直方图(VFH)原理

  这篇博文描述了视点特征直方图(Viewpoint Feature Histogram[VFH])描述符,在一些其他文章也称为视角特征直方图,这是一种用于聚类识别和6DOF姿态估计问题(六自由度姿态估计)的点聚类的描述符。

1.理论基础:
  视点特征直方图(或VFH)起源于FPFH描述符(参见快速点特征直方图(FPFH)描述符)。FPFH有很好的速度和辨别能力,在此基础上添加视点方差,同时保持尺度不变性。
  VFH对目标识别和位姿识别问题的主要贡献是将FPFH扩展到整个目标集群(如下图所示),并计算每个点的视点方向和法线估计值之间的额外统计数据。为了做到这一点,VFH使用了在FPFH中直接混合视点方向到相对法向角计算的关键思想。
在这里插入图片描述
  VFH第一个特征分量通过收集视点方向与每个法线形成的角度的直方图来计算视点分量。注意此处不是指每条法线的角度,因为无法保持尺度不变性,而是指中心视点方向到每条法线的角度。第二个分量包括测量快速点特征直方图(FPFH)描述符中描述的相对平移、倾斜和偏航角,还有中心点的视点方向和表面上的每个法线之间的角度,如下图。
在这里插入图片描述
  因此,这个新的组合特征被称为视点特征直方图(VFH)。下图展示了这个想法,新特性由两特征部分组成:

1.视点方向特征部分

2.由扩展的FPFH组成的表面形状特征部分。

在这里插入图片描述

二、视点特征直方图(VFH)示例代码分析

  VFH在PCL中已经被实现了,处于pcl::feature类中。
  默认的VFH实现为三个扩展的FPFH值,每个值使用45个细分单元(binning subdivisions),为每个点与质心之间的距离使用另外45个细分单元,为视点组件使用128个细分单元,因此VFH将产生一个308字节的浮点值数组。这些存储在pcl::VFHSignature308点类型中。
  VFH和PFH或FPFH描述符之间的主要区别是,对于给定的点云数据集,只估计一个VFH描述符,而估计的PFH/FPFH描述符将与点云中的点数量相同。
  下面的代码片段将为输入数据集中的所有点估计一组VFH特性。

#include <pcl/point_types.h>
#include <pcl/features/vfh.h>
 
 {
   pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
   pcl::PointCloud<pcl::Normal>::Ptr normals (new pcl::PointCloud<pcl::Normal> ());
 
  /*
		 此处通过读取PCD或者创造一组有法向特征的点云。并使上面的指针指向点云,不再赘述
 	*/

  // 创造VFH估计类,并且将点云数据和法向输出传入。
  pcl::VFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::VFHSignature308> vfh;
  vfh.setInputCloud (cloud);
  vfh.setInputNormals (normals);
  // 当点云格式是PointNormal时,也可选择使用语句vfh.setInputNormals (cloud);

  // 创建空KD树,并将VFH类设置成树状结构便于快速搜索
  // Its content will be filled inside the object, based on the given input dataset (as no other search surface is given).
  pcl::search::KdTree<pcl::PointXYZ>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZ> ());
  vfh.setSearchMethod (tree);

  // 输出数据的指针
  pcl::PointCloud<pcl::VFHSignature308>::Ptr vfhs (new pcl::PointCloud<pcl::VFHSignature308> ());

  // 计算VFH特征
  vfh.compute (*vfhs);

  // 如上所述此时vfhs->size()应该为1,这是与PFH和FPFH的区别
}

  当需要查看VFH直方图时,可以使用libpcl_visualization中包含的一个特殊PCLHistogramVisualization类,pcl_viewer也使用这个类来自动显示VFH描述符作为浮点值的直方图。
在这里插入图片描述
总结:
本篇文章介绍了VFH的大致原理以及与PFH和FPFH的具体区别,并介绍了使用PCL进行VFH特征计算的方法。下一篇文章将介绍NARF特征。


【博主简介】
  斯坦福的兔子,男,天津大学机械工程工学硕士。毕业至今从事光学三维成像及点云处理相关工作。因工作中使用的三维处理库为公司内部库,不具有普遍适用性,遂自学开源PCL库及其相关数学知识以备使用。谨此将自学过程与君共享。
博主才疏学浅,尚不具有指导能力,如有问题还请各位在评论处留言供大家共同讨论。
若前辈们有工作机会介绍欢迎私信。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【PCL自学:Feature5】视点特征直方图VFH概念及使用 (持续更新) 的相关文章

随机推荐

  • ArrayList源码分析

    ArrayList源码分析 注意 本笔记分析对象为 Java8 版本 随版本不同 源码会发生变化 1 ArrayList类图与简介 ArrayList是一个 非线程安全 基于数组实现的一个动态数组 可以看到 它的顶层接口是 Collecti
  • Vector源码分析

    Vector源码分析 1 Vector基本介绍与类图 Vector 类实现了一个动态数组 和 ArrayList 很相似 但是两者是不同的 Vector 是同步访问的 Vector 包含了许多传统的方法 这些方法不属于集合框架 Vector
  • LinkedList源码分析

    LinkedList源码分析 注意 本笔记分析对象为 Java8 版本 随版本不同 源码会发生变化 基本介绍与类图 LinkedList 同时实现了 List 接口和 Deque 对口 也就是收它既可以看作一个顺序容器 又可以看作一个队列
  • 【网管日记】Linux防火墙操作

    网管日记 Linux防火墙操作 记录一下常用的Linux防火墙操作 xff1a 查看防火墙状态 systemctl status firewalld 或 firewall cmd state暂时关闭防火墙 systemctl stop fi
  • (毕业设计资料)基于51单片机的智能窗控制系统设计

    实现参考功能 1 可实时显示年月日 时分秒 光照强度和控制模式 xff1b 2 可通过手动控制窗帘的开启和关闭 xff1b 3 可通过设置开启和关闭时间来控制窗帘 xff1b 4 可通过检测光照强度的亮暗来控制窗帘 xff1b 5 使用步进
  • 网络操作系统 第十二章 FTP服务器的安装与配置

    习题 1 简述FTP的连接模式 FTP的连接模式有PORT和PASV两种 xff0c 其中PORT模式是主动模式 xff0c PASV是被动模式 xff0c 这里所说的主动和被动都是相对于服务器而言的 如果是主动模式 xff0c 数据端口为
  • 【网管日记】MySQL主从复制

    MySQL主从复制 基本介绍 MySQL 主从复制是一个异步的复制过程 xff0c 底层是基于 Mysql 数据库自带的 二进制日志 功能 一台或多台 MySQL 数据库 xff08 slave xff0c 即 从库 xff09 从另一台
  • 【网管日记】Nginx基本介绍、安装与使用

    Nginx基本使用 基本介绍 Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件 xff08 IMAP POP3 xff09 代理服务器 其特点是 占用内存少 xff0c 并发能力强 xff0c 事实上nginx的并发能力在同类
  • 【网管日记】Nginx报错踩坑记录

    网管日记 Nginx报错踩坑记录 1 防火墙没关闭 自启 error 21113 0 21 connect failed 113 No route to host while connecting to upstream 解决方法 xff1
  • 【数据结构与算法】Manacher算法

    Manacher算法 https github com SongJianHIT DataStructurs Algorithm tree main src algorithms manacher 基本介绍 Manacher 算法常用于 求一
  • 【数据结构与算法】DP路径问题

    问题 xff1a 最小路径和 给定一个包含非负整数的 m x n 网格 grid xff0c 请找出一条从左上角到右下角的路径 xff0c 使得路径上的数字总和为最小 说明 xff1a 每次只能向下或者向右移动一步 示例 1 xff1a 输
  • 【Java开发】Dependency ‘XXX‘ not found

    Java开发 Dependency XXX not found 在配置 pom 文件时 xff0c 遇到 Dependency 39 com google guava guava 30 0 jre 39 not found 方法一 xff1
  • 【Mysql】日期函数总结

    Mysql 日期函数总结 1 获取日期时间函数 1 1 获取当前日期时间 span class token keyword SELECT span span class token function NOW span span class
  • 【Java开发笔记】线程池

    Java开发笔记 线程池 线程池 ThreadPoolExecutor 的七大核心参数 xff1a 核心线程数 corePoolSize最大线程数 maxinumPoolSize超过核心线程数的闲余线程存活时间 keepAliveTime存
  • 【Java开发笔记】分库分表

    Java开发笔记 分库分表 1 分库分表基本概述 为什么要分库分表 xff1f 性能角度 分库分表就是为了解决由于数据量多大而导致数据库性能下降的问题 xff1a 原来独立的数据库拆分成若干数据库组成将原来的大表 xff08 存储近千万数据
  • 【网关日记】配置阿里云容器镜像加速

    运行 xff1a sudo mkdir p etc docker sudo tee etc docker daemon json lt lt 39 EOF 39 34 registry mirrors 34 34 https qbd2mty
  • 【毕业设计】基于51单片机的智能窗帘设计(原理图+原理图+仿真+论文)

    按键1 xff1a 加 xff08 手动开启窗帘 按键2 xff1a 减 xff08 手动关闭窗帘 xff09 按键3 xff1a 进入定时模式开启时间和光控阈值数值大小的开启 按键4 xff1a 进入当前时间的设置 xff08 年 月 日
  • 【MySQL】基本架构与执行过程

    MySQL 基本架构与执行过程 1 日志 MySQL 是通过文件系统对数据索引后进行存储的 xff0c MySQL 从物理结构上可以分为 日志文件 和 数据及索引文件 MySQL 在 Linux 中的数据索引文件和日志文件通常放在 var
  • 【MySQL】InnoDB存储引擎

    MySQL InnoDB存储引擎 1 存储引擎的种类 常见的有三种 xff1a 存储引擎说明InnoDB5 5 版本后 MySQL 的 默认数据库存储引擎 xff0c 支持事务和行级锁 xff0c 比 MyISAM 处理 xff0c 速度稍
  • 【PCL自学:Feature5】视点特征直方图VFH概念及使用 (持续更新)

    一 视点特征直方图 xff08 VFH xff09 原理 这篇博文描述了视点特征直方图 Viewpoint Feature Histogram VFH 描述符 xff0c 在一些其他文章也称为视角特征直方图 xff0c 这是一种用于聚类识别