特征点法前端-对极几何解释

特征点法前端

​ 前端又称为视觉里程计 (VO),它根据相邻图像间的信息来估计出相机的运动。估计值既可作为结果输出,也可以作为初始值提供给后端来进行优化。VO 的实现,按照是否提取图像特征,分为特征点法前端和直接法前端。

1.0 特征点与特征点匹配

​ 如前所述,VO 的主要问题是根据图像信息来估计相机的运动。一般来说,我们首先从图像中选取出比较有代表性的点,然后根据这些点来估计相机的位姿(和点的定位)。在SLAM 中,这些点也称为路标

1.1 特征点

​影像在计算机中是以数值矩阵的方式来进行存储的。因此,单个像素也是一种特征。但我们希望所提取的特征能够在相机运动后保持稳定,即有一定程度的不变性。而单个像素往往收到光照、视角、形变等等因素的影响而变得不稳定。因此,在计算机视觉中,常常通过人工设计的特征提取器来获取具有鲁棒性的图像特征。

​ 常见的图像特征就是角点。角点有易辨认,易提取的特点。但它也存在一些问题。比如距离的影响:从远处看是角点的地方,相机移近之后却不是了。还有旋转的影响:相机旋转后,不同影像上的同一角点可能就具有不同的外观。

​ 为此,研究者们设计了许多能够提取具有足够鲁棒性特征提取算法,如 SIFT, SURE, ORB 等等。这些人工设计的特征点一般都具备如下性质

  1. 可重复性:相同的特征点可以在不同的影像上找到;
  2. 可区别性:不同的特征点具有不同的表达;
  3. 高效率:同一图像中,特征点的数量远小于像素的数量;
  4. 本地性:提取的特征点仅仅和一小片图像区域相关。

​ 一个特征点由关键点 (key-point) 和描述子 (descriptor) 两部分组成。关键点指的是该特征点在图像上的位置信息,有些还具有方向、大小等其他信息。描述子通常是一个向量,它按照某种人为设计的方式,描述了特征点周围像素点信息。描述子一个重要设计原则就是外观相似的特征具有相似的描述子

​ 由于SLAM 是一种实时应用,因此除了鲁棒性之外,算法的实时性也应该被考虑。实际上,特征点提取和匹配占据了SLAM 主要的时间消耗。因此选用合适的特征提取算法至关重要。如 SIFT 算子虽好,但计算量太大,时间消耗过多。虽然大部分的特征提取都具有良好的并行性,可以使用 GPU 来加速运算,但由此带来的成本提升也要纳入考量。而ORB算子是质量和效率之间比较好的折中方案,常被用在目前的视觉 SLAM 方案中。

1.2 ORB

​ 网上关于 ORB 算子的资料很多,相关论文也可以直接获取。这里仅仅进行一个简要的叙述。

ORB 特征一样由关键点和描述子两部分组成。它的关键点为 Oriented FAST,是 FAST 算子的一种改进;描述子则是BRIEF。

​ FAST 算子很高效,但不具备尺度和旋转不变性。通过构建影像金字塔,在不同尺度的影像上提取特征来增加尺度不变性。然后引入像素重心来确定特征点的方向,引入旋转不变性。中间还可以使用Harris 角点滤波来提取出N 个最有可能的角点。

​ 传统的BRIEF 描述子一样不具备旋转不变性,同样通过像素重心所确定的特征点方向来作为描述子点方向,得到steer BRIEF。最后,为了得到更好的两两比较模式,利用一个角点数据集和贪心算法得到一个具有高方差、低相关的模式,用以构建合适的描述子,称为 rBRIEF。

​ 原论文ORB 在此。

1.3 特征匹配

​ 完成特征提取后,就可以进行特征匹配了。特征匹配解决了SLAM 中的数据关联问题,即确定了当前看到的路标和之前看到的路标之间的对应关系

