说明:转发请注明作者和出处;以下文章内容为精简版,详细版以pdf格式的幻灯片形式呈现,请见链接:视觉SLAM_07_相机模型.pdf
0.目录
1.针孔相机模型
O
O
O为摄像机光心,也是针孔模型中的针孔。现实世界的空间点
P
=
[
X
,
Y
,
Z
]
T
P=[X,Y,Z]^T
P=[X,Y,Z]T,经过小孔
O
O
O投影后,落在物理成像平面
O
′
−
x
′
−
y
′
O^{'}-x^{'}-y^{'}
O′−x′−y′上,成像点为
P
′
=
[
X
′
,
Y
′
,
Z
′
]
T
P^{'} = [X^{'},Y^{'},Z^{'}]^T
P′=[X′,Y′,Z′]T,物理成像平面到小孔的距离为焦距
f
f
f。
{
X
′
=
f
X
Z
Y
′
=
f
Y
Z
(1)
\begin{cases} {} X^{'} = f \frac{X}{Z} & \\ Y^{'} = f \frac{Y}{Z} \tag{1} \end{cases}
{X′=fZXY′=fZY(1)
像素坐标系通常的定义方式是:原点
o
′
o^{'}
o′位于图像的左上角,
u
u
u轴向右与
x
x
x轴平行,
v
v
v轴向下与
y
y
y轴平行。像素坐标系和成像平面之间,相差了一个缩放和一个原点平移。设像素坐标在
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
(2)
\begin{cases} {} u = \alpha X^{'} + c_x & \\ v = \beta Y^{'} + c_y \tag{2} \end{cases}
{u=αX′+cxv=βY′+cy(2) 即:
{
u
=
f
x
X
Z
+
c
x
v
=
f
y
Y
Z
+
c
y
(3)
\begin{cases} {} u = f_x \frac{X}{Z} + c_x & \\ v = f_y \frac{Y}{Z} + c_y \tag{3} \end{cases}
{u=fxZX+cxv=fyZY+cy(3)写成矩阵形式:
Z
[
u
v
1
]
=
[
f
x
0
c
x
0
f
y
c
y
0
0
1
]
[
X
Y
Z
]
=
d
e
f
K
P
(4)
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} \overset{def}{=} \boldsymbol K \boldsymbol P \tag{4}
Z⎣⎡uv1⎦⎤=⎣⎡fx000fy0cxcy1⎦⎤⎣⎡XYZ⎦⎤=defKP(4)矩阵
K
\boldsymbol K
K为相机内参数,相机内参出厂之后是固定的,不会在使用过程中发生变化。
公式(4)中
P
P
P是在相机坐标系下的坐标,变换到世界坐标系下(记为
P
w
\boldsymbol P_w
Pw):
Z
P
u
v
=
Z
[
u
v
1
]
=
K
(
R
P
w
+
t
)
=
K
T
P
w
(5)
Z \boldsymbol P_{uv} = Z \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \boldsymbol{K} (\boldsymbol{R} \boldsymbol P_w + \boldsymbol t) = \boldsymbol{K} \boldsymbol{T} \boldsymbol P_w \tag{5}
ZPuv=Z⎣⎡uv1⎦⎤=K(RPw+t)=KTPw(5) 相机的位姿
R
,
t
\boldsymbol R, \boldsymbol{t}
R,t又称为相机的外参数,外参会随着相机运动而改变,也是SLAM中待估计的目标,代表着机器人的轨迹。
2.畸变模型
为了获得好的成像效果,在相机前方加了透镜,透镜的加入会对成像过程中光线的传播产生新的影响:一是透镜自身的形状对光线传播的影响;二是在机械组装过程中,透镜和成像平面不可能完全平行,这也会使光线穿过透镜投影到成像平面时的位置发生变化。
由透镜形状引起的畸变(Distortion, 也叫失真)称为径向畸变,主要分为两大类:桶形畸变和枕形畸变,如图2-1所示。
桶形畸变图像放大率随若与光轴之间的距离增加而减小,而枕形畸变则恰好相反。在这两种畸变中,穿过图像中心和光轴有交点的直线还能保持形状不变。
除了透镜的形状会引入径向畸变,由于在相机的组装过程中不能使透镜和成像面严格平行,所以也会引入切向畸变,如图2-2所示。
考虑归一化平面上的任意一点 p \boldsymbol p p, 它的坐标为 [ x , y ] T [x,y]^T [x,y]T,也可写成极坐标的形式 [ r , 0 ] T [r,0]^T [r,0]T。可以通过5个畸变系数找到这个点在像素平面上的正确位置:
- 将三维空间点投影到归一化图像平面。设它的归一化坐标为 [ x , y ] T [x,y]^T [x,y]T。
- 对归一化平面上的点计算径向畸变和切向畸变。
{ x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 x 2 ) + 2 p 2 x y \begin{cases} {} x_{distorted} = x (1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + 2 p_1 x y + p_2 (r^2 + 2 x^2)& \\ y_{distorted} = y (1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + p_1 (r^2 + 2 x^2) + 2 p_2 x y \end{cases} {xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistorted=y(1+k1r2+k2r4+k3r6)+p1(r2+2x2)+2p2xy - 将畸变后的点通过内参数矩阵投影到像素平面,得到该点在图像上的正确位置。
{ u = f x ⋅ x d i s t o r t e d + c x v = f y ⋅ y d i s t o r t e d + c y \begin{cases} {} u = f_x \cdot x_{distorted} + c_x & \\ v = f_y \cdot y_{distorted} + c_y \end{cases} {u=fx⋅xdistorted+cxv=fy⋅ydistorted+cy 单目相机的成像过程总结: - 世界坐标系下有一个固定的点P, 世界坐标为 P w \boldsymbol P_w Pw。
- 由于相机在运动,它的运动由 R \boldsymbol R R, t \boldsymbol t t或变换矩阵 T ∈ S E ( 3 ) \boldsymbol T \in SE(3) T∈SE(3)描述。P的相机坐标为 P c = R P w + t \boldsymbol P_c =\boldsymbol R \boldsymbol P_w + \boldsymbol t Pc=RPw+t。
- 这时的
P
c
\boldsymbol P_c
Pc的分量为
X
,
Y
,
Z
X,Y,Z
X,Y,Z, 把它们投影到归一化平面
Z
=
l
Z = l
Z=l上,得到P的归一化坐标:
P c = [ X / Z , Y / Z , 1 ] \boldsymbol P_c = [X/Z, Y/Z, 1] Pc=[X/Z,Y/Z,1]。 - 有畸变时,根据畸变参数计算 P c \boldsymbol P_c Pc发生畸变后的坐标。
- P的归一化坐标经过内参后,对应到它的像素坐标: P u v = K P c \boldsymbol P_{uv} = \boldsymbol K \boldsymbol P_c Puv=KPc
3.双目相机模型
仅根据一个像素,我们无法确定这个空间点的具体位置。这是因为,从相机光心到归一化平面连线上的所有点,都可以投影至该像素上。只有当P的深度确定时,我们才能确切地知道它的空间位置,如图3-1所示:
测显像素距离(或深度)的方式有很多种,下面简单介绍双目相机的成像原理,如图3-2所示:
O L , O R O_L, O_R OL,OR为左右光圈中心, 方框为成像平面, f f f为焦距。 u L u_L uL和 u R u_R uR为成像平面的坐标。请注意, 按照图中坐标定义,和 u R u_R uR应该是负数, 所以图中标出的距离为和 − u R -u_R −uR。
根据图3-2,有:
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
u
L
−
u
R
=
f
b
d
z = \frac{fb}{u_L - u_R} = \frac{fb}{d}
z=uL−uRfb=dfb 其中
d
d
d定义为左右图的横坐标之差,称为视差。
- 由千视差最小为一个像素,于是双目的深度存在一个理论上的最大值,由 f b fb fb确定。
- 基线越长,双目能测到的最大距离就越远,反之,小型双目器件则只能测量很近的距离。
4.RGB-D相机模型
目前的RGB-D相机按原理可分为两大类,如图4-1 所示:
- 通过红外结构光(Structured Light) 原理测量像素距离。
- 通过飞行时间(Time-of-Flight, ToF) 原理测批像素距离。
无论是哪种类型, RGB-D相机都需要向探测目标发射一束光线(通常是红外光)。在红外结构光原理中,相机根据返回的结构光图案,计算物体与自身之间的距离。而在ToF原理中,相机向目标发射脉冲光,然后根据发送到返回之间的光束飞行时间,确定物体与自身的距离。
5.参考文献
- 高翔等. 视觉SLAM十四讲:从理论到实践第二版. 北京:电子工业出版社,2019.8.