OpenCV中前景 - 背景分割方法的区别

时间:2013-04-22 21:47:18

标签: c++ opencv computer-vision image-segmentation

OpenCV版本2.4.5提供了几种不同的实现,可用于跟踪使用统计方法估计背景的移动对象。 OpenCV在CPU上实现了BackgroundSubtractorMOGBackgroundSubtractorMOG2个类。此外,它还具有BackgroundSubtractorMOGBackgroundSubtractorMOG2的GPU实现,分别为gpu::MOG_GPUgpu::MOG2_GPU。还有另外两种算法gpu::GMG_GPUgpu::FGDStatModel

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

1 个答案:

答案 0 :(得分:5)

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

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