​ 最简单的特征匹配方法就是暴力匹配 (brute-force matching):计算待匹配特征点与其他特征点之间的距离,然后按距离排序,选取距离最近的特征点作为匹配点。在这里,描述子间的距离表示了两个特征点之间的相似程度,有欧式距离,汉明距离等等。对于特征点数量巨大的情况,快速近似最邻近 (FLANN) 算法会更为高效。

​ 接下来,我们希望根据匹配的特征点对来估计相机的运动。根据相机原理或所有的数据等不同,有三种情况:

  1. 当使用单目相机时,我们只知道二维的像素坐标,因此问题是根据两组匹配的 2 D 2D 2D 点来估计相机运动。该问题用对极几何来解决。
  2. 当相机为双目或为RGB-D 相机时,由于我们可以获得深度信息,问题就是估计两组 3 D 3D 3D 点间的运动。该问题用 I C P ICP ICP 来解决。
  3. 如果有 3 D 3D 3D 点云及其对应像素点的 2 D 2D 2D 坐标,也能顾及相机运动。该问题通过 $PnP $求解。

2.0 对极几何

2.1 对极约束

在这里插入图片描述

​ 上图展示了一对匹配好的特征点。我们希望求取这两帧之间的运动。设两个相机关心分别为 O 1 O_1 O1 O 2 O_2 O2,第一帧到第二帧到运动为 R , t R,t Rt。点 p 1 ( x 1 ) p_1 (x_1) p1(x1) 和点 p 2 ( x 2 ) p_2 (x_2) p2(x2) 是同一个空间点在两个成像平面上的投影。连线 O 1   p 1 O_1 \ p_1 O1 p1 O 2   p 2 O_2 \ p_2 O2 p2 在三维空间中相交于点 P P P。这时, O 1 , O 2 O_1, O_2 O1,O2 P P P 三点确定一个平面,称为极平面 (epipolar plane)。 O 1 , O 2 O_1, O_2 O1,O2 连线与像平面 I 1 , I 2 I_1, I_2 I1,I2 的交点分别为 e 1 , e 2 e_1, e_2 e1,e2。点 e 1 , e 2 e_1, e_2 e1,e2 称为极点 (epipoles),是相机光心在另一幅影像上的投影。注意到这里 e 1 , e 2 e_1, e_2 e1,e2 都位于像平面内。有时候它们有可能会落在成像平面之外 O 1 , O 2 O_1, O_2 O1,O2 称为基线 (baseline)。而极平面与两个像平面之间的交线 l 1 , l 2 l_1, l_2 l1,l2极线 (epipolar line),它们分别是射线 O 2   p 2 O_2 \ p_2 O2 p2 O 1   p 1 O_1 \ p_1 O1 p1 在对方影像上的投影。

​ 从几何上来看,射线 O 1   p 1 O_1 \ p_1 O1 p1 是像素点 p 1 p_1 p1 所对应的物方点可能出现的位置:该射线上的所有点都有可能投影到点 p 1 p_1 p1 上。射线 O 2   p 2 O_2 \ p_2 O2 p2 是像素点 p 2 p_2 p2 所对应的物方点可能出现的位置。如果匹配正确的话,像素点 p 1 , p 2 p_1, p_2 p1,p2 对应于同一个物方点。这两条射线的交点就是就是点 P P P 的空间位置。如果没有特征匹配,我们就必须在极线 l 2 l_2 l2 上搜索 p 1 p_1 p1 的匹配点。

