具有自适应背景,静态对象的OpenCV前景检测

问题描述 投票:0回答:1

我有一个普通表面的背景图像。我的目标是跟踪在表面上定位/移动的对象。

我正在使用MOG2来查找学习率为0的前景对象,因此不更新背景(否则将在背景中合并静态对象)。

结果很好,但我对光有一个很大的问题:如果在背景获取后照明发生变化,则会检测到各种伪像作为前驱对象。

如何提高对照明的稳健性?


更新

我正在尝试一种运行良好的解决方案,但它需要一些修复。

我以这种方式使用MOG2:

  1. 使用第一帧(BGK)获取和学习背景
  2. 将MOG2应用于当前帧,学习率为0(无更新)并获取前景掩码(FG_MASK)
  3. 对于下一帧,我使用FG_MASK来屏蔽BGK,我正在使用结果以一定的学习率应用于MOG2(这更新后台)。
  4. 之后,我正在更新BGK从MOG2算法中获取它。

通过这种方式,对象被遮盖在背景之外,并且背景仍然在更新。这可以保证对光变化的良好稳健性。

Foreground detection with adaptive background

存在一些缺点,例如当光线改变时,物体掩模(“掩模斑点”)保持先前的亮度,并且如果差异太高则可以检测为新物体。

Drawbacks

在上图中,您可以看到当前帧更亮,静态对象的蒙版更暗。

我的想法是尝试调整“遮罩斑点”,在光线变化后改变它的亮度。我如何使用OpenCV获得此功能?


修复以前的缺点

使用inpaint函数instaead简单地掩盖BGK(步骤3)我可以保持“掩码blob”与背景亮度变化同步。这个修复也有缺点,它的性能不是很好。


更新2

我认为这是一个有趣的话题,所以我保持更新。 inpaint函数非常慢,所以我正在尝试另一种方式。使用Hsv色彩空间可以管理亮度通道,我可以通过这种方式减少亮度的影响:

  1. 使用Split功能获取V通道
  2. 计算通道V的平均值
  3. 使用平均值将阈值截断应用于V通道
  4. 使用新的V通道重建帧
opencv emgucv foreground background-subtraction mog
1个回答
0
投票

我有类似的问题实现速度估算算法,我希望我的解决方案可以帮助你。

我尝试的方法之一是累积差异图像(基本上是你用MOG2做的),但它在后台更新时无法跟踪静止物体。当我没有更新背景时,我遇到了和你一样的问题。

所以,我决定使用RGB / HSV阈值处理。我设置道路颜色的边界(让我们说灰色),并创建二进制图像,其中道路颜色的所有颜色都是黑色(0),其他一切都是白色(1)。 Here是关于HSV阈值的很好的教程。选择边界时,您可以确认照明系数设置,让我们说出明亮照明的上边界和黑暗的下边界。然而,该方法可能导致算法看不到与背景类似的颜色的对象。另一个缺点是背景应该是统一的,没有任何细节。

您可以尝试的另一种方法是将输入图像和背景转换为灰度,然后手动减去。这将使您有机会调整与背景差异的阈值水平。让我们说在黑暗条件下值120的背景在明亮条件下将具有140,因此差异为20.对于对象像素可以让我们说值180并且背景值是120,因此差异是60.设置差异的阈值20并设置低于20到0的值和高于20到1的值,这应该做的事情(所有值都在0到255的范围内)。

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.