pcl里面的3D特征

我这里不介绍pcl里面的类的命名规范,及点的类型。为什么呢?pcl里面类的命名规范,比较繁琐,而且主要是针对要对pcl这个库要开源的人士,而pcl里面的点的类型太多,足够满足你的要求。所以我们要走一条具有中国特色的pcl主义道路。

今天来介绍一下pcl里面的3D特征。

点是用来给一个给定区域来用笛卡尔坐标系x,y,z来进行描绘的一种方式。假定坐标系统的坐标原点没有变,可能会有两个点比如p1和p2,成为t1和t2,但是它们的坐标是没变的。

比较这些点云是不稳定的,因为即使他们有相同的距离,但是它们可能采自不同的表面,因此他们可能会代表不同的信息,当把它们和表面上临近的点结合在一起的时候。这是因为很难确保现实世界里面的t1和t2没有变化。有一些获取点云的装置可能会获取一些额外的数据,比如亮度(intensity),比如表面光滑度(翻译不一定对,surface remission value),和颜色等等,但是以上的这些往往还是不能解决问题。


程序往往需要更好的特征或者是矩来区别几何表面。所以把3D点看成笛卡尔坐标系里面的一个单一的实体这个概念消失了,我们引入了一个局部坐标系。文化是丰富多彩,森罗万象的,我们可以对同样的概念取很多的命名组合,比如形状描述,几何特征,而在pcl里面是用点的特征来描述。


通过包含周边的点,采样表面的几何特征可以被我们给推理或者捕获,这将解决我们蛋疼的比较问题。理想情况下,同一个或者相似表面上的点的特征是很相似的。那么怎么来找到一个比较好的,描述点的特征呢?当这个特征在下面这3个因素的影响下,还能或得同样的表面特点的时候就是好的特征。

1.刚体转换。这包括了3D旋转与3D转换,好的特征应该不会被此影响,特征向量F(feature)不会改变。

2.不同的采样密度。总体来说,一个局部的表面区域,不管以高密度还是低密度的采样,应该具有相同的特征向量。

3.噪声。这个不需要过多的解释。



总体来说,pcl里面使用相似的方法来查询指定点的最近邻,如使用kd-trees。下面是我们感兴趣的2个查询时需要的类型;

1.k。即查询时的最近邻的点的个数。

2.r。即搜索半径。


专业术语:

term explanation
Foo a class named Foo //英文里面很多随便取的类叫foo或bar类似张三,李四
FooPtr

a boost shared pointer to a class Foo,//boost共享指针

e.g., boost::shared_ptr<Foo>

FooConstPtr

a const boost shared pointer to a classFoo,//boost共享常量指针

e.g., const boost::shared_ptr<const Foo>


怎么进行输入?

pcl里面基本上所有的类都继承自pcl::PCLBase这个类,所有pcl::Feature有两个方式来获取输入数据。

1.输入为整个点云数据集,setInputCloud(PointCloudConstPtr&)  强制的

这将计算每一个输入点的特征。

2.输入为一个点云数据集的子集。setInputCloud(PointCloudPtr&)和setIndices(IndicesConstPtr&) 后面那个是可选的。

这将计算给定下标的输入点的特征。默认情况下下标是不会给的,也就意味着每个点的特征都会被计算。

除此之外,我们还可以通过别的调用,如setSearchSurface(PointCloudConstPtr &)来搜索表面上的点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值