基于OpenCv目标跟踪系统的实现_第1页
基于OpenCv目标跟踪系统的实现_第2页
基于OpenCv目标跟踪系统的实现_第3页
基于OpenCv目标跟踪系统的实现_第4页
基于OpenCv目标跟踪系统的实现_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于OpenCV的运动目标跟踪系统的实现徐俊斌 SA11009039摘耍:运动目标跟踪在军爭制导、视觉导航、机器人、智能交通、公共安全等领域有看广泛的应用例如在车辆违章抓拍系统中,车 辆的跟踪就是必不可少的在入侵检测中,人、动物、车辆等大型运动目标的检测与跟踪也是整个系统运行的关键所在.因此在计算 机视觉领域中目标跟踪是一个很重要的分支。传统的的运动目标检测主耍有三种方法:背崇图像差分法,时态差分法和光流法。然而这儿种算法均不能很好地解决目标 存在旋转或部分遮挡等复杂情况下的跟踪难题。本文基T OpenCV设计出改进的运动目标检测与跟踪算法CAMSHIFT算法來 实现运动目标的跟踪,并在VC+

2、编译环境下,利用USB摄像头作为视频采集器,通过观祭实验结果可以看岀,本文的运动目标 检测算法能够正确地检测出视频图像中的运动目标,而1L在检测性能上优于传统的检测算法。关键词:目标跟踪;OpenCV; CAMSHIFT算法:VC+0引言目标跟踪是计算机视觉的一个重要分支,日益广泛应用于科学技术、国防安全、航空、 医药卫生以及国民经济等领域。实现目标跟踪的关键在于完整地分割目标、合理提 取特征和准 确地识别目标,同时,要考虑算法实现的时间,以保证实时性。当视频图像中被跟踪目标发生 姿态变化,存在旋转或部分遮挡时,简单的灰度模板或者Hausdorff距离匹配一般很难达到实时 跟踪目标的要求,出现

3、误匹配或者跟踪丢失的情况,而且跟踪效果较低。Gary R.Bradski 提岀的 CAMSHIFT (Continuously Adaptive Mean Shift)算法是以颜色直 方 图为目标模式的目标跟踪算法,可以有效地解决目标变形和部分遮挡的问题,而且运算效率很 高。该文首先详细介绍CAMSHIFT算法,并结合Intel公司开发的开源OpenCV计算机视觉库, 实现了运动目标跟踪,并验证了 CAMSHIFT算法的有效性以及展现OpenCV计算视觉库的灵活 性和优越性。1 CAMSHIFT算法原理CAM SHIFT算法是利用目标的颜色直方图模型将图像转换为颜色概率分布图,初始化一 个搜索

4、窗的大小和位置,并根据上一帧得到的结果自适应调整捜索窗口的位置和大小,从而定 位出当前图像中目标的中心位置。这个算法可以分为三个部分:1、色彩投影图(反向投影):(I).RGB颜色空间对光照亮度变化较为敏感,为了减少此变化对跟踪效果的影响,首先 将图像从RGB空间转换到HSV空间。(2).然后对其屮的H分量作直方图,在直方图中代表 了不同H分量值出现的概率或者像素个数,就是说可以查找出H分量大小为h的概率或者像素 个数,即得到了颜色概率查找表。(3) 将图像中每个像素的值用其颜色出现的概率对替换, 就得到了颜色概率分布图。这个过程就叫反向投影,颜色概率分布图是一个灰度图像。2、MEANSHIF

5、TMEAN SHI FT算法是-种密度函数梯度估计的非参数方法,通过迭代寻优找到概率分布的极值来定位目标。算法过程为:(1) 在颜色概率分布图屮选取搜索窗W(2) .计算零阶距:xy计算一阶距:“io二X yX y计算搜索窗的质心:=Mio / MAyc A/oi / Moo(3) 调整搜索窗大小宽度为$二T% /2%;长度为1.2s;移动搜索窗的中心到质心,如果移动距离大于预设的固定阈值.则重,直到搜索窗的屮心与质 心间的移动距离小于预设的固定阈值,或者循环运算的次数达到某一最大值,停止计算。关于MEANSHIFT 的收敛性证明可以google相关文献。3、CAM SHIFT将MEANSHI

