OpenCV中前景-背景分割方法的区别
Difference between foreground-background segmentation methods in OpenCV
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这些算法有何不同?使用其中一种算法或另一种算法的优点是什么?这些实现在速度、配置参数的能力、准确性、阴影检测(误报)等方面比较如何?
我偶然发现了一个位于{opencv_folder}samplesgpu
中的演示源代码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
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何在C++中从字符串中分割字符
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- GDAL DestroyFeature() 方法产生分割错误
- 从方法返回的数组上的 C++ 分割错误
- AVL树插入方法导致分割故障
- 使用递归方法将矢量作为输入时进行分割故障
- 在公共方法中插入映射(私有属性)后出现分割故障
- 最好的方法是进一步分割向量中的一些元素
- OpenCV中前景-背景分割方法的区别
- 第二次分割故障调用方法c++