我试图使用这种方法来检测移动物体.有人可以为此建议我吗?

Im trying to use this method to detect moving object. Can someone advise me for this?

本文关键字:检测 方法 移动      更新时间:2023-10-16
我想

问一下,如果我使用这种方法提取前景,会出现什么样的问题。

使用此方法之前的条件是它在固定摄像机上运行,因此摄像机位置不会有任何移动。

我想做的在下面。

  1. 从相机读取一帧并将此帧设置为背景图像。这是定期完成的。
  2. 定期减去之后读取到上面的背景图像的帧。然后只会移动与其他区域颜色不同的物体与背景图像相同。
  3. 然后使用灰度、二值化、阈值隔离移动对象。
  4. 迭代以上 4 个进程。

如果我这样做,成功检测到移动物体的概率会很高吗?如果没有...你能告诉我为什么吗?

如果您考虑场景中的照明变化(逐渐或突然),您会发现您的方法不起作用。

对于

这些问题,有更强大的解决方案。其中之一(也许是最好的)是应用于背景减法的高斯混合模型

您可以在OpenCV库中使用BackgroundSubtractorMOG2(GMM的实现)。

您的方案足以应对相机固定且背景静止的情况。室内和人控场景比室外和自然场景更适合这种方法。我为一个检测系统做出了贡献,该系统基本上与您建议的原理相同。但当然,细节至关重要。根据我的经验说几句话

  1. 初始化步骤可能会导致收敛到正常状态的速度非常慢。将背景设置为第一帧,然后移动到移动对象后面的背景片段将被视为对象。更好的方法是取 N 个前帧的中位数。
  2. 在光线条件发生变化等的情况下,简单的减法可能还不够。您可能会发现相似性标准更适合您的应用程序。
  3. 对差异图像进行简单的阈值设置可能还不够。一种简单的方法是扩大前景,以免更新意外标识为像素的背景。
  4. 您的第 4 步不清楚,我假设您的意思是仅在最后一帧上标识为背景的那些位置更新前景。请注意,使用这种简单的方法,实际是背景的像素可能会永远停留在"前景"标签中,因为您不会更新它们下面的背景。对此有许多可能的解决方案。
有很多

方法可以解决这个问题,这实际上取决于输入图像,哪种方法最合适。可能值得对该主题进行一些阅读

您建议的方法可能有效,但这是解决此问题的略微非标准的方法。我主要担心的是,从背景中减去几张图像可能会导致饱和,然后您可能会丢失运动的一些细节。最好在连续图像之间取差值,然后将二值化/阈值应用于这些图像。

过去对我有用的另一种(更复杂的)方法是获取图像的子区域,然后与新图像交叉关联。这种相关性中的峰值可用于识别运动方向 - 如果不止一个东西在移动,这是一种有用的方法。

例如,也可以结合使用上述两种方法。

  1. 从第一个背景中减去第二个图像。
  2. 阈值等,以查找发生移动的投资回报率
  3. 使用模式匹配方法来跟踪后续运动,重点关注上面检测到的投资回报率。

最好的方法将取决于您的应用,但有很多关于这个主题的论文