《视觉SLAM十四讲》学习笔记-光流法原理

直接法

直接法的根源

特征点法存在的问题:
- 关键点与描述子计算非常耗时;
- 忽略除特征点外的其他所有信息;
- 如何处理特征缺失的问题。

克服特征点法的几种思路:
* 保留特征点,只计算关键点,不计算描述子,用光流法跟踪特征点的运动;
* 保留特征点,只计算关键点,不计算描述子,用直接法计算特征点在下一时刻图像的位置;
* 既不计算关键点也不计算描述子,根据像素灰度的差异直接计算相机运动。

后两种为直接法.

光流法(Optical Flow)

分为两种:
- 计算部分像素运动的:稀疏光流,以Lucas-Kanade为代表。
- 计算所有像素运动的:稠密光流。

Lucas-Kanade光流原理

前提:同一个空间点的像素灰度值,在各个图像中是固定不变的(灰度不变假设).
t t 时刻位于(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)+Ixdx+Iydy+Itdt 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

依据假设条件,有:
Ixdx+Iydy+Itdt=0 ∂ I ∂ x d x + ∂ I ∂ y d y + ∂ I ∂ t d t = 0

整理得到:
Ixdxdt+Iydydt=It ∂ I ∂ x d x d t + ∂ I ∂ y d y d t = − ∂ I ∂ t

不妨记:
dxdt=u,   dydt=v,   Ix=Ix,   Iy=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.
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=It1Itk 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]=(AA)1Ab [ u v ] ∗ = − ( A ⊤ A ) − 1 A ⊤ b

即可得到 u,v u , v .

光流跟踪的特点:
- 加速基于特征点的视频里程计算法
- 需要相机运动较慢

直接法原理

设空间点 P P 的世界坐标为[X,Y,Z], 它在两个相机上成像的非齐次坐标为 p⃗ 1,p⃗ 2 p → 1 , p → 2 。问题为计算第一个相机到第二个相机的相对位姿变换. 思路为根据当前相机的位姿估计值来寻找 p⃗ 2 p → 2 的位置。

以第一个相机为相对参考系,第二个相机的旋转和平移为 R,t⃗  R , t → (李代数为 ξ ξ ). 另外两个相机的内参 K K 相同,所以投影方程为:

p1=[uv1]1=1Z1KPp2=[uv1]2=1Z2K(RP+t)=1Z2K(exp(ξ)P)1:3

其中 Z1 Z 1 P P 的深度,Z2 P P 在第二个相机坐标系下的深度,也是RP+t的第三个坐标值。

目标是最小化光度误差:

e=I1(p⃗ 1)I2(p⃗ 2) e = I 1 ( p → 1 ) − I 2 ( p → 2 )

优化方程可写为:
minξJ(ξ)=e2 min ξ J ( ξ ) = ‖ e ‖ 2

假设有 N N 个空间点Pi, 则整个相机位姿问题为:
minξJ(ξ)=i=1Neiei,  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为对应的像素坐标。

对上式进行一阶泰勒展开:

e(ξδξ)=I1(1Z1KP)I2(1Z2Kexp(ξ)P+u⃗ )I1(1Z1KP)I2(1Z2Kexp(ξ)P)I2u⃗ u⃗ q⃗ q⃗ δξδξ=e(ξ)I2u⃗ 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 → ∂ δ ξ → δ ξ

上式中:
- I2u⃗  ∂ I 2 ∂ u → u⃗  u → 处的像素梯度
- u⃗ q⃗  ∂ u → ∂ q → 为关于相机坐标系下的三维点的导数。根据前一节介绍, 记 q⃗ =[X,Y,Z] q → = [ X , Y , Z ] ⊤ :
u⃗ q⃗ =u⃗ Xv⃗ Xu⃗ Yv⃗ Yu⃗ Zv⃗ Z=fxZ00fyZfxXZ2fyYZ2 ∂ 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⃗ δξ=fxZ00fyZfxXZ2fyYZ2fxXYZ2fyfyY2Z2fx+fxX2Z2fyXYZ2fxYZfyXZ ∂ 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=I2u⃗ u⃗ δξ J = − ∂ I 2 ∂ u → ∂ u → ∂ δ ξ

对于 N N 个点的问题,我们可以用这方法计算优化的Jacobi矩阵,然后用G-N或L-M计算增量,迭代求解。

上面的推导中, P是一个已知位置的空间点,根据来源,可以分为以下几类:
- 若来自于稀疏关键点,称为稀疏直接法
- 若来自于部分像素,称为半稠密(Semi-Dense)直接法
- 若来自于所有像素,称为稠密直接法

总结

直接法总结:
优点有:
- 省去计算特征点、描述子的时间
- 有像素梯度即可,无须特征点
- 可构建稠密或稠密的地图,是特征点无法做到的

缺点:
- 非凸性
- 单个像素没有区分度
- 灰度值不变是很强的假设

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在《视觉SLAM十四》中,章节安排如下: 1. 数学基础部分:介绍这本书的基本信息,包括自测题。概述SLAM系统的组成和各模块的工作。介绍三维空间运动、李群和李代数、针孔相机模型以及非线性优化。完成一个曲线拟合的实验。 2. SLAM技术部分:解特征点法的视觉里程计,包括特征点的提取与匹配、对极几何约束的计算、PnP和ICP等方法。学习直接法的视觉里程计,包括光流和直接法的原理,并使用g2o实现一个简单的RGB-D直接法。构建一个视觉里程计框架,解决优化和关键帧选择的问题。深入讨论后端优化,包括Bundle Adjustment和位姿图的优化。介绍回环检测和地图构建的方法。最后,介绍当前的开源SLAM项目和未来的发展方向。 另外,对于四元数的学习,可以先了解复平面的概念。复平面是一个用来描述复数的平面,其中实部和虚部分别对应平面的横坐标和纵坐标。了解复平面后,可以开始学习四元数的概念和应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [视觉SLAM十四笔记](https://blog.csdn.net/dada19980122/article/details/111404967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【视觉SLAM十四笔记【逐行代码带你解析】【适合纯小白 ps:因为我就是】(持续更新中)](https://blog.csdn.net/R_ichun/article/details/131964588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值