09 光流法实践

文章目录

    • [09 光流法实践](#09 光流法实践)
      • [9.1 光流法](#9.1 光流法)
      • [9.2 直接法](#9.2 直接法)
      • [9.3 总结](#9.3 总结)

09 光流法实践

光流法需要提取关键点,而不需要计算描述子;直接法直接利用像素信息,无需特征点。

9.1 光流法

光流法基于 灰度不变假设 ,即第一帧中的关键点的灰度与其在第二帧中的像素灰度相同。假设该关键点在第一帧 ( x , y ) (x, y) (x,y) 处,表示为 I ( x , y ) I(x, y) I(x,y)(这个值是已知的),我们希望找出 ( Δ x , Δ y ) (\Delta x, \Delta y) (Δx,Δy),从而求出该关键点在第二帧中的像素坐标 I ( x + Δ x , y + Δ y ) I(x+\Delta x, y+\Delta y) I(x+Δx,y+Δy)。(这样根据灰度就直接找到了关键点的位置,省去了匹配的过程,速度更快。)

  • 单层光流

采用优化的方法:

min ⁡ Δ x , Δ y ∥ I ( x , y ) − I ( x + Δ x , y + Δ y ∥ 2 2 \min_{\Delta x, \Delta y}\|\boldsymbol{I}(x, y)-\boldsymbol{I(x+\Delta x, y+\Delta y}\|_2^2 Δx,Δymin∥I(x,y)−I(x+Δx,y+Δy∥22

找出使像素灰度误差最小的位置坐标,即为关键点的位置。雅可比矩阵为第二张图像在 ( Δ x , Δ y ) (\Delta x, \Delta y) (Δx,Δy) 处的梯度。

步骤:

(1)第一帧提取关键点(不需要描述子);

(2)后一帧在前一帧的基础上跟踪,得到关键点的位置坐标;

(3)根据关键点匹配关系,对极几何恢复位姿

  • 多层光流

当相机运动较快,两张图像差异较大时,单层光流容易陷入局部最优,这时提出图像金字塔。

我们以原始图像为金字塔的底,以一定的倍率(如0.5)进行缩小(相当于与物体距离越来越远),假设原始图像特征点运动了 20 个像素,那么在缩小的图像里可能只运动了 5 个像素,搜索范围更小,优化结果可能就更好。

计算金字塔时从下往上,跟踪光流时从上往下,即由 粗至精

具体步骤:

(1)构建图像金字塔(一层层缩放,最小的在顶层,原始图像在底层);

(2)从顶层开始,在第一帧中提取描述子,在第二帧得到对应点坐标;

(3)将跟踪成功的关键点坐标乘以缩放系数,得到下一层中的像素坐标,继续追踪;

(4)循环以上步骤,最终得到原始图像的关键点对,进而恢复位姿。

9.2 直接法

假设有一空间点 P \boldsymbol{P} P,他在图一中的位置 p 1 \boldsymbol{p}_1 p1 是已知的,我们的目的是找到他在图二中的特征点 p 2 \boldsymbol{p}_2 p2。基于灰度不变假设, p 2 \boldsymbol{p}_2 p2 和 p 1 \boldsymbol{p}_1 p1 的灰度值是一致的,也就是说我们希望在图二中找到和 p 1 \boldsymbol{p}_1 p1 灰度值相同的像素点。 定义误差函数:

e = I 1 ( p 1 ) − I 2 ( p 2 ) e=\boldsymbol{I}_1(\boldsymbol{p}_1)-\boldsymbol{I}_2(\boldsymbol{p}_2) e=I1(p1)−I2(p2)

其中,

p 1 = [ u v 1 ] 1 = 1 Z 1 K P \boldsymbol{p}_1=\left[\begin{array}{l} u \\ v \\ 1 \end{array}\right]_1=\frac{1}{Z_1}\boldsymbol{KP} p1= uv1 1=Z11KP
p 2 = [ u v 1 ] 2 = 1 Z 2 K ( R P + t ) = 1 Z 2 K ( T P ) 1 : 3 (7-8) \boldsymbol{p}_2=\left[\begin{array}{l} u \\ v \\ 1 \end{array}\right]2=\frac{1}{Z_2}\boldsymbol{K}(\boldsymbol{RP+t})=\frac{1}{Z_2}\boldsymbol{K}(\boldsymbol{TP}){1:3} \tag{7-8} p2= uv1 2=Z21K(RP+t)=Z21K(TP)1:3(7-8)

p 1 \boldsymbol{p}_1 p1 , P \boldsymbol{P} P 是已知的,那么要想光度误差最小,只需要不断优化迭代位姿 T \boldsymbol{T} T 即可。

那么, P \boldsymbol{P} P 是哪里来的呢?

一是 RGB-D 相机可以直接得到三维点坐标,二是双目相机根据视差计算像素深度,三是单目相机恢复三维点坐标。

9.3 总结

相比于特征点法,直接法完全依靠优化来求解相机位姿。

(1)直接法优点

  • 可以省去计算特征点、描述子的时间;

  • 只需要像素梯度即可,不需要特征点,因此可以在缺失特征点的场合下使用;

  • 可构件半稠密乃至稠密地图,这是特征点法做不到的。

(2)直接法缺点

  • 非凸性:优化时容易进入极小,只有在运动很小的时候直接法才能成功,引入金字塔在一定程度上可减小非凸性影响。

  • 单个像素没有区分度:选点少时效果较差,一般用 500 个点以上;

  • 灰度不变假设是很强的假设,相机会自动调整曝光参数、或者光照变化,都会使得图像整体亮度发生变化。

相关推荐
TANGLONG22217 分钟前
【初阶数据结构与算法】八大排序之非递归系列( 快排(使用栈或队列实现)、归并排序)
java·c语言·数据结构·c++·算法·蓝桥杯·排序算法
不想当程序猿_19 分钟前
【蓝桥杯每日一题】与或异或——DFS
c++·算法·蓝桥杯·深度优先
就爱学编程30 分钟前
力扣刷题:单链表OJ篇(下)
算法·leetcode·职场和发展
小白—人工智能39 分钟前
有一个4*5的矩阵如下,要求编写程序计算总和与平均值,并找出其中值最大的那个元素输出,以及其所在的行号和列号。
数据结构·python·算法·矩阵
邂逅岁月1 小时前
滑不动窗口的秘密—— “滑动窗口“算法 (Java版)
算法·面试·求职招聘·创业创新·刷题
sunny-ll1 小时前
【C++】explicit关键字详解(explicit关键字是什么? 为什么需要explicit关键字? 如何使用explicit 关键字)
c语言·开发语言·c++·算法·面试
轩源源1 小时前
C++草原三剑客之一:继承
开发语言·数据结构·c++·算法·青少年编程·继承·组合
半盏茶香3 小时前
C语言勘破之路-最终篇 —— 预处理(下)
c语言·开发语言·c++·算法
pianmian18 小时前
贪心算法.
算法·贪心算法
chenziang19 小时前
leetcode hot 100 二叉搜索
数据结构·算法·leetcode