​ 现在我们从代数的角度上看,在第一帧的相机坐标系下,点 P P P 的空间位置为:
P = [ X , Y , Z ] T \mathbf{P}=[X, Y, Z]^T P=[X,Y,Z]T
​ 根据针孔相机模型,不考虑畸变,两个像素点 p 1 p_1 p1, p 2 p_2 p2 点像素坐标分别为:
s 1 p 1 = K P ,   s 2 p 2 = K ( R P + t ) s_1\mathbf{p}_1=\mathbf{K}\mathbf{P},\ s_2\mathbf{p}_2=\mathbf{K}(\mathbf{R}\mathbf{P}+\mathbf{t}) s1p1=KP, s2p2=K(RP+t)
​ 这里, K K K 为相机内参矩阵。如果使用齐次坐标,则前面的系数 $s_1, s_2 $可以省略。设:
x 1 = K − 1 p 1 ,   x 2 = K − 1 p 2 \mathbf{x}_1=\mathbf{K}^{-1}\mathbf{p}_1,\ \mathbf{x}_2=\mathbf{K}^{-1}\mathbf{p}_2 x1=K1p1, x2=K1p2
​ 这里, x 1 x_1 x1 x 2 x_2 x2 分别为两个像素点在各自相机坐标系下归一化平面坐标。将之代入上式可得:
x 2 = R x 1 + t \mathbf{x}_2 = \mathbf{R}\mathbf{x}_1+\mathbf{t} x2=Rx1+t
​ 将上式两边同时左乘 t ∧ \mathbf{t}^{\wedge} t,这相当于两侧同时和 t t t 做外积:
t ∧ x 2 = t ∧ R x 1 \mathbf{t}^{\wedge}\mathbf{x}_2=\mathbf{t}^{\wedge}\mathbf{R}\mathbf{x}_1 tx2=tRx1
​ 再将两侧同时左乘 x 2 T \mathbf{x}^T_2 x2T
x 2 T t ∧ x 2 = x 2 T t ∧ R x 1 \mathbf{x}^T_2\mathbf{t}^{\wedge}\mathbf{x}_2=\mathbf{x}^T_2\mathbf{t}^{\wedge}\mathbf{R}\mathbf{x}_1 x2Ttx2=x2TtRx1
​ 注意到 t ∧ x 2 \mathbf{t}^{\wedge}\mathbf{x}_2 tx2 是一个垂直于二者的向量,因此它和 x 2 \mathbf{x}_2 x2 的内积为0。由此可得:
x 2 T t ∧ R x 1 = 0 \mathbf{x}^T_2\mathbf{t}^{\wedge}\mathbf{R}\mathbf{x}_1=0 x2TtRx1=0
​ 如果我们代入 p 1 , p 2 p_1, p_2 p1,p2 则可得:
p 2 T K − T t ∧ R K − 1 p 1 = 0 \mathbf{p}^T_2\mathbf{K}^{-T}\mathbf{t}^{\wedge}\mathbf{R}\mathbf{K}^{-1}\mathbf{p}_1=0 p2TKTtRK1p1=0
​ 这两个式子称为对极约束。它的几何意义 O 1 , O 2 O_1, O_2 O1,O2 P \mathbf{P} P 三点共面。这两个式子的中间部分分别称为本质矩阵 (essential matrix) E \mathbf{E} E基础矩阵 (fundamental matrix) F \mathbf{F} F
E = t ∧ R F = K − T t ∧ R K − 1 x 2 T E x 1 = p 2 T F p 1 = 0 \mathbf{E} = \mathbf{t}^{\wedge}\mathbf{R} \\ \mathbf{F} =\mathbf{K}^{-T}\mathbf{t}^{\wedge}\mathbf{R}\mathbf{K}^{-1} \\ \mathbf{x}_2^T\mathbf{E}\mathbf{x}_1=\mathbf{p}_2^T\mathbf{F}\mathbf{p}_1=0 E=tRF=KTtRK1x2TEx1=p2TFp1=0
​ 对极约束给出了两个匹配点的空间位置关系。 E \mathbf{E} E F \mathbf{F} F 之间只差了相机内参。在 SLAM 中,相机内参一般都是已知的(也可以通过相机标定获得),所以实践中常常使用形式更简单的 E \mathbf{E} E。注意到 E \mathbf{E} E 完全由旋转矩阵 R \mathbf{R} R 和平移向量 t \mathbf{t} t 组成,由此我们也希望能够通过 E E E 来求得 R \mathbf{R} R, t \mathbf{t} t。因此,相机位姿的估计就可以描述为:

  1. 通过匹配点求出 E \mathbf{E} E
  2. 根据E 求取 R \mathbf{R} R, t \mathbf{t} t

