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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...