Algoritmo Multi-Track#

O Multi-track é um algoritmo simples de seguimento 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 consiste em chamar o simple color track em pequenas áreas do frame de imagem e depois voltar a juntar as caixas delimitadoras devolvidas para dar uma lista dos objetos encontrados.

Numa imagem típica de resolução completa com três canais, o multitrack demorará cerca de 450 ms a executar. Isto em comparação com 300ms para o simple_color_track e 200ms para uma pesquisa básica de pixels brilhantes. Numa imagem de resolução completa de um único canal, o multitrack demorará ~340ms, o simple color track ~200ms e o bright pixel aproximadamente 150ms. De certeza que há muitas otimizações a fazer, por isso sinta-se à vontade para mexer e melhorar o algoritmo.

Um exemplo de chamada 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;

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;

Deverá estar disponível mais documentação no código-fonte, bem como um ficheiro main de exemplo, mas se tiver alguma questão, sinta-se à vontade para perguntar nos fóruns.