2013-04-08 10 views
9

Sono a monitoraggio delle persone in computer vision. Ho delle osservazioni (blob come output del rilevamento blob dopo la sottrazione dello sfondo) e voglio dedurre gli oggetti che hanno prodotto queste osservazioni.Filtro antiparticolato per il rilevamento di oggetti multipli

Ho problemi con qualche codice di filtro di Kalman. Ed è abbastanza chiaro per me, ma il mio problema è il tracciamento di più oggetti: il mio problema è che a volte le osservazioni sono incomplete/rumorose. Lasciami spiegare meglio - In un test con osservazioni chiare, ho 1 blob per ogni persona. Il filtro di Kalman può aiutarmi a livellare il percorso rumoroso della persona in una curva levigata. Ma questo non è un mio problema; Il problema è che a volte il blob detection non è perfetto e ho 2 blob per 1 persona (per esempio se la persona che voglio tracciare è vestire una t-shirt dello stesso colore dello sfondo) o qualche volta ho 1 blob per 2 persone (ad esempio se le 2 persone si abbracciano o sono troppo vicine l'una all'altra).

Ho cercato un po 'di teoria e ho trovato molti documenti che stanno risolvendo il problema del tracciamento degli oggetti con il filtro antiparticolato. Così ho studiato il filtro bayesiano, il metodo Monte Carlo, il campionamento dell'importanza ed è un po 'chiaro (non ho conoscenze matematiche sulla probabilità di capire tutto ma l'idea è chiara).

In ogni caso, non capisco ancora come il filtro antiparticolato possa aiutarmi a rilevare casi in cui 2 blob corrispondono a 1 oggetto o 1 blob corrispondono a 2 oggetti.

Qualcuno può aiutare a comprendere questo problema?

risposta

-2

Kalman Filter sono uno sfondo approccio sottrattore in questo caso. Non può gestire l'associazione dei dati e solo il rumore gaussiano.

Alla fine ho reimplementato il filtro particellare basato sull'istogramma attivato dai rilevamenti dell'oggetto.

Se qualcuno è interessato a ciò basta chiedere come commento!

+0

Sono interessato a quello –

+0

@nkint come hai fatto, puoi spiegarlo o condividerlo? – Arjun

+1

Non ho più codice ma non è difficile da implementare in opencv .. ci sono alcune implementazioni con opencv + python su github – nkint

7

Beh, prima di tutto, il progetto OpenCV VideoSurveillance è un buon modo per iniziare a gestire le vostre domande.

Effettua l'associazione dati delle risposte di rilevamento, come hai detto tu. Inoltre, gestisce i falsi positivi (2 blob su 1 oggetto come hai detto) con un meccanismo semplicistico (l'inizializzazione si basa su una soglia di fotogramma e anche sulla cancellazione). L'altro problema, come hai detto, di circa 1 blob corrispondente a 2 oggetti è solitamente chiamato occlusione (il termine "collisione" nel progetto VideoSurveillance è usato ma oggigiorno è obsoleto). VideoSurveillance sta utilizzando un'implementazione del filtro particelle basata su una modellazione dell'istogramma di colore 3D per risolvere questa situazione.

Semplice spiegazione: come distinguere due obiettivi diversi in base al loro aspetto (i vestiti)? È possibile memorizzare il loro istogramma di colore e utilizzarlo più tardi in fotogrammi futuri, giusto? Ma come si fa la ricerca? Puoi cercare tutti i centroidi possibili nel fotogramma successivo, oppure usare diciamo 200 punti casuali sparsi per un'area in cui credi che sia il tuo oggetto. Questi 200 punti sono le particelle. Come funzionano? Confrontano l'area in cui sono focalizzati e producono una probabilità che l'oggetto sia lì. Più vicini sono, più grande è la possibilità. Alla fine, riassumi tutte le possibilità e trova il centroide "medio".

In parole semplici, l'abbigliamento di ciascun target è modellato all'interno della funzione di probabilità e, grazie all'idea di filtraggio delle particelle, si ottengono calcoli quasi in tempo reale.

