光流法:Farneback

光流法:Farneback光流法:Farnback光流法:Farnback基本假设Farneback光流法图像模型位移估计Reference现实世界中,万物都在在运动,且运动的速度和方向可能均不同,这就构成了运动场。物体的运动投影在图像上反应的是像素的移动。这种像素的瞬时移动速度就是光流。光流法是利用图像序列中的像素在时间域上的变化、相邻帧之间的相关性来找到的上一帧跟当前帧间存在的…

大家好,又见面了,我是你们的朋友全栈君。

光流法:Farnback


现实世界中,万物都在在运动,且运动的速度和方向可能均不同,这就构成了运动场。物体的运动投影在图像上反应的是像素的移动。这种像素的瞬时移动速度就是光流。光流法是利用图像序列中的像素在时间域上的变化、相邻帧之间的相关性来找到的上一帧跟当前帧间存在的对应关系,计算出相邻帧之间物体的运动信息的一种方法。

光流法按照不同的实现方式可以分为:基于梯度的方法、基于匹配的方法、基于能量的方法、基于相位的方法等。本文介绍的是一种基于梯度的经典光流方法:Farnback法。光流法的前提假设包括:相邻帧之间亮度恒定;相邻帧之间取时间连续或者运动变化微小;同一子图像中像素点具有相同的运动。

基本假设

假定图像序列记作 I(x,y,t) I ( x , y , t ) ,其中 X=[x,y] X = [ x , y ] 。视频中的每个前后帧提取出来之后就是一个图像序列。假设图像亮度恒定,即图像亮度没有变化,则导数为0:

dI(X,t)dt=IXXt+It=0 d I ( X , t ) d t = ∂ I ∂ X ∂ X ∂ t + ∂ I ∂ t = 0



或者根据泰勒展开来得出上述式子:


I(X,t)=I(X+ΔX,t+Δt)I(X,t)+IXΔX+ItΔtIXΔX+ItΔt=0IXΔXΔt+It=0Ixxt+Iyyt+It=0 I ( X , t ) = I ( X + Δ X , t + Δ t ) ≈ I ( X , t ) + ∂ I ∂ X Δ X + ∂ I ∂ t Δ t ∂ I ∂ X Δ X + ∂ I ∂ t Δ t = 0 ∂ I ∂ X Δ X Δ t + ∂ I ∂ t = 0 ∂ I ∂ x ∂ x ∂ t + ∂ I ∂ y ∂ y ∂ t + ∂ I ∂ t = 0



其中,在微小时间内

Xt ∂ X ∂ t
或者

ΔXΔt Δ X Δ t
表示速度,可以记为:


Xt=[xt,yt]=[u,v]=d ∂ X ∂ t = [ ∂ x ∂ t , ∂ y ∂ t ] = [ u , v ] = d



则有:


Ixu+Iyv+It=0[Ix  Iy][uv]=It I x u + I y v + I t = 0 [ I x     I y ] [ u v ] = − I t

Farneback光流法

Farneback是一种基于梯度的方法,假设图像梯度恒定且假设局部光流恒定。局部光流恒定,即对于任意的 yN(x),d=Xt y ∈ N ( x ) , d = ∂ X ∂ t 不 变 。梯度恒定即:

ddtI(X,t)=IXXt+It=H(I)d+(I)t=0 d d t ∇ I ( X , t ) = ∂ ∇ I ∂ X ∂ X ∂ t + ∂ ∇ I ∂ t = H ( I ) ⋅ d + ( ∇ I ) t = 0



假设:


E(X,d)=||(H(I)d+(I)t)||2 E ( X , d ) = | | ( H ( I ) ⋅ d + ( ∇ I ) t ) | | 2



上式在最优值处有导数为0:


Ed=0d=(HT(I)H(I))1(HT(I)(I)t) ∂ E ∂ d = 0 d = − ( H T ( I ) H ( I ) ) − 1 ( H T ( I ) ( ∇ I ) t )

若对时间离散化:
(后向差分)

(I)t(X,t)I(X,t)I(X,t1) ( ∇ I ) t ( X , t ) ≈ ∇ I ( X , t ) − ∇ I ( X , t − 1 )



(时间中心差分)


