Algoritmo Multi-Track#
Multi-track es un sencillo algoritmo de seguimiento de múltiples objetos para la CMUcam3 desarrollado por Steve Sherman para el Dr. Derek Paley en el Collective Dynamics and Control Lab de la Universidad de Maryland College Park. El núcleo del algoritmo consiste en llamar al sencillo seguimiento de color simple sobre pequeñas áreas del fotograma de imagen y luego fusionar de nuevo los cuadros delimitadores devueltos para dar una lista de los objetos encontrados.
En una imagen típica de tres canales a resolución completa, multitrack tardará alrededor de 450 ms en ejecutarse. Esto se compara con 300 ms para simple_color_track y 200 ms para una búsqueda básica de píxeles brillantes. En una imagen de un solo canal a resolución completa, multitrack tardará ~340 ms, simple color track ~200 ms y píxel brillante aproximadamente 150 ms. Estoy seguro de que hay muchas optimizaciones por hacer, así que siéntase libre de experimentar y mejorar el algoritmo.
Un ejemplo de llamada a 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;
Cada multitrack_pkt_t se define de la siguiente manera:
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;
Debería haber más documentación disponible en el código fuente, así como un archivo main de muestra, pero si tiene alguna pregunta, siéntase libre de preguntar en los foros.