​ 实际情况自然会比这个复杂。下面我们就来了解下这个求解过程。

2.2 本质矩阵

​ 关于本大节(对极几何)的更详细的讲解和推导推荐看书 An Invitation to 3-D vision 的第五章。这章也正好是sample chapters 之一,可以免费阅读。地址在此Reconstruction from Two Calibrated Views .

​ 本质矩阵 E = t ∧ R \mathbf{E} = \mathbf{t}^{\wedge} \mathbf{R} E=tR 是一个 3 ∗ 3 3 * 3 33 大小的矩阵,共 9 9 9 个未知数。它包含了一个相对位置信息 t t t 和一个旋转矩阵 R R R。所有本质矩阵也构成一个集合,具有以下的性质:

  • 本质矩阵是由对极约束定义的。由上可知对极约束是一个等式为零的约束,所以对 E E E 乘以任意非零常数后,对极约束仍然满足。说明 E E E不同尺度下等价的。
  • 根据 E = t ∧ R \mathbf{E} = \mathbf{t}^{\wedge} \mathbf{R} E=tR,本质矩阵 E E E 的奇异值必定是 [ σ , σ , 0 ] T [\sigma,\sigma,0]^T [σ,σ,0]T 的形式。这称为本质矩阵的内在性质。想要详细的证明还请看上面的章样。
  • 平易和旋转各自有 3 3 3个自由度,所以 t ∧ R \mathbf{t}^{\wedge} \mathbf{R} tR 一共只有 6 6 6 个自由度。考虑到尺度等价性,本质矩阵 E E E 实际上只有 5 5 5个自由度。

​ 既然 E E E 只有 5 5 5 个自由度,说明我们可以只用 5 5 5 对点来对其进行求解。但 E E E 的内在性质是非线性的,只用 5 5 5 对点求解会更麻烦些。考虑 E E E 的尺度等价性,可以使用 8 8 8 对点来求解 E E E。这就是八点法

​ 考虑一对匹配点,它们的归一化坐标 x 1 = [ u 1 , v 1 , 1 ] T \mathbf{x}_1 = [u_1, v_1,1]^T x1=[u1,v1,1]T x 2 = [ u 2 , v 2 , 1 ] T \mathbf{x}_2 = [u_2, v_2,1]^T x2=[u2,v2,1]T。根据对极约束则有:
( u 1 , v 1 , 1 ) ( e 1 e 2 e 3 e 4 e 5 e 6 e 7 e 8 e 9 ) ( u 2 v 2 1 ) = 0 \begin{pmatrix} u_1, v_1, 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} \begin{pmatrix} u_2 \\ v_2 \\ 1 \end{pmatrix} = 0 (u1,v1,1) e1e4e7e2e5e8e3e6e9 u2v21 =0
​ 把矩阵 E E E 展开,写成向量的形式 (stacked version):
e = [ e 1 , e 2 , e 3 , e 4 , e 5 , e 6 , e 7 , e 8 , e 9 ] T \mathbf{e} =[ e_1, e_2, e_3, e_4, e_5, e_6, e_7, e_8, e_9]^T e=[e1,e2,e3,e4,e5,e6,e7,e8,e9]T
​ 对极约束就可以写成与 e e e 有关的线形形式:
[ u 1 u 2 , u 1 v 2 , u 1 , v 1 u 2 , v 1 v 2 , v 1 , u 2 , v 2 , 1 ] e = 0 [u_1u_2, u_1 v_2, u_1, v_1 u_2, v_1 v_2, v_1, u_2, v_2, 1] \mathbf{e} = 0 [u1u2,u1v2,u1,v1u2,v1v2,v1,u2,v2,1]e=0
8 8 8个特征点对就构成了一个线性方程组。设系数矩阵为 A A A,它是一个 8 ∗ 9 8 * 9 89 大小的矩阵, e e e 位于该矩阵的零空间 (Null Space) 中。如果矩阵 A A A 满足秩为 8 8 8(满秩)的条件( 8 8 8 个点不共面),那么其零空间维度为 1 1 1,即 e e e 构成一条线,这与 e e e 的尺度等价性是一致的。

