Algoritm Multi-Track#
Multi-track este un algoritm simplu de urmărire a mai multor obiecte pentru CMUcam3 dezvoltat de Steve Sherman pentru Dr. Derek Paley la Collective Dynamics and Control Lab al University of Maryland College Park. Nucleul algoritmului constă în apelarea unei urmăriri simple de culoare pe zone mici ale cadrului de imagine și apoi îmbinarea casetelor de delimitare returnate pentru a oferi o listă de obiecte găsite.
Pe o imagine tipică de rezoluție completă cu trei canale, multitrack va dura aproximativ 450 ms pentru a se executa. Aceasta în comparație cu 300 ms pentru simple_color_track și 200 ms pentru o căutare de bază a pixelilor luminoși. Pe o imagine de rezoluție completă cu un singur canal, multitrack va dura ~340 ms, urmărirea simplă a culorii ~200 ms și pixelul luminos aproximativ 150 ms. Sunt sigur că există multe optimizări de făcut, așa că nu ezitați să experimentați și să îmbunătățiți algoritmul.
Un exemplu de apelare a 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;
Fiecare multitrack_pkt_t este definit după cum urmează:
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;
Documentație suplimentară ar trebui să fie disponibilă în sursă, precum și un fișier main de exemplu, dar dacă aveți întrebări, nu ezitați să întrebați pe forumuri.