![5dd857b2b07d707addd62afb7de2376c.png](https://img-blog.csdnimg.cn/img_convert/5dd857b2b07d707addd62afb7de2376c.png)
1. CamShift 算法
1. 1 算法介绍
CamShift算法的全称是"Continuously Adaptive Mean-SHIFT",即:连续自适应的MeanShift算法。基本思想是对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果(即搜索窗口的中心位置和窗口大小)作为下一帧MeanShift算法的搜索窗口的初始值,如此迭代下去。简单点说,meanShift是针对单张图片寻找最优迭代结果,而camShift则是针对视频序列来处理,并对该序列中的每一帧图片都调用meanShift来寻找最优迭代结果。正是由于camShift针对一个视频序列进行处理,从而保证其可以不断调整窗口的大小,如此一来,当目标的大小发生变化的时候,该算法就可以自适应地调整目标区域继续跟踪。
opencv自带例子中,camShift算法是通过计算目标在HSV空间下的H分量直方图,利用直方图反向投影得到目标像素的概率分布,然后通过调用OpenCV的CAMSHIFT算法,自动跟踪并调整目标窗口的中心位置与大小。该算法对于简单背景下的单目标跟踪效果较好,但如果被跟踪目标与背景颜色或周围其它目标颜色比较接近,则跟踪效果较差。另外,由于采用颜色特征,所以它对被跟踪目标的形状变化有一定的抵抗能力。
算法过程主要分为三个部分:
1) 计算色彩投影图(反向投影)
(1)RGB颜色空间对光照亮度变化较为敏感,为了减少此变化对跟踪效果的影响,首先将图像从RGB空间转换到HSV空间. (2)然后对其中的H分量(色调)作直方图,在直方图中代表了不同H分量值出现的概率或者像素个数,就是说可以查找出H分量大小为h的概率或者像素个数,即得到了颜色概率查找表。 (3)将图像中每个像素的值用其颜色出现的概率对替换,就得到了颜色概率分布图。这个过程就叫反向投影,颜色概率分布图是一个灰度图像。
2)meanshift
meanshift算法是一种密度函数梯度估计的非参数方法,通过迭代寻优找到概率分布的极值来定位目标。
算法的过程为: (1)在颜色概率分布图中选取搜索窗W (2)计算零阶距
![10db852ca35be21448e8879eaf537046.png](https://img-blog.csdnimg.cn/img_convert/10db852ca35be21448e8879eaf537046.png)
计算一阶距
![b7ab99c235a85e85b248a01f407a9e40.png](https://img-blog.csdnimg.cn/img_convert/b7ab99c235a85e85b248a01f407a9e40.png)
计算搜索窗的质心