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

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

2014-05-16 08:17 441 查看
这里来到了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:迭代的次数。

实现代码:暂时缺

-----------------------------致力于多媒体技术,成为有思想的软件工程师------------------------

此文章为我原创作品,若要转载,请和本人联系,或注明出处。

欢迎大家对文章内容提出宝贵意见,同时希望大家及时指出文中的错误之处,这样我可以及时更正。

我的联系方式:

QQ: 7578420

Email:shichongdong80@gmail.com

注:由于现在本人已经上班,没有时间挂在QQ上,所以我很乐意和大家用Email交流以下研究领域:

图像处理/视频处理/OpenCV/计算机图形学
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: