目录

  • 3 视觉里程计
    • 3.1 特征点法
    • 3.2 相机运动
      • 对极几何
      • PnP
      • ICP

3 视觉里程计

根据相邻的图像信息估计出粗略的相机运动,给后端(非线性优化)提供良好的初始值。算法主要分为特征点法和光流法。

3.1 特征点法

特征点法由于是基于两帧之间(相邻图像)的运动所提出的算法,也成为两视图几何(Two-view geometry)。定位与构图都是基于图像上的信息,特征点法是通过选取图像上比较有代表性的点。在经典SLAM中,我们称之为路标,对于视觉SLAM,称之为图像特征(Feature)。特征是图像信息的另一种数学表达式
特征点由关键点(Key-point)和描述子(Descriptor)组成。关键点是指该特征点在图像里的位置,有些特征点还具有朝向、大小等信息;描述子通常是一个向量,按照某种认为设计的方式,描述了该关键点周围像素的信息。描述子的设计原则为外观相似的特征该有相似的描述子,换句话说就是两个特征点的描述子在向量空间上的距离相近,就可以认为它们为相同的特征点。典型算法有 ORB 算法。

ORB特征
ORB(Oriented FAST and Rotated BRIEF)特征点,是由带方向的FAST关键点和BRIEF描述子组成的。
FAST是一种角点,主要检测局部像素灰度变化明显的地方,思想是如果一个像素与邻域的像素差别较大(过明或过暗),更可能是角点。检测过程如下:

  • 在图像中选取像素 p p p,假设它的亮度为 I p I_p Ip​。
  • 设置一个阈值 T T T(比如, I p I_p Ip​ 的 20%)。
  • 以像素 p p p 为中心,选取半径为 3 的圆上的 16 个像素点。
  • 若选取的圆上有连续的 N N N 个点的亮度在 I p ± T I_p\pm T Ip​±T 范围之外,那么像素 p p p 可以被认为是特征点( N N N 通常取值为 9、11、12,即被称为 FAST-9 、FAST-11 、 FAST-12)。
  • 循环以上四步,对每个像素执行相同的操作。

在 FAST-12 算法中,为了提高运算速率,可以对像素进行预处理,以排除绝大多数非角点的像素:对于每个像素,直接检测邻域圆上的第 1、5、9、13 个像素的亮度,仅当以上四个点中的三个点同时在 I p ± T I_p\pm T Ip​±T 范围之外时,当前像素可能为角点。但也存在着重复性不强、分布不均匀的缺点。同时,FAST 也不具备方向信息,并存在着尺度问题:远看是角点,近处却不一定是。
对于 ORB 来说,为关键点带有尺度不变性而提出的构建图像金字塔(对图像进行不同层次的降采样,以获得不同分辨率的图像),并在每一层上检测角点来实现。
金字塔塔底是原始图像。每往上一层,就对图像进行一个固定倍率的缩放,从而生成了不同分辨率的图像。层数越高,图像分辨率越低。上层的图像可以看做是远处过来的场景。通过匹配不同层上的图像,从而实现尺度不变性。如相机在后退时,可以在前一帧的图像金字塔上层和当前帧的图像金字塔下层中找到匹配。

旋转不变性通过提出的灰度质心法(Intensity Centroid)实现,计算特征点附近的图像灰度质心(图像块灰度值作为权重的中心),有

  • 定义图像块 B B B 的矩(一阶矩) 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)~~~p,q={0,1} mpq​=x,y∈B∑​xpyqI(x,y)   p,q=0,1
  • 计算图像块的质心 C C C(一阶矩/零阶矩) C = ( m 10 m 00 , m 01 m 00 ) C=\left(\frac{m_{10}}{m_{00}},\frac{m_{01}}{m_{00}}\right) C=(m00​m10​​,m00​m01​​)
  • 向量 O C → \overrightarrow{OC} OC 的角度 θ \theta θ ( O O O为图像的几何中心),特征点的方向 θ = arctan ⁡ ( m 01 / m 10 ) \theta=\arctan(m_{01}/m_{10}) θ=arctan(m01​/m10​)

BRIEF描述子
提取关键点之后,计算每个关键点的描述子。BRIEF描述子是一种二进制描述子,其描述向量由许多个 0 和 1 组成,代表着关键点附近两个随机像素 p p p 和 q q q 的大小关系: p > q p>q p>q,则取 1 ,反之取 0。若选取了 N N N 对点比较,则会产生 N N N 维由 0 和 1 组成的向量。原始的BRIEF描述子不具有方向,而对于ORB来说,由于关键点具有方向,因此描述子也具有旋转不变性。


3.2 相机运动

通过特征点法匹配了相邻图像中好的点对,根据点对估计相机运动。由于相机的不同,分为下列情况:单目相机——只有 2D 像素坐标,根据两组坐标估计运动,用对极几何解决;双目相机等(已知深度信息),已知 3D 坐标估计运动,用ICP解决;已知一组为 3D,一组为 2D坐标(3D 点和在相机中投影的位置)估计相机运动,通过PnP求解。


对极几何

取两帧图像 I 1 I_1 I1​ 和 I 2 I_2 I2​ 的运动,设第一帧到第二帧的运动为 R R R 和 t t t。两个相机中心分别为 O 1 O_1 O1​ 和 O 2 O_2 O2​。其中, I 1 I_1 I1​ 中有特征点 p 1 p_1 p1​, I 2 I_2 I2​ 中有特征点 p 2 p_2 p2​。假设匹配成功,则该两点为同一空间在相邻平面上的投影
首先,连线 O 1 p 1 → \overrightarrow{O_1p_1} O1​p1​ ​ 和 O 2 p 2 → \overrightarrow{O_2p_2} O2​p2​ ​ 在三维空间交于点 P P P。点 O 1 , O 2 , P O_1,O_2,P O1​,O2​,P 共面,称为极平面(Epipolar plane)。 O 1 O 2 O_1O_2 O1​O2​ 连线与像平面 I 1 , I 2 I_1,I_2 I1​,I2​ 交于点 e 1 , e 2 e_1,e_2 e1​,e2​,称为极点(Epipoles), O 1 O 2 O_1O_2 O1​O2​ 被称为基线。称极平面与像平面之间的相交线 l 1 , l 2 l_1,l_2 l1​,l2​ 为极线(Epipolar line)。
设 P P P 在 O 1 O_1 O1​ 坐标系下的空间坐标为 P = [ X , Y , Z ] T P=[X,Y,Z]^T P=[X,Y,Z]T,像素点 p 1 , p 2 p_1,p_2 p1​,p2​ 的像素位置为 s 1 p 1 = K P , s 2 P 2 = K ( R P + t ) (3.2.1) s_1p_1=KP,s_2P_2=K(RP+t)\tag{3.2.1} s1​p1​=KP,s2​P2​=K(RP+t)(3.2.1)有时,会使用齐次坐标形式表达像素点。一个向量将等于它自身乘上任意的非零常数,这常用来表达一个投影关系,尺度意义下的相等,记作 s p ≃ p sp\simeq p sp≃p则上述两个投影关系可以写成 p 1 ≃ K P , p 2 ≃ K ( R P + t ) (3.2.2) p_1\simeq KP,p_2\simeq K(RP+t)\tag{3.2.2} p1​≃KP,p2​≃K(RP+t)(3.2.2) P P P 为中间变量,令 x 1 = K − 1 p 1 , x 2 = K − 1 p 2 (3.2.3) x_1=K^{-1}p_1,x_2=K^{-1}p_2\tag{3.2.3} x1​=K−1p1​,x2​=K−1p2​(3.2.3)
因为像素点可以视为齐次坐标,所以 x 1 , x 2 x_1,x_2 x1​,x2​ 为归一化坐标(归一化平面为 Z = 1 Z=1 Z=1),则有 x 2 ≃ R x 1 + t t ∧ x 2 ≃ t ∧ R x 1 x 2 T t ∧ x 2 ≃ x 2 T t ∧ R x 1 \begin{aligned}x_2&\simeq Rx_1+t\\t^\wedge x_2&\simeq t^\wedge Rx_1\\x_2^Tt^\wedge x_2&\simeq x_2^Tt^\wedge Rx_1\end{aligned} x2​t∧x2​x2T​t∧x2​​≃Rx1​+t≃t∧Rx1​≃x2T​t∧Rx1​​

