快速特征点直方图描述器(FPFH)

PFH的理论上的时间复杂度是O(nk的平方),n是点的数量,k是最近邻的个数。对于实时系统来说,这压根就是不行的,所以作为PFH规划的简化版本,FPFH把计算复杂度减少成O(nk),但是还具有很好的和PFH差不多的区分能力。

第一步我们先计算了每个查询点Pq的一系列值,并把它叫做SPFH(Simplified Point Feature Histgram)

第二步每个点的最近邻是重新分配,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这个点类型里面。

下面的代码段,预估了一个所有点的FPFH的特征集合

#include <pcl/point_types.h>
#include <pcl/features/fpfh.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) ...
// Create the FPFH estimation class, and pass the input dataset+normals to it
pcl::FPFHEstimation<pcl::PointXYZ, pcl::Normal, pcl::FPFHSignature33> fpfh;
fpfh.setInputCloud (cloud);
fpfh.setInputNormals (normals);
// alternatively, if cloud is of tpe PointNormal, do fpfh.setInputNormals (cloud);
// Create an empty kdtree representation, and pass it to the FPFH estimation object.
// Its content will be filled inside the object, based on the given input dataset (as no other search surface is given).
pcl::search::KdTree<PointXYZ>::Ptr tree (new pcl::search::KdTree<PointXYZ>);
fpfh.setSearchMethod (tree);
// Output datasets
pcl::PointCloud<pcl::FPFHSignature33>::Ptr fpfhs (new pcl::PointCloud<pcl::FPFHSignature33> ());
// Use all neighbors in a sphere of radius 5cm
// IMPORTANT: the radius used here has to be larger than the radius used to estimate the surface normals!!!
fpfh.setRadiusSearch (0.05);
// Compute the features
fpfh.compute (*fpfhs);
// fpfhs->points.size () should have the same size as the input cloud->points.size ()*
}

调用FPFHEstimation时实际做了这么几步

1.PFH的步骤

2.使用每个SPFH,通过一个权重组合来赋值给FPFH。

类似于PFH我们可以把这段代码反正compute()函数前,进行优化

for (int i = 0; i < normals->points.size(); i++)
{
if (!pcl::isFinite<pcl::Normal>(normals->points[i]))
{
PCL_WARN("normals[%d] is not finite\n", i);
}
}

我们可以用OpenMP进行优化

使用OpenMP可以进行多线程计算。类名叫做pcl::FPFHEstimationOMP,

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机硬盘能达到5g的速度,5G号称可以达到几GB每秒,但是目前的手机处理器和硬盘可以处理这么庞大的数据量吗?...

感谢悟空的邀请&#xff01;“通信行业那些事儿”&#xff0c;专业解读通信、网络类问题&#xff0c;希望我的回答能够给您启发&#xff0c;大家共同探讨、共同提高&#xff01;欢迎关注我&#xff01;楼主您好&#xff01;这个问题&#xff0c;我正好是通信行业的从业人员&…

点集的视点特征直方图的评估

VFH(Viewpoint Feature Histgram)视角特征直方图描述器&#xff0c;可以很直观的表现点的聚类在处理聚类识别与6DOF位姿估计。 下面的图像展示了一个VFH识别和位姿估计的例子。给一些训练集&#xff0c;除了左下角的那个杯子&#xff0c;用来学习&#xff0c;用左下角的杯子作…

惯性矩和偏心距描述器

这次我们将学会怎么使用pcl::MomentOfInertiaEstimation 这个类来获取以惯性矩和偏心距为基础的描述器。这个类也能提取坐标对称和定向包围的方形盒子。但是记住导出的OBB不是最小可能性的盒子。 下面介绍了该种方法的特征提取方式。第一次先算出点云矩阵的协方差&#xff0c;…

mac os修改计算机名,如何修改Mac系统的个人用户名?

在Mac OS X中一旦建立一个用户&#xff0c;此用户的主目录的目录名将会是它的“短”名。更改登录名和主目录名从来都不简单&#xff0c;以前唯一的方法就是建立一个新用户&#xff0c;然后把所有的文件拷贝过去。Mac 修改用户是一件很悲剧的事&#xff0c;因为牵涉到很多地方的…

无线多串口服务器,多串口通信服务器

多串口通信服务器 ZLAN5G00A串口服务器是一款机架式16串口RS232/485/422和TCP/IP之间协议转化器。支持16个RS232串口、16个RS485、RS422串口&#xff0c;且RS232支持流控。通过一根网线连接到ZLAN5G00A&#xff0c;实现16个串口同时全双工工作&#xff0c;每路串口可作为TCP服务…

使用统计异常消除滤波器来消除异常

激光扫描可以生成很多点云的数据集。并且&#xff0c;测量误差会导致一些稀疏的异常值使得结果更差。这使得局部点云特征估计变得更加的复杂&#xff0c;产生一些错误的值&#xff0c;使得点云的识别失败。有些不规则的数据可以通过数理统计的方法来消除。我们稀疏异样消除是以…

为什么有的网站要改服务器才能打开吗,为什么有些网站进不了,怎样设置DNS才能进 – 手机爱问...

