OpenCV Version 2.4.5 bietet mehrere verschiedene Implementierungen, mit denen sich bewegte Objekte verfolgen lassen, die statistische Methoden zur Schätzung des Hintergrunds verwenden. OpenCV hat BackgroundSubtractorMOG
, BackgroundSubtractorMOG2
Klassen implementiert auf der CPU. Darüber hinaus gibt es GPU-Implementierungen von BackgroundSubtractorMOG
und BackgroundSubtractorMOG2
, nämlich gpu::MOG_GPU
bzw. gpu::MOG2_GPU
. Es gibt auch zwei andere Algorithmen gpu::GMG_GPU
und gpu::FGDStatModel
.
In meiner Anwendung möchte ich bewegte Objekte segmentieren, sobald sie die Szene betreten. Ich möchte gerne falsche Positive wie Schatten vermeiden. Diese 4 Algorithmen scheinen sich auf das gleiche Ziel zu konzentrieren - sie trennen den Hintergrund vom Vordergrund, indem sie ein Modell des Hintergrunds über die Zeit erstellen. Ich war am Wandern, wenn jemand, der Erfahrung mit diesen Implementierungen hatte, mir helfen kann, zu entscheiden, welche (GPU) Implementierung zu verwenden ist. Wie unterscheiden sich diese Algorithmen - MOG, MOG2, GMG und FGDStatModel - voneinander? Was sind die Vorteile des einen oder anderen Algorithmus? Wie vergleichen sich diese Implementierungen in Bezug auf Geschwindigkeit, Fähigkeit, ihre Parameter zu konfigurieren, Genauigkeit, Schattenerkennung (falsch positiv) usw.?
Ich bin auf einen Demo-Quellcode bgfg_segm.cpp
in {opencv_folder}\samples\gpu
gestoßen. Die Demo zeigt die Verwendung und zeigt die Ausgabe für die folgenden Hintergrund-Vordergrund-Segmentierungsklassen an
Genau das benötigte ich, um die Algorithmen zu vergleichen. Offensichtlich muss man Parameter für die Algorithmen einstellen, um den einen Algorithmus (zusammen mit einer Reihe von Parametern) zu finden, der zu einer gegebenen Anwendung passt.
Geschwindigkeitsvergleich:
%Vor%Tags und Links c++ opencv computer-vision image-segmentation