因为 t ∧ x 2 t^\wedge x_2 t∧x2​ 表示为 t t t 和 x 2 x_2 x2​ 所构成平面,因此式子左侧为零,故有 x 2 T t ∧ R x 1 = 0 (3.2.4) x_2^Tt^\wedge Rx_1=0\tag{3.2.4} x2T​t∧Rx1​=0(3.2.4)代入式子(3.2.3)有 p 2 T K − T t ∧ R K − 1 p 1 = 0 (3.2.5) p_2^TK^{-T}t^\wedge RK^{-1}p_1=0\tag{3.2.5} p2T​K−Tt∧RK−1p1​=0(3.2.5)式子(3.2.4)(3.2.5)称为对极约束
几何意义为 O 1 P O 2 O_1PO_2 O1​PO2​ 共面( x 2 , t , R x 1 x_2,t,Rx_1 x2​,t,Rx1​ 共面,其中 x 1 x_1 x1​代表 O 1 p 1 O_1 p_1 O1​p1​, x 2 x_2 x2​代表 O 2 p 2 O_2 p_2 O2​p2​, R R R t t t代表从 O 1 O_1 O1​ 到 O 2 O_2 O2​, p 1 p_1 p1​ p 2 p_2 p2​为点 P P P 的投影)
取 E = t ∧ R E=t^\wedge R E=t∧R 为本质矩阵(Essential Matrix)和 F = K − T E K − 1 F=K^{-T}EK^{-1} F=K−TEK−1 为基础矩阵(Fundamental Matrix) F F F,简化对极约束为 x 2 T E x 1 = p 2 T F p 1 = 0 (3.2.6) x_2^TEx_1=p_2^TFp_1=0\tag{3.2.6} x2T​Ex1​=p2T​Fp1​=0(3.2.6)于是,相机位姿估计变成以下两步

  • 根据匹配点的像素位置求出 E E E 或 F F F
  • 根据 E E E 或 F F F 求出 R , t R,t R,t

由于 E E E 和 F F F 只差了一个已知的相机内参矩阵 K K K,因此往往使用更为简单的 E E E。

F F F 的自由度是7。首先是 3 × 3 3\times 3 3×3矩阵,9个自由度,然后有尺度等价性和 d e t ( F ) = 0 det(F)=0 det(F)=0 两个约束条件。9-2=7。

本质矩阵
由于本质矩阵是根据对极约束定义的,对极约束为等式为零的约束,乘以任意一个非零常数项约束条件仍满足,因此称为 E E E 在不同尺度上是等价的;同时,由于 E = t ∧ R E=t^\wedge R E=t∧R 可知,本质矩阵为 3 × 3 3\times 3 3×3 的矩阵,可以证明其奇异值必定为 d i a g [ σ , σ , 0 ] diag [\sigma,\sigma,0] diag[σ,σ,0] 的形式1(本质矩阵的内在性质); R R R 旋转有三个自由度, t t t 平移有两个自由度(尺度等价),故本质矩阵有五个自由度。有五个自由度表示需要至少五对特征点来求解 E E E,但是对于内在性质(非线性性质)来说,只用五对点来求解时,会在估计中带来麻烦,因此,可以只考虑本质矩阵的尺度等价性,即用 3 × 3 − 1 3\times3-1 3×3−1 对点来计算 E E E—八点法(Eight-point-algorithm)。
一对特征点的归一化坐标为 x 1 = [ u 1 , v 1 , 1 ] T , x 2 = [ u 2 , v 2 , 1 ] T x_1=[u_1,v_1,1]^T,x_2=[u_2,v_2,1]^T x1​=[u1​,v1​,1]T,x2​=[u2​,v2​,1]T 根据对极约束则有 [ 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[\begin{matrix}u_2&v_2&1\end{matrix}\right]\left[\begin{matrix}e_1&e_2&e_3\\e_4&e_5&e_6\\e_7&e_8&e_9\\\end{matrix}\right]\left[\begin{matrix}u_1\\v_1\\1\end{matrix}\right]=0 [u2​​v2​​1​] ​e1​e4​e7​​e2​e5​e8​​e3​e6​e9​​ ​ ​u1​v1​1​ ​=0将 E E 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]^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 (3.2.7) [u_2u_1,u_2v_1,u_2,v_2u_1,v_2v_1,v_2,u_1,v_1,1]\cdot e=0\tag{3.2.7} [u2​u1​,u2​v1​,u2​,v2​u1​,v2​v1​,v2​,u1​,v1​,1]⋅e=0(3.2.7)用 u i , v i u^i,v^i ui,vi 表示第 i i i 个特征点,选取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 \left[\begin{matrix}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{matrix}\right]\left[\begin{matrix}e_1\\e_2\\e_3\\e_4\\e_5\\e_6\\e_7\\e_8\\e_9\end{matrix}\right]=0 ​u21​u11​u22​u12​⋮u28​u18​​u21​v11​u22​v12​⋮u28​v18​​u21​u22​⋮u28​​v21​u11​v22​u12​⋮v28​u18​​v21​v11​v22​v12​⋮v28​v18​​v21​v22​⋮v28​​u11​u12​⋮u18​​v11​v12​⋮v18​​11⋮1​ ​ ​e1​e2​e3​e4​e5​e6​e7​e8​e9​​ ​=0此线性方程组的系数矩阵由特征点的位置所组成,矩阵大小为 8 × 9 8\times9 8×9,若此矩阵满秩,则可以计算出 E E E。由奇异值分解(SVD)可得 1,可以将矩阵 E E E 分解为 t ∧ R t^\wedge R t∧R 的形式有如下四种 ± 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 (3.2.8) \begin{aligned}\\\pm t_1^\wedge &=UR_Z(\frac{\pi}{2})\Sigma U^T,R_1=UR_Z^T(\frac{\pi}{2})V^T\\\pm t_2^\wedge &=UR_Z(\frac{\pi}{2})\Sigma U^T,R_2=UR_Z^T(\frac{\pi}{2})V^T\\\end{aligned}\tag{3.2.8} ±t1∧​±t2∧​​=URZ​(2π​)ΣUT,R1​=URZT​(2π​)VT=URZ​(2π​)ΣUT,R2​=URZT​(2π​)VT​(3.2.8)其中 R Z ( π 2 ) R_Z(\frac{\pi}{2}) RZ​(2π​) 表示沿 Z Z Z 轴旋转 90° 得到的旋转矩阵。

只有(1)是正确的深度。通常,根据线性方程组解出的 E E E ,可能不满足内在性质 Σ = d i a g [ σ 1 , σ 2 , σ 3 ] , σ 1 > σ 2 > σ 3 \Sigma=diag[\sigma_1,\sigma_2,\sigma_3],\sigma_1>\sigma_2>\sigma_3 Σ=diag[σ1​,σ2​,σ3​],σ1​>σ2​>σ3​ ,因此会可以调整为 E = U Σ V T = U d i a g [ σ 1 + σ 2 2 , σ 1 + σ 2 2 , 0 ] V T E=U\Sigma V^T=Udiag[\frac{\sigma_1+\sigma_2}{2},\frac{\sigma_1+\sigma_2}{2},0]V^T E=UΣVT=Udiag[2σ1​+σ2​​,2σ1​+σ2​​,0]VT

