今天我们将详细讨论一下相机标定中,如何求解并确定相机图像平面与它所在3D世界位置的关系。首先我们想象有这样一个三维坐标系,它的原点位于投影的中心,Z轴沿着光轴方向,如图1所示。
图1所示的坐标系被叫做相机的标准坐标系统。空间坐标
M
(
x
,
y
,
z
)
M(x,y,z)
M(x,y,z)对应的图像平面坐标为
m
(
x
,
y
)
m(x,y)
m(x,y)。从图中可以看出,空间坐标M和图像平面坐标m延长线交于坐标系原点,并且它们的
x
x
x和
y
y
y是与
X
X
X轴和
Y
Y
Y轴平行的。这里说明一下,图像平面到坐标中心的距离为图像焦距f。根据相似三角形,可以得到M与m之间的关系:
x
=
X
f
Z
y
=
Y
f
Z
(1)
x = \dfrac{Xf}{Z} \ y = \dfrac{Yf}{Z}\tag{1}
x=ZXf y=ZYf(1)
将公式
(
1
)
(1)
(1)转换为齐次坐标:
(
s
x
s
y
s
)
=
(
f
0
0
0
0
f
0
0
0
0
f
0
)
(
X
Y
Z
1
)
\begin{pmatrix} sx\\ sy\\ s\end{pmatrix}= \begin{pmatrix} f &0 &0 &0\\ 0 &f &0 &0\\ 0 &0 &f &0\end{pmatrix} \begin{pmatrix} X\\ Y\\ Z\\ 1\end{pmatrix}
⎝⎛sxsys⎠⎞=⎝⎛f000f000f000⎠⎞⎝⎜⎜⎛XYZ1⎠⎟⎟⎞
这里的
s
s
s不等于
0
0
0为尺度变换因子。
实际像素坐标
(
u
,
v
)
(u,v)
(u,v)的原点位于图像平面的左上点,因此满足:
u
=
u
c
+
x
像
素
宽
度
和
v
=
v
c
+
y
像
素
高
度
(2)
u =u_c+ \dfrac{x}{像素宽度} 和 v = v_c + \dfrac{y}{像素高度}\tag{2}
u=uc+像素宽度x和v=vc+像素高度y(2)
公式
(
2
)
(2)
(2)中的
u
c
u_c
uc和
v
c
v_c
vc表示像素坐标的中心。我们可以用一个
3
∗
4
3*4
3∗4矩阵来将三维世界坐标转换到图像像素坐标。联立公式
(
1
)
(1)
(1)和公式
(
2
)
(2)
(2),并且两边同时乘以
Z
Z
Z:
Z
u
=
Z
u
c
+
X
f
像
素
宽
度
Zu =Zu_c+ \dfrac{Xf}{像素宽度}
Zu=Zuc+像素宽度Xf
Z
v
=
Z
v
c
+
Y
f
像
素
高
度
Zv = Zv_c + \dfrac{Yf}{像素高度}
Zv=Zvc+像素高度Yf
转换为矩阵写法为:
(
s
x
s
y
s
)
=
(
f
像
素
宽
度
0
u
c
0
0
f
像
素
高
度
v
c
0
0
0
1
0
)
(
X
Y
Z
1
)
\begin{pmatrix} sx\\ sy\\ s\end{pmatrix}= \begin{pmatrix} \dfrac{f}{像素宽度} &0 &u_c &0\\ 0 &\dfrac{f}{像素高度} &v_c &0\\ 0 &0 &1 &0\end{pmatrix} \begin{pmatrix} X\\ Y\\ Z\\ 1\end{pmatrix}
⎝⎛sxsys⎠⎞=⎝⎜⎜⎜⎛像素宽度f000像素高度f0ucvc1000⎠⎟⎟⎟⎞⎝⎜⎜⎛XYZ1⎠⎟⎟⎞
这里的尺度变换因子
s
s
s就是
Z
Z
Z值。将上述方式可简略表示成:
u
^
=
P
⋅
M
^
\hat u=P \cdot \hat M
u^=P⋅M^
其中
u
^
\hat u
u^表示图像像素坐标系的齐次向量,
P
P
P表示透视投影矩阵,
M
^
\hat M
M^表示世界坐标的齐次向量。因此,一个相机可以考虑为从投影空间
P
3
P^3
P3到投影平面
P
2
P^2
P2的线性投影变换系统。
这里含有
5
5
5个相机参数,分别为焦距f,像素宽度,像素高度,在光轴中心的
u
u
u像素坐标中心的
u
c
u_c
uc,在光轴中心的
v
v
v像素坐标中心的
v
c
v_c
vc。然而,由于一个任意尺度变换因子涉及f和像素大小,所以只能求解
4
4
4个可分离参数。因此,我们只能求解比率
f
/
像
素
宽
度
f/像素宽度
f/像素宽度和
f
/
像
素
高
度
f/像素高度
f/像素高度。参数
a
、
b
、
c
和
d
a、b、c和d
a、b、c和d不依赖于相机在空间中的位置和方向,因此被称为内参。
通常情况下,一个点的三维世界坐标在一帧中是不确定的,因为它的原点在投影的中心,它的
Z
Z
Z轴沿着光轴方向。然后,为方便计算求解我们希望是确定的,那么需要一个变换的坐标从其它帧到标准坐标系下。因此,可得到:
u
^
=
P
⋅
K
⋅
M
^
\hat u=P \cdot K \cdot \hat M
u^=P⋅K⋅M^
这里K是一个4*4的齐次转换矩阵:
K
=
(
R
t
0
3
T
1
)
K= \begin{pmatrix} R &t\\ 0_{3}^{T} &1\\ \end{pmatrix}
K=(R03Tt1)
R
R
R表示
3
∗
3
3*3
3∗3的旋转矩阵,编码相机的方向到给定的世界帧;最后一列为齐次向量
t
t
t,从世界帧原点捕捉相机移动。这个矩阵
K
K
K含有
6
6
6个自由度,
3
3
3个为方向,
3
3
3个相机的平移。这些参数被称为外参。
3
∗
4
相
机
矩
阵
P
和
4
∗
4
3*4相机矩阵P和4*4
3∗4相机矩阵P和4∗4齐次转换K结合形成一个
3
∗
4
3*4
3∗4矩阵
C
C
C,叫做相机标定矩阵,我们可以将C写成内参和外参的参数:
C
=
(
α
u
r
1
+
u
c
r
3
α
u
t
x
+
u
c
t
z
α
v
r
2
+
v
c
r
3
α
v
t
y
+
v
c
t
z
r
3
t
z
)
C= \begin{pmatrix} \alpha_{u}r_1+u_cr_3 &\alpha_{u}t_x+u_ct_z\\ \alpha_{v}r_2+v_cr_3 &\alpha_{v}t_y+v_ct_z\\ r_3&t_z \end{pmatrix}
C=⎝⎛αur1+ucr3αvr2+vcr3r3αutx+uctzαvty+vctztz⎠⎞
这里的向量
r
1
,
r
2
,
r
3
r_1,r_2,r_3
r1,r2,r3是矩阵
R
R
R的行向量,
t
=
(
t
1
,
t
2
,
t
3
)
t=(t_1,t_2,t_3)
t=(t1,t2,t3),矩阵
C
C
C像矩阵
P
P
P有三行