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

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

想请教一下用这种方法提取前景会有什么问题

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

下面是我要做的事情。

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

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

有很多方法可以解决这个问题,至于哪种方法最合适,实际上取决于输入图像。可能值得阅读 topic

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

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

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

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

最佳方法取决于您的应用,但有很多关于此主题的论文

你的方案对于摄像机固定,背景静止的情况已经足够了。室内和人为控制的场景比室外和自然场景更适合这种方法。我已经为一个检测系统做出了贡献,该系统基本上按照您建议的相同原则工作。但当然,细节是至关重要的。根据我的经验说几点

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

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

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

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