单应矩阵
单应矩阵 H H H(Homography),描述了两个平面之间的映射关系。若场景的特征落在同一平面上,则可以通过单应性估计运动。
单应矩阵描述的就是同一个平面的点在不同图像之间的映射关系。如扫描银行卡时,在相机中的银行卡不是正对着的,扫描后的卡是规则的矩形。银行卡四个点都是同一平面,不同的图像就是指相机中的和扫描之后的。又如将什么信息P到高速路两边的广告牌上。还有重要的应用,相机标定,张正友相机标定法。
设图像 I 1 I_1 I1​ 和图像 I 2 I_2 I2​ 有一对匹配好的特征点 p 1 p_1 p1​ 和 p 2 p_2 p2​,这两个特征点落在同一平面上,此平面的平面方程(点法式)为 n T P + d = 0 − n T P d = 1 \begin{aligned}n^TP+d=0\\-\frac{n^TP}{d}=1\end{aligned} nTP+d=0−dnTP​=1​ 将上式带入式子(3.2.2)中,有(整理点 P P P) p 2 ≃ K ( R P + t ) ≃ K ( R P + t ⋅ ( − n T P d ) ) ≃ K ( R − t n T d ) P ≃ K ( R − t n T d ) K − 1 p 1 ≃ H p 1 (3.2.9) \begin{aligned}p_2&\simeq K(RP+t)\\&\simeq K\left(RP+t\cdot(-\frac{n^TP}{d})\right)\\&\simeq K\left(R-\frac{tn^T}{d}\right)P\\&\simeq K\left(R-\frac{tn^T}{d}\right)K^{-1}p_1\\&\simeq Hp_1\end{aligned}\tag{3.2.9} p2​​≃K(RP+t)≃K(RP+t⋅(−dnTP​))≃K(R−dtnT​)P≃K(R−dtnT​)K−1p1​≃Hp1​​(3.2.9)其中 H H H 的定于与旋转、平移和平面的参数有关。求解思路与 E E E 类似。将上式展开 [ 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 ] \left[\begin{matrix}u_2\\v_2\\1\end{matrix}\right]\simeq\left[\begin{matrix}h_1&h_2&h_3\\h_4&h_5&h_6\\h_7&h_8&h_9\\\end{matrix}\right]\left[\begin{matrix}u_1\\v_1\\1\end{matrix}\right] ​u2​v2​1​ ​≃ ​h1​h4​h7​​h2​h5​h8​​h3​h6​h9​​ ​ ​u1​v1​1​ ​由于上式为投影关系,因此有 u 2 = u 2 1 = h 1 u 1 + h 2 v 1 + h 3 h 7 u 1 + h 8 v 1 + h 9 v 2 = v 2 1 = h 4 u 1 + h 5 v 1 + h 6 h 7 u 1 + h 8 v 1 + h 9 \begin{aligned}u_2=\frac{u_2}{1}=\frac{h_1u_1+h_2v_1+h_3}{h_7u_1+h_8v_1+h_9}\\v_2=\frac{v_2}{1}=\frac{h_4u_1+h_5v_1+h_6}{h_7u_1+h_8v_1+h_9}\end{aligned} u2​=1u2​​=h7​u1​+h8​v1​+h9​h1​u1​+h2​v1​+h3​​v2​=1v2​​=h7​u1​+h8​v1​+h9​h4​u1​+h5​v1​+h6​​​因为尺度的不确定性,可以令 h 9 = 1 h_9=1 h9​=1,则有 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 \begin{aligned}h_1u_1+h_2v_1+h_3-h_7u_1u_2-h_8v_1u_2=u_2\\h_4u_1+h_5v_1+h_6-h_7u_1v_2-h_8v_1v_2=v_2\end{aligned} h1​u1​+h2​v1​+h3​−h7​u1​u2​−h8​v1​u2​=u2​h4​u1​+h5​v1​+h6​−h7​u1​v2​−h8​v1​v2​=v2​​一组特征点有两个约束条件(实际上有三个,但是第三行线性相关)则求解 H H H 矩阵可以通过四组特征点(八个线性方程) [ u 1 1 v 1 1 1 0 0 0 − u 1 1 u 2 1 − v 1 1 u 2 1 0 0 0 u 1 1 v 1 1 1 − u 1 1 v 2 1 − v 1 1 v 2 1 u 1 2 v 1 2 1 0 0 0 − u 1 2 u 2 2 − v 1 2 u 2 2 0 0 0 u 1 2 v 1 2 1 − u 1 2 v 2 2 − v 1 2 v 2 2 u 1 3 v 1 3 1 0 0 0 − u 1 3 u 2 3 − v 1 3 u 2 3 0 0 0 u 1 3 v 1 3 1 − u 1 3 v 2 3 − v 1 3 v 2 3 u 1 4 v 1 4 1 0 0 0 − u 1 4 u 2 4 − v 1 4 u 2 4 0 0 0 u 1 4 v 1 4 1 − u 1 4 v 2 4 − v 1 4 v 2 4 ] [ h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 ] = [ u 2 1 v 2 1 u 2 2 v 2 2 u 2 3 v 2 3 u 2 4 v 2 4 ] \left[\begin{matrix}u_1^1&v_1^1&1&0&0&0&-u_1^1u_2^1&-v_1^1u_2^1\\0&0&0&u_1^1&v_1^1&1&-u_1^1v_2^1&-v_1^1v_2^1\\u_1^2&v_1^2&1&0&0&0&-u_1^2u_2^2&-v_1^2u_2^2\\0&0&0&u_1^2&v_1^2&1&-u_1^2v_2^2&-v_1^2v_2^2\\u_1^3&v_1^3&1&0&0&0&-u_1^3u_2^3&-v_1^3u_2^3\\0&0&0&u_1^3&v_1^3&1&-u_1^3v_2^3&-v_1^3v_2^3\\u_1^4&v_1^4&1&0&0&0&-u_1^4u_2^4&-v_1^4u_2^4\\0&0&0&u_1^4&v_1^4&1&-u_1^4v_2^4&-v_1^4v_2^4\\\end{matrix}\right]\left[\begin{matrix}h_1\\h_2\\h_3\\h_4\\h_5\\h_6\\h_7\\h_8\end{matrix}\right]=\left[\begin{matrix}u_2^1\\v_2^1\\u_2^2\\v_2^2\\u_2^3\\v_2^3\\u_2^4\\v_2^4\\\end{matrix}\right] ​u11​0u12​0u13​0u14​0​v11​0v12​0v13​0v14​0​10101010​0u11​0u12​0u13​0u14​​0v11​0v12​0v13​0v14​​01010101​−u11​u21​−u11​v21​−u12​u22​−u12​v22​−u13​u23​−u13​v23​−u14​u24​−u14​v24​​−v11​u21​−v11​v21​−v12​u22​−v12​v22​−v13​u23​−v13​v23​−v14​u24​−v14​v24​​ ​ ​h1​h2​h3​h4​h5​h6​h7​h8​​ ​= ​u21​v21​u22​v22​u23​v23​u24​v24​​ ​此做法将 H H H 矩阵视为向量,通过解该向量的线性方程来恢复 H H H,又称直接线性变换法(Direct Linear Transform,DLT)。也可以讲等式同时乘以等号左式的叉乘,使等号左边为0。分解 H H H 矩阵有数值法、解析法等。
单应性在现实生活中具有重要意义,当特征点共面或者相机发生纯旋转时,基础矩阵的自由度就会下降,出现了所谓的退化(degenerate)。现实中的数据带有噪声,如果此时继续用八点法求解基础矩阵,基础矩阵多出来的自由度将会有噪声决定,为了避免退化现象造成的影响,通常我们会同时估计基础矩阵 F F F 和单应矩阵 H H H,选择重投影误差小的那个作为最终的运动估计矩阵