​ 求解出 E E E 后,问题就变成了如何从 E E E 中恢复出相机的运动 R , t R,t Rt。该过程可以由奇异值分解 (SVD) 得到。且对于任意一个本质矩阵 E E E,有两组相对运动 ( R , t ) (R, t) (R,t) 与之对应。同样地,详细证明请看上面的书籍章样。假设 E E ESVD 分解为:
E = U Σ V T \mathbf{E} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^T E=VT
其中, U , V U, V U,V 是正交阵, Σ \mathbf{\Sigma} Σ 是奇异值矩阵。与 E E E 对应的两组 ( R , t ) (R, t) (R,t) 分别为:
t 1 ∧ = U R z ( π 2 ) Σ U T ,   R 1 = U R z T ( π 2 ) V T t 2 ∧ = U R z ( − π 2 ) Σ U T ,   R 2 = U R z T ( − π 2 ) V T \begin{align} \mathbf{t}_1^{\wedge} = \mathbf{U} \mathbf{R}_z(\frac{\pi}{2}) \mathbf{\Sigma} \mathbf{U}^T, & \ \mathbf{R}_1 = \mathbf{U} \mathbf{R}^T_z(\frac{\pi}{2}) \mathbf{V}^T \\ \mathbf{t}_2^{\wedge} = \mathbf{U} \mathbf{R}_z(-\frac{\pi}{2}) \mathbf{\Sigma} \mathbf{U}^T, & \ \mathbf{R}_2 = \mathbf{U} \mathbf{R}^T_z(-\frac{\pi}{2}) \mathbf{V}^T \\ \end{align} t1=URz(2π)ΣUT,t2=URz(2π)ΣUT, R1=URzT(2π)VT R2=URzT(2π)VT
​ 其中, R z ( π 2 ) \mathbf{R}_z(\frac{\pi}{2}) Rz(2π) 表示沿 z z z 轴旋转 90 90 90 度的旋转矩阵。对比上面两个式子可以发现,这两组解其实是以参考帧为中心,绕 z z z 轴呈 180 180 180 度旋转对称的两组解,如下图所示(来自上面推荐的书籍):

在这里插入图片描述

​ 同时,由于 E E E 可以取任意符号,即 − E -E E E E E 是等价的,所以对任意一个 t t t 取负号又取得一个符合条件的解,所以一共有四组符合条件的解。

​ 我们可以将任意一对特征点代入所取得的 4 4 4组解中,检测该点在两个相机下的深度值。显然物方特征点应该位于两个相机的前方,取两个深度值都为正的解即是正确的解。

​ 最后,使用带有噪声的数据利用线形方程组求解得到的E 可能并不是一个”正确“的解,即奇异值矩阵并不满足 E E E 的内在性质 Σ = d i a g ( σ , σ , 0 ) \mathbf{\Sigma} = diag(\sigma, \sigma, 0) Σ=diag(σ,σ,0) 而是 Σ = d i a g ( λ 1 , λ 2 , λ 3 ) \mathbf{\Sigma} = diag(\lambda_1, \lambda_2, \lambda_3) Σ=diag(λ1,λ2,λ3),为从大到小的排序。通常的做法是取 Σ = d i a g ( λ 1 + λ 2 2 ,   λ 1 + λ 2 2 , 0 ) \mathbf{\Sigma} = diag(\frac{\lambda_1 + \lambda_2}{2},\ \frac{\lambda_1 + \lambda_2}{2}, 0) Σ=diag(2λ1+λ2, 2λ1+λ2,0) 或者直接取 ( 1 , 1 , 0 ) (1, 1, 0) (1,1,0)

