前言:
2012年的暑假,由于私人原因我删掉了几乎所有的技术日志,近日有网友提出想看这方面的文章,我考虑了再三,将不会涉及机密的部分重新整理,图片已经找不到了,特此致歉。
说明
MATLAB 的相机标定工具箱 camera calibration toolbox 是由加州理工大学开发的,网上有相应的使用帮助文档。这里是我自己以前学习这个工具箱过程中总结的一些内容。
有些内容未必准确,请注意甄别。
Calib中相机内参数的确定
焦距
主点:照片的几何中心,相机主光轴与照片的交点(principal point)
偏斜系数
扭曲度
外参数
平移 (3*1平移向量)
旋转 (3*3旋转矩阵)
算法核心函数
go_calib_optim.m 标定,
输入:一组特征点在图像中的位置和网格坐标
输出:变换矩阵(相机内参数、外参数)
go_calib_optim_iter 计算相机内外参数的核心函数
输入:特征点在图像中的位置 及 相应的网格坐标
输出:相机内参数
相机变换矩阵(由世界坐标系坐标转换成相机坐标系坐标)
三维旋转和平移向量
analyse_error.m 分析偏差
compute_homography.m 单应矩阵计算
输入:照片平面的齐次坐标 三维平面上的齐次坐标
输出:单应矩阵(Homography ) 计算前的正交化矩阵
compute_extrinsic 计算外部参数
输入:相机的内部参数、一组特征点在图像中的位置和网格坐标
输出:相机外参数(旋转向量和平移向量)
project_points2
输入:相机的内外参数、以及一组点在世界坐标系的坐标
输出:这组点投影到照片的坐标
Rigid_motion 刚性运动变换
输入:世界坐标系与相机坐标系的刚性运动参数(旋转向量和平移向量),即相机外部参数
一组点在世界坐标系的三维坐标
输出:这组点在相机坐标系的坐标
rodrigues 旋转向量与旋转矩阵的转换
Calib中变量表示
相机坐标系(Oc,Xc,Yc,Zc) 相机坐标系中的向量 XXc = [Xc;Yc;Zc]
网格坐标系 (O,X,Y,Z) 网格坐标系中的向量 XX = [X;Y;Z]
这里的网格坐标系其实还不是世界坐标系,因为对于calib工具箱给的第一个实例来说,每张标定板的位置都是变化的。
网格坐标系
Calib的相机标定过程
Calib的相机标定原理,实际上是微软研究院的张正友提出的一种利用平面模板的标定方法,该方法只需从不同角度对模板拍摄几幅影像,通过对每幅影像的单应矩阵即可计算出相机内参数,并可以利用反投影法优化求精。
1、用户指定图库、手工指定网格的4个角
2、自动提取所有网格结点
3、由 一组特征点在图像中的位置和网格坐标 计算 变换矩阵(相机内参数、外参数)
4、偏差估计
5、计算结果可视化展现
在欧氏几何意义下,投影矩阵可以表示为摄像机内部参数与外部参数的乘积,其投影关系表示为:
投影矩阵
图象上点的位置与其在空间物体表面相应点的几何位置有关。两者的对应关系通过投影矩阵来度量
P1只与摄像机的内部结构有关,因此称为摄像机的内部参数矩阵,P2完全由摄像机相对于世界坐标系的位置和方向决定,称为摄像机的外部参数矩阵。