(I)t(X,t1/2)I(X,t)I(X,t1)H(I)(X,t1/2)12(H(I)(X,t)+H(I)(X,t1)) ( ∇ I ) t ( X , t − 1 / 2 ) ≈ ∇ I ( X , t ) − ∇ I ( X , t − 1 ) H ( I ) ( X , t − 1 / 2 ) ≈ 1 2 ( H ( I ) ( X , t ) + H ( I ) ( X , t − 1 ) )

图像模型

图像一般是二维的(灰度图像),那么图像像素点的灰度值可以看成是一个二维变量的函数 f(x,y) f ( x , y ) 。假设以感兴趣的像素点为中心,构建一个局部坐标系(并不是针对整张图像)。对函数进行二项展开,可以近似为:

f(x,y)r1+r2x+r3y+r4x2+r5y2+r6xy=(xy)T(r4r6/2r6/2r5)(xy)+(r2r3)T(xy)+r1=xTAx+bTx+c(454)(455)(456) (454) f ( x , y ) ≈ r 1 + r 2 x + r 3 y + r 4 x 2 + r 5 y 2 + r 6 x y (455) = ( x y ) T ( r 4 r 6 / 2 r 6 / 2 r 5 ) ( x y ) + ( r 2 r 3 ) T ( x y ) + r 1 (456) = x T A x + b T x + c

其中, x x 为二维列向量, A A 2×2 2 × 2 的对称矩阵, b b 2×1 2 × 1 的矩阵。注意,此处的系数确定后只针对在确定点 (x,y) ( x , y ) 而言,对于其他点可能并不适用,也就是说,每个像素点对应一组系数。

取该像素点的一个邻域(通常以该像素为中心,大小为 2n+1 2 n + 1 的 方 形 区 域 ),利用这些像素点的值和坐标来进行系数的估计,估计的算法可以使用加权最小二乘法。加权是因为在邻域内,距中心越近的像素点与中心像素具有更大的相关性,而越远的点提供的信息越少。其实可以将邻域以外的像素点的权重都看成是0。

位移估计

考虑多项式扩展是在一个像素的邻域内,如果像素经过移动 d d 后,则整个多项式应该会发生变化。
原始位置:


f1(x)=xTA1x+bT1x+c1

f 1 ( x ) = x T A 1 x + b 1 T x + c 1



像素移动后:


f2(x)=f1(xd)=(xd)TA1(xd)+bT1(xd)+c1=xTA1x+(b12A1d)Tx+dTA1dbT1d+c1=xTA2x+bT2x+c2 f 2 ( x ) = f 1 ( x − d ) = ( x − d ) T A 1 ( x − d ) + b 1 T ( x − d ) + c 1 = x T A 1 x + ( b 1 − 2 A 1 d ) T x + d T A 1 d − b 1 T d + c 1 = x T A 2 x + b 2 T x + c 2



其中,

A2=A1b2=b12A1dc2=dTA1dbT1d+c1 A 2 = A 1 b 2 = b 1 − 2 A 1 d c 2 = d T A 1 d − b 1 T d + c 1



如果

A1 A 1
非奇异,则有上述的第二个式子可以得到:


d=12A11(b2b1) d = − 1 2 A 1 − 1 ( b 2 − b 1 )



按照理论推导,其中必定有

A1=A2 A 1 = A 2
,但实际情况中未必能满足这一项要求,因此可以通过来求平均来近似真实值。如果令:


A(x)=A1(x)+A2(x)2Δb(x)=12(b2b1) A ( x ) = A 1 ( x ) + A 2 ( x ) 2 Δ b ( x ) = − 1 2 ( b 2 − b 1 )



那么:


A(x)d(x)=Δb(x)d=(ATA)1(ATΔb) A ( x ) d ( x ) = Δ b ( x ) d = ( A T A ) − 1 ( A T Δ b )

可以构建目标函数来进行优化求得位移:

e(x)=||AdΔb||2 e ( x ) = | | A d − Δ b | | 2



实际情况中,这种方法求得的结果中噪声太多,因此可以使用兴趣像素点的邻域,然后使用加权的目标函数:


e(x)=ΔxIw(Δx)||A(x+Δx)dΔb(x+Δx)||2 e ( x ) = ∑ Δ x ∈ I w ( Δ x ) | | A ( x + Δ x ) d − Δ b ( x + Δ x ) | | 2

Reference

[1] 图像分析之光流之经典
[2] Farneback 光流算法详解与 calcOpticalFlowFarneback 源码分析
[3] 光流Optical Flow介绍与OpenCV的实现
[4] 光流法简单介绍
[5] Farneback, 2003, Two-Frame Motion Estimation Based on Polynomial Expansion

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163525.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java的线程是用户态还是内核态_内核态和用户态的区别

    java的线程是用户态还是内核态_内核态和用户态的区别内核态用户态是什么?操作系统对程序的执行权限进行分级,分别为用户态和内核态。用户态相比内核态有较低的执行权限,很多操作是不被操作系统允许的,简单来说就是用户态只能访问内存,防止程序错误影响到其他程序,而内核态则是可以操作系统的程序和普通用户程序内核态:cpu可以访问计算机所有的软硬件资源用户态:cpu权限受限,只能访问到自己内存中的数据,无法访问其他资源为什么要有用户态和内核态?系统需要限制不同的程序之间的访问能力,防止程序获取不相同程序的内存数据,或者外围设备的数据,并发送到网络,所有cpu

    2022年9月14日
    2
  • 御用导航官方网站提醒提示页_砼讯 | 河海大学官方网站全新改版上线!「建议收藏」

    御用导航官方网站提醒提示页_砼讯 | 河海大学官方网站全新改版上线!「建议收藏」上新了河海河海大学的官方网站上新啦!经过精心的筹备和技术人员不懈努力在105周年校庆来临之际河海大学官方网站全新改版上线!旧版网站全新改版新版网站高端大气的界面设计简洁明晰的板块分布河海元素的多重呈现超大大大图带来绝佳的视觉体验改版后的河海大学官网分为:河海新闻学术活动信息公告光影河海媒体河海五大板块信息门户、邮箱等在网站的右上角校园文化、校园景观、校园服务、图书档案、校历、校车等则在校…

    2022年5月30日
    161
  • Unity 协程嵌套测试

    Unity 协程嵌套测试通过return嵌套,子协程执行完之后父进程才继续执行usingSystem.Collections;usingUnityEngine;publicclasstest2:MonoBehaviour{ voidStart(){Debug.Log(“Start0”);StartCoroutine(test());De

    2022年6月17日
    64
  • 微型计算机的档次主要取决于,微型计算机的性能主要取决于

    微型计算机的档次主要取决于,微型计算机的性能主要取决于匿名用户1级2013-07-10回答“微型计算机的性能主要取决于什么?”主要看三大件,CPU,主板,内存。1、CPU:其功能主要是解释计算机指令以及处理计算机软件中的数据,他的速度快慢可以代表计算机处理数据的能力的高低。2、内存:它是与CPU进行沟通的桥梁,计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。3、主板:主板在整个微机系统中扮演着举足轻重的角色。主板的类型…

    2022年6月28日
    43
  • js匿名函数和立即执行函数[通俗易懂]

    js匿名函数和立即执行函数[通俗易懂]js匿名函数和立即执行函数1.匿名函数a)写法b)特点2.立即执行函数a)写法b)特点c)示例1.匿名函数匿名函数又叫拉姆达函数,使用前需要先赋值。a)写法 //hello();//会报错,因为定义在后,使用在前。 varhello=function(){ console.log(“hello”); }; hello();//hellob)特点匿名函数…

    2022年9月1日
    2
  • 服务器与矿机的区别_云服务器怎么挖矿

    服务器与矿机的区别_云服务器怎么挖矿矿机与云计算服务器外观区别内容精选换一换华为云人脸识别服务帮助中心,为用户提供产品简介、用户指南、API参考、常见问题等技术文档,帮助您快速上手使用人脸识别服务。云专题为你精心准备的答疑解惑内容,内容主要包括云计算行业相关知识内容,用户常见问题解决方法等来自:其他矿机与云计算服务器外观区别相关内容您可以使用公共镜像、私有镜像或共享镜像创建云服务器。使用公共镜像和私有镜像创建云服务器的区别是:公…

    2022年9月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号