【问题标题】:OpenCV stereo calibration has low re-projection error but is incorrectOpenCV 立体校准具有低重投影误差但不正确
【发布时间】:2016-05-13 08:48:12
【问题描述】:

几个月来,我一直试图让 OpenCV 相机校准工作,但到目前为止我一直没有成功。我的重投影误差很低(低于 0.5 像素),但是当我检查stereoRectify 输出的图像时,它们显然没有正确纠正。对应点未水平对齐。校正的显着效果是稍微旋转一张图像并放大另一张图像。校正生成的视差图有噪声并且根本不正确(同时使用 StereoSGBM 和 StereoVar)。

我尝试使用几组不同的校准图像,范围从 20 到 80 帧。我尝试了棋盘大小、距离和旋转的各种组合,但都无济于事。在每种情况下,我都会得到不同的结果,但都是上述类型的无用视差图。

MATLAB 立体校准在相同的视频上产生很多更好的结果,但遗憾的是,在我的情况下,MATLAB 不能作为长期解决方案。 我不明白为什么 OpenCV 认为它找到了一个很好的立体校正,而它显然不是。我是否缺少有关如何校准相机的信息?有没有其他人遇到过这样的问题?

【问题讨论】:

    标签: c++ opencv camera-calibration matlab-cvst stereo-3d


    【解决方案1】:

    您是否在 MATLAB 和 OpenCV 中使用相同的图像进行校准?另外,你在MATLAB中使用Stereo Camera Calibrator app吗?

    如果您使用完全相同的校准图像,那么您所看到的可能解释是 MATLAB 中的棋盘检测器比 OpenCV 中的检测器更准确。

    如果您使用不同的校准图像,那么我会尝试使用 undistort 函数在 OpenCV 中消除图像失真,而不是对其进行校正。可能的是,未失真的图像看起来会非常扭曲和折叠。这与较低的重投影误差一起表明您无法很好地估计镜头失真。通常,当您的棋盘大部分位于图像的中间,并且您没有得到任何靠近边缘的点时,就会发生这种情况。此处的补救措施是在棋盘靠近图像的边缘和角落的情况下获取更多图像。

    【讨论】:

    • 我没有在 MATLAB 中使用该应用程序,是的,我使用的是相同的图像。我不完全确定你在建议我做什么......如果这是你的建议,我已经在使用 OpenCV 的 stereoRectify 来做不失真。
    • 我已经编辑了答案。我建议使用undistort 函数来使图像不失真而不是纠正它们。这可能会使问题更加明显。如果您不使用 MATLAB 应用程序,您在 MATLAB 中使用什么进行校准?
    • 感谢您的帮助,但我发现问题与视频压缩有关。在尝试了几种视频格式后,我发现 HFYU 出于某种原因让事情变得正常!
    • @Dima,您是否知道 MATLAB 中的棋盘检测器与 OpenCV 中的 findCorners 和cornerSubPix 组合有何不同?为什么说 MATLAB 更准确? (如果您愿意,我可以在 Signal Processing Stack Exchange 中提问)
    • @GregKramida、MATLAB 中的 detectCheckerboardPoints 和 OpenCV 中的 findChessboardCorners 使用完全不同的算法。 MATLAB 函数更有可能在图像中找到棋盘格,并且可以更精确地定位点。你可以自己测试一下。要测试稳健性,只需拍摄一些棋盘的图像,然后查看哪个函数检测到更多的棋盘。为了测试定位精度,使用每个函数检测点,然后在 MATLAB 中使用estimateCameraParameters() 进行校准。然后比较重投影误差。
    【解决方案2】:

    鉴于它在 MATLAB 中运行,我假设您的立体相机设置正确,这意味着它们是完全固定的。 我想到的是:您是否单独校准了相机?因此,您可以从那里使用 stereoRectify 中的相机矩阵和失真系数。 另外,我注意到 findChessboardCorners 在图像质量低时表现不佳。但这会导致高 RMS 误差。无论如何,您不仅应该拥有相当多的图片(我使用了 100 张),而且还应该拥有校准板与相机的不同角度。并且电路板与摄像机的距离不应太高,以便电路板覆盖大部分图像。 (由于两个摄像头都需要完全可见电路板,因此我使用了预览来调整位置。)这并不能真正回答您的问题,但我希望它有所帮助。

    【讨论】:

    • 我没有单独校准相机,但自从将它添加到我的代码中后,我只遇到了更多问题,主要是缩放和裁剪是 stereoRectify 唯一明显的效果。感谢您的建议,但它不认为工作。 :(
    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 2017-10-08
    • 2015-03-29
    • 2017-10-05
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多