文章目录
一、相机标定目的及目标
1、为什么要进行相机标定
相机在出厂之前都需要进行相机标定,用软件的方法校正生成的图像,避免拍摄出的图像产生桶形和枕形畸变;不同的镜头的在生产和组装过程中的畸变程度各不相同,通过相机标定可以校正这种镜头畸变,生成矫正后的图像。
2、目标
相机标定的目标是我们找一个合适的数学模型,求出这个模型的参数,这样我们能够近似这个三维到二维的过程,使这个三维到二维的过程的函数找到反函数。这个逼近的过程就是「相机标定」,我们用简单的数学模型来表达复杂的成像过程,并且求出成像的反过程。标定之后的相机,可以进行三维场景的重建,即深度的感知,这是计算机视觉的一大分支。
二、相机标定原理
1、关于坐标系
1.1四个坐标系
世界坐标系:
世界坐标系也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。是真实世界的立体空间坐标。世界坐标系的位置可以根据实际情况自由确定。单位m。
相机坐标系:
根据透镜成像原理,将世界坐标在照相机内呈现,是一个三维坐标系。光心为原点,单位m。
图像平面坐标系:
将相机呈现的三维坐标投影到屏幕上,而建立的新坐标系,不含高程信息,是一个二维坐标系。原点为成像平面中点,单位mm。
像素坐标系:
将投影的图像坐标离散抽样形成的做种图片,是一个二维的坐标系。原点为图像左上角,单位pixel。
1.2坐标系转换
①世界坐标(Xw,Yw,Zw)->相机坐标(Xc,Yc,Zc)
②相机坐标(Xc,Yc,Zc)->图像平面坐标系(x,y)
根据小孔成像原理,得到如下针孔相机模型。
由上图模型,
③图像平面坐标(x,y)->像素坐标(u,v)
u0,v0是图像平面中心(像主点)
总结四个坐标系之间存在着下述关系:
2、内参矩阵与外参矩阵
由以上坐标系间转换关系,可得出
2.1内参矩阵
表示空间中一点到像平面一点坐标的映射
2.2外参矩阵
表示空间坐标系到相机坐标系的映射关系
3、畸变
3.1径向畸变
径向畸变就是沿着透镜半径方向分布的畸变,产生原因是光线在原理透镜中心的地方比靠近中心的地方更加弯曲,这种畸变在普通廉价的镜头中表现更加明显,径向畸变主要包括桶形畸变和枕形畸变两种。以下分别是枕形和桶形畸变示意图:
实际情况中我们常用r=0处的泰勒级数展开的前几项来近似描述径向畸变,矫正径向畸变前后的坐标关系为:
4.2切向畸变
切向畸变是由于透镜本身与相机传感器平面(像平面)或图像平面不平行而产生的,这种情况多是由于透镜被粘贴到镜头模组上的安装偏差导致。畸变模型可以用两个额外的参数p1和p2来描述:
其中,
4、标定方法
4.1 线性标定
4.1.1 原理
由最小二乘法构建超定方程,相机内参有5个未知数,外参平移和旋转各3个,共有11个变量,因此至少需要6个特征点来,每个特征点两个方程,通过过饱和攻击,以求解标定参数。
4.1.2优缺点
优点:
- 所有的相机参数集中在一个矩阵中,便于求解
- 通过矩阵可以直接描述世界坐标中的三维点,到二维 图像平面中点的映射关系
缺点:
- 无法直接得知具体的内参数和外参数
- 求解出的11个未知量,比标定参数(9个)更多,可能存在参数不独立等问题
4.2 非线性标定
主要思路为:随机初始化变化参数,通过优化标定参数矩阵M的似然函数求解,优化的方法有梯度下降法,牛顿法,高斯-牛顿法等等
4.3 张正友标定
4.3.1 标定原理
-
计算单应性矩阵H
单应性:在计算机视觉中被定义为一个平面到另一个平面的投影映射。首先确定,图像平面与标定物棋盘格平面的单应性。
设三维世界坐标的点为X=[X,Y,Z,1]T,,二维相机平面像素坐标为m=[u,v,1]T,所以标定用的棋盘格平面到图像平面的单应性关系为:s0m=K[R|T]X (其中,K为相机的内参矩阵,R为外部参数矩阵(旋转矩阵),T为平移向量。令,设棋盘格位于Z=0的平面,定义旋转矩阵R的第i列为 ri, 则有:
于是空间到图像的映射可改为:H=λK[r1 r2 t],其中H 是描述成像平面和标定棋盘平面之间的单应性(Homographic矩阵),可通过最小二乘,从角点世界坐标到图像坐标的关系求解。
-
计算内参数矩阵
根据步骤1中的式子,令 H 为 H = [h1 h2 h3],则 [h1 h2 h3]=λK[r1 r2 t],再根据正交和归一化的约束可以得到等式:
即每个单应性矩阵能提供两个方程,而内参数矩阵包含5个参数,要求解,至少需要3个单应性矩阵。为了得到三个不同的单应性矩阵,我们使用至少三幅棋盘格平面的图片进行标定。通过改变相机与标定板之间的相对位置来得到三个不同的图片。为了方便计算,我们定义:
B 中的未知量可表示为6D 向量 b,
设H中的第i列为 hi,,根据b的定义,可以推导出公式
,
,最后推到出
通过上式,我们可知当观测平面 n ≥ 3 时,即至少3幅棋盘格图像,可以得到b的唯一解,求得相机内参数矩阵K。 -
计算外参数矩阵
外部参数可通过Homography求解,由 H = [h1 h2 h3] = λA[r1 r2 t],可推出
-
最大似然估计
上述的推导结果是基于理想情况下而言,但由于可能存在一些其他干扰,所以使用最大似然估计进行优化。假设拍摄了n张棋盘格图像,每张图像有m个角点。最终获得的最大似然估计公式为
4.3.2 优缺点
优点:
张正友的平面标定方法是介于传统标定方法和自标定方法之间的一种方法。它既避免了传统方法设备要求高,操作繁琐等缺点,又较自标定方法精度高。
缺点:
需要确定模板上点阵的物理坐标以及图像和模板之间的点的匹配。
三、术语
内部参数 (Intrinsics) | |
---|---|
内参矩阵 | IntrinsicMatrix |
焦距 | FocalLength |
像主点(投影中心) | PrincipalPoint |
偏斜参数 | Skew |
径向畸变 | RadialDistortion |
切向畸变 | TangentialDistortion |
外部参数(Extrinsics) | |
---|---|
旋转矩阵 | RotationMatrices |
平移向量 | TranslationVectors |
估计精准度(Accuracy of Estimation) | |
---|---|
平均重投影误差 | MeanReprojectionError |
重投影误差 | ReprojectionErrors |
重投影点 | ReprojectedPoints |
校准设置(Calibration Settings) | |
---|---|
估计偏斜参数 | EstimateSkew |
径向变形系数 | NumRadialDistortionCoefficients |
估计切向畸变 | EstimateTangentialDistortion |
四、实验步骤
- 打印一张棋盘格A4纸张(黑白间距已知),并 贴在一个平板上
- 针对棋盘格拍摄若干张图片(一般10-20张)
- 在图片中检测特征点(Harris角点)
- 根据角点位置信息及图像中的坐标,求解 Homographic矩阵
- 利用解析解估算方法计算出5个内部参数,以及 6个外部参数
- 根据极大似然估计策略,设计优化目标并实现 参数的refinement
五、实验操作
1、实验环境及配置
软件:matlab2018b
相机:HUAWEI P30 后置摄像头
棋盘每个格子大小(手工直尺测量):20cm×20cm
2. 数据集
实验中的棋盘图片为打印出的棋盘图片贴在纸板上,固定棋盘位置,用手机在各个角度加以倾斜拍摄,共12张图片(如下)
3、实验操作
- 打开matlab工具箱,找到图像和计算机视觉模块下的CameraCalibrator
- 添加文件夹内拍好的棋盘图片并设置棋盘格方块大小(此实验中经手工测量棋盘格大小为2cm)
- 点击Calibrate分析
- 点击Export Paramaters to Workspace,输出相机参数结果(在命令行窗口可见)
点击 Generate MATLAB script ,调出脚本文件
六、实验结果
角点检测结果(前6张):
所有参数:
内参矩阵:(输入cameraParams.IntrinsicMatrix命令)
径向畸变:(输入cameraParams.RadialDistortion命令)
外部参数(旋转矩阵):
外部参数(平移向量):
误差可视化:
外部参数可视化:
分析:
- 由结果可知此相机的焦距为fx=639.1390,fy=637.1721;像主点的坐标u0=281.2347,v0=377.3512;平均误差为0.35;
- 误差可视化图中展示了重投影后,每张图片存在的误差。由柱形图可见误差最小的在0.18左右,而误差最大的达到0.65,在对比4和11原图后,能发现图4为正向拍照角度拍摄,棋盘格子畸变程度小,因而重投影后,误差也小;而图11为倾斜角度拍摄,棋盘格子存在径向畸变,因而重投影后,误差大。
- 网上资料显示,误差小于0.5,则准确度较高,实现显示此相机平均误差为0.35,可见相机精准度还是较高的。
七、总结
- 相机标定的目的是矫正镜头畸变,生成矫正后的图像。
- 线性标定法便于求解参数,通过矩阵可以直接描述世界坐标中的三维点,到二维 图像平面中点的映射关系,但无法直接得知具体的内参数和外参数。
- 张正友标定法使用二维方格组成的标定板进行标定,采集标定板不同位姿图片,提取图片中角点像素坐标,通过单应矩阵计算出相机的内外参数初始值,利用非线性最小二乘法估计畸变系数,最后使用极大似然估计法优化参数。该方法操作简单,而且精度较高,可以满足大部分场合。
- 利用matlab工具箱,可快速实现用棋盘格图片做相机标定,且能得到关于参数的可视化数据。