您的位置:首页 > 运维架构

CamShift算法,OpenCV实现2-Mean Shift算法

2012-08-23 18:57 337 查看
转载地址:http://blog.csdn.net/houdy/article/details/175844

这里来到了CamShift算法,OpenCV实现的第二部分,这一次重点讨论Mean Shift算法。

在讨论Mean Shift算法之前,首先讨论在2D概率分布图像中,如何计算某个区域的重心(Mass Center)的问题,重心可以通过以下公式来计算:

1.计算区域内0阶矩

for(int i=0;i<height;i++)

  for(int j=0;j<width;j++)

     M00+=I(i,j)

2.区域内1阶矩:

for(int i=0;i<height;i++)

  for(int j=0;j<width;j++)

  {

    M10+=i*I(i,j);

    M01+=j*I(i,j);

  }

3.则Mass Center为:

Xc=M10/M00; Yc=M01/M00

接下来,讨论Mean Shift算法的具体步骤,Mean Shift算法可以分为以下4步:

1.选择窗的大小和初始位置.

2.计算此时窗口内的Mass Center.

3.调整窗口的中心到Mass Center.

4.重复2和3,直到窗口中心"会聚",即每次窗口移动的距离小于一定的阈值。

在OpenCV中,提供Mean Shift算法的函数,函数的原型是:

int cvMeanShift(IplImage* imgprob,CvRect windowIn,

                    CvTermCriteria criteria,CvConnectedComp* out);

需要的参数为:

1.IplImage* imgprob:2D概率分布图像,传入;

2.CvRect windowIn:初始的窗口,传入;

3.CvTermCriteria criteria:停止迭代的标准,传入;

4.CvConnectedComp* out:查询结果,传出。

(注:构造CvTermCriteria变量需要三个参数,一个是类型,另一个是迭代的最大次数,最后一个表示特定的阈值。例如可以这样构造criteria:criteria=cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,10,0.1)。)

返回的参数:

1.int:迭代的次数。

实现代码:暂时缺
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法