mean shift tracking
meanshift均值漂移算法在目标跟踪领域具有核心地位,在该领域的核心技术中已经得到了广泛实现,并且相应的代码功能已经在opendev库中提供
//! updates the object tracking window using meanshift algorithm
int meanShift( 概率图像 probImage, CV_IN_OUT Rect& window, TermCriteria criteria )
其中,在本研究中使用了一个关键参数:probImage。该变量表示概率分布图(见下文)。
参数2:window: 需要跟新的窗口(x,y,width,height)
实际上,在深入探讨后我们会发现我们希望采用meanshift算法来进行图像处理,并通过不断迭代window这一技术参数来确定其核心位置。
利用meanshift做跟踪的大致步骤:
生成目标区域的特征图像:第一步是确定需要跟踪的目标范围。选择识别目标的方式多种多样,在此应用中可以选择手动指定位置更为直观;或者使用检测算法(如Adaboost的手掌分类器)来自动识别并划定目标范围。随后系统会根据预设规则生成该区域内对应的概率分布特征图像。
为了计算新帧的反向投影图:随后,在步骤(1)所得出的直方图基础上进行操作后生成新的概率分布图形——反向投影图形。这一图形中数值最大的位置很可能就是目标区域所在的位置(每个像素点都代表该点为物体的概率;数值越高则越可能是物体存在的位置)。此外这也在一定程度上解释了为何均值漂移算法适合用于目标跟踪以及为什么必须将图像转换为其反向概率分布图形作为输入的原因。
通过meanshift算法在步骤(2)生成的结果中处理反向投影图(概率分布图),完成对图像的定位。
从上述分析可以看出,
该算法本质上属于最优化理论中的一种求取最优解的方法。
它等同于最速下降法,
其基本思路是在该方法框架下沿梯度下降方向寻求目标函数的极值点。
其核心在于寻找与目标物体相似度值最大的候选目标位置。
该方法通过在概率密度函数的梯度方向上进行迭代更新来逼近最优解的位置。
其迭代过程本质上是基于梯度的一阶泰勒展开逼近的方式,
每一步都沿着当前点处函数值下降最快的方向移动固定步长,
最终收敛至局部极小值点。
meanshift跟踪时的代码大概为:
1.计算目标区域的直方图hist
calcHist(&roi, 1, 0, maskroi, hist, 1, &hue_Bins, &ranges);
2.计算新帧(待跟踪的帧)的反向投影(概率图)
calcBackProject(&hue, 1, 0, hist, backProject, &ranges, 1.0, true)
backProject &= mask
3.通过meanshift算法逐步确定backProject的重心位置(实际上是在trackWind与backProject的重叠区域中确定backProject的重心位置)
Mean Shift算法(handProMap, trackWind, TermCriteria(CV_终止条件_epsilon | CV_终止条件_iter, 10, 1))
下面是理论的部分,通过一个图来看看meanshift的迭代过程。

图1

图2

图3
参考文献:
- 本研究主要探讨了利用meanshift算法进行的手势追踪技术及其在人机互动平台中的应用
3.反向投影图
