立体标定和矫正所需的最少棋盘图像数量

5

为了数学校准和矫正两个相机,最少需要多少个棋盘图像对?一对被认为是每个相机对棋盘的单个视图,以同一场景的左右图像结束。据我所知,立体校准只需要一对,因为它寻求两个相机之间的关系。

2个回答

6
立体校准不仅寻求两个相机之间的旋转和平移,还需要每个相机的内部和畸变参数。您需要至少两张图像分别对每个相机进行校准,以获取内部参数。如果您已经分别对每个相机进行了校准,那么是的,您可以使用一对棋盘图像来获取R和t。但是,您将无法获得非常好的精度。
作为经验法则,您需要10-20对图像。您需要足够的图像来覆盖视场,并具有良好的板块三维方向分布。
要校准一对立体相机,您首先需要分别校准两个相机,然后再对两个相机的参数以及它们之间的旋转和平移进行另一个联合优化。因此,一对图像将不起作用。
编辑:OpenCV、Caltech校准工具箱和MATLAB计算机视觉系统工具箱中使用的相机校准算法基于Zhengyou Zhang的工作。他的论文比我讲得更好。
这里的关键问题在于棋盘上的点是共面的,形成了一种退化的配置。你无法仅使用一个平面棋盘视图来解决内参问题。你需要多个视角,在不同的三维方向上放置棋盘。当棋盘处于平行平面上时,这些视角并没有提供任何额外信息。

如果我可以的话,有几点观察。已知固有参数为4个(fx、fy、cx、cy),我们还有5个畸变参数:三个用于径向(k1、k2、k3)畸变和两个用于切向(p1、p2)畸变。空间不允许我详细说明它们,但重点是固有参数与棋盘所在空间的3D几何形状相关联;畸变参数与几何图案的2D几何形状如何扭曲相关联,因此我们分别处理这两个类别(我们不将所有内容添加到同一个方程系统中)。请参见下一个评论 :) - Chris
一张有3个角的图像可以提供6个信息,可用于解决内部和畸变问题。唯一剩下的问题是处理外部参数。一个视图有3个旋转参数(每个轴都有)和3个平移参数(同样是每个轴),总共为6个。这将在与4个内部参数相同的方程系统中相加,给我们10个总参数来解决。棋盘的任何视图都不能拥有超过4个角的信息(即使您提供更多也没有意义),这给我们提供了8个信息。 - Chris
因此,在一个视图中,我们缺少两个信息来解决整个10参数系统。但是到目前为止,我所说的都是针对单个相机校准的。当我们有两个时,就像我们的情况一样,因为它是立体声的,每个同时快照的信息都会加倍。而且,立体声校准与单个相机校准不同。立体声寻求相机之间的关系而不是它们在空间中的位置。因此,我的判断是,使用两个相机拍摄的一张快照足以进行立体声校准。非常重要的一点是,两个相机必须完全相同,同一类型,这在我的情况下是成立的。 - Chris
我仍然不明白为什么在一个纯抽象的数学解决方案中,一切都是完美的,独角兽是真实存在的,我需要更多的东西 :)。显然,考虑到背后的数学噪声和数值稳定性,我们倾向于采取10-20,甚至像你说的那样更多来获得良好的校准结果,但我想问的是,从数学上讲,两个相机的一个快照是否足以进行校准。 - Chris
@Chris,我已经编辑了我的回答。请查看张正友的论文以获取更多信息。 - Dima
显示剩余2条评论

0

“一张有3个角的图像可以提供6个信息,可用于解决内部和畸变问题。”

我认为这是您的主要错误。这些角不是独立的。在您的完美世界中,具有100x100棋盘格图案的模式并不比10x10模式提供更多信息,因为这些点在同一平面上。

如果您只有一个棋盘的单视图,通过调整焦距可以弥补更接近棋盘的距离,以便您(即使在您的完美世界中)也无法校准相机的内部和外部参数。


我从未说过你可以在一个视图中获得比另一个更多的信息。一个棋盘视图只能给你提供不超过4个角落的信息。因为4个点就足以表达平面透视。这基本上是8个参数(x,y)对。即使你有100x100或10x10,你也会得到相同的最大信息量,你是完全正确的,而且我从未说过这不是真的。 - Chris
你可以通过两个相机对棋盘的两张图像(每个相机一张)获取相对位姿,但是仅凭单张图像(即使没有畸变),你永远无法计算出内部标定。 - FooTheBar
你能解释一下你的理由吗? :/ 我只是试图解释为什么可以这样做。内在参数有4个(fx,fy,cx,cy)。一张图片可以为您提供更多信息以解决此方程组。 - Chris
如果您只有一个视角图案,如何判断使用长焦镜头的相机所拍摄的图案是否远离您,或者使用标准镜头时是否更接近? - FooTheBar
1
你的问题出在哪里?你有10个参数需要估计,而你自己说每个视角只能获得4个角落的信息。 - FooTheBar
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接