精华内容
下载资源
问答
  • 张正友标定算法原理详解(一)

    万次阅读 2017-10-16 09:03:59
      ”张正友标定”是指张正友教授1998年提出的单平面棋盘格的摄像机标定方法[1]。文中提出的方法介于传统标定法和自标定法之间,但克服了传统标定法需要的高精度标定物的缺点,而仅需使用一个打印出来的棋盘格就...

    一、背景

      ”张正友标定”是指张正友教授1998年提出的单平面棋盘格的摄像机标定方法[1]。文中提出的方法介于传统标定法和自标定法之间,但克服了传统标定法需要的高精度标定物的缺点,而仅需使用一个打印出来的棋盘格就可以。同时也相对于自标定而言,提高了精度,便于操作。因此张氏标定法被广泛应用于计算机视觉方面。

    二、计算内参和外参的初值

    1、计算单应性矩阵H

     根据之前博客介绍的摄像机模型,设三维世界坐标的点为 X=[X,Y,Z,1]T ,二维相机平面像素坐标为

    m=[u,v,1]T 所以标定用的棋盘格平面到图像平面的单应性关系为: 

    s0m=K[R,T]X

    其中s为尺度因子,K为摄像机内参数,R为旋转矩阵,T为平移向量。令 
    K=α00γβ0u0v01
    α=f/dx,β=f/dy,因为像素不是规规矩矩的正方形,γ代表像素点在x,y方向上尺度的偏差。这里还有一个“梗儿”,就是S。它只是为了方便运算,对于齐次坐标,尺度因子不会改变坐标值的。张氏标定法中,将世界坐标系设置在棋盘格平面上,令棋盘格平面为Z=0的平面。则可得 
    suv1=K[r1r2r3t]XY01=K[r1r2t]XY1

    我们把K[r1, r2, t]叫做单应性矩阵H,即 
    suv1=HXY1H=[h1 h2 h3]=λK[r1 r2 t]

    H是一个三3*3的矩阵(齐次矩阵),并且有一个元素是作为齐次坐标。因此,H有8个未知量待解,至少需要8个方程,每对对应点能提供两个方程,所以至少需要四个对应点,就可以算出世界平面到图像平面的单应性矩阵H。这也是张氏标定采用四个角点的棋盘格作为标定物的一个原因。

    2、计算内参数矩阵

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

            2、旋转向量的模为1,即|r1|=|r2|=1。这个也很容易理解,因为旋转不改变尺度嘛。如果不信可以回到上一篇博客,找到个方向的旋转矩阵化行列式算一下。

            通过上面的式子可以将r1,r2代换为h1,h2与A的组合进行表达。即r1=h1A-1,r2=h2A-1.由上式可得 

    λ=1sr1=1λK1h1r2=1λK1h2

      由于旋转矩阵是个酉矩阵,r1和r2正交,可得 
    rT1r2=0||r1||=||r2||=1

    代入可得:  
    hT1KTK1h2=0hT1KTK1h1=hT2KTK1h2
    大家从上面两个式子是不是看出一点端倪了。式子中,h1,h2是通过单应性求解出来的那么未知量就仅仅剩下,内参矩阵A了。内参阵A包含5个参数:α,β,u0,v0,γ。那么如果我们想完全解出这五个未知量,则需要3个单应性矩阵。3个单应性矩阵在2个约束下可以产生6个方程。这样可以解出全部的五个内参了。大家想一下,我们怎样才能获得三个不同的单应性矩阵呢?答案就是,用三幅标定物平面的照片。我们可以通过改变摄像机与标定板间的相对位置来获得三张不同的照片。(当然也可以用两张照片,但这样的话就要舍弃掉一个内参了γ=0) 到这里,大家应该就明白我们在张氏标定法时为什么要不断变换标定板的方位了吧。当然这只是一个原因。第二个原因,在讲极大似然时讲到。
    即每个单应性矩阵能提供两个方程,而内参数矩阵包含5个参数,要求解,至少需要3个单应性矩阵。为了得到三个不同的单应性矩阵,我们使用至少三幅棋盘格平面的图片进行标定。通过改变相机与标定板之间的相对位置来得到三个不同的图片。为了方便计算,定义如下: 
    B=KTK1=B11B21B31B12B22B32B13B23B33=1α2γα2βv0γu0βα2βγα2βγ2α2β2+1β2γ(v0γu0β)α2β2v0β2v0γu0βα2βγ(v0γu0β)α2β2v0β2(v0γu0β)2α2β2+v0β2+1

    可以看到,B是一个对称阵,所以B的有效元素为六个,让这六个元素写成向量b,即 
    b=[B11B12B22B13B23B33]T

    可以推导得到 
    hTiBhj=vTijbvij=[hi1hj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3]T

    利用约束条件可以得到: 
    [vT12(v11v22)T]b=0

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

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

    3、计算外参数矩阵

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

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

    三、最大似然估计

    三、最大似然估计

      上述的推导结果是基于理想情况下的解,但由于可能存在高斯噪声,所以使用最大似然估计进行优化。设我们采集了n副包含棋盘格的图像进行定标,每个图像里有棋盘格角点m个。令第i副图像上的角点Mj在上述计算得到的摄像机矩阵下图像上的投影点为: 

    m^(K,Ri,ti,Mij)=K[R|t]Mij

    其中Ri和ti是第i副图对应的旋转矩阵和平移向量,K是内参数矩阵。则角点mij的概率密度函数为: 
    f(mij)=12πe(m^(K,Ri,ti,Mij)mij)2σ2

    构造似然函数: 
    L(A,Ri,ti,Mij)=i=1,j=1n,mf(mij)=12πeni=1mj=1(m^(K,Ri,ti,Mij)mij)2σ2

    让L取得最大值,即让下面式子最小。这里使用的是多参数非线性系统优化问题的Levenberg-Marquardt算法[2]进行迭代求最优解。 
    i=1nj=1mm^(K,Ri,ti,Mij)mij2

    四、径向畸变估计

    先介绍一下,摄像机畸变主要有哪几种以及这些讨厌的畸变从何而来。

    摄像机畸变主要包含:镜像畸变、切向畸变。在这里分别讲述一下,并引用一些图片,使大家对他们有一个直观的认识。

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


              它们在真实照片中是这样的:

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

              畸变矫正,首先应该知道畸变系数,然后做与畸变相反的变换,消除畸变。

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

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

      张氏标定法只关注了影响最大的径向畸变。则数学表达式为: 

    u^=u+(uu0)[k1(x2+y2)+k2(x2+y2)2]v^=v+(vv0)[k1(x2+y2)+k2(x2+y2)2]

    其中,(u,v)是理想无畸变的像素坐标, (u^,v^) 是实际畸变后的像素坐标。(u0,v0)代表主点,(x,y)是理想无畸变的连续图像坐标, (x^,y^) 是实际畸变后的连续图像坐标。k1和k2为前两阶的畸变参数。 
    u^=u0+αx^+γy^v^=v0+βy^

    化作矩阵形式: 

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

    则可得: 

    k=[k1 k2]T=(DTD)1DTd

        计算得到畸变系数k。

        使用最大似然的思想优化得到的结果,即像上一步一样,LM法计算下列函数值最小的参数值: 

    i=1nj=1mm^(K,k1,k2,Ri,ti,Mij)mij2

    下面让我们矫正畸变:

              就是这样一个简单的公式,就完成了畸变矫正。代表矫正畸变后的像素坐标,代表实际径像畸变的情况下的图像的像素坐标。

            最后给大家展示两幅图,让大家看一下畸变矫正的成果:


              这就是张氏标定带给我们的第一个直观的好处。

              到此,张氏标定法介绍完毕。我们也得到了相机内参、外参和畸变系数。

    参考

    1、Zhang, Zhengyou - 《IEEE Transactions on Pattern Analysis & Machine Intelligence》 - 2000 
    2、J.More.Thelevenberg-marquardtalgorithm,implementationandtheory.InG.A.Watson, 
    editor,NumericalAnalysis,LectureNotesinMathematics630.Springer-Verlag,1977.


    张正友标定算法原理详解


    张正友标定法学习笔记

    展开全文
  • 张正友标定算法原理详解

    万次阅读 多人点赞 2016-10-19 16:04:03
    张正友标定算法原理详解

    张正友标定算法原理详解

    本人邮箱:sylvester0510@163.com,欢迎交流讨论,
    欢迎转载,转载请注明网址http://blog.csdn.net/u010128736/


    一、背景

      ”张正友标定”是指张正友教授1998年提出的单平面棋盘格的摄像机标定方法[1]。文中提出的方法介于传统标定法和自标定法之间,但克服了传统标定法需要的高精度标定物的缺点,而仅需使用一个打印出来的棋盘格就可以。同时也相对于自标定而言,提高了精度,便于操作。因此张氏标定法被广泛应用于计算机视觉方面。

    二、计算内参和外参的初值

    1、计算单应性矩阵H

      根据之前博客介绍的摄像机模型,设三维世界坐标的点为 X=[X,Y,Z,1]T ,二维相机平面像素坐标为 m=[u,v,1]T ,所以标定用的棋盘格平面到图像平面的单应性关系为:

    s0m=K[R,T]X

    其中s为尺度因子,K为摄像机内参数,R为旋转矩阵,T为平移向量。令
    K=α00γβ0u0v01

    注意,s对于齐次坐标来说,不会改变齐次坐标值。张氏标定法中,将世界坐标系狗仔在棋盘格平面上,令棋盘格平面为Z=0的平面。则可得
    suv1=K[r1r2r3t]XY01=K[r1r2t]XY1

    我们把K[r1, r2, t]叫做单应性矩阵H,即
    suv1=HXY1H=[h1 h2 h3]=λK[r1 r2 t]

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

    2、计算内参数矩阵

    由上式可得

    λ=1sr1=1λK1h1r2=1λK1h2

      由于旋转矩阵是个酉矩阵,r1和r2正交,可得
    rT1r2=0||r1||=||r2||=1

    代入可得:
    hT1KTK1h2=0hT1KTK1h1=hT2KTK1h2

    即每个单应性矩阵能提供两个方程,而内参数矩阵包含5个参数,要求解,至少需要3个单应性矩阵。为了得到三个不同的单应性矩阵,我们使用至少三幅棋盘格平面的图片进行标定。通过改变相机与标定板之间的相对位置来得到三个不同的图片。为了方便计算,定义如下:
    B=KTK1=B11B21B31B12B22B32B13B23B33=1α2γα2βv0γu0βα2βγα2βγ2α2β2+1β2γ(v0γu0β)α2β2v0β2v0γu0βα2βγ(v0γu0β)α2β2v0β2(v0γu0β)2α2β2+v0β2+1

    可以看到,B是一个对称阵,所以B的有效元素为六个,让这六个元素写成向量b,即
    b=[B11B12B22B13B23B33]T

    可以推导得到
    hTiBhj=vTijbvij=[hi1hj1hi1hj2+hi2hj1hi2hj2hi3hj1+hi1hj3hi3hj2+hi2hj3hi3hj3]T

    利用约束条件可以得到:
    [vT12(v11v22)T]b=0

      通过上式,我们至少需要三幅包含棋盘格的图像,可以计算得到B,然后通过cholesky分解,得到相机的内参数矩阵K。

    3、计算外参数矩阵

      由之前的推导,可得

    λ=1s=1A1h1=1A1h2r1=1λK1h1r2=1λK1h2r3=r1×r2t=λK1h3

    三、最大似然估计

      上述的推导结果是基于理想情况下的解,但由于可能存在高斯噪声,所以使用最大似然估计进行优化。设我们采集了n副包含棋盘格的图像进行定标,每个图像里有棋盘格角点m个。令第i副图像上的角点Mj在上述计算得到的摄像机矩阵下图像上的投影点为:

    m^(K,Ri,ti,Mij)=K[R|t]Mij

    其中Ri和ti是第i副图对应的旋转矩阵和平移向量,K是内参数矩阵。则角点mij的概率密度函数为:
    f(mij)=12πe(m^(K,Ri,ti,Mij)mij)2σ2

    构造似然函数:
    L(A,Ri,ti,