本文档介绍了PCL中的三维特征估计方法,并作为对pcl::Feature
类内部感兴趣的用户或开发人员的指南。
#理论入门
在它们的原始表示中,3D映射系统的概念中所定义的点
仅使用其笛卡尔坐标x,y,z
相对于给定原点来表示。假设坐标系的原点不随时间变化,则在t1和t2获得的两个点p1和p2具有相同的坐标。然而,比较这些点是一个不适当的问题,因为即使它们相对于一些距离度量(例如欧几里德度量)是相等的,它们可以在完全不同的表面上被采样,因此当与另一个表面一起被采用时表示完全不同的信息周围的点附近。那是因为没有保证世界在t1和t2之间没有变化。某些采集设备可能会为采样点提供额外的信息,如强度或表面缓解值,甚至是颜色,但是这并不能完全解决问题,并且比较仍然不明确。
由于各种原因需要比较点的应用需要更好的特征和度量来区分几何表面。作为具有笛卡尔坐标的单一实体的3D点的概念因此消失,并且本地描述符的新概念代替它。文献中丰富的描述相同概念化的不同命名方案,如形状描述符或几何特征,但对于本文档的其余部分,将被称为点特征表示。
…
通过包含周围邻居,可以在特征表达式中推断和捕获底层采样表面几何,这有助于解决歧义比较问题。 理想情况下,所得到的特征对于驻留在相同或类似表面上的点是非常相似的(相对于一些度量),对于在不同表面上找到的点不同,如下图所示。 一个好的点特征表示区别于一个坏的特征,能够捕捉到相同的局部表面特征:
提出修改建议
刚性转换 - 也就是说,数据中的3D旋转和3D转换不应该影响结果特征向量F估计;
变化的采样密度 - 原则上,或多或少密集地采样的局部曲面片应该具有相同的特征向量签名;
噪声 - 在数据中存在轻微噪声的情况下,点要素表示必须在其特征向量中保留相同或非常相似的值。
_images/good_features.jpg
一般来说,PCL特征使用近似方法来使用快速kdtree
查询来计算查询点的最近邻居。 有两种我们感兴趣的查询类型:
确定查询点(也称为k-search
)的k个(用户给定参数)邻居;
确定半径为r
的球体内的查询点的所有邻居(也称为半径搜索)。
注意
有关正确的k值或r值的讨论,请参见Rusu论文。
#术语
For the reminder of this article,我们会做一些缩写,并且介绍一些符号,以简化文中的解释。 请参阅下面的表格,了解每个使用的术语。
(项目)term (解释)explanation
Foo a class named Foo
FooPtr a boost shared pointer to a class Foo
,
e.g., boost::shared_ptr<Foo>
FooConstPtr a const boost shared pointer to a class Foo
,
e.g., const boost::shared_ptr<const Foo>
#如何通过输入