3D 特征点概述(1)
很久没有更新相关内容了,很多朋友过来私信我,但由于时间问题,不能一一为大家解答,本人也不是无所不知的大神,还请各位谅解。
本文主要总结PCL中3D特征点的相关内容,该部分内容在PCL库中都是已经集成的在pcl_feature模块中,该模块包含用于点云数据进行3D特征估计的数据结构以及原理机制,3D特征点是3D点的三维空间中的位置的表示,该点周围信息一般具有一定的几何性质。
举个例子:广泛使用的几何点特征的示例是下图的表面在查询点p处的估计曲率和法线。被认为是局部特征,因为它们使用由其k个最近点邻居提供的信息来表征点。
为了有效地确定这些邻居,输入数据集通常使用空间分解技术(例如八叉树或kD树)分割成更小的块( 左:kD-tree,右:八叉树),然后执行在那个空间里最近点搜索。
本文概述了在PCL中实现的所有特征点算法
这里列出了关于各种特征点性质属性的表格,以及应用的场景领域,
Feature Name | Supports Texture / Color | Local / Global / Regional | Best Use Case |
---|---|---|---|
PFH | No | L | |
FPFH | No | L | 2.5D Scans (Pseudo single position range images) |
VFH | No | G | Object detection with basic pose estimation |
CVFH | No | R | Object detection with basic pose estimation, detection of partial objects |
RIFT | Yes | L | Real world 3D-Scans with no mirror effects. RIFT is vulnerable against flipping. |
RSD | No | L | |
NARF | No | L | 2.5D (Range Images) |
PFH (Point Feature Histogram)
是一种局部特征点,PFH扩展了先前关于Surflet-Pair-Relation Histograms的工作(Wahl等人)。
- Surflet-pair-relation histograms: a statistical 3D-shape representation for rapid classification
输入格式:
(1)由一组带有方向的点P组成的点云。有方向意味着所有点都具有正常的N(法向量)。
(2)此功能不使用颜色信息。
工作原理:
(1)迭代点云P中的点。
(2)对于输入云中的每个点Pi(i是迭代索引),收集具有半径r的Pi周围的球体内的所有相邻点。 这个集合称为Pik(k为k个邻居)
(3)循环关于Pik中的两对点,比如p1和p2。 法线与矢量p1-p2的角度较小的点是源点ps,另一个是目标点pt。
(4)计算四个特征,它们一起表示目标点pt处的平均曲率。 将它们组合并放入等效的直方图箱中。 有关特征计算的更多详细信息,请参阅原始论文:http://www.willowgarage.com/papers/learning-informative-point-classes-acquisition-object-model-maps
简短概述:
(1)为P中的所有的点云计算法线
(2)估计P中的点Pi的特征:获取围绕点Pi(Pik)的半径r中的k个邻居的集合。在两点之间计算四个特征。相应的bin增加1.生成点特征直方图(PFH)。
(3)将得到的直方图组与其他点云的组进行比较,以便找到对应关系。
FPFH (Fast Point Feature Histogram)
FPFH也是一种局部特征点,且是PFH(Point Feature Histogram)的一种扩展描述
输入格式:
(1)由一组定向点P组成的点云。定向意味着所有点都具有正常的n(法向量)。
(2)此功能不使用颜色信息。(这些都和PFH一样的要求)
工作原理:
由于FPFH来自PFH,因此它的工作方式非常相似。但是有一些优化步骤使FPFH更快。
(1)迭代点云集 P 中的所有点云。
(2)对于输入点云中的每个点Pi(i是迭代索引),收集具有半径r的Pi周围的球体内的所有相邻点。这个集合称为Pik(k为k个邻居)
(3)该循环仅将点Pi与其每个邻居相关联(记住在PFH中,循环将生成Pi对及其邻居以及_Pi_s邻居之间!)。在这样的一对中,法线与矢量p1-p2的角度小的点是源点ps,另一个是目标点pt。
(3)计算三个特征(PFH中的四个,Ps和Pt之间的距离被遗漏),它们一起表示目标点pt处的平均曲率。将它们组合并放入等效的直方图箱中。
(4)与FPFH中一样,仅考虑查询点Pi与其邻居之间的直接对(计算量少得多),得到的直方图称为SPFH(简单点特征直方图)。
(5)最后一步是新的:要重新补偿“丢失”连接,相邻的SPFH将根据其空间距离添加到Pi的SPFH中。有关特征计算的更多详细信息,请参阅原始论文:http://files.rbrusu.com/publications/Rusu09ICRA.pdf
简短概述:
(1)为P中的所有点计算法线
(2)估计P中的点Pi的特征:获取围绕点Pi(Pik)的半径r中的k个邻居的集合。在两点之间计算三个特征(仅在Pi与其邻居之间!)。相应的bin增加1.生成简单的点特征直方图(SPFH)。
(3)为了达到更多的点和连接(最多2次r),邻居的SPFH根据它们的空间距离加以加权作为最后一步。
(4)可以将得到的直方图组与其他点云的组进行比较,以便找到对应关系。
VFH (Viewpoint Feature Histogram)
VFH是一种全局特征点,扩展了FPFH的一种方法。
输入格式:
(1)由一组定向点P组成的点云。定向意味着所有点都具有正常的n法向量。
(2)此功能不使用颜色信息。
工作原理:
(1)计算点云的质心pc及其法向量nc。计算视点和质心之间的向量vc并对其进行标准化。
(2)VFH由两部分组成:视点部分和扩展的FPFH模块。
(3)要映射视点分量,迭代P中的所有点云,并计算它们的法线以及vc之间的角度。增加相应的直方图bin。
(4)对于扩展的FPFH组件,只需计算质心pc处的FPFH,将整个周围点云P设置为邻居。
(5)将两个直方图一起添加。
(6)有关特征计算的更多详细信息,请参阅原始论文:http://www.willowgarage.com/sites/default/files/Rusu10IROS.pdf
简短概述:
(1)估算点云中的质心及其法线。计算视点和视点之间的归一化矢量vc。
(2)对于所有点,计算它们的法线和vc之间的角度。
(3)估算质心的FPFH,将所有剩余点设置为邻居。
CVFH (Clustered Viewpoint Feature Histogram)
CVFH是一种基于区域描述的特征点,也是基于VHF扩展的方法。
输入格式:(和上述一样的输入)
(1)由一组定向点P组成的点云。定向意味着所有点都具有正常的法向量n。
(2)此功能不使用颜色信息。
工作原理:
(1)由于遮挡和传感器限制,我们使用传感器获取的是物体的2.5D点云数据,一旦缺失部分点云,计算整个点云的点和正常质心的结果可能完全不同。这就是为什么一旦点云中缺少必要点,VFH描述符也就会完全不同。
(2)CVFH创建稳定的集群区域。从点云P开始,新的簇Ci从尚未分配给任何簇的随机点Pr开始。如果Ci中存在点Pj,则P中的每个点Pi被分配给该簇,使得它们的法线类似并且它们处于直接邻域中(比较角度和距离阈值)。聚类簇群太少的集群被拒绝或忽略。
(3)计算每个群集上的VFH。
(4)为每个直方图添加形状分布,表示点如何围绕质心分布。
(5)有关特征计算的更多详细信息,请参阅原始论文:http://ieeexplore.ieee.org/xpl/articleDetails.jsp?numumber = 6130296
简短概述
(1)将点云细分为具有相似法线的相邻点的聚类(稳定区域)。
(2)计算每个群集的VFH。
(3)将形状分布组件(SDC)添加到每个直方图。
RIFT (Rotation-Invariant Feature Transform)
RIFT是一种局部特征描述法,且该方法扩展于SIFT。参考论文
- Object recognition from local scale-invariant features (http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=790410&tag=1)
输入格式:
(1)由一组纹理点组成的点云P. 没有纹理,此功能不会产生任何可用的结果。
(2)强度梯度计算,参考:
http://docs.pointclouds.org/trunk/classpcl_1_1_intensity_gradient_estimation.html
工作原理:
(1)迭代点云P中的所有点。
(2)对于输入点云中的每个点Pi(i是迭代索引),收集具有半径r的Pi周围的球体内的所有相邻点。这个集合称为Pik(k为k个邻居)
(3)具有n个片段的假想圆(球体的垂直于Pi的法线的投影)适合于表面。这里n对应于实现中的距离 bin 的数量。
(4)Pi的所有邻居根据它们的距离d <n和梯度角位置θ<g(g表示实现中的梯度区的数量)被分配给直方图区间。 θ是梯度方向和从中心向外指向圆的矢量之间的角度。
有关特征计算的更多详细信息,请参阅原始论文:http://hal.inria.fr/docs/00/54/85/30/PDF/lana_pami_final.pdf
简短概述
(1)对于P样本中的每个点Pi,Pi周围的所有k个邻居。
(2)根据距离d和它们的梯度角θ将所有邻居分配给直方图。
(3)可以将得到的直方图组与其他点云的组进行比较,以便找到对应关系。
未完待续。。。
注意:以上内容如有错误或者需要补充的,请留言!同时欢迎大家关注微信公众号,积极分享投稿,做到大家一起分享,拒绝只做个伸手党!或者加入3D视觉微信或QQ交流群,一起交流分享! 投稿或联系群主邮箱:dianyunpcl@163.com
原创不易,转载请联系群主,注明出处
3D 特征点概述(1)的更多相关文章
- 3D 特征点概述(2)
还是紧接着上一文章的思路继续介绍3D特征点的基本概念问题,还是这个表格: Feature Name Supports Texture / Color Local / Global / Regional ...
- 3D特征:关于HFM和HBB
1.HBB 三维绑定框 (1): 要用到HBB,定义还不太清楚,来自于 VALVE Developer Community (https://developer.valvesoftware.co ...
- SLAM方向公众号、知乎、博客上有哪些大V可以关注?
一.公众号 泡泡机器人:泡泡机器人由一帮热爱探索并立志推广机器人同时定位与地图构建(SLAM)技术的极客创办而成,通过原创文章.公开课等方式分享SLAM领域的数学理论.编程实践和学术前沿. 经典文 ...
- OpenCV开发笔记(六十四):红胖子8分钟带你深入了解SURF特征点(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- SALM入门笔记(1):特征点的匹配
SLAM 主要分为两个部分:前端和后端,前端也就是视觉里程计(VO),它根据相邻图像的信息粗略的估计出相机的运动,给后端提供较好的初始值.VO的实现方法可以根据是否需要提取特征分为两类:基于特征点的方 ...
- SLAM入门之视觉里程计(1):特征点的匹配
SLAM 主要分为两个部分:前端和后端,前端也就是视觉里程计(VO),它根据相邻图像的信息粗略的估计出相机的运动,给后端提供较好的初始值.VO的实现方法可以根据是否需要提取特征分为两类:基于特征点的方 ...
- windows下3D文字
windows下3D文字 简单概述 需要在每一帧的视频图像上面添加3D文字,文字可以自由移动位置,变换各种字体属性,还能进行一些简单动画.然后把处理好的视频图像传个下一个步骤去处理.做的过程中参考了G ...
- Javascript基于对象三大特征 -- 冒充对象
Javascript基于对象三大特征 基本概述 JavaScript基于对象的三大特征和C++,Java面向对象的三大特征一样,都是封装(encapsulation).继承(inheritance ) ...
- Bundle Adjustment光束平差法概述
http://blog.csdn.net/abcjennifer/article/details/7588865 http://blog.csdn.net/ximenchuixuezijin/arti ...
随机推荐
- ClassLoader如何加载class?
ClassLoader一个经常出现又让很多人望而却步的词,本文将试图以最浅显易懂的方式来讲解 ClassLoader,希望能对不了解该机制的朋友起到一点点作用. 要深入了解ClassLoader,首先 ...
- [DP地狱训练]Pascal山脉
OJ题号:ZHOJ1055 思路:树状数组. 首先将数据离散化,然后用线段树维护小于当前高度的山峰已经出现过的数量. #include<cstdio> #include<cstrin ...
- mogodb排序
db.getClloection('user').find().sort({'age':-1}).pretty() 2.自然排序,也就是插入的先后顺序 db.getClloection('user') ...
- Problem D: 指针函数
Description YHZ自认为很聪明的人, 在C语言课上老师布置了一个作业,让能求正方形和圆的面积, 正当YHZ要跃跃欲试的时候, 老师却要求使用函数指针来实现这个功能,YHZ立马就不会了,他现 ...
- CF733F Drivers Dissatisfaction【链剖】【最小生成树应用】
F. Drivers Dissatisfaction time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- 当删除某一个jar包时tomcat中出现problem encountered while deleting resources问题
http://blog.csdn.net/u013226462/article/details/17715031
- 网络的FIN_WAIT_2状态解释和分析
关于网络设备的FIN_WAIT_2状态解释出处:http://hi.baidu.com/netdemon1981/blog/item/584bfbb2aeb1d4acd9335ad9.html 在HT ...
- AngualrJS中每次$http请求时的一个遮罩层Directive
在AngualrJS中使用$http每次向远程API发送请求,等待响应,这中间有些许的等待过程.如何优雅地处理这个等待过程呢? 如果我们在等待过程中弹出一个遮罩层,会是一个比较优雅的做法. 这就涉及到 ...
- vcs+Makefile实现简单的testbench
网络上找的文章,实现了一遍. 步骤如下: 1. 创建verilog代码, 包括8位加法器代码和testbench代码. adder8.v module adder8 ( input clk, inpu ...
- JFinal提示:java.lang.RuntimeException: dao 只允许调用查询方法
public class UserModel extends Model<UserModel>{ public static final UserModel userDao = new U ...