我正在使用标准 OpenCV 函数来校准相机的内在参数。为了获得好的结果,我知道我们必须使用不同角度的棋盘图像(考虑 3D 中的不同平面)。这在所有文档和论文中都有说明,但我真的不明白,为什么考虑不同的平面对我们来说如此重要,以及我们是否必须考虑最佳数量的平面才能获得最佳校准结果?
如果您能给我提供一些解释这一点的论文或文档的参考资料,我会很高兴。(我认为张的论文谈到了它,但是它在数学上很密集,很难消化。)
谢谢
我正在使用标准 OpenCV 函数来校准相机的内在参数。为了获得好的结果,我知道我们必须使用不同角度的棋盘图像(考虑 3D 中的不同平面)。这在所有文档和论文中都有说明,但我真的不明白,为什么考虑不同的平面对我们来说如此重要,以及我们是否必须考虑最佳数量的平面才能获得最佳校准结果?
如果您能给我提供一些解释这一点的论文或文档的参考资料,我会很高兴。(我认为张的论文谈到了它,但是它在数学上很密集,很难消化。)
谢谢
从数学上讲,只有当您拥有 3 个或更多平面目标的不同图像时,才能定义内在参数(按比例)的唯一解。参见 Zhang 的论文第 6 页:“如果观察到模型平面的 n 个图像,通过堆叠 n 个等式,如 (8) 我们有 Vb = 0 ; (9) 其中 V 是一个 2n×6 矩阵。如果 n ≥ 3,一般来说,我们将有一个独特的解决方案 b 定义为一个比例因子......”
没有“最佳”数量的飞机,就数据而言,你拥有的越多,你就越快乐。但是随着解决方案开始收敛,由于添加额外图像而导致的校准精度的边际增益变得可以忽略不计。当然,这假设图像显示的平面在姿势和位置上都分离得很好。
另请参阅我的其他答案以获取实用提示。
如果您正在寻找一点直觉,这里有一个例子说明为什么一架飞机是不够的。想象一下,您的校准棋盘正以 45° 角远离您:
可以看到,当你在 +y 方向上将棋盘向上移动 1 米时,你也会在 +z 方向上远离相机 1 米。这意味着无法区分在 y 方向和 z 方向上移动的效果。对于我们所有的训练点,y 和 z 移动方向有效地相互关联。所以,如果我们只看这个平面上的点,就无法区分 y 运动与 z 运动的影响。
例如,从这 1 个平面来看,我们无法区分这些场景:
在数学上,这种模糊性意味着当 OpenCV 试图拟合相机矩阵以匹配数据时,有许多同样可能的解决方案。(请注意,45° 角并不重要。您选择的任何平面都会遇到同样的问题:训练示例的 (x,y,z) 维度是耦合在一起的,因此您无法将它们的效果分开。)
最后一点:如果您对相机矩阵做出足够的假设(例如,没有透视失真,x 和 y 缩放相同等),那么您最终可能会遇到未知数较少的情况(在极端情况下,也许您只是在计算焦距),在这种情况下,您可以仅使用 1 个平面进行校准。