已知点云P中有n个点,那么它的点特征直方图(PFH)的理论计算复杂度是O(nk^2) , 其中k是点云P中每个点p计算特征向量时考虑的邻域数量。对于实际应用中,密集点云的点特征直方图(PFH)的计算,是十分耗时的。本博文介绍一种快速快速点特征直方图FPFH(Fast Point Feature Histograms)算法。FPFH把算法的计算复杂度降低到了O(nk) ,但是任然保留了PFH大部分的识别特性。
理论基础
直方图特征计算步骤:
Step 1.计算了每个查询点Pq的一系列值,并把它叫做SPFH(Simplified Point Feature Histgram)
Step 2.重新确定每个点的k邻域,使用邻近的SPFH值来计算 的最终直方图(称为FPFH),如下所示:
这里的Wk代表了两点的距离。权重(weight)的组合是非常重要的,下面的图显示了这一点:
可以看到越近的权重越大,线越粗。
因此,给定一个点Pq,这个算法第一步评估了SPFH的值,通过创造它和它的近邻的匹配。这个过程将一直重复,通过近邻SPFH的值不停的改变权重,最终生成了Pq的FPFH。
PFH与FPFH之间的差异
1.FPFH没有和它所有的近邻有着联系,因此可能会丢失一些值的匹配。
2.PFH模型可以更精确的描述表面,而FPFH则包括了额外的点的配对在半径为r的圆的外面(最多不会超过2r)
3.因为权重的组合,FPFH结合了SPFH的值并且重新获取了一些点的近邻。
4.FPFH复杂度大大降低,计算更快。
5.最终的直方图是简化了。
预估FPFH的特征值
FPFH的执行使用了11个分发的子区间,和一个非相关的组合(33位的数组),把它存在pcl::FPFHSignature33这个点类型里面。
下面看一段代码:
// Feature.cpp : 定义控制台应用程序的入口点。
//
// 用于特征提取学习
// NARF (Normal Aligned Radial Feature 法向径向特征对齐)
// FPFH (Fast Point Feature histograms 快速点特征直方图)
// SIFT (Scale-invariant Feature Transform 尺寸不变特征变换)
// BRIEF (Binary Robust Independent Elementary Features 二进制健壮的独立的基本特性)
#include "stdafx.h"
#include <iostream>
#include <pcl\io\pcd_io.h>
#include <ctime>
#include <Eigen\Core>
#include <pcl\point_types.