本文为视觉 SLAM 学习总结,讲解直接法的相关知识。
本讲内容概要
- 光流法
- 直接法原理
直接法的引出
我们在上一讲中的特征法中,提取特征点计算描述子十分耗时,并且特征匹配使用暴力匹配的方法,时间复杂度为 O ( n 2 ) O(n^2) O(n2),但计算位姿较快。我们希望找一种方法能够代替特征法中的特征点提取和匹配的过程。
我们可以通过光流的方法寻找匹配点,也可以使用直接法,不匹配点对。光流描述了像素在图像中的运动,直接法附带一个相机运动模型。
光流
一般分为稀疏光流和稠密光流。稀疏以 LK 光流为代表,稠密以 HS 光流为代表,本质上是估计像素在不同时刻图像中的运动。因为 SLAM 中我们只需要对特征点进行匹配并计算位姿,因此仅介绍稀疏的 LK 光流。
设 t t t 时刻位于 x , y x,y x,y 处的像素点的灰度值为 I ( x , y , t ) I(x,y,t) I(x,y,t),在 t + d t t+dt t+dt 时刻,该像素运动到 ( x + d x , y + d y ) (x+dx,y+dy) (x+dx,y+dy)。
灰度不变性假设:同一空间点的像素灰度值,在各图像中不变。则有:
I ( x + d x , y + d y , t + d t ) = I ( x , y , t ) I(x+dx,y+dy,t+dt)=I(x,y,t) I(x+dx,y+dy,t+dt)=I(x,y,t)
灰度不变假设是理想状态,实际中不成立。
对 t + d t t+dt t+dt 时刻的灰度进行泰勒展开保留一阶项:
I ( x + d x , y + d y , t + d t ) ≈ I ( x , y , t ) + ∂ I ∂ x d x + ∂ I ∂ y d y + ∂ I ∂ t d t I(x+dx,y+dy,t+dt)≈I(x,y,t)+\frac{\partial I}{\partial x}dx+\frac{\partial I}{\partial y}dy+\frac{\partial I}{\partial t}dt I(x+dx,y+dy,t+dt)≈I(x,y,t)+∂x∂Idx+∂y∂Idy+∂t∂Idt
由于灰度不变,则:
∂ I ∂ x d x + ∂ I ∂ y d y + ∂ I ∂ t d t = 0 \frac{\partial I}{\partial x}dx+\frac{\partial I}{\partial y}dy+\frac{\partial I}{\partial t}dt=0 ∂x∂Idx+∂y∂Idy+∂t∂Idt=0
因此
∂ I ∂ x d x d t + ∂ I ∂ y d y d t = − ∂ I ∂ t \frac{\partial I}{\partial x}\frac{dx}{dt}+\frac{\partial I}{\partial y}\frac{dy}{dt}=-\frac{\partial I}{\partial t} ∂x∂Idtdx+∂y∂Idtdy=−∂t∂I
设 d x d t , d y d t \frac{dx}{dt},\frac{dy}{dt} dtdx,dtdy 分别为 u , v u,v u,v。这是一个二元一次方程,欠定,需要引入额外的约束。假设一个窗口 ( w × w ) (w\times w) (w×w) 内光度不变,我们共有 w 2 w^2 w2 个方程:
[ I x I y ] k [ u v ] = − I t k , k = 1 , … , w 2 \left[ \begin{matrix} I_x & I_y \end{matrix} \right]_k\left[ \begin{matrix} u \\ v \end{matrix} \right]=-I_{tk},\quad k=1,…,w^2 [IxIy]k[uv]=−Itk,k=1,…,w2
记:
A = [ [