-
-
- 直接法的根源
- 光流法(Optical Flow)
- 总结
![《视觉SLAM十四讲》学习笔记-光流法原理_第1张图片](http://img.e-com-net.com/image/info8/60fb630c3f6548669d52a8b208c76270.jpg)
直接法的根源
特征点法存在的问题:
- 关键点与描述子计算非常耗时;
- 忽略除特征点外的其他所有信息;
- 如何处理特征缺失的问题。
克服特征点法的几种思路:
* 保留特征点,只计算关键点,不计算描述子,用光流法跟踪特征点的运动;
* 保留特征点,只计算关键点,不计算描述子,用直接法计算特征点在下一时刻图像的位置;
* 既不计算关键点也不计算描述子,根据像素灰度的差异直接计算相机运动。
后两种为直接法
.
光流法(Optical Flow)
分为两种:
- 计算部分像素运动的:稀疏光流,以Lucas-Kanade为代表。
- 计算所有像素运动的:稠密光流。
Lucas-Kanade光流原理
前提:同一个空间点的像素灰度值,在各个图像中是固定不变的(灰度不变假设).
t t 时刻位于 (x,y) ( x , y ) 处的像素,设 t+dt t + d t 的位置为 (x+dt,y+dt) ( x + d t , y + d 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+dx,y+dy,t+dt)≈I(x,y,t)+∂I∂xdx+∂I∂ydy+∂I∂tdt 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∂xdx+∂I∂ydy+∂I∂tdt=0 ∂ I ∂ x d x + ∂ I ∂ y d y + ∂ I ∂ t d t = 0
整理得到:
∂I∂xdxdt+∂I∂ydydt=−∂I∂t ∂ I ∂ x d x d t + ∂ I ∂ y d y d t = − ∂ I ∂ t
不妨记:
dxdt=u, dydt=v, ∂I∂x=Ix, ∂I∂y=Iy d x d t = u , d y d t = v , ∂ I ∂ x = I x , ∂ I ∂ y = I y
写成矩阵形式有:
[IxIy][uv]=−It [ I x I y ] [ u v ] = − I t
这是一个带有两个变量的一次方程,只有一个点是无法计算
u u 和
v v .
LK的做法是假设某一个窗口内的像素具有相同的运动。假设窗口大小为
w×w w × w , 则有
w2 w 2 个像素,所以共有
w2 w 2 个方程:
[IxIy]k[uv]=−Itk,k=1,⋯,w2. [ I x I y ] k [ u v ] = − I t k , k = 1 , ⋯ , w 2 .
A=⎡⎣⎢⎢[Ix,Iy]1⋮[Ix,Iy]k⎤⎦⎥⎥,b=⎡⎣⎢⎢It1⋮Itk⎤⎦⎥⎥ A = [ [ I x , I y ] 1 ⋮ [ I x , I y ] k ] , b = [ I t 1 ⋮ I t k ]
则方程可变为:
A[uv]=−b A [ u v ] = − b
这是一个超定线性方程,采用最小二乘解:
[uv]∗=−(A⊤A)−1A⊤b [ u v ] ∗ = − ( A ⊤ A ) − 1 A ⊤ b
即可得到 u,v u , v .
光流跟踪的特点:
- 加速基于特征点的视频里程计算法
- 需要相机运动较慢
直接法原理
设空间点 P P 的世界坐标为 [X,Y,Z] [ X , Y , Z ] , 它在两个相机上成像的非齐次坐标为 p⃗ 1,p⃗ 2 p → 1 , p → 2 。问题为计算第一个相机到第二个相机的相对位姿变换. 思路为根据当前相机的位姿估计值来寻找 p⃗ 2 p → 2 的位置。
以第一个相机为相对参考系,第二个相机的旋转和平移为 R,t⃗ R , t → (李代数为 ξ ξ ). 另外两个相机的内参 K K 相同,所以投影方程为:
p⃗ 1p⃗ 2=⎡⎣⎢uv1⎤⎦⎥1=1Z1KP=⎡⎣⎢uv1⎤⎦⎥2=1Z2K(RP+t⃗ )=1Z2K(exp(ξ∧)P)1:3 p → 1 = [ u v 1 ] 1 = 1 Z 1 K P p → 2 = [ u v 1 ] 2 = 1 Z 2 K ( R P + t → ) = 1 Z 2 K ( exp ( ξ ∧ ) P ) 1 : 3
其中 Z1 Z 1 是 P P 的深度, Z2 Z 2 是 P P 在第二个相机坐标系下的深度,也是 RP+t⃗ R P + t → 的第三个坐标值。
目标是最小化光度误差:
e=I1(p⃗ 1)−I2(p⃗ 2) e = I 1 ( p → 1 ) − I 2 ( p → 2 )
优化方程可写为:
minξJ(ξ)=∥e∥2 min ξ J ( ξ ) = ‖ e ‖ 2
假设有
N N 个空间点
Pi P i , 则整个相机位姿问题为:
minξJ(ξ)=∑i=1Ne⊤iei, ei=I1(p⃗ 1,i)−I2(p⃗ 2,i) min ξ J ( ξ ) = ∑ i = 1 N e i ⊤ e i , e i = I 1 ( p → 1 , i ) − I 2 ( p → 2 , i )
这里的优化变量为相机位姿
ξ ξ .使用李代数上的扰动模型,给
exp(ξ) exp ( ξ ) 左乘一个小扰动
exp(δξ) exp ( δ ξ ) :
e(ξ⊕δξ)=I1(1Z1KP)−I2(1Z2Kexp(δξ∧)exp(ξ∧)P)≈I1(1Z1KP)−I2(1Z2K(1+δξ∧)exp(ξ∧)P)=I1(1Z1KP)−I2(1Z2Kexp(ξ∧)P+1Z2Kδξ∧exp(ξ∧)P) e ( ξ ⊕ δ ξ ) = I 1 ( 1 Z 1 K P ) − I 2 ( 1 Z 2 K exp ( δ ξ ∧ ) exp ( ξ ∧ ) P ) ≈ I 1 ( 1 Z 1 K P ) − I 2 ( 1 Z 2 K ( 1 + δ ξ ∧ ) exp ( ξ ∧ ) P ) = I 1 ( 1 Z 1 K P ) − I 2 ( 1 Z 2 K exp ( ξ ∧ ) P + 1 Z 2 K δ ξ ∧ exp ( ξ ∧ ) P )
为简化上式,记
q⃗ =δξ∧exp(ξ∧)Pu⃗ =1Z2Kq⃗ q → = δ ξ ∧ exp ( ξ ∧ ) P u → = 1 Z 2 K q →
这里
q⃗ q → 的含义为
P P 在扰动后位于第二个相机坐标系下的坐标,而
u⃗ u → 为对应的像素坐标。
对上式进行一阶泰勒展开:
e(ξ⊕δξ)=I1(1Z1KP)−I2(1Z2Kexp(ξ∧)P+u⃗ )≈I1(1Z1KP)−I2(1Z2Kexp(ξ∧)P)−∂I2∂u⃗ ∂u⃗ ∂q⃗ ∂q⃗ ∂δξ→δξ=e(ξ)−∂I2∂u⃗ ∂u⃗ ∂q⃗ ∂q⃗ ∂δξ→δξ e ( ξ ⊕ δ ξ ) = I 1 ( 1 Z 1 K P ) − I 2 ( 1 Z 2 K exp ( ξ ∧ ) P + u → ) ≈ I 1 ( 1 Z 1 K P ) − I 2 ( 1 Z 2 K exp ( ξ ∧ ) P ) − ∂ I 2 ∂ u → ∂ u → ∂ q → ∂ q → ∂ δ ξ → δ ξ = e ( ξ ) − ∂ I 2 ∂ u → ∂ u → ∂ q → ∂ q → ∂ δ ξ → δ ξ
上式中:
-
∂I2∂u⃗ ∂ I 2 ∂ u → 为
u⃗ u → 处的像素梯度
-
∂u⃗ ∂q⃗ ∂ u → ∂ q → 为关于相机坐标系下的三维点的导数。根据前一节介绍, 记
q⃗ =[X,Y,Z]⊤ q → = [ X , Y , Z ] ⊤ :
∂u⃗ ∂q⃗ =⎡⎣∂u⃗ ∂X∂v⃗ ∂X∂u⃗ ∂Y∂v⃗ ∂Y∂u⃗ ∂Z∂v⃗ ∂Z⎤⎦=⎡⎣⎢fxZ00fyZ−fxXZ2−fyYZ2⎤⎦⎥ ∂ u → ∂ q → = [ ∂ 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 ]
∂q⃗ ∂δξ→ ∂ q → ∂ δ ξ → 是变换后的三维点对变换的导数,在李代数中有详细介绍:
∂q⃗ ∂δξ→=[I,−q⃗ ∧] ∂ q → ∂ δ ξ → = [ I , − q → ∧ ]
注意到后两项只与三维点相关,而与图像无关,所以经常把它们合在一起:
∂u⃗ ∂δξ=⎡⎣⎢fxZ00fyZ−fxXZ2−fyYZ2−fxXYZ2−fy−fyY2Z2fx+fxX2Z2fyXYZ2−fxYZ−fyXZ⎤⎦⎥ ∂ u → ∂ δ ξ = [ 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 ]
所以误差相对于李代数的Jacobi矩阵为:
J=−∂I2∂u⃗ ∂u⃗ ∂δξ J = − ∂ I 2 ∂ u → ∂ u → ∂ δ ξ
对于 N N 个点的问题,我们可以用这方法计算优化的Jacobi矩阵,然后用G-N或L-M计算增量,迭代求解。
上面的推导中, P P 是一个已知位置的空间点,根据来源,可以分为以下几类:
- 若来自于稀疏关键点,称为稀疏直接法
- 若来自于部分像素,称为半稠密(Semi-Dense)直接法
- 若来自于所有像素,称为稠密直接法
总结
直接法总结:
优点有:
- 省去计算特征点、描述子的时间
- 有像素梯度即可,无须特征点
- 可构建稠密或稠密的地图,是特征点无法做到的
缺点:
- 非凸性
- 单个像素没有区分度
- 灰度值不变是很强的假设