6、FT算法扩展到连续图像序列,就是CAM SHIFT算法。它将视频的所有帧做MEANSHIFT运 算,并将上一帧的结果,即捜索窗的大小和中心,作为下一帧MEANSHIFT算法搜索窗的初始值。如此迭代下 去,就可以实现对目标的跟踪。算法过程为:(1) 初始化搜索窗(2) 计算捜索窗的颜色概率分布(反向投影)运行MEANSHIFT算法,获得捜索窗新的大小和位置。(4) 在下一帧视频图像屮用(3)屮的值重新初始化搜索窗的大小和位置,再跳转到(2)继续进行。CAM SHIFT算法能有效解决目标变形和遮挡的问题,对系统资源要求不高,时间复杂度低,在简单背 景下能够取得良好的跟踪效果。但当背景较为复杂,或者

7、有许多与目标 颜色相似像素干扰的情况下,会导致 跟踪失败。因为它单纯的考虑颜色直方图,忽略了目标的空间分布特性,所以这种情况下需加入对跟踪目标 的预测算法。2计算机视觉库OpenCV简介OpenCV (open source computer vision library)诞生于Intel研究中心,是近年来推 出的开源、免费的计算 机视觉库,利用其所包含的函数可以很方便地实现数宇图像和视 频处理:同时利用面向对彖的VC+6.0编程 工具,采用C/C+语言编写,可以在Linux/Windows/Mac等操作系统上运行,大大提高了计算机的运行速 度。OpenCV还提 供了 Python. Ruby

8、. MATLAB以及其他语言的接口。它包含的函数有500多个,覆盖了 计算机视觉的许多应用领域。OpenCV主要用于对图像进行一些高级处理,比如说特征检测与跟踪、运动分析、目标分割与识別以及 3D重建等。与其他计算机视觉工具相比,OpenCV的优越性如表1所示:表1图像处理、计算机视觉工具比较(IPL, OpenCV, IPP, VisDSK与Matlab)开发工具开发单位应用领域免费情况源码公开与否备注IPLIntel图像处理Free不公开已被并入到IPPOpenCVIntel图像处理、汁算机视觉Free公开基于Intel芯片代码优化IPPIntel集成开发环境库Not Free不公开基于I

9、ntel芯片代码优化VisDSKMicrosoft图像处理Free公开无优化MatlabMathWorks多学科、多种工作平台Not Free不公开速度慢,不易编译成可 执行文件作为一种开源数据库,OpenCV具有如下一些特征:a) 采用C/C+ +编写,开放源码b) 统一的结构和功能定义c) 独立于操作系统、硬件、图像管理器d) 强大的图像和矩阵运算能力e) 支持Windows和Linux操作系统f) 具有底层和高层的应用开发包以上OpenCV函数库的功能特点,使得开发人员可以很快掌握图像、视频处理,计算机视觉等方面的 设计方法,能够更快的实现开发人员的算法思想,省去了传统设计方法屮重复性的

10、底层开发工作。由于 OpenCV良好的移植性和统一的结构及其稳定性,可以缩短系统设计的开发周期,系统运行更稳定。2 1 OpenCV的数据结构OpenCV设计一些基本数据类型,基本的数据类型包括:图像类的Iplmage,矩阵类的CvMat,可变集合类 的CvSeq, CvSet, CvGraph以及用于多维柱状图的混合CvHistogramo辅助数据类型包括:用于表示二维点坐 标的CvPoint,用于表示图像宽和 高的CvSize等。2.2 OpenCV的函数体系OpenCV中每个函数的命名都以”CV”开始,然后是该函数的行为及目标。例如用来创建图像的函数 cvCreatelmage,载入图像

11、的函数cvLoadlmageo OpenCV是为图像处理及计算机视觉在实际工程中的应用 而设计的一个类库,其中所有的函数都由于其在实际应用中所实现的不同的功能而分属不同的类型,主要的 函数类型有:(2)基本的图像处理与分析函数。这个类型的函数主要用于实现一些基本的图像处理与分析功能,例如 图像平滑函数cvSmooth, Sobel,算子cvSobe,Canny,缘分割函数cvCanny等。(2) 结构分析函数。包括有轮廓处理函数,几何学函数以及平面细分函数。(3) 运动分析与目标跟踪函数。包括有用于运动分析与目标跟踪的函数,例如背星重 建函数cvAcc,用光 流法或动态轮廓模型来实现目标跟踪的

