meanshift 算法思想其实很简单:利用概率密度的梯度爬升来寻
找局部最优。它要做的就是输入一个在图像的范围,然后一直迭代
(朝着重心迭代)直到满足你的要求为止。但是他是怎么用于做图
像跟踪的呢?这是我自从学习 meanshift 以来,一直的困惑。而且
网上也没有合理的解释。经过这几天的思考,和对反向投影的理解
使得我对它的原理有了大致的认识。
在 opencv 中,进行 meanshift 其实很简单,输入一张图像
(imgProb),再输入一个开始迭代的方框(windowIn)和一个迭
代条件(criteria),输出的是迭代完成的位置(comp )。
这是函数原型:
int cvMeanShift( const void* imgProb, CvRect
windowIn,CvTermCriteria criteria, CvConnectedComp* comp )
但是当它用于跟踪时,这张输入的图像就必须是反向投影图了。
为什么必须是反向投影图呢?首先我们要理解什么是反向投影图。
简单理解它其实实际上是一张概率密度图。经过反向投影时的输
入是一个目标图像的直方图(也可以认为是目标图像),还一个输
入是当前图像就是你要跟踪的全图,输出大小与全图一样大,它上
像素点表征着一种概率,就是全图上这个点是目标图像一部分的概
率。如果这个点越亮,就说明这个点属于物体的概率越大。现在我