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

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

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

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

1.视点方向特征部分

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

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

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

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

#include 
#include 
 
 {
   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描述符作为浮点值的直方图。
【PCL自学:Feature5】视点特征直方图VFH概念及使用 (持续更新)_第4张图片
总结:
本篇文章介绍了VFH的大致原理以及与PFH和FPFH的具体区别,并介绍了使用PCL进行VFH特征计算的方法。下一篇文章将介绍NARF特征。


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

你可能感兴趣的:(算法,PCL,聚类,机器学习,算法)