opencvsolvePnP,除Y之外所有轴看起来都很棒

时间:2018-07-30 16:29:38

标签: opencv opencv-solvepnp

我正在具有2d特征点和3d三角地标点的图像数据集上运行resolvePnPRansac。它运行得很好,并且旋转的结果以及在前轴和侧轴上看起来都很棒。但是,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);

1 个答案:

答案 0 :(得分:0)

我在用无人机拍摄图像时遇到了类似的问题-有时Y值(相机视线轴-在我的情况下为高度轴)在地面以下。如果您考虑一下-对于平面视图(或接近平面),有两种可能的“ y”解决方案:在平面之前和远离平面(在我的情况下,在地下和地下)。因此,两者都是合法的解决方案。