一、 相机模型、相机成像与重投影
相机位姿
R
,
t
R,t
R,t的定义很重要!!直接关系到后续公式的推导!
是定义为
P
c
=
R
P
w
+
t
P_c=RP_w+t
Pc=RPw+t,【高博书上的定义形式】
还是定义为
P
w
=
R
P
c
+
t
P_w=RP_c+t
Pw=RPc+t,【VINS的定义形式】
【VINS课件上的定义】:
坐标系之间的变换关系可以由一个SE(3)给出。如
c
c
c系 到
w
w
w系 的变换矩阵为
T
w
c
T_{wc}
Twc,【且被定义为相机的位姿】:
T
w
c
=
[
R
w
c
t
w
c
0
T
1
]
T_{wc}=\begin{bmatrix} R_{wc} & t_{wc} \\ 0^T & 1 \end{bmatrix}
Twc=[Rwc0Ttwc1]
含义:
T
w
c
T_{wc}
Twc右乘一个
c
c
c系 下的(齐次)坐标,即得到该点在
w
w
w系 下的坐标。即
P
w
=
T
w
c
P
c
P_w=T_{wc}P_c
Pw=TwcPc
或
P
w
=
R
w
c
P
c
+
t
w
c
P_w=R_{wc}P_c+t_{wc}
Pw=RwcPc+twc
(注, t w c t_{wc} twc表示相机原点在世界坐标系下的坐标,非常便于仿真时生成数据,及轨迹可视化!)
【高博书上的定义】
坐标系之间的变换关系可以由一个SE(3)给出。如
w
w
w系 到
c
c
c系 的变换矩阵为
T
c
w
T_{cw}
Tcw,【且被定义为相机的位姿】:
T
c
w
=
[
R
c
w
t
c
w
0
T
1
]
T_{cw}=\begin{bmatrix} R_{cw} & t_{cw} \\ 0^T & 1 \end{bmatrix}
Tcw=[Rcw0Ttcw1]
含义:
T
c
w
T_{cw}
Tcw右乘一个
w
w
w系 下的(齐次)坐标,即得到该点在
c
c
c系 下的坐标。即
P
c
=
T
c
w
P
w
P_c=T_{cw}P_w
Pc=TcwPw
或
P
c
=
R
c
w
P
w
+
t
c
w
P_c=R_{cw}P_w+t_{cw}
Pc=RcwPw+tcw
【注意】这两种位姿定义之间的关系!!
T
w
c
T_{wc}
Twc与
T
c
w
T_{cw}
Tcw应当互逆,即满足:
T
w
c
T
c
w
=
I
[
R
w
c
t
w
c
0
T
1
]
[
R
c
w
t
c
w
0
T
1
]
=
[
I
0
0
T
1
]
[
R
w
c
R
c
w
R
w
c
t
c
w
+
t
w
c
0
T
1
]
=
[
I
0
0
T
1
]
\begin{aligned} T_{wc}T_{cw}&= I \\ \begin{bmatrix} R_{wc} & t_{wc} \\ 0^T & 1 \end{bmatrix}\begin{bmatrix} R_{cw} & t_{cw} \\ 0^T & 1 \end{bmatrix} &= \begin{bmatrix} I& 0 \\ 0^T & 1 \end{bmatrix} \\ \begin{bmatrix} R_{wc}R_{cw} & R_{wc} t_{cw}+t_{wc} \\ 0^T & 1 \end{bmatrix} &= \begin{bmatrix} I& 0 \\ 0^T & 1 \end{bmatrix} \\ \end{aligned}
TwcTcw[Rwc0Ttwc1][Rcw0Ttcw1][RwcRcw0TRwctcw+twc1]=I=[I0T01]=[I0T01]
即有关系:
R
c
w
=
R
w
c
−
1
,
t
c
w
=
−
R
c
w
t
w
c
R_{cw}=R^{-1}_{wc}, t_{cw}=-R_{cw}t_{wc}
Rcw=Rwc−1,tcw=−Rcwtwc,记住WC是我们经常用的^_^
,除非题目有额外说明。
1.已知两个相机视角
V
1
,
V
2
V_1,V_2
V1,V2,其内外参数分别为
[
K
1
,
R
1
,
T
1
]
[K_1,R_1,T_1]
[K1,R1,T1],
[
K
2
,
R
2
,
T
2
]
[K_2,R_2,T_2]
[K2,R2,T2]。
又已知
P
1
=
R
1
P
+
T
1
P_1=R_1P+T_1
P1=R1P+T1【高博定义版本】为 世界坐标系下某三维点的坐标
P
P
P投影到相机视角
V
1
V_1
V1下的结果(相机坐标系坐标)。
问在
V
2
V_2
V2视角下,该三维点对应的齐次坐标:
给出的答案中最接近的是:
K
2
(
R
2
[
R
1
T
(
P
1
−
T
1
)
]
+
T
2
)
K_2(R_2[R_1^T(P_1-T_1)]+T_2)
K2(R2[R1T(P1−T1)]+T2)
此处考察的是重投影问题,对应第三节PDF视觉重投影误差中的子问题:对于第
i
i
i帧中的特征点,投影到第
j
j
j帧相机坐标系下的值?
而重投影问题,本质为两次(一次正向应用一次反向应用)单目相机成像过程:
- 首先,世界坐标系下有一个固定点 P P P,世界坐标为 P w P_w Pw;
- 相机在运动且由 R , t R,t R,t描述。则点 P P P的相机坐标为 P ~ c = R P w + t \tilde{P}_c=RP_w+t P~c=RPw+t;
- 这时 P ~ c = [ X , Y , Z ] T \tilde{P}_c=[X,Y,Z]^T P~c=[X,Y,Z]T有三个量,把它们投影到归一化平面 Z = 1 Z=1 Z=1上,得到 P P P的归一化相机坐标: P c = [ X / Z , Y / Z , 1 ] P_c=[X/Z,Y/Z,1] Pc=[X/Z,Y/Z,1];
- 最后, P P P的归一化坐标经过内参变换,得到它的像素坐标 P u v = K P c P_{uv}=KP_c Puv=KPc。
7-21.2.标准的双目相机模型,基线为
b
b
b,焦距为
f
f
f,左右相机相同。已知某点
P
P
P在左视图的
x
x
x轴位置为
u
L
u_L
uL,在右视图的
x
x
x轴上的位置为
u
R
u_R
uR,不考虑镜头畸变,则
P
P
P点的深度值
Z
Z
Z为:
Z
=
f
b
u
L
−
u
R
Z=\frac{fb}{u_L-u_R}
Z=uL−uRfb
7.21-6相机A,B是一对校正后的双目相机,基线长度为50cm,相机焦距为900pixel,某个空间点再相机A拍摄的图像中出现的位置为(233,213),在相机B拍摄的图像中出现的位置为(213,213),则可以推测空间点的实际深度为:
Z
=
f
b
u
L
−
u
R
=
900
p
i
x
e
l
233
−
213
p
i
x
e
l
0.5
m
=
22.5
m
Z=\frac{fb}{u_L-u_R}=\frac{900pixel}{233-213pixel}0.5m=22.5m
Z=uL−uRfb=233−213pixel900pixel0.5m=22.5m
7-21.5
若相机外参为
M
M
M(即将一个点从世界坐标系坐标
P
P
P转换到相机坐标系坐标
P
′
P'
P′的变换为
P
′
=
M
P
P'=MP
P′=MP),则将一个世界坐标系的平面
π
⃗
\vec{\pi}
π(为平面的法向量)转换到相机坐标系的变换为:
π
⃗
′
=
π
⃗
M
−
T
\vec{\pi}'=\vec{\pi} M^{-T}
π′=πM−T
【证明】:对于平面上任意一点
P
P
P的满足
π
⃗
P
=
d
\vec{\pi}P=d
πP=d,其中
d
d
d为坐标系原点到平面的距离!
当转换到相机坐标系仍有
π
⃗
′
P
′
=
d
′
\vec{\pi}'P'=d'
π′P′=d′,(题目似乎应该有
d
=
d
′
d=d'
d=d′?的条件),代入
P
′
=
M
P
P'=MP
P′=MP,
不难解得
π
⃗
′
=
π
⃗
M
−
T
\vec{\pi}'=\vec{\pi} M^{-T}
π′=πM−T。
7-21.8
关于相机模型说法正确的是?
鱼眼相机可以用径向畸变(二次多项式)和切向畸变模型来【校正】;
视场角越大的相机,通常其跟踪轨迹长度可以更长;
市售的双目相机只需知道相机之间的基线距离,及成像视差,就可以精确地三角化出深度;
对于单目SLAM,不同视场角下由于对同一个物体的成像比例不同,最终主要影响重建结果的尺度。
(注,我们使用针孔模型和畸变模型这两个模型来描述整个投影过程【高博书】)
7-21.11
如果无法进行标定,针孔相机的内参可以由什么信息估算?
图像的视野角;
镜头焦距;
相机的曝光时间;
镜头的光圈大小。
7-21.12
在双目相机模型中,下列哪种改变会导致视差变大?
z
d
=
f
b
zd=fb
zd=fb
缩小相机焦距;
缩小基线长度;
缩小物体与相机的距离;
增大相机光圈;
7-21.15
已知一相机C,该相机的外参为
R
,
t
R,t
R,t。问该相机坐标系原点(原点
O
O
O是一个特殊的空间点
P
P
P)在世界坐标系中的位置?
答案给出的是:
P
w
=
−
R
T
t
P_w=-R^Tt
Pw=−RTt。但实际上,该结果和
R
,
t
R,t
R,t的定义有关!!根据结果反推,实际上本题目使用的位姿的定义为
P
c
=
T
c
w
P
w
P_c=T_{cw}P_w
Pc=TcwPw,即
P
c
=
R
c
w
P
w
+
t
c
w
P_c=R_{cw}P_w+t_{cw}
Pc=RcwPw+tcw。
当我们默认使用WC时,即对任意空间点
P
P
P都有
P
w
=
R
w
c
P
c
+
t
w
c
P_w=R_{wc}P_c+t_{wc}
Pw=RwcPc+twc成立,且已知
P
c
=
0
P_c=0
Pc=0(相机坐标系原点),求
P
w
=
t
w
c
P_w=t_{wc}
Pw=twc,此定义下位姿的平移部分直接反映了相机原点在世界坐标系下的坐标!!
7-21.19
已知相机在0时刻的位姿为
T
0
=
(
R
0
,
t
0
)
T_0=(R_0,t_0)
T0=(R0,t0),及当前时刻的位姿
T
=
(
R
,
t
)
T=(R,t)
T=(R,t),求将0时刻的相机坐标系作为参考坐标系时,当前时刻的位姿
T
′
T'
T′:
答案给出的是:
T
′
=
(
R
0
T
R
,
R
0
T
t
−
R
0
T
t
0
)
T'=(R_0^TR,R_0^Tt-R_0^Tt_0)
T′=(R0TR,R0Tt−R0Tt0),此时题目使用的位姿定义符合我们的默认WC,即有
P
w
=
R
w
c
P
c
+
t
w
c
P_w=R_{wc}P_c+t_{wc}
Pw=RwcPc+twc成立。
结合本题,对于同一个空间点
P
P
P,两个时刻的位姿有如下等式成立:
P
w
=
R
0
P
c
0
+
t
0
P
w
=
R
P
c
+
t
\begin{aligned} P_{w} &= R_0P_{c_0}+t_0 \\ P_w &= RP_c+t \\ \end{aligned}
PwPw=R0Pc0+t0=RPc+t
求以0时刻的相机坐标系作为参考坐标系时的位姿
T
′
T'
T′,实则是求将坐标
P
c
0
P_{c_0}
Pc0变换为坐标
P
c
P_c
Pc的矩阵,消去
P
w
P_w
Pw有:
R
0
P
c
0
=
R
P
c
+
t
P
c
0
=
R
0
T
(
R
P
c
+
t
−
t
0
)
P
c
0
=
(
R
0
T
R
)
P
c
+
(
R
0
T
t
−
R
0
T
t
0
)
=
R
′
P
c
+
t
′
\begin{aligned} R_0P_{c_0} &= RP_c+t \\ P_{c_0} &= R^T_0 (RP_c+t-t_0 )\\ P_{c_0} &= (R^T_0 R)P_c+(R^T_0t-R^T_0t_0 )\\ &= R'P_{c}+t' \\ \end{aligned}
R0Pc0Pc0Pc0=RPc+t=R0T(RPc+t−t0)=(R0TR)Pc+(R0Tt−R0Tt0)=R′Pc+t′
【注】同理,当我们使用另一个位姿定义时,即
P
c
=
T
c
w
P
W
P_c=T_{cw}P_W
Pc=TcwPW时,可以得到不同的答案如下:
对于同一个空间点
P
P
P,两个时刻的位姿有如下等式成立:
P
c
0
=
R
0
P
w
+
t
0
P
c
=
R
P
w
+
t
\begin{aligned} P_{c_0} &= R_0P_w+t_0 \\ P_c &= RP_w+t \\ \end{aligned}
Pc0Pc=R0Pw+t0=RPw+t
求以0时刻的相机坐标系作为参考坐标系时的位姿
T
′
T'
T′,实则是求将坐标
P
c
0
P_{c_0}
Pc0变换为坐标
P
c
P_c
Pc的矩阵,消去
P
w
P_w
Pw有:
P
c
=
R
[
R
0
T
(
P
c
0
−
t
0
)
]
+
t
P
c
=
R
R
0
T
P
c
0
+
(
−
R
R
0
T
t
0
+
t
)
=
R
′
P
c
0
+
t
′
\begin{aligned} P_c &= R[R_0^T(P_{c_0}-t_0)]+t \\ P_c &= RR_0^TP_{c_0}+(-RR_0^Tt_0+t) \\ &= R'P_{c_0}+t' \\ \end{aligned}
PcPc=R[R0T(Pc0−t0)]+t=RR0TPc0+(−RR0Tt0+t)=R′Pc0+t′
7-21.17
已知原图像内参为
K
=
(
f
x
,
f
y
,
c
x
,
c
y
)
K=(f_x,f_y,c_x,c_y)
K=(fx,fy,cx,cy),图像大小为
(
w
,
h
)
(w,h)
(w,h),现对图像进行裁剪,从左上角
(
m
,
n
)
s
.
t
.
(
m
<
w
/
2
,
n
<
h
/
2
)
(m,n)s.t.(m<w/2,n<h/2)
(m,n)s.t.(m<w/2,n<h/2)处截出大小为原图像一半大小的图像,则截取后的图像的内参为:
【解】:该问题已知有
P
u
v
=
K
P
c
P_{uv}=KP_c
Puv=KPc成立(注,
P
c
P_c
Pc为归一化相机坐标),此时
P
u
v
P_{uv}
Puv变为了
P
u
v
′
P'_{uv}
Puv′,问
K
K
K如何变化?以保持
P
u
v
′
=
K
′
P
c
P'_{uv}=K'P_c
Puv′=K′Pc成立。
[ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X / Z Y / Z 1 ] [ u − m v − n 1 ] = [ f x 0 c x − m 0 f y c y − n 0 0 1 ] [ X / Z Y / Z 1 ] \begin{aligned} \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/Z \\ Y/Z \\ 1 \end{bmatrix} \\ \begin{bmatrix} u-m \\ v-n \\ 1 \end{bmatrix}&= \begin{bmatrix} f_x & 0 & c_x-m \\ 0& f_y & c_y-n \\ 0& 0& 1 \end{bmatrix} \begin{bmatrix} X/Z \\ Y/Z \\ 1 \end{bmatrix} \\ \end{aligned} ⎣⎡uv1⎦⎤⎣⎡u−mv−n1⎦⎤=⎣⎡fx000fy0cxcy1⎦⎤⎣⎡X/ZY/Z1⎦⎤=⎣⎡fx000fy0cx−mcy−n1⎦⎤⎣⎡X/ZY/Z1⎦⎤
已知某时刻IMU系的位姿
T
w
i
=
(
R
w
i
,
t
w
i
)
T_{wi}=(R_{wi},t_{wi})
Twi=(Rwi,twi),及IMU系与相机坐标系得内参
T
i
c
=
(
R
i
c
,
t
i
c
)
T_{ic}=(R_{ic},t_{ic})
Tic=(Ric,tic)【按VINS课件上得定义】,求相机坐标系的位姿
T
w
c
T_{wc}
Twc。
解:一旦我们将下标明确清楚,问题很容易求解:
P
w
=
R
w
i
P
i
+
t
w
i
P
i
=
R
i
c
P
c
+
t
i
c
\begin{aligned} P_w &= R_{wi}P_i+t_{wi} \\ P_i &= R_{ic}P_c+t_{ic} \\ \end{aligned}
PwPi=RwiPi+twi=RicPc+tic
代入即可得:
P
w
=
R
w
i
(
R
i
c
P
c
+
t
i
c
)
+
t
w
i
=
(
R
w
i
R
i
c
)
P
c
+
(
R
w
i
t
i
c
+
t
w
i
)
=
R
w
c
P
c
+
t
w
c
\begin{aligned} P_w &=R_{wi}(R_{ic}P_c+t_{ic})+t_{wi} \\ &= (R_{wi}R_{ic})P_c+ (R_{wi}t_{ic}+t_{wi}) \\ &= R_{wc}P_c+t_{wc} \\ \end{aligned}
Pw=Rwi(RicPc+tic)+twi=(RwiRic)Pc+(Rwitic+twi)=RwcPc+twc
二、特征点、关键点、描述子
角点(一种朴素的特征)检测算法:Harris, FAST
人工设计的特征:SIFT, SURF, ORB
ORB算法的运行速度大约是SIFT的100倍,是SURF的10倍。
2.FAST特征没有描述子
3.ORB特征使用了改进的FAST角点作为关键点,并使用BRIEF向量作为描述子。
6.基于描述子的特征点 在SLAM系统中的缺点?
无法压缩图像信息?
无法进行回环检测?
难以跟踪模糊图像
难以进行重定位?
14.视觉特征跟踪 说法错误的是
ORB特征和SIFT特征都可以使用词袋库模型进行图像相似度对比(√)
图像金字塔主要是为了提升视觉特征的尺度不变特性(√)
用于跟踪的视觉特征关键点的分布越分散越好??(此处的分散做均匀理解?)
在有重复纹理的场合,暴力匹配可以比带有像素位置先验信息的匹配结果更好??
三、匹配点对与相机运动求解
4.求解3D到2D对应运动的方法是:PnP。
ICP:3D-3D的位姿估计;
对极几何:2D-2D的位姿估计。
g2o:A General Framework for Graph Optimization。图优化问题求解器
13.给出3组3D与2D的匹配能否确定相机位姿?
不能,P3P需要4组匹配来确定位姿,1组用于检验。
15.什么情况下难以正确求取基础矩阵?
两个视图中心点重合;(意味着此时只有纯旋转)
两个视图焦距不一样;
两个视图在垂直方向 上下两个位置拍摄
以上都不对
17.在双目视觉中,经常遇到缺少尺度约束的线性问题。该问题其建模形式如下:
A
x
=
s
t
Ax=st
Ax=st,其中
A
A
A为
m
×
n
m\times n
m×n的矩阵,
s
s
s为标量,
t
t
t为
m
×
1
m\times 1
m×1的向量。对于这类问题,我们通常使用哪种方法求解?
使用DLT转化为齐次线性问题之后进行SVD分解(DLT:Direct Linear Transformation,直接线性变换)
(在已知相机位姿及同一个新路标点的观测,三角化求该新的路标点时,似乎类似)
20.E是本质矩阵,则rank(E)为?2
7-21.7针孔相机模型下,什么样的图像间关系可以由单应矩阵描述?
相机拍摄的是纯平面场景;
相机围绕中心进行纯旋转产生的图像;(为什么?)
相机拍摄的是位于无穷远的物体;(为什么?)
以上都是
7-21.10 Structure from Motion初始化时,一般会通过特征点对应关系构造fundamental matrix或homography matrix初始化相机位姿。在所有特征都位于一个平面或只存在纯旋转的情况下,应该用()初始化相机位姿?
四、开源SLAM方案
5.使用了IMU传感器信息的开源SLAM方案:OKVIS。
ORB-SLAM
OKVIS: Open Keyframe-based Visual-Inertial SLAM.
DSO: Direct Sparse Odometry
SVO: Semi-direct Visual Odometry
11.哪个变量在VSLAM中不可观?
横滚角
俯仰角
偏航角
12.相比较于VSLAM,加入IMU后的VISLAM哪些状态可以观测?
尺度
x方向平移?
偏航角
z方向平移?
7-21.9基于单目图像的纯视觉SfM/SLAM无法恢复哪些信息?
场景的真实大小
相机的绝对朝向
相机的运动速度
以上都是
五、回环检测
回环检测要做的是将有效地检测出相机经过同一个地方,采集到了相似的数据这件事成功地检测出来!
回环检测的目的是构建全局一致的轨迹和地图。
主流视觉SLAM中检测回环的方式:词袋模型。
7.回环检测的主要目的?优化地图信息
定位当前帧的相机位姿?(×)
进行多个点云图的融合?(×)
进行非连续帧的特征匹配?(×)
8.哪个不是 词袋模型在SLAM系统中的应用?(待确定)
连续帧的特征匹配?(×)
当前帧与关键帧的特征匹配?
重定位的特征匹配?
回环检测的特征匹配?
9.单目SLAM系统下,回环检测不能优化哪个信息?
绝对尺度信息;
相对尺度信息;
三维点信息;
位姿信息;
六、图优化
10.位姿图优化(pose graph optimization)中的边一般指?
两个相机位姿之间的相对运动;
相机位姿;
重投影误差;
两个地图点之间的距离;
7-21.3集束调整BA所常用的舒尔补是按照下述哪种方法求解的?
先求解相机位姿后求解三维点;
先求解三维点后求解相机位姿;
先求解部分约束稀疏的三维点和相机位姿,再求解剩下的三维点和相机位姿;
以上都不对
7-21.14 以下哪些非线性最小二乘优化算法不属于信赖域(trust region) 方法?
Gaussian-Newton法
Levenberg-Marquardt法
Dog Leg法
以上方法都不是
7-21.16 常用的优化器g2o使用的模型为:
图模型;
树模型;
栈模型;
滤波器模型。
16.在其他因素固定的前提下,RANSAC算法需要的迭代次数期望值N与带估计模型自由度K的关系满足?
K越大 N越小?等等
18.两条彼此平行的直线,经过下列哪种变换之后不再平行?
欧式变换
相似变换
仿射变换
射影变换
7-21.4从真实世界到相机照片的变换可以看成是一个射影变换。
19.卡尔曼滤波是SLAM种常用的多传感器融合的一种方法,以下说法正确的是:
卡尔曼滤波可以直接用于系统噪声时线性非高斯的系统;(×)
系统预测阶段能得到系统状态的先验估计,但是系统状态的不确定新增加了;(√)
即使系统部分可观,整个系统的所有状态的不确定性将是无界的;??
系统更新阶段对预测的状态进行校正,但不需要更新系统噪声协方差矩阵。(×)