OpenCV версии 2.4.5 предлагает несколько различных реализаций, которые можно использовать для отслеживания движущихся объектов, которые используют статистические методы для оценки фона. OpenCV имеет BackgroundSubtractorMOG
, BackgroundSubtractorMOG2
классы реализованы на CPU. Кроме того, он имеет графические реализации BackgroundSubtractorMOG
а также BackgroundSubtractorMOG2
а именно gpu::MOG_GPU
а также gpu::MOG2_GPU
соответственно. Есть также два других алгоритма gpu::GMG_GPU
а также gpu::FGDStatModel
,
В моем приложении я хочу сегментировать движущиеся объекты, как только они выходят на сцену. Я хотел бы избежать ложных срабатываний, таких как тени. Эти 4 алгоритма, кажется, фокусируются на одной цели — они отделяют фон от переднего плана, создавая модель фона с течением времени. Я бродил, если кто-то, кто имел опыт работы с этими реализациями, может помочь мне решить, какую (GPU) реализацию использовать. Чем эти алгоритмы — MOG, MOG2, GMG и FGDStatModel — отличаются друг от друга? Каковы преимущества использования того или иного алгоритма? Как эти реализации сравниваются с точки зрения скорости, возможности настройки их параметров, точности, обнаружения теней (ложное срабатывание) и т. Д.?
Я наткнулся на демонстрационный исходный код bgfg_segm.cpp
находится в {opencv_folder}\samples\gpu
, Демонстрация показывает использование и отображает выходные данные для следующих классов сегментации background-foreground
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
Других решений пока нет …