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