视觉SLAM十四讲第五讲笔记
这一讲主要说的是相机与图像。了解以下相机内参,空间点到相机成像平面的过程。
一、相机模型
相机模型包括
- 针孔相机模型
- 双目相机模型
- RGB-D相机模型
1. 针孔相机模型
假设现实世界空间点 P P P, 经过小孔 O O O投影之后,落在物理成像平面 O ′ − x ′ − y ′ O'-x'-y' O′−x′−y′上,成像点为 P ′ P' P′。设 P P P的坐标为 [ X , Y , Z ] T [X,Y,Z]^T [X,Y,Z]T, P ′ P' P′为 X ′ , Y ′ , Z ′ X',Y',Z' X′,Y′,Z′,并且焦距为 f f f。那么根据三角形相似关系:
Z f = − X X ′ = − Y Y ′ \frac{Z}{f} = - \frac{X}{X'} = - \frac{Y}{Y'} fZ=−X′X=−Y′Y
负号表示成的像是倒立的。为了简化模型,我们把可以成像平面对称到相机前方,和三维空间点一起放在摄像机坐标系的同一侧。这样做可以把公式中的负号去掉,使式子更加简洁:
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} \\ Y'=f\frac{Y}{Z}
X′=fZXY′=fZY
上面的式子描述了世界空间点 P P P和它成像的空间关系。我们设在物理成像平面上固定着一个像素平面 O − u − v O-u-v O−u−v。 我们在像素平面得到了 P ′ P' P′的像素坐标: [ u , v ] T [u,v]^T [u,v]T。
像素坐标的原点通常定义在图像的左上角,
u
u
u轴向右与
x
x
x轴平行,
v
v
v轴向下与
y
y
y轴平行。像素坐标系与成像平面之间,相差了一个缩放和一个原点的平移。我们设像素坐标在
u
u
u轴上缩放了
α
α
α倍,在
v
v
v上缩放了
β
\beta
β倍。同时,原点平移了
[
c
x
,
c
y
]
T
[c_x,c_y]^T
[cx,cy]T 。那么,
P
′
P'
P′的坐标与像素坐标
[
u
,
v
]
T
[u,v]^T
[u,v]T的关系为:
{
u
=
α
X
′
+
c
x
v
=
β
Y
′
+
c
y
\left \{ \begin{matrix} u = \alpha X'+c_x \\ v = \beta Y' + c_y \end{matrix} \right.
{u=αX′+cxv=βY′+cy
把上面整理的式子代入,并將
α
f
\alpha f
αf合并为
f
x
f_x
fx, 把
β
f
\beta f
βf合并成
f
y
f_y
fy,得到:
{
u
=
f
x
X
Z
+
c
x
v
=
f
y
Y
Z
+
c
y
\left \{ \begin{matrix} u = f_x \frac{X}{Z}+c_x \\ v = f_y \frac{Y}{Z} + c_y \end{matrix} \right.
{u=fxZX+cxv=fyZY+cy
其中
f
f
f的单位是米,
α
.
β
\alpha. \beta
α.β的单位是像素每米,所以
f
x
,
f
y
f_x, f_y
fx,fy的单位是像素。写成矩阵的形式就是熟悉的内参矩阵了:
Z
(
u
v
1
)
=
(
f
x
0
c
x
0
f
y
c
y
0
0
1
)
(
X
Y
Z
)
≜
K
P
Z \biggl(\begin{matrix} u \\ v \\ 1 \end{matrix} \biggl) = \biggl(\begin{matrix} f_x \quad 0 \quad c_x \\ 0 \quad f_y \quad c_y \\ 0 \quad 0 \quad 1 \end{matrix} \biggl) \biggl(\begin{matrix} X \\ Y \\ Z \end{matrix} \biggl) \triangleq KP
Z(uv1)=(fx0cx0fycy001)(XYZ)≜KP
由于相机在运动,所以 P P P的相机坐标应该是它的世界坐标(记为 P w P_w Pw),根据相机的当前位姿,变换到相机坐标系下的结果外参矩阵。
Z P u v = Z ( u v 1 ) = K ( R P w + t ) = K T P w ZP_{uv} = Z \biggl(\begin{matrix} u \\ v \\ 1 \end{matrix} \biggl) = K(RP_w + t) = KTP_w ZPuv=Z(uv1)=K(RPw+t)=KTPw
对于
T
P
w
TP_w
TPw这个三维向量,我们还可以按照齐次坐标的方式,把最后一维进行归一化处理 ,得到了
P
P
P在相机归一化平面上的投影。
P
c
~
=
[
X
Y
Z
]
=
(
T
P
w
)
(
1
:
3
)
,
P
c
=
[
X
/
Z
Y
/
Z
1
]
\tilde{P_c}=\biggl[\begin{matrix} X \\ Y \\Z \end{matrix}\biggl] = (TP_w)_{(1:3)}, \quad P_c=\biggl[\begin{matrix} X/Z \\ Y/Z \\1 \end{matrix}\biggl]
Pc~=[XYZ]=(TPw)(1:3),Pc=[X/ZY/Z1]
这时
P
c
P_c
Pc可以看成一个二维的齐次坐标, 称为归一化坐标。它位于相机前方
z
=
1
z = 1
z=1处的平面上。该平面称为归一化平面。
2、双目相机模型
针孔相机模型描述了单个相机的成像模型。然而,仅根据一个像素,我们是无法确定这个空间点的具体位置的。这是因为,从相机光心到归一化平面连线上的所有点,都可以投影至该像素上。而双目成像的原理如下:
两个相机水平放置,光圈中心都位于
x
x
x轴上,它们的距离称为双目相机的基线。如果一个空间点
p
p
p,它在左眼和右眼各成一像,记作
P
L
,
P
R
P_L, P_R
PL,PR。由于相机基线的存在,这两个成像位置是不同的。理想情况下,由于左右相机只有在
x
x
x轴上有位移,因此
P
P
P的像也只在
x
x
x轴(对应图像的
u
u
u轴)上有差异。我们记它在左侧的坐标为
u
L
u_L
uL,右侧坐标为
u
R
u_R
uR。根据三角形
P
−
P
L
−
P
R
P−P_L-P_R
P−PL−PR和
P
−
O
L
−
O
R
P−O_L −O_R
P−OL−OR的相似关系:
z
−
f
z
=
b
−
u
L
+
u
R
b
\frac{z-f}{z} = \frac{b-u_L+u_R}{b}
zz−f=bb−uL+uR
整理可得:
z
=
f
b
d
,
d
=
u
L
−
u
R
z=\frac{fb}{d}, \quad d=u_L-u_R
z=dfb,d=uL−uR
这里
d
d
d为左右图的横坐标之差,称为视差(Disparity)。所以深度学习中的深度估计一般都是估计视差图。
我们看到,当基线越长时,双目最大能测到的距离就会变远;反之,小型双目器件则只能测量很近的距离。
3. RGB-D 相机模型
主要分为两大类:
- 通过红外结构光来测量像素距离的。 Kinect 1代,Intel Realsense等。
- 通过飞行时间法(ToF)。Kinect 2代等。
用红外进行深度值测量的 RGB-D 相机,容易受到日光或其他传感器发射的红外光干扰,因此不能在室外使用,同时使用多个时也会相互干扰。对于透射材质的物体,因为接受不到反射光,所以无法测量这些点的位置。