2006-12-24从22号起就进不了游戏。 按照官方的DNS地址也不行。 有没有广东深圳罗湖区的朋友能进的 麻烦把你们的DNS地址发给我 谢谢对于上述无法登陆游戏的玩家&#xff0c;《神泣》中国运营团队建议您尝试以下方式&#xff0c;通过修改个人电脑的DNS解析服务器地址&#xff0c…

用一个参数化的模型来投影点

这次我们将学着怎么通过一个参数化的模型进行投影。这个参数化的模型是通过一系列的系数---在这里是平面&#xff0c;相当于axbyczd0 下面是代码 #include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include <pcl/ModelCoeffi…

云 文件 服务器 只存,云 文件 服务器只存

云 文件 服务器只存 内容精选换一换用户通过管理控制台创建或者导入密钥对后&#xff0c;在购买弹性云服务器时&#xff0c;登录方式选择密钥对&#xff0c;并选择创建或者导入的密钥对。用户购买弹性云服务器成功后&#xff0c;可使用密钥对的私钥登录弹性云服务器。使用的登录…

sr650服务器cpu型号,至强Gold 联想ThinkSystem SR650评测

今年7月&#xff0c;英特尔发布了至强可扩展处理器。面对新的处理器架构、新的AVX512指令集&#xff0c;需要新的服务器来匹配&#xff0c;需要更新机器&#xff0c;并提供新的软件、管理等套件。联想ThinkSystem SR650与至强可扩展处理器响应而出并被誉为“性能最高的服务器”…

使用一个环境的或者半径异样消除器来进行异样消除

这个文档显示了在滤波模型里面如何使用几个不同的方法来消除点云里面的异常。 第一步我们将使用一个环境消除滤波器来消除不满足环境条件的点云。然后我们将学会如何使用一个RadiusOutlierRemoval滤波器来消除在指定范围内没有达到指定数量邻居的点。 代码 #include <iost…

trailmakers未能连接服务器,Trailmakers联机版

《Trailmakers联机版》是一款可以联机进行的精美3D沙盒世界以创造为核心玩法的动作手游&#xff0c;这款游戏上手起来挺简单轻松的&#xff0c;诸多趣味内容&#xff0c;将让各位玩家们收获到极致的快感&#xff0c;非常的赞&#xff0c;不想错过任何欢乐与趣味的话&#xff0c…

lga775服务器cpu系列,【LGA775处理器 多的不仅是针脚】- 中关村在线

继发布新一代平台后&#xff0c;Intel推出了LGA775封装的P4处理器。这场被业界称为跨越性的技术革命&#xff0c;究竟能为用户带来什么样的变化和感受&#xff1f;它与Socket 478的处理器有何区别呢&#xff1f;● 何为LGA775LGA(Land Grid Array&#xff0c;栅格阵列封装)即So…

从深度图里面导出边界

这次我们将学着怎么从一个深度图里面导出边界。我们对3种不同种类的点很感兴趣:物体的边框的点&#xff0c;阴影边框点&#xff0c;和面纱点(在障碍物边界和阴影边界)&#xff0c;这是一个很典型的现象在通过雷达获取的3D深度。 下面是代码 /* \author Bastian Steder */#incl…

隐式形状模型

在这次我们将学会隐式形状模型算法通过pcl::ism::ImplicitShapeModel这个类来实现。这个算法是把Hough转换和特征近似包进行结合。有训练集&#xff0c;这个算法将计算一个确定的模型用来预测一个物体的中心。 这个算法由两部分组成&#xff0c;第一部分是训练&#xff0c;第二…

3D物体识别的假设检验

3D物体识别的假设验证 这次目的在于解释如何做3D物体识别通过验证模型假设在聚类里面。在描述器匹配后&#xff0c;这次我们将运行某个相关组算法在PCL里面为了聚类点对点相关性的集合&#xff0c;决定假设物体在场景里面的实例。在这个假定里面&#xff0c;全局假设验证算法将…

怎么样递增的注册成对的点云

这次我们将使用Iterative Closest Point algorithm来递增的注册一系列的点云。 这个主意来自于把所有的点云转换成第一个点云的框架&#xff0c;通过找到每个连续点云间最好的装换&#xff0c;并且计算整个点云的转换。 你的数据集应该由重新排列的&#xff0c;在一个相同的框…

qt入门

&#xfeff;&#xfeff;qt入门 1.首先我们先创建一个qt的空项目 1.这会生成两个文件 xx.pro xx.pro.user xx.pro文件是qt的工程文件&#xff0c;有点类似于vc的prj文件&#xff0c;或者sln文件。xx.pro.user是这个当前环境下的工程文件。(移植的时候这个文件没啥用) 以…

qt输入框

&#xfeff;&#xfeff;qt里面的输入框是QLineEdit这个类来实现的。 下面是代码 /* 应用程序抽象类 */ #include <QApplication>/*窗口类*/ #include <QWidget> #include <QCompleter> #include <QLineEdit>int main(int argc, char* argv[]) {QAp…

qt坐标系统与布局的简单入门

&#xfeff;&#xfeff;qt坐标系统 qt坐标系统比较简单 button.setGeometry(20,20,100,100); 上面的代码把按钮显示为父窗口的20,20处宽度为100&#xff0c;高度为100 接下去是布局 qt里面布局需要加入<QLayout.h>这个头文件。 qt里面垂直布局 qt里面的垂直布局…