Algoritmo Multi-Track#
Multi-track è un semplice algoritmo di tracciamento di oggetti multipli per la CMUcam3 sviluppato da Steve Sherman per il Dr. Derek Paley presso il Collective Dynamics and Control Lab della University of Maryland College Park. Il cuore dell’algoritmo consiste nel chiamare un semplice tracciamento del colore su piccole aree del fotogramma dell’immagine e poi unire nuovamente i riquadri di delimitazione restituiti per fornire un elenco di oggetti trovati.
Su una tipica immagine a tre canali a piena risoluzione, multitrack impiega circa 450 ms per essere eseguito. Questo in confronto ai 300 ms di simple_color_track e ai 200 ms di una ricerca di base dei pixel luminosi. Su un’immagine a canale singolo a piena risoluzione, multitrack impiega ~340 ms, simple color track ~200 ms e la ricerca dei pixel luminosi circa 150 ms. Sono sicuro che ci sono molte ottimizzazioni da fare, quindi sentiti libero di armeggiare e migliorare l’algoritmo.
Un esempio di chiamata di multitrack:
multitrack_pkt_t tracker;
cc3_pixbuf_load(); //takes picture
multitrack(&tracker);
//make sure to free the memory after you are done to prevent a memory leak
free(tracker.objects);
tracker.entries=0;
Ogni multitrack_pkt_t è definito come segue:
typedef struct {
uint8_t entries; // the number of objects
cc3_track_pkt_t* objects;//pointer to the array of objects
cc3_track_pkt_t base; //the reference color data
uint8_t divh; //number of rows of blocks
uint8_t divw; //number of columns of blocks
uint16_t tolerance; //max distance track_pkts must be to merge
uint8_t minpix; // minimum number of pixels to not be filtered
uint8_t mindensity; //minimum density to not be filtered
uint8_t minwidth; //minimum dimension of a track pkt
} multitrack_pkt_t;
Ulteriore documentazione dovrebbe essere disponibile nel codice sorgente, così come un file main di esempio, ma se hai domande sentiti libero di chiedere nei forum.