CamShift(Continuous Adaptive Mean Shift)是MeanShift的改进算法。建立跟踪目标的颜色概率模型后,可将视频转化为颜色概率分布图,然后在第一帧图像中初始化搜索窗。对以后的每一帧图像, CamShift可以自动调整搜索窗的大小和位置,定位被跟踪目标的中心和大小,并且用当前帧定位结果来预测下一帧图像中目标的中心和大小。
CamShift算法是一种动态变化分布的密度梯度估计的非参数方法。对离散概率分布,其过程如下:
1) 在颜色概率分布图中选取大小为s的搜索W;
2) 计算零阶矩:
计算x、y的一阶矩:
式中I(x,y)是坐标(x,y)的像素值,x、y的变化范围为搜索范围。
3) 计算搜索窗的质心为(xc,yc):
4) 重新设置搜索窗的大小s为上面搜索窗区域内颜色概率分布的函数;
5) 重复2)、3)、4)知道收敛(质心变化小于给定的阈值)。
零阶矩反应了目标在图像中的面积,颜色概率分布图是最大值为255的离散灰度图像。由此,设置搜索窗大小s与Z00的关系为:
考虑对称性,s取值接近计算结果的奇数。
通过计算二阶矩,可得到被跟踪目标的长轴、短轴和方向角。二阶矩为:
目标长轴的方向角为:
图像中目标长轴和短轴的长度可以按一下公式计算:
当用CamShift算法对特定颜色的目标进行跟踪时,不必计算每帧图像所有像素点的颜色概率分布,只需计算比当前搜索窗大一些的区域内的像素点的颜色概率分布,这样可节省很大的计算量。视频序一帧一帧变化时,就形成了连续的跟踪。MeanShift是针对每一帧的目标跟踪,CamShift是针对图像序列的目标跟踪。