خوارزمية التتبع المتعدد#
Multi-track هي خوارزمية بسيطة لتتبع أجسام متعددة لـ CMUcam3 طوّرها Steve Sherman للدكتور 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 نموذجي، لكن إذا كان لديك أي أسئلة فلا تتردد في السؤال في المنتديات.