cvMeanShift

meanshift是由Comaniciu最先提出来,是用于跟踪非刚性物体的一种算法。本的介绍也是源自Comaniciu的文章。下面是文章的一些基本信息:

Title:Kernel-Based Object Tracking

Authors:Dorin Comaniciu, Senior Member, IEEE, Visvanathan Ramesh, Member, IEEE, and Peter Meer, Senior Member, IEEE

Publication:IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 25, NO. 5, MAY 2003.pp564-577.

        同时,由于公式不容易直接粘贴过来,读者如有兴趣或疑问,请参考原文。另外,这里只介绍主要算法。

       为了表征目标,首先需要选择一个特征空间。参考目标,用在特征空间中概率密度函数q表示,例如参考模型可以选择目标的颜色概率密度函数。不失一般性,目标模型可以认为中心处于其所在空间的中心。在下一帧候选目标被定义为在位置y,用概率密度函数p(y)来表示。为了满足实时性的要求,它们分别用非参数的方法中的直方图统计^q和^p(y)表示。

        目标和候选直方图之间的相似度函数记作公式(1),相似度的局部最大意味着在候选模型与目标模型匹配。如果仅考虑颜色信息,候选区域的相似度变化会很大,匹
配效果不好。为了得到一个连续性的相似度函数,在空间域内,用一个核函数对目标
区域做滤波处理。

         目标模型中的特征概率可以用等式(2)来计算,其中表示归一化的像素位置,k(x)是一个凸的单调递减的核函数,它为距离中心远的像素分配小的权值,距离中心近的像素分配大的权值,b表示位置直方图索引,C为归一化常数。同理,对于目标候选模型也是用同样的k(x),但是带有带宽h,特征概率可以用等式(4)来计算。相似度函数定义了目标模型和候选模型的距离,  ^p和^q 的相似度函数用Bhattacharyya系数表示,公式(8,9)。

       在当前帧中,目标模型的匹配位置就是等式(9)中第二项的最大值。可以看出,在当前帧下,等式(9)的第二项用y位置核截面用k(x)的计算的概率密度和权重w表示。在邻域内,可以应用Meanshift过程找到最大的模式。在这个过程中,核通过等式(11) 从当前位置^y0移动到新的位置^y1。如此,循环迭代实现目标的跟踪。

        采用meshift算法可以实时实现物体的跟踪,但是该方法因为基于颜色直方图因此对于颜色变化敏感,而且该法搜索窗口规定,同时不能实现较大幅度的跟踪,克服这个问题可以参考Camshift,opencv有实例。

       另外,如果有需要其源代码的,请给我留言! 

你可能感兴趣的:(c,算法,object,transactions)