计算机视觉——相机标定
- 一、像素坐标系、图像坐标系、相机坐标系、世界坐标系
- 二、坐标系变换
- 图像坐标系 → 像素坐标系
- 相机坐标系 → 图像坐标系
- 世界坐标系 → 相机坐标系
- ⋆ \star ⋆ 世界坐标系 → 像素坐标系
- 三、相机标定
一、像素坐标系、图像坐标系、相机坐标系、世界坐标系
- 像素坐标系:数字图像在计算机内为 M × N M\times N M×N 的数组,其中每个元素(称为像素)的数值即是图像点的亮度(或称为灰度,彩色图像对应的为RGB)。在图像上定义直角坐标系 u , v u,v u,v,每一个像素的坐标 ( u , v ) (u,v) (u,v) 分别是该像素在数组中的列数与行数。
- 图像坐标系:以图像内某一点 O 1 O_1 O1 为原点, x x x 轴与 y y y 轴分别与 u , v u,v u,v轴平行,该坐标系中,原点 O 1 O_1 O1 定义在相机光轴与图像平面的交点,该点一般位于图像中心处。

- 相机坐标系:如图所示,其中 O O O 点称为相机光心, X c X_c Xc 轴和 Y c Y_c Yc 轴与图像的 x x x 轴与 y y y 轴平行, Z c Z_c Zc 轴为相机的光轴,它与图像平面垂直。光轴与图像平面的交点,即为图像物理坐标系的原点,由点 O O O 与 X c , Y c , Z c X_c,Y_c,Z_c Xc,Yc,Zc 轴组成的直角坐标系称为相机坐标系。 O O 1 OO_1 OO1 为相机焦距。
- 世界坐标系:由于相机可安放在环境中的任意位置,我们在环境中还需选择一个基准坐标系来描述相机的位置,并用它描述环境中任意物体的位置,该坐标系称为世界坐标系。它由 X w , Y w , Z w X_w,Y_w,Z_w Xw,Yw,Zw 轴组成。

