手势跟踪

camshift:

Continuously Adaptive Mean Shift algorithm的简称。基于MeanSift的改进算法,可以跟踪视频中尺寸可能产生变化的目标。

Meanshift只估计数据分布的梯度(变化的方向)。若梯度为0的地方则表示是这个分布的峰值。

重心:一阶矩与零阶矩的比值。

 

移动窗口到此重心的位置。由于窗口的移动,窗口的内容也将改变,于是又将重复刚才重新定位窗口中心的步骤。窗口中心重定位的过程通常会收敛到Meanshift矢量为0,也就是窗口不能再移动。收敛的位置为窗口像素的局部最大值处。

Meanshift算法扩展到连续图像序列,就是Camshift算法,它将视频的所有帧都做Meanshift运算,并将上一帧的结果,即搜索窗的大小和中心,作为下一帧meanshift算法搜索窗的初始值,如此迭代下去,就可以实现对目标的跟踪。

 

根据概率分布图计算下一帧跟踪框的大小。2D直方图的概率分布图可由二阶矩得到,跟踪框的旋转角和大小也可相应得到。

 

基于OpenCVCamshift算法的步骤如下:

(1)初始化搜索框;

(2)将图像由RGB颜色空间转换到hsv颜色空间;

(3)从hsv图像中分离处h通道的图像;

(4)用手势分割得到的掩模板(mask)分割出h通道图像的手势区域

(5)对h通道的图像建立直方图

(6)对h的直方图作反向投影图

 

(7)利用Meanshift算法在反向投影图中迭代搜索,直到其收敛或达到最大迭代次数。并保存零次矩;

 

(8)利用第(7)步得到的搜索框的中心位置和窗口尺寸信息作为初始值,返回到第(2)步,重新计算,即进入下一帧的目标跟踪。

直方图:条形图。比如颜色可以取值0~255,把这256个值分组,分成16组,则1~16的数值有多少个,直方图的y坐标值就是几,得到条形图。

反向投影图:位置(0,0)上的像素值为0,对应的bin为[0,3),有4个元素,所以反向直方图在该位置上的值这个bin的值4,在直方图中值较多的地方,反向投影图中该位置的值较大,在图像中该位置权重就比较大,离重心近。

 

catmull曲线插值:

 

 

 

 

第一、二帧,直接更新坐标值。

第三帧,根据前两帧的光标位置,用第一帧的光标位置作为P1控制点,第二帧的光标位置作为P3控制点,第三帧的光标位置作为P4控制点,即可利用P1P1P3P4四个控制点得到P1P3间的插值曲线。

第四帧以后,将前三帧的光标位置和当前帧的光标位置作为四个控制点P1P2P3P4,计算P2P3之间的Catmull曲线。

对最后三帧,可将前两帧的光标位置分别作为P1P2控制点,最后一帧的光标位置作为P4控制点,可根据P1P2P4P4控制点得到P2P4之间的Catmull曲线。

 

原文地址:https://www.cnblogs.com/jerrice/p/4354620.html