OpenCV学习笔记(八) 相机标定

1. 相机内参

相机内参共有6个参数(f,κ,Sx,Sy,Cx,Cy),其中:

        f为焦距;

        κ表示径向畸变量级,如果κ为负值,畸变为桶型畸变,如果为正值,那畸变为枕型畸变。

        Sx,Sy是缩放比例因子。一般情况下相机成像单元不是严格的矩形的,其在水平和垂直方向上的大小是不一致的,这就导致在XY方向上的缩放因子不一样,所以需要分别定义两个缩放因子。  对针孔摄像机来讲,表示图像传感器上水平和垂直方向上相邻像素之间的距离;                      

        Cx,Cy是图像的主点,即过镜头轴心垂直于成像平面与图像平面的交点。对针孔摄像机来讲,这个点是投影中心在成像平面上的垂直投影,同时也是径向畸变的中心 。

2. 相机外参

    摄像机外参共有6个参数(α,β,γ,Tx,Ty,Tz),相机坐标与世界坐标的关系可以表述为:

                               Pc= RPw + T

     其中Pw为世界坐标,Pc是摄像机坐标。式中,T= (Tx,Ty,Tz),是平移向量,R =R(α,β,γ)是旋转矩阵,分别是绕摄像机坐标系z轴旋转角度为γ,绕y轴旋转角度为β,绕x轴旋转角度为α。6个参数组成(α,β,γ,Tx,Ty,Tz)为摄像机外参。

3. 相机标定方法

相机标定方法有:传统相机标定法、相机自标定法、主动视觉相机标定方法。

传统相机标定法需要使用尺寸已知的标定物,通过建立标定物上坐标已知的点与其图像点之间的对应,利用一定的算法获得相机模型的内外参数。根据标定物的不同可分为三维标定物和平面型标定物。三维标定物可由单幅图像进行标定,标定精度较高,但高精密三维标定物的加工和维护较困难。平面型标定物比三维标定物制作简单,精度易保证,但标定时必须采用两幅或两幅以上的图像。传统相机标定法在标定过程中始终需要标定物,且标定物的制作精度会影响标定结果。同时有些场合不适合放置标定物也限制了传统相机标定法的应用。

传统的相机标定方法的优点是可以使用于任意的摄像机模型,标定精度高,缺点是标定过程复杂,需要高精度的标定模板,在一些场合下无法使用标定块。

目前出现的自标定算法中主要是利用相机运动的约束。相机的运动约束条件太强,因此使得其在实际中并不实用。利用场景约束主要是利用场景中的一些平行或者正交的信息。其中空间平行线在相机图像平面上的交点被称为消失点,它是射影几何中一个非常重要的特征,所以很多学者研究了基于消失点的相机自标定方法。自标定方法灵活性强,可对相机进行在线定标。但由于它是基于绝对二次曲线或曲面的方法,其算法鲁棒性差。仅仅依靠多幅图像之间的对应关系进行标定,优点是仅需要建立图像之间的对应,灵活性强,潜在应用范围广,缺点是非线性标定,鲁棒性不高。

基于主动视觉的相机标定法是指已知相机的某些运动信息对相机进行标定。该方法不需要标定物,但需要控制相机做某些特殊运动,利用这种运动的特殊性可以计算出相机内部参数。基于主动视觉的相机标定法的优点是算法简单,往往能够获得线性解,故鲁棒性较高,缺点是系统的成本高、实验设备昂贵、实验条件要求高,而且不适合于运动参数位置或无法控制的场合。

主动视觉相机标定方法应用的前提是已知相机的某些运动信息,优点是可以线性求解,鲁棒性较好,缺点是不能使用与相机运动信息未知和无法控制相机运动的场合。

标定模板

标定模板(标定板 Calibration Target) 在机器视觉、图像测量、摄影测量、三维重建等应用中,为校正镜头畸变;确定物理尺寸和像素间的换算关系;以及确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,需要建立相机成像的几何模型。通过相机拍摄带有固定间距图案阵列平板、经过标定算法的计算,可以得出相机的几何模型,从而得到高精度的测量和重建结果。而带有固定间距图案阵列的平板就是标定模板(标定板 Calibration Target)。

