使用点云库 ICP 进行二维点匹配

Using Point Cloud Library ICP for 2D point matching

我正在使用 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 是做什么的?

我发现 here 在第 5 页

A solution was found if the sum of squared errors is smaller than a user-defined threshold. set via setEuclideanFitnessEpsilon(distance)

然而,即使在设置 ::setEuclideanFitnessEpsilon(1) 之后,我得到 getFitnessScore()50ish,这比根本不设置欧几里得健身更糟糕。

  1. 我可以写一些自定义规则来拒绝信件吗?我知道 CorrespondenceRejector 存在,但是否有可用的简单教程?
  1. Shouldn't the correspondence mapping be one to one?

您需要设置: setUseReciprocalCorrespondences(true)

  1. after setting ::setEuclideanFitnessEpsilon(1), I got a getFitnessScore() of 50ish which is worse than not setting euclidean fitness at all.

有几种可能的停止条件:

  • setMaximumIterations():迭代次数达到最大值 迭代次数
  • setTransformationEpsilon():两者的区别 先前的转换和当前估计的转换 小于阈值
  • setEuclideanFitnessEpsilon():总和 欧氏平方误差小于阈值
  1. Can I write some custom set of rules to reject correspondences? I know CorrespondenceRejector exists but is there any nice and simple tutorial available?

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