因为每个镜头在生产和组装过程中可能会出现不同程度的畸变(畸变是一种光学错位现象,通俗的讲就是本来是直线的物体,实际拍出的效果是扭曲的);而通过相机标定可以矫正这种畸变,避免拍出的图像出现畸变。另外,可以根据相机标定得到的相机参数建立相机成像几何模型,将世界坐标系中的3D图像映射到二维平面上,这意味着我们也可以从二维图像+模型逆推到原来三维信息。
在介绍详细原理之前,先讲下这个方法的步骤:
1、打印一张棋盘格,把它贴在一个平面上,作为标定物。
2、通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。
3、从照片中提取棋盘格角点(Harris)。
4、估算理想无畸变的情况下,五个内参和六个外参。
5、应用最小二乘法估算实际存在径向畸变下的畸变系数。
6、极大似然法,优化估计,提升估计精度。
2.1 基本方程
2.1.1 注释
二维点用m=[u,v]的转置,三维点用M=[X,Y,Z]的转置表示。三维点M和他平面图像投影点m关系如下
s是任意比例因子。[R,t] 称为外参,R是旋转矩阵,t是评议矩阵。A是相机内矩阵参数。
(u0,v0)是任意坐标的主点,α和β是图像u和v轴的比例因子,c是描述两个坐标轴倾斜角的参数。
2.1.2 模型平面与其图像间的单应性关系
因为标定物是平面,所以我们可以把世界坐标系构造在Z=0的平面上。然后进行单应性计算。令Z=0可以将上式转换为如下形式:
当Z=0时,M可以表示为M=[X,Y]的转置,M的增广向量=[X,Y,1]的转置。因此点M和它的在图像上映射点m的关系用单应性矩阵H联系为:
H是一个3X3的系数矩阵。
2.1.3 内参的约束条件
令H=[h1,h2,h3],由上述的点M和图像映射点m的关系可知:
其中λ是任意的标量。因为r1和r2分别是绕x,y轴旋转的,所以r1和r2是正交的,可得r1和r2的内积是0。因为旋转不改变尺度,旋转向量的模是1,即|r1|=|r2|=1。根据上述结论可得对一个给定的单应性矩阵,对内参有两个基本的约束条件:
式子中,h1,h2是通过单应性求解出来的那么未知量就仅仅剩下,内参矩阵A了。内参阵A包含6个参数:α,β,u0,v0,γ,1。其中有五个未知量,那么如果我们想完全解出这五个未知量,则需要3个单应性矩阵。3个单应性矩阵在2个约束下可以产生6个方程。这样可以解出全部的五个内参了。我们至少需要三张不同的标定物的平面照片,才能获得三个不同的单应性矩阵。
2.2 解决方法
2.2.1 内参矩阵
令:
可得出B是对称矩阵,对称矩阵有三对对称的元素是相等的,所以只要解出下面6个元素就可以得到完整的B,为此,将这六个元素构成向量b。
接下来,假设H的第i列向量如下:
于是可以得到
因此可以得到
根据2.1.3得到的两个约束条件,可以写为齐次式:
如果观测了n张图片,迭代可以得到
V是一个2nX6的矩阵。如果n>3,通常会得到一个唯一解b。根据b我们可以计算内参矩阵A。当 n = 2时, 一般可令畸变参数γ = 0。当 n = 1时, 仅能估算出α 与 β, 此时一般可假定像主点坐标 u0 与 v0 为0。
根据公式:
可从矩阵B中取出内部参数:
2.2.2 外参矩阵
通过2.2.1 的运算,我们获得了镜头的内参矩阵。对于外部参数可通过Homography求解,由 H = [h1 h2 h3] = λA[r1 r2 t],可以根据上面公式进行化简可得到如下:
相对于复杂的三维物体,平面棋盘模式更加容易处理。所以我们用棋盘作为相机标定的标定物。同时,二维物体相对于三维物体会缺少一部分信息,于是我们会多次改变棋盘的方位来捕捉图像,以求获得更丰富的坐标信息。所以我们需要使用标定板在不同位置、不同角度、不同姿态下拍摄标定图片,最少需要3张,以10~20张为宜。
在本次实验中,一共选取了20张标定物图片,其中标定物棋盘的小格子实际大小为24mm。使用Matlab的Camera Calibrator。在应用程式中找到Camera Calibrator打开。
可参考教程 https://blog.csdn.net/JennyBi/article/details/85764988。里面有详细使用方法。
注意点:一、照片尺寸须一致;二,建议不要一次性将所有的照片全部添加进去,因为有些照片不符合规范,Matlab会判定这张照片不算对计算机的性能要求比较高;三、虽然实际上是要各种角度各种位置拍标定照片,但照片中的标定物不要倾斜偏差较大,因为这样子最后得出的误差会比较大。
最后会得到两张图camera-centric view和pattern-centric view两张图。
camera-centric view是指以相机为中心的视图。如果在静态摄像机周围移动模式时捕捉棋盘图,那么这种可视化最有用,请特别关注异常值,可以选择删除这些异常值。
pattern-centric view是以模式为中心的视图。如果你需要捕捉棋盘图像这是最有用的。移动相机周围的固定模式时特别注意异常值,可以选择删除这些异常值。
得出参数如下:
手机型号:荣耀V10
Camera Intrinsics
IntrinsicMatrix: [3x3 double] 内参矩阵
FocalLength: [2.8396e+03 2.9120e+03]焦距
PrincipalPoint: [1.8398e+03 1.3894e+03] [光]主点
Skew: 0 偏斜
Lens Distortion 透镜畸变
RadialDistortion: [0.0241 -0.0631] 径向畸变
TangentialDistortion: [0 0] 切向畸变
Camera Extrinsics 相机外参
RotationMatrices: [3x3x15 double] 旋转矩阵
TranslationVectors: [15x3 double] 平移向量
Accuracy of Estimation 估计正确性
MeanReprojectionError: 0.5827 平均重投影误差
ReprojectionErrors: [49x2x15 double] 重投影误差
ReprojectedPoints: [49x2x15 double] 重投影点
Calibration Settings 校准设置
NumPatterns: 15 图片数量
WorldPoints: [49x2 double]
WorldUnits: ‘mm’
EstimateSkew: 0
NumRadialDistortionCoefficients: 2 径向畸变系数
EstimateTangentialDistortion: 0 估计切向畸变