2.3 单应矩阵

​ 前面我们提到,利用八点法来求解本质矩阵的一个前提是系数矩阵满秩,这也意味着八组特征点不能(近似)落在同一个平面上。但在一些情况中,如无人机俯拍影像,这个假设就不成立了。此时,可以利用单应矩阵 (Homography) H H H 来求解相机运动。

​ 考虑图像 I 1 I1 I1 I 2 I2 I2 有匹配好的特征点对 p 1 p_1 p1 p 2 p_2 p2,这些特征点所对应的物方点 P P P 落在同一平面上。以第一张影像的相机坐标系为惯性系,该平面的法向量为 n n n,到惯性系的原点的距离为 d d d,则该平面可以表示为:
n T P = d \mathbf{n}^T \mathbf{P}=d nTP=d
​ 整理得:
n T P d = 1 \frac{\mathbf{n}^T \mathbf{P}}{d} = 1 dnTP=1
​ 影像 I 2 I2 I2 相对于影像 I 1 I1 I1 的运动为 ( R , t ) (R, t) (R,t),则有:
P 2 = R P 1 + t = R P 1 + t ⋅ n T P 1 d = ( R + t n T d ) ⋅ P 1 \begin{align} \mathbf{P}_2 & = \mathbf{R} \mathbf{P}_1 + \mathbf{t} \\ & = \mathbf{R} \mathbf{P}_1 + \mathbf{t} \cdot \frac{\mathbf{n}^T \mathbf{P}_1}{d} \\ & = (\mathbf{R} + \frac{\mathbf{t} \mathbf{n}^T}{d}) \cdot \mathbf{P}_1 \end{align} P2=RP1+t=RP1+tdnTP1=(R+dtnT)P1
​ 这样,我们就得到了描述两个相机坐标系下同一物方点的转换关系,把中间括号内的部分抽取出来就得到了单应矩阵 H H H。当然,也可以在括号两端各加上相机矩阵 K K K,得到 K ( R + t n T d ) K − 1 \mathbf{K} (\mathbf{R} + \frac{\mathbf{t} \mathbf{n}^T}{d}) \mathbf{K}^{-1} K(R+dtnT)K1,这是高博书中的表示方式,描述了两个图像坐标之间的转换关系。

​ 单应矩阵包含了相机运动信息 ( R , t ) (R, t) (R,t) 和对应平面的参数 ( n , d ) (n, d) (n,d),同样是一个 3 ∗ 3 3 * 3 33 大小的矩阵,同样可以先通过匹配的特征点对计算 H H H 然后将之分解得到平移和旋转。值得注意的是,若相机运动为纯旋转,情形仍和单应矩阵相同,因为此时 X 2 = R X 1 \mathbf{X}_2 = \mathbf{R} \mathbf{X}_1 X2=RX1 x 1 = K R K − 1 x 2 \mathbf{x}_1 = \mathbf{K} \mathbf{R} \mathbf{K}^{-1} \mathbf{x}_2 x1=KRK1x2。可见,旋转矩阵也是单应矩阵的一种

