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

news/2024/7/8 5:14:28 标签: 算法, 图像处理, email, qq, 图形
CamShift算法,OpenCV实现2-Mean Shift算法
这里来到了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/计算机图形


----------------------------------------------------------------------------------------

【来源】

http://www.niftyadmin.cn/n/1089668.html

相关文章

CustomizaitonSpec Clone_VM

克隆虚拟机可以加上CustomizationSpec来自动配置好&#xff1a;IP地址、DNS、Domain等信息 1、可以利用PyVmimo中的vim模块在python中完全自定义CustomizationSpec&#xff08;比较复杂&#xff09; 2、可以首先在vSphere Web Client中创建好一个CustomizationSpec&#xff0c;…

CamShift算法,OpenCV实现(3):CamShift算法

CamShift算法,OpenCV实现(3):CamShift算法1.原理在了解了MeanShift算法以后&#xff0c;我们将 MeanShift算法扩展到连续图像序列&#xff08;一般都是指视频图像序列&#xff09;&#xff0c;这样就形成了CamShift算法。CamShift算法的全称是 "Continuously Apaptive Mea…

gecode中自定义brancher

实际应用中&#xff0c;往往要比官方的示例复杂很多&#xff0c;这里对变量的选择等往往需要以自定义的方式进行选择&#xff0c;这个时候就需要自定义brancher&#xff0c;相关注释在代码中 #include <gecode/int.hh>using namespace Gecode;class NoneMin : public Bra…

oracle约束

约束 Including Constraints在数据库中使用约束(constraints)是为了在该数据库中实施所谓的"业务规则"其实就是防止非法信息进入数据库,满足管理员和应用开发人员所定义的规则集.ORACLE 使用完整性约束(integrity constraints)防止不合法的数据写入数据库,管理员和开…

201671010110 2016-2017 2《java程序设计》

从开学到现在已经是第二周学习java这个新语言了&#xff0c;从开始的完全陌生到现在慢慢了解了它的很多基本知识。就拿标识符来说吧&#xff01;和c语言有相同也有不同&#xff0c;java的标识符由字母下划线&#xff0c;最特别的就是它还有美元符号&#xff0c;数字组成&#x…

Linux 下 C 语言编程

Linux 下 C 语言编程 原著&#xff1a;Rick McMullin 前言 Linux的发行版中包含了很多软件开发工具. 它们中的很多是用于 C 和 C应用程序开发的. 本文介绍了在 Linux 下能用于 C 应用程序开发和调试的工具. 本文的主旨是介绍如何在 Linux 下使用 C 编译器和其他 C 编程工具,…

[Linux]C++编程工具

1、编辑器vi&#xff1a;最基本的编辑器&#xff0c;功能比较弱&#xff0c;但是比较容易使用。不需要XWindows。emacs&#xff1a;没有XWindow的前提下&#xff0c;功能比较强大的一个编辑器&#xff0c;比较难用。gedit&#xff1a;XWindow下比较好的一个编辑器。2、编译器gc…

C#.NET抽象类和接口的区别?

声明方法的存在而不去实现它的类被叫做抽象类&#xff08;abstract class&#xff09;&#xff0c;它用于要创建一个体现某些基本行为的类&#xff0c;并为该类声明方法&#xff0c;但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量&#xff0c…