一、实验原理
相机标定就是求解相机的内参数以及畸变参数的过程。
相机的标定主要有两种:传统的摄像头标定方法和摄像头自标定方法,典型的有:(1)Tsai(传统的标定方法);(2)张正友(介于传统和自标定之间)。1999年,微软研究院的张正友提出了基于移动平面模板的相机标定方法。此方法是介于传统标定方法和自标定方法之间的一种方法,传统标定方法虽然精度高设备有较高的要求,其操作过程也比较繁琐,自标定方法的精度不高,张正友标定算法克服了这两者的缺点同时又兼备二者的优点,因此对办公、家庭的场合使用的桌面视觉系统(DVS)很适合。张正友标定方法由于简单、效果好而得到广泛使用。
张正友标定法的标定步骤:
1、打印一张模板并贴在一个平面上;
2、从不同角度拍摄若干张模板图像;
3、检测出图像中的特征点;
4、求出摄像机的外参数(单应性矩阵)和内参数(最大似然估计) ;
5、求出畸变系数;
6、优化求精。
张正友标定方法的主要思想是:
1、相机内参矩阵
其中,
q的坐标系是默认的OpenCV的像素坐标系,Q的坐标系是标定板坐标系,Z轴为0,原点在标定板的某个内角点上(标定板上角点的坐标均为[*,*,0]的形式),在OpenCV 3.0中使用的是([i∗Squres_Size,j∗Square_Size,0]的形式)。其中fx和fy表示相机x轴和y轴的焦距,s表示成像平面x轴和y轴的不正交性。
2、基础公式
对于不同位置的棋盘格到相机的成像,可以使用下面的公式进行表示:
其中,[R|t]表示棋盘格坐标系相对于相机坐标系的位姿。把矩阵R和写开,如下式所示:
进行化简得:
其中[u v 1]是已知量,[X Y 1]也是已知量,A和[r1 r2 t]是未知量。其中H=A[r1 r2 t]又叫做单应性矩阵,可以使用下面的3中所述的方法求解。
3、单应矩阵求解
这里使用的方法基于最大似然准则:假设提取的m存在均值为0,噪声协方差矩阵为的高斯白噪声。
则优化目标为
其中
其中是矩阵H的第i列,并且假设已知,求解上面的非线性优化问题可以使用LM算法。
初始值求解:
令,则可以重写为
对于n个点,对应n个方程,Lx=0,其中x是1×9的,L是2n×9的。x的解对应于L的最小奇异值的右奇异向量。
4、求解相机内参
利用约束条件求解内参矩阵A:
在公式中,由于r1和r2是单位向量且是正交的,所以存在下面的关系:
上面的公式写成方程组的形式如下所示:
上面的等式是一个最小二乘问题,可以使用SVD求解.由于A有5个参数:α,β,u0,v0,γ一个单应性矩阵对应两个约束,所以求解A需要3个单应性矩阵,也就是最小需要3幅图像(超定方程)。当然,也可以使用两个单应性矩阵,此时需要令γ=0。算出了b之后,可以用下面的公式求A。
5、求解相机外参
在上面求解了相机的内参之后,可以求出棋盘格的位姿,公式如下:
在OpenCV中,上面的公式是用来求解优化参数的初始值的,最终的结果是使用优化的方法得到的。
由于存在误差,还是需要迭代求解以提高精度(问题描述如下):
给定棋盘格的n个图像和m个角点,并假设图像点被同分布的噪声影响。
似然函数如下所示:
其中旋转矩阵R用向量r表示(罗巨格公式)。
6、相机的畸变参数求解
记(u,v)为理想的像素坐标,为实际观测得到的像素坐标(受到畸变)。同样的,有归一化的相机坐标系(x,y)和。
对于径向畸变:
用像素坐标表示则为:
写成如下形式:
给定n个图像中的m个点,可以得到2mn个方程,记为Dk=d。
则
最小二乘方法求解:
如果求解了畸变参数k1和k2,则可以求解出没有畸变的坐标,从而使用上面的方法求解位姿和内参。(畸变参数k1和k2初始化可以简单的设为0。)
OpenCV的模型还包括了切向畸变,并且镜像畸变有三项。因此,OpenCV中一共有五个参数[k1,k2,p1,p2,k3]。
7、OpenCV的标定步骤
1、初始化参数求解;
a、求解单应性矩阵;
b、根据理论的第4步求解相机内参的初始值;
c、根据理论的第5步求解相机外参的初始值;
d、畸变参数设置为0。
2、迭代求解总体最小二乘问题,也就是上面6所示的最小二乘问题。
二、实验结果
此处只显示一张图片为例,下图为原图片、校正后的图片以及标定的图片:
运行结果如下:
每幅图像的标定误差:
第1幅图像的平均误差:0.06591像素
第2幅图像的平均误差:0.0092像素
第3幅图像的平均误差:0.0626566像素
第4幅图像的平均误差:0.06671像素
第5幅图像的平均误差:0.0679925像素
第6幅图像的平均误差:0.0671491像素
第7幅图像的平均误差:0.0658722像素
第8幅图像的平均误差:0.0622518像素
第9幅图像的平均误差:0.0598439像素
第10幅图像的平均误差:0.0597705像素
总体平均误差:0.02303像素
相机内参数矩阵:
[47.519111875004, 0, 936.39656915516;
0, 4672.655609872659, 397.31398815363;
0, 0, 1]
畸变系数:
[-0.03490484218080629, -3.960345879900159, -0.01107630076788155, -0.006547187271713956, -2.224948187478699]
第1幅图像的旋转向量:
[-20.75017314309292;
-4.484167435853328;
556.6954023094822]
第1幅图像的旋转矩阵:
[-0.50573611183153, 0.861284872044086, -0.04918693299514142;
-0.8603807668570445, -0.50773020246805, -0.044214420904408;
-0.06305490632734467, 0.0199586618146247, 0.9978104682787302]
第1幅图像的平移向量:
[-0.1470392111668472;
-3.1392326018378;
-0.04121913110947828]
第2幅图像的旋转向量:
[-20.73617167770193;
-4.481114007558208;
556.71225514971]
第2幅图像的旋转矩阵:
[-0.5470912939554095, 0.8355236059055473, -0.050905992307265;
-0.83459576731794, -0.5491378079309527, -0.04356114180955369;
-0.035076730824343, 0.01865400427200083, 0.997752978883782]
第2幅图像的平移向量:
[-0.1465234029496155;
-3.138856852621159;
-0.04222551390139223]
第3幅图像的旋转向量:
[-20.74887860969298;
-4.474639433402478;
556.8082716236654]
第3幅图像的旋转矩阵:
[-0.4058075595012663, 0.9128475849885876, -0.04505009691587029;
-0.9120056682526959, -0.4076687585652097, -0.0452972887141638;
-0.05971503769219046, 0.02270396155748794, 0.9979572357586353]
第3幅图像的平移向量:
[-0.1468173977857457;
-3.141123377435706;
-0.0427073517501458]
第4幅图像的旋转向量:
[-20.720696849341;
-4.474060436294295;
556.599996980735]
第4幅图像的旋转矩阵:
[-0.586107880750257, 0.8085261998110076, -0.052563087097773;
-0.80757674537692, -0.5882046127985406, -0.04283846179514141;
-0.06555419474676973, 0.01734121396239316, 0.9976983160502044]
第4幅图像的平移向量:
[-0.14490252377377;
-3.139753690830796;
-0.04300810501325393]
第5幅图像的旋转向量:
[-20.731723909561;
-4.473657404249217;
556.6579056082325]
第5幅图像的旋转矩阵:
[-0.5382579978592557, 0.84120341775744, -0.05052872984568273;
-0.8403432612158349, -0.5402921650675931, -0.04367584796781208;
-0.004319690396747, 0.015260314165515, 0.9977671410526976]
第5幅图像的平移向量:
[-0.14657031235403;
-3.1397552162065;
-0.04362990844397591]
第6幅图像的旋转向量:
[-20.7513187837344;
-4.482799122681538;
556.9558619067801]
第6幅图像的旋转矩阵:
[-0.267245543110148, 0.9628199441867522, -0.03946612172460388;
-0.9620599398746359, -0.262252052732, -0.04605811522635869;
-0.05495900086586333, 0.02565994867515947, 0.9981588426988031]
第6幅图像的平移向量:
[-0.1467338112280252;
-3.1412942203932;
-0.040839802478675]
第7幅图像的旋转向量:
[-20.73750187032778;
-4.469918511835682;
556.72653946618]
第7幅图像的旋转矩阵:
[-0.4792442979678552, 0.87635053830694, -0.048008815306319;
-0.8754797685693511, -0.48120124695038, -0.04450319942605047;
-0.06212952350576181, 0.020751232207965, 0.9978523481311549]
第7幅图像的平移向量:
[-0.1465803780311733;
-3.1403884075776;
-0.04302370816301927]
第8幅图像的旋转向量:
[-20.74115348429;
-4.480154696601399;
556.9693059185084]
第8幅图像的旋转矩阵:
[-0.2546881115151184, 0.9662384528437538, -0.035148391232243;
-0.9654868280971227, -0.256346781499902, -0.04605987826296011;
-0.054491304654329, 0.02587624124077471, 0.99817766947758]
第8幅图像的平移向量:
[-0.146685554929184;
-3.142630538083987;
-0.04166887155581439]
第9幅图像的旋转向量:
[-20.68322524374374;
-4.784019805522751;
556.8437555183575]
第9幅图像的旋转矩阵:
[-0.373119263002548, 0.9267845161120396, -0.04304040277934512;
-0.9259082203247999, -0.37491220766591, -0.04620394007003018;
-0.055746866510918, 0.02261188267274245, 0.9980043685528623]
第9幅图像的平移向量:
[-0.1456536357808763;
-3.141097817861718;
-0.042516085240466]
第10幅图像的旋转向量:
[-20.67032218655698;
-4.788707379609274;
556.7951650623063]
第10幅图像的旋转矩阵:
[-0.418009397122598, 0.9073354787707457, -0.04483829703572415;
-0.9030055574474, -0.41985863414247, -0.0458615491116337;
-0.06043755677108479, 0.02147222157869379, 0.9979410029818]
第10幅图像的平移向量:
[-0.1457976684119461;
-3.13962052373;
-0.0355537567755]
三、感想
通过对本次实验的完成,我对相机标定的研究有了直观的认识,这个过程充分锻炼了我分析问题的能力,对理论知识的学习能力以及编程解决实际问题的能力。我也学会了如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程。当我通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我对相机标定的理解,更能加深我对此的记忆。