OpenCV 从基本矩阵 E

问题描述

使用 Opencv 3.0,我得到了具有函数的本质矩阵:

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

看掩码值,内点的数量真的很高。

在我使用了recoverPose函数之后:

recoverPose(E,points2,R,t,mask);

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

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

非常感谢!

解决方法

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

大致步骤如下:

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

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