目录

1、前言

2、世界坐标系——相机坐标系

3、相机坐标系——图像坐标系

4、图像坐标系——像素坐标系

5、畸变


1、前言

在图像处理或计算机视觉应用任务中,需要通过相机模型建立世界坐标系下(实际物体)与像素坐标系下(图像中像素)之间的映射关系。因此相机模型的精度会直接影响相机获得结果的准确性。下面将对相机模型中的各个坐标系之间关系进行推导,以及对畸变模型进行介绍:

2、世界坐标系——相机坐标系

实际物体在真实世界中的位置通过一个世界坐标系(Xw, Yw, Zw)来表示,通过旋转平移变换到相机坐标系(Xc, Yc, Zc)(以相机镜头光心为坐标原点,镜头平面为XcYc平面,光轴为Zc轴),如图1所示。


opencv 标定板 python_齐次坐标系

图1. 世界坐标系和相机坐标系的转换

世界坐标系中的Pw(Xw, Yw, Zw)经过旋转平移以后变换得到相机坐标系下位置Pc(Xc, Yc, Zc)(该过程称为刚体变换)。对于三维空间下的刚体变换,我们通过三步完成,分别绕Z轴、Y轴、X轴旋转一定角度以后再平移,下面以绕Z轴旋转角度θ为例进行详细说明,如图2所示:


opencv 标定板 python_齐次坐标系_02

图2. 绕Z轴旋转示意图

图2中XOY绕点O逆时针旋转θ到X'OY'。根据极坐标公式可得:

opencv 标定板 python_齐次坐标系_03

写成矩阵形式:

opencv 标定板 python_齐次坐标系_04

同理可得,绕Y轴逆时针旋转β的表达式(右手定则):

opencv 标定板 python_世界坐标系_05

绕X轴逆时针旋转旋转δ表达式(右手定则):

opencv 标定板 python_世界坐标系_06

于是旋转矩阵R=R3R2R1。

接下来进行平移,很容易得到:P(X, Y, Z)经过平移得到P'(X', Y', Z'),有:

opencv 标定板 python_世界坐标系_07

采用齐次坐标系(齐次坐标系可参考:什么是齐次坐标系?为什么要用齐次坐标系?--知乎),将旋转平移两个过程合并可得到从世界坐标系变换到相机坐标系的过程:

opencv 标定板 python_opencv 标定板 python_08

3、相机坐标系——图像坐标系

采用小孔成像模型用于相机模型推导。为了便于推导,将像平面沿着透镜平面对称以后,是像平面与物体位于透镜同一侧,同时,所成的像为缩小的正立的像。图像坐标系坐标原点位于透镜光轴与图像平面交点,如图3所示:


opencv 标定板 python_opencv 标定板 python_09

图3. 相机坐标系和图像坐标系的转换

 

根据相似三角形关系可得:

opencv 标定板 python_齐次坐标系_10

其中:f0为相距,很多地方认为f0为焦距,这是不对的,在相机中,f0为凸透镜物理属性,通常为了成像,像平面会位于略大于透镜焦距的位置,但是相距f0肯定要大于焦距,否则聚焦点无法成像。

写成矩阵形式为:

opencv 标定板 python_opencv 标定板 python_11

4、图像坐标系——像素坐标系

像素坐标系坐标圆点位于图像左上角,在像素坐标系中,单位为像素,图像坐标系中单位为长度单位(毫米:mm)因此需要引入比例系数(dx和dy)进行转换。


opencv 标定板 python_世界坐标系_12

图4. 图像坐标系和像素坐标系转换

很容易得到:

opencv 标定板 python_世界坐标系_13

综上:得到从世界坐标系转换到像素坐标系的整个过程如下所示:

opencv 标定板 python_齐次坐标系_14

5、畸变

由于制造精度和安装误差等原因,相机透镜成像会产生畸变,一般包括径向畸变和切向畸变,当然还有其余类型畸变,但是,影响较小,所以一般只考虑径向畸变和切向畸变。

径向畸变是由于透镜的形状造成,导致越靠近透镜边缘通过的光线弯曲越严重。在透镜中心位置光线弯曲为0,即畸变为0。采用r=0附近的泰勒级数展开来描述径向畸变,通常取2~3阶,实际计算过程中,如果考虑太多高阶的畸变参数,会导致标定求解的不稳定。径向畸变采用数学模型描述如下:

opencv 标定板 python_齐次坐标系_15

切向畸变是由于镜头安装等原因,导致镜头平面与成像平面不平行导致,切向畸变可以以下模型来描述:

opencv 标定板 python_齐次坐标系_16

当考虑径向畸变和切向畸变时,在相机标定过程中,还应求解出畸变参数(考虑2阶径向畸变):

参考:

[1] 计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换

[2]【3D视觉工坊】第二期公开课:相机标定的基本原理与经验分享

[3] 什么是齐次坐标系?为什么要用齐次坐标系?

[4] 学习OpenCV3

[5]相机标定(Camera calibration)原理、步骤

[6][图像]摄像机标定(1) 标定中的四个坐标系