IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> [多目标跟踪学习笔记]光流法 -> 正文阅读

[人工智能][多目标跟踪学习笔记]光流法


光流法是进行目标跟踪的传统方法, 参照视频B站进行学习, 做的笔记.


1. 运动场(Motion Field)与光流(Optical Flow)

光流, 顾名思义就是光的流动. 对于图像来说, 什么是光的流动呢? 想象一下摄像头是运动的(目标是运动的也一样), 目标的运动变化其实就是"像素点"的"移动", 因此称为光流, 如下图所示:

在这里插入图片描述
如上图所示, 假如摄像头是移动的, 那么这棵树的亮度模式就会发生变化, 那么发生变化的这个趋势实际上就代表了目标的运动.

问题1: 那么, 我们认为的所谓像素点亮度模式的变化和目标真实的运动之间有什么关系呢?

我们把目标真实物理运动在某个观测上的投影(Projection)称为运动场(Motion Field), 例如下图: 目标在往左上方移动, 它在sensor上的投影(也就是我们的观测)也有一个对应的移动方向, 也就是向下移动.

在这里插入图片描述
? \space ?
问题2: 运动场和光流是等价的吗?

答案是否定的. 请看以下几种情况:

  1. 有运动场 无光流 或 有光流, 无运动场

下图的左边, 假设球体是旋转的, 但是光源不动. 是有运动场, 无光流的情形.右边反之, 球体是不动的, 但光源是运动的.

在这里插入图片描述
? \space ?

  1. 光流和运动场并不相等
    这个例子更直接. 例如理发店门口的彩灯, 我们知道真实的物理运动是水平向右的, 然而, 如果关注像素亮度的变化, 则光流的方向是向下的, 二者正好垂直.

在这里插入图片描述
? \space ?

2. 光流约束方程

我们如何更好地通过光流来估计运动呢?

首先我们要做一些假设, 这样问题才可以进行下去. 我们考虑以下连续的两帧图片:

在这里插入图片描述
这张图片中鹰是运动的目标. 我们如果关注其中一个像素 ( x , y ) (x,y) (x,y), 假定下一帧的位置在 ( x + δ x , y + δ y ) (x+\delta x, y+\delta y) (x+δx,y+δy), 我们可以得到该像素点的速度(也就是亮度运动模式, 理论上的光流方向):

( u , v ) = ( δ x / δ t , δ y / δ t ) (u,v)=(\delta x/\delta t, \delta y/\delta t) (u,v)=(δx/δt,δy/δt)

假设1 两帧间的对应像素亮度不变

我们认为 δ t \delta t δt足够小, 以至于不会使我们关心的像素点在两帧之间产生亮度变化, 假设亮度用 I ( ? ) I(·) I(?)表示, 有:
I ( x , y , t ) = I ( x + δ x , y + δ y , t + δ t ) I(x, y, t)=I(x+\delta x, y+\delta y, t+\delta t) I(x,y,t)=I(x+δx,y+δy,t+δt)

我们对等号右边进行多元函数的Taylor展开, 并忽略二次项及以上的高阶项, 有:
I ( x + δ x , y + δ y , t + δ t ) = I ( x , y , t ) + ? I ? x δ x + ? I ? y δ y + ? I ? t δ t I(x+\delta x, y+\delta y, t+\delta t)=I(x, y, t)+\frac{\partial I}{\partial x}\delta x+ \frac{\partial I}{\partial y}\delta y+\frac{\partial I}{\partial t}\delta t I(x+δx,y+δy,t+δt)=I(x,y,t)+?x?I?δx+?y?I?δy+?t?I?δt

联立上两式, 有:
? I ? x δ x + ? I ? y δ y + ? I ? t δ t = 0 \frac{\partial I}{\partial x}\delta x+ \frac{\partial I}{\partial y}\delta y+\frac{\partial I}{\partial t}\delta t=0 ?x?I?δx+?y?I?δy+?t?I?δt=0

δ t → 0 \delta t\rightarrow 0 δt0. 两边同除 δ t \delta t δt, 有:

? I ? x δ x δ t + ? I ? y δ y δ t + ? I ? t = 0 \frac{\partial I}{\partial x} \frac{\delta x}{\delta t}+ \frac{\partial I}{\partial y} \frac{\delta y}{\delta t}+\frac{\partial I}{\partial t}=0 ?x?I?δtδx?+?y?I?δtδy?+?t?I?=0

式中的 δ x δ t , δ y δ t \frac{\delta x}{\delta t}, \frac{\delta y}{\delta t} δtδx?,δtδy?分别为光流真值(速度) u , v u,v u,v, 故将上式写为:

I x u + I y v + I t = 0 I_xu+I_yv+I_t=0 Ix?u+Iy?v+It?=0

以上就是光流约束方程.

求解上式中 I x , I y , I t I_x, I_y, I_t Ix?,Iy?,It?的方式与图像处理中求梯度的方式类似, 固定一个变量求其余变量得到差, 例如 I x I_x Ix?按如下计算:

在这里插入图片描述 ? \space ?
好, 现在我们知道了 I x , I y , I t I_x, I_y, I_t Ix?,Iy?,It?, 如果讨论 u , v u,v u,v平面, 则式 I x u + I y v + I t = 0 I_xu+I_yv+I_t=0 Ix?u+Iy?v+It?=0
规定了平面上的一条直线. 可是 u , v u,v u,v都是变量, 我们无法获得准确值.
在这里插入图片描述

