Multi-Track-algoritme#
Multi-track is een eenvoudig algoritme voor het volgen van meerdere objecten voor de CMUcam3, ontwikkeld door Steve Sherman voor Dr. Derek Paley aan het Collective Dynamics and Control Lab van de University of Maryland College Park. De kern van het algoritme is om eenvoudige kleurtracking aan te roepen op kleine gebieden van het beeldframe en vervolgens de geretourneerde bounding boxes weer samen te voegen om een lijst met gevonden objecten te geven.
Op een typisch drie-kanaals volledige-resolutiebeeld duurt het uitvoeren van multitrack ongeveer 450 ms. Dit is in vergelijking met 300 ms voor simple_color_track en 200 ms voor een eenvoudige heldere-pixelzoekopdracht. Op een volledige-resolutie enkel-kanaalsbeeld duurt multitrack ~340 ms, eenvoudige kleurtracking ~200 ms en heldere pixel ongeveer 150 ms. Ik weet zeker dat er veel optimalisaties te maken zijn, dus voel je vrij om te sleutelen aan en het algoritme te verbeteren.
Een voorbeeldaanroep van 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;
Elke multitrack_pkt_t is als volgt gedefinieerd:
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;
Verdere documentatie zou beschikbaar moeten zijn in de broncode, evenals een voorbeeld-mainbestand, maar als je vragen hebt, stel ze gerust in de forums.