Algoritmo Multi-Track#
O Multi-track é um algoritmo simples de rastreamento de múltiplos objetos para a CMUcam3 desenvolvido por Steve Sherman para o Dr. Derek Paley no Collective Dynamics and Control Lab da University of Maryland College Park. O núcleo do algoritmo é chamar o rastreamento de cor simples em pequenas áreas do quadro da imagem e depois mesclar novamente as caixas delimitadoras retornadas para fornecer uma lista de objetos encontrados.
Em uma imagem típica de resolução completa de três canais, o multitrack levará cerca de 450 ms para executar. Isso em comparação com 300ms para o simple_color_track e 200ms para uma busca básica de pixel brilhante. Em uma imagem de resolução completa de canal único, o multitrack levará ~340ms, o rastreamento de cor simples ~200ms e o pixel brilhante aproximadamente 150ms. Tenho certeza de que há muitas otimizações a serem feitas, então sinta-se à vontade para mexer e melhorar o algoritmo.
Um exemplo de chamada do 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 é definido da seguinte forma:
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;
Documentação adicional deve estar disponível no código-fonte, bem como um arquivo main de exemplo, mas se você tiver alguma dúvida, sinta-se à vontade para perguntar nos fóruns.