opencv-solvePnP,除了Y,所有轴看起来都很棒



我正在一个图像数据集上运行solvePnPRansac,该数据集具有二维特征点和三角化的三维地标点。它运行得很好,在旋转、前轴和横轴上的结果看起来都很棒。然而,Y轴是完全错误的。

我正在根据数据集的实际情况测试输出,它会在应该下降的地方上升,并很快偏离实际情况。其他轴锁定的时间要长得多。

这让我觉得很奇怪,它怎么可能对其他轴是正确的,而对一个轴是错误的?当然这是不可能的,我会认为要么每一个轴都是坏的,要么每一条轴都是好的。

我可能做错了什么才让这一切发生?我该如何调试这种怪异?我的PnP代码非常标准:

cv::Mat inliers;
cv::Mat rvec = cv::Mat::zeros(3, 1, CV_64FC1);      
int iterationsCount = 500;        // number of Ransac iterations.
float reprojectionError = 2.0; //2.0   // maximum allowed distance to consider it an inlier.
float confidence = 0.95;          // RANSAC successful confidence.
bool useExtrinsicGuess = false;
int flags = cv::SOLVEPNP_ITERATIVE;
int num_inliers_;
//points3D_t0
cv::solvePnPRansac(points3D_t0, points_left_t1, intrinsic_matrix, distCoeffs, rvec, translation_stereo,
useExtrinsicGuess, iterationsCount, reprojectionError, confidence,
inliers, flags);

我在无人机拍摄图像时遇到了类似的问题——有时Y值(相机视线轴——在我的情况下是高度轴(在地面以下。如果你仔细想想,对于平面视图(或靠近平面(,有两种可能的"y"解决方案:在平面之前和远离平面(在我的情况下是在地面下面和下面(。所以两者都是合法的解决方案。

相关内容

  • 没有找到相关文章

最新更新