OpenCV版本2.4.5提供了几种不同的实现,可用于跟踪使用统计方法估计背景的移动对象。 OpenCV在CPU上实现了BackgroundSubtractorMOG
,BackgroundSubtractorMOG2
个类。此外,它还具有BackgroundSubtractorMOG
和BackgroundSubtractorMOG2
的GPU实现,分别为gpu::MOG_GPU
和gpu::MOG2_GPU
。还有另外两种算法gpu::GMG_GPU
和gpu::FGDStatModel
。
在我的应用程序中,我想在移动对象进入场景后立即将其分段。我想避免像阴影那样的误报。这四种算法似乎专注于同一目标 - 它们通过随时间创建背景模型将背景与前景分开。如果有这些实现经验的人可以帮我决定使用哪个(GPU)实现,我就会徘徊。这些算法 - MOG,MOG2,GMG和FGDStatModel - 彼此之间有何不同?使用一种或另一种算法有什么好处?这些实现如何在速度,配置参数的能力,准确性,阴影检测(误报)等方面进行比较?
答案 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