一、相机模型
针孔相机模型
其中
O
O
O为相机的光心,
P
P
P为现实世界空间中的一点,物理成像平面上的点为
P
′
P^{\prime}
P′,
P
=
[
X
,
Y
,
Z
]
T
,
p
′
=
[
X
′
,
Y
′
,
Z
′
]
T
P=[X,Y,Z]^T,p^{\prime}=[X^{\prime},Y^{\prime}, Z^{\prime}]^T
P=[X,Y,Z]T,p′=[X′,Y′,Z′]T,焦距为
f
f
f。
根据相似三角形:
Z
f
=
−
X
X
′
=
−
Y
Y
′
\frac Zf =-\frac X {X^{\prime}}=-\frac{Y}{Y^{\prime}}
fZ=−X′X=−Y′Y
为了消除负号,将成像平面反对称到光心前方,就可以得到:
Z
f
=
X
X
′
=
Y
Y
′
\frac Zf =\frac X {X^{\prime}}=\frac{Y}{Y^{\prime}}
fZ=X′X=Y′Y
从而
X
′
=
f
X
Z
Y
′
=
f
Y
Z
\begin{aligned} X^{\prime} &= f\frac XZ\\ Y^{\prime} &= f\frac YZ \end{aligned}
X′Y′=fZX=fZY
上式描述了点
P
P
P与其像的空间关系,但在相机中,我们最终获得的是一个一个的像素,
P
P
P的像
P
′
P^{\prime}
P′的坐标与像素坐标之间还存在者一定的关系。
像素坐标系通常定义为:原点
o
′
o^{\prime}
o′位于图像的左上角,
u
u
u轴与
x
x
x轴平行,
v
v
v轴与
y
y
y轴平行,故存在关系:
{
u
=
α
X
′
+
c
x
v
=
β
Y
′
+
c
y
\left\{ \begin{aligned} u &= \alpha X^{\prime} + c_x\\ v &= \beta Y^{\prime} + c_y \end{aligned} \right.
{uv=αX′+cx=βY′+cy
{
u
=
α
f
X
Z
+
c
x
v
=
β
f
Y
Z
+
c
y
\left\{ \begin{aligned} u &= \alpha f\frac XZ+ c_x\\ v &= \beta f\frac YZ + c_y \end{aligned} \right.
⎩⎪⎪⎨⎪⎪⎧uv=αfZX+cx=βfZY+cy
令
α
f
=
f
x
,
β
f
=
f
y
\alpha f=f_x, \beta f= f_y
αf=fx,βf=fy,有
{
u
=
f
x
X
Z
+
c
x
v
=
f
y
Y
Z
+
c
y
\left\{ \begin{aligned} u &= f_x\frac XZ+ c_x\\ v &= f_y\frac YZ + c_y \end{aligned} \right.
⎩⎪⎪⎨⎪⎪⎧uv=fxZX+cx=fyZY+cy
反应出像素平面与像平面之间的缩放和平移的关系。
记成矩阵形式:
(
u
v
1
)
=
1
Z
(
f
x
0
c
x
0
f
y
c
y
0
0
1
)
(
X
Y
Z
)
≜
1
Z
K
P
\begin{pmatrix} u\\ v\\ 1 \end{pmatrix}= \frac1Z \begin{pmatrix} f_x & 0 & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} X\\ Y\\ Z \end{pmatrix} \triangleq \frac 1ZKP
⎝⎛uv1⎠⎞=Z1⎝⎛fx000fy0cxcy1⎠⎞⎝⎛XYZ⎠⎞≜Z1KP
这个矩阵
K
K
K称为相机的内参数矩阵(Camera Intrinsics)。
同样的,上面的
P
P
P是在相机坐标系下的坐标,我们通常使用的是应该为被观测物体的世界坐标
P
w
P_w
Pw,因此,这两者之间还要进行转换,我们已知相机的旋转矩阵
R
R
R和平移向量
t
t
t,那么有:
(
u
v
1
)
=
1
Z
K
(
R
P
w
+
t
)
=
1
Z
K
T
P
w
\begin{pmatrix} u\\ v\\ 1 \end{pmatrix} = \frac 1ZK(RP_w+t)= \frac1ZKTP_w
⎝⎛uv1⎠⎞=Z1K(RPw+t)=Z1KTPw
对于上式,
T
P
w
TP_w
TPw的结果应为一个
4
×
1
4\times 1
4×1的向量,表示相机坐标系下点
P
P
P的坐标,而
K
K
K为
3
×
3
3\times 3
3×3,因此这时需要把
T
P
w
TP_w
TPw的前三维提出来与
K
K
K相乘,而又与
1
Z
\frac1Z
Z1相乘,使得其再一次进行了归一化,得到如下的形式:
P
c
=
[
X
Z
Y
Z
1
]
P_c= \begin{bmatrix} \frac XZ\\ \frac YZ\\ 1 \end{bmatrix}
Pc=⎣⎡ZXZY1⎦⎤
称之为归一化坐标,该平面称之为归一化平面,归一化坐标经过内参之后就得到了像素坐标:
P
u
v
=
K
P
c
P_{uv}=KP_c
Puv=KPc
其中,相机的位姿
R
,
t
R,t
R,t称之为相机的外参数(Camera Extrinsics)
畸变
在实际中,为了获得更好的成像效果,会在相机前加装透镜,这会带来一定的影响,畸变就是其中一种。畸变可分为径向畸变和切向畸变。径向畸变通常由透镜形状引起,而切向畸变通常因为在相机组装过程中由于不能使透镜与成像面严格对其产生的。对于畸变,影响到的是上述过程的
P
c
P_c
Pc,且有如下关系:
径向畸变:
x
d
i
s
t
o
r
t
e
d
=
x
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
y
d
i
s
t
o
r
t
e
d
=
x
(
1
+
k
1
r
2
+
k
2
r
4
+
k
3
r
6
)
x_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6)\\ y_{distorted} = x(1+k_1r^2+k_2r^4+k_3r^6)
xdistorted=x(1+k1r2+k2r4+k3r6)ydistorted=x(1+k1r2+k2r4+k3r6)
切向畸变:
x
d
i
s
t
o
r
t
e
d
=
x
+
2
p
1
x
y
+
p
2
(
r
2
+
2
x
2
)
y
d
i
s
t
o
r
t
e
d
=
y
+
p
1
(
r
2
+
2
y
2
)
+
2
p
2
x
y
x_{distorted}=x+2p_1xy+p_2(r^2+2x^2)\\ y_{distorted}=y+p_1(r^2+2y^2)+2p_2xy
xdistorted=x+2p1xy+p2(r2+2x2)ydistorted=y+p1(r2+2y2)+2p2xy
其中
[
x
,
y
]
T
[x,y]^T
[x,y]T为归一化平面的坐标,
[
x
d
i
s
t
o
r
t
e
d
,
y
d
i
s
t
o
r
t
e
d
]
T
[x_{distorted},y_{distorted}]^T
[xdistorted,ydistorted]T为畸变后的坐标点,可据此对归一化平面上的点进行纠正,以获取原始图像的坐标。
双目相机模型
在单目相机模型中,仅根据一个像素,是不能确定空间对应该点的深度的,因为在光心与归一化平面像点的连线上的所有点,对应的都是同一个像素。而双目相机可以解决这一问题。
双目相机的原理如图所示:
两个相机光圈中心之间的距离称为双目相机的基线。
若同一个空间点
P
P
P分别在两个相机上成像
P
L
P_L
PL和
P
R
P_R
PR,则根据几何关系:
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},d=u_L-u_R
z=dfb,d=uL−uR
这里的
d
d
d称为视差,因为视差最小为一个像素,因此双目的深度存在一个最大值,由
f
b
fb
fb决定,说明基线越长,双目能测到的距离就越远。
而在实际测量中,我们需要知道左眼图像中的某个像素出现在右眼图像的哪一个位置,也就是确保计算深度时,左右眼计算的是同一个点
p
p
p。这往往很难保证,因此给双目深度估计带来了一定的问题。
RGB-D相机模型
RGB-D相机按照工作原理可以分为红外结构光式(Structured Light),飞行时间法(Time-of-flight ToF)式。RGB-D相机像探测目标发出一束光线,在结构光原理中,相机根据返回的结构光图案,计算物体与自身的距离。而在TOF原理中,相机向目标发射脉冲光,然后根据发射到返回之间光束的飞行时间,确定物体与自身的距离。
往期链接
视觉SLAM十四讲 第4讲李群与李代数
视觉SLAM十四讲 第3讲 三维空间刚体运动
视觉SLAM十四讲 第2讲 初识slam