算法思想:我们把要跟踪的目标保存好,然后在每一帧来临的时候,我们在整个图像中寻找与这个目标最相似的,我们就相信这个就是目标了。
相似性的计算——模板匹配中差值的平方和(SSD)与互相关准则的关系
http://blog.csdn.net/zouxy09/article/details/8549743
实现函数:
void matchTemplate( const Mat& image, const Mat& templ, Mat&result, int method );
该函数的功能为,在输入源图像Sourceimage(I)中滑动框,寻找各个位置与模板图像Template image(T)的相似度,并将结果保存在结果矩阵result matrix(R)中。该矩阵的每一个点的亮度表示与模板T的匹配程度。然后可以通过函数minMaxLoc定位矩阵R中的最大值(该函数也可以确定最小值)。
minMaxLoc函数原型:
void minMaxLoc( const Mat& src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0, const Mat& mask=Mat() ); void minMaxLoc(const MatND& src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0, const MatND& mask=MatND() ); void minMaxLoc(const SparseMat& src, double* minVal, double* maxVal, int* minIdx=0, int* maxIdx=0);
然后为了适应目标的变化,我们就需要随时更新我们要跟踪的目标。换句话来说,在第t帧寻找目标的时候,是与t-1帧中我们找到的目标来进行比较的。这样目标的外观变化就会及时的更新。这个就叫做在线跟踪方法。
缺点:这个策略会导致跟踪漂移的问题,这就是近几年很多跟踪算法关注的重要问题之一了。实际情况下是复杂的,比如多个人在走,互相交叉,画面上人比较小,特征不明显等问题都会出现。例如两个身高体型差不多,衣服颜色也差不多的人互相交叉走过。还会有人走着走着忽然被障碍挡住了,然后重新出现,等等去情况,导致这种程序放到真实环境视频中,根本没法正常使用。