计算机视觉学习9:相机模型与参数标定

相机标定的意义

在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数(内参、外参、畸变参数)的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。
畸变(distortion)是对直线投影(rectilinear projection)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration),可能由于摄像机镜头的原因。

相机模型

数码相机图像拍摄的过程实际上是一个光学成像的过程。相机的成像过程涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系以及这四个坐标系的转换。

一、 理想透视模型——针孔成像模型

相机模型是光学成像模型的简化,目前有线性模型和非线性模型两种。实际的成像系统是透镜成像的非线性模型。最基本的透镜成像原理如图所示:
计算机视觉学习9:相机模型与参数标定_第1张图片
其中 u 为物距, f 为焦距,v 为相距。三者满足关系式:在这里插入图片描述
相机的镜头是一组透镜,当平行于主光轴的光线穿过透镜时,会聚到一点上,这个点叫做焦点,焦点到透镜中心的距离叫做焦距 f。数码相机的镜头相当于一个凸透镜,感光元件就处在这个凸透镜的焦点附近,将焦距近似为凸透镜中心到感光元件的距离时就成为小孔成像模型。小孔成像模型如图所示。
计算机视觉学习9:相机模型与参数标定_第2张图片
小孔成像模型是相机成像采用最多的模型。在此模型下,物体的空间坐标和图像坐标之间是线性的关系,因而对相机参数的求解就归结到求解线性方程组上。四个坐标系的关系图如下图所示,其中 M 为三维空间点,m 为 M 在图像平面投影成的像点。
计算机视觉学习9:相机模型与参数标定_第3张图片

参考博客:https://blog.csdn.net/lsh_2013/article/details/47615309

二、坐标转换基础

在视觉测量中,需要进行的一个重要预备工作是定义四个坐标系的意义,即 摄像机坐标系 、 图像物理坐标系、 像素坐标系 和 世界坐标系(参考坐标系) 。
①世界坐标系:是客观三维世界的绝对坐标系,也称客观坐标系。因为数码相机安放在三维空间中,我们需要世界坐标系这个基准坐标系来描述数码相机的位置,并且用它来描述安放在此三维环境中的其它任何物体的位置,用(Xw, Yw, Zw)表示其坐标值。

②相机坐标系(光心坐标系):以相机的光心为坐标原点,X 轴和Y 轴分别平行于图像坐标系的 X 轴和Y 轴,相机的光轴为Z 轴,用(Xc, Yc, Zc)表示其坐标值。

③图像坐标系:以CCD 图像平面的中心为坐标原点,X轴和Y 轴分别平行于图像平面的两条垂直边,用( x , y )表示其坐标值。图像坐标系是用物理单位(例如毫米)表示像素在图像中的位置。

④像素坐标系:以 CCD 图像平面的左上角顶点为原点,X 轴和Y 轴分别平行于图像坐标系的 X 轴和Y 轴,用(u , v )表示其坐标值。数码相机采集的图像首先是形成标准电信号的形式,然后再通过模数转换变换为数字图像。每幅图像的存储形式是M × N的数组,M 行 N 列的图像中的每一个元素的数值代表的是图像点的灰度。这样的每个元素叫像素,像素坐标系就是以像素为单位的图像坐标系。

2.1图像坐标系(x,y)至像素坐标系(u,v)

1.两坐标轴互相垂直
计算机视觉学习9:相机模型与参数标定_第4张图片
此时有计算机视觉学习9:相机模型与参数标定_第5张图片
2.一般情况,两轴不互相垂直计算机视觉学习9:相机模型与参数标定_第6张图片
此时有
计算机视觉学习9:相机模型与参数标定_第7张图片
写成矩阵形式为:
计算机视觉学习9:相机模型与参数标定_第8张图片

2.2相机坐标系(Xc,Yc,Zc)至图像坐标系(x,y)

计算机视觉学习9:相机模型与参数标定_第9张图片
(根据小孔成像原理,图像坐标系应在相机坐标系的另一边,为倒立反向成像,但为方便理解和计算,故投影至同侧。)

