通过消除恒定运动进行运动检测

Posted

技术标签:

【中文标题】通过消除恒定运动进行运动检测【英文标题】:Motion detection by eliminating constant movements 【发布时间】:2017-11-06 07:03:37 【问题描述】:

我正在尝试在 OpenCV C++ 中实现运动检测。我尝试了各种方法,例如 MOG、光流,它们工作得很好,但是有没有办法我们可以消除场景中的恒定运动,比如恒定的扇形运动等?我想到了 opencv accumuateWeighted(),但不确定它是否有效。我们有什么更好的方法吗?

【问题讨论】:

嗯,这取决于你如何定义运动?例如,如果您有图像的二进制表示,其中有运动的白色和没有运动的黑色,您可以平均帧(二进制帧,使用浮点数或双精度数)。然后,您可以根据自己的喜好对该平均图像进行阈值处理,例如,如果您使用 200 帧,如果像素超过 0.5,则它移动超过 100 帧......或超过 150 帧时移动 0.75.. 越接近 1 (如果二进制图像在移动区域中有 1)它移动得越多。然后,您可以在图像中屏蔽这些区域。如果它在同一个地方,这有效 你所说的恒定运动是什么意思——它是指只有旋转或周期性运动但在一定时间内没有平移的物体吗? @flamelite 常量运动,如树叶、风扇等的局部运动 @api55 感谢您的建议。我会看到的。 【参考方案1】:

我还没有完全强大的解决方案,也没有任何视频处理经验,但我会提出我的想法,直到现在我已经解决了这个问题:

首先考虑视频中的几对连续图像帧,并将它们转换为灰度以进行更可靠的比较。

光栅扫描图像对,通过比较对应的图像对来找出图像对的差异。 生成的图像将给出图像对图像发生变化的像素位置,对这些像素位置进行聚类并在它们之上制作一个边界框。这样这个边界框区域就会标记一个正在平移/旋转的对象。

现在我们已经对几对应用了上述图像差异操作。我们将在每个图像对差异中具有旋转/平移边界框。 现在检查每个生成的图像差异,像素上有边界框。

将差异图像中的边界框中心位置与其他差异图像进行比较。如果在所有差异图像中都存在中心位置有非常轻微变化的边界框,则该边界框中包含的对象将像扇子、树叶一样具有旋转运动,而剩余的边界框将代表视频中的实际平移对象。

【讨论】:

以上是关于通过消除恒定运动进行运动检测的主要内容,如果未能解决你的问题,请参考以下文章

有监督的运动检测库

从网络摄像头进行运动检测以使用 .NET 控制鼠标指针

运动对象检测和描述

Picamera - 进行运动检测的优化方式

如何检测相机上的运动以移动鼠标

动态背景视频流中的运动/变化检测