【问题标题】:Using Point Cloud Library ICP for 2D point matching使用点云库 ICP 进行 2D 点匹配
【发布时间】:2020-04-08 06:14:28
【问题描述】:

我正在使用 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 页,

如果误差平方和小于用户定义的阈值,则找到解决方案。通过 setEuclideanFitnessEpsilon(distance) 设置

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

  1. 我可以编写一些自定义规则来拒绝信件吗?我知道CorrespondenceRejector 存在,但有什么好的简单教程可用吗?

【问题讨论】:

    标签: c++ computer-vision point-cloud-library point-clouds


    【解决方案1】:
    1. 对应映射不应该是一对一的吗?

    您需要设置: setUseReciprocalCorrespondences(true)

    1. 设置 ::setEuclideanFitnessEpsilon(1) 后,我得到了 50ish 的 getFitnessScore(),这比根本不设置欧几里得适应度差。

    有几种可能的停止条件:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 2016-10-17
      • 2013-06-21
      • 2020-02-29
      • 1970-01-01
      • 2016-01-04
      • 2021-06-27
      相关资源
      最近更新 更多