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.