目标跟踪--CamShift

本文介绍了CamShift(连续自适应Mean Shift)目标跟踪算法,它是MeanShift的扩展,能根据上一帧结果调整跟踪窗口。OpenCV中的CamShift函数包括计算色彩投影图、meanShift寻优和camShift跟踪三个步骤,适用于视频序列中的目标跟踪。实验结果显示,CamShift能有效地跟踪摄像头中的人物脸部移动。
摘要由CSDN通过智能技术生成

转载请注明出处!!!http://blog.csdn.net/zhonghuan1992

 

目标跟踪--CamShift

 

 


 

         CamShift全称是ContinuouslyAdaptive Mean Shift,即连续自适应的MeanShift算法,而MeanShift算法,首先得对MeanShift算法有个初步的了解,可以参考这里。而CamShift是在MeanShift的基础上,根据上一帧的结果,来调整下一帧的中心位置和窗口大小,所以,当跟踪的目标在视频中发生变化时,能够对这个变化有一定的调整。

 OpenCV自带例子中的camShift算法,可以分为三个部分:(引用自这里 http://blog.csdn.net/carson2005/article/details/7439125)

 

一、计算色彩投影图(反向投影):

         (1)为了减少光照变化对目标跟踪的影响,首先将图像从RGB颜色空间转换到HSV颜色空间;

         (2)对H分量进行直方图统计,直方图代表了不同H分量取值出现的概率,或者说可以据此查找出H分量的大小为x时的概率或像素个数,即,得到颜色概率查找表;

         (3)将图像中每个像素的值用其颜色出现的概率进行替换,由此得到颜色概率分布图;

           以上三个步骤称之为反向投影,需要提醒的是,颜色概率分布图是一个灰度图像;

 

二、meanShift寻优

         前面提到过meanShift算法(http://blog.csdn.net/carson2005/article/details/7337432)是一种非参数概率密度估计方法,它通过不断迭代计算得到最优搜索窗口的位置和大小。

 

三、camShift跟踪算法

         前面提到,camShift其实就是在视频序列的每一帧当中都运用meanShift,并将上一帧的meanShift结果作为下一帧的初始值,如此不断循环迭代,就可以实现目标的跟踪了。

 

         在openCV中自带有camShift函数,老看一下实现,代码中有部分解释。(注释功劳来自http://www.cnblogs.com/tornadomeet/archive/2012/03/15/2398769.html)

 

#include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
 
 
#include <iostream>
#include <ctype.h>
 
using namespace cv;
using namespace std;
 
Mat image;
 
bool backprojMode = false; //表示是否要进入反向投影模式,ture表示准备进入反向投影模式
bool selectObject = false;//代表是否在选要跟踪的初始目标,true表示正在用鼠标选择
int trackObject = 0; //代表跟踪目标数目
bool showHist = true;//是否显示直方图
Point origin;//用于保存鼠标选择第一次单击时点的位置
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值