OpenCV中前景-背景分割方法的区别
Posted
技术标签:
【中文标题】OpenCV中前景-背景分割方法的区别【英文标题】:Difference between foreground-background segmentation methods in OpenCV 【发布时间】:2013-04-22 21:47:18 【问题描述】:OpenCV 2.4.5 版提供了几种不同的实现,可用于跟踪使用统计方法估计背景的移动对象。 OpenCV 在 CPU 上实现了 BackgroundSubtractorMOG
、BackgroundSubtractorMOG2
类。此外,它还有BackgroundSubtractorMOG
和BackgroundSubtractorMOG2
的GPU实现,分别是gpu::MOG_GPU
和gpu::MOG2_GPU
。还有另外两种算法gpu::GMG_GPU
和gpu::FGDStatModel
。
在我的应用程序中,我想在移动对象进入场景后立即对其进行分割。我想避免诸如阴影之类的误报。这 4 种算法似乎都专注于同一个目标——它们通过创建一个随时间变化的背景模型来将背景与前景分开。如果有这些实现经验的人可以帮助我决定使用哪个(GPU)实现,我正在徘徊。这些算法——MOG、MOG2、GMG 和 FGDStatModel——彼此之间有何不同?使用其中一种算法有什么优势?这些实现如何在速度、配置参数的能力、准确性、阴影检测(误报)等方面进行比较?
【问题讨论】:
【参考方案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 算法的更好更详细的比较,请告诉我。以上是关于OpenCV中前景-背景分割方法的区别的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV4中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,它们各自的算法原理和特点是什么。
详解OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorMOG
OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorLSBP的使用示例代码及运行效果
OpenCV3中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,它们各自的算法原理和特点是什么。
OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorGSOC的使用示例代码及运行效果
详解OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::BackgroundSubtractorMOG2,并利用它实现对道路监控视频前景/背景的提取