OpenCV上移动摄像机的运动检测器

OpenCV上移动摄像机的运动检测器,opencv,camera,motion,motion-detection,opencv3.0,Opencv,Camera,Motion,Motion Detection,Opencv3.0,当摄像机静止时,通过使用光流减去当前帧的前一帧就可以很容易地检测到移动: OpenCV v2.4.9.0: OpenCV v3.0: 但是如何在我们自己的运动中检测运动的物体呢?当相机移动时,前一帧和当前帧之间的任何差异(减法)都会给我们背景的移动 此外,前景(极点、树木)的移动速度将快于背景(天空)。如果我们观察所有偏离运动平均值的东西,我们会发现这些极点和树,但它们实际上是静止的 如何在摄影机移动时检测其他对象的任何运动?为了能够区分摄影机运动和场景运动,您需要同时估计两帧之间摄影机的姿

当摄像机静止时,通过使用光流减去当前帧的前一帧就可以很容易地检测到移动:

  • OpenCV v2.4.9.0:

  • OpenCV v3.0:

但是如何在我们自己的运动中检测运动的物体呢?当相机移动时,前一帧和当前帧之间的任何差异(减法)都会给我们背景的移动

此外,前景(极点、树木)的移动速度将快于背景(天空)。如果我们观察所有偏离运动平均值的东西,我们会发现这些极点和树,但它们实际上是静止的


如何在摄影机移动时检测其他对象的任何运动?

为了能够区分摄影机运动和场景运动,您需要同时估计两帧之间摄影机的姿势变化以及这些帧中的场景几何体


有一些方法可以实现这一点,您应该从运动(SfM)和基本矩阵估计中了解结构。这些都是复杂的方法,每种方法都有自己的问题(例如,在小平移的情况下,场景深度的估计可能不准确)。然而,你需要这种方法,因为当你在世界坐标系而不是图像坐标系中观察运动对象时,你的运动对象只会将自己与场景区分开来。

在心理学研究中,有一种光流模式描述了不同的“相机”运动。理论上,任何不遵循这种模式的东西(你必须先找到正确的模式)本身就是一个移动的物体。谷歌“从视觉流中感知自我运动”这更像是一个计算机视觉问题,而不是一个编程问题。