本文共 1093 字,大约阅读时间需要 3 分钟。
基于模板匹配的目标跟踪算法,它的基本思想是:首先我们将要跟踪的目标选定并保存好,然后在每一帧来临的时候,我们在整个图像中寻找与这个目标最相似的,我们就相信这个就是目标了。
那如何判定图像与目标图像的相似性呢?这就需要使用相关性的一些东西。在opencv中其实已经给我们实现了模板匹配算法了,那就是函数 matchTemplate( InputArray image, InputArray templ,OutputArray result, int method );其中image是输入图像,templ是模板图像(或者目标图像),result是输出矩阵,这个矩阵中的每一个点的值表示image与模板templ的匹配程度,method是判定相似性使用的方法,在opencv中method,有如下:
/* Template matching methods */ enum { CV_TM_SQDIFF =0, CV_TM_SQDIFF_NORMED =1, CV_TM_CCORR =2, CV_TM_CCORR_NORMED =3, CV_TM_CCOEFF =4, CV_TM_CCOEFF_NORMED =5 };
其中,
1.CV_TM_SQDIFF 平方差匹配法,最好的匹配为0,值越大匹配越差;(越小的值表示越匹配) 2.CV_TM_SQDIFF_NORMED 归一化平方差匹配法;(越小的值表示越匹配) 3.CV_TM_CCORR 相关匹配法,采用乘法操作,数值越大表明匹配越好;(越大的值表示越匹配) 4.CV_TM_CCORR_NORMED 归一化相关匹配法;(越大的值表示越匹配) 5.CV_TM_CCOEFF 相关系数匹配法,最好的匹配为1,-1表示最差的匹配;(越大的值表示越匹配) 6.CV_TM_CCOEFF_NORMED 归一化相关系数匹配法;(越大的值表示越匹配)
在这里,CV_TM_SQDIFF为:Sumof Squared Difference (SSD) 差值的平方和。
下面使用vs2010+opencv2.4.6,对给定的视频的文件,首先先显示第一帧,然后我们用鼠标框选要跟踪的目标,然后跟踪器开始跟踪每一帧,还需要注意的是,在跟踪的过程中,我们需要随时更新我们要跟踪的目标,即在跟踪t帧的时候,也就是在第t帧寻找目标的时候,是与t-1帧中我们找到的目标来进行比较的。这样目标的外观变化就会及时的更新。这个就叫做online tracking (在线跟踪)。当然了,这个策略会导致跟踪漂移的问题。
参考1:,
参考2:,
参考3:,
参考4:
转载地址:http://fbpti.baihongyu.com/