二、坐标系变换
图像坐标系 → 像素坐标系
如图1所示,若
O
1
O_1
O1 在
u
,
v
u,v
u,v 坐标系中的坐标为
(
u
0
,
v
0
)
(u_0,v_0)
(u0,v0),每个像素在
x
x
x 轴与
y
y
y 轴方向上的物理尺寸为
d
x
,
d
y
dx,dy
dx,dy,单位:毫米(mm),则图像中任意一个像素在两个坐标系下的坐标有如下关系:
u
=
x
d
x
+
u
0
v
=
y
d
y
+
v
0
(1)
\begin{aligned} u&=\frac{x}{dx}+u_0\\[2ex] v&=\frac{y}{dy}+v_0 \end{aligned}\tag{1}
uv=dxx+u0=dyy+v0(1)
写成矩阵的形式:
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] ⟺ [ x y 1 ] = [ d x 0 − u 0 d x 0 d y − v 0 d y 0 0 1 ] [ u v 1 ] (2) \left[ \begin{matrix} u \\[2ex] v \\[2ex] 1 \end{matrix} \right]= \left[ \begin{matrix} \dfrac{1}{dx} & 0 & u_0\\[2ex] 0 & \dfrac{1}{dy} & v_0\\[2ex] 0 & 0 & 1\\ \end{matrix} \right]\left[ \begin{matrix} x \\[2ex] y \\[2ex] 1 \end{matrix} \right] \quad\Longleftrightarrow\quad \left[ \begin{matrix} x \\[2ex] y \\[2ex] 1 \end{matrix} \right]= \left[ \begin{matrix} dx & 0 & -u_0dx\\[2ex] 0 & dy & -v_0dy\\[2ex] 0 & 0 & 1\\ \end{matrix} \right]\left[ \begin{matrix} u \\[2ex] v \\[2ex] 1 \end{matrix} \right]\tag{2} uv1 = dx1000dy10u0v01 xy1 ⟺ xy1 = dx000dy0−u0dx−v0dy1 uv1 (2)
相机坐标系 → 图像坐标系
如图2所示,相机坐标系中的点
(
X
c
,
Y
c
,
Z
c
)
(X_c,Y_c,Z_c)
(Xc,Yc,Zc)投影到图像坐标系中的点为
(
x
,
y
)
(x,y)
(x,y)。根据相似三角形原理可以得到如下关系式:
x
=
f
X
c
Z
c
,
y
=
f
Y
c
Z
c
(3)
\begin{aligned} x=\dfrac{fX_c}{Z_c},\quad y=\dfrac{fY_c}{Z_c} \end{aligned}\tag{3}
x=ZcfXc,y=ZcfYc(3)
写成矩阵的形式:
Z
c
[
x
y
1
]
=
[
f
0
0
0
0
f
0
0
0
0
1
0
]
[
X
c
Y
c
Z
c
1
]
(4)
Z_c\left[ \begin{matrix} x \\[2ex] y \\[2ex] 1 \end{matrix} \right]=\left[ \begin{matrix} f & 0 & 0 & 0\\[2ex] 0 & f & 0 & 0\\[2ex] 0 & 0 & 1 & 0\\ \end{matrix} \right]\left[ \begin{matrix} X_c \\[2ex] Y_c \\[2ex] Z_c \\[2ex] 1 \end{matrix} \right]\tag{4}
Zc
xy1
=
f000f0001000
XcYcZc1
(4)
世界坐标系 → 相机坐标系
相机坐标系与世界坐标系之间的关系可以用旋转矩阵
R
\pmb R
R 与平移向量
t
\pmb t
t 来描述。因此,若空间中某一点
P
\pmb P
P 在世界坐标系与相机坐标系下的坐标分别为
(
X
w
,
Y
w
,
Z
w
,
1
)
T
(X_w,Y_w,Z_w,1)^T
(Xw,Yw,Zw,1)T 与
(
X
c
,
Y
c
,
Z
c
,
1
)
T
(X_c,Y_c,Z_c,1)^T
(Xc,Yc,Zc,1)T,于是存在如下关系:
[
X
c
Y
c
Z
c
1
]
=
[
R
t
0
T
1
]
[
X
w
Y
w
Z
w
1
]
=
M
1
[
X
w
Y
w
Z
w
1
]
(5)
\left[ \begin{matrix} X_c \\[2ex] Y_c \\[2ex] Z_c \\[2ex] 1 \end{matrix} \right]= \left[ \begin{matrix} \pmb R & \pmb t\\[2ex] \ {\pmb 0}^T & 1 \end{matrix} \right]\left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]=\pmb M_1\left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]\tag{5}
XcYcZc1
=[R 0Tt1]
XwYwZw1
=M1
XwYwZw1
(5)
其中, R \pmb R R 为 3 × 3 3\times 3 3×3 单位正交矩阵, t \pmb t t 为三维平移向量, 0 = ( 0 , 0 , 0 ) T \pmb 0=(0,0,0)^T 0=(0,0,0)T, M 1 \pmb M_1 M1 为 4 × 4 4\times 4 4×4 矩阵。
⋆ \star ⋆ 世界坐标系 → 像素坐标系
联立式
(
2
)
,
(
4
)
,
(
5
)
(2),(4),(5)
(2),(4),(5),消去
(
x
,
y
,
1
)
T
,
(
X
c
,
Y
c
,
Z
c
,
1
)
T
(x,y,1)^T,(X_c,Y_c,Z_c,1)^T
(x,y,1)T,(Xc,Yc,Zc,1)T,有,
Z
c
[
u
v
1
]
=
[
1
d
x
0
u
0
0
1
d
y
v
0
0
0
1
]
[
f
0
0
0
0
f
0
0
0
0
1
0
]
[
R
t
0
T
1
]
[
X
w
Y
w
Z
w
1
]
=
[
a
x
0
u
0
0
0
a
y
v
0
0
0
0
1
0
]
[
R
t
0
T
1
]
[
X
w
Y
w
Z
w
1
]
=
M
1
M
2
[
X
w
Y
w
Z
w
1
]
=
M
[
X
w
Y
w
Z
w
1
]
(6)
\begin{aligned} Z_c\left[ \begin{matrix} u \\[2ex] v \\[2ex] 1 \end{matrix} \right]&=\left[ \begin{matrix} \dfrac{1}{dx} & 0 & u_0\\[2ex] 0 & \dfrac{1}{dy} & v_0\\[2ex] 0 & 0 & 1\\ \end{matrix} \right]\left[ \begin{matrix} f & 0 & 0 & 0\\[2ex] 0 & f & 0 & 0\\[2ex] 0 & 0 & 1 & 0\\ \end{matrix} \right]\left[ \begin{matrix} \pmb R & \pmb t\\[2ex] \ {\pmb 0}^T & 1 \end{matrix} \right]\left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]\\ &=\left[ \begin{matrix} a_x & 0 & u_0 & 0\\[2ex] 0 & a_y & v_0 & 0\\[2ex] 0 & 0 & 1 & 0\\ \end{matrix} \right]\left[ \begin{matrix} \pmb R & \pmb t\\[2ex] \ {\pmb 0}^T & 1 \end{matrix} \right]\left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]\\ &=\pmb M_1\pmb M_2 \left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]\\ &=\pmb M \left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right] \end{aligned}\tag{6}
Zc
uv1
=
dx1000dy10u0v01
f000f0001000
[R 0Tt1]
XwYwZw1
=
ax000ay0u0v01000
[R 0Tt1]
XwYwZw1
=M1M2
XwYwZw1
=M
XwYwZw1
(6)
其中, a x = f d x , a y = f d y a_x=\dfrac{f}{dx},a_y=\dfrac{f}{dy} ax=dxf,ay=dyf, 由于 a x , a y , u 0 , v 0 a_x,a_y,u_0,v_0 ax,ay,u0,v0 只与相机内部结构有关,因此称 M 1 \pmb M_1 M1 为相机的内参矩阵;而 M 2 \pmb M_2 M2 完全由相机相对于世界坐标系的方位决定,因此称为相机的外参矩阵;称 M \pmb M M 为投影矩阵。
三、相机标定
确定某一相机的内外参矩阵,称为相机标定。
将式
(
6
)
(6)
(6) 写成
Z
c
i
[
u
i
v
i
1
]
=
[
m
11
m
12
m
13
m
14
m
21
m
22
m
23
m
24
m
31
m
32
m
33
m
34
]
[
X
w
i
Y
w
i
Z
w
i
1
]
(7)
Z_{ci}\left[ \begin{matrix} u_i \\[2ex] v_i \\[2ex] 1 \end{matrix} \right]=\left[ \begin{matrix} m_{11} & m_{12} & m_{13} & m_{14} \\[2ex] m_{21} & m_{22} & m_{23} & m_{24} \\[2ex] m_{31} & m_{32} & m_{33} & m_{34} \end{matrix} \right]\left[ \begin{matrix} X_{wi} \\[2ex] Y_{wi} \\[2ex] Z_{wi} \\[2ex] 1 \end{matrix} \right]\tag{7}
Zci
uivi1
=
m11m21m31m12m22m32m13m23m33m14m24m34
XwiYwiZwi1
(7)
其中,
(
X
w
i
,
Y
w
i
,
Z
w
i
,
1
)
(X_{wi},Y_{wi},Z_{wi},1)
(Xwi,Ywi,Zwi,1) 为空间中第
i
i
i 个点的世界坐标;
(
u
i
,
v
i
,
1
)
(u_i,v_i,1)
(ui,vi,1) 为对应的像素坐标。式
(
7
)
(7)
(7) 包含三个方程:
Z
c
i
u
i
=
m
11
X
w
i
+
m
12
Y
w
i
+
m
13
Z
w
i
+
m
14
Z
c
i
v
i
=
m
21
X
w
i
+
m
22
Y
w
i
+
m
23
Z
w
i
+
m
24
Z
c
i
=
m
31
X
w
i
+
m
32
Y
w
i
+
m
33
Z
w
i
+
m
34
(8)
\begin{aligned} Z_{ci}u_i&=m_{11}X_{wi}+m_{12}Y_{wi}+m_{13}Z_{wi}+m_{14}\\[2ex] Z_{ci}v_i&=m_{21}X_{wi}+m_{22}Y_{wi}+m_{23}Z_{wi}+m_{24}\\[2ex] Z_{ci}&=m_{31}X_{wi}+m_{32}Y_{wi}+m_{33}Z_{wi}+m_{34} \end{aligned}\tag{8}
ZciuiZciviZci=m11Xwi+m12Ywi+m13Zwi+m14=m21Xwi+m22Ywi+m23Zwi+m24=m31Xwi+m32Ywi+m33Zwi+m34(8)
将式
(
8
)
(8)
(8) 中的第一式减去
u
i
u_i
ui 乘第三式,第二式减去
v
i
v_i
vi 乘第三式,分别消去
Z
c
i
Z_{ci}
Zci 后,可得如下线性方程:
X
w
i
m
11
+
Y
w
i
m
12
+
Z
w
i
m
13
+
m
14
−
u
i
X
w
i
m
31
−
u
i
Y
w
i
m
32
−
u
i
Z
w
i
m
33
−
u
i
m
34
=
0
X
w
i
m
21
+
Y
w
i
m
22
+
Z
w
i
m
23
+
m
24
−
v
i
X
w
i
m
31
−
v
i
Y
w
i
m
32
−
v
i
Z
w
i
m
33
−
v
i
m
34
=
0
(9)
\begin{aligned} X_{wi}m_{11}+Y_{wi}m_{12}+Z_{wi}m_{13}+m_{14}-u_iX_{wi}m_{31}-u_iY_{wi}m_{32}-u_iZ_{wi}m_{33}-u_im_{34}&=0\\[2ex] X_{wi}m_{21}+Y_{wi}m_{22}+Z_{wi}m_{23}+m_{24}-v_iX_{wi}m_{31}-v_iY_{wi}m_{32}-v_iZ_{wi}m_{33}-v_im_{34}&=0\\[2ex] \end{aligned}\tag{9}
Xwim11+Ywim12+Zwim13+m14−uiXwim31−uiYwim32−uiZwim33−uim34Xwim21+Ywim22+Zwim23+m24−viXwim31−viYwim32−viZwim33−vim34=0=0(9)
上式表示,若已知 n n n 个点的世界坐标 ( X w i , Y w i , Z w i ) (X_{wi},Y_{wi},Z_{wi}) (Xwi,Ywi,Zwi),与它们的像素坐标 ( u i , v i ) (u_i,v_i) (ui,vi),则我们有 2 n 2n 2n 个关于投影矩阵 M \pmb M M 元素的线性方程。
由此可见,由空间6个以上点的世界坐标与对应的像素坐标,我们可求出投影矩阵 M \pmb M M。在一般的标定中,我们都有数十个已知点,使方程的个数远超未知数的个数,从而用最小二乘法求解以降低误差造成的影响。