Camshift算法引言大多数特征跟踪算法的执行都遵循下图所示的目标预测——特征检测——模板匹配——更新四个步骤的闭环结构。首先,以前一帧目标位置和一些运动模型为基础,预测当前帧中目标的可能位置。接着,候选区域的特征和初始特征相匹配,通过优化匹配准则来选择最好的匹配对象,其相应的目标区域即为目标在本帧的位置。算法设计的不同常常由于选择什么特征、预测如何进行、如何选择匹配准则等的不同而不同。许多对目标跟踪算法的完善也是从这三个方面寻找改善措施的。除了位置更新步骤,其余三个步骤一般在一个迭代中完成。目标预测步骤主要基于目标的运动模型,运动模型可以是很简单的等速平移运动,也可以是很复杂的曲线运动。特征检测步骤是在目标区域通过相应的图像处理技术获得特征值,组合成待匹配模板。模板匹配步骤是选择最匹配的待匹配模板,它的所在区域即是目标在当前帧的位置区域。一般以对目标表象的变化所作的一些合理的假设为基础,—个常用的方法是候选特征与初始特征的互相关系数最小。三个步骤不断往复。更新步骤常常有两种,一是指对初始模板(特征)的更新,这是因为在目标的运动中,它的姿态、环境的照度等会发生变化,因此模板更新有利于跟踪的继续进行;二是指位置的更新,当在当前帧中找到与目标模板最匹配的模板后,常把该模板的中心位置作为目标在当前帧中的位置,并用该位置对目标的初始位置进行更新,作为下一帧处理时的目标初始位置。1,Camshift原理CamShift利用目标的颜色直方图模型将图像转换为颜色概率分布图,初始化一个搜索窗的大小和位置,并根据上一帧得到的结果自适应调整搜索窗口的位置和大小,从而定位出当前图像中目标的中心位置。2,目标表示(颜色概率分布图)(1)RGB颜色空间对光照亮度变化较为敏感,为了减少此变化对跟踪效果的影响,首先将图像从RGB空间转换到HSV空间。(2).然后对其中的H分量作直方图,在直方图中代表了不同H分量值出现的概率或者像素个数,就是说可以查找出H分量大小为h的概率或者像素个数,即得到了颜色概率查找表。根据获得的H分量直方图将原始图像转换成2D肤色概率分布图像。设C(h)表示直方图中H分量大小为h的像素个数,max[C(h)]表示C(h)的最大值,则H分量为w的像素是肤色的概率为p(w)=C(w)/max[C(h)],h∈(0,1),H分量与肤色概率就建立起了一一对应的关系。将这个对应关系保存起来,就得到肤色概率查找表。为了计算方便,将肤色概率表中的概率值乘以255。在这里需要考虑H分量的取值范围的问题,H分量的取值范围是[0,360),这个取值范围的值不能用一byte表示,为了能用一个byte表示,需要将H值做适当的量化处理,在这里我们将H分量的范围量化到[0,255].(3).将图像中每个像素的值用其颜色出现的概率对替换,就得到了颜色概率分布图。这个过程就叫反向投影,颜色概率分布图是一个灰度图像。2,MeanShift算法MeanShift算法是一种密度函数梯度估计的非参数方法,通过迭代寻优找到概率分布的极值来定位目标。算法过程为:(1).在颜色概率分布图中选取搜索窗W(2).计算零阶距:计算一阶距:计算搜索窗的质心:(3).调整搜索窗大小宽度为;长度为1.2s;(4).移动搜索窗的中心到质心,如果移动距离大于预设的固定阈值,则重复2)3)4),直到搜索窗的中心与质心间的移动距离小于预设的固定阈值,或者循环运算的次数达到某一最大值,停止计算。3,CamShift算法将meanshift算法扩展到连续图像序列,就是camshift算法。它将视频的所有帧做meanshift运算,并将上一帧的结果,即搜索窗的大小和中心,作为下一帧meanshift算法搜索窗的初始值。如此迭代下去,就可以实现对目标的跟踪。算法过程为:(1).初始化搜索窗(2).计算搜索窗的颜色概率分布(反向投影)(3).运行meanshift算法,获得搜索窗新的大小和位置。(4).在下一帧视频图像中用(3)中的值重新初始化搜索窗的大小和位置,再跳转到(2)继续进行。