从原始视频中获取运动矢量

时间:2011-04-12 16:54:31

标签: algorithm math video computer-vision

我想知道如何在原始视频流中获得宏块的运动矢量有任何好的(和免费提供的)文本。这通常用于视频压缩,尽管我的应用不是视频编码。

执行此操作的代码在OSS编解码器中可用,但通过阅读代码来理解该方法有点困难。

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

我想OpenCV可以解决这个问题,但是我的目标平台上没有。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

对于此类型的最低级算法,您要查找的术语是optical flow,该类中最简单的算法之一是Lucas Kanade algorithm

This是一个非常好的概述演示文稿,可以为您提供足够的想法,为您提供所需的算法