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