关于opencv:光流中的像素对应

pixel correspondence in optical flow

我对视频序列中的光流概念不了解,我已经阅读了有关光流的基础知识,并且我熟悉Horn


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

1
Fx*U + Fy*V = -Ft

如您所见,该方程是方程的欠定系统。因此,Horn和Schunk建议整合一个次要假设。平滑度限制UV的偏差应较小。这已集成到您拥有的最小二乘法框架中:

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

使用该方程式

可以通过将E的偏差设置为0来求解UV。因此,运动矢量的解通过UV的梯度算符连接。

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

1
2
sum(Fx*U + Fy*V + Ft)?2 = 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)的一阶泰勒近似值。这意味着您的图像信号必须是线性的。因此,您仅能够计算最多几个像素的运动。这就是为什么图像金字塔用于传递线性度的原因。
  • 运动恒定性或平滑度约束可防止出现尖锐的运动边界。这在某些应用程序中可能很重要。
  • 该框架不会阻止您出现经典的对应问题。

当Fx * U Fy * V = -Ft时,我们无法为一个像素求解此方程...因此在cvGoodFeaturesToTrack给您提供一组像素之后...在该组中的每个像素周围选择了一个窗口...根据假设强度恒定,即下一帧中的色块/窗口(以所选像素为中心)应该具有相同的强度。因此,假设在frameA中我们通过考虑一个点周围的一个窗口找出一个点的U和V ... U和V给出了该点应该在水平和垂直方向上通过的像素位移...使用U和V,我们在下一帧(即frameB)中找到该点的位置。根据恒定强度假设,帧B中预测点周围的斑块应具有与帧A中点周围的斑块相同的强度...在检查帧A和帧B中两个斑块之间的强度后,确定该点已低于是否尝试过。.我尽力解释一下...如果我在某些时候错了,请更正我..


在Horn和Schunk的方法中,不需要使用无关的方法来计算两个帧之间的像素对应关系。 H