12、函数cvCalcOpticalFlowBM和cvSnakelmage以及卡尔曼滤波函 数Cv Kai man 等。(4) 摄像机标定和3D重建函数。包括有用于摄像机标定,姿态估计以及从两个摄像机 进行3D相似重 构的函数。(5) GUI与视频处理函数。包括有高级图形用户接口 highGUI用以实现对图像的载入、显示及保存等基 本操作以及用以实现视频输入输出及处理的函数。3 CAMSHIFT算法实现在OpenCV库中,CvCamShiftTracker类就是用来实现CAMSHIFT算法的,使得进行 二次开发变得很简 单。该函数为:int cvCamShift (const CvArr *prob

13、j mage, CvRect window, CvTermCriteria criteria, CvCorrnectedComp*cornp, CvBox2D 叱 ox 二 NULL);probjmage :目标直方图的反向投影window :初始捜索窗口criteria :确定窗口捜索停止的准则comp:生成的结构,包含收敛的捜索窗VI坐标(compUect字段)与窗口部所有像 素点的和(comps*area 字段)box :目标的带边界盒子。如果非NULL则包含目标的尺寸和方向。算法流程图如图1所示:Step 1on色彩转换Step 2获取背杲Step 3Step 4新的边W大小和方向/O

14、-TJin 染合成图像运动检纱一0图1:算法流程图根据本文的算法,利用Windows平台下的VC+作为编译平台,利用OpenCV函数库,实 现运动目标检测跟踪算法。首先初始化摄像头,读取摄像头数据,用背景提取算法,建立初始背景,然后用当前帧与 背景帧差分,提取运动目标,用质心投影算法计算目标的质心,最后用改进的CAMSHIFT算法 读取质心投影算法返回的质心信息对目标进行实时跟踪。程序框图如图2所示。word.图2 :程序流程图利用该函数,在VC6.0开发环境下,就很容易实现CAMSHIFT算法跟踪运动物体,图3是lul回程序控制界面:3 CamShiftDemoVmliKIOVmax: 25

15、6 Smin: 30 图3 :程序控制界面4实验结果与分析本实验中,用笔记本自带的USB摄像头来跟踪一运动物体.下图4-图7系列图像是采用 CAM SHIFT算法跟踪运动物体部分图像。图4:摄像头拍到的场崇图5:手动选择目标物体图6:物体快速移动时跟踪目标图7:物体发生旋转、变形时跟踪目标由此可见,基于颜色直方图的CAMSHIFT算法可以有效地解决目标变形和旋转问题,而且 运算效率很高,可以实时跟踪运动目标。5结论本文在详细分析CAMSHIFT算法原理的基础上,采用Intel公司开发的OpenCV视觉 库, 在VC6.0开发环境下,实现了运动目标实时跟踪,解决了目标旋转、变形、部分遮 挡问题:

16、同 时,可以看到,在开源库OpenCV的基础上,根据自己所开发应用程序所要实现的功能选择所 需的库函数,能够大大减少在计算机视觉领域中的开发时间和精力,缩短程序开发的周期。6附录(程序代码部分)include Mcv.h#inelude Mhighgui.hu#include #inelude Ipllmage *image = 0, *hsv = 0, *hue = 0, *mask = 0, *backproject = 0, *histimg = 0; CvHistogram *hist = 0;int backproject_mode = 0; int select_object =

17、0;in t track.object = 0;int show_hist = 1;CvPoint origin;CvRect selection;CvRect track_wi ndow;CvBox2D trackAbox;CvConnectedComp track_comp;int hdims = 16;float hranges_arr| = 0s180;float* hranges = hrangesAarr;int vmin = 10, vmax = 256, smin 二 30;void on _mouse( int eve nt, int x, int y3 int flags,

18、 void* param )if( !image) return;if( image-origin)y = image-height y;if( select_object)selection.x = MIN(x,origin.x);selecti ons = MIN(y,origin.y);selection.width = selecti on.x + CVJABS(x origin.x); selecti on .height = selecti ons + CVJABS(y origin.y);selection.x = MAX( selection.x, 0);selections

