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}\\right2=\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 个点以上;

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

相关推荐
weixin_307779132 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
hetao17338378 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6268 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan8 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356389 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah10 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO910 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician10 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.10 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
潼心1412o11 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法