SLAM中的视觉里程计分为两部分,一是特征点法,先提取特征点,把特征点看做三维空间中的不动点,根据特征点匹配关系进行位姿和深度估计,通过最小化重投影误差优化相机运动;二是不使用特征点,根据图像灰度直接估计的直接法。第七讲中讲了特征点法,本讲将介绍直接法。
光流法描述了像素在图像中的运动。分为稀疏光流和稠密光流。这里介绍的LK是稀疏光流的代表方法。
认为:来自相机的图像是随时间变化的,像素的灰度是关于时间和像素位置的函数 I ( x , y , t ) I(x,y,t) I(x,y,t)。
灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。
问题:对于一个空间点,要估计它在 t t t时刻的坐标 ( x , y ) (x,y) (x,y)。
根据灰度不变假设,有:
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)
对左边泰勒展开:
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
根据灰度不变假设,右边第二项为0:
∂ 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
即:
I x u + I y v = − I t I_xu+I_yv=-I_t Ixu+Iyv=−It
这里未知量是: u , v u,v u,v。
使用一个像素点无法求出 u , v u,v u,v,因此需要多个方程共同约束,即引入多个像素点,这些点的运动是一样的。
窗口假设:某一个窗口内的像素具有相同的运动。
写成矩阵形式,是一个超定线性方程,最小二乘可解。
已知:三维点在第一个坐标系下的三维坐标,两张图像的灰度值,三维点投影在第一张图像上的归一化坐标 p 1 p_1 p1,一个不准确的位姿初始值。
未知: p 1 p_1 p1在第二张图像中的位置 p 2 p_2 p2。
目标:优化位姿的估计。
思想:先初始化一个不准确的位姿,计算 p 2 p_2 p2,根据 p 2 p_2 p2和 p 1 p_1 p1的灰度值差异,调整位姿。
假设:灰度不变假设
误差度量:光度误差 e e e
使用李代数表示相机运动,最小化误差的二范数,得到优化问题:
m i n ϵ J ( ϵ ) = ∑ i = 1 N e i T e i , e = I 1 ( p 1 ) − I 2 ( p 2 ) min_\epsilon J(\epsilon)=\sum_{i=1}^Ne_i^Te_i,e=I_1(p_1)-I_2(p_2) minϵJ(ϵ)=i=1∑NeiTei,e=I1(p1)−I2(p2)
优化目标:最小化所有点的光度误差
优化变量:相机运动 ϵ \epsilon ϵ
使用李代数下的扰动模型,求误差关于相机运动的导数,最终得到一阶导数:
e ( ϵ + δ ϵ ) = e ( ϵ ) − ∂ I 2 ∂ u ∂ u ∂ q ∂ q ∂ δ ϵ δ ϵ e(\epsilon + \delta \epsilon)=e(\epsilon)-\frac{\partial I_2}{\partial u}\frac{\partial u}{\partial q}\frac{\partial q}{\partial \delta \epsilon} \delta \epsilon e(ϵ+δϵ)=e(ϵ)−∂u∂I2∂q∂u∂δϵ∂qδϵ
q q q是扰动后,点 p p p在第二个坐标系下的坐标, u u u是像素坐标。
一阶导数中:
得到雅克比矩阵
J = − ∂ I 2 ∂ u ∂ u ∂ q ∂ q ∂ δ ϵ δ ϵ J=-\frac{\partial I_2}{\partial u}\frac{\partial u}{\partial q}\frac{\partial q}{\partial \delta \epsilon} \delta \epsilon J=−∂u∂I2∂q∂u∂δϵ∂qδϵ
之后使用GN,LM等优化方法求解最优的 ϵ \epsilon ϵ即可。