根据三角形相似性原理得:
计算机视觉学习9:相机模型与参数标定_第10张图片

2.3世界坐标系(Xw,Yw,Zw)至相机坐标系(Xc,Yc,Zc)

计算机视觉学习9:相机模型与参数标定_第11张图片

2.4合并公式

计算机视觉学习9:相机模型与参数标定_第12张图片
计算机视觉学习9:相机模型与参数标定_第13张图片
R、T矩阵为相机的外参矩阵。

参考博客:https://blog.csdn.net/Vision_Eye/article/details/85369108

三、实际成像模型

理想的透视模型是针孔成像模型,物和像会满足相似三角形的关系。但是实际上由于相机光学系统存在加工和装配的误差,透镜就并不能满足物和像成相似三角形的关系,所以相机图像平面上实际所成的像与理想成像之间会存在畸变。畸变属于成像的几何失真,是由于焦平面上不同区域对图像的放大率不同形成的画面扭曲变形的现象,这种变形的程度从画面中心至画面边缘依次递增,主要在画面边缘反映比较明显。为了减小畸变,拍摄图片时应尽量避免用镜头焦距的最广角端或最远端拍摄。实际的相机成像模型如下图所示。
计算机视觉学习9:相机模型与参数标定_第14张图片
其中 mr(xr,yr)表示实际投影点的像平面坐标系下的物理坐标,mi(xi,yi)表示理想投影点的像平面坐标系下的物理坐标。

参考博客:https://blog.csdn.net/lsh_2013/article/details/47615309

四、相机内外参数以及畸变参数

4.1内参

为什么叫内参呢,这个是因为这些参数是只有相机来决定的,不会因为外界环境而改变。
相机的内参是:1/dx、1/dy、r、u0、v0、f
opencv中的内参是4个,分别为fx、fy、u0、v0。其实opencv中的fx也就是F*Sx,其中F是焦距上面的f,Sx是像素/每毫米也就是上面的1/dx。
dx和dy表示x方向和y方向的一个像素分别占多少个单位,是反映现实中的图像物理坐标关系与像素坐标系转换的关键(我理解的是可以反映像元密度)。
u0,v0代表图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数。

4.2外参

相机的外参是6个,三个轴的旋转参数分别是(w、δ、θ),把每个轴的33旋转矩阵进行组合(矩阵之间相乘),得到集合三个轴旋转信息的R,其大小还是33;T的三个轴的平移参数(Tx、Ty、Tz)。R、T组合成3*4的矩阵,其是转换到标定纸坐标的关键。

4.3畸变参数

畸变一般可以分为:径向畸变、切向畸变
径向畸变来自于透镜形状。
切向畸变来自于整个摄像机的组装过程。
畸变还有其他类型的畸变,但是没有径向畸变、切向畸变显著,所以忽略不计。
计算机视觉学习9:相机模型与参数标定_第15张图片

畸变参数是:k1,k2,k3径向畸变,p1,p2是切向畸变系数。径向畸变发生在相机坐标系转像物理坐标系的过程中。
切向畸变:产生的原因是透镜不完全平行于图像。

参考博客:https://blog.csdn.net/qq_16481211/article/details/79464786

五、畸变模型

5.1opencv畸变模型

径向畸变模型:计算机视觉学习9:相机模型与参数标定_第16张图片
切向畸变模型:
在这里插入图片描述
计算机视觉学习9:相机模型与参数标定_第17张图片
可得:
计算机视觉学习9:相机模型与参数标定_第18张图片
由公式可得畸变有k1,k2,k3,p1,p2五个参数,对于质量比较好的相机来说,切向畸变很小,可忽略,径向畸变系数k3也可忽略,只计算k1,k2两个参数。张正友标定中就默认为p1,p2为0。

5.2张正学标定中的畸变模型

计算机视觉学习9:相机模型与参数标定_第19张图片

参考博客:https://blog.csdn.net/Vision_Eye/article/details/85369108

相机标定方法

1、传统相机标定

