基于opencv的meanshift算法的初步学习

来源:互联网 发布:金融和it 知乎 编辑:程序博客网 时间:2024/05/18 07:39

     要了解MeanShift的提出和发展,要深入理解算法的核心思想,推荐大家看三篇文献:[1995 PAMI] Mean shift, mode seeking, and clustering,[2002 PAMI] Mean shift a robust approach toward feature space analysis,[2003 CVPR] Mean-shift blob tracking through scale space。

     meanShift:均值漂移。其核心是利用概率密度的梯度来找到局部最优。图像上用,其实现过程就是在一个给定的范围,一直按要求(靠近重心的方向)迭代直到达到预期效果。

由于本人以后硕士阶段做图像识别和跟踪方面的研究,索性在目标跟踪上进一步学习。

    在opencv2.3中这样定义:

             CVAPI(int)  cvMeanShift( const CvArr* prob_image, CvRect  window, CvTermCriteria criteria, CvConnectedComp* comp )

     式中有四个参数:prob_image是输入的2D概率密度分布图;window是显示的初始窗口;criteria是停止迭代的标准(这里变量需要三个参数 :分布式类型、迭代的最大次数、最后一个表示特定的阈值);comp是结果输出。

      那么在该算法实现上它是如何一步步找到跟踪目标的呢?

      首先要从初始目标区域提取特征,对下一个视频帧图像上的任意位置都可以圈定出一个和初始目标区域相同大小的区域,并提取该区域的颜色直方图特征和初始化目标区域,提取的颜色直方图特征进行匹配,计算得到两个特征之间的相似度。由此,可以得到一个由特征匹配程度构成的一个相似度概率密度分布图(这里的相似度概率密度分布图也被称为反向投影图),我们真正需要寻找的就是该概率密度分布图上的最大值。那么沿着概率密度的梯度方向不断迭代收敛到目标相似度概率分布的局部最优值。

     最后我需要进一步读懂源代码,我是刚从零开始学习图像处理和opencv函数库应用的,可能写出来描述得并不是很清楚,只是将个人学习和理解的东西简单记录,也希望得到朋友们的不吝指教和帮助。