【问题标题】:Does a smaller reprojection error always means better calibration?较小的重投影误差是否总是意味着更好的校准?
【发布时间】:2012-08-08 17:43:34
【问题描述】:

在相机校准过程中,通常的建议是使用多张 (>10) 位姿、深度等变化的图像。 但是我注意到,通常我使用的图像越少,重投影误差就越小。例如,对于 27 张图像,cv::calibrateCamera 返回 0.23,只有 3 张我得到 0.11 这可能是因为在校准过程中,我们正在解决超定系统的最小二乘问题。

问题:

  1. 我们是否真的使用重投影误差作为校准好坏的绝对量度?比如我用3张图片校准得到0.11,然后用另外27张图片校准得到0.23,我们真的可以说“第一次校准更好”吗?

  2. OpenCV 使用相同的图像进行校准和计算误差。这不是某种形式的过拟合吗?如果我实际上使用了 2 个不同的集合——一个用于计算校准参数,一个用于计算误差——不是更正确吗?在这种情况下,我将使用相同的(测试)集来计算来自不同(训练)集的所有校准结果的误差。这不是更公平吗?

【问题讨论】:

    标签: opencv camera-calibration


    【解决方案1】:

    抱歉,太晚了 - 刚刚才看到。

    错误是拟合的重投影。因此,在图像上找到点,计算真实世界模型,重新计算这些点在给定模型的图像上的位置 - 报告差异。在某种程度上,这有点循环,你可能有一个模型只对那些少数图像是正确的,然后会报告一个非常好的错误,同时给它很多图像会产生一个更普遍正确的模型 - 但会有更大的错误,只是因为您试图将其拉伸以适应更大的空间。

    确实有一点,添加更多图像并不能提高拟合度,并且可能会增加噪音,因为点永远不会被完美地检测到。重要的是提供更大的参数集、更多的角度和位置,而不是等价的数据

    使用相同的图像集来预测误差并不是真正的问题,因为就实际的物理镜头参数而言,拟合确实具有真正的意义 - 这不像在相同的数据上训练/测试神经网络。

    edit:3D-DIC中包含比opencv更好的校准例程(尽管基于相同的概念)(免费但不是OSS,注册该站点以获得下载链接)具体参见calibration manual。

    【讨论】:

    • 感谢您的回复,现在还为时不晚,这是一个比较笼统的问题。如果我从您的第一段中理解正确,您是说有时相机模型恰好可以用一组(可能更少)图像更好地描述,对吗?另外,我的一个结论是,您可以使用重投影误差来确定校准是好(err = [0,1])还是坏(err> 1),但在区间 [0,1] 内你不能真正确保选择最小的将是最好的。你会说这是正确的,还是我完全错了?
    • 因为如果我没记错的话,当我得到一个只有 3 张图像的 0.11 误差(非常低),并且使用这些参数对图像进行未失真处理时,相比之下,未失真的结果不是很好27 张图片中的误差为 0.23。
    • 基于较少图像的相机模型会很好 - 但仅适用于那一小部分位置和角度。所以这是一个非常好的局部拟合,但不好的全局拟合。随着您添加更多图像(直至某一点),您会更接近全局拟合,但局部拟合可能会更差
    • 谢谢,明白了。我在寻找“完美校准”的过程中太过分了!
    • @Bob - 是的,这是一句老话:“带表的人知道时间,带两块表的人永远不确定”。 ps 查看答案中的更新链接
    猜你喜欢
    • 2017-10-08
    • 2015-03-12
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2021-03-09
    • 2017-01-02
    相关资源
    最近更新 更多