1

为了找到连续的帧运动差异,我使用了帧的绝对差,然后将所有像素相加来量化运动量。我已经在 OpenCV 中做到了。

但我最近了解了 Horn 和 Schunk 的光流算法和基于宏块的运动补偿。OpenCV 库已经内置了可以计算它们的函数。但我不知道如何量化它们。它们比第一种方法更好吗?

请帮忙!

4

3 回答 3

2

在opencv中实现光流的方式是...

  1. 最初在要跟踪的目标出现的帧(比如 FrameA)中检测一些点作为跟踪(兴趣点)的良好特征......有些点可能位于目标上,有些可能位于背景上......
  2. 检测到的点存储在向量数组中,并与 FrameA 和 FrameB 一起传递给光流函数……后面的 (FrameB) 是我们打算找到感兴趣点位置的下一帧……
  3. 当我们得到 FrameB 中兴趣点的位置时,我们可以估计 FrameA 和 FrameB 之间的兴趣点的位移......

对于你的情况......因为你正在做帧运动计算......使用背景减法(帧微分......)作为启动帧的技术,你可以从那里开始寻找兴趣点......当变化超过一个阈值开始获取兴趣点...在接下来的连续帧中跟踪它们,您可以制作一个直方图,显示有多少兴趣点在下一帧中发生了多少位移...这就是我现在能想到的用于量化帧运动...

于 2012-12-22T07:34:13.707 回答
1

虽然我对特定的 opencv 实现几乎没有经验,但我可以告诉你,光流通常不会尝试量化运动量。您可以根据光流向量的长度(例如,对块速度求和)在输出上定义一个度量,但这与您使用的度量非常不同。这是否对您有用取决于应用程序。为了比较,考虑一个灰色物体在白色背景上移动,一个黑色物体在白色背景上移动。您的帧差度量会将黑色对象视为更多运动,而块速度之和度量会将其视为大致相同的运动量。

于 2012-12-21T13:27:18.540 回答
0

最后,您还应该考虑方法的运行时。差分图像的计算复杂度非常低,可以在几毫秒内估计。但是你无法量化你的物体的速度。例如,摇晃相机可能会造成问题。较慢的是基于光流的方法,例如金字塔形 Lucas Kanade 或 Horn Schunk 方法,但您可以针对每个像素(密集方法,例如 Horn Schunk)或一组预定义像素(稀疏方法,例如金字塔形 Lucas Kanade)获得运动矢量。因此,您现在可以区分不同的运动对象,或者您只需使用计算出的运动矢量的长度。但是运行时间大约是 200 毫秒到 2 秒,并且取决于参数、帧的大小和要计算的向量数量等。

于 2013-01-16T15:17:42.133 回答