基於sift特徵的動態場景小目標跟蹤演算法
阿新 • • 發佈:2019-02-16
第3步: kd樹搜尋匹配到的特徵點,更新目標位置資訊。
kd_root = kdtree_build( feat2, n2 );
for( i = 0; i< n1; i++ )
{
feat = feat1 + i;
k = kdtree_bbf_knn( kd_root, feat, 2, &nbrs, KDTREE_BBF_MAX_NN_CHKS );
if( k == 2 )
{
d0 = descr_dist_sq( feat, nbrs[0] );
d1 = descr_dist_sq( feat, nbrs[1] );
if( d0 < d1 *0.5 )
{
pt4 = cvPoint( cvRound( feat->x ), cvRound( feat->y ) );
pt5 = cvPoint( cvRound( nbrs[0]->x ), cvRound( nbrs[0]->y ) );
p++;
pt.x=pt.x+pt5.x;
pt.y=pt.y+pt5.y;
feat1[i].fwd_match = nbrs[0];
scl1 = scl1+feat->scl;
scl2 = scl2+nbrs[0]->scl;
}
}
free( nbrs );
}
第4步: 更新目標位置資訊,畫框。
pt1.x=pt.x-0.5*width;
pt1.y=pt.y-0.5*height;
pt2.x=pt.x+0.5*width;
pt2.y=pt.y+0.5*height;
cvRectangle(frame,pt1,pt2,cvScalar(0,0,255,0),1,8,0);
第5步: 第4步更新的位置資訊之後,再依次進行第2步、第3步、第4步,直到幀數到達一定值後,終止迴圈。
kd_root = kdtree_build( feat2, n2 );
for( i = 0; i< n1; i++ )
{
feat = feat1 + i;
k = kdtree_bbf_knn( kd_root, feat, 2, &nbrs, KDTREE_BBF_MAX_NN_CHKS );
if( k == 2 )
{
d0 = descr_dist_sq( feat, nbrs[0] );
d1 = descr_dist_sq( feat, nbrs[1] );
if( d0 < d1 *0.5 )
{
pt4 = cvPoint( cvRound( feat->x ), cvRound( feat->y ) );
pt5 = cvPoint( cvRound( nbrs[0]->x ), cvRound( nbrs[0]->y ) );
p++;
pt.x=pt.x+pt5.x;
pt.y=pt.y+pt5.y;
feat1[i].fwd_match = nbrs[0];
scl1 = scl1+feat->scl;
scl2 = scl2+nbrs[0]->scl;
}
}
free( nbrs );
}
第4步: 更新目標位置資訊,畫框。
pt1.x=pt.x-0.5*width;
pt1.y=pt.y-0.5*height;
pt2.x=pt.x+0.5*width;
pt2.y=pt.y+0.5*height;
cvRectangle(frame,pt1,pt2,cvScalar(0,0,255,0),1,8,0);
第5步: 第4步更新的位置資訊之後,再依次進行第2步、第3步、第4步,直到幀數到達一定值後,終止迴圈。