光流中的像素对应

时间:2012-12-14 06:29:50

标签: opencv frame tracking pixel opticalflow

我对视频序列中光流的概念不知何为,我已经阅读了关于光流的基础知识,我对Horn& amp; Shunck方法或Lucas& Kanade的方法。

我意识到在这些方法中我们正在计算一些代表图像中像素运动的矢量,当然这些像素有一些限制(亮度恒定,平滑度和......)

我的问题:

根据公式fx*u + fy *v = -ft 我们如何准确地确定帧t中的一个像素与帧t + 1中的另一个像素之间的对应关系?

我的意思是我们怎么能确定它是我们在帧t中找到的帧t + 1中的相同像素,我不知道他们在算法的哪个部分找到了这些像素并建立帧t和帧t + 1中像素之间的对应关系! 我知道我们可以找到已移动的像素,但我不知道如何找到帧t和帧t + 1中像素之间的关系。

我希望你理解我的问题:o)(o:

如果可以按照你的意思做出回答。

Merci beaucoup

3 个答案:

答案 0 :(得分:6)

实际上,Horn,Schunk和Lucas,Kanade的方法以不同的方式处理等式:

Fx*U + Fy*V = -Ft

如您所见,这个等式是一个欠定的方程组。所以霍恩和舒克提出要整合一个有限的假设。平滑度限制了UV的偏差应该很小。这被集成到最小方框架中,您可以:

(Fx*U + Fy*V + Ft)² + lambda * (gradient(U)² + gradient(V)² = E
E -> min

使用该等式,可以通过将U的偏差设置为V来解决E0。因此,运动矢量的解通过UV的梯度算子连接。

Lucas和Kanade在定义的区域中提出Lucas Kanade窗口只计算一个运动矢量(或者一个区域只有一个运动/运动恒定约束)并将其放入最小二乘框架中:

sum(Fx*U + Fy*V + Ft)² = E
E->min

对定义区域中的每个像素进行求和。 UV也可以很容易地计算为E设置为0的偏差。

使用这两个方程,您会看到通过使用时间(Ft)和空间图像渐变(FxFy)找到像素对应关系。 Lucas和Kanade论文中有一幅很好的图片,以图形方式显示了这种相关性。但是有一些要考虑的要点:

  • 如果图像包含纹理(光圈问题)
  • ,这些方法只能计算运动矢量
  • Fx*U + Fy*V + FtF(x, y, t) = F(x + U, y + V, t + 1)的一阶泰勒近似。这意味着您的图像信号必须是线性的。因此,您只能计算几个像素的运动。这就是图像金字塔用于提供线性的原因。
  • 运动恒定或平滑约束可防止锐利的运动边界。这在某些应用中可能很重要。
  • 该框架不会阻止您出现传统的通信问题。

答案 1 :(得分:1)

使用Fx * U + Fy * V = -Ft我们无法解决一个像素的这个等式...所以在cvGoodFeaturesToTrack给出一组像素之后......在该集合中的每个像素周围选择一个窗口...根据恒定强度的假设,补片/窗口(以所选像素为中心)应该在下一帧中具有相同的强度。因此,假设在frameA中我们通过考虑它周围的窗口找出一个点的U和V ... U和V给出了特定点在水平和垂直方向上经过的像素位移...使用U和V我们找到下一帧中的点的位置,即frameB。根据恒定强度假设,在frameB中预测点附近的补丁应该具有与frameA中的点周围的补丁相同的强度...在检查了frameA和frameB中的两个补丁之间的强度之后,确定该点已经消失了。一个好的轨道或不是。我试图解释尽可能多的...如果我错了,请纠正我..

答案 2 :(得分:0)

在Horn和Schunk的方法中,不需要通过无关方法计算两帧之间的像素对应关系。 H& S是迭代算法。对于两个连续的帧,从u-s和v-s的一些初始值开始并迭代直到它收敛。

细节:

对于两个连续的帧,你会进行以下几次迭代,(这是为每个像素计算的,想象一下有一个u-image-buffer和一个v-image-buffer)

u = u_av - Fx *(P/D)
v = v_av - Fy *(P/D)

其中

*, stands for multiplication
P = Fx * u_av + Fy  * v_av + Ft
D = lambda + Fx**2 + Fy**2
Fx = gradient of image along x (can be averaged across the two frames)
Fy = gradient of image along y (can be averaged across the two frames)
Ft = temporal gradient across two frames
u_av = (sum of u-s of 4 diagonal neighbors)/4
v_av = (sum of u-s of 4 diagonal neighbors)/4
lambda=smoothness constraint coefficient

u和v的初始值可以为零。