0

使用 Opencv 3.0,我获得了具有以下功能的基本矩阵:

E = findEssentialMat(points2, points1, focal, pp, RANSAC, 0.999, 1.0, mask);

查看掩码值,内点的数量非常高。

在我使用了 recoverPose 函数之后:

recoverPose(E, points2, points1, R, t, focal, pp, mask);

但我注意到通过的内点数(查看掩码)非常少(通常为零)。

我的问题是:有没有办法从recoverPose 函数中获得更多的内点?如果没有,是否有替代方法来获取 R 和 t(不使用 recoverPose 函数)?

非常感谢!

4

1 回答 1

0

没有更多细节,真的很难判断发生了什么。RecoverPose 必须解决的主要任务是在给定基本矩阵估计的情况下,在 4 种不同的平移和旋转解决方案之间进行选择。

步骤大致如下:

  • 估计 4 种可能的解决方案
  • 所有内点的 3D 三角剖分
  • Cheirality check:基本上检查三角点是否在两个相机前面(opencv坐标系的正z坐标)
  • 选择一个解决方案并将所有未通过手性检查的内点标记为异常值。

因此,在手性检查期间似乎出了点问题。您实际上可以很容易地自己实现 RecoverPose。您可以检查我在当前项目中是如何做到的(查找 DecomposeEssentialMat):https ://github.com/makra89/Visual-Odometry-Cpp/blob/master/src/Utils/src/ImageProcessingUtils.cpp

于 2021-03-14T15:13:08.930 回答