文章目录
- 为什么要进行相机参数标定
- 相机内参矩阵原理
- 相机标定方法——Recap: 相机标定
- 张正友标定法
- 相机模型
- 计算单应性矩阵H
- 计算内参数矩阵
- 计算外部参数
- 实验(matlab实现)
为什么要进行相机参数标定
在拍摄中,相机可能会出现畸变,用软件的方法校正生成的图像,避免拍摄出的图像产生桶形和枕形畸变
不同的镜头的在生产和组装过程中的畸变程度各不相同,通过相机标定可以校正这种镜头畸变,生成矫正后的图像。
相机内参矩阵原理
针孔相机模型
设P=(X,Y,Z)为场景中的一点,在针孔相机模型中,其要经过以下几个变换,最终变为二维图像上的像点p=(μ,ν)
1、将P从世界坐标系通过刚体变换(旋转和平移)变换到相机坐标系,这个变换过程使用的是相机间的相对位姿,也就是相机的外参数。
2、从相机坐标系,通过透视投影变换到相机的成像平面上的像点p=(x,y)
3、将像点p从成像坐标系,通过缩放和平移变换到像素坐标系上点p=(μ,ν)
相机将场景中的三维点变换为图像中的二维点,也就是各个坐标系变换的组合,可将上面的变换过程整理为矩阵相乘的形式
矩阵K称为相机的内参数矩阵
对于大多数标准相机来说,可将扭曲参数γ设为0.
像主点(光心):光线坐标轴和图像平面的交点
相机标定方法——Recap: 相机标定
因为相机拍摄的照片会损失三维的信息。
因此如果要对相机进行标定,我们首先要恢复照片的三维信息
在过去,通常采用制造三个相互垂直的平面
标定工具需要有极高的精度,包括不同平面的角度、特征点的物理距离等。因此制作标定工具十分困难。
张正友标定法
使用棋盘格标定的方法,将照片中的三维信息压缩为二维(Z=0)
在张氏标定法中,用于标定的棋盘格是三维场景中的一个平面Π,其在成像平面的像是另一个平面π,知道了两个平面的对应点的坐标,就可以求解得到两个平面的单应矩阵H。
其中,标定的棋盘格是特制的,其角点的坐标是已知的;图像中的角点,可以通过角点提取算法得到(如Harris角点),这样就可以得到棋盘平面Π和图像平面π的单应矩阵H。
方法步骤:
1、检测每张图片中的棋盘图案的角点;
2、利用解析解估算方法计算出5个内部参数,以及6个外部参数
3、通过基于极大似然准则的优化解,提高A,R,t矩阵的精度。
相机模型
s: 世界坐标系到图像坐标系的尺度因子
A: 相机内参矩阵
(u0,v0): 像主点坐标
α, β: 焦距与像素横纵比的融合
γ: 径向畸变参数令棋盘格平面为Z=0的平面。
注意,s对于齐次坐标来说,不会改变齐次坐标值。
定义旋转矩阵R的第i列为 ri, 则有
计算单应性矩阵H
H表示的是成像平面和标定棋盘平面之间的单应矩阵(Homographic矩阵)
可通过最小二乘,从角点世界坐标到图像坐标的关系求解
H是一个齐次矩阵,所以有8个未知数,至少需要8个方程,每对对应点能提供两个方程,所以至少需要四个对应点,就可以算出世界平面到图像平面的单应性矩阵H。
计算内参数矩阵
由于旋转矩阵是个正交矩阵,r1和r2正交
代入可得:
即每个单应性矩阵能提供两个方程,而内参数矩阵包含5个参数,要求解,至少需要3个单应性矩阵。为了得到三个不同的单应性矩阵,我们使用至少三幅棋盘格平面的图片进行标定。通过改变相机与标定板之间的相对位置来得到三个不同的图片。
为了方便计算,定义如下:
可以看到,B是一个对称阵,所以B的有效元素为六个,让这六个元素写成向量b,即
令hi为单应矩阵H的第i个行向量,则有
根据b的定义,可以推导出如下公式
有了上边的等式,再来看从一幅标定板图像得到的等式
由
推出
如果有n组观察图像,则V 是 2n x 6 的矩阵
根据最小二乘定义,V b = 0 的解是 VTV 最小特征值对应的特征向量。
因此, 可以直接估算出 b,后续可以通过b求解内参
当观测平面 n ≥ 3 时,可以得到b的唯一解
当 n = 2时, 一般可令畸变参数γ = 0
当 n = 1时, 仅能估算出α 与 β, 此时一般可假定像主点坐标 u0 与 v0 为0
对于方程Vb=0可以使用SVD求得其最小二乘解。对V^TV进行SVD分解,其最小特征值对应的特征向量就是Vb=0的最小二乘解,从而求得矩阵B。由于这里得到的B的估计值是在相差一个常量因子下得到的,所以有:
计算外部参数
基于极大似然准则的优化解这里不做介绍
实验(matlab实现)
设备:华为荣耀V9
matlab实现参考:
实验结果:
Camera Intrinsics 相机内部参数
IntrinsicMatrix: [3x3 double] 内参矩阵
FocalLength: [3.2069e+03 3.2136e+03] 焦距
PrincipalPoint: [1.9719e+03 1.4998e+03] 主点, 投影中心
Skew: 0 倾斜参数Lens Distortion 镜头扭曲
RadialDistortion: [0.0441 -0.2188] 径向失真
TangentialDistortion: [0 0 ]切线失真Camera Extrinsics 相机外部参数
RotationMatrices: [3x3x19 double] 旋转矩阵
TranslationVectors: [19x3 double] 平移向量Accuracy of Estimation 估计准确度
MeanReprojectionError: 1.6714 平均投影错误
ReprojectionErrors: [35x2x19 double] 重投影错误
ReprojectedPoints: [35x2x19 double] 重投影点Calibration Settings 校准设置
NumPatterns: 19
WorldPoints: [35x2 double]
WorldUnits: ‘mm’
EstimateSkew: 0
NumRadialDistortionCoefficients: 2
EstimateTangentialDistortion: 0
show original 原始图像
show undistorted 矫正图像