最简单的相机标定为线性标定,即不考虑相机的畸变而只考虑空间坐标转换。
每个坐标点有X,Y两个变量,可列两个方程,相机内参有5个未知数,外参平移和旋转各3个,共有11个变量,因此至少需要6个特征点来求解。

2、非线性标定

当镜头畸变明显时必须考虑畸变,一般较为便宜的网络摄像头畸变特别大,而价格较贵的工业摄像头则畸变很小,因为其中已经嵌入了许多消除畸变的程序。这时线性模型转化为非线性模型,需要通过非线性标定方法求解。有最速下降法,遗传算法,高斯牛顿法和神经网络算法等。

3、张正友标定介绍

(张正友标定只考虑了径向畸变,没有考虑切向畸变)

由上面的坐标转换可得:
计算机视觉学习9:相机模型与参数标定_第20张图片
我们把世界坐标系放置在标定板平面上,令Z=0,这时有:
计算机视觉学习9:相机模型与参数标定_第21张图片
计算机视觉学习9:相机模型与参数标定_第22张图片
H为3X3矩阵,并且有一个元素作为齐次坐标,则有8个未知元素,一组坐标对应两个方程,则至少需要四组对应的点即可算出单应性矩阵H。
在这里插入图片描述
旋转矩阵为正交矩阵,因此有以下性质:
计算机视觉学习9:相机模型与参数标定_第23张图片
代入可得
计算机视觉学习9:相机模型与参数标定_第24张图片
由此可求出单应性矩阵A,因A有5个元素,则至少需要三个单应性矩阵方能求解,那么就需要三张不同的标定图片,这就是为什么标定需要用至少3张以上的图片的原因之一

参考博客:https://blog.csdn.net/Vision_Eye/article/details/85369108
张正友标定介绍 :https://blog.csdn.net/u010128736/article/details/52860364
张正友标定法翻译:https://blog.csdn.net/heroacool/article/details/50286677
张正友标定法详解:https://www.cnblogs.com/wangguchangqing/p/8335131.html#autoid-0-0-0

实验

本文采用的是matlab工具箱进行相机标定

matlab相机标定教程:https://blog.csdn.net/heroacool/article/details/51023921

本文标定设备:oppo r11s
实验结果:
Camera Intrinsics 相机内部参数
IntrinsicMatrix: [3x3 double] 内参矩阵
计算机视觉学习9:相机模型与参数标定_第25张图片
cameraParams =

cameraParameters (具有属性):

Camera Intrinsics
IntrinsicMatrix: [3x3 double]
FocalLength: [4.2946e+03 4.1304e+03]焦距
PrincipalPoint: [1.7341e+03 2.3069e+03]主点, 投影中心
Skew: 0倾斜参数

Lens Distortion镜头扭曲
RadialDistortion: [0.2264 -0.7127]径向失真
TangentialDistortion: [0 0]切线失真

Camera Extrinsics相机外部参数
RotationMatrices: [3x3x14 double]旋转矩阵
TranslationVectors: [14x3 double]平移向量

Accuracy of Estimation估计准确度
MeanReprojectionError: 2.3469平均投影错误
ReprojectionErrors: [49x2x14 double]重投影错误
ReprojectedPoints: [49x2x14 double]重投影点

Calibration Settings校准设置
NumPatterns: 14
WorldPoints: [49x2 double]
WorldUnits: ‘mm’
EstimateSkew: 0
NumRadialDistortionCoefficients: 2
EstimateTangentialDistortion: 0

estimationErrors =

cameraCalibrationErrors (具有属性):

IntrinsicsErrors: [1x1 intrinsicsEstimationErrors]
ExtrinsicsErrors: [1x1 extrinsicsEstimationErrors]

计算机视觉学习9:相机模型与参数标定_第26张图片
计算机视觉学习9:相机模型与参数标定_第27张图片
计算机视觉学习9:相机模型与参数标定_第28张图片
计算机视觉学习9:相机模型与参数标定_第29张图片

注:如果棋盘格不够平整的话误差会比较大,最好贴在某个平面上。

你可能感兴趣的:(计算机视觉学习9:相机模型与参数标定)