使用点云库 ICP 进行 2D 点匹配

Using Point Cloud Library ICP for 2D point matching

本文关键字:2D 进行 ICP      更新时间:2023-10-16

我正在使用PCL的ICP进行2D点匹配,我使用::correspondences_来查找源(index_query(到目标(index_match(的对应关系,并观察到许多源索引指向相同的目标索引,如下所示。

SrcIndex: 3 -> TgtIndex: 800
SrcIndex: 4 -> TgtIndex: 800
SrcIndex: 5 -> TgtIndex: 801
SrcIndex: 6 -> TgtIndex: 801
  1. 对应映射不应该是一对一的吗?
  2. setEuclideanFitnessEpsilon做什么?

我在这里找到,在第 5 页,

如果误差平方和小于用户定义的阈值,则找到了解决方案。 通过设置设置欧几里得健身Epsilon(距离(

然而,即使在设置::setEuclideanFitnessEpsilon(1)之后,我也得到了50ishgetFitnessScore(),这比根本不设置欧几里得适应度更糟糕。

  1. 我可以编写一些自定义规则集来拒绝通信吗?我知道CorrespondenceRejector存在,但是是否有任何漂亮而简单的教程可用?
  1. 对应映射不应该是一对一的吗?

您需要设置:setUseReciprocalCorrespondences(true)

    在设置 :
  1. :setEuclideanFitnessEpsilon(1( 之后,我得到了 50 的 getFitnessScore((,这比根本不设置欧几里得健身更糟糕。

有几种可能的停止条件:

  • setMaximumIterations():达到最大迭代次数 迭代次数
  • setTransformationEpsilon(): 区别 以前的转换和当前估计的转换 小于阈值
  • setEuclideanFitnessEpsilon(): 总和 欧几里得平方误差小于阈值
  1. 我可以编写一些自定义规则来拒绝通信吗?我知道通信拒绝器存在,但是有没有可用的漂亮而简单的教程?

我不熟悉这方面的任何教程,但您可以从现有的 CorrespondenceRejector 派生类中学习。例如:correspondence_rejection_median_distance.h correspondence_rejection_median_distance.cpp