尺度不确定性:对 t t t 长度的归一化,直接导致了单目视觉的尺度不确定性。在单目SLAM中,对轨迹和地图同时缩放任意倍数,得到的图像都是一样的。单目视觉中,对两个图的 t t t 归一化,相当于固定了尺度。虽然我们不知道它的实际长度是多少,但我们以这时的 t 为单位 1,计算相机运动和特征点的 3D 位置。这被称为单目 SLAM 的初始化。在初始化之后,就可以用 3D−2D 计算相机运动了。因此,单目 SLAM 有一步不可避免的初始化。初始化的两张图像必须有一定程度的平移,而后的轨迹和地图都将以此步的平移为单位。

初始化的纯旋转问题:单目初始化不能只有纯旋转,必须要有一定程度的平移。
多于 8 对点的情况,可以计算最小二乘解。多于八个点, A e = 0 Ae=0 Ae=0为超定方程。可以通过最小化二次型求得。
min ⁡ e ∣ ∣ A e ∣ ∣ 2 2 = min ⁡ e e T A T A e \underset{e}{\min}||Ae||_2^2=\underset{e}{\min}e^TA^TAe emin​∣∣Ae∣∣22​=emin​eTATAe
于是就求出了在最小二乘意义下的 E E E 矩阵。不过,当可能存在误匹配的情况时,我们会更倾向于使用随机采样一致性( Random Sample Concensus, RANSAC) 来求,而不是最小二乘。RANSAC 是一种通用的做法,适用于很多带错误数据的情况,可以处理带有错误匹配的数据。


三角测量
对极约束估计了相机运动,下一步需要用相机运动来估计特征点的空间位置,需要用到三角测量(Triangulation)(或三角化)。
考虑图像 I 1 I_1 I1​ 和 I 2 I_2 I2​,以左图为参考,右图的变换矩阵为 T T T。相机光心为 O 1 O_1 O1​ 和 O 2 O_2 O2​。在 I 1 I_1 I1​ 上有特征点 p 1 p_1 p1​,对应 I 2 I_2 I2​ 上有特征点 p 2 p_2 p2​。理论上,直线 O 1 p 1 O_1p_1 O1​p1​ 与 O 2 p 2 O_2p_2 O2​p2​ 会相交于一点 P P P,但实际中存在噪声,直线无法相交,可以通过最小二乘法求解。
按照对极几何中的定义, x 1 x_1 x1​ 和 x 2 x_2 x2​ 为两个特征点的归一化坐标,则满足 s 2 x 2 = s 1 R x 1 + t s_2x_2=s_1Rx_1+t s2​x2​=s1​Rx1​+t已知 R R R 和 t t t,求解特征点的深度 s 1 s_1 s1​ 和 s 2 s_2 s2​。从几何关系上看,可以从射线 O 1 p 1 O_1p_1 O1​p1​ 上寻找点 P P P,使其投影位置靠近 p 2 p_2 p2​;同理 O 2 p 2 O_2p_2 O2​p2​;也可以在两条线的中间找。例如,对于计算 s 1 s_1 s1​ 来说,上式左乘 x 2 ∧ x_2^\wedge x2∧​,得 s 2 x 2 ∧ x 2 = 0 = s 1 x 2 ∧ R x 1 + x 2 ∧ t s_2x_2^\wedge x_2=0=s_1x_2^\wedge Rx_1+x_2^\wedge t s2​x2∧​x2​=0=s1​x2∧​Rx1​+x2∧​t上式左侧为零,右侧只有 s 1 s_1 s1​ 一个未知数,则可计算。当然,由于噪声的存在,通常求解为最小二乘解。


PnP

PnP(Perspective-n-Point)描述了知道 n n n 个3D空间点及其投影位置,如何估计相机的位姿。如果两张图像中的一张特征点的3D位置已知,那么最少只需3个点对(以及至少一个额外点验证结果)就可以估计相机运动。对于双目相机或者可测量深度的相机(RGB-D),可以直接使用PnP估计相机运动,而对于单目相机来说,需要先三角化已知3D点的深度,才能使用PnP。PnP无需对极约束,又可以在很少的匹配点中获得较好的运动估计,使最重要的姿态估计方法。主要介绍PnP方法中的直接线性变换(DLT)和光束法平差(Bundle Adjustment,BA)—非线性优化的方式,构建最小二乘问题并迭代求解。

直接线性变换
有如下问题:已知一组3D点的位置,以及它们在某个相机中的投影位置,求该相机的位姿。对于空间点 P P P,齐次坐标为 P = ( X , Y , Z , 1 ) T P=(X,Y,Z,1)^T P=(X,Y,Z,1)T。在图像 I 1 I_1 I1​ 中,投影到特征点 x 1 = ( u 1 , v 1 , 1 ) T x_1=(u_1,v_1,1)^T x1​=(u1​,v1​,1)T (用齐次坐标在归一化平面上表述)。此时,相机位姿 R R R 和 t t t 是未知的。与单应矩阵的求法类似,我们定义增广矩阵 [ R ∣ t ] [R|t] [R∣t] 为一个 3 × 4 3\times4 3×4 的矩阵,将其展开为 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\left(\begin{matrix}u_1\\v_1\\1\end{matrix}\right)=\left(\begin{matrix}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{matrix}\right)\left(\begin{matrix}X\\Y\\Z\\1\end{matrix}\right) s ​u1​v1​1​ ​= ​t1​t5​t9​​t2​t6​t10​​t3​t7​t11​​t4​t8​t12​​ ​ ​XYZ1​ ​解法同单应矩阵 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_1X+t_2Y+t_3Z+t_4}{t_9X+t_{10}Y+t_{11}Z+t_{12}},v_1=\frac{t_5X+t_6Y+t_7Z+t_8}{t_9X+t_{10}Y+t_{11}Z+t_{12}} u1​=t9​X+t10​Y+t11​Z+t12​t1​X+t2​Y+t3​Z+t4​​,v1​=t9​X+t10​Y+t11​Z+t12​t5​X+t6​Y+t7​Z+t8​​为了简化表示,定义 T T T 的行向量 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 \mathbf{t_1}=(t_1,t_2,t_3,t_4)^T,\mathbf{t_2}=(t_5,t_6,t_7,t_8)^T,\mathbf{t_3}=(t_9,t_{10},t_{11},t_{12})^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 \mathbf{t_1}^TP-\mathbf{t_3}^TPu_1=0,\mathbf{t_2}^TP-\mathbf{t_3}^TPv_1=0 t1​TP−t3​TPu1​=0,t2​TP−t3​TPv1​=0可以看到每个特征点提供了两个关于 t \mathbf{t} t 的线性约束,假设一共有 N N N 个点,则可以写成如下线性方程组 ( P 1 T 0 − u 1 P 1 T 0 P 1 T − v 1 P 1 T ⋮ ⋮ ⋮ P N T 0 − u N P N T 0 P N T − v N P N T ) ( t 1 t 2 t 3 ) = 0 (3.1.10) \left(\begin{matrix}P_1^T&0&-u_1P_1^T\\0&P_1^T&-v_1P_1^T\\\vdots&\vdots&\vdots\\P_N^T&0&-u_NP_N^T\\0&P_N^T&-v_NP_N^T\\\end{matrix}\right)\left(\begin{matrix}\mathbf{t_1}\\\mathbf{t_2}\\\mathbf{t_3}\end{matrix}\right)=0\tag{3.1.10} ​P1T​0⋮PNT​0​0P1T​⋮0PNT​​−u1​P1T​−v1​P1T​⋮−uN​PNT​−vN​PNT​​ ​ ​t1​t2​t3​​ ​=0(3.1.10)其中 t \mathbf{t} t 一共有 12 维,因此至少通过 6 对匹配点可以实现 [ R ∣ t ] [R|t] [R∣t] 的求解。当匹配点大于6对的时候,也可以使用SVD等方法对超定方程2求最小二乘解。但求解解出的 R R R 不满足旋转矩阵的约束,需要对其进行投影到流形,通过 R ← ( R R T ) − 1 2 R R\leftarrow (RR^T)^{-\frac{1}{2}}R R←(RRT)−21​R求解近似问题。

