接着上一篇的介绍继续
关于在使用readHeader函数读取点云数据头的类型的代码(Read a point cloud data header from a PCD file.)
查看PCD文件里的内容(其实对于如何生成这种高纬度的文件呢?)
另外一种PCD文件的比如VFH的PCD文件
那么接下来我们就可以使用PCL给定的数据集,以及FLANN的库是实现对点云的识别,方法是按照(1)的思路来做的
首先我们是假设已经有了数据集,以及相应每个数据集的VFH全局表述子的PCD文件,这样我们就可以使用(1)中的思路把数据集训练并保存到数中,方便之后我们再输入给定的点云的VFH的PCD文件进行查找
那么其实这里面,我们如果是自己生成数据集,并对每个数据生成对应的VFH文件就会有点难度,毕竟这是对采集到的数据,对于一些无关点云需要剔除,
然后对有用的有价值的点云数据进行聚类,以及各个角度的点云聚类,然后对聚类的对象生成对应的VFH的特征PCD文件,这就是大致思路,
那么我们来看一下源代码是如何读取并训练数据源的,并生成可用于FLANN使用的文件,并存在磁盘中
源代码分析如下
这里面就很明显的生成了两个可用于FLANN进行搜索匹配的文件,以及模型的名称的列表,就是会生成以下三个文件
kdtree.idx(这个是kdtree模型的索引)
training_data.h5(用于FLANN库中的一种高效的文件格式,上一章有介绍),
training_data.list(这是训练数据集的列表)
(2)那么对于已经生成好的点云的数据集,我们就需要使用写一个程序来实现给定一个点云的VFH的PCD文件来寻找这个点云所在位置并且是什么角度拍照的结果,闲话少说明,直接就上程序
这里面就涉及到FLANN的库的函数的使用,执行的结果
打印的结果,这里面会显示最接近的六个数据集,并且计算这六个最近点云与给定点云之间的“距离”,这也是衡量两者之间的相似度的大小

可视化的结果
很明显左下角就是我们给定的数据点云,而且运行查找的速度非常快~
好了就这样了
关注微信公众号,欢迎大家的无私分享