视觉里程计根据相邻图像信息估计出粗略的相机运动(即位姿)。视觉里程计算法主要分为两类:特征点法和直接法。本节主要介绍基于特征点法的特征提取、匹配 & 估计相机位姿、深度信息.
视觉SLAM学习打卡【7-1】-视觉里程计·特征点法
一、特征提取&匹配
特征点:关键点+描述子
关键点:角点 / 区块 / 边缘
描述子:描述关键点周围像素信息
—— —— —— —— —— —— —— ——
ORB特征:Oriented FAST关键点+BRIEF描述子
FAST角点:像素p半径为3的圆上的16个像素点存在N个的亮度大于/小于p亮度的120%/80%,即认为p为角点.
改进的 Oriented FAST角点
- FAST角点不具有方向性和尺度不变性
- 尺度不变性 由构建图像金字塔,并在每一层上检测角点实现
- 方向性 计算图像灰度质心,连接灰度质心和几何中心得到方向向量
图像块矩( I(x,y)为像素灰度值 ): m p q = ∑ x , y ∈ B x p y q I ( x , y ) , p , q = { 0 , 1 } . m_{pq}=\sum_{x,y\in B}x^py^qI(x,y),\quad p,q=\{0,1\}. mpq=x,y∈B∑xpyqI(x,y),p,q={0,1}.质心: C = ( m 10 m 00 , m 01 m 00 ) C=(\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}}) C=(m00m10,m00m01)方向向量: θ = arctan ( m 01 / m 10 ) \theta=\arctan(m_{01}/m_{10}) θ=arctan(m01/m10)
BRIEF描述子:二进制描述子,描述向量由许多0、1构成。取关键点附近的n两个随即像素对p、q,若p>q,取1;反之,取0。
—— —— —— —— —— —— —— ——
特征匹配原理:外观相似的特征点具有相似的描述子(两个关键点周围的描述子在向量空间上的距离相近)
- 暴力匹配法
- 快速近似最近邻(FLANN)
相似距离度量范数
- 欧氏距离:适用于浮点型描述子
- 汉明距离:适用于二进制描述子,汉明距离指不同位数的个数
特征点匹配以后得到的是两个像素坐标系下的点p1和p2
二、回顾相机投影顺序
三、估计相机位姿&空间点深度
1. 2D-2D
对极几何求位姿,三角测量求深度
(1)对极几何
归一化平面坐标用的x1,x2
x
2
=
R
x
1
+
t
x_2=Rx_1+t
x2=Rx1+t两边都左乘t^ ,t^乘以一个向量,相当于t和这个向量做叉乘(t自己做叉积为0)
t
∧
x
2
=
t
∧
R
x
1
t^\wedge x_2=t^\wedge Rx_1
t∧x2=t∧Rx1等式两边同左乘
x
2
T
x_{2}^{T}
x2T
x
2
T
t
∧
R
x
1
=
0
x_2^Tt^\wedge Rx_1=0
x2Tt∧Rx1=0其中,本质矩阵E=t^R
像素坐标用的p1,p2
p
2
T
K
−
T
t
∧
R
K
−
1
p
1
=
0
p_2^TK^{-T}t^{\wedge}RK^{-1}\boldsymbol{p}_1=0
p2TK−Tt∧RK−1p1=0其中,基础矩阵F=
K
−
T
t
∧
R
K
−
1
K^{-T}t^{\wedge}RK^{-1}
K−Tt∧RK−1
因此,对极约束可以写为:
X
2
T
E
X
1
=
P
2
T
F
P
1
=
0
X_{2}^{T}EX_{1}=P_{2}^{T}FP_{1}=0
X2TEX1=P2TFP1=0
(2)求解本质矩阵E
采用八点法,即用8对匹配点组成线性方程组AX=0.
E
=
(
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
e
9
)
\left.E=\left(\begin{matrix}e_{1}&e_{2}&e_{3}\\e_{4}&e_{5}&e_{6}\\e_{7}&e_{8}&e_{9}\end{matrix}\right.\right)
E=
e1e4e7e2e5e8e3e6e9
一对匹配点满足以下对极约束
(
u
2
,
v
2
,
1
)
(
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
e
9
)
(
u
1
v
1
1
)
=
0.
\left(u_2,v_2,1\right)\begin{pmatrix}e_1&e_2&e_3\\e_4&e_5&e_6\\e_7&e_8&e_9\end{pmatrix}\begin{pmatrix}u_1\\v_1\\1\end{pmatrix}=0.
(u2,v2,1)
e1e4e7e2e5e8e3e6e9
u1v11
=0.把E写成向量形式
e
=
[
e
1
,
e
2
,
e
3
,
e
4
,
e
5
,
e
6
,
e
7
,
e
8
,
e
9
]
T
e=[e_{1},e_{2},e_{3},e_{4},e_{5},e_{6},e_{7},e_{8},e_{9}]^{\mathrm{T}}
e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]T则对极约束可以写成如下线性形式
[
u
2
u
1
,
u
2
v
1
,
u
2
,
v
2
u
1
,
v
2
v
1
,
v
2
,
u
1
,
v
1
,
1
]
⋅
e
=
0.
[u_2u_1,u_2v_1,u_2,v_2u_1,v_2v_1,v_2,u_1,v_1,1]\cdot e=0.
[u2u1,u2v1,u2,v2u1,v2v1,v2,u1,v1,1]⋅e=0.当采用8个点时(条件:系数矩阵满秩。因为用8个方程求9个未知量,当且仅当有n-r=9-8=1个极大无关组,自由度为8)
(
u
2
1
u
1
1
u
2
1
v
1
1
u
2
1
v
2
1
u
1
1
v
2
1
v
1
1
v
2
1
u
1
1
v
1
1
1
u
2
2
u
1
2
u
2
2
v
1
2
u
2
2
v
2
2
u
1
2
v
2
2
v
1
2
v
2
2
u
1
2
v
1
2
1
⋮
⋮
⋮
⋮
⋮
⋮
⋮
⋮
⋮
u
2
8
u
1
8
u
2
8
v
1
8
u
2
8
v
2
8
u
1
8
v
2
8
v
1
8
v
2
8
u
1
8
v
1
8
1
)
(
e
1
e
2
e
3
e
4
e
5
e
6
e
7
e
8
e
9
)
=
0.
\begin{pmatrix}u_2^1u_1^1&u_2^1v_1^1&u_2^1&v_2^1u_1^1&v_2^1v_1^1&v_2^1&u_1^1&v_1^1&1\\u_2^2u_1^2&u_2^2v_1^2&u_2^2&v_2^2u_1^2&v_2^2v_1^2&v_2^2&u_1^2&v_1^2&1\\\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots&\vdots\\u_2^8u_1^8&u_2^8v_1^8&u_2^8&v_2^8u_1^8&v_2^8v_1^8&v_2^8&u_1^8&v_1^8&1\end{pmatrix}\begin{pmatrix}e_1\\e_2\\e_3\\e_4\\e_5\\e_6\\e_7\\e_8\\e_9\end{pmatrix}=0.
u21u11u22u12⋮u28u18u21v11u22v12⋮u28v18u21u22⋮u28v21u11v22u12⋮v28u18v21v11v22v12⋮v28v18v21v22⋮v28u11u12⋮u18v11v12⋮v1811⋮1
e1e2e3e4e5e6e7e8e9
=0.
(3)SVD分解拆开E得R、t
E
=
U
Σ
V
T
E=U\Sigma V^{T}
E=UΣVT奇异值分解出来是4个解,但是只有一个对于两个相机而言,都是正的深度。奇异值SVD分解数学推导参考
(4)单应矩阵H
- 单应矩阵(Homography)的意义在于避免“退化”现象造成基础矩阵自由度下降的问题。一般出现退化现象是因为特征点共面或者相机发生纯旋转。
- 对于纯旋转的情况,E=t^R,纯旋转意味着t是0,那么E就是0,根据E恢复R就完全无从谈起。
- 对于特征点共面的情况,可以由其中两个点表示面上其余所有点,使得自由度下降。
- 现实数据包含噪声,若用八点法求解,本质矩阵E多出来的自由度将有噪声决定,为避免退化,采用单应矩阵H。
单应矩阵的求解及SVD分解此处不作为重点 详细推导可参考
(5)总结
- 本质矩阵E
x 2 T t ∧ R x 1 = 0 x_2^Tt^\wedge Rx_1=0 x2Tt∧Rx1=0,x是归一化相机平面上的点,E有5个自由度(E存在尺度等价性,即 X 2 T E X 1 = 0 X_{2}^{T}EX_{1}=0 X2TEX1=0等式两边乘任何数都不影响结果, E = t Λ R E=t^{\Lambda}R E=tΛR,t3维,R3维,6-1=5),最少五个点,但是用8点法. - 基础矩阵F
p 2 T K − T t ∧ R K − 1 p 1 = 0 p_2^TK^{-T}t^{\wedge}RK^{-1}p_1=0 p2TK−Tt∧RK−1p1=0,p是像素平面上的点,F有7个自由度( F 3 × 3 F_{3\times3} F3×3秩为2,9-2=7),最少7个点,一般也用8点法. - 单应矩阵H
p 2 = K ( R − t n T d ) K − 1 p 1 \begin{aligned}p_2&=K\left(R-\frac{tn^T}{d}\right)K^{-1}p_1\end{aligned} p2=K(R−dtnT)K−1p1,p是像素平面上的点,H有8个自由度(实际处理中令 H 3 × 3 H_{3\times3} H3×3中的 h 9 h_{9} h9=1),最少四个匹配点,因为每对匹配点可以提供两个约束。
(6)三角测量
- 有同一个点在两个图里的归一化相机坐标x1和x2
- 现在都变到相机坐标系下,也就是都乘以各自的第三维s
- 把s2x2变换到s1x1相机坐标系下,因为是同一个点,所以肯定相同
s 1 x 1 = s 2 R x 2 + t s_1\boldsymbol{x}_1=s_2\boldsymbol{R}x_2+t s1x1=s2Rx2+t - 两边都左乘x1^ 0 = s 2 x 1 ∧ R x 2 + x 1 ∧ t 0=s_2\boldsymbol{x}_1^\wedge R\boldsymbol{x}_2+\boldsymbol{x}_1^\wedge\boldsymbol{t} 0=s2x1∧Rx2+x1∧t 其中,R、t、x1、x2均已知,只剩下一个未知量s2.
2. 3D-2D(PnP)
已知点的3D坐标和这三个点的2D坐标
(1)直接线性变化法DLT
3D:世界坐标系下的齐次坐标
p
=
(
X
,
Y
,
Z
,
1
)
p=(X,Y,Z,1)
p=(X,Y,Z,1)
2D:相机归一化坐标系下的坐标
x
=
(
u
1
,
v
1
,
1
)
x=(u_{1},v_{1},1)
x=(u1,v1,1)
s
(
u
1
v
1
1
)
=
(
t
1
t
2
t
3
t
4
t
5
t
6
t
7
t
8
t
9
t
10
t
11
t
12
)
(
X
Y
Z
1
)
s\begin{pmatrix}u_1\\v_1\\1\end{pmatrix}=\begin{pmatrix}t_1&t_2&t_3&t_4\\t_5&t_6&t_7&t_8\\t_9&t_{10}&t_{11}&t_{12}\end{pmatrix}\begin{pmatrix}X\\Y\\Z\\1\end{pmatrix}
s
u1v11
=
t1t5t9t2t6t10t3t7t11t4t8t12
XYZ1
定义中间的3x4矩阵为增广矩阵[R|t]
用最后一行消去s
u
1
=
t
1
X
+
t
2
Y
+
t
3
Z
+
t
4
t
9
X
+
t
10
Y
+
t
11
Z
+
t
12
,
v
1
=
t
5
X
+
t
6
Y
+
t
7
Z
+
t
8
t
9
X
+
t
10
Y
+
t
11
Z
+
t
12
.
u_{1}=\frac{t_{1}X+t_{2}Y+t_{3}Z+t_{4}}{t_{9}X+t_{10}Y+t_{11}Z+t_{12}},\quad v_{1}=\frac{t_{5}X+t_{6}Y+t_{7}Z+t_{8}}{t_{9}X+t_{10}Y+t_{11}Z+t_{12}}.
u1=t9X+t10Y+t11Z+t12t1X+t2Y+t3Z+t4,v1=t9X+t10Y+t11Z+t12t5X+t6Y+t7Z+t8.用下式简化表示
t
1
=
(
t
1
,
t
2
,
t
3
,
t
4
)
T
,
t
2
=
(
t
5
,
t
6
,
t
7
,
t
8
)
T
,
t
3
=
(
t
9
,
t
10
,
t
11
,
t
12
)
T
\boldsymbol{t}_1=(t_1,t_2,t_3,t_4)^\mathrm{T},\boldsymbol{t}_2=(t_5,t_6,t_7,t_8)^\mathrm{T},\boldsymbol{t}_3=(t_9,t_{10},t_{11},t_{12})^\mathrm{T}
t1=(t1,t2,t3,t4)T,t2=(t5,t6,t7,t8)T,t3=(t9,t10,t11,t12)T则可得两个约束条件
t
1
T
P
−
t
3
T
P
u
1
=
0
,
t
2
T
P
−
t
3
T
P
v
1
=
0.
\begin{matrix}t_1^TP-t_3^TPu_1=0,\\\\t_2^TP-t_3^TPv_1=0.\end{matrix}
t1TP−t3TPu1=0,t2TP−t3TPv1=0.得用6对匹配点求出增广矩阵,需要对左边的3*3的矩阵块用一个最好的旋转矩阵来近似(R存在正交约束,而求解时只把其当成简单方程组),可以用QR分解完成。
(2)P3P
3对3D-2D匹配点
3D:世界坐标系下的坐标
2D:相机坐标系下坐标
此处只给出P3P求解思路:通过3个相似、余弦定理得到两个约束方程,利用吴消元法求出解析解,得到空间点在相机坐标系下的3D坐标,转化为3D-3D问题求位姿(ICP).
(3)Bundle Adjustment(BA)
把相机位姿和空间点位置都看成优化变量(此类问题统称为BA),构建重投影误差,让重投影误差(观测值减去预测值)最小化。
3D:世界坐标系下的齐次坐标
P
i
=
[
x
i
,
y
i
,
z
i
]
P_{i}=[x_{i},y_{i},z_{i}]
Pi=[xi,yi,zi]
2D:像素坐标系下的坐标
u
i
=
[
u
i
,
v
i
]
u_{i}=[u_{i},v_{i}]
ui=[ui,vi]
s
i
[
u
i
v
i
1
]
=
K
T
[
X
i
Y
i
Z
i
1
]
s_i\begin{bmatrix}u_i\\v_i\\1\end{bmatrix}=\boldsymbol{K}\boldsymbol{T}\begin{bmatrix}X_i\\Y_i\\Z_i\\1\end{bmatrix}
si
uivi1
=KT
XiYiZi1
写成矩阵形式
s
i
u
i
=
K
T
P
i
s_{i}u_{i}=KTP_{i}
siui=KTPi
转化为最小二乘问题
T
∗
=
arg
min
T
1
2
∑
i
=
1
n
∥
u
i
−
1
s
i
K
T
P
i
∥
2
2
.
T^{*}=\arg\min_{T}\frac{1}{2}\sum_{i=1}^{n}\left\|u_{i}-\frac{1}{s_{i}}KTP_{i}\right\|_{2}^{2}.
T∗=argTmin21i=1∑n
ui−si1KTPi
22.
3. 3D-3D(ICP)
已知两组匹配好的3D点,进行位姿估计.
P
=
{
p
1
,
⋯
,
p
n
}
,
P
′
=
{
p
1
′
,
⋯
,
p
n
′
}
P=\{p_{1},\cdots,p_{n}\},P^{\prime}=\{p_{1}^{\prime},\cdots,p_{n}^{\prime}\}
P={p1,⋯,pn},P′={p1′,⋯,pn′}
∀
i
,
p
i
=
R
p
i
′
+
t
.
\forall i,p_i=Rp_i^{\prime}+t.
∀i,pi=Rpi′+t.(1)SVD方式
定义第i对误差项
e
i
=
p
i
−
(
R
p
i
′
+
t
)
.
e_{i}=p_{i}-(Rp_{i}^{\prime}+t).
ei=pi−(Rpi′+t).构造最小二乘问题
min
R
,
t
1
2
∑
i
=
1
n
∥
(
p
i
−
(
R
p
i
′
+
t
)
)
∥
2
2
.
\min_{\boldsymbol{R},\boldsymbol{t}}\frac12\sum_{i=1}^n\|(p_i-(\boldsymbol{Rp_i}^{\prime}+\boldsymbol{t}))\|_2^2.
R,tmin21i=1∑n∥(pi−(Rpi′+t))∥22.定义两组质心(不带下标)
p
=
1
n
∑
i
=
1
n
(
p
i
)
,
p
′
=
1
n
∑
i
=
1
n
(
p
i
′
)
.
p=\frac1n\sum_{i=1}^{n}(p_{i}),\quad p^{\prime}=\frac1n\sum_{i=1}^{n}(p_{i}^{\prime}).
p=n1i=1∑n(pi),p′=n1i=1∑n(pi′).对误差函数做如下处理
1
2
∑
i
=
1
n
∥
p
i
−
(
R
p
i
′
+
t
)
∥
2
=
1
2
∑
i
=
1
n
∥
p
i
−
R
p
i
′
−
t
−
p
+
R
p
′
+
p
−
R
p
′
∥
2
=
1
2
∑
i
=
1
n
∥
(
p
i
−
p
−
R
(
p
i
′
−
p
′
)
)
+
(
p
−
R
p
′
−
t
)
∥
2
=
1
2
∑
i
=
1
n
(
∥
p
i
−
p
−
R
(
p
i
′
−
p
′
)
∥
2
+
∥
p
−
R
p
′
−
t
∥
2
+
2
(
p
i
−
p
−
R
(
p
i
′
−
p
′
)
)
T
(
p
−
R
p
′
−
t
)
)
.
\begin{aligned} \frac{1}{2}\sum_{i=1}^{n}\left\|p_{i}-\left(Rp_{i}^{\prime}+t\right)\right\|^{2}& =\frac{1}{2}\sum_{i=1}^{n}\left\|p_{i}-Rp_{i}{}^{\prime}-t-p+Rp^{\prime}+p-Rp^{\prime}\right\|^{2} \\ &=\frac{1}{2}\sum_{i=1}^{n}\left\|\left(p_{i}-p-R\left(p_{i}^{\prime}-p^{\prime}\right)\right)+\left(p-Rp^{\prime}-t\right)\right\|^{2} \\ &=\frac{1}{2}\sum_{i=1}^{n}\left(\left\|p_{i}-p-R\left(p_{i}\right.^{\prime}-p^{\prime}\right)\right\|^{2}+\left\|p-Rp^{\prime}-t\right\|^{2}+ \\ &\left.2\left(p_{i}-p-R\left(p_{i}^{\prime}-p^{\prime}\right)\right)^{T}\left(p-Rp^{\prime}-t\right)\right). \end{aligned}
21i=1∑n∥pi−(Rpi′+t)∥2=21i=1∑n∥pi−Rpi′−t−p+Rp′+p−Rp′∥2=21i=1∑n∥(pi−p−R(pi′−p′))+(p−Rp′−t)∥2=21i=1∑n(
pi−p−R(pi′−p′)
2+∥p−Rp′−t∥2+2(pi−p−R(pi′−p′))T(p−Rp′−t)).交叉项
(
p
i
−
p
−
R
(
p
i
′
−
p
′
)
)
\left(p_{i}-p-R\left(p_{i}^{\prime}-p^{\prime}\right)\right)
(pi−p−R(pi′−p′))求和后为0,优化目标函数化简为
min
R
,
t
J
=
1
2
∑
i
n
∥
p
i
−
p
−
R
(
p
i
′
−
p
′
)
∥
2
+
∥
p
−
R
p
′
−
t
∥
2
.
\min_{R,t}J=\frac{1}{2}\sum_{i}^{n}\left\|p_{i}-p-R\left(p_{i}^{\prime}-p^{\prime}\right)\right\|^{2}+\left\|p-Rp^{\prime}-t\right\|^{2}.
R,tminJ=21i∑n∥pi−p−R(pi′−p′)∥2+∥p−Rp′−t∥2.可以发现,左边一项只和R有关,右边一项和R、t有关。因此,可以先根据左边项求出最优R,再通过
t
∗
=
p
−
R
p
′
.
t^{*}=p-Rp^{\prime}.
t∗=p−Rp′.求解t。
计算去质心坐标
q
i
=
p
i
−
p
,
q
i
′
=
p
i
′
−
p
′
q_{i}=p_{i}-p,\quad q_{i}^{\prime}=p_{i}^{\prime}-p^{\prime}
qi=pi−p,qi′=pi′−p′则R优化项变为
R
∗
=
arg
min
R
1
2
∑
i
=
1
n
∥
q
i
−
R
q
i
′
∥
2
.
R^{*}=\arg\min_{R}\frac{1}{2}\sum_{i=1}^{n}\left\|q_{i}-Rq_{i}^{\prime}\right\|^{2}.
R∗=argRmin21i=1∑n∥qi−Rqi′∥2.展开
1
2
∑
i
=
1
n
∥
q
i
−
R
q
i
′
∥
2
=
1
2
∑
i
=
1
n
(
q
i
T
q
i
+
q
i
′
T
R
T
R
q
i
′
−
2
q
i
T
R
q
i
′
)
.
\frac{1}{2}\sum_{i=1}^{n}\left\|q_{i}-Rq_{i}^{\prime}\right\|^{2}=\frac{1}{2}\sum_{i=1}^{n}\left(q_{i}^{\mathrm{T}}q_{i}+q_{i}^{\prime\mathrm{T}}R^{\mathrm{T}}Rq_{i}^{\prime}-2q_{i}^{\mathrm{T}}Rq_{i}^{\prime}\right).
21i=1∑n∥qi−Rqi′∥2=21i=1∑n(qiTqi+qi′TRTRqi′−2qiTRqi′).前两项与R无关,因为第二项R和自身转置乘积为I(R为正交矩阵),就是优化第三项,则优化目标函数再变为
∑
i
=
1
n
−
q
i
T
R
q
i
′
=
∑
i
=
1
n
−
t
r
(
R
q
i
′
q
i
T
)
=
−
t
r
(
R
∑
i
=
1
n
q
i
′
q
i
T
)
\sum_{i=1}^{n}-q_{i}^{\mathrm{T}}Rq_{i}^{\prime}=\sum_{i=1}^{n}-\mathrm{tr}\left(Rq_{i}^{\prime}q_{i}^{\mathrm{T}}\right)=-\mathrm{tr}\left(R\sum_{i=1}^{n}q_{i}^{\prime}q_{i}^{\mathrm{T}}\right)
i=1∑n−qiTRqi′=i=1∑n−tr(Rqi′qiT)=−tr(Ri=1∑nqi′qiT)(迹的性质:
a
T
b
=
t
r
a
(
b
a
T
)
a^Tb=tra(ba^T)
aTb=tra(baT))
之后定义了W(
W
=
∑
i
=
1
n
q
i
q
i
′
T
W=\sum_{i=1}^{n}q_{i}q_{i}^{\prime T}
W=∑i=1nqiqi′T),对W进行SVD分解,W满秩的时候,
R
=
U
V
T
R=UV^{T}
R=UVT,然后根据R恢复t。为什么
R
=
U
V
T
R=UV^{T}
R=UVT
(2)非线性优化
类似于PnP,转化为最小二乘问题,以迭代方式求最优解