前言
模板匹配和相关系数法是目标跟踪的经典方法,它的优点有很多:简单准确,适用面广,抗噪性好,而且计算速度快。缺点是不能适应剧烈光照变化和目标剧烈形变。
所谓模板匹配法,就是指在一帧图像内寻找目标模板的位置,和模板最像的地方就是目标了。只要把全图的所有子区域和目标模板比较一下,找到最像目标模板的子区域,它就是目标的位置。如何度量子区域和目标模板的相似程度呢?最简单的办法就是计算这二者的相关系数。
相关系数
相关系数(r)是一种数学距离,可以用来衡量两个向量的相似程度。它起源于余弦定理:cos(A)=(a2+c2-b2)/2bc.如果两个向量的夹角为0度(对应r=1),说明它们完全相似,如果夹角为90度(r=0),则它们完全不相似,如果夹角为180度(r=-1),则它们完全相反。把余弦定理写成向量的形式:
cos(A) = <b,c>/(|b|*|c|),
即:cos(A) = (b1c1+b2c2+… bncn)/sqrt[(b12+b22+…+bn2) (c12+c22+…+cn2)]
其中分子表示两个向量的内积,分母表示两个向量的模相乘。
在实际应用中,更常用的是去均值相关系数,它在上式的基础上还要在分子分母减去各个向量的均值:
这样,两个向量相似的部分被减掉,它们的相关性就被放大了。
假设目标模板是一个10*10的图像,它就可以被看作是一个100维的向量,每一维是一个像素点的灰度值。然后把这个向量和图像中的每一个子区域作比较,找出相关系数最大的子区域,目标的位置就找到了。
算法加速
按照上文的方法在一帧600*800的图像中寻找一个30*30的目标大概需要几秒的时间,还远远达不到实时性的要求。上式可以化简加速的地方有很多,将原式变形:
其中xi的求和,分母的左半部分都是一个常数,不必每次都算。分子的左边,yi求和,分母的右边可以通过intergral image的方法来加速。通过这些加速方法,算法的速度可以达到每帧100ms以内,但还是不能达到实时的标准。
搜索策略
在搜索时,最笨的方法就是暴力式逐行遍历搜索,把图像中的每一个子区域都计算一遍。实际上目标往往只在一个非常小的区域出现,很多地方根本没必要计算。所以在搜索时,如果当前位置的相关系数小于一定阈值或者该位置离上一帧的目标中心很远的时候,搜索的步长可以加大,反之则减小搜索步长。
另一种搜索方法是以上一帧的目标中心为起点,以梯度下降的方法来搜索目标。该方法有一点需要注意,如果目标运动幅度较大,需要利用图像金字塔的方法搜索。
这两种方法都能够使算法的速度达到30ms以内。
模板大小
模板大小的确定往往是一个经验值,紧帖目标轮廓的模板或者包含太多背景的模板都不好,前者的模板太小,它对目标的变化太敏感,会很容易丢失目标。后者正相反,目标变化的时候算法却没有反应。一般而言,目标所占模板的比例在30%~50%为佳。