您的位置:首页 > 其它

基于模板匹配的运动目标跟踪

2014-07-07 17:29 399 查看
一、实验目的

通过该实验,初步了解模板匹配算法,体会并学习如何用该算法实现视频跟踪。

二、算法概要

模板就是一幅已知的小图像。模板匹配就是在一幅大图像中搜寻目标。已知在该图中有要寻找的目标,且该目标与模板有相同的尺寸、方向和图像,通过一定的算法可以在图中找到目标,确定其坐标位置。 如图1 所示,设模板T 叠放在搜索图S 上平移,模板覆盖下的那块搜索图叫做子图, 这块子图的左上角像素点在S 图中的坐标,叫参考点,从图中可知i 和j 的取值范围为: 0 i, j N -M , 其中,N x N 为被搜索图的大小,M x M 为模板T 的大小(如图 2 所示)。



可以用向量余弦夹角来衡量T 和 的相似程度:



当模板和子图完全一样时,R(i, j) =1。在被搜索图中逐个像素点地移动模板图像T ,同时 计算每处子图与模板的R 值,当移过整幅图像S 之后,找出R 的最大值 , 最大响应点坐标即为最佳匹配的左上角点。以该坐标为起始点,范围大小就以模板的大小为准就可以锁定目标。

三、算法步骤

(1)首先取得待跟踪的目标图像,该目标图像常较小,称该图像为模板,以T 表示;

(2)定义匹配公式以备在移动模板时得到匹配度;

(3)把模板T 在待检测的图像(往往是视频中的一帧帧图像)中移动,在模板覆盖下那块搜索图叫做子图,每移动到一个位置就按定义的匹配公式计算匹配度,直至移动完整幅图像为止;

(4)按照匹配度的大小,选择匹配度最大(即最匹配)的位置,此位置即为最佳匹配位置,以此点为起始点,范围的大小就以模板的大小为准,即可锁定目标;

(5)针对视频中的每一帧图像执行步骤(3)~(4),这样就达到了跟踪的目的。

四、程序使用说明

void TemplateMatch(unsigned char *pTo,unsigned char *pTemplate)

{

int p,q,m,n;

float y=0,x1=0,x2=0,R[200][200],max=0,s=0,t=0;

for(p=0;p<bmpimage.infohead.biHeight-bmptemplate.infohead.biHeight;p++)

for(q=0;q<bmpimage.infohead.biWidth-bmptemplate.infohead.biWidth;q++)

{

y=0;x1=0;x2=0;

for(m=0;m<bmptemplate.infohead.biHeight;m++)

for(n=0;n<bmptemplate.infohead.biWidth;n++)

{

s=*(bmpimage.imgbuf+((m+p)*bmpimage.infohead.biWidth+(n+q)));

t=*(bmptemplate.imgbuf+(m*bmptemplate.infohead.biWidth+n));

y+=s*t;

x1+=s*s;

x2+=t*t;

}

R[p][q]=y/(sqrt(x1)*sqrt(x2));

}

for(p=0;p<bmpimage.infohead.biHeight-bmptemplate.infohead.biHeight;p++)

for(q=0;q<bmpimage.infohead.biWidth-bmptemplate.infohead.biWidth;q++)

{

if(R[p][q]>max)

{

max=R[p][q];

nMaxX=q;

nMaxY=p;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: