TLD源碼--lk.cpp


    lk.cpp在mex文件夾下面,在compile時和Opencv的庫文件一起編譯,在tldExample->tldProcessFrame->tldTracking中被調用,輸入前一幀圖像,後一幀圖像和前一幀目標窗口提取的特徵矩陣,這個矩陣是平均散落在目標窗口中的,並非是特殊的角點,因此也帶來了一些問題,就是圖像比較複雜時跟蹤出錯情況很明顯,比如有許多人,而且發生遮擋頻繁時,tld就根本跟蹤不到目標了。lk文件處理兩種情況,第一種case 0是對變量的初始化,IMG是存放輸入圖像的,PYR是放金字塔緩存的,CvPoint2D32f* points[3] = {0,0,0};是指向圖像中點的指針,CvPoint2D32f定義如下:

typedef struct CvPoint2D32f
{
    float x;
    float y;
}
CvPoint2D32f;

case 2是用來處理跟蹤的,lk(2,tld.img{I}.input,tld.img{J}.input,xFI,xFI),2用來選擇處理哪類問題,tld.img{I}.input前一幀圖像,是原始圖像未處理過,tld.img{J}.input,後一幀圖像,xFI是選取的特徵點矩陣。

其中的主要函數:loadImageFromMatlab()顧名思義,就是把matlab裏的圖像,其實就是一個二維矩陣,讀入到Iplimg類型的變量裏去,其實就是存到imagedata結構裏面。cvCalcOpticalFlowPyrLK,主要的跟蹤處理函數,具體流程也不太熟,目的是在下一幀圖像中跟蹤前一幀的點,結果放入status數組中,status[i]==1表示跟蹤上,==0表示沒有跟蹤上,normCrossCorrelation是對跟蹤上的點,計算匹配度,就是計算ncc的值,euclideanDistance是計算相應的點對之間的歐式距離,計算fb的值。lk(2,tld.img{I}.input,tld.img{J}.input,xFI,xFI)這句的輸出是一個列向量集,每列對應着一個點,前兩個是x,y 座標,後兩個是匹配度和歐式距離。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章