相机标定
1. 相机标定
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何关系位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数(内参,外参,畸变参数)的过程就称之为相机标定。
一般来说,标定的过程分为两个部分:
- 第一步:从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括 R,t (相机外参)等参数;
- 第二步:从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括 K(相机内参)等参数;
1.1相机内外参数(重点)
- 什么是相机内参:相机内部参数,内参是相机固有的属性,实际上就是焦距,像元尺寸
- 什么是相机外参:相机外部参数,外参就是相机相对于世界坐标系的旋转和平移变换关系
1.2 为什么要做相机标定
- 那为什么要做相机标定呢?
每个镜头的畸变程度各不相同,通过相机标定可以校正这种镜头畸变。可以认为用这种标定的方式来求解相机内参和畸变参数,相当于一种相机校准,然后这些参数就可以用于后面的求解。例如求解新拍的两幅图片相对的 R 和 t,求解这个外参用到就是标定得到的相机内参和畸变参数。
2. 相机标定的意义
- 在机器视觉领域,相机的标定是一个关键的环节,它决定了机器视觉系统能否有效的定位,能否有效的计算目标物。
- 相机的标定基本上可以分为两种:
第一种是相机的自标定;是相机拍摄周围物体,通过数字图像处理的方法和相关的几何计算得到相机参数,但是这种方法标定的结果误差较大,不适合于高精度应用场合。
第二种是依赖于标定参照物的标定方法。是通过标定参照物,由相机成像,并通过数字图像处理的方法,以及后期的空间算术运算计算相机的内参和外参。这种方法标定的精度高,适用于对精度要求高的应用场合。
3. 相机成像模型
- 相机成像过程中首先涉及坐标系的变换,包含世界坐标系( X w , Y w , Z w X_w,Y_w,Z_w Xw,Yw,Zw),相机坐标系( X e , Y e , Z e X_e,Y_e,Z_e Xe,Ye,Ze),像平面坐标系(x,y)和像素坐标系( u t , v t u_t,v_t ut,vt)。
3.1 像素坐标系
-
像素坐标就是像素在图像中的位置。
一般像素坐标系的左上角的顶点就是远点,水平向右是u,垂直向下是v轴。
下图1.1中任意一个像素点的坐标可以表示为( u t , v t u_t,v_t ut,vt)
-
在像素坐标系中,每个像素的坐标是用像素来表示的,然而,像素的表示方法却不能反应图像中物体的物力尺寸,因此,有必要将像素坐标转换为图像坐标。
3.2 图像坐标系
- 将像素坐标系的原点平移到图像的中心,就定为图像坐标系的原点,图像坐标系的x轴与像素坐标系的u轴平行,方向相同,而图像坐标系的y轴与像素坐标系的v轴平行,方向相同。
- - 在图中,假设图像中心的像素坐标是( u 0 , v t u_0,v_t u0,vt)
相机中感光器件每个像素的物力尺寸是 d x , d y d_x,d_y dx,dy
那么,图像坐标系的坐标(x,y)与像素坐标系的坐标(u,v)之间的关系可以表示为:
{ x = u d x − u 0 d y y = v d y − v 0 d y \begin{cases} x=udx-u_0dy\\ y=vdy-v_0dy\end{cases} { x=udx−u0dyy=vdy−v0dy
写成矩阵的形式就为:
[ x y ] = [ d x 0 0 d y ] [ u v ] + [ d x 0 0 d y ] \left[ \begin{matrix} x \\y \end{matrix} \right]= \left[ \begin{matrix} dx & 0 \\0 & dy \end{matrix} \right] \left[ \begin{matrix} u \\ v \end{matrix} \right] + \left[ \begin{matrix} dx & 0 \\0 & dy \end{matrix} \right] [xy]=[dx00dy][uv]+[dx00dy]
改为齐次坐标的形式:
[ x y 1 ] = [ d x 0 0 0 d y 0 0 0 0 ] [ u v 0 ] + [ − u 0 d x − v 0 d y 1 ] = [ d x 0 − u 0 d x 0 d y − v 0 d y 0 0 1 ] [ u v 1 ] \left[ \begin{matrix} x \\y\\1 \end{matrix} \right]= \left[ \begin{matrix} dx & 0 &0 \\0&dy&0\\0&0&0 \end{matrix} \right] \left[ \begin{matrix} u \\v\\0 \end{matrix} \right] + \left[ \begin{matrix} -u_0dx \\-v_0dy\\1 \end{matrix} \right]=\left[ \begin{matrix} dx & 0 &-u_0dx \\0&dy&-v_0dy\\0&0&1 \end{matrix} \right]\left[ \begin{matrix} u \\v\\1 \end{matrix} \right] ⎣⎡xy1⎦⎤