【问题标题】:Difference between foreground-background segmentation methods in OpenCVOpenCV中前景-背景分割方法的区别
【发布时间】:2013-04-22 21:47:18
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    我偶然发现了位于{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
    

    【讨论】:

    • @nkint 是的,准确度取决于您的应用程序以及为给定算法选择的参数。我没有进行广泛的研究。
    • @nkint 我没有进行广泛的研究,也没有对所有算法进行微调。我只是喜欢我的应用程序的 GMG_GPU 算法。这是我的主观意见。如果您知道这些 OpenCV 算法的更好更详细的比较,请告诉我。
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    相关资源
    最近更新 更多