Infine, il filtro kalman è un predittore, che aiuta il localizzatore a utilizzare solo i dati di movimento. "Filtra" i comportamenti di movimento estremo nel caso in cui il risultato del filtro particella diventi più folle di quanto dovrebbe essere. VideoSurveillance include anche questo. È complementare all'aspetto e il tracker è più sofisticato quando usa entrambi.

Modifica: come può essere utile per il tracciamento multi-target? Supponendo di avere un semplice tracker con associazione dati, diciamo che due oggetti stanno per "scontrarsi". Il tracker funziona correttamente finché gli oggetti non vengono uniti. Durante la "fusione", il tracker vede solo un oggetto. L'altro è perso.Dopo un po ', si dividono e il tracker rileva il vecchio oggetto come nuovo! come possiamo fissare questo? Iniziamo finita filtraggio delle particelle e l'aspetto modellazione questa volta:

  • Prima della fusione, abbiamo 2 oggetti in movimento verso l'altro. Gli oggetti sono indipendenti e il tracker può vederli chiaramente. Durante questo periodo, un modellatore dell'aspetto (un meccanismo che "ricorda" come appare un oggetto) sta imparando come appaiono questi due oggetti. Ovviamente, mentre i fotogrammi passano, entrambi gli oggetti cambiano leggermente aspetto. Ecco perché, il modellista ha un "tasso di apprendimento" che gli consente di adattare la sua "memoria" col passare del tempo.

  • Durante l'unione, questa volta, impostiamo il tracker per essere più paziente e non uccidere il secondo oggetto così facilmente come prima. Il tracker consente a entrambi gli oggetti di essere attivi. L'oggetto non occluso viene tracciato con successo come prima, e l'altra casella di delimitazione dell'oggetto tenta di riposizionare di nuovo il bersaglio. Se siamo fortunati *, dopo un breve periodo l'oggetto occulto (nascosto) riapparirà (diviso) e il riquadro di delimitazione verrà attratto lì grazie alle particelle.

* Come sopra indicato, il riquadro di delimitazione del bersaglio occulto è ancora modellato dal modellatore. Se la persona occlusa rimane troppo a lungo nascosta, il modellatore dimenticherà il vecchio oggetto e imparerà cosa si trova davanti all'area di occlusione (cioè l'oggetto non occluso) o girerà come una scatola orfana (questo è chiamato deriva). VideoSurveillance non ha un meccanismo per questo. Una soluzione semplice potrebbe essere quella di fermare l'adattamento del modellatore durante l'occlusione. Come? Quando le due caselle di delimitazione si sovrappongono.

+0

grazie per la risposta. Ho ottenuto abbastanza bene il concetto di filtraggio di particelle, ma non riesco ancora a capire come possa essere utile per il tracciamento multi-target o l'associazione dati. – nkint

+0

ok. molto più chiaro sull'istogramma e l'aspetto. ora ho solo un altro dubbio.Posso spiegare tutto in questa frase: "il filtro antiparticolato mi fornirà una distribuzione multimodale e ogni modalità della distribuzione è un oggetto in movimento", giusto? oppure: ho particelle nell'immagine, se le raggruppo, i centroidi ottenuti sono l'oggetto in movimento. è giusto? – nkint

+0

@William Questo collegamento: http://opencv.willowgarage.com/wiki/VideoSurveillance sembra non funzionare più. –

2

Kalman filtro o filtro particellare non supporta problema di associazione dati (multipla problema inseguimento dove diverse rilevazioni devono essere confrontati con diverse tracce).

Quello che ti serve è Joint Probability Data Association Filter (JPDAF) che associerà ogni rilevamento con una traccia in modo soft (un rilevamento appartiene X% alla prima traccia, Y% alla seconda traccia ...).

L'algoritmo di tracciamento sottostante può essere il filtro particelle o il filtro Kalman.

Dai un'occhiata all'implementazione di JPDAF in C# - implementata per Kalman e filtro antiparticolato. A questo punto i campioni di lavoro sono per Kalman e il filtro per le particelle, JPDAF verrà dopo - ma è implementato e pronto.

biblioteca Accord.NET estensioni: https://github.com/dajuric/accord-net-extensions

Problemi correlati