注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

dp: 生活的脚步,进步的点滴...

Cam、DSP、FPGA、PM、Life、More ...

 
 
 

日志

 
 

张正友标定法学习笔记  

2015-09-17 16:07:35|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    “张正友标定”又称“张氏标定”,是指张正友教授于1998年提出的单平面棋盘格的摄像机标定方法。张氏标定法已经作为工具箱或封装好的函数被广泛应用。张氏标定的原文为“A Flexible New Technique forCamera Calibration”。此文中所提到的方法,为相机标定提供了很大便利,并且具有很高的精度。从此标定可以不需要特殊的标定物,只需要一张打印出来的棋盘格。So great! 这样的方法让人肃然起敬。

     此博主要介绍一下“张氏标定”的数学思路。因为标定在整个基于标定摄像机的三维重建的几何过程占有最重要最核心的地位。如下图:


         从图中明显可以看出,标定得到的内参、外参和畸变系数,是双目视觉进行图片矫正,摄像机校正和3D恢复的基础。没有好的标定,双目视觉系统就无法完成3D重建。

        既然标定对双目视觉如此重要,我们有必要对数学的深层含义多加理解。以张氏标定为例,让我们看其数学本质吧。因为张教授的论文中对标定方法的讲述是循序渐进的,在这里将按照张教授论文中的顺序,为大家讲述一下,张氏标定的脉络。

1、标定平面到图像平面的单应性

        因为张氏标定是一种基于平面棋盘格的标定,所以想要搞懂张氏标定,首先应该从两个平面的单应性(homography)映射开始着手。

        单应性(homography):在计算机视觉中被定义为一个平面到另一个平面的投影映射。首先看一下,图像平面与标定物棋盘格平面的单应性。

        由上两篇博文中讲到的摄像机模型,肯容易得到:


         其中m的齐次坐标表示图像平面的像素坐标(u,v,1),M的齐次坐标表示世界坐标系的坐标点(X,Y,Z,1)。A[R t]即是上面一篇博客推出的P。R表示旋转矩阵、t表示平移矩阵、S表示尺度因子。A表示摄像机的内参数,具体表达式如下:

α=f/dx,β=f/dy,因为像素不是规规矩矩的正方形,γ代表像素点在x,y方向上尺度的偏差。

         这里还有一个“梗儿”,就是S。它只是为了方便运算,对于齐次坐标,尺度因子不会改变坐标值的。

因为标定物是平面,所以我们可以把世界坐标系构造在Z=0的平面上。然后进行单应性计算。令Z=0可以将上式转换为如下形式:


         既然,此变化属于单应性变化。那么我们可以给A[r1 r2 t]一个名字:单应性矩阵。并记H= A[r1 r2 t]。

         那么现在就有:

         大家可以分析一下,H是一个三3*3的矩阵,并且有一个元素是作为齐次坐标。因此,H有8个未知量待解。

(x,y)作为标定物的坐标,可以由设计者人为控制,是已知量。(u,v)是像素坐标,我们可以直接通过摄像机获得。对于一组对应的(x,y)-à(u,v)我们可以获得两组方程。

        现在有8个未知量需要求解,所以我们至少需要八个方程。所以需要四个对应点。四点即可算出,图像平面到世界平面的单应性矩阵H。

        这也是张氏标定采用四个角点的棋盘格作为标定物的一个原因。

        在这里,我们可以将单应性矩阵写成三个列向量的形式,即:


2、利用约束条件求解内参矩阵A

        从上面可知,应用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的组合进行表达。即       r1=h1A-1,r2=h2A-1.根据两约束条件,可以得到下面两个式子:


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

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

       下面在对我们得到的方程做一些数学上的变化,这些变化都是简单的运算变化了,相信大家动动笔,一算就可以算出。这些变化都是为了运算方便的,所以也没什么物理意义。

首先令:

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


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

        可以计算得:

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

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

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

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

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

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



        至此,已经将张氏标定的主体数学框架已经讲完了。介于篇幅关系(怕太长大机会读的昏昏欲睡,哈哈)。但其实我们做了这么多推导,仅仅是为后面的极大似然参数估计提供初值。但当然这个初值也是不可或缺的,因为没有这个初值,就无法估计出更为准确的参数。

张教授在大作“A Flexible New Technique for Camera Calibration”中的原话如下:” The above solution is obtained through minimizing an algebraic distancewhich is not physically meaningful. We can refine it through maximum likelihoodinference”.意思是:上面的几何推导仅仅是纯代数上的拟合,没有物理意义。下面让我们通过极大似然理论对得到的结果进行改善。

       顺着张教授的意思,从概念上讲述一下极大似然估计。

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

       我们定义似然函数:

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

 

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


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

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

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

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

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

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

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

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


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

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

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

       现在构造,似然函数:


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


        那么怎么令上面这个目标函数达到最小值呢,张氏标定法运用了可以用来解决多参数非线性系统优化问题的Levenberg-Marquardt算法。对于该方法,详细的介绍大家可以参照《The levenberg-marquardt algorithm, implementation andtheory》一文进行深入了解。这里给出下载本文的链接:

http://link.springer.com/chapter/10.1007%2FBFb0067700

         那么张氏标定法在不考虑镜头畸变的情况下的,获取摄像机内外参数的数理推导过程。

畸变矫正—让世界不在扭曲

          标定的主要用途之一:矫正摄像机的畸变。对于图像畸变矫正的方法,张正友教授也在其大作“A Flexible New Technique forCamera Calibration”中给出。

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

张氏标定,大功告成!

       下面让我们矫正畸变:

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

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


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

张正友标定法小结

一、张氏标定的过程:

       1.      打印一张棋盘格,把它贴在一个平面上,作为标定物。

       2.      通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。

       3.      从照片中提取特征点(如角点)。

       4.      估算理想无畸变的情况下,五个内参和所有外参。

       5.      应用最小二乘法估算。实际存在径向畸变下的畸变系数。

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

         通过这样的过程,我们就获得了具有高估计精度的五个内参,三个外参和两个畸变系数。利用这些信息,我们可以进行畸变矫正、图像校正和最终的三维信息恢复。

 

二、以下是对于张氏标定求得的内参,需要注意的一点:

         通过张氏标定,我们并不能得到:焦距(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个像素,这样的指标已经可以满足绝大多数的应用了。所以如此简单的方法,得到了这么高的精度。这样的方法是值得人们膜拜的。在此,在次向张正友教授致敬!

  评论这张
 
阅读(472)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016