光流是计算机视觉中非常重要的概念,它主要用于描述视频中连续帧之间像素的运动变化,可以应用于目标追踪、运动估计等场景。

光流方程的背景

光流法假设亮度恒定,即场景中的一个物体在运动过程中,其亮度是不变的。这个假设在实际中并不总是成立,但是在许多情况下,这个假设是合理的,因为在连续的图像帧中,物体的亮度变化通常是比较小的。

基于这个假设,我们可以得到光流方程。光流方程是在小范围内,连续的图像帧之间的运动变化的数学描述。

光流方程的原理与推导

为了推导光流方程,我们首先考虑在时间tttt+dtt + dtt+dtdtdtdt是非常小的时间间隔)两帧图像之间的亮度恒定假设。设I(x,y,t)I(x, y, t)I(x,y,t)表示在时间ttt,位置(x,y)(x, y)(x,y)的亮度。

我们假设在时间t+dtt + dtt+dt,这个像素点已经移动到了新的位置(x+dx,y+dy)(x+dx, y+dy)(x+dx,y+dy),并且亮度仍然为I(x,y,t)I(x, y, t)I(x,y,t),所以我们有:

I(x,y,t)=I(x+dx,y+dy,t+dt) I(x, y, t) = I(x+dx, y+dy, t+dt) I(x,y,t)=I(x+dx,y+dy,t+dt)

然后我们对右侧的I(x+dx,y+dy,t+dt)I(x+dx, y+dy, t+dt)I(x+dx,y+dy,t+dt)做泰勒展开,得到:

I(x+dx,y+dy,t+dt)=I(x,y,t)+∂I∂xdx+∂I∂ydy+∂I∂tdt+O(dt) I(x+dx, y+dy, t+dt) = I(x, y, t) + \frac{\partial I}{\partial x}dx + \frac{\partial I}{\partial y}dy + \frac{\partial I}{\partial t}dt + O(dt) I(x+dx,y+dy,t+dt)=I(x,y,t)+xIdx+yIdy+tIdt+O(dt)

其中,∂I∂x\frac{\partial I}{\partial x}xI∂I∂y\frac{\partial I}{\partial y}yI∂I∂t\frac{\partial I}{\partial t}tI分别表示关于xxxyyyttt的偏导数,O(dt)O(dt)O(dt)是高阶小量。

忽略高阶小量,将上面两个等式相减,我们可以得到:

∂I∂xdx+∂I∂ydy+∂I∂tdt=0 \frac{\partial I}{\partial x}dx + \frac{\partial I}{\partial y}dy + \frac{\partial I}{\partial t}dt = 0 xIdx+yIdy+tIdt=0

这就是光流方程。其中,∂I∂x\frac{\partial I}{\partial x}xI∂I∂y\frac{\partial I}{\partial y}yI∂I∂t\frac{\partial I}{\partial t}tI可以通过图像处理技术从图像中直接计算得到。dx/dtdx/dtdx/dtdy/dtdy/dtdy/dt分别是xxxyyy方向上的运动速度,也就是我们要求的光流。

实际上,一般我们将dx/dtdx/dtdx/dtdy/dtdy/dtdy/dt定义为uuuvvv,所以光流方程可以写为:

Ixu+Iyv+It=0 I_x u + I_y v + I_t = 0 Ixu+Iyv+It=0

其中,IxI_xIxIyI_yIy是图像在xxxyyy方向的梯度,ItI_tIt是图像在时间维度的变化,uuuvvv是我们要求的光流。

但是要注意,光流方程是一个关于uuuvvv的一元方程,而uuuvvv有两个未知数,所以我们无法直接求解。这就是所谓的光流问题的“光流歧义性”。为了解决这个问题,我们需要引入其他的约束,比如平滑性约束,即假设相邻的像素的光流是相似的,或者使用更复杂的模型,如光流金字塔,光流法网等来求解。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