具体地, 如上图, 假设光流真值为 u = ( u , v ) \boldsymbol u=(u,v) u=(u,v), 我们将其分解为垂直直线方向与平行直线方向
u = u n + u p \boldsymbol{u}=\boldsymbol{u_n}+\boldsymbol{u_p} u=un?+up?.

根据几何知识, 很快求得:

u n = ∣ I t ∣ I x 2 + I y 2 ( I x , I y ) \boldsymbol{u_n}=\frac{|I_t|}{\sqrt{I_x^2+I_y^2}}(I_x, I_y) un?=Ix2?+Iy2? ?It??(Ix?,Iy?)

然而, u p \boldsymbol{u_p} up?我们不知道, 因此需要更多的约束条件.

3. Lucas Kanade算法

接上文, 我们需要更多的约束条件. Lucas Kanade算法所做的假设是:

假设2 假定对于每个像素, 运动场与光流和其邻域中的像素均相同

假设某像素的某邻域为 W W W, 大小为 n × n n \times n n×n的矩形, 则对于 W W W中的每个像素 ( k , l ) ∈ W (k,l)\in W (k,l)W, 光流都相同, 因此有:
I x ( k , l ) u + I y ( k , l ) v + I t ( k , l ) = 0 , ( k , l ) ∈ W I_x(k,l)u+I_y(k,l)v+I_t(k,l)=0, (k,l)\in W Ix?(k,l)u+Iy?(k,l)v+It?(k,l)=0,(k,l)W
上面是 n 2 n^2 n2个方程, 我们写为矩阵形式:
[ I x ( 1 , 1 ) I y ( 1 , 1 ) . . . . . . I x ( n , n ) I y ( n , n ) ] [ u v ] = [ ? I t ( 1 , 1 ) . . . ? I t ( n , n ) ] \begin{bmatrix} I_x(1,1) & I_y(1,1) \\ ... & ... \\ I_x(n, n) & I_y(n, n) \end{bmatrix} \begin{bmatrix} u \\ v \\ \end{bmatrix}= \begin{bmatrix} -I_t(1,1) \\ ... \\ -I_t(n, n) \end{bmatrix} ???Ix?(1,1)...Ix?(n,n)?Iy?(1,1)...Iy?(n,n)????[uv?]=????It?(1,1)...?It?(n,n)????

记为:
A u = B , A ∈ R n 2 × 2 , u = [ u , v ] T , B ∈ R n 2 × 1 \boldsymbol{Au=B}, A \in \mathbb{R}^{n^2\times 2}, u=[u, v]^T, B\in \mathbb{R}^{n^2\times 1} Au=B,ARn2×2,u=[u,v]T,BRn2×1

n 2 n^2 n2这个数有点大, 为了计算方便, 我们将方程写为:

( A T A ) u = A T B \boldsymbol{(A^TA)u=A^TB} (ATA)u=ATB
其中 A T A ∈ R 2 × 2 \boldsymbol{A^TA}\in \mathbb{R}^{2\times 2} ATAR2×2. 假设 A T A \boldsymbol{A^TA} ATA可逆, 有:
u = ( A T A ) ? 1 A T B \boldsymbol{u=(A^TA)^{-1}A^TB} u=(ATA)?1ATB

因此就求解出光流了. 然而, LK算法以上的求解方式也有其局限性, 必须要求:

  1. A T A A^TA ATA可逆.
  2. A T A A^TA ATA必须是well-conditioned. 所谓well-conditioned, 就是指其两个特征值 λ 1 , λ 2 \lambda_1, \lambda_2 λ1?,λ2?满足:
    二者都不要太接近0, 且
    λ 1 ≥ λ 2 \lambda_1 \ge \lambda_2 λ1?λ2?
    不可以 λ 1 > > λ 2 \lambda_1 >> \lambda_2 λ1?>>λ2?.

weil-conditioned的意义是, 如果特征值都太小, 则求解出的 u u u也很小, 结果不可靠.
如果两个特征值相差很大, 则并不能确保具体的运动方向.

4. 粗糙到精细的光流估计(光流金字塔, Coarse to fine estimation)

LK算法有一个先验假设, 即 δ t \delta t δt足够小, 也就是小运动假设. 但如果运动范围很大的时候, 怎么做呢?

我们可以降低图片的分辨率, 例如通过池化的方式, 这样原来的大运动就会变成小运动. 如下图所示.

在这里插入图片描述
转化成小运动之后, 我们就可以利用之前的算法求解光流了.

假定我们有四种分辨率, 从低到高是1, 2, 3, 4. 在1分辨率上, 我们利用小运动的估计来计算光流, 假设结果为 ( u , v ) 0 (u,v)^0 (u,v)0.

这样, 我们在2分辨率上利用1分辨率上计算出的光流, 产生一个新的图像(类似于插帧). 这个图像会更接近原始分辨率的运动, 但不精确. 这一步叫做"Wrap".

因此, 同样地我们对插帧后的2分辨率再计算光流, 得到插帧到最终图像的光流变化 Δ ( u , v ) 1 \Delta (u,v)^1 Δ(u,v)1. 因此此时我们可以得到更精确的光流估计 ( u , v ) 1 = ( u , v ) 0 + Δ ( u , v ) 1 (u,v)^1=(u,v)^0+\Delta (u,v)^1 (u,v)1=(u,v)0+Δ(u,v)1. 这一步叫做"Plus".

再对3分辨率上应用此光流插帧, 一直这样下去. 如图所示:

在这里插入图片描述
因此, 我们就从粗糙分辨率的小运动, 一步一步估计到了精细分辨率的大运动, 总之是一个Warp+Plus的迭代过程.

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-06-14 22:35:35  更:2022-06-14 22:37:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:48:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码