相机是视觉SLAM中所利用到的主要传感器之一,本文主要介绍了单目相机模型的成像原理以及三维刚体运动在视觉SLAM中的表达方式。
单目相机模型
单目相机模型的映射关系主要由针孔模型描述,光线投影到成像平面上的畸变过程由畸变模型来描述。空间中的三维点通过这两个模型投影到相机的成像平面上,再转换为像素坐标系,构成了一个完整的映射关系。
针孔模型
针孔模型所描述的是一束光线通过针孔后在针孔背后投影成像的关系,其原理类似于物理学中的小孔成像,这里先定义几个坐标系/平面:
- 相机坐标系: 这个坐标系即在相机视角下看世界坐标系,设其中的空间点 P P P的坐标为 [ X , Y , Z ] [X,Y,Z] [X,Y,Z]
- 成像平面: 是指空间坐标经过针孔投影到的相机内部的平面上,这个平面通常在相机内部,与空间坐标点位于相机光心(针孔)的两侧,简化模型时,可将其对称到相机前方,与空间点位于一侧,成像平面到光心的距离即为焦距 f f f,成像平面上的坐标点 P ′ P' P′的坐标为 [ X ′ , Y ′ , Z ′ ] [X',Y',Z'] [X′,Y′,Z′]
- 像素坐标系: 可认为与相机成像平面重合,但是是将成像平面内的坐标点采样到一个个的像素点上,像素坐标通常由 [ u , v ] [u,v] [u,v]表示,其原点位于图像左上角,且与成像平面间相差了一个缩放和一个平移
由针孔模型的相似关系,成像平面上的点与相机坐标系下点的变换关系如下:
Z
f
=
X
X
′
=
Y
Y
′
\frac{Z}{f} = \frac{X}{X'} = \frac{Y}{Y'}
fZ=X′X=Y′Y
整理得
X
′
=
f
X
Z
Y
′
=
f
Y
Z
X'=f \frac{X}{Z} \quad Y' =f \frac{Y}{Z}
X′=fZXY′=fZY
再假设像素坐标系与成像平面之间的关系为: 在
u
u
u轴上缩放了
α
\alpha
α倍,在
v
v
v轴上缩放了
β
\beta
β倍,同时原点平移了
[
c
x
,
c
y
]
T
[c_x,c_y]^T
[cx,cy]T(成像平面的原点位于平面中心),得到关系如下:
u
=
α
X
′
+
c
x
v
=
β
Y
′
+
c
y
u=\alpha X' + c_x \quad v=\beta Y' + c_y
u=αX′+cxv=βY′+cy
令
α
f
=
f
x
\alpha f = f_x
αf=fx,
β
f
=
f
y
\beta f=f_y
βf=fy,得
u
=
f
x
X
Z
+
c
x
v
=
f
y
Y
Z
+
c
y
u = f_x \frac{X}{Z} + c_x \quad v = f_y \frac{Y}{Z} + c_y
u=fxZX+cxv=fyZY+cy
用矩阵表示
Z
[
u
v
1
]
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
[
X
Y
Z
]
=
K
P
Z \begin{bmatrix} u\\ v\\ 1 \end{bmatrix}= \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X\\ Y\\ Z \end{bmatrix}=KP
Z⎣⎡uv1⎦⎤=⎣⎡fx000fy0cxcy1⎦⎤⎣⎡XYZ⎦⎤=KP
这里的
K
K
K即为所谓的相机内参矩阵,
P
P
P为相机坐标系下的空间坐标点的坐标,其与世界坐标系下的坐标还存在一部空间变换,这将在下面的三维刚体运动中讲到。这里像素坐标使用了齐次坐标表示,即将原来的二维坐标拓展成了三维坐标(第三维为1)以方便矩阵运算。
畸变模型
畸变模型主要分为径向畸变和切向畸变。径向畸变是由透镜形状对光线传播的影响所引起的,透镜使得实际中的直线在图片中变成了曲线,且通常径向对称,越靠近图像边缘越明显;切向畸变是由于相机组装过程中透镜与成像平面之间的平行度误差所引起的。
径向畸变
x
=
x
d
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
y
=
y
d
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
x = x_d(1+k_1 r^2 +k_2 r^4+k_3 r^6) \\ y = y_d(1+k_1 r^2 +k_2 r^4+k_3 r^6)
x=xd(1+k1r2+k2r4+k3r6)y=yd(1+k1r2+k2r4+k3r6)
其中
x
d
x_d
xd表示畸变点坐标,
r
=
x
d
2
+
y
d
2
r = \sqrt{x_d^2 + y_d ^2}
r=xd2+yd2,一般
k
1
k_1
k1在中心区域起作用,
k
2
k_2
k2在边缘区域起作用,对一般相机而言
k
1
k_1
k1和
k
2
k_2
k2足够纠正畸变,畸变较大的镜头(鱼眼等)可引入
k
3
k_3
k3
切向畸变
x = x d + 2 p 1 x d y d + p 2 ( r 2 + 2 x d 2 ) y = y d + 2 p 2 x d y d + p 1 ( r 2 + 2 y d 2 ) x = x_d + 2p_1 x_d y_d + p_2(r^2 + 2x_d^2)\\ y = y_d + 2p_2 x_d y_d + p_1(r^2 + 2y_d^2) x=xd+2p1xdyd+p2(r2+2xd2)y=yd+2p2xdyd+p1(r2+2yd2)
三维刚体运动
三维刚体运动即为rigid body motion,其主要特点在于运动物体本身的特性不发生变化,变化的仅是其空间位置与朝向(即其位姿),rigid body motion作用下的向量的不变量为其模以及两个向量的叉乘结果(
g
t
g_t
gt表示rigid body motion,
u
,
v
u,v
u,v为向量)
∣
g
t
(
v
)
∣
=
∣
v
∣
,
∀
v
∈
R
3
g
t
(
u
)
×
g
t
(
v
)
=
g
t
(
u
×
v
)
,
∀
u
,
v
∈
R
3
|g_t(v)|=|v|, \forall v \in R^3 \\ g_t(u) \times g_t(v) = g_t(u \times v), \forall u,v \in R^3
∣gt(v)∣=∣v∣,∀v∈R3gt(u)×gt(v)=gt(u×v),∀u,v∈R3
刚体运动通常可用旋转和平移来表示,通过旋转矩阵
R
R
R和平移向量
t
t
t来描述,
g
t
(
X
)
=
R
X
+
t
g_t(X) = RX + t
gt(X)=RX+t由于需要满足刚体运动的两个不变量,
R
R
R为一个行列式为1的正交矩阵,其集合为SO(3) (Special Orthogonal Group):
S
O
(
n
)
=
{
R
∈
R
n
×
n
∣
R
R
T
=
I
,
d
e
t
(
R
)
=
1
}
SO(n) = \lbrace R \in R^{n\times n} | RR^T=I,det(R)=1 \rbrace
SO(n)={R∈Rn×n∣RRT=I,det(R)=1}
将旋转和平移合并成一个矩阵形式如下:
T
=
[
R
t
0
T
1
]
T= \begin{bmatrix} R & t\\ 0^T & 1 \end{bmatrix}
T=[R0Tt1]
则
X
′
=
T
X
X'=TX
X′=TX,注意这里的
X
X
X及
X
′
X'
X′均为四维的齐次坐标,即在原来三维坐标的末尾添加一个1
此处的变换矩阵
T
T
T也构成了一个特殊的集合SE(3)(Special Euclidean Group):
S
E
(
3
)
=
{
T
=
[
R
t
0
T
1
]
∈
R
4
×
4
∣
R
∈
S
O
(
3
)
,
t
∈
R
3
}
SE(3) = \lbrace T = \begin{bmatrix} R & t\\ 0^T & 1 \end{bmatrix} \in R^{4 \times 4} | R \in SO(3), t \in R^3 \rbrace
SE(3)={T=[R0Tt1]∈R4×4∣R∈SO(3),t∈R3}
S
O
(
3
)
SO(3)
SO(3)和
S
E
(
3
)
SE(3)
SE(3)在之后将要介绍的李群和李代数中也扮演了重要的角色。
综上所述,将一个世界坐标系中的点转换为像素坐标系上的点的步骤如下:
- 将世界坐标系下的点 P w P_w Pw转换为相机坐标系下点 P P P, P = T P w P = TP_w P=TPw, T T T为刚体变换矩阵
- 将相机坐标系下点 P P P转换为像素坐标系下点 P u v P_{uv} Puv, Z P u v = K T P w ZP_{uv}=KTP_w ZPuv=KTPw,K为相机内参矩阵
参考文献
[1] 高翔, 张涛, 颜沁睿, 刘毅, 视觉SLAM十四讲:从理论到实践, 电子工业出版社, 2017
[2] https://vision.in.tum.de/teaching/ss2019/mvg2019