gpt4 book ai didi

opencv - 使用 OpenCV cvStereoCalibrate 校准一对具有不同分辨率的相机时出现较大的重投影错误

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:40 24 4
gpt4 key购买 nike

我已经尝试使用 OpenCV 的 cvStereoCalibrate 函数来校准一对立体相机。它在校准一对具有相同分辨率的相机时工作正常。但是当我试图校准一对分辨率非常不同的相机时(右图大约是左图的 10 倍)。我得到了很大的重投影错误,结果不是很有意义。

下面是我在程序中调用 cvStereoCalibrate 的部分代码:

rpErr = cvStereoCalibrate( &_objectPoints, &_imagePoints1,
&_imagePoints2, &_npoints,
&_M1, &_D1, &_M2, &_D2,
imageSize, &_R, &_T, &_E, &_F,
cvTermCriteria(CV_TERMCRIT_ITER+
CV_TERMCRIT_EPS, 100, 1e-5),
CV_CALIB_ZERO_TANGENT_DIST);

如果也试过

rpErr = cvStereoCalibrate( &_objectPoints, &_imagePoints1,
&_imagePoints2, &_npoints,
&_M1, &_D1, &_M2, &_D2,
imageSize, &_R, &_T, &_E, &_F,
cvTermCriteria(CV_TERMCRIT_ITER+
CV_TERMCRIT_EPS, 100, 1e-5),
);

我没有改进结果。

有没有人遇到过类似的问题?有什么问题吗?

最佳答案

我首先使用 cvCalibrateCamera2 对每个相机进行了单独的内部校准,然后使用 cvStereoCalibrate 的输出(带有参数 CV_CALIB_FIX_INTRINSIC)。这给了我很小的重投影误差和非常有意义的结果。

看来没有必要调整大图的大小。在 cvStereoCalibrate 中,我们可以将 imageSize 设置为一个相机图像的大小。由于此参数仅对内部相机校准中的初始化有用(根据 openCV 文档),如果使用参数 CV_CALIB_FIX_INTRINSIC 调用 cvStereoCalibrate,则不会使用该参数。

下面是部分代码

rpErr_intrinsic1 =cvCalibrateCamera2(&_objectPoints, &_imagePoints1, &_npoints, imageSize1, &_M1, &_D1, NULL, NULL,
CV_CALIB_ZERO_TANGENT_DIST);

rpErr_intrinsic2 = cvCalibrateCamera2(&_objectPoints, &_imagePoints2, &_npoints, imageSize2, &_M2, &_D2, NULL, NULL,
CV_CALIB_ZERO_TANGENT_DIST);

rpErr = cvStereoCalibrate( &_objectPoints, &_imagePoints1, &_imagePoints2, &_npoints, &_M1, &_D1, &_M2, &_D2, imageSize, &_R, &_T, &_E, &_F, cvTermCriteria(CV_TERMCRIT_ITER+ CV_TERMCRIT_EPS, 100, 1e-5), CV_CALIB_FIX_INTRINSIC+ CV_CALIB_ZERO_TANGENT_DIST);

关于opencv - 使用 OpenCV cvStereoCalibrate 校准一对具有不同分辨率的相机时出现较大的重投影错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23213930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com