基于OpenCv目标跟踪系统的实现.doc
9页. .基于OpenCV的运动目标跟踪系统的实现徐俊斌 SA11009039摘要:运动目标跟踪在军事制导、视觉导航、机器人、智能交通、公共安全等领域有着广泛的应用.例 如在车辆违章抓拍系统中,车辆的跟踪就是必不可少的.在入侵检测中,人、动物、车辆等大型运动目标的检测与跟踪也是整个系统运行的关键所在.因此在计算机视觉领域中目标跟踪是一个很重要的分支 传统的的运动目标检测主要有三种方法:背景图像差分法,时态差分法和光流法然而这几种算法均不能很好地解决目标存在旋转或部分遮挡等复杂情况下的跟踪难题本文基于OpenCV设计出改进的运动目标检测与跟踪算法---CAMSHIFT算法来实现运动目标的跟踪,并在VC++编译环境下,利用USB摄像头作为视频采集器,通过观察实验结果可以看出,本文的运动目标检测算法能够正确地检测出视频图像中的运动目标,而且在检测性能上优于传统的检测算法关键词:目标跟踪;OpenCV;CAMSHIFT算法;VC++0 引言目标跟踪是计算机视觉的一个重要分支,日益广泛应用于科学技术、国防安全、航空、医药卫生以及国民经济等领域。
实现目标跟踪的关键在于完整地分割目标、合理提取特征和准确地识别目标,同时,要考虑算法实现的时间,以保证实时性当视频图像中被跟踪目标发生姿态变化,存在旋转或部分遮挡时,简单的灰度模板或者Hausdorff距离匹配一般很难达到实时跟踪目标的要求,出现误匹配或者跟踪丢失的情况,而且跟踪效果较低 Gary R.Bradski提出的CAMSHIFT
<2>.然后对其中的H分量作直方图,在直方图中代表了不同H分量值出现的概率或者像素个数,就是说可以查找出H分量大小为h的概率或者像素个数,即得到了颜色概率查找表<3>.将图像中每个像素的值用其颜色出现的概率对替换,就得到了颜色概率分布图这个过程就叫反向投影,颜色概率分布图是一个灰度图像2、MEANSHIFT MEANSHIFT算法是一种密度函数梯度估计的非参数方法,通过迭代寻优找到概率分布的极值来定位目标算法过程为:<1>.在颜色概率分布图中选取搜索窗W<2>.计算零阶距:计算一阶距:计算搜索窗的质心:<3>.调整搜索窗大小宽度为;长度为1.2s;<4>.移动搜索窗的中心到质心,如果移动距离大于预设的固定阈值,则重<2><3><4>,直到搜索窗的中心与质心间的移动距离小于预设的固定阈值,或者循环运算的次数达到某一最大值,停止计算关于MEANSHIFT的收敛性证明可以google相关文献3、CAMSHIFT将MEANSHIFT算法扩展到连续图像序列,就是CAMSHIFT算法它将视频的所有帧做MEANSHIFT运算,并将上一帧的结果,即搜索窗的大小和中心,作为下一帧MEANSHIFT算法搜索窗的初始值。
如此迭代下去,就可以实现对目标的跟踪算法过程为:<1>.初始化搜索窗<2>.计算搜索窗的颜色概率分布〔反向投影<3>.运行MEANSHIFT算法,获得搜索窗新的大小和位置<4>.在下一帧视频图像中用<3>中的值重新初始化搜索窗的大小和位置,再跳转到<2>继续进行 CAMSHIFT算法能有效解决目标变形和遮挡的问题,对系统资源要求不高,时间复杂度低,在简单背景下能够取得良好的跟踪效果但当背景较为复杂,或者有许多与目标颜色相似像素干扰的情况下,会导致跟踪失败因为它单纯的考虑颜色直方图,忽略了目标的空间分布特性,所以这种情况下需加入对跟踪目标的预测算法2 计算机视觉库OpenCV简介OpenCV〔open source computer vision library诞生于Intel 研究中心,是近年来推出的开源、免费的计算机视觉库,利用其所包含的函数可以很方便地实现数字图像和视频处理同时利用面向对象的VC++ 6.0编程工具,采用C/C++ 语言编写,可以在Linux/Windows/Mac等操作系统上运行,大大提高了计算机的运行速度OpenCV 还提供了Python、Ruby、MATLAB以及其他语言的接口 。
它包含的函数有500多个,覆盖了计算机视觉的许多应用领域OpenCV主要用于对图像进行一些高级处理,比如说特征检测与跟踪、运动分析、目标分割与识别以及3D重建等与其他计算机视觉工具相比,OpenCV的优越性如表1所示:表1 图像处理、计算机视觉工具比较〔IPL,OpenCV,IPP,VisDSK与Matlab开发工具开发单位应用领域免费情况源码公开与否备注IPLIntel图像处理Free不公开已被并入到IPPOpenCVIntel图像处理、计算机视觉Free公开基于Intel芯片代码优化IPPIntel集成开发环境库Not Free不公开基于Intel芯片代码优化VisDSKMicrosoft图像处理Free公开无优化MatlabMathWorks多学科、多种工作平台Not Free不公开速度慢,不易编译成可执行文件作为一种开源数据库,OpenCV具有如下一些特征:a> 采用C/C++编写,开放源码b> 统一的结构和功能定义c> 独立于操作系统、硬件、图像管理器d> 强大的图像和矩阵运算能力e> 支持Windows和Linux操作系统f> 具有底层和高层的应用开发包以上OpenCV函数库的功能特点,使得开发人员可以很快掌握图像、视频处理,计算机视觉等方面的设计方法,能够更快的实现开发人员的算法思想,省去了传统设计方法中重复性的底层开发工作。
由于OpenCV 良好的移植性和统一的结构及其稳定性,可以缩短系统设计的开发周期,系统运行更稳定2.1 OpenCV的数据结构OpenCV设计一些基本数据类型,基本的数据类型包括:图像类的Iplmage,矩阵类的CvMat,可变集合类的CvSeq,CvSet,CvGraph以及用于多维柱状图的混合CvHistogram辅助数据类型包括:用于表示二维 点坐标的CvPoint,用于表示图像宽和高的CvSize等2.2 OpenCV的函数体系OpenCV中每个函数的命名都以"CV"开始,然后是该函数的行为及目标例如用来创建图像的函数"cvCreatelmage",载入图像的函数"cvLoadlmage"OpenCV是为图像处理及计算机视觉在实际工程中的应用而设计的一个类库,其中所有的函数都由于其在实际应用中所实现的不同的功能而分属不同的类型,主要 的函数类型有:<1>基本的图像处理与分析函数这个类型的函数主要用于实现一些基本的图像处理与分析功能,例如图像平滑函数cvSmooth,Sobel,算子cvSobe,Canny,边缘分割函数cvCanny等 <2>结构分析函数包括有轮廓处理函数,几何学函数以及平面细分函数。
<3>运动分析与目标跟踪函数包括有用于运动分析与目标跟踪的函数,例如背景重建函数cvAcc,用光流法或动态轮廓模型来实现目标跟踪的函数cvCalcOpticalFlowBM和cvSnakelmage以及卡尔曼滤波函 数CvKalman等 <4>摄像机标定和3D重建函数包括有用于摄像机标定,姿态估计以及从两个摄像机进行3D相似重构的函数 <5>GUI与视频处理函数包括有高级图形用户接口highGUI用以实现对图像的载入、显示及保存等 基本操作以及用以实现视频输入输出及处理的函数3 CAMSHIFT算法实现在OpenCV库中,CvCamShiftTracker类就是用来实现CAMSHIFT算法的,使得进行二次开发变得很简单该函数为: int cvCamShift
如果非NULL则包含目标的尺寸和方向算法流程图如图1所示:图1:算法流程图根据本文的算法,利用Windows 平台下的VC++ 作为编译平台,利用OpenCV函数库,实现运动目标检测跟踪算法首先初始化摄像头,读取摄像头数据,用背景提取算法,建立初始背景,然后用当前帧与背景帧差分,提取运动目标,用质心投影算法计算目标的质心,最后用改进的CAMSHIFT算法读取质心投影算法返回的质心信息对目标进行实时跟踪程序框图如图2所示图2:程序流程图利用该函数,在VC6.0开发环境下,就很容易实现CAMSHIFT算法跟踪运动物体,图3是程序控制界面:图3:程序控制界面4 实验结果与分析本实验中,用笔记本自带的USB摄像头来跟踪一运动物体,下图4-图7一系列图像是采用CAMSHIFT算法跟踪运动物体部分图像图4:摄像头拍到的场景 图5:手动选择目标物体图6:物体快速移动时跟踪目标 图7:物体发生旋转、变形时跟踪目标由此可见,基于颜色直方图的CAMSHIFT算法可以有效地解决目标变形和旋转问题,而且运算效率很高,可以实时跟踪运动目标。
5 结论本文在详细分析CAMSHIFT算法原理的基础上,采用Intel公司开发的OpenCV视觉库,在VC6.0开发环境下,实现了运动目标实时跟踪,解决了目标旋转、变形、部分遮挡问题同时,可以看到,在开源库OpenCV的基础上,根据自己所开发应用程序所要实现的功能选择所需的库函数,能够大大减少在计算机视觉领域中的开发时间和精力,缩短程序开发的周期6 附录〔程序代码部分#include "cv.h"#include "highgui.h"#include





