Camshift 算法原理
CamShift 算法,即"Continuously Adaptive Mean-Shift"算法,是一种运动跟
踪算法。它主要通过视频图像中运动物体的颜色信息来达到跟踪的目的。算法
分为三个部分:
1) Back Projection 计算
2) Mean Shift 算法
3) CamShift 算法
一、Back Projection
计算 Back Projection 的步骤是这样的:
1. 计算被跟踪目标的色彩直方图。在各种色彩空间中,只有 HSI 空间(或与
HSI 类似的色彩空间)中的 H 分量可以表示颜色信息。所以在具体的计算过程中,
首先将其他的色彩空间的值转化到 HSI 空间,然后会其中的 H 分量做 1D 直方
图计算。
2. 根据获得的色彩直方图将原始图像转化成色彩概率分布图像,这个过程
就被称作"Back Projection"。
在 OpenCV 中的直方图函数中,包含 Back Projection 的函数,函数原型是:
void cvCalcBackProject(IplImage** img, CvArr** backproject, const
CvHistogram* hist);
传递给这个函数的参数有三个:
IplImage** img:存放原始图像,输入。
CvArr** backproject:存放 Back Projection 结果,输出。
CvHistogram* hist:存放直方图,输入。
3.下面就给出计算 Back Projection 的 OpenCV 代码。
(1)准备一张只包含被跟踪目标的图片,将色彩空间转化到 HSI 空间,获
得其中的 H 分量;
IplImage* target=cvLoadImage("target.bmp",-1); //装载图片
IplImage* target_hsv=cvCreateImage( cvGetSize(target), IPL_DEPTH_8U, 3 );
IplImage* target_hue=cvCreateImage( cvGetSize(target), IPL_DEPTH_8U, 3 );
cvCvtColor(target,target_hsv,CV_BGR2HSV); //转化到 HSV 空间