Разница между методами сегментации переднего плана и фона в OpenCV


OpenCV версии 2.4.5 предлагает несколько различных реализаций, которые могут быть использованы для отслеживания движущихся объектов, использующих статистические методы для оценки фона. OpenCV имеет BackgroundSubtractorMOG, BackgroundSubtractorMOG2 классы, реализованные на процессоре. Кроме того, он имеет реализации GPU BackgroundSubtractorMOG и BackgroundSubtractorMOG2, а именно gpu::MOG_GPU и gpu::MOG2_GPU соответственно. Существуют также два других алгоритма gpu::GMG_GPU и gpu::FGDStatModel.

В моем приложении я хочу сегментировать движущиеся объекты, как только они входят в сцену. Я бы хотел избежать фальши. положительные стороны, такие как тени. Эти 4 алгоритма, по-видимому, направлены на одну и ту же цель-они отделяют фон от переднего плана, создавая модель фона с течением времени. Я блуждал, если кто-то, кто имел опыт работы с этими реализациями, может помочь мне решить, какую (GPU) реализацию использовать. Чем эти алгоритмы-MOG, MOG2, GMG и FGDStatModel-отличаются друг от друга? Каковы преимущества использования того или иного алгоритма? Как эти реализации сравниваются с точки зрения скорость, возможность настройки их параметров, точность, обнаружение теней (ложных срабатываний) и т.д.?

1 8

1 ответ:

Я наткнулся на демонстрационный исходный код 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