光流法:Farneback

光流法:Farnback


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

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

基本假设

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

其中,在微小时间内 X t 或者 Δ X Δ t 表示速度,可以记为:
X t = [ x t , y t ] = [ u , v ] = d

则有:
I x u + I y v + I t = 0 [ I x     I y ] [ u v ] = I t

Farneback光流法

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

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

上式在最优值处有导数为0:
E d = 0 d = ( H T ( I ) H ( I ) ) 1 ( H T ( I ) ( I ) t )

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

( I ) t ( X , t ) I ( X , t ) I ( X , t 1 )

(时间中心差分)
( 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 ) 。假设以感兴趣的像素点为中心,构建一个局部坐标系(并不是针对整张图像)。对函数进行二项展开,可以近似为:

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

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

位移估计

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

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

像素移动后:
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

其中,
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

如果 A 1 非奇异,则有上述的第二个式子可以得到:
d = 1 2 A 1 1 ( b 2 b 1 )

按照理论推导,其中必定有 A 1 = A 2 ,但实际情况中未必能满足这一项要求,因此可以通过来求平均来近似真实值。如果令:
A ( x ) = A 1 ( x ) + A 2 ( x ) 2 Δ b ( x ) = 1 2 ( b 2 b 1 )

那么:
A ( x ) d ( x ) = Δ b ( x ) d = ( A T A ) 1 ( A T Δ b )

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

e ( x ) = | | A d Δ b | | 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

猜你喜欢

转载自blog.csdn.net/xholes/article/details/79894340