OpenCV中的背景减法

时间:2017-02-28 19:32:24

标签: opencv image-processing

我试图使用absdiff函数减去两个图像,以提取移动物体,它工作正常但有时背景出现在前景之前。 这实际上发生在背景和前景色相似时,是否有任何解决方案可以解决这个问题? 可能对上述问题的描述不够;所以我附上以下图片 link。 谢谢..

2 个答案:

答案 0 :(得分:3)

您可以使用一些预处理技术,如边缘检测和一些对比度拉伸算法,这将为您提供一些额外的信息来减去图像。由于颜色相同,但新物体应具有边缘等纹理特征;如果边缘得到正确保存,那么在执行图像减法时,您将获得该对象。

流程:

  1. 使用边缘检测算法。
  2. 对比度拉伸算法(如直方图拉伸)。
  3. 使用检测到的对比度拉伸图像的边缘顶部。
  4. 现在使用OpenCV中的图像减法算法。

答案 1 :(得分:1)

没有足够的信息来为您的问题制定完整的解决方案,但我可以提供一些提示:

  • 首先,使用强大的预过滤输入和背景图像 中位数(或高斯)滤波器。这将使您的结果更多 强大的图像噪音和轻微的,非必要的细节混淆 (就像你的背景图片的水平线)。除非你想要 要检测单根移动的头发,您不需要处理 原始像素。

  • 接下来,根据评论中提供的建议来测试所有3种颜色 通道而不是直接进入灰度级。

  • 然后从完成的3个absdiffs的最大值创建一个灰度图像 在每个频道上。

  • 然后执行结账和开业程序。

我不知道你的要求,所以我不能将它们考虑在内。如果准确性至关重要。我在高斯输入图像上使用中值滤波器。如果速度是一个问题,我会缩小输入图像以进行至少一半的处理,然后再将结果放大。如果摄像机处于固定位置并且您具有预先校准的背景,那么当前的天真差异方法应该起作用。如果系统必须在很长一段时间内确定来自真实世界环境的移动(移动阴影,植物,车辆,天气等),那么滚动平均(或高斯)背景模型将更好地工作。如果相机正在移动,则需要进行更多处理,可能需要进行一些光流和/或傅立叶变换测试。所有这些都需要考虑为应用程序提供最佳解决方案。