相机内外参标定

参考文献:

  1. 《视觉SLAM十四讲–从理论到实践》
  2. 《计算机视觉–模型、学习和推理》
  3. https://www.jianshu.com/p/b4479e746025
  4. https://my.oschina.net/abcijkxyz/blog/787659

1 相机模型

相机将三维世界中的坐标点(单位米)映射到二维图像平面(单位像素)的过程可以使用小孔成像进行描述。相机标定的目的即是获取摄像机的内参和外参矩阵,建立起三维世界和二维图像平面的对应关系,涉及如下坐标系的变化:
世界坐标系 --> 相机坐标系 --> 图像坐标系 --> 像素坐标系

1.1 小孔成像模型

小孔成像模型能够将三维世界的物体投影到二维成像平面,通过该模型可描述相机坐标系 --> 图像坐标系的坐标转换。

  • 相机坐标系(三维坐标系)
    相机的中心被称为焦点或者光心,以焦点O为原点和坐标轴x,y,z组成了相机坐标系,z指向相机的前方,x向右,y向下
  • 图像坐标系(二维坐标系)
    成像平面中,以成像平面的中心O′为原点和坐标轴x′,y′组成了图像坐标系。
    相机内外参标定_第1张图片
    现实世界的空间点P,经过小孔O投影后,落在成像平面上,成像点为P’。
    P的坐标为[X,Y,Z]T;P’为[X’,Y’]T,并且设物理成像平面到小孔的距离为f(f是焦距),那么可以知道像点p在相机坐标系中的坐标是P’=[X’,Y’,Z’]T(Z’ = f)。
    相机内外参标定_第2张图片
    由上图根据三角形的相似关系,可以得到如下公式:
    Z f = X X ′ = Y Y ′ \frac{Z} {f}\quad = \quad {X\over X'} = \quad {Y\over Y'} fZ=XX=YY
    整理后,
    { X ’ = f X Z Y ’ = f Y Z Z ′ = f \begin{cases} X’ = f\frac XZ \\ Y’ = f\frac YZ \\ Z' = f \end{cases} X=fZXY=fZYZ=f
    上式描述了点P和它的像平面的空间关系。不过,在相机中,我们最终获得的是一个个的像素,这需要在成像平面上对像进行采样和量化。为了描述传感器将感受到的光线转换成图像像素的过程,设在物理成像平面上固定着一个像素平面o-u-v。像素平面得到P’的像素坐标[u, v]T。
    { u = α X ′ + c x v = β Y ′ + c y \begin{cases} u = \alpha X' + c_x \\ v = \beta Y' + c_y \\ \end{cases} {u=αX+cxv=βY+cy
  • 像素坐标系
    原点o’位于图像的左上角,u轴向右与x轴平行,v轴向下与y轴平行。像素坐标系与成像平面之间,相差了一个缩放和一个远点的平移。设像素坐标在u轴上缩放了 α \alpha α倍,在v轴上缩放了 β \beta β倍,同时原点平移了[cx, cy]T。上式实现了图像坐标系到像素坐标系间的转换。
    经计算,得到:
    { u = f x X Z + c x v = f y Y Z + c y \begin{cases} u = f_x \frac XZ + c_x \\ v = f_y \frac YZ + c_y \\ \end{cases} {u=fxZX+cxv=fyZY+cy
    其中, f x = α f , f y = β f f_x=\alpha f, f_y=\beta f fx=αf,fy=βf
    将上面的公式写为齐次坐标的形式:
    ( u v 1 ) = 1 Z ( f x 0 c x 0 f y c y 0 0 1 ) ( X Y Z ) \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \frac 1Z \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} X \\ Y \\ Z \end{pmatrix} uv1=Z1fx000fy0cxcy1XYZ
    上面提到对于齐次坐标,缩放一个常量因子仍然是相等的,将Z挪到左边
    Z ( u v 1 ) = ( f x 0 c x 0 f y c y 0 0 1 ) ( X Y Z ) Z\begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} X \\ Y \\ Z \end{pmatrix} Zuv1=fx000fy0cxcy1XYZ
    中间的量组成的矩阵称为相机的内参矩阵K,
    K = ( f x 0 c x 0 f y c y 0 0 1 ) K = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{pmatrix} K=fx000fy0cxcy1
    K有4个未知数和相机的构造相关,fx,fy和相机的焦距,像素的大小有关;cx,cy是平移的距离,和相机成像平面的大小有关。
    相机的内参在出厂之后是固定的,不会在使用过程中发生变化,求解内参矩阵的过程也是标定的过程。
    有内参,自然也有对应的外参。内存矩阵实现了相机坐标系 --> 图像坐标系 --> 像素坐标系的转换,那么外参矩阵实现的肯定是世界坐标系 --> 相机坐标系的转换。
    相机坐标系的P在世界坐标系中的坐标Pw,根据相机的当前位姿,可得到两者的对应关系。相机的位姿由它的旋转矩阵R和平移像量t来描述。
    P = R P w + t P=RP_w+t P=RPw+t
    其中,R是一个3×3的旋转矩阵,t是3×1的平移向量。
    将旋转矩阵R和偏移矩阵T合起来即得外参矩阵即为:
    ( R 3 ∗ 3 t 3 ∗ 1 0 T 1 ) \begin{pmatrix} R_3*3 & t_3*1\\ 0^T & 1\\ \end{pmatrix} (R330Tt311)
    内外参组合到一起,即完成了世界坐标系到像素坐标系间的转换。

1.2 畸变

2 标定

2.1 张正友标定的opencv实现

相机标定的目的是获取摄像机的内参和外参矩阵(同时会得到每一幅标定图像的旋转和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。
张正友于1998年在论文:"A Flexible New Technique fro Camera Calibration"提出了基于单平面棋盘格的相机标定方法。该方法使用简单实用性强。
在opencv的samples下tutorial_code/calib3d/camera_calibration/目录下有标定实现的示例代码。
to be continued

你可能感兴趣的:(Multimedia)