赞
踩
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
CNN:RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN
相机校正、张氏标定法、极大似然估计/极大似然参数估计、牛顿法、高斯牛顿法、LM算法、sin/cos/tan/cot
学习目标
我们所处的世界是三维的,而照片是二维的,我们可以把相机认为是一个函数,输入量是一个场景,输出量是一幅灰度图。这个从三维到二维的过程的函数是不可逆的。
相机标定的一个目的是要找一个合适的数学模型,求出这个模型的参数,能够近似从三维到二维的过程,使这个三维到二维的过程的函数找到反函数。
这个逼近的过程就是相机标定,我们用简单的数学模型来表达复杂的成像过程。
由此可知,相机标定的一个目的就是建立像素坐标系和世界坐标系之间的关系。原理是根据摄像机的模型,由已知特征点的图像坐标求解摄像机的模型参数,并求出成像的反过程,从而从图像中恢复出空间点的三维坐标,达到三维重建的目的。
另外相机标定还可以进行图像校正,由于透镜的制造精度以及组装工艺的偏差会引入畸变,导致图形失真,所以我们可以求解畸变参数,对图像进行去畸变。
在介绍相机标定之前,我们首先来看下相机的成像模型。也就是,现实物体上的一个点在相机采集到的图像中所在的位置是怎么确定的。我们采用的模型是针孔模型,也就是小孔成像。
小孔成像是利用了光线直线传播的原理。比如说,远处有一棵大树,而我们有个盒子,在这个盒子的对着大树的那一面上用针尖戳一个小孔。我们任选这棵大树上的任何的一个点,它都会向四周去反射无数条光线。但是因为光线是直线传播的,所以这些光线要么没有一条能进入盒子中,要么就只有一条光线是进入到这个盒子里面的。进入到盒子中的光线会在盒子里的一面上形成一个光点。这个光点跟大树上的某个点是对应的,颜色也是一致的,这就建立了一对一的关系。如果我们把感光胶片或者感光的传感器放在盒子里,就可以做成一个针孔相机来得到大树的彩色图像了。如下图所示:
由于大树上每个点反射的无数条光线只有一条进入到盒子中,所以图像是很暗的。而加大孔径,虽然可以提高图像的亮度,却会使物体上的某一个点会反射一小束光进入到相机里。这一小束光会在感光传感器上形成一个光斑,而不是一个点;从而相机失去了物体与图像上的点的一一对应关系,进而导致图像模糊甚至无法成像。当然实际的针孔相机不可能是让每个点只有一条光线进入相机。因为光具有波粒二象性,是可以衍射的,所以很小的针孔,也会导致图像模糊。根据可见光的波长,理论计算的小孔最佳直径是 0.25mm 左右,相应的光圈值大概是 f/200。
所以用一个直径比针孔直径大许多的凸透镜来替代针孔。凸透镜可以把物体上的一个点所反射的那一小束通过透镜的光重新汇聚成一个点,这样,不但图像亮度增大了,而且物体和图像上点的又可以一一对应起来了。这就是我们现在常用的相机的基本工作原理。
现在我们看下相机的成像模型,我们从下图中直观感受下:
下面我们介绍下成像过程中的四大坐标系:
是目标物体位置的参考系,是为了更好的描述相机的位置创建的,世界坐标系可以根据运算方便自由放置。单位为长度单位,比如说m。在双目视觉中世界坐标系主要有三个用途:
标定时确定标定物的位置;
作为双目视觉的系统参考系,给出两个摄像机相对世界坐标系的关系,从而求出相机之间的相对关系;
作为重建得到三维坐标的容器,存放重建后的物体的三维坐标。世界坐标系是将看见中物体纳入运算的第一站。
是相机站在自己的角度衡量物体的坐标系。相机坐标系以相机的光心(凸透镜的中心点)为原点,z轴与摄像机的光轴平行。拍摄的物体需要在世界坐标系下,转换为经历刚体变化转到摄像机坐标系,然后在和图像坐标系发生关系。它是图像坐标与世界坐标之间发生关系的纽带,沟通了世界上最远的距离。单位为长度单位,如mm。
图像坐标系(x,y):以图像平面的中心为坐标原点,为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标。图像坐标系是用物理单位(例如毫米)表示像素在图像中的位置。
像素坐标系(u,v): 以图像平面的左上角顶点为原点,为了描述物体成像后的像点在数字图像上的坐标而引入,是我们真正从相机内读取到的信息所在的坐标系。像素坐标系就是以像素为单位的图像坐标系.
注意:也有很多人把图像坐标系和像素坐标系合在一起,称作三大坐标系,也有人分开,称为四大坐标系。
下面我们进行一系列的变换,引入多个参数矩阵,实现从世界坐标系到像素坐标的转换。已知一个现实世界中的物体点的在世界坐标系中的坐标为(Xw, Yw, Zw),经过相机拍摄得到图片,在图片上的像素坐标为(u , v )。假设在图像坐标系中的坐标为( x , y ),在相机坐标系中的坐标为(Xc, Yc, Zc)。各个坐标之间的转化流程如下图所示:
世界坐标系转换到相机坐标系时不会产生形变,所以将世界坐标系进行刚体变换就可转换为相机坐标系。三维空间中,当物体不发生形变时,而只进行旋转平移的运动,就是刚体变换。空间中的一个坐标系总可以通过刚体变换,即平移和旋转,就可以转换为另一个坐标系,如下图所示:
两个坐标系间刚体变换的数学表达式如下所示:
可以将其写为齐次坐标的形式:
则有:(假设其中x’,y’表示世界坐标系,x,y是相机坐标系)
同理,绕x,y轴旋转角度φ时,则有:
所以旋转矩阵:
因为R受x,y,z三个方向上的分量的控制,所以具有三个自由度。
从相机坐标系到图像坐标系,是从3d到2d的过程,属于透射投影关系:
如上图所示,相机坐标系为Oc-Xc-Yc-Zc,图像坐标系为o-x-y,焦距f为o-Oc。记空间点P在相机坐标系中的坐标为(Xc, Yc, Zc),在图像中的坐标是(x,y),根据三角形相似定理有:
我们把上式写成矩阵形式,并使用齐次坐标,则有:
像素坐标系和图像坐标系都在成像平面上,只是各自的原点和度量单位不一样。图像坐标系的原点为相机光轴与成像平面的交点,通常情况下是成像平面的中点。图像坐标系的单位是mm,属于物理单位,而像素坐标系的原点在图像的左上角,单位是pixel,也就是我们说的几行几列。如下图所示:
所以这二者之间的转换如下:
其中dx和dy表示每一列和每一行分别代表多少mm,即1pixel=dx mm。我们将其用齐次坐标表示,并写成矩阵形式:
我们已经介绍了各个坐标系之间的转换过程,但是我们想知道的是如何从世界坐标系转换到像素坐标系,因此我们需要把上面介绍到的联系起来,将三者相乘,可以把这三个过程和在一起,写成一个矩阵:
我们假设转换矩阵为P,则有:
内参:确定相机从三维空间到二维图像的投影关系,畸变系数也属于内参,我们在下面进行介绍。
外参:决定相机坐标与世界坐标系之间相对位置关系,主要包括旋转和平移两部分。
- 图像坐标系和像素坐标系都在成像平面上,只是各自的原点和度量单位不一样。
- 图像坐标系的原点为相机光轴与成像平面的交点,通常情况下是成像平面的中点。
- 图像坐标系的单位是mm,属于物理单位。而像素坐标系的原点在图像的左上角,
- 单位是像素pixel(组成屏幕图像的最小独立元素),也就是我们说的几行几列。
- 把图像坐标系中的点p(x,y) 转换为 像素坐标系中的点p(x,y)。
- 第一步:先获取出图像坐标系原点O(u0,v0)在像素坐标系中的坐标位置。
- 第二步:
- 1.在图像坐标系中使用长度来作为单位的,该长度指物理单位。在像素坐标系中使用像素来作为单位的。
- 2.要使用多大的长度表示一个像素呢,那么就是使用dx和dy分别代表每一行(x方向)和每一列(y方向)使用多大的长度代表一个像素。
- 比如每一行(x方向)和每一列(y方向)均使用1mm代表1个像素,那么dx和dy均为1mm。
- 那么1/dx和1/dy也即为1个像素和长度单位的比值,1/dx和1/dy还可以分别表示为1像素/x方向的物理单位长度和1像素/y方向的物理单位长度。
- 3.x/dx和y/dy中的x和y分别代表的是图像坐标系中的点p(x,y)的x和y,那么该x和y分别以图像坐标系原点O(u0,v0)为开始,
- x代表x方向有多少个像素,y代表y方向有多少个像素。而dx和dy又是表示x方向和y方向使用多大的长度代表一个像素,
- x/dx就是表示“图像坐标系中的点p(x,y)在以图像坐标系原点O(u0,v0)为开始的”x方向有x个像素除以“一个像素在x方向的”长度大小。
- y/dy就是表示“图像坐标系中的点p(x,y)在以图像坐标系原点O(u0,v0)为开始的”y方向有y个像素除以“一个像素在y方向的”长度大小。
- 比如现在x方向和y方向均使用1mm长度代表1个像素,那么dx和dy均为1mm,所以x/dx和y/dy的结果分别就为x和y,
- 此时的x/dx的结果x和y/dy的结果y分别代表为点p(x,y)已经改为以像素坐标系的形式表示为x方向的像素坐标和y方向的像素坐标。
- 4.因为在第一步中就已经先获取出图像坐标系原点O(u0,v0)在像素坐标系中的坐标位置,
- 那么此时的O(u0,v0)即为以像素坐标系的形式表示为像素坐标,那么u0表示为以像素坐标系原点Ouv为开始在x方向有多少个像素,
- v0表示为以像素坐标系原点Ouv为开始在y方向有多少个像素,即u0和v0不再是以长度坐标表示而是以像素坐标表示。
- 5.最终 x/dx+u0 和 y/dy+v0 便分别代表为 点p(x,y)以像素坐标原点Ouv为起点的像素坐标系的形式来表示的x方向的像素坐标和y方向的像素坐标。
我们在相机坐标系到图像坐标系变换时谈到透视投影。相机拍照时通过透镜把实物投影到像平面上,但是透镜由于制造精度以及组装工艺的偏差会引入畸变,导致原始图像的失真。因此我们需要考虑成像畸变的问题。透镜的畸变主要分为径向畸变和切向畸变两类。
顾名思义,径向畸变就是沿着透镜半径方向分布的畸变,产生原因是光线在原理透镜中心的地方比靠近中心的地方更加弯曲,这种畸变在普通的镜头中表现更加明显,径向畸变主要包括桶形畸变和枕形畸变两种。以下分别是枕形和桶形畸变示意图:(从左到右依次是:正常无畸变,桶形畸变和枕形畸变)
从上图中可以看出,径向畸变以某一个中心往外延伸,且越往外,畸变越大;显然畸变与距离成一种非线性的变换关系,可以用多项式来近似。径向畸变的数学模型可以用主点(principle point)周围的泰勒级数展开式的前几项进行描述,通常使用前两项,即k1和k2,对于畸变很大的镜头,如鱼眼镜头,可以增加使用第三项k3来进行描述,成像仪上某点根据其在径向方向上的分布位置,调节公式为:
式里(x0,y0)是畸变点在像平面的原始位置,(x,y)是畸变较正后新的位置,下图是距离光心不同距离上的点经过透镜径向畸变后点位的偏移示意图,可以看到,距离光心越远,径向位移越大,表示畸变也越大,在光心附近,几乎没有偏移。
切向畸变是由于透镜本身与相机传感器平面(像平面)或图像平面不平行而产生的,这种情况多是由于透镜被粘贴到镜头模组上的安装偏差导致。在相机传感器和镜头不平行的情况下,因为存在夹角,所以光透过镜头传到图像传感器上时,成像位置发生了变化,如下图所示:
畸变模型可以用两个额外的参数p1和p2来描述:
下图显示某个透镜的切向畸变示意图,大体上畸变位移相对于左下—右上角的连线是对称的,这跟凸透镜与传感器之间的夹角有关:
径向畸变和切向畸变模型中一共有5个畸变参数:k1、k2、p1、p2、k3,得到这五个参数,就可以进行图像的去畸变。这些都属于相机的内参。
相机标定方法一般分为三类,分为传统的标定算法,自标定法和基于主动视觉的标定法。分别介绍如下:
传统的标定算法:传统的相机标定算法就是基于标定物的相机标定算法,在进行相机标定时,要通过专门指定的标定物来完成,此类方法是利用标定物上构建的已确定的物点坐标和与之对应的图像点之间的联系,借助一些数学方法,得到相机的内部和外部参数。它对标定物的要求有:标定物的特征部分与周围环境存在较大的差别,特征容易分辨且提取方便,标定物具有较高的稳定性,也就是说它的特征不随着相机位置的变换产生畸变。常见模板有棋盘格,圆形,三角形等。
代表算法有Tsai标定法和直接线性变换法(DLT)等。
自标定法:该算法不使用标定物,而是依靠图像点之间存在的关系,直接计算相机的参数。该算法只计算相机的内部参数的约束,不考虑相机系统的外部场景,所以方法灵活,应用范围较广,但是算法鲁棒性较差,只适合精度要求较低的场合。
基于主动视觉的标定法:该算法是控制相机做一些特定的动作,比如说平移,旋转,得到多张图片,以此计算相机参数。使用比较广泛的有两类:一类是在三维空间中,让相机作两组纯平移运动,进而求解相机的参数,第二类是控制相机绕光心轴旋转,获得相机的参数。此类方法优点是算法简单,往往能够获得线性解,故鲁棒性较高,缺点是系统的成本高、实验设备昂贵、实验条件要求高,而且不适合于运动参数未知或无法控制的场合。
张氏标定法是张正友博士在1999年发表在国际顶级会议ICCV上的论文《Flexible Camera Calibration By Viewing a Plane From Unknown Orientations》中,提出的一种利用平面棋盘格进行相机标定的实用方法。
该方法介于传统标定法和自标定法之间,既克服了传统标定法需要的高精度三维标定物的缺点,又解决了自标定法鲁棒性差的难题。标定过程不需要特殊的标定物,只需使用一张打印出来的棋盘格,并从不同方向拍摄几组图片即可,不仅实用灵活方便,而且精度很高,鲁棒性好。因此很快被全世界广泛采用,极大的促进了三维计算机视觉从实验室走向真实世界的进程。
棋盘是一块由黑白方块间隔组成的标定板,我们用它来作为相机标定的标定物(从真实世界映射到数字图像内的对象)。之所以我们用棋盘作为标定物是因为平面棋盘模式更容易处理(相对于复杂的三维物体),但与此同时,二维物体相对于三维物体会缺少一部分信息,于是我们会多次改变棋盘的方位来捕捉图像,以求获得更丰富的坐标信息。如下图所示,是相机在不同方向下拍摄的同一个棋盘图像。如下图所示:
张氏校正法是基于平面棋盘格的标定,首先我们介绍下两个平面中的单应性映射,在计算机视觉中,单应性(Homography)指从一个平面到另一个平面的投影映射,所以在标定物平面与图像平面之间存在单应性。
上文中我们已经得到了像素坐标系和世界坐标系下的坐标映射关系,因为标定物是平面,我们假设标定棋盘位于世界坐标中z=0平面,然后进行单应性计算。化简前文中的公式有:
其中:u,v表示像素坐标系中的坐标,矩阵A是内参矩阵,其中α=f/dx,β=f/dy,u0,x0,γ(由于制造误差产生的两个坐标轴偏斜参数,通常很小,如果按上文中矩阵运算得到的值即为0)表示5个相机内参,r1,r2,t示相机外参,xw,yw,zw 表示世界坐标系中的坐标. α,β和物理焦距f之间的关系为:α =fsx和β=fsy。其中sx=1/dx表示x方向上的1毫米长度所代表像素值,即像素/单位毫米,α,β是在相机标定中整体计算出来的。
那单应性矩阵定义为:
那怎么求H的值呢?
假设单应性矩阵H为:
所以一组点对应着两个等式。
我们分析一下,H是一个3*3的矩阵,并且其中有一个元素是作为齐次坐标。因此,H有8个未知量待解。(x,y)作为标定物的坐标,可以由设计者人为控制,是已知量。(u,v)是像素坐标,我们可以直接通过摄像机获得。对于一组对应的(x,y)-(u,v)我们可以获得两组方程。现在有8个未知量需要求解,所以至少需要八个方程。也就是说需要四个对应点,即可求出图像平面到世界平面的单应性矩阵H。这也是张氏标定采用四个角点的棋盘格作为标定物的一个原因。
下面我们将上面的公式展开:
假如我们得到了标定物与图像中对应的N个点对,那么有线性方程组为:
因为单应性矩阵中包含齐次坐标,我们可以直接将和h33设为1,剩余的8个参数未知的H至少需要4个点对即可计算出来。
通过上述介绍,应用4个点我们可以获得单应性矩阵H。但是,H是内参和外参的合体。如果我们想要最终分别获得内参和外参,需要想个办法,先把内参求出来。然后外参也就随之解出了。现在我们把单应性矩阵写成三个列向量的形式:
其中,λ是标量。
我们知道r1和r2是世界坐标系沿x和y轴的旋转向量,所以两者之间是正交的,且模长为1,可得出两个约束条件:
约束条件1:r1和r2的点积为0,即:
约束条件2:r1和r2的模长为1,即:
将r1和r2用h1,h2和内参矩阵A表示,即:
接下来将约束条件替换为h1,h2和内参矩阵A的表示,则有:
其中,h1和h2已通过单应性矩阵求解出来,未知量就是内参矩阵A了。
内参阵A包含5个参数:α,β,u0,v0,γ。那么如果我们想完全解出这五个未知量,则需要3个单应性矩阵。3个单应性矩阵在2个约束下可以产生6个方程。这样可以解出全部的五个内参了。大家想一下,我们怎样才能获得三个不同的单应性矩阵呢?答案就是,用三幅标定物平面的照片。我们可以通过改变摄像机与标定板间的相对位置来获得三张不同的照片。(当然也可以用两张照片,但这样的话就要舍弃掉一个内参了γ=0)。
下面我们做一些数学上的变换,计算内参矩阵。
首先令:
从上式中可以发现B是一个对称阵,所以B的有效元素只剩下六个(因为有三对对称的元素是相等的,所以只要解得下面的6个元素就可以得到完整的B了),让这六个元素构成向量b。
这个方程组的本质与用h和A组成的约束条件方程组是一样的。
得到矩阵B之后我们就可以计算内参矩阵A,很简单,内参矩阵中有5个未知参数,结果如下:
通过上面的计算,我们已经得到了相机的内参矩阵A,根据下式:
进行化简,即可得到相机的外参矩阵。
上述的推导过程是基于理想情况下的解,从几何推导上证明了张氏标定的可行性,并没有物理意义。在实际应用中,一般使用极大似然估计进行结果进行改善。
首先我们回顾下极大似然估计:极大似然估计是一种估计总体未知参数的方法。它主要用于点估计问题。所谓点估计是指用一个估计量的观测值来估计未知参数的真值,即在参数空间中选取使得样本取得观测值的概率最大的参数。
例如:有两个外形完全相同的箱子,甲箱中有99只白球,1只黑球;乙箱中有99只黑球,1只白球。一次实验取出一只球,该球是黑球。问题是:黑球从哪个箱子中取出的?
第一印象是:黑球最像是从乙箱中取出来的,这个推断是符合人们的经验事实。“最像”即为“极大似然”之意,这种想法被称为“极大似然原理”。
现在我们构建极大似然函数:
在上述过程中未考虑镜头畸变的影响,现在我们来考虑透镜畸变的影响,由于径向畸变的影响相对较明显,所以主要考虑径向畸变参数,根据经验,通常只考虑径向畸变的前两个参数k1,k2就可以(增加更多的参数会使得模型变的复杂且不稳定)。实际求解中,通常把k1,k2也作为参数加入上述函数一起进行优化,待优化函数如下所示:
那怎么使这个函数最小呢?张氏标定法运用了解决多参数非线性优化问题的LM算法,我们接下来给大家进行介绍。
上一节中我们介绍到极大似然求解时,我们提到了LM算法。如果要优化的问题为线性的可以直接对目标函数求导,并且令其等于零,以此求得其极值,并通过比较求取全局最小值(Global Minimizer),并将其最为目标函数的解。但是如果问题为非线性,此时我们通常无法直接写出其导数形式(函数过于复杂),因此不去试图直接找到全局最小值,而是退而求其次通过不停的迭代计算寻找到函数的局部最小值(Local Minimizer),并认为该局部最小值能够使得我们的目标函数取得最优解(最小值),这就是非线性最小二乘的通常求解思路。很显然,在张氏较正中优化问题并不是线性的,我们需要通过迭代来求最优解。
那如何进行迭代计算呢?
4、如果达到代终止条件(达到最大迭代次数或函数值/自变量变化非常小),则迭代结束,可以认为此时对应的目标函数值就是最小值。
5、如果没有达到迭代终止条件,按如下方式更新自变量,并返回第2步。
因此,不同的优化算法的不同主要体现在增量的更新方式上。如果采用不合适的更新方式,其实很容易陷入局部最小值。
梯度下降法大家已经在机器学习中接触过,我们现在根据LM算法的发展,依次介绍:牛顿法,高斯牛顿法和LM算法。
牛顿法主要用来解决非线性优化问题,其收敛速度比梯度下降速度快。主要思想是:在现有的极小值估计值的附近对目标函数做二阶泰勒展开,进而找到极小点的下一个估计值,反复迭代直到函数的一阶导数小于某个接近0的阀值。
2.hessian矩阵
牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。下图中红线表示牛顿法,绿线表示梯度下降法。
牛顿法的缺点是包含Hessian矩阵的计算,在高维度计算Hessian矩阵需要消耗很大的计算量,甚至无法计算。
高斯牛顿(Gauss-Newton)法是对牛顿法的一种改进,它用雅克比矩阵的乘积近似代替牛顿法中的二阶Hessian 矩阵,从而省略了求二阶Hessian 矩阵的计算。下面来看看高斯牛顿法是怎么做的。
高斯牛顿法虽然不用求Hessian矩阵,减小计算量,但是这个算法还是不完美。首先在牛顿法中,hessian矩阵是可逆的,而在高斯牛顿法中,用来近似Hessian矩阵的可能是奇异或病态的,会导致算法不收敛;另外,我们采用泰勒展开进行推导,泰勒展开只适合在较小范围内近似,如果步长较大,泰勒近似就不准确,也会导致算法不收敛。
Levenberg-Marquardt(LM)法在一定程度上修正了高斯牛顿法的缺点,因此它比高斯牛顿法更加鲁棒,不过这是以牺牲一定的收敛速度为代价的--它的收敛速度比高斯牛顿法慢。
下面来看看LM算法到底怎么修正高斯牛顿法的缺点的?
LM算法中定义的步长为:
其中,I是单位矩阵,μ是一个非负数。如果μ取值较大时,μI 占主要地位,此时的LM算法更接近一阶梯度下降法,说明此时距离最终解还比较远,用一阶近似更合适。反之,如果 μ取值较小时,H 占主要地位,说明此时距离最终解距离较近,用二阶近似模型比较合适,可以避免梯度下降的“震荡”,容易快速收敛到极值点。因此参数 μ不仅影响到迭代的方向还影响到迭代步长的大小。
设x初值为x0,根据经验可以设置u的初值u0为:
LM采用的搜索方法是信赖域(Trust Region)方法,因为高斯牛顿法中采用近似泰勒函数只在展开点附近有较好的近似效果,如果步长太大近似就不准确,因此我们应该给步长加个信赖区域,在信赖区域里,我们认为近似是有效的,出了这个区域,近似会出问题。
那么如何确定信赖区域的范围呢?比较常用的方法是根据我们的近似模型跟实际函数之间的差异来确定。使用如下因子来判断泰勒近似是否足够好:
其中,分子是实际函数迭代下降的值,分母是近似模型下降的值。如果 ρ 接近于1,认为近似比较准确,可以扩大信赖范围;如果 ρ 远小于1,说明实际减小的值和近似减少的值差别很大,也就是说近似比较差,需要缩小信赖范围.
下面我们通过一个示例来看下LM算法的流程:
上述优化过程中的阈值参数只是作为示例使用的经验值,也可以自己指定。
LM算法可以一定程度避免系数矩阵的非奇异和病态问题,可以提供更鲁棒、更准确的步长。因此LM算法在相机标定、视觉SLAM等领域中应用非常广泛。
张氏标定就是利用一张打印的棋盘格,然后对每个角点进行标记其在像素坐标系的像素点坐标,以及在世界坐标系的坐标,张氏标定证明通过4组以上的点就可以求解出H矩阵的值,但是为了减少误差,具有更强的鲁棒性,我们一般会拍摄许多张照片,选取大量的角点进行标定。具体过程如下:
对于双目立体视觉,有两个摄像头。它们就像人的一双眼睛一样,从不同的方向看世界。两只眼睛中的图像的视差,让我们对世界有了三维的认识。
双目标定不仅要计算出每个摄像头的内部参数,还需要通过标定来测量两个摄像头之间的相对位置(即右摄像头相对于左摄像头的三维平移 t 和旋转 R 参数)。
两摄像头之间的旋转矩阵和平移矩阵可以由下式求出:
其中,R为两摄像头间的旋转矩阵,T为两摄像头间的平移矩阵。Rr为右摄像头经过张氏标定得到的相对标定物的旋转矩阵,Tr为右摄像头通过张氏标定得到的相对标定物的平移向量。Rl为左摄像头经过张氏标定得到的相对相同标定物的旋转矩阵,Tl为左摄像头经过张氏标定得到的相对相同标定物的平移向量。
我们在直观上感受下旋转矩阵和平移矩阵的意义:
对于R,首先用T把左摄像机坐标系平移到右摄像机坐标系上(即两坐标系远点重合)。然后在同一参考系下的两个旋转矩阵相乘,表示世界坐标先向右旋转到Rr ,再向左旋转Rl。那么两次旋转后得到的旋转,就是右摄像机旋转到左摄像机所需的旋转矩阵R。
对于T,先用R对左坐标系旋转一下,把左右两摄像机调成平行,然后直接平移向量相减,即得到。两摄像机之间的平移向量T。
得到双目标定的结果,我们就可以进行立体校正,立体匹配,三维重建的内容。
总结:
相机标定的意义
建立世界坐标系和像素坐标之间的关系,可用于三维重建,图像校正等
成像原理
小孔成像
相机成像模型
世界坐标系:目标物体位置的参考系,是为了更好的描述相机的位置创建的
相机坐标系:站在相机角度的坐标系
图像坐标系:以图像中心为原点的坐标系
像素坐标系:以图像左上角为原点的坐标系
坐标系之间的转换:刚体变换-- 透射变换—离散化
内参:描述相机内部属性的参数
外参:决定相机坐标与世界坐标系之间相对位置关系
图像畸变
径向畸变:沿着透镜半径方向产生的畸变
切向畸变:透镜本身与相机传感器平面或图像平面不平行而产生
相机标定方法分类
传统的标定方法,自标定法,基于主动视觉的标定方法
张氏标定法
利用棋盘格图像对相机进行标定:单应性矩阵,利用约束条件求解内参矩阵,根据内参矩阵估计外参矩阵,利用极大似然方法估计参数,优化方法:牛顿法,高斯牛顿法和LM算法
标定流程:
对于每张拍摄的棋盘图片,检测图片中所有棋盘格的特征点。
因为棋盘标定图纸中所有角点的空间坐标是已知的,这些角点对应在拍摄的标定图片中的角点的像素坐标也是已知的,如果我们得到这样的N>=4个匹配点对(越多计算结果越鲁棒),就可以根据LM等优化方法得到单应性矩阵H,得到相机的内参,外参等信息。
双目校正
双目较正,就是利用单目校正得到每个相机的参数后,在计算两个相机之间的相对位置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。