PCL教程指南-VFH描述子
   
- 
     
官方原文档
 - 
     VFH是对FPFH基础上的扩展,VFH目的是抽象出一个整体的描述特征,这个特征主要由以下两部分组成
- 
视点与其他点的关系
 - 
中心点与其他点的关系
 
 - 
 
| 示意图 | 
|---|
        
       | 
| 视点与其他点的关系:视点与中心点形成的向量与其他点法向量形成的夹角;即图中alpha | 
        
       | 
| 中心点与其他点的关系:中心点与各点的SPFH特征,即三个角度和一个距离 | 
- 
     
对于官方文档中的示意图个人认为是有错误的,表述是视点与中心点的向量,示意图却是视点与其他点的向量。源码中计算使用的是中心点。
 - 
     
且官方文档中对于中心点与其他点特征计算表述易造成误解,文档表述为扩展的FPFH,但其实本质就是SPFH,易造成还需要加权计算的误解。
 - 以下对官方代码进行注释,并扩展
 
#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> ());
  ... read, pass in or create a point cloud with normals ...
  ... (note: you can create a single PointCloud<PointNormal> if you want) ...
  // VFH估计类,输入点结构与法向结构,输出为VFH标签结构
  pcl::VFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::VFHSignature308> vfh;
  vfh.setInputCloud (cloud);
  vfh.setInputNormals (normals);
  // 如果点类型包含了法向,直接使用vfh.setInputNormals (cloud);
  // kdtree搜素方法
  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.compute (*vfhs);
  // vfhs->size () should be of size 1*
}
- 
其中
pcl::VFHSignature308
中308指,默认视点特征分割为128bin,其他每个特征分割bin数为45,现在视点特征有一个角度,中心点特征有三个角度和一个距离,则一共128+45*4=308
      - 
对于中心点和视点,用户可以自定义,默认是根据自身范围计算
 
 
版权声明:本文为qq_41795143原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。