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 版权协议,转载请附上原文出处链接和本声明。