2013-04-22 222 views
8

OpenCV 2.4.5版提供了几种不同的实现方式,可用于跟踪使用统计方法估计背景的移动对象。 OpenCV在CPU上实现了BackgroundSubtractorMOG,BackgroundSubtractorMOG2类。另外,它的GPU实现分别为BackgroundSubtractorMOGBackgroundSubtractorMOG2,分别为gpu::MOG_GPUgpu::MOG2_GPU。还有两个其他算法gpu::GMG_GPUgpu::FGDStatModelOpenCV中的前景背景分割方法之间的区别

在我的应用程序中,我想在移动物体进入场景后立即分割出它们。我想避免像阴影这样的误报。这4种算法似乎都集中在相同的目标上 - 通过随着时间的推移创建背景模型,他们将背景与前景分开。如果有这些实现经验的人可以帮助我决定使用哪种(GPU)实现,那么我就会徘徊。这些算法(MOG,MOG2,GMG和FGDStatModel)如何彼此不同?使用一种或另一种算法的优点是什么?这些实现如何在速度,配置参数的能力,准确性,阴影检测(误报)等方面进行比较?

回答

5

我偶然发现位于{opencv_folder}\samples\gpu的演示源代码bgfg_segm.cpp。该演示展示了以下背景前景分割类

FGDStatModel 
MOG_GPU 
MOG2_GPU 
VIBE_GPU <- listed under `non-free functionality` in OpenCV documentation 
GMG_GPU 

使用和显示输出这正是我需要的算法进行比较。显然,需要调整算法的参数以找到适合给定应用的一种算法(以及一组参数)。

速度对比:

FGDStatModel ~60 frames per second (fps) <-slowest 
MOG_GPU  ~650 fps 
MOG2_GPU  ~650 fps 
VIBE_GPU  ~1000 fps <- fastest 
GMG_GPU  ~190 fps 
+0

和什么有关的所有参数调整? – nkint 2013-08-16 09:29:43

+0

@nkint确实,准确度取决于您的应用程序以及为给定算法选择的参数。我没有做广泛的研究。 – Alexey 2013-08-16 14:57:54

+0

以及您使用了哪个参数?手动微调? – nkint 2013-08-16 15:11:18