光流理论
光流(optical flow)是空间运动物体在观察成像平面上的像素运动的瞬时速度。
光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。
光流场是一个二维矢量场,它反映了图像上每一点灰度的变化趋势,可看成是带有灰度的像素点在图像平面上运动而产生的瞬时速度场。它包含的信息即是各像点的瞬时运动速度矢量信息。光流的集合。
基本假设
- 亮度恒定不变。同一目标帧间变化亮度不发生改变。
- 时间连续或运动为“小运动”。短时间内或者相邻帧间目标位置的变化不会剧烈。
基本假设对应的约束方程
像素点亮度在x,y位置以及t时刻表示为I(x,y,t),像素运动表示为dx,dy,dt,那么像素变化前后亮度相同表示为
I(x,y,t)=I(x+dx,y+dy,t+dt)
泰勒展开:
I(x+dx,y+dy,t+dt)=I(x,y,t)+∂I∂xdx+∂I∂ydy+∂I∂tdt+ϵ
其中ϵ是极小值,综合上式,可得
∂I∂xdx+∂I∂ydy+∂I∂tdt=0
同除以dt,有
∂I∂xdxdt+∂I∂ydydt+∂I∂t=0
其中u=dxdt,v=dydt为像素速度,也就是光流。令Ix=∂I∂x,Iy=∂I∂y,It=∂I∂t,则
Ixu+Iyv+It=0
(u,v)为所求光流。
但是求解(u,v)只有一个约束方程,是无法确定光流的,需要增加新的约束。不同的光流方法引入不同的约束条件,包括基于梯度的方法,基于匹配的方法,基于能量(频率)的方法,基于相位的方法和基于神经动力学的方法。
Horn–Schunck光流
Horn-Schunck光流算法通过引入全局平滑约束来做图像中的运动估计。Horn和Schunck设定图像中像素的运动速度和其临近像素的速度相似或相同,且光流场中的每处的速度变化是平滑的,不会突变。平滑约束表示为:
∇2u=∂2u∂2x+∂2u∂2y,∇2v=∂2v∂2x+∂2v∂2y
对于∇2u和∇2v的处理,进行近似表示有
∇2u≃κ(¯ui,j,k−ui,j,k),∇2v≃κ(¯vi,j,k−vi,j,k)
其中领域均值表示为
¯ui,j,k=16{ui−1,j,k+ui,j+1,k+ui+1,j,k+ui,j−1,k}+112{ui−1,j−1,k+ui−1,j+1,k+ui+1,j+1,k+ui+1,j−1,k}
¯vi,j,k=16{vi−1,j,k+vi,j+1,k+vi+1,j,k+vi,j−1,k}+112{vi−1,j−1,k+vi−1,j+1,k+vi+1,j+1,k+vi+1,j−1,k}
约束写成:
ξ2c=(¯u−u)2+(¯v−v)2
综合计算
上面得到的两组约束为:
ξb=Ixu+Iyv+It
ξ2c=(¯u−u)2+(¯v−v)2
综合为:
ξ2=α2ξ2c+ξ2b
也就是最小化ξ2,其对应偏导为0即为所求
∂ξ2∂u=−2α(¯u−u)+2(Ixu+Iyv+It)Ix
∂ξ2∂v=−2α(¯v−v)+2(Ixu+Iyv+It)Iy
化简
(α2+I2x)u+IxIyv=(α2¯u−IxIt)IxIyu+(α2+I2y)v=(α2¯u−IyIt)
得
(α2+I2x+I2y)u=+(α2I2y)¯u−IxIy¯v−IxIt(α2+I2x+I2y)v=+(α2I2x)¯v−IxIy¯u−IyIt
或
(α2+I2x+I2y)(u−¯u)=−Ix[Ix¯u+Iy¯v+It](α2+I2x+I2y)(v−¯v)=−Iy[Ix¯u+Iy¯v+It]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)