1.为什么需要标定相机?

主要因为生产的相机成像传感器不是很完美,另外镜头与成像面不是水平的,而是有夹角的,所以通过相机看到的物体的位置与物体实际的位置像是不匹配的。

2.相机标定的内外参数说明

内参数主要为相机的基础矩阵M畸变向量dist,分别表示为
M=[fx0u00fyv0001] \begin{gathered} M= \begin{bmatrix} f_{x} & 0 & u_{0} \\ 0 & f_{y} & v_{0} \\0&0&1 \end{bmatrix} \quad \end{gathered}

dist=[k1,k2,p1,p2,k3] dist = [k_{1}, k_{2},p_{1},p_{2},k_{3}]
其中(fx,fy)(f_{x}, f_{y})是焦距,(u0,v0)(u_{0},v_{0})为焦点坐标
径向畸变[k1,k2,k3][k_{1}, k_{2},k_{3}]:这是由于透镜先天条件原因(透镜形状),成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越厉害。这里有3个参数,k1,k2,k3其中k3是可选参数。
切向畸变[p1,p2][p_{1},p_{2}]:这是摄像机安装过程造成的,如当透镜不完全平行于图像平面的时候产生的。

外参主要是旋转矩阵R33R_{3*3}平移向量T=[t1,t2,t3]T=[t_{1}, t_{2}, t_{3}]

[xy1]=[fx0u00fyv0001][r1r2r3t1r4r5r6t2r7r8r9t3][XYZ1] \begin{gathered} \begin{bmatrix} x \\ y \\1 \end{bmatrix}= \begin{bmatrix} f_{x} & 0 & u_{0} \\ 0 & f_{y} & v_{0} \\0&0&1 \end{bmatrix} \begin{bmatrix} r_{1} & r_{2}& r_{3} & t_{1}\\ r_{4} & r_{5} & r_{6} & t_{2}\\ r_{7}& r_{8}& r_{9}& t_{3} \end{bmatrix} \begin{bmatrix} X \\ Y \\Z\\1 \end{bmatrix} \quad \end{gathered}
(x,y)是图像平面的物理坐标,(X,Y,Z)为实际的世界坐标。它们的关系就是x=M*[R][T]*X,所以相机标定的内外参数是关乎物体实际坐标到相机图像的物理坐标的转换。
相机的外参和内参是不同的,内参是固定的不会变化,求出以后都可以直接使用,而外参是是决定世界坐标系到相机左标系的转换,如果相机位置改变,外参也会改变。所以决定单目相机的外参和双目相机的外参也有所不同,双目相机的外参是指一个相机相对于另一个相机的位置坐标变化,所以双目相机的两个摄像头固定后,其外参也是固定的,我们可以基于外参用来测距、求深度图等

3.坐标变换

我们在相机标定(视觉定位)要考虑的问题:

1.世界坐标←→相机坐标

就是将物体在世界中的坐标对应到相机坐标中,在这个过程中需要相机的外参:旋转矩阵R和平移向量T。

2.相机坐标←→图像的物理坐标

在这个过程中,是一个光学投影的过程,需要使用到相机的内参:焦距f、焦点坐标(u0,v0)等,也就是相机的基本矩阵。

3.图像的物理坐标←→图像的像素坐标

这个过程就是在步骤2的基础上,将物理坐标中的单位距离mm转换为像素pixel个数。

4.真实图像←→理想图像

理想很美好,现实很残酷,真正得到的图像是有畸变的,所以这里将用到畸变向量去矫正图像。

解决以上四个变换,我们就可以将世界坐标中的点和图像中的像素随意转换了。
另配图一幅加以理解:
相机参数说明
相机参数说明
具体标定过程请移步
1.单目相机标定python+opencv
2.双目相机标定matlab

参考:1.https://blog.csdn.net/weilixin88/article/details/91603319

相关文章: