How to handle parameters after calibration ??
承接上一篇文章Camera Calibration,分析使用opencv或者Matlab之后得到的参数;
0.About the Parameters of Calibration
摄像机模型采用经典的小孔模型,如图中Oc(光心),像面π表示的是视野平面,其到光心的距离为f(镜头焦距)。
四个坐标系分别为:世界坐标系(Ow),摄像机坐标系(Oc),图像物理坐标系(O1,单位mm),图像像素坐标系(O,位于视野平面的左上角,单位pix)。
空间某点P到其像点p的坐标转换过程主要是通过这四套坐标系的三次转换实现的,首先将世界坐标系进行平移和转换得到摄像机坐标系,然后根据三角几何变换得到图像物理坐标系,最后根据像素和公制单位的比率得到图像像素坐标系。(实际的应用过程是这个的逆过程,即由像素长度获知实际的长度)。
ps:通过摄像头的标定,可以得到视野平面上的mm/pix分辨率,对于视野平面以外的物体还是需要通过坐标转换得到视野平面上。
1.Calibration by Opencv
使用opencv sample提供的参数例程,输出标定参数*.xml
内有详细的说明,比较直观,不再说明,仅列出:
内参
<Camera_Matrix type_id="opencv-matrix">
<rows>3</rows>
<cols>3</cols>
<dt>d</dt>
<data>
2.7428373207967893e+003 0. 6.4750000000000000e+002 0.
2.7428373207967893e+003 4.8550000000000000e+002 0. 0. 1.</data></Camera_Matrix>
每幅标定图像对应一个外参
<Extrinsic_Parameters type_id="opencv-matrix">
<rows>20</rows>
<cols>6</cols>
<dt>d</dt>
<data>
1.2580296584728148e-001 -8.5844606014736202e-002
1.2229733628808651e-001 -3.1306842717376909e+001
-1.6381156828773015e+002 1.3830839459850151e+003
1.3661289338896690e-001 -8.3203924300670945e-002
5.7179174065683636e-001 1.0823224754141359e+001
-1.9415767395470527e+002 1.3796349208478596e+003
但opencv将这些外参都放在一起,不方便分开使用!
2.Calibration by Matlab
下述内容主要翻译自【1】
使用Matlab标定后得到的结果,如下图所示
焦距,成像主点,Skew,径向和切向畸变参数;
2.1内参矩阵
忽略中间的内容,在标定后的结果矩阵Calib_Results.mat中变量KK存储的即为相机内参;
对比发现,使用Matlab进行标定时,对畸变处理的比较精细,很优秀!
2.2外参矩阵
在文献【1】中有下述说明
每一幅包含标定板的图像,与相机间存在不同的选择和平移变换,在Calib_Results.mat中分别用Rc_*和Tc_*表示,如
内参数标定之后可以重复使用,外参适用于相机在静止的场景内运动,反之亦然,静止的相机之于刚体运动!