Maplab系列:共视关系筛选全局匹配

在通过描述符匹配得到的原始匹配中有大量的误匹配,结果是当前帧几乎和地图里面所有的帧都有匹配。后面通过匹配数量在地图中每帧的分布来筛除一部分错误匹配。这部分工作主要在下面函数中完成。

MatchingBasedLoopDetector::doCovisibilityFiltering

函数的一个重要入参是 loop_closure::IdToMatches<IdType>& id_to_matches_map

这个参数中已经按照所有match所属的地图中的哪一帧进行了group

computeRelevantIdsForFiltering(id_to_matches_map, &id_to_score_map);

这个函数对id_to_matches_map进行排序,根据每一帧有的match数,只排列前n个,n是配置参数。然后把这头n个match放入到id_to_score_map输出。

对于exploration_queue的循环,只要exploration_queue不为空,component_id就不会增加。也就是exploration_queue里面所有的match都归为一个component

最后一部能这么做有几个条件:

  • 一个正确match对应的landmark所对应的其他帧应该也是很有可能被match上的。
  • 如果在另外的帧上,对应的kp没有被match上。说明这个很有可能是错误匹配。

最后的筛选流程大概是:

  • 只要这一帧有一个match被放入一个component,这一帧所有的match都归为这个component。
  • 如果一个landmark链接的其他帧的kp都和当前帧有匹配,这些帧也加入到这个component。
    • 反过来说就是:一个landmark在其他帧的kp如果没有同时被当前帧观察到。这个共视关系就断掉了。
  • 进一步总结就是求,在所有和match有关的landmark可frame组成的共视关系中,最大的那个链接图。

猜你喜欢

转载自blog.csdn.net/ziliwangmoe/article/details/87619958