Algorytm Multi-Track#
Multi-track to prosty algorytm śledzenia wielu obiektów dla CMUcam3 opracowany przez Steve’a Shermana dla dr. Dereka Paleya w Collective Dynamics and Control Lab na University of Maryland College Park. Rdzeniem algorytmu jest wywołanie prostego śledzenia koloru na małych obszarach klatki obrazu, a następnie scalenie zwróconych ramek ograniczających z powrotem, aby uzyskać listę znalezionych obiektów.
Na typowym trzykanałowym obrazie w pełnej rozdzielczości wykonanie multitrack zajmuje około 450 ms. To w porównaniu do 300 ms dla simple_color_track i 200 ms dla podstawowego wyszukiwania jasnych pikseli. Na jednokanałowym obrazie w pełnej rozdzielczości multitrack zajmie ~340 ms, proste śledzenie koloru ~200 ms, a jasny piksel około 150 ms. Jestem pewien, że można wprowadzić wiele optymalizacji, więc śmiało majsterkuj i ulepszaj algorytm.
Przykładowe wywołanie 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;
Każdy multitrack_pkt_t jest zdefiniowany następująco:
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;
Dalsza dokumentacja powinna być dostępna w kodzie źródłowym, podobnie jak przykładowy plik main, ale jeśli masz jakiekolwiek pytania, śmiało zadaj je na forach.