​ 由上可得:
( u 2 v 2 1 ) = ( h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 ) ( u 1 v 1 1 ) \begin{pmatrix} u_2 \\ v_2 \\ 1 \end{pmatrix} = \begin{pmatrix} h_1 & h_2 & h_3 \\ h_4 & h_5 & h_6 \\ h_7 & h_8 & h_9 \\ \end{pmatrix} \begin{pmatrix} u_1 \\ v_1 \\ 1 \end{pmatrix} u2v21 = h1h4h7h2h5h8h3h6h9 u1v11
​ 需要注意的是这里的等号是在一个非零因子下成立的(齐次坐标)。实际处理中常常乘以一个非零因子使得 h 9 = 1 h_9 = 1 h9=1。然后去掉这个非零因子可得:
u 2 = h 1 u 1 + h 2 v 1 + h 3 h 7 u 1 + h 8 v 1 + h 9 v 2 = h 4 u 1 + h 5 v 1 + h 6 h 7 u 1 + h 8 v 1 + h 9 u_2 = \frac{h_1 u_1 + h_2 v_1 + h_3}{h_7 u_1 + h_8 v_1 + h_9} \\ v_2 = \frac{h_4 u_1 + h_5 v_1 + h_6}{h_7 u_1 + h_8 v_1 + h_9} u2=h7u1+h8v1+h9h1u1+h2v1+h3v2=h7u1+h8v1+h9h4u1+h5v1+h6
​ 整理得:
h 1 u 1 + h 2 v 1 + h 3 − h 7 u 1 u 2 − h 8 v 1 u 2 = u 2 h 4 u 1 + h 5 v 1 + h 6 − h 7 u 1 v 2 − h 8 v 1 v 2 = v 2 h_1 u_1 + h_2 v_1 + h_3 - h_7 u_1 u_2 - h_8 v_1 u_2 = u_2 \\ h_4 u_1 + h_5 v_1 + h_6 - h_7 u_1 v_2 - h_8 v_1 v_2 = v_2 h1u1+h2v1+h3h7u1u2h8v1u2=u2h4u1+h5v1+h6h7u1v2h8v1v2=v2
​ 如此,一组匹配点可以构造出两个约束(三组约束中只有两组线性独立)。于是,自由度为 8 8 8 的单应矩阵可以由4对特征点算出(不存在三点共线的情况)。 这种将 H H H 转化为向量形式来直接求解的方式称为直接线性变换 (Direct Linear Transform, DLT)。

和本质矩阵的分解类似,分解单应矩阵H 也会得到4组解(如下所示)。这里的推导比较复杂(我也没看得很明白),还请参看前面的书籍章样。利用物方点的深度值为正(位于相机前方)的特性,可以排除两组解,剩下的两组解则需通过其他先验信息进行验证。

3.0 补充

3.1 尺度不确定性

​ 前面提到, E E E 具有尺度等价性,由它分解得到的 ( R , t ) (R, t) (R,t) 也具有一个尺度等价性,但由于旋转矩阵 R R R 自身带有约束(行列式为 1 1 1 等),所以只有 t t t 具有一个尺度。换言之,分解 E E E 得到的其实是 q t qt qt, q 为一个分零因子。而在通过分解 H H H 得到 ( R , t ) (R, t) (R,t) 的时候,由于平面到坐标原点的距离未知,得到的 t t t 同样具有一个尺度等价性。在这种情况下,通常是将 t t t 进行归一化处理,即令其模长为 1 1 1.

​ 对 t t t 长度的归一化直接导致了单目视觉的尺度不确定性。如果对轨迹和地图同时缩放任意倍数,我们得到的图像仍然是一样的。而对两张图像间的平移t 进行归一化相当于固定尺度。以t 的长度作为为单位长度,计算相机轨迹和特征点的三维位置。这被称为单目 slam 的初始化。初始化后,就可以利用 3D - 2D 来计算相机运动了。进行初始化的两张图像必须有一定程度的平移,而后都将以此步的平移为单位。

3.2 纯旋转

​ 在只有纯旋转的情况下,我们可以通过 H H H 来求取旋转。此时由于 t = 0 t = 0 t=0 E E E 也为 0 0 0。但此时我们无法利用三角测量来计算特征点的空间位置(不构成对极几何)。所以,单目初始化不能只有纯旋转,必须有一定程度的平移

3.3 多余匹配

​ 求解 E E E H H H 都只需要用到少量的特征点对。而通过特征提取和匹配,往往能获得远超需要的特征点对。拥有这么多匹配点,在求解 E E E H H H 的过程中当然可以构造一个最小二乘问题。但是,在可能存在误匹配的情况下,随机采样一致性 (RANSAC) 更受青睐。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值