Multi-Track-Algorithmus#

Multi-Track ist ein einfacher Algorithmus zum Verfolgen mehrerer Objekte für die CMUcam3, entwickelt von Steve Sherman für Dr. Derek Paley am Collective Dynamics and Control Lab der University of Maryland College Park. Der Kern des Algorithmus besteht darin, einfaches simple color track auf kleinen Bereichen des Bildrahmens aufzurufen und dann die zurückgegebenen Begrenzungsrahmen wieder zusammenzuführen, um eine Liste der gefundenen Objekte zu erhalten.

Bei einem typischen dreikanaligen Bild mit voller Auflösung benötigt multitrack etwa 450 ms zur Ausführung. Dies steht im Vergleich zu 300 ms für simple_color_track und 200 ms für eine einfache Hell-Pixel-Suche. Bei einem einkanaligen Bild mit voller Auflösung benötigt multitrack ~340 ms, simple color track ~200 ms und bright pixel etwa 150 ms. Ich bin sicher, dass es viele Optimierungen gibt, die vorgenommen werden können, also können Sie gerne herumbasteln und den Algorithmus verbessern.

Ein Beispielaufruf von 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;

Jeder multitrack_pkt_t ist wie folgt definiert:

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;

Weitere Dokumentation sollte im Quellcode verfügbar sein, ebenso wie eine Beispiel-Hauptdatei, aber wenn Sie Fragen haben, können Sie diese gerne in den Foren stellen.