基于模板匹配的运动目标跟踪
2014-07-07 17:29
399 查看
一、实验目的
通过该实验,初步了解模板匹配算法,体会并学习如何用该算法实现视频跟踪。
可以用向量余弦夹角来衡量T 和 的相似程度:
当模板和子图完全一样时,R(i, j) =1。在被搜索图中逐个像素点地移动模板图像T ,同时 计算每处子图与模板的R 值,当移过整幅图像S 之后,找出R 的最大值 , 最大响应点坐标即为最佳匹配的左上角点。以该坐标为起始点,范围大小就以模板的大小为准就可以锁定目标。
(2)定义匹配公式以备在移动模板时得到匹配度;
(3)把模板T 在待检测的图像(往往是视频中的一帧帧图像)中移动,在模板覆盖下那块搜索图叫做子图,每移动到一个位置就按定义的匹配公式计算匹配度,直至移动完整幅图像为止;
(4)按照匹配度的大小,选择匹配度最大(即最匹配)的位置,此位置即为最佳匹配位置,以此点为起始点,范围的大小就以模板的大小为准,即可锁定目标;
(5)针对视频中的每一帧图像执行步骤(3)~(4),这样就达到了跟踪的目的。
{
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;
}
}
}
通过该实验,初步了解模板匹配算法,体会并学习如何用该算法实现视频跟踪。
二、算法概要
模板就是一幅已知的小图像。模板匹配就是在一幅大图像中搜寻目标。已知在该图中有要寻找的目标,且该目标与模板有相同的尺寸、方向和图像,通过一定的算法可以在图中找到目标,确定其坐标位置。 如图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;
}
}
}
相关文章推荐
- 同一窗口下基于KCF 目标跟踪和基于模板匹配的目标跟踪效果比较
- opencv学习-模板匹配算法(单图像模板匹配和基于模板匹配的目标跟踪)
- 要点初见:OpenCV3中基于模板匹配的目标跟踪思路
- 模式识别之目标跟踪---最简单的目标跟踪方法--------模板匹配与相关系数法
- 最简单的目标跟踪-模板匹配跟踪(转)
- 基于光流分析的运动目标快速检测与跟踪融合算法
- 工程实践总结(基于USB的人脸识别与跟踪)和基于USB的运动目标运动跟踪
- OpenCV3模板匹配实现目标识别与跟踪
- 目标跟踪之模板匹配---简单的模板匹配
- 基于OpenCV的运动目标检测跟踪系统在PC上的软件设计流程
- 使用Opencv中matchTemplate模板匹配方法跟踪移动目标
- 最简单的目标跟踪-模板匹配跟踪
- 使用Opencv中matchTemplate模板匹配方法跟踪移动目标
- 基于opencv的L-K光流法跟踪运动目标
- 目标跟踪之——多尺度模板匹配
- 一种基于轮廓的运动目标检测与跟踪算法
- 基于模板的全自动目标检测跟踪系统的设想
- OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope
- 一种基于直方图模式的运动目标实时跟踪算法
- 基于单目视觉的移动机器人室内定位与运动目标跟踪