Multi-Track-algoritm#
Multi-track är en enkel algoritm för spårning av flera objekt för CMUcam3, utvecklad av Steve Sherman för Dr. Derek Paley vid University of Maryland College Parks Collective Dynamics and Control Lab. Kärnan i algoritmen är att anropa enkel färgspårning på små områden av bildrutan och sedan slå ihop de returnerade begränsningsrutorna igen för att ge en lista över hittade objekt.
På en typisk trekanalig fullupplöst bild tar multitrack cirka 450 ms att köra. Detta jämfört med 300 ms för simple_color_track och 200 ms för en enkel ljus-pixel-sökning. På en fullupplöst enkanalig bild tar multitrack ~340 ms, enkel färgspårning ~200 ms och ljus pixel ungefär 150 ms. Jag är säker på att det finns många optimeringar att göra, så mixtra gärna med och förbättra algoritmen.
Ett exempel på anrop av 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;
Varje multitrack_pkt_t definieras enligt följande:
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;
Ytterligare dokumentation bör finnas tillgänglig i källkoden, samt en exempel-main-fil, men om du har några frågor är du välkommen att fråga i forumen.