OpenCV:PNP姿势估计在特定情况下失败

OpenCV:PNP姿势估计在特定情况下失败,opencv,pose-estimation,Opencv,Pose Estimation,我正在使用OpenCV的solvePnPRansac函数来估计我的相机的姿势,给定一个由跟踪特征组成的点云。我的管道由多个摄影机组成,其中我从两个摄影机之间的匹配特征形成点云,并使用该点云作为参考来估计其中一个摄影机开始移动时的姿势。我已经在多种设置下测试过,只要有足够的功能在相机运动时跟踪,它就可以工作 奇怪的是,在我今天做的一个测试中,我遇到了一个失败案例,solvePnP总是返回垃圾值。这里让人困惑的是,在这个数据集中,我的点云密度更高,它从两个视图中非常精确地重建,在任何给定时间点的跟踪

我正在使用OpenCV的solvePnPRansac函数来估计我的相机的姿势,给定一个由跟踪特征组成的点云。我的管道由多个摄影机组成,其中我从两个摄影机之间的匹配特征形成点云,并使用该点云作为参考来估计其中一个摄影机开始移动时的姿势。我已经在多种设置下测试过,只要有足够的功能在相机运动时跟踪,它就可以工作

奇怪的是,在我今天做的一个测试中,我遇到了一个失败案例,solvePnP总是返回垃圾值。这里让人困惑的是,在这个数据集中,我的点云密度更高,它从两个视图中非常精确地重建,在任何给定时间点的跟踪数量(当前可见特征与点云中的特征)都比我通常拥有的要高,所以理论上,这对solvePnP来说应该是轻而易举的事,但它失败得很惨

我尝试了CV_迭代、CV_EPNP,甚至是solvePnP的非RANSAC版本。我只是想知道我是否缺少一些基本的东西?我所看到的场景可以在这些图像中看到(图1是两个透视图之间的场景和特征匹配,图2是供参考的点云)

执行PNP的代码部分非常简单。如果P3D是跟踪的3D点阵列,则P2D是对应的图像点集

solvePnpRansac(P3D, P2D, K, d, R, T, false, 500, 2.0, 100, noArray(), CV_ITERATIVE);
编辑:我还应该提到,我的参考Poinclud是在相机之间8英尺的基线下获得的,而我所看到的建筑可能离我100英尺远。可能缺乏差异也会导致问题吗