欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

相机校准原理介绍 (I)

最编程 2024-04-07 15:12:49
...
那为什么要做相机标定呢?
【1】进行摄像机标定的目的求出相机的内、外参数,以及畸变参数
【2】标定相机后通常是想做两件事:一个是由于每个镜头的畸变程度各不相同,通过相机标定可以校正这种镜头畸变矫正畸变,生成矫正后的图像;另一个是根据获得的图像重构三维场景
      摄像机标定过程,简单的可以简单的描述为通过标定板,如下图,可以得到n个对应的世界坐标三维点Xi和对应的图像坐标二维点xi,这些三维点到二维点的转换都可以通过上面提到的相机内参K,相机外参Rt,以及畸变参数D,经过一系列的矩阵变换得到。
 

七.标定内幕过程的分析:

1.假设有N个角点和K个棋盘图像(不同位置),需要多少个视场和角点才能提供足够的约束来求解这些参数呢?

K个棋盘,可以提供2NK的约束,即2NK的方程。(乘以2是因为每个点都由x和y两个坐标值组成)

忽略每次的畸变,那么我们需要求解4个内参数和6K个外参数。(因为对于不同的视场,6个外参数是不同的)

那么有解的前提是方程的总数应该大于等于未知参数的总数即2NK>=6K+4,或者写成(N-3)K>=2。

为了方便理解,下图是一个3×3大小的棋盘,红色圈标记出了它含有的内角点:

如果我们令N=5,K=1,带入到上述不等式,是满足不等式,这就是意味着我们仅需要一个视场和带有5个内角点的棋盘就可以求解出10个参数了。其实不然,为了描述投影视场的所有目标只需要4个点,即一次性在四个方向上延展正方形的边,把它变成任意四边形。因此,无论一个平面上检测到多少个角点,我们只能得到4个有用的角点信息。如上图所示是一个3×3大小的棋盘,有4个内角点。对于每一个视场,我们仅能给出4个有用的角点信息,那么上述的公式中N就约束为4,即公式变为(4-3)K>=2,即K>=2。即要求解10个参数最少需要两个视场。考虑到噪声和数值稳定性要求,对大棋盘需求收集更多的图像。为了得到高质量结果,至少需要10幅7×8或者更大棋盘的图像(而且只在移动棋盘在不同图像中足够大以从视场图像中得到更加丰富的信息)。

2.数学是怎么应用于标定的?

OpenCV选着那些能够很好工作于平面物体的方法。OpenCV中使用的求解焦距和偏移的算法是基于张的方法,但求解畸变参数则是另外一个基于Brown的方法。

(1)首先我们假定求解标定参数时,摄像机没有畸变。对于每一个棋盘视场,我们得到一个前面描述的单应性矩阵H,大小为3×3。将H写成列向量的形式,即H=[h1 h2 h3],每个h是3×1向量,单应性矩阵H是物理变换(旋转、平移)和相机内参数组成。我们的目的就是分解这个H,能够从中分解出这些成分。


M是摄像机内参数矩阵,r1,r2是旋转矢量3×1,t是平移矢量,缩放因子s,对应项相等得到如下:

          λ=1/s

我们知道R=[r1,r2,r3],r3消失,是因为我们另Z=0。R是一个正交阵,即R的转置等于R的逆。正交阵的每个列向量是两两正交且单位化的(即模为1),那么r1和r2是相互正交。

正交的含义有两个:两个矢量的点积为0,两个矢量的长度相等。下面我们就用这两个约束来进行求解。


我们将r1和r2带入到上述的公式得:


令:

展开有:

 

其中M公式如下:

(注意:这里的cx、Cy相当于上面的U0、V0

将M带入公式,可以得到矩阵B的通用形式的封闭解:



这里重新写一下两个约束:


由于B是对称真,那么B可以仅有对角线下半元素或者对角线上半元素表示,即可以有6个元素表示。我们将通用形式展开,并且提取出B成分,那么通用形式可以写成含有旋转成分和含有B成分的6个元素组成的向量的点积(注意:是点积,不是两个矩阵相乘),如下:


从上述公式,我们已知单应性矩阵H,那么它其中的每一个元素我们都是已知的,那么上述Bij是我们要求解的值,

我们可以组合两个约束为如下的形式:

每一个视场我们可以得到形如上面描述的2个公式(上述黄色部分),那么对于K的视场,我们可以得到2K个这样的公式。

我们堆积这些方程有:

b是要求解未知数矢量大小为6×1,V是2K×6的矩阵,如果K>=2,那么方程有解b=[B11,B12,B22,B13,B23,B33]T。摄像机内参数可以从B矩阵的封闭解中直接得到

外参数(旋转和平移)可以由单应性条件计算得到:

上述公式中,λ,M,H,都是求解的得到的作为已知量,(r3=r1×r2,这是因为r1,r2,r3两两正交)。

需要小心的是,当我们使用真实的数据求解时,将计算得到的r向量放在一起(R=(r1,r2,r3)),我们并不能得到精确的旋转矩阵R,使得R为正交阵。

为了解决这个问题,我们常使用强制的方法,即对R进行奇异值分解,R=UDVT,U,V为正交阵,D为对角阵,如果R是正交阵,那么奇异值分解后的对角阵D是单位阵,那么我们将单位阵I代替对角阵D,进而重构出满足正交条件的R.

(2)在前面的工作中,我们总是先忽略透镜畸变,然后求解得到的系统。如果针孔模型是完美的,令(xp,yp)为点的位置,令(xd,yd)为畸变的位置,那么有: