代码之家  ›  专栏  ›  技术社区  ›  anti

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

  •  1
  • anti  · 技术社区  · 7 年前

    我在一个图像数据集上运行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);
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   bennyk    7 年前

    我在无人机拍摄图像时遇到了类似的问题,有时Y值(相机视线轴,在我的例子中是高度轴)低于地面。如果你考虑一个平面视图(或接近平面),有两种可能的y解决方案:在平面之前和远离平面(在我的例子中是在地面之下)。因此,两者都是法律解决方案。

    推荐文章