机器视觉(三)3D模板匹配

3D的模板匹配的方法有很多,在物体识别,无序抓取等应用广泛,下面对几种3D的匹配方法进行简单测试记录。

1 可利用颜色信息的点云模板匹配

(1)plc的识别模块包括了linemod算法,针对颜色梯度信息和法向量特征进行点云匹配。具体的算法原理,可以参考另一篇笔记--2D边缘匹配。

 

 

机器视觉(三)3D模板匹配_第1张图片

机器视觉(三)3D模板匹配_第2张图片

此算法 唯一问题是模板的训练比较麻烦,因为不具有旋转不变性,所以需要自动训练很多个模板。在测试的时候,暂时只对一个模板进行了平移之后的匹配测试。还没有对一个物体的几千个点云模板自动训练研究。但是在测试当中,由于此算法在2D匹配当中有比较好的速度和效果。我相信,如果将训练工具开发好,此算法在3D当中进行匹配识别中可以达到很好的应用。

(2)利用SHOT点描述子匹配结合Hough算法聚类匹配

PCL中的识别模块有相应的代码教程http://pointclouds.org/documentation/tutorials/global_hypothesis_verification.php#global-hypothesis-verification。

此算法包含以下步骤:

  • 计算点云的法向量
  • 将点云降采样,提取关键点。加快匹配速度。
  • 计算关键点的SHOT点描述子。SHOT点描述子的介绍可以参考https://www.cnblogs.com/BellaVita/p/10019409.html。
  • 利用kd-tree找出目标点云中与模板点云中具有相似点特征的点对。
  • 利用hough算法对找出的点对进行聚类,分类之后就是找到的所有的目标以及各个目标与模板的转换矩阵。
  • 利用ICP配准对找到的所有目标进行配准优化,使得精度更高。

由于SHOT点描述子可以没有颜色信息,只有几何信息,所以此算法对普通的XYZ点云也可以。经过测试此算法的速度和效果都比较好。速度上SHOT点特征的计算要比下面介绍的FPFH点特征计算要快。抛开ICP优化,对于100000个点的点云进行目标查找,耗费了500多ms时间。

2 普通XYZ信息点云模板匹配

XYZ信息的点云匹配,大多采用基于表面法向量的特征去匹配。测试了以下两个方面:

(1)SAC算法结合FPFH点描述符配准以及ICP精确配准。

准确来说这种方法是配准方法,就是在一组点云中找到另一组点云相似的部分,利用相似的部分求出两组点云之间的刚性变换。 这些配准算法用在点云拼接当中比较合适。 对他们稍加修改,也可以用在物体识别当中。

SAC-IA的基本原理如下:

1) 从待配准点云P中选取n个采样点,为了尽量保证所采样的点具有不同的FPFH特征,采样点两两之间的距离应满足大于预先给定最小距离阈值d。

(2) 在目标点云Q中查找与点云P中采样点具有相似FPFH特征的一个或多个点,从这些相似点中随机选取一个点作为点云P在目标点云Q中的一一对应点。

(3) 计算对应点之间刚体变换矩阵, 然后通过求解对应点变换后的“距离误差和”函数来判断当前配准变换的性能。找出最佳的刚体变换矩阵。

SAC-IA粗匹配算法由于需要计算大量的FPFH特征,实际测试下来速度很慢。

下面是主要实现代码:

机器视觉(三)3D模板匹配_第3张图片

ICP则是比较常见的配准算法,实现两个点云一定范围内的配准。所以在ICP配准之前先进行粗配准。

值得注意的是:在实际应用中为了有一个很好的识别效果。在粗匹配之前要进行一系列预处理,常用的如:

下采样处理,直通滤波和聚类分割。

分割之后再去进行粗匹配,精确匹配。可能会得到比较理想的结果。

实际上,我经常把上面这些用在配准应用中,如物体完整模型的点云拼接等,因为有些物体没有三维模型可以加载,所以需要从多个角度采集数据进行拼接,形成一个完整的点云模板。

(2)Halcon中基于surface的点云匹配

Halcon中关于3D匹配的工具有很多,作为与PCL开发的对比,对下面基于surface的匹配算法进行了测试。不论速度以及准确率都非常高。在c++调用 建立模板和进行匹配的时候需要根据帮助文档多注意些细节。

机器视觉(三)3D模板匹配_第4张图片

机器视觉(三)3D模板匹配_第5张图片

你可能感兴趣的:(机器视觉)