Алгоритм 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, але якщо у вас є будь-які запитання, не соромтеся запитувати на форумах.