Разница между методами сегментации переднего плана и фона в 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 ответ:
Я наткнулся на демонстрационный исходный код
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