2014-05-05 9 views
10

probabilistica Occupazione mappa è una procedura di rilevazione umana multi-camera, con il suo C++ implementazione liberamente avaible a: http://cvlab.epfl.ch/software/pomCome configurare probabilistica Occupazione Mappa persone rivelatore

Al fine di utilizzare questo pratico software si ha la necessità :

  1. Una serie di frame video sincronizzati da più telecamere dopo la procedura di rimozione dello sfondo.
  2. Un file di configurazione per un particolare scenario.

POM viene fornito con un set di esempi di frame video e relativo file di configurazione.

Il mio problema può essere indicato come segue: Data una sequenza di video sincronizzati (per esempio da http://cvlab.epfl.ch/data/pom) come faccio a generare il file di configurazione richiesta dal POM? In particolare, sono interessato al tag RECTANGLE della configurazione. Gli stati Leggimi:

Rectangle [numero della telecamera] [numero di posizione] notvisible | [xmin] [ymin] [Xmax] [ymax]

definisce i parametri di un certo rettangolo in piedi per un individuale in una certa posizione vista da una certa telecamera. Tutti i rettangoli non specificati non sono "visibili" per impostazione predefinita.

Dal mio punto di vista definisce il modo in cui il rettangolo di delimitazione di una persona appare in una determinata posizione vista da una determinata telecamera. Questo deve essere definito per ogni posizione (griglia) per ogni telecamera (data la posizione è nel campo di vista della telecamera - in caso contrario, viene usato il notvisibile o il rettangolo potrebbe non essere definito).

Fare questo a mano non è impossibile, ma certamente non è pratico. Quindi, per riassumere: Come faccio a generare il file di configurazione POM se ho un set di video da più telecamere?

+0

Mi dispiace per essere "capitano ovvio" qui, ma hai provato a contattare gli autori? – GilLevi

+2

Sì, attualmente sto aspettando la risposta. Se saprò qualcosa di più aggiornerò la domanda o risponderò io stesso, perché potrebbe essere utile a molte persone. – Bartosz

risposta

4

Nella pubblicazione associata, gli autori citano che utilizzano la calibrazione della fotocamera per generare i rettangoli per una silhouette umana in ogni posizione della griglia. Sembra che il codice che lo compie non sia incluso nei file sorgente, in tal caso dovrai scriverlo da solo.

Nei dati di calibrazione per i set di dati, è possibile vedere che utilizzano due omografie per telecamera, l'omografia del piano testa e l'omografia del piano terra. È possibile utilizzare questo per ottenere rapidamente i rettangoli richiesti.

L'omografia del piano di testa è una matrice 3x3 che descrive una mappatura da un piano all'altro. In questo caso descrive la mappatura dalle coordinate della stanza 2D (a livello della testa) alle coordinate dell'immagine 2D. Puoi determinare questa omografia per la tua fotocamera con la funzione findHomography in opencv. Tutto quello che devi fare è misurare le coordinate di quattro punti sul terreno nella stanza, e posizionare un palo verticale su quei segni. Il polo dovrebbe essere lungo quanto la persona media che si desidera tracciare. Ora puoi scrivere un piccolo programma che ti permette di cliccare sulla parte superiore del palo in ogni vista della telecamera. Ora hai quattro punti mondo (le coordinate misurate nella stanza) e quattro punti immagine per telecamera (i punti su cui hai fatto clic).Con findHomography puoi determinare l'omografia. Fai lo stesso per i segni sul terreno senza il palo, e hai le due omografie per telecamera.

Ora è possibile utilizzare le omografie per proiettare gli 8 punti d'angolo di un rettangolo in piedi in qualsiasi posizione nella stanza sulle loro coordinate dell'immagine per ciascuna telecamera. Prendi il riquadro di delimitazione di tutti gli 8 punti e avrai il rettangolo per quella stanza e quella telecamera.

Gli autori del metodo menzionato utilizzando una sagoma umana, questo indica che il loro approccio può essere più preciso rispetto all'utilizzo di un cuboide. Tuttavia, non esiste la sagoma di una persona in movimento, quindi la soluzione con il cuboide è probabilmente perfettamente funzionante.

+0

Grazie per la risposta. Mi è capitato di scoprirlo da solo nel frattempo. Ho in programma di scrivere una risposta esauriente con istruzioni chiare e codice di esempio e per questo motivo non ho contrassegnato la tua risposta come accettata. Inoltre: potresti dire dove menzionano esattamente l'uso della silhouette umana? Sono abbastanza sicuro che usano rettangoli semplici rivolti verso la fotocamera. – Bartosz

+2

A pagina 12 dell'articolo PAMI citano questo: "dalla calibrazione della fotocamera definiamo per ogni telecamera c una famiglia di forme rettangolari che corrispondono a grezze sagome umane di altezza 175 cm e larghezza 50 cm posizionate in ogni posizione della griglia." che per me suggeriva di usare un semplice modello 3D di una persona, proiettandolo su ogni telecamera per trovare il rettangolo di delimitazione. Tuttavia, potresti avere ragione che la loro definizione di "silhouette grezza" significa rettangolo rivolto verso la fotocamera. Non è ulteriormente spiegato nel documento. – dvhamme

3

Recentemente ho letto questo articolo e ho scavato il codice, quindi quello che ho capito dall'articolo + codice è più o meno quello di cui avete parlato.

Per riassumere, per ogni telecamera nel sistema, è necessario creare rettangoli che verranno successivamente utilizzati da POM come confronto con le sagome reali ottenute dall'algoritmo di sottostringa di sfondo (presupponendo che si siano già ottenuti quelli) ogni possibile posizione della griglia. Dato che ogni telecamera potrebbe non vedere tutte le posizioni della griglia nella scena, in questi casi si inserisce un tag "non visibile". Come già accennato, è necessario utilizzare i file di calibrazione per mappare le dimensioni dell'altezza di 175 cm e della larghezza di 50 cm in base alla prospettiva. vale a dire che i rettangoli più vicini dovrebbero essere più grandi di quelli successivi.

RETTANGOLO 0 414 150 0 159 119 mezzi; La videocamera 0 ipoteticamente vede un rettangolo nero sulla griglia 414 con le dimensioni di P1 (x, y) = (150,0) - P2 (x, y) = (159,119). Queste misure sono ottenute riproiettando 175 cm - 50 cm dal piano della testa (piano della telecamera 2D) al piano terra (piano 3D).

UPDATE: Ho provato quello che ho postato qui e sì, funziona.

+0

Ciao Karttinen, sto lavorando su POM e mi sto bloccando a generare le coordinate del rettangolo qui. Vorresti spiegare in maggior dettaglio come riproiettare 175 cm-50 cm dal piano di testa al piano terra? Immagino che per prima cosa devo interpolare le coordinate del rettangolo in ogni posizione dalla vista della telecamera originale, quindi usare la matrice di omografia per ottenere le nuove coordinate, giusto? Grazie. –

+1

Non sono sicuro al 100% se ho capito la tua domanda ma ecco come si creano i rettangoli per una determinata fotocamera; Per ogni posizione della griglia, convertire la posizione in coordinate di vista superiore (fornite nel sito Web di EPFL). Questo ti dà gli angoli del rettangolo nelle coordinate del mondo. Aggiungi 50 cm per la larghezza. Moltiplicare entrambi i punti con entrambi i piani terra e testa per ottenere le coordinate del piano e della testa del rettangolo (i risultati sono non omogenei, quindi è necessario dividere per l'ultimo elemento). Si noti che non si riproietta da capo a terra.Si proiettano i punti in vista dall'alto sul piano di massa 3D e sul piano di testa (coordinate del mondo). – karttinen

Problemi correlati