MATLAB实现的视频运动检测方法

阅前提示,本文是坑,此路不通,请看下篇。


遇到一个问题。有一个视频,需要计算各帧之间的全局的相对运动(或者可以理解为相机的平动)。经过一番查找,大致有三种思路。

无论哪一种方法,都最好先用After Effects处理一下,添加一些模糊啊、裁边的效果,以降低噪音。

 

第一,如果视频数量很少,可以使用一些tricky的方法,人工提取视频的特点。比如说,如果始终能捕捉到某一特定区域的全貌,而不会跑到边缘或者消失,而且该区域不会变形,那么可以计算这个区域的平均位置。计算方法:

x坐标=求和(区域上各点x坐标)/区域上点的数量;

y坐标=求和(区域上各点y坐标)/区域上点的数量;

如果能很好满足前提条件,这样的算法能轻松实现高精度的运动检测。

步骤简述:

1、读取视频

2、选择合适的阈值进行二值化

3、排除干扰区域,提取出目标区域(这步每个视频都不一样,tricky所在)

4、计算目标区域的平均位置。

缺点:对每个视频都要重新配置,而且不一定好用。

如果可以,在拍摄时就要注意包含容易提取的区域。

 

第二,MPEG有motion vector。视频各帧间各区域的运动情况,可以有助于视频压缩,所以很早就应用于视频压缩技术中。在Linux中运行【ffplay –vismv 3 ***.mp4】,可以看到motion vector的播放。不过如何提取出来是个问题,而且它计算出了视频中多个区域的运动向量,跟我们的目标不一样。

这条路我没有走通,倒是在github上有一个个人项目:https://github.com/victorhsieh/motion-vector

你可能感兴趣的:(MATLAB实现的视频运动检测方法)