19、= MAX( selection 0);selection.width = MIN( selecti on .width, image-width); selection.height =MIN( selection.height, image-height); selection.width -= selection.x; selecti on .height -= selecti on;switch( eve nt) case CV.EVENT.LBUTTONDOWN: origin = cvPoint(x,y); selection = cvRect(x,y,0,0);select.ob

20、ject = 1;break;case CV.EVENT.LBUTTONU P: select.object = 0;if( selection.width 0 & selecti on .height 0) track_object 二break;CvScalar hsv2rgb( float hue)int rgb3, p, sector;static const int sector_dataD3=0,2.1, 1,2,0, 1,0,2, 2,0,1, 2,1,0, 0,1,2; hue *=0.033333333333333333333333333333333f; sector = c

21、vFloor(hue);p = cvRound(255*(hue sector);p A= sector & 1 ? 255 : 0;rgbsector_datasectorOJ = 255; rgbsector_datasectorl = 0; rgbsector_datasector2 = p;return cvScalar(rgb2, rgbl, rgbO,O);int main( int argc, char* argv )CvCapture* capture = 0;iff argc = 111 (argc = 2 & strlen(argvl) = 1 & isdigit(argv

22、lO) capture = cvCaptureFromCAM( argc = 2? argvl0 - *0*: 0); else if argc = 2 ) capture = cvCaptureFromAVI ( argvl);if( !capture)fprintf(stderr,HCould not initialize capturing.,.n“); return ;printf( MHot keys: 订MtESC quit the programXrTMtc stop the trackingrfMtb switch to/from backprojection viewrT%h

23、 - show/hide object histogramXrTTo initialize tracking, select the object with mouseXn,1);cvNamedWindow( ”Histogram”,1);cvNamedWindowf CamShiftDemo, 1); cvSetMouseCallback( nCamShiftDemoM, on_mouse, 0);cvCreateTrackbar( MVminMr CamShiftDemo: &vmin, 256, 0); cvCreateTrackbar( Vmax1, CamShiftDemo, &vm

24、ax, 256, 0); cvCreateTrackbar( Smin -CamShiftDemo-i &smin, 256, 0);for(;)Ipllmage* frame = 0; int i, bin_w5 c;frame = cvQueryFrame( capture); if( iframe)break;if( limage)/* allocate all the buffers */image = cvCreatelmage( cvGetSize(frame), 8, 3); image-origin 二 frameorigin;hsv = cvCreatelmage( cvGe

25、tSize(frame), 8, 3);hue = cvCreatelmage( cvGetSize(frame), 8,1);mask = cvCreatelmage( cvGetSize(frame), 8,1);backproject = cvCreatelmage cvGetSize(frame), 8, 1);hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1); histimg = cvCreatelmage( cvSize(320,200), 8, 3);cvZero( histimg); cvCopy( fram

26、e, image, 0);cvCvtColor( image, hsv, CV_BGR2HSV);if( track_object)int _vmin = vmin, _vmax = vmax;cvlnRangeS( hsv, cvScalar(O,smin,MIN(_vmin,_vmax),O),cvScalar(180: 256,MAX(_vmin,_vmax),0)J mask);cvSplit( hsv, hue, 0, 0, 0);if( track_object bins, hist-bins, maxAval ? 255. / maxAval: 0.,cvResetlmageRO

27、I( hue); cvResetlmageROI( mask); track_wi ndow = selecti on; trackAobject = 1;cvZero( histimg);bin_w = histimg-width / hdims;for( i = 0; i bins,i)*histimg-height/255);CvScalar color = hsv2rgb(i*18O.f/hdims);cvRectangle( histimg, cvPoint(i*bin_w,histimg- height),cvPoint(i+l广bin_w,histimgheight val), color, -1,8,0);cvCalcBackProject( &hue, backproject, hist);cvAnd( backproject, mask, bac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论