P3P
需要利用给定的3个点的几何关系。输入数据为3对3D-2D匹配点。记3
点为 A A A B B B C C C,2D点为 a a a b b b c c c,其中小写字母代表的点为对应大写字母代表的点在相机成像平面上的投影。P3P 还需要使用一对验证点,以从可能的解中选出正确的那一个(类似于对极几何情形)。记验证点对为 D − d D − d D−d,相机光心为 O O O。 A A A, B B B, C C C 在世界坐标系中的坐标,而不是在相机坐标系中的坐标。
由余弦定理可得
O A 2 + O B 2 − 2 O A ⋅ O B ⋅ cos ⁡ ⟨ a , b ⟩ = A B 2 O B 2 + O C 2 − 2 O B ⋅ O C ⋅ cos ⁡ ⟨ b , c ⟩ = B C 2 O A 2 + O C 2 − 2 O A ⋅ O C ⋅ cos ⁡ ⟨ a , c ⟩ = A C 2 (3.1.11) \begin{aligned}OA^2+OB^2-2OA\cdot OB\cdot \cos\langle a,b\rangle &=AB^2 \\OB^2+OC^2-2OB\cdot OC\cdot \cos\langle b,c\rangle &=BC^2\\ OA^2+OC^2-2OA\cdot OC\cdot \cos\langle a,c\rangle &=AC^2\end{aligned}\tag{3.1.11} OA2+OB2−2OA⋅OB⋅cos⟨a,b⟩OB2+OC2−2OB⋅OC⋅cos⟨b,c⟩OA2+OC2−2OA⋅OC⋅cos⟨a,c⟩​=AB2=BC2=AC2​(3.1.11)
对上式全体除以 O C 2 OC^2 OC2,并记 x = O A / O C , y = O B / O C x=OA/OC,y=OB/OC x=OA/OC,y=OB/OC,得
x 2 + y 2 − 2 x y cos ⁡ ⟨ a , b ⟩ = A B 2 / O C 2 y 2 + 1 − 2 y cos ⁡ ⟨ b , c ⟩ = B C 2 / O C 2 x 2 + 1 − 2 x cos ⁡ ⟨ a , c ⟩ = A C 2 / O C 2 (3.1.12) \begin{aligned}&x^2+y^2-2xy\cos \langle a,b\rangle =AB^2/OC^2\\ &y^2+1-2y\cos \langle b,c\rangle =BC^2/OC^2\\ &x^2+1-2x\cos \langle a,c\rangle =AC^2/OC^2\tag{3.1.12}\end{aligned} ​x2+y2−2xycos⟨a,b⟩=AB2/OC2y2+1−2ycos⟨b,c⟩=BC2/OC2x2+1−2xcos⟨a,c⟩=AC2/OC2​(3.1.12)
记 v = A B 2 / O C 2 , u v = B C 2 / O C 2 , w v = A C 2 / O C 2 v=AB^2/OC^2,uv=BC^2/OC^2,wv=AC^2/OC^2 v=AB2/OC2,uv=BC2/OC2,wv=AC2/OC2,有
x 2 + y 2 − 2 x y cos ⁡ ⟨ a , b ⟩ − v = 0 y 2 + 1 − 2 y cos ⁡ ⟨ b , c ⟩ − u v = 0 x 2 + 1 − 2 x cos ⁡ ⟨ a , c ⟩ − w v = 0 (3.1.13) \begin{aligned}&x^2+y^2-2xy\cos \langle a,b\rangle -v=0\\ &y^2+1-2y\cos \langle b,c\rangle -uv=0\\ &x^2+1-2x\cos \langle a,c\rangle -wv=0\tag{3.1.13}\end{aligned} ​x2+y2−2xycos⟨a,b⟩−v=0y2+1−2ycos⟨b,c⟩−uv=0x2+1−2xcos⟨a,c⟩−wv=0​(3.1.13)
上式 v v v 代入后两式整理,得
( 1 − u ) y 2 − u x 2 − cos ⁡ ⟨ b , c ⟩ 2 y + 2 u x y cos ⁡ ⟨ a , b ⟩ + 1 = 0 ( 1 − w ) x 2 − w y 2 − cos ⁡ ⟨ a , c ⟩ 2 x + 2 w x y cos ⁡ ⟨ a , b ⟩ + 1 = 0 (3.1.14) \begin{aligned}&(1-u)y^2-ux^2-\cos\langle b,c\rangle 2y+2uxy\cos \langle a,b\rangle +1=0\\&(1-w)x^2-wy^2-\cos\langle a,c\rangle 2x+2wxy\cos \langle a,b\rangle +1=0\tag{3.1.14} \end{aligned} ​(1−u)y2−ux2−cos⟨b,c⟩2y+2uxycos⟨a,b⟩+1=0(1−w)x2−wy2−cos⟨a,c⟩2x+2wxycos⟨a,b⟩+1=0​(3.1.14)
由于我们知道 2D 点的图像位置,3 个余弦角是已知的。 u = B C 2 / A B 2 , w = A C 2 / A B 2 u = BC^2/AB^2, w = AC^2/AB^2 u=BC2/AB2,w=AC2/AB2 可以通过 A A A, B B B, C C C 在世界坐标系下的坐标算出,变换到相机坐标系下之后,这个比值并不改变。该式中的 x , y x, y x,y 是未知的,随着相机移动会发生变化。因此,该方程组是关于 x , y x, y x,y 的一个二元二次方程(多项式方程)。方程组的解析解是一个复杂的过程,需要用吴消元法。类似于分解 E 的情况,该方程最多可能得到 4 个解,但我们可以用验证点来计算最可能的解,得到 A , B , C A, B, C A,B,C 在相机坐标系下的 3D 坐标。然后,根据 3D−3D 的点对,计算相机的运动 R , t R, t R,t。
从 P3P 的原理可以看出,为了求解 PnP,我们利用了三角形相似性质,求解投影点 a , b , c a, b, c a,b,c 在相机坐标系下的 3D 坐标,最后把问题转换成一个 3D 到 3D 的位姿估计问题。

