【发布时间】:2019-09-15 07:18:15
【问题描述】:
我有一张普通表面的背景图片。 我的目标是跟踪在表面上定位/移动的对象。
我正在使用 MOG2 查找学习率为 0 的前景对象,因此不会更新背景(否则会在背景中合并静态对象)。
结果很好,但是我对光线有一个很大的问题:如果在获取背景后光线发生变化,则会将各种伪影检测为前景对象。
如何提高对光照的鲁棒性?
更新
我正在试验一种效果很好的解决方案,但它需要一些修复。
我正在以这种方式使用 MOG2:
- 使用第一帧 (BGK) 获取和学习背景
- 将 MOG2 应用于当前帧,学习率为 0(不更新)并获得前景蒙版 (FG_MASK)
- 对于接下来的帧,我使用 FG_MASK 来屏蔽 BGK,并使用结果以一定的学习率应用到 MOG2(这会更新背景)。
- 之后,我将使用 MOG2 算法更新 BGK。
通过这种方式,对象被遮挡在背景之外,并且背景仍在更新。这可以保证对光线变化的良好鲁棒性。
有一些缺点,例如在光线变化时,物体遮罩(“遮罩斑点”)保持之前的亮度,如果差异太大,可以检测为新物体。
在上图中,您可以看到当前帧更亮,而静态对象的蒙版更暗。
我的想法是尝试根据光线变化调整“遮罩斑点”来改变其亮度。我怎样才能用 OpenCV 得到这个?
修复之前的缺点
使用inpaint 函数来简单地屏蔽 BGK(步骤 3),我可以使“遮罩斑点”与背景亮度变化保持同步。 这个修复也有缺点,性能不是很好。
更新 2
我认为这是一个有趣的话题,所以我会不断更新。 修复功能很慢,所以我正在尝试另一种方式。 使用 Hsv 颜色空间可以让您管理亮度通道,我可以通过这种方式减少亮度的影响:
- 使用Split函数获取V通道
- 计算通道 V 的平均值
- 使用平均值对 V 通道应用阈值截断
- 使用新的 V 通道重建框架
【问题讨论】:
标签: opencv emgucv foreground background-subtraction mog