12

Sto usando OpenCV2.2 per implementare il rilevamento di oggetti in movimento con il metodo di sottrazione di sfondo. E io uso il metodo Gaussian Mixture Model (GMM) per modellare l'immagine di riferimento dello sfondo.Come utilizzare cv :: BackgroundSubtractorMOG in OpenCV?

Ho ottenuto direttamente i pixel in primo piano (o maschera di primo piano) utilizzando la classe cv :: BackgroundSubtractorMOG fornita in OpenCV2.2. È comodo, ma la maschera di primo piano restituita da cv :: BackgroundSubtractorMOG non è buona come mi aspettavo. Inoltre, sembra che cv :: BackgroundSubtractorMOG abbia prestazioni inferiori rispetto al metodo di GMM scritto in linguaggio C fornito in OpenCV1.0.

Quanto segue è il mio codice in OpenCV2.2:

cv::BackgroundSubtractorMOG mog; 
mog(frame, fgMask, 0.01); 

Così, ho usato il metodo in modo sbagliato?

A proposito, cv :: BackgroundSubtractorMOG esegue la rimozione dell'ombra sui pixel in primo piano?

Grazie mille.

+0

Ecco una panoramica utile, da 3.0 documenti, di utilizzare le funzioni di sottotitolazione di sfondo di OpenCV: http://docs.opencv.org/master/db/d5c/tutorial_py_bg_subtraction.html – Pierz

risposta

12

Quando si crea un mog, non si definiscono alcun parametro, quindi viene creato con i parametri predefiniti. Here hai una descrizione di ogni parametro, forse è proprio questo. Prova con 3, 4 5 gaussiani.

Questa funzione non elimina la rimozione delle ombre ma è disponibile l'altra funzione this. In bocca al lupo!

1

risposta di F.X. su this thread dà parametri del campione di

backgroundSubtractor = new BackgroundSubtractorMOG(3, 4, 0.8); 
+0

ma si sta eseguendo molto lentamente sulla mia app. Sono alla ricerca di alcuni parametri validi io stesso – austin

5

Non ci sono recenti algoritmi che eliminano sfondi (rilevare in primo piano) di gran lunga migliore rispetto alla implementazione standard GMM in OpenCV.

Ad esempio, esiste un approccio a cascata di classificatore basato su blocco descritto in this journal article, insieme a source code basato su C++.

+0

Come dovrebbe essere la struttura della directory di input per l'utilizzo di questo strumento? Sembra segfault su readdir(), non importa cosa ci provi. – RussellStewart

0

Per iniziare, si consiglia di utilizzare le seguenti impostazioni. Poi si può avviare la sintonizzazione i parametri:

cv::BackgroundSubtractorMOG2 mog; 
mog(rawFrame,foregroundFrame,-1); 
mog.set("nmixtures", 3); 
mog.set("detectShadows",1); 

In questo esempio ho impostato il sottrattore MOG2 con 3 miscele gaussiane. Ho anche abilitato il rilevamento delle ombre.