模板匹配函数详解

算法思想:我们把要跟踪的目标保存好,然后在每一帧来临的时候,我们在整个图像中寻找与这个目标最相似的,我们就相信这个就是目标了。

相似性的计算——模板匹配中差值的平方和(SSD)与互相关准则的关系

http://blog.csdn.net/zouxy09/article/details/8549743

实现函数:

     void matchTemplate( const Mat& image, const Mat& templ, Mat&result, int method );

      该函数的功能为,在输入源图像SourceimageI)中滑动框,寻找各个位置与模板图像Template imageT)的相似度,并将结果保存在结果矩阵result matrixR)中。该矩阵的每一个点的亮度表示与模板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);

说明
1 minMaxLoc寻找矩阵(一维数组当作向量,Mat定义中最小值和最大值的位置
参数若不需要,则置为NULL或者0,即可
3 minMaxLoc针对MatMatND的重载中 ,5个参数是可选的(optional),不使用不传递即可.

然后为了适应目标的变化,我们就需要随时更新我们要跟踪的目标。换句话来说,在第t帧寻找目标的时候,是与t-1帧中我们找到的目标来进行比较的。这样目标的外观变化就会及时的更新。这个就叫做在线跟踪方法。

缺点:这个策略会导致跟踪漂移的问题,这就是近几年很多跟踪算法关注的重要问题之一了。实际情况下是复杂的,比如多个人在走,互相交叉,画面上人比较小,特征不明显等问题都会出现。例如两个身高体型差不多,衣服颜色也差不多的人互相交叉走过。还会有人走着走着忽然被障碍挡住了,然后重新出现,等等去情况,导致这种程序放到真实环境视频中,根本没法正常使用。

你可能感兴趣的:(图像处理算法)