PCL教程指南-VFH描述子

  • Post author:
  • Post category:其他




PCL教程指南-VFH描述子


  • 官方原文档
  • VFH是对FPFH基础上的扩展,VFH目的是抽象出一个整体的描述特征,这个特征主要由以下两部分组成


    1. 视点与其他点的关系


    2. 中心点与其他点的关系

示意图
在这里插入图片描述
视点与其他点的关系:视点与中心点形成的向量与其他点法向量形成的夹角;即图中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 版权协议,转载请附上原文出处链接和本声明。