相机标定原理

之前写过一篇文章怎么使用Opencv进行相机标定,但没有详叙原理,这里从原理上面入手,分析下标定算法原理。

1:相机成像原理
首先了解四个坐标系:
像素平面坐标系(u,v)、像平面坐标系(图像物理坐标第(x,y)、相机坐标系(Xc,Yc,Zc)和世界坐标系(Xw,Yw,Zw)
相机标定原理_第1张图片

图像像素坐标系(u,v)是以图像左上角为原点,以像素为单位的直角坐标系,u,v表示像点所在的行和列。
图像物理坐标系(x,y)是以光轴与像平面的交点为原点,以毫米为单位的直角坐标系。其x,y轴分别与图像像素的u,v轴平行。
像素坐标与像平面坐标系之间的关系 :
这里写图片描述
dx,dy表示每个像元的长宽,u0和v0表示光轴与像平面的交点。
用齐次坐标与矩阵形式可表示为:
相机标定原理_第2张图片

相机坐标系这里写图片描述
相机坐标系的原点为镜头光心;Zc轴与光轴重合,与成像面垂直,且取摄影方向为正方向;Xc、Yc轴与图像物理坐标系的x、y轴平行;图中Oco为相机焦距f。
所以在相机坐标系空间某点M(Xc,Yc,Zc)与其在图像上投影m(x,y)之间有如下的比例关系:
这里写图片描述
齐次坐标和矩阵形式表示上述透视投影关系:
相机标定原理_第3张图片
结合上面的像素平面与图像平面的关系,可得空间点M与像点m的像素坐标之间的变换关系:
相机标定原理_第4张图片
这里写图片描述 分别代表以x轴和y轴方向上的像素为单位表示的等效焦距。另外在较高精度的相机模型中引入一个参数这里写图片描述 表示在图像平面中以像素为单位的坐标轴倾斜程度的量度,角度表示相机CCD阵列v轴的倾斜角度。
则式子可改写为:
相机标定原理_第5张图片
式中五个参数表示相机内参数。

世界坐标系这里写图片描述 是用户定义的三维空间参考坐标系,用于描述相机和物体的位置。
世界坐标系中的点到相机坐标系的变换过程可有一个旋转变换矩阵R和一个平移变量t来描述。设空间中某点M在世界坐标系和相机坐标系下的齐次坐标分别是这里写图片描述 ,这样就存在一下关系:
相机标定原理_第6张图片
其中,R为3x3正交单位矩阵,t为三维平移向量,0=[0 0 0]T。
上述关系表示世界坐标系中点M先作旋转再作平移,变换至相机坐标系。相机标定原理_第7张图片
平移向量中的3个平移量加上旋转矩阵的三个旋转角度共6个参数,也叫6自由度决定了相机光轴在世界坐标系中的空间位置和取向。这6个参数为相机的外部参数。

这样空间中点M在像素坐标系上的点的关系为:
相机标定原理_第8张图片

可简写成这里写图片描述

其中:这里写图片描述这里写图片描述 分别是空间点和像点的齐次坐标,s为一尺度因子,[R t]称为外部参数矩阵,A称为内部参数矩阵。
这里写图片描述

P = A[R t] 为3x4不可逆矩阵,称为投影矩阵。
可见,如果已知相机的内外参数,就可以确定投影矩阵P。对于空间任何点M,如果已知它的坐标这里写图片描述 就可以求出对应像点m的位置(u,v),这是因为已知P和M时,可以根据上面的公式求出(u,v)。反之,如果已知空间点M的像点位置m(u,v),即使已知内外参数也不能确定M的三维坐标。这是由于矩阵P的不可逆性,有尺度因子s存在。

2:求解内外参数
因为标定物是平面,所以我们可以把世界坐标系构造在Z=0的平面上。然后进行单应性计算。令Z=0可以将上式转换为如下形式:相机标定原理_第9张图片

既然,此变化属于单应性变化。那么我们可以给A[r1 r2 t]一个名字:单应性矩阵。并记H= A[r1 r2 t]。
这里写图片描述
H是一个三3*3的矩阵,并且有一个元素是作为齐次坐标。因此,H有8个未知量待解。
(x,y)作为标定物的坐标,可以由设计者人为控制,是已知量。(u,v)是像素坐标,我们可以直接通过摄像机获得。对于一组对应的(x,y)-à(u,v)我们可以获得两组方程。
现在有8个未知量需要求解,所以我们至少需要八个方程。所以需要四个对应点。四点即可算出,图像平面到世界平面的单应性矩阵H。这也是张氏标定采用四个角点的棋盘格作为标定物的一个原因。 在这里,我们可以将单应性矩阵写成三个列向量的形式,即:
这里写图片描述
从上面可知,应用4个点我们可以获得单应性矩阵H。但是,H是内参阵和外参阵的合体。我们想要最终分别获得内参和外参。所以需要想个办法,先把内参求出来。然后外参也就随之解出了。我们可以仔细的“观摩”一下下面的式子。
这里写图片描述
从中可以得出下面两个约束条件,这两个约束条件都是围绕着旋转向量来的。
1、r1,r2正交 得:r1r2=0。这个很容易理解,因为r1,r2分别是绕x,y轴旋转的。应用高中立体几何中的两垂直平面上(两个旋转向量分别位于y-z和x-z平面)直线的垂直关系即可轻松推出。
2、旋转向量的模为1,即|r1|=|r2|=1。这个也很容易理解,因为旋转不改变尺度嘛。如果不信可以回到上一篇博客,找到个方向的旋转矩阵化行列式算一下。
通过上面的式子可以将r1,r2代换为h1,h2与A的组合进行表达。即这里写图片描述.根据两约束条件,可以得到下面两个式子:
这里写图片描述
式子中,h1,h2是通过单应性求解出来的那么未知量就仅仅剩下,内参矩阵A了。内参阵A包含5个参数:α,β,u0,v0,γ。那么如果我们想完全解出这五个未知量,则需要3个单应性矩阵。3个单应性矩阵在2个约束下可以产生6个方程。这样可以解出全部的五个内参了。大家想一下,我们怎样才能获得三个不同的单应性矩阵呢?答案就是,用三幅标定物平面的照片。我们可以通过改变摄像机与标定板间的相对位置来获得三张不同的照片。(当然也可以用两张照片,但这样的话就要舍弃掉一个内参了γ=0)
到这里,大家应该就明白我们在张氏标定法时为什么要不断变换标定板的方位了吧。当然这只是一个原因。

下面在对我们得到的方程做一些数学上的变化,这些变化都是简单的运算变化了。
首先令:
相机标定原理_第10张图片
很容易发现B是一个对称阵,所以B的有效元素只剩下六个(因为有三对对称的元素是相等的,所以只要解得下面的6个元素就可以得到完整的B了),让这六个元素构成向量b。
这里写图片描述
接下来在做一步纯数学化简:
这里写图片描述
可以计算得:
这里写图片描述
利用约束条件可以得到下面,方程组:
这里写图片描述
这个方程组的本质和前面那两个用h和A组成的约束条件方程组是一样的。通过至少含一个棋盘格的三幅图像,应用上述公式我们就可以估算出B了。得到B后,我们通过cholesky分解 ,就可以轻松地得到摄像机的内参阵A。

基于内参阵估算外参阵
通过上面的运算,我们已经获得了摄像机的内参阵。那么对于外参阵,我们很容易通过下面的公式解得:
这里写图片描述
对上面公式进行化简,可以得到:
相机标定原理_第11张图片

你可能感兴趣的:(OpenCV)