Алгоритм Multi-Track#

Multi-track — це простий алгоритм відстеження кількох об’єктів для CMUcam3, розроблений Steve Sherman для Dr. Derek Paley у лабораторії колективної динаміки та керування Університету Меріленду в Колледж-Парку. Суть алгоритму полягає у виклику простого відстеження кольору на невеликих ділянках кадру зображення, а потім об’єднанні повернених обмежувальних рамок разом, щоб дати список знайдених об’єктів.

На типовому трьохканальному зображенні повної роздільної здатності виконання multitrack займе близько 450 мс. Це порівняно з 300 мс для simple_color_track і 200 мс для базового пошуку яскравих пікселів. На одноканальному зображенні повної роздільної здатності multitrack займе ~340 мс, просте відстеження кольору ~200 мс, а яскравий піксель приблизно 150 мс. Я впевнений, що можна зробити багато оптимізацій, тож не соромтеся поекспериментувати та покращити алгоритм.

Приклад виклику 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;

Кожен multitrack_pkt_t визначено так:

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;

Додаткова документація має бути доступна у вихідному коді, а також зразковий файл main, але якщо у вас є будь-які запитання, не соромтеся запитувати на форумах.