问题描述
使用 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