【问题标题】:Obtaining motion vectors from raw video从原始视频中获取运动矢量
【发布时间】:2011-04-12 16:54:31
【问题描述】:

我想知道是否有关于如何获取原始视频流中宏块的运动矢量的好的(并且免费提供的)文本。这经常用于视频压缩,虽然我的应用不是视频编码。

在 OSS 编解码器中可以找到这样做的代码,但是通过阅读代码来理解方法有点困难。

我的实际目标是确定 2D 投影空间中的相机运动,假设相机只是改变它的方向(而不是位置)。我想做的是将帧划分为宏块,获取它们的运动向量,并通过平均这些向量来获得相机运动。

我猜 OpenCV 可以帮助解决这个问题,但它在我的目标平台上不可用。

【问题讨论】:

    标签: algorithm math video computer-vision


    【解决方案1】:

    通常的方法是简单的蛮力:将一个宏块与参考帧中的每个宏块进行比较,并使用残差最小的那个。代码变得复杂主要是因为这通常是基于 mv 的压缩中最慢的部分,因此他们投入了大量工作来优化它,通常以牺牲任何接近可读性的东西为代价。

    特别是对于实时压缩,一些通过(例如)将搜索限制在原始位置 +/- 某个最大增量来稍微减少工作量。这通常可以获得相当大的压缩速度,以换取相当小的压缩损失。

    【讨论】:

    • 然后我相信这些块是使用像素值的绝对差之和进行比较的。是吗?
    • @phkahler:有些处理像素的绝对差,有些则先进行 DCT 和量化,然后处理系数的绝对差。最后,两者最终大致相同......
    • @jerry 这就是我认为它可以工作的方式,但同样,这个问题需要更多的研究,因为我不知道如何获得你所说的“最小残余误差”。我正在考虑以一种允许我测量块之间距离的方式散列每个块,其中相似性是距离。然后在某个空间增量中找到最接近的那个会给我运动矢量。那我该怎么做呢?
    • @skrat:对于第一次尝试,您通常想做@phkahler 提到的事情:只需遍历每个块并将相应像素之间差异的绝对值相加。如果你能找出一个可以让你正确描述距离的哈希值,我很确定你可以从中赚到足够的钱来退休。我并不是说它不能完成,但 AFAIK,目前还没有这样的事情。
    • @jerry 是的,这是有道理的。如果我可以更深入地挖掘,最困扰我的问题是:我只会得到大小等于块大小倍数的向量吗?
    【解决方案2】:

    如果您只假设相机运动,我怀疑分析连续图像的 FFT 可能会有所作为。对于幅度变化不大的频率,相位信息将指示相机运动。不确定这是否有助于相机旋转,但可能可以计算横向和垂直运动。由于新信息出现在一边,另一边消失,将会有困难,我不确定这会造成多大的伤害。这是针对您的问题的推测性思考,因此我没有证据或参考资料:-)

    【讨论】:

      【解决方案3】:

      听起来你正在做一个非常有限的SLAM 项目?

      例如,Bristol UniversityImperial CollegeOxford University 上的大量阅读材料 - 您可能会发现他们在感兴趣的帧之间查找和匹配候选特征的方法 - 比简单的绝对差异总和更可靠。

      【讨论】:

        【解决方案4】:

        对于这种类型的最底层算法,您要查找的术语是 optical flow,而该类中最简单的算法之一是 Lucas Kanade algorithm

        This 是一个很好的概述演示文稿,它应该为您提供很多想法,让您了解满足您需要的算法

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-02
          • 2013-11-28
          • 2011-07-10
          • 2012-08-21
          • 1970-01-01
          • 2014-05-01
          • 1970-01-01
          • 2011-08-28
          相关资源
          最近更新 更多