אלגוריתם מעקב מרובה#
מעקב מרובה הוא אלגוריתם פשוט למעקב אחר עצמים מרובים עבור ה-CMUcam3, שפותח על ידי Steve Sherman עבור ד“ר Derek Paley במעבדת Collective Dynamics and Control שבאוניברסיטת Maryland College Park. ליבת האלגוריתם היא הפעלת מעקב צבע פשוט על אזורים קטנים של מסגרת התמונה, ולאחר מכן מיזוג התיבות התוחמות המוחזרות זו עם זו כדי לתת רשימה של העצמים שנמצאו.
בתמונה טיפוסית של שלושה ערוצים ברזולוציה מלאה, multitrack ייקח בערך 450 ms לביצוע. זאת בהשוואה ל-300ms עבור simple_color_track, ו-200ms עבור חיפוש בסיסי של פיקסלים בהירים. בתמונה של ערוץ יחיד ברזולוציה מלאה, multitrack ייקח כ-340ms, מעקב צבע פשוט כ-200ms ופיקסל בהיר כ-150ms בקירוב. אני בטוח שיש הרבה אופטימיזציות שניתן לבצע, אז אל תהססו להתעסק ולשפר את האלגוריתם.
דוגמה לקריאה של 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 לדוגמה, אך אם יש לך שאלות כלשהן אתה מוזמן לשאול בפורומים.