Algorithme Multi-Track#
Multi-track est un algorithme simple de suivi de plusieurs objets pour la CMUcam3 développé par Steve Sherman pour le Dr Derek Paley au Collective Dynamics and Control Lab de l’Université du Maryland College Park. Le cœur de l’algorithme consiste à appeler un simple suivi de couleur sur de petites zones de l’image, puis à fusionner les cadres englobants renvoyés pour donner une liste des objets trouvés.
Sur une image typique à trois canaux en pleine résolution, multitrack prendra environ 450 ms à s’exécuter. À titre de comparaison, cela représente 300 ms pour simple_color_track et 200 ms pour une recherche de pixels lumineux basique. Sur une image à un seul canal en pleine résolution, multitrack prendra environ 340 ms, le suivi de couleur simple environ 200 ms et la recherche de pixels lumineux environ 150 ms. Je suis sûr qu’il y a de nombreuses optimisations à faire, alors n’hésitez pas à bricoler et à améliorer l’algorithme.
Un exemple d’appel de 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;
Chaque multitrack_pkt_t est défini comme suit :
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;
Une documentation supplémentaire devrait être disponible dans le source, ainsi qu’un fichier main d’exemple, mais si vous avez des questions, n’hésitez pas à les poser sur les forums.