常见标定模板种类

1)等间距实心圆阵列图案 Ti-times CG-100-D

 

 

 

2)国际象棋盘图案 Ti-times CG-076-T

 

    一般需要20张图片,这只是一个经验值,实际上太多也不好,太少也不好。单纯从统计上来看,可能越多会越好,但是,实际上图片太多可能会让参数优化的结果变差,因为棋盘格角点坐标的确定是存在误差的,而且这种误差很难说是符合高斯分布的,同时,标定过程所用的非线性迭代优化算法不能保证总是得到最优解,而更多的图片,可能会增加算法陷入局部最优的可能性。

拍照时的标定板位置和朝向的多样性,会让内参的估计更为准确。准确的内参可以较好地把整个图像的畸变都进行矫正,但如果给定的标定板的位置过于单一,比如都是在图像的左上角,那么优化得到的内参也可能只会比较好地纠正图像左上角的畸变。推荐找个畸变较大的镜头做做实验,会更形象。

世界坐标系、相机坐标系、图像坐标系

世界坐标系(XwYwZw

是由用户定义的空间三维坐标系,用来描述三维空间中的物体和相机之间的坐标位置,满足右手法则,世界坐标系是物理世界中反映物体位置的真实坐标。

 

 

相机坐标系(XcYcZc

以相机的光心作为原点,Zc轴与光轴重合,并垂直于成像平面,且取摄影方向为正方向,XcYc轴与图像物理坐标系的xy轴平行。

图像坐标系(uv)或(xy

是以图像的左上角为原点的图像坐标系(uv),以像素为单位,

 

 

4.相机标定

摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵的过程。

一般来说,标定的过程分为两个部分:

 

第一步是从世界坐标系转为相机坐标系,这一步是三维点到三维点的转换,包括Rt(相机外参,确定了相机在某个三维空间中的位置和朝向)等参数;

第二部是从相机坐标系转为成像平面坐标系(像素坐标系),这一步是三维点到二维点的转换,包括K(相机内参,是对相机物理特性的近似)等参数;

投影矩阵 P=K [ R | t ]    是一个3×4矩阵,混合了内参和外参而成。

摄像机畸变主要包含:镜像畸变、切向畸变。

 1.径向畸变:产生原因是光线在远离透镜中心的地方比靠近中心的地方更加弯曲径向畸变主要包含桶形畸变和枕形畸变两种。下面两幅图是这两种畸变的示意:

 

    2.切向畸变:产生的原因透镜不完全平行于图像平面,这种现象发生于成像仪被粘贴在摄像机的时候。下面图片来自于《学习opencv》p413。

 

 

1、径向畸变来自于透镜形状

2、切向畸变来自于整个摄像机的组装过程,是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的。

实际摄像机的透镜总是在成像仪的边缘产生显著的畸变,这种现象来源于“筒形”或“鱼眼”的影响。

对于径向畸变,成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越来越严重。

其中,αx=f/dX、αy=f/dY,称为uv轴的尺度因子,M1称为相机的内部参数矩阵,M2称为相机的外部参数矩阵,M称为投影矩阵。

5. 张定友标定

通过在图像上一个二维点m=[u,t]后加上一个1的向量,在相机坐标系中一个3DM=[X,Y,Z]后也加上一个1的向量,在针孔模型中,3DM和它的图像投影m的关系为:

 

 

 

 

其中内参A为:

 

1.单应性矩阵H

若定义H=A[R,t],有s*m=H*M,H就是通常说的单应性矩阵,在这里描述的是空间中平面三维点和相机平面二维点之间的关系,相机平面中的坐标点可以通过图像处理寻找角点的方式获取,空间平面三维点可以通过尺寸已知的标定板获取,所以说针对每张图图片都可以计算出来一个对应的H矩阵。

齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示,是指一个用于投影几何里的坐标系统,如同用于欧氏几何里的笛卡儿坐标一般。

下面是如何在普通坐标(Ordinary Coordinate)和齐次坐标(Homogeneous Coordinate)之间进行转换:

(1)从普通坐标转换成齐次坐标时

   如果(x,y,z)是个点,则变为(x,y,z,1);

   如果(x,y,z)是个向量,则变为(x,y,z,0)

(2)从齐次坐标转换成普通坐标时   

   如果是(x,y,z,1),则知道它是个点,变成(x,y,z);

   如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z)

由于齐次坐标使用了4个分量来表达3D概念,使得平移变换可以使用矩阵进行,从而如F.S. Hill, JR所说,仿射(线性)变换的进行更加方便。由于图形硬件已经普遍地支持齐次坐标与矩阵乘法,因此更加促进了齐次坐标使用,使得它似乎成为图形学中的一个标准。

为什么要引入齐次坐标来表示平移?

在计算机图形学中,坐标转换通常不是单一的,一个几何体在每一帧可能都设计了多个平移,旋转,缩放等变化,这些变化我们通常使用串接各个子变化矩阵的方式得到一个最终变化矩阵,从而减少计算量。所以我们需要将平移也表示为变化矩阵的形式。因此,只能引入齐次坐标系。

 

注意,尺度因子s对于齐次坐标来说,不会改变齐次坐标值。张氏标定法中,将世界坐标系狗仔在棋盘格平面上,令棋盘格平面为Z=0的平面。则可得

 

我们把K[r1, r2, t]叫做单应性矩阵H,即

 

4*4矩阵一般也叫齐次矩阵,主要有两个作用,描述平移变换,描述透视投影变换

射影变换也叫“单应”--Homography,“Homo”前缀就是same的意思,表示“同”(homosexual大家都知道),homography就是用同一个源产生的graphy,中文译过来大概就是"单应"。

因此上面式子中的矩阵H就叫单应性矩阵。上式中的x1和x2都是3*1的齐次坐标,因此H是一个3*3的矩阵:{h00,h01,h02;h10,h11,h12;h20,h21,h22}。

如果给定一个单应H={h_ij},给它的元素乘上同一个数a,得到的的单应a*H和H作用相同,因为新单应无非把齐次点x1变成了齐次点a*x1,都是一回事。因此我们可以把a换成1/h22,那么H就变成了只有8个自由元素的矩阵。

H是一个齐次矩阵,所以有8个未知数,至少需要8个方程,每对对应点能提供两个方程,所以至少需要四个对应点,就可以算出世界平面到图像平面的单应性矩阵H

https://cseweb.ucsd.edu/classes/wi07/cse252a/homography_estimation/homography_estimation.pdf

 

 

 

要求的变换矩阵就是h。对于每一个对应点组,都会有两行数据来与九行一列的矩阵h相乘。所以我们有四对点组,就会有八行九列的系数矩阵

对这个系数矩阵做奇异值分解,得到h

2、利用约束条件计算内参数矩阵

从上面可知,应用4个点我们可以获得单应性矩阵H。但是,H是内参阵和外参阵的合体。我们想要最终分别获得内参和外参。所以需要想个办法,先把内参求出来。然后外参也就随之解出了。我们可以仔细的观摩一下下面的式子。

 

从中可以得出下面两个约束条件,这两个约束条件都是围绕着旋转向量来的。

1r1,r2正交 得:r1Tr2=0。这个很容易理解,因为r1,r2分别是绕x,y轴旋转的。应用高中立体几何中的两垂直平面上(两个旋转向量分别位于y-zx-z平面)直线的垂直关系即可轻松推出。

  2、旋转向量的模为1,即||r1||=||r2||=1。这个也很容易理解,因为旋转不改变尺度。

 通过上面的式子可以将r1,r2代换为h1,h2A的组合进行表达。即 r1=h1A-1r2=h2A-1.根据两约束条件,可以得到下面两个式子:

 

式子中,h1,h2是通过单应性求解出来的那么未知量就仅仅剩下,内参矩阵A了。内参阵A包含5个参数:αβu0v0γ。那么如果我们想完全解出这五个未知量,则需要3个单应性矩阵。3个单应性矩阵在2个约束下可以产生6个方程。这样可以解出全部的五个内参了。大家想一下,我们怎样才能获得三个不同的单应性矩阵呢?答案就是,用三幅标定物平面的照片。我们可以通过改变摄像机与标定板间的相对位置来获得三张不同的照片。(当然也可以用两张照片,但这样的话就要舍弃掉一个内参了γ=0

到这里,大家应该就明白我们在张氏标定法时为什么要不断变换标定板的方位了吧。当然这只是一个原因。第二个原因,在讲极大似然时讲到。

首先令:

 

 很容易发现B是一个对称阵,所以B的有效元素只剩下六个(因为有三对对称的元素是相等的,所以只要解得下面的6个元素就可以得到完整的B了),让这六个元素构成向量b

 

        接下来在做一步纯数学化简:

 

        可以计算得:

 

         利用约束条件可以得到下面,方程组:

 

  这个方程组的本质和前面那两个用hA组成的约束条件方程组是一样的。在此重复一遍解释:如果我们想完全解出这五个未知量,则需要3个单应性矩阵。3个单应性矩阵在2个约束下可以产生6个方程。这样可以解出全部的五个内参了。大家想一下,我们怎样才能获得三个不同的单应性矩阵呢?答案就是,用三幅标定物平面的照片。我们可以通过改变摄像机与标定板间的相对位置来获得三张不同的照片。(当然也可以用两张照片,但这样的话就要舍弃掉一个内参了γ=0

       通过至少含一个棋盘格的三幅图像,应用上述公式我们就可以估算出B了。得到B后,我们通过cholesky分解 ,就可以轻松地得到摄像机的内参阵A

3. 基于内参阵估算外参阵

  通过上面的运算,我们已经获得了摄像机的内参阵。那么对于外参阵,我们很容易通过下面的公式解得:

 

       对上面公式进行化简,可以得到:

 

4.最大似然估计

极大似然估计是一种估计总体未知参数的方法。它主要用于点估计问题。所谓点估计是指用一个估计量的观测值来估计未知参数的真值。说穿了就一句话:就是在参数空间中选取使得样本取得观测值的概率最大的参数。

     我们定义似然函数:

       总体分布为离散型的:(p是已知的分布律)

 

        总体分布为连续性的:(f为概率密度函数)

 

        极大似然法就是在的可取范围内,挑选出来的使L达到最大的未知参数的估计值

         如果在内:,那么就称为极大似然估计值。

            用通俗点儿的方式解释一下极大似然估计:

        对很多实验,我们可以观察到样本,但影响样本的参数却是未知的。那我们就得对样本进行估计。既然我们要去估计,那么就想要估计的准。极大似然法就只在概率分布的观念下,指导我们估计的更准的方法。现实世界中,存在着一条普遍规律:与现实相差越远的概率越小。这就相当于人群中,非主流总是比主流要少一样,偏差大的总是占少数。所以,可能发生的概率越大就会越接近真实值。极大似然法就是应用这种思想,认为可能性最大的就是最优的估计值。即极大似然估计值就是最接近真实值的参数值。

  那么,极大似然为什么有这么一个别致的名字呢?什么是似然呢?是因为估计值不是随机变量,所以不能把它的可能性称为概率,那么数学家们就想了这样(likelihood)一个名字来代表可能性。

       首先来看一下,为什么标定的内外参数可以用极大似然法进行估计:

       因为我们是假定图像上的角点是被噪声干扰的,且我们认为这些噪声是高斯噪声。那么对于噪声的幅度就是给观测值造成的误差。但高斯噪声的概率密度我们是已知的,所以我们可以用前面所述的极大似然估计的思想去“猜”真值。

       那么接下来我们就需要构造一个似然函数,然后寻找其最大值了。张教授在文章中直接略过推导,直接给出了公式:

 

         说当此式取得最小值时,就是参数的最大似然估计值。

       设,角点附近的噪声服从高斯分布

       则:角点mij的样本值服从如下,概率密度函数:

 

       现在构造,似然函数:

 

 

        现在让L取得最大值,则可令下式最小:

 

 

  那么怎么令上面这个目标函数达到最小值呢,张氏标定法运用了可以用来解决多参数非线性系统优化问题的Levenberg-Marquardt算法。

5.张氏标定

张氏标定法中只关注径向畸变。我们是按照张氏标定,计算畸变系数的。那么,下面让我们来看一下径向畸变的数学表达。

          因为在实际情况下,径向畸变较小,所以其可以用主点(principle point)周围的泰勒级数展开的前几项进行描述。张氏标定法,利用前两项来确定径向畸变的畸变系数。数学表达式如下:

 

其中,代表理想无畸变的像素坐标,代表实际径像畸变的情况下的像素坐标,代表主点,代表理想无畸变时的连续图像坐标,代表实际径像畸变的情况下的连续图像坐标。K1,k2代表前两阶的畸变参数。。

 那么对于图像上的任意一点,我们有两个个等式。化成矩阵形式:

 

        通过前面两篇博文所介绍的内容,求得的摄像机模型,我们可以计算出(可通过摄像机模型直接解出)、(与是否畸变无关,直接在已求得的内参阵中得到)、(即直接读取的有畸变的像素坐标),(由摄像机模型可以通过物体的世界坐标点解出)。那么,两个方程两个未知数,我们用一点就可以求的径向畸变了。因为我们有n张图片,每张图片上有m个点,所以我们可以得到2mn个等式。运用最小二乘法对结果进行优化。可用下式解径向畸变k=[k1,k2]

 

其中,D等式左边的方程的系数矩阵,d是等式右边的有畸变的像素坐标与无像素坐标之差构成的矩阵。有上式,一步到位,计算出畸变系数。

为了使标定得到的估算实际的、存在径向畸变的摄像机参数。我们需要把,刚刚求解得到的畸变参数,连同前面得到的理想无畸变条件下的内外参数一起,进行极大似然估计。

 依然是以最小化下列函数为目标,只不过此次参数估计中又多加了k1,k2

 

 然后,仍然用Levenberg-Marquardt算法进行计算。最终就得到了,我们想要在考虑畸变情况下,摄像机的参数。

 

转动标定模板,从不同的角度拍摄棋盘标定模板的n幅图像,求出内参矩阵和外参矩阵,就有了相机坐标和图像坐标的投射矩阵,就可以将空间中的某一点映射到图片上的某一个点上:

 

张正友相机标定流程

1. 打印棋盘标定纸,附加到一个平坦的表面上;

2. 通过移动相机或者平面拍摄标定板各种角度的图片,一般拍摄20张;

3. 检测图片中的特征点;

4. 计算理想无畸变的情况下5个内部参数和所有的外部参数;

5. 通过最小二乘法估算实际存在径向畸变下的畸变系数;

6. 极大似然法,优化估计,提升估计精度;

张正友的平面标定方法是介于传统标定方法和自标定方法之间的一种方法,它既避免了传统方法设备要求高,操作繁琐等缺点,又较自标定方法精度高,符合通用的桌面视觉系统(DVS)的标定要求。该方法的缺点是确定模板上点阵的物理坐标以及图像和模板之间的点的匹配,专业性要求比较高。

 

注意:

  通过张氏标定,我们并不能得到:焦距(f)和像素的物理尺寸(sx,sy)两个参数。因为我们在求解内参阵A时,求解出的是α和β。

α=f/ sx,β= f/ sy 。分别代表焦距长度上,x轴和y轴像素的个数。

        虽然,没有求得焦距,但这并不影响,我们在三维坐标恢复时,进行三角运算。因为彼时,我们的计算中用到的也是α和β。

       大家可能会有疑问,既然我们无法得到焦距(f)和像素的物理尺寸(sx,sy)两个参数。那么在opencv中,调用的cvCalibrateCamera2时返回的参数中是包含焦距(f)的。Opencv的这个函数也是用了张氏标定法。为什么可以得到f呢?

       答案是这条opencv函数对内参阵做了简化,其认为γ=0即像素的物理尺寸(sx,sy)两个参数相等。然后统一约掉物理尺寸s。得到的B阵如下:

 

       这样我们就可以解出f了。

       张氏标定的精确度可达到0.5个像素,这样的指标已经可以满足绝大多数的应用了。所以如此简单的方法,得到了这么高的精度。这样的方法是值得人们膜拜的。在此,在次向张正友教授致敬!

 

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值