1

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

1 回答 1

0

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

于 2019-06-01T16:35:56.730 回答