最小化重投影误差
非线性优化是把相机位姿空间点一起作为优化变量,进行最小化误差的办法,称为Bundle Adjustment。考虑 n n n 个空间点 P P P 及其投影 p p p,希望计算相机位姿 R R R 和 t t t,用李群 T T T 来表示。假设空间点的坐标为 P i = [ X i , Y i , Z i ] T P_i=[X_i,Y_i,Z_i]^T Pi​=[Xi​,Yi​,Zi​]T 及其投影点的像素坐标 u i = [ u i , v i ] T \mathbf{u_i}=[u_i,v_i]^T ui​=[ui​,vi​]T,有 s i u i = K T P i s i [ u i v i 1 ] = K T [ X i Y i Z i 1 ] (3.1.15) \begin{aligned}s_i\mathbf{u_i}&=KTP_i\\s_i\left[\begin{matrix}u_i\\v_i\\1\end{matrix}\right]&=KT\left[\begin{matrix}X_i\\Y_i\\Z_i\\1\end{matrix}\right]\end{aligned}\tag{3.1.15} si​ui​si​ ​ui​vi​1​ ​​=KTPi​=KT ​Xi​Yi​Zi​1​ ​​(3.1.15)由于相机位姿未知及观测点的噪声,该等式存在一个误差。现将相机位姿和空间点的误差求和,构建一个最小二乘问题,然后寻找最好的相机位姿,使它最小化: T ∗ = arg ⁡ min ⁡ T 1 2 ∑ i = 1 n ∥ u i − 1 s i K T P i ∥ 2 2 (3.1.16) T^*=\arg\min_T\frac{1}{2}\sum_{i=1}^{n}\left\|\mathbf{u_i}-\frac{1}{s_i}KTP_i\right\|_2^2\tag{3.1.16} T∗=argTmin​21​i=1∑n​ ​ui​−si​1​KTPi​ ​22​(3.1.16)该问题的误差项是将 3D投影点位置与观测位置作差,所以称为重投影误差。使用齐次坐标,误差最后一维为0,因此更多时候使用非其次坐标。我们通过特征匹配知道了 p 1 p1 p1 和 p 2 p2 p2 是同一个空间点 P P P 的投影,但是不知道相机的位姿。在初始值中, P P P 的投影 p ^ 2 \hat{p}_2 p^​2​ 与实际的 p 2 p_2 p2​ 之间有一定的距离。于是我们调整相机的位姿,使得这个距离变小。不过,由于这个调整需要考虑很多个点,所以最后的效果是整体误差的缩小,而每个点的误差通常都不会精确为零。
使用高斯牛顿法和列文伯格—马夸尔特方法之前,我们需要知道每个误差项关于优化变量的导数,对上述误差函数线性化
e ( x + Δ x ) ≈ e ( x ) + J T Δ x (3.1.17) e(x+\Delta x)\approx e(x)+ J^T\Delta x\tag{3.1.17} e(x+Δx)≈e(x)+JTΔx(3.1.17)

当 e e e 为像素坐标误差( 2 维), x x x 为相机位姿( 6 维)时, J T J^T JT 将是一个 2 × 6 2 × 6 2×6 的矩阵。我们来推导 J T J^T JT 的形式。

首先,记变换到相机坐标系下的空间点坐标为 P ′ P^\prime P′ ,并且将其前 3 维取出来:
P ′ = ( T P ) 1 : 3 = [ X ′ , Y ′ , Z ′ ] T (3.1.18) P^\prime = (TP)_{1:3} = [X^\prime, Y^\prime, Z^\prime]^T\tag{3.1.18} P′=(TP)1:3​=[X′,Y′,Z′]T(3.1.18)
那么,相机投影模型相对于 P ′ P^\prime P′为
s u = K P ′ (3.1.19) su=KP^\prime\tag{3.1.19} su=KP′(3.1.19)
展开
[ s u s v s ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X ′ Y ′ Z ′ ] (3.1.20) \left[ \begin{matrix}su\\sv\\s\end{matrix}\right ]= \left[\begin{matrix}f_x&0&c_x\\0&f_y&c_y\\0&0&1 \end{matrix}\right]\left[ \begin{matrix}X^\prime\\Y^\prime\\Z^\prime\end{matrix}\right ]\tag{3.1.20} ​susvs​ ​= ​fx​00​0fy​0​cx​cy​1​ ​ ​X′Y′Z′​ ​(3.1.20)
整理得
u = f x X ′ Z ′ + c x , v = f y Y ′ Z ′ + c y (3.1.21) u=f_x\frac{X^\prime}{Z^\prime}+c_x,v=f_y\frac{Y^\prime}{Z^\prime}+c_y\tag{3.1.21} u=fx​Z′X′​+cx​,v=fy​Z′Y′​+cy​(3.1.21)
求误差时,可以把这里的 u u u v v v与实际的测量值求差。
在定义了中间变量(相机坐标系点 P ′ P^\prime P′ )后,我们对 T T T 左乘扰动量 δ ξ \delta \xi δξ,然后考虑误差 e e e 的变化关于扰动量的导数。
∂ x ∂ δ ξ = lim ⁡ δ ξ → 0 e ( δ ξ ⊕ ξ ) − e ( ξ ) δ ξ = ∂ e ∂ P ′ ∂ P ′ ∂ δ ξ (3.1.22) \frac{\partial x}{\partial \delta \xi}=\lim_{\delta\xi\to 0}\frac{e(\delta\xi \oplus\xi)-e(\xi)}{\delta\xi}=\frac{\partial e}{\partial P^\prime}\frac{\partial P^\prime}{\partial \delta\xi}\tag{3.1.22} ∂δξ∂x​=δξ→0lim​δξe(δξ⊕ξ)−e(ξ)​=∂P′∂e​∂δξ∂P′​(3.1.22)
这里的 ⊕ \oplus ⊕ 指李代数上的左乘扰动。第一项是误差关于投影点的导数,容易得
∂ e ∂ P ′ = − [ ∂ u ∂ X ′ ∂ u ∂ Y ′ ∂ u ∂ Z ′ ∂ v ∂ X ′ ∂ v ∂ Y ′ ∂ v ∂ Z ′ ] = − [ f x Z ′ 0 − f x X ′ Z ′ 2 0 f y Z ′ − f y Y ′ Z ′ 2 ] (3.1.23) \frac{\partial e}{\partial P^\prime}=-\left[\begin{matrix}\frac{\partial u}{\partial X^\prime}&\frac{\partial u}{\partial Y^\prime}&\frac{\partial u}{\partial Z^\prime}\\\frac{\partial v}{\partial X^\prime}&\frac{\partial v}{\partial Y^\prime}&\frac{\partial v}{\partial Z^\prime}\end{matrix}\right]=-\left[\begin{matrix}\frac{f_x}{Z^\prime}&0&-\frac{f_xX^\prime}{Z^{\prime 2}}\\0&\frac{f_y}{Z^\prime}&-\frac{f_yY^\prime}{Z^{\prime 2}}\end{matrix}\right]\tag{3.1.23} ∂P′∂e​=−[∂X′∂u​∂X′∂v​​∂Y′∂u​∂Y′∂v​​∂Z′∂u​∂Z′∂v​​]=−[Z′fx​​0​0Z′fy​​​−Z′2fx​X′​−Z′2fy​Y′​​](3.1.23)
第二项为变换后的点关于李代数的导数
∂ T P ∂ δ ξ = ( T P ) ⊙ = [ I − P ′ ∧ 0 T 0 T ] (3.1.24) \frac{\partial TP}{\partial \delta\xi}=(TP)^\odot=\left[\begin{matrix}I&-P^{\prime\wedge}\\0^T&0^T\end{matrix}\right]\tag{3.1.24} ∂δξ∂TP​=(TP)⊙=[I0T​−P′∧0T​](3.1.24)
而在 P ′ P^\prime P′ ,我们取了前三维,
∂ P ′ ∂ δ ξ = [ I , − P ′ ∧ ] (3.1.25) \frac{\partial P^\prime}{\partial \delta\xi}=[I,-P^{\prime \wedge}]\tag{3.1.25} ∂δξ∂P′​=[I,−P′∧](3.1.25)
于是得
∂ e ∂ δ ξ = − [ f x Z ′ 0 − f x X ′ Z ′ 2 − f x X ′ Y ′ Z ′ 2 f x + f x X ′ 2 Z ′ 2 − f x Y ′ Z ′ 0 f y Z ′ − f y Y ′ Z ′ 2 − f y − f y Y ′ 2 Z ′ 2 f y X ′ Y ′ Z ′ 2 f y X ′ Z ′ ] (3.1.26) \frac{\partial e}{\partial \delta\xi}=-\left[\begin{matrix}\frac{f_x}{Z^\prime}&0&-\frac{f_xX^\prime}{Z^{\prime 2}}&-\frac{f_xX^\prime Y^\prime}{Z^{\prime 2}}&f_x+\frac{f_xX^{\prime 2}}{Z^{\prime 2}}&-\frac{f_xY^\prime}{Z^\prime}\\ 0&\frac{f_y}{Z^\prime}&-\frac{f_yY^\prime}{Z^{\prime 2}}&-f_y-\frac{f_yY^{\prime 2}}{Z^{\prime 2}}&\frac{f_yX^\prime Y^\prime}{Z^{\prime 2}}&\frac{f_yX^\prime}{Z^\prime} \end{matrix}\right]\tag{3.1.26} ∂δξ∂e​=−[Z′fx​​0​0Z′fy​​​−Z′2fx​X′​−Z′2fy​Y′​​−Z′2fx​X′Y′​−fy​−Z′2fy​Y′2​​fx​+Z′2fx​X′2​Z′2fy​X′Y′​​−Z′fx​Y′​Z′fy​X′​​](3.1.26)
这个雅可比矩阵描述了重投影误差关于相机位姿李代数的一阶变化关系。我们保留了前面的负号,这是因为误差是由观测值减预测值定义的。当然也可以反过来,将它定义成“预测值减观测值”的形式。

除了优化位姿,我们还希望优化特征点的空间位置。因此,需要讨论 e 关于空间点 P P P 的导数。
∂ e ∂ P = ∂ e ∂ P ′ ∂ P ′ ∂ P \frac{\partial e}{\partial P}=\frac{\partial e}{\partial P^\prime}\frac{\partial P^\prime}{\partial P} ∂P∂e​=∂P′∂e​∂P∂P′​
于是有
∂ e ∂ P = − [ f x Z ′ 0 − f x X ′ Z ′ 2 0 f y Z ′ − f y Y ′ Z ′ 2 ] R \frac{\partial e}{\partial P}=-\left[\begin{matrix}\frac{f_x}{Z^\prime}&0&-\frac{f_xX^\prime}{Z^{\prime 2}}\\0&\frac{f_y}{Z^\prime}&-\frac{f_yY^\prime}{Z^{\prime 2}}\end{matrix}\right]R ∂P∂e​=−[Z′fx​​0​0Z′fy​​​−Z′2fx​X′​−Z′2fy​Y′​​]R

推导出了观测相机方程关于相机位姿特征点的两个导数矩阵。它们十分重要,能够在优化过程中提供重要的梯度方向,指导优化的迭代。


ICP

迭代最近点 Iterative Closest Point :对激光来说,无法知道两个点集之间的匹配关系,只能认为距离最近的两个点为同一个,所以称为迭代最近点。而在视觉中,特征点提供了更好的匹配关系。

SVD求解
两组对应的匹配点
P = { p 1 , ⋯ , p n } , P ′ = { p 1 ′ , ⋯ , p n ′ } P=\{p_1,\cdots,p_n\},P^\prime=\{p^\prime_1,\cdots,p^\prime_n\} P={p1​,⋯,pn​},P′={p1′​,⋯,pn′​}
定义第 i i i 对点的误差为
e i = p i − ( R p i ′ + t ) e_i=p_i-(Rp^\prime_i+t) ei​=pi​−(Rpi′​+t)
构建最小二乘问题,使误差平方和达到极小的 R R R, t t t:
min ⁡ R , t 1 2 ∑ i = 1 n ∥ p i − ( R p i ′ + t ) ∥ 2 2 \min_{R,t}\frac{1}{2}\sum_{i=1}^{n}\|p_i-(Rp^\prime_i+t)\|_2^2 R,tmin​21​i=1∑n​∥pi​−(Rpi′​+t)∥22​
定义点对的质心
p = 1 n ∑ i = 1 n ( p i ) , p ′ = 1 n ∑ i = 1 n ( p i ′ ) p=\frac{1}{n}\sum_{i=1}^{n}(p_i),p^\prime=\frac{1}{n}\sum_{i=1}^{n}(p_i^\prime) p=n1​i=1∑n​(pi​),p′=n1​i=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}\|p_i-(Rp^\prime_i+t)\|^2&=\frac{1}{2}\sum_{i=1}^{n}\|p_i-Rp^\prime_i-t-p+Rp^\prime+p-Rp^\prime\|^2\\ &=\frac{1}{2}\sum_{i=1}^n\|(p_i-p-R(p^\prime_i-p^\prime))+(p-Rp^\prime-t)\|^2\\ &=\frac{1}{2}\sum_{i=1}^n( \|p_i-p-R(p^\prime_i-p^\prime)\|^2+\|p-Rp^\prime-t\|^2\\&+2(p_i-p-R(p^\prime_i-p^\prime))^T(p-Rp^\prime-t))\end{aligned} 21​i=1∑n​∥pi​−(Rpi′​+t)∥2​=21​i=1∑n​∥pi​−Rpi′​−t−p+Rp′+p−Rp′∥2=21​i=1∑n​∥(pi​−p−R(pi′​−p′))+(p−Rp′−t)∥2=21​i=1∑n​(∥pi​−p−R(pi′​−p′)∥2+∥p−Rp′−t∥2+2(pi​−p−R(pi′​−p′))T(p−Rp′−t))​

∑ i = 1 n ( p i − p ) = ∑ i = 1 n ( p i ) − n p = 0 ∑ i = 1 n ( p i ′ − p ′ ) = ∑ i = 1 n ( p i ′ ) − n p ′ = 0 \sum_{i=1}^n(p_i-p)=\sum_{i=1}^n(p_i)-np=0\\\sum_{i=1}^n(p^\prime_i-p^\prime)=\sum_{i=1}^n(p_i^\prime)-np^\prime=0 i=1∑n​(pi​−p)=i=1∑n​(pi​)−np=0i=1∑n​(pi′​−p′)=i=1∑n​(pi′​)−np′=0
上式简化为
min ⁡ R , t J = 1 2 ∑ i = 1 n ∥ p i − p − R ( p i ′ − p ′ ) ∥ 2 + ∥ p − R p ′ − t ∥ 2 \min_{R,t}J=\frac{1}{2}\sum_{i=1}^n\|p_i-p-R(p_i^\prime-p^\prime)\|^2+\|p-Rp^\prime-t\|^2 R,tmin​J=21​i=1∑n​∥pi​−p−R(pi′​−p′)∥2+∥p−Rp′−t∥2
式子左边只和旋转矩阵 R R R 相关,而右边有 R , t R,t R,t ,但只和质心相关。于是只要得到 R R R ,令第二项为零,就能得到 t t t。

ICP分解

计算两组点质心的位置 p p p, p ′ p^\prime p′,然后计算每个点的去质心坐标 q i , q i ′ q_i,q_i^\prime qi​,qi′​
q i = p i − p , q i ′ = p i ′ − p ′ q_i=p_i-p,q_i^\prime = p_i^\prime -p^\prime qi​=pi​−p,qi′​=pi′​−p′
根据一下优化问题计算旋转矩阵
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\|q_i-Rq_i^\prime\|^2 R∗=argRmin​21​i=1∑n​∥qi​−Rqi′​∥2
根据 R R R 计算 t t t
t ∗ = p − R p ′ t^*=p-Rp^\prime t∗=p−Rp′

展开关于 R R R 的误差项
1 2 ∑ i = 1 n ∥ q i − R q i ′ ∥ 2 = 1 2 ∑ i = 1 n ( q i T q i + q i ′ R T R q i ′ − 2 q i T R q i ′ ) \frac{1}{2}\sum_{i=1}^n\|q_i-Rq_i^\prime\|^2=\frac{1}{2}\sum_{i=1}^n(q_i^Tq_i+q_i^\prime R^TRq_i^\prime-2q_i^TRq_i^\prime) 21​i=1∑n​∥qi​−Rqi′​∥2=21​i=1∑n​(qiT​qi​+qi′​RTRqi′​−2qiT​Rqi′​)
因为第一项和第二项与 R R 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^TRq_i^\prime=\sum_{i=1}^n-tr(Rq_i^\prime q_i^T)=tr\left(R\sum_{i=1}^nq_i^\prime q_i^T\right) i=1∑n​−qiT​Rqi′​=i=1∑n​−tr(Rqi′​qiT​)=tr(Ri=1∑n​qi′​qiT​)

通过 SVD 解出上述问题中最优的 R R R:
定义矩阵
W = ∑ i = 1 n q i q i ′ T W=\sum_{i=1}^nq_iq_i^{\prime T} W=i=1∑n​qi​qi′T​
对 W W W 进行SVD分解,得
W = U Σ V T W=U\Sigma V^T W=UΣVT
当 W W W 满秩时,有
R = U V T R=UV^T R=UVT
此时 R R R 的行列式为负,则取 − R -R −R 为最优值。


非线性优化
以迭代的方式去找最优值。
以李代数表示位姿时,目标函数可以写为
min ⁡ ξ = 1 2 ∑ i = 1 n ∥ p i − exp ⁡ ( ξ ∧ ) p i ′ ∥ 2 2 \min_\xi=\frac{1}{2}\sum_{i=1}^n\|p_i-\exp(\xi^\wedge)p_i^\prime\|_2^2 ξmin​=21​i=1∑n​∥pi​−exp(ξ∧)pi′​∥22​
单个误差项关于位姿的导数为
∂ e ∂ δ ξ = − ( exp ⁡ ( ξ ∧ ) p i ′ ) ⊙ \frac{\partial e}{\partial \delta \xi}=-(\exp(\xi^\wedge)p_i^\prime)^\odot ∂δξ∂e​=−(exp(ξ∧)pi′​)⊙
于是,只需不断迭代,就能找到极小值。而且,可以证明ICP问题存在唯一解和无穷解的情况。当为唯一解时,只要找到极小值,这个极小值就位全局最优值。这意味着可以选定任意的初始值。


  1. 出自Multiple View Geometry in Computer Vision(Second Edition) ↩︎ ↩︎

  2. 超定方程组是指方程个数大于未知量个数的方程组。超定方程一般是不存在解的矛盾方程。例如,如果给定的三点不在一条直线上, 我们将无法得到这样一条直线,使得这条直线同时经过给定这三个点。 也就是说给定的条件(限制)过于严格, 导致解不存在。在实验数据处理和曲线拟合问题中,求解超定方程组非常普遍。比较常用的方法是最小二乘法。形象的说,就是在无法完全满足给定的这些条件的情况下,求一个最接近的解。 ↩︎

SLAM公式引出、推导和理解 2-2相关推荐

  1. SLAM公式引出、推导和理解 3

    目录 4 优化问题-处理噪声 4.1 状态估计 4.2 非线性最小二乘 BA与图优化 4 优化问题-处理噪声 4.1 状态估计 由于SLAM的数学表达式为 { x k = f ( x k − 1 , ...

  2. SLAM公式引出、推导和理解 1-1

    公式推导及由来 0 数学表达式 1 位姿表达-运动方程 1.1 基础知识 1.2 旋转矩阵 1.3 变换矩阵 1.4 旋转向量 1.5 欧拉角 1.6 四元数 0 数学表达式 由于相机是在某些时刻采集 ...

  3. 罗德里格斯公式附图推导,理解

    罗德里格斯公式推导 一,基础准备 1. 旋转矩阵 2. 旋转向量 3. 向量叉积 二,公式推导 1.符号说明与图例 2. 公式推导 三,公式理解和深入 四,极限的方式简洁推导罗德里格斯公式 罗德里格斯 ...

  4. 专题2(附篇):平面问题的差分解之差分公式的推导

    因为实际工程中几乎不可能找到弹性力学模型求解时的偏微分方程的解析解,所以人们就想到用泰勒级数把求解偏微分方程的问题改为求解代数方程的问题来近似.又因为不同的差分方法会带来不同的求解速度和精度,而速度和 ...

  5. 卡尔曼滤波原理公式详细推导过程[包括引出]

    卡尔曼滤波在很多项目中都有用到,但是对于原理却很少有详细分析,而只是直接应用,在看完b站up主DR_CAN视频推导后自行推导一遍和查看其他资料后进行总结,将从最初的递归算法,利用数据融合,协方差矩阵, ...

  6. 递推最小二乘法的推导和理解

    递推最小二乘法的推导和理解 最小二乘法 快速回顾最小二乘法的推导 建立误差平方 将其最小化 一种对最小二乘法理解的视角 递推最小二乘法 在线实时预测问题 推导思路与详细过程 将k时刻的表达式写成k-1 ...

  7. 全概公式和贝叶斯公式的理解

    目录(?)[+] 条件概率 首先,理解这两个公式的前提是理解条件概率,因此先复习条件概率. P(A|B)=P(AB)P(B) 理解这个可以从两个角度来看.  第一个角度:在B发生的基础上,A发生的概率 ...

  8. CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解

    CTR 系列文章: 广告点击率(CTR)预测经典模型 GBDT + LR 理解与实践(附数据 + 代码) CTR经典模型串讲:FM / FFM / 双线性 FFM 相关推导与理解 CTR深度学习模型之 ...

  9. 点绕坐标系旋转旋转矩阵推导、理解

    点绕坐标系旋转旋转矩阵推导.理解 开会过程中,翻笔记本时突然发现了之前推导的点绕坐标系旋转的旋转矩阵求解过程.在直觉上,一个点绕3个坐标轴旋转的旋转矩阵在形式上看起来是一致的,观感上比较优雅.整齐,但 ...

最新文章

  1. ping -c3 baidu.com  ping过去是这样,代表网络畅通
  2. 十种创业病 你得了几个?
  3. Kubernetes 弹性伸缩全场景解析(三) - HPA 实践手册
  4. Bootstrap4+MySQL前后端综合实训-Day08-PM【ajax获取表单标签内容、根据“栏目信息”添加“新闻信息”、新闻管理系统-项目展示】
  5. JUnit 5 –扩展模型
  6. 运用循环判断语句和列表的购物车程序
  7. 计算机科学中的递归算法是把问题,递归运算法
  8. 乒乓球单循环赛_乒乓球单循环比赛规则
  9. HTML字体大小的设置
  10. 【OCR】文本检测方案 TextFuseNet解读
  11. net-java-php-python-校园二手图书销售网站计算机毕业设计程序
  12. 《c语言程序设计》实验报告,C语言程序设计实验实验报告_wenkub
  13. Linux用户和用户组的管理
  14. Linux x86 漏洞利用-Use-After-Free(UAF)-释放后可重用
  15. 再战Trojan.PSW.Lmir.kuo、Trojan.PSW.Misc.kcc等网游盗号木马(第2版)
  16. 2018年广东工业大学文远知行杯新生程序设计竞赛 1013 在那天的雪停息之前β
  17. xilinx srio ip学习笔记之srio example
  18. flink时间窗口无新的数据进来最后一个窗口不关闭
  19. 30岁的二线城市程序员 对未来路的恐惧不安和规划
  20. 一个不错的演讲、PPT的演示架构

热门文章

  1. 项目周期一般多久_股票解套的时间周期一般多久 股票解套要多长时间
  2. Linux压缩打包命令——tar、zip、unzip
  3. MongoDB 批量写操作
  4. graphviz图片输出问题
  5. Android Studio升级后,新建Activity始终报错,创建不了
  6. 解决方案|AttributeError: (module ‘scipy.sparse‘ has no attribute ‘coo_array‘)
  7. Linux 环境配置
  8. 如何理解和定义城市大脑
  9. 遥控助手-支持蓝牙、红外、WIFI、投屏
  10. 收银机和服务器连接不上显示单机,这个收银机修理攻略我秒速收藏了