Multi-Track algoritam#
Multi-track je jednostavan algoritam za praćenje više objekata za CMUcam3 koji je razvio Steve Sherman za dr. Dereka Paleya u laboratoriju Collective Dynamics and Control Lab na Sveučilištu Maryland u College Parku. Srž algoritma je pozivanje jednostavnog praćenja boje na malim područjima slikovnog okvira, a zatim spajanje vraćenih graničnih okvira kako bi se dobio popis pronađenih objekata.
Na tipičnoj trokanalnoj slici pune razlučivosti, multitrack će za izvršavanje trebati oko 450 ms. Ovo je u usporedbi s 300 ms za simple_color_track i 200 ms za osnovno pretraživanje svijetlih piksela. Na slici pune razlučivosti s jednim kanalom, multitrack će trebati ~340 ms, jednostavno praćenje boje ~200 ms, a svijetli piksel približno 150 ms. Siguran sam da se može napraviti mnogo optimizacija, pa slobodno prčkajte i poboljšajte algoritam.
Primjer poziva 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;
Svaki multitrack_pkt_t definiran je kako slijedi:
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;
Daljnja dokumentacija trebala bi biti dostupna u izvornom kodu, kao i primjer main datoteke, no ako imate bilo kakvih pitanja, slobodno pitajte na forumima.