【问题标题】:Which is the better way of calculating frame motion in a video?在视频中计算帧运动的更好方法是什么?
【发布时间】:2013-01-16 23:17:42
【问题描述】:

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

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

请帮忙!

【问题讨论】:

    标签: visual-c++ opencv opticalflow


    【解决方案1】:

    opencv中光流的实现方式是……

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我正在做视频摘要。所以,我想测量运动量很重要。上面提到的方法适合他们吗????
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 2017-02-25
        • 2010-11-30
        • 1970-01-01
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多