运动物体跟踪算法的设计与实现毕业设计论文Word格式文档下载.docx
- 文档编号:4398446
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:54
- 大小:517.30KB
运动物体跟踪算法的设计与实现毕业设计论文Word格式文档下载.docx
《运动物体跟踪算法的设计与实现毕业设计论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《运动物体跟踪算法的设计与实现毕业设计论文Word格式文档下载.docx(54页珍藏版)》请在冰点文库上搜索。
Finallythepaperhascarriedonthepreliminarytheoreticalanalysistothemobiletrackalgorithm.
Keywords:
ImageProcessing,MotionTracking,ObjectDetection,KalmanFilter
序言
随着计算机技术、通信技术、图像处理技术的不断发展,计算机视觉的应用领域已经迅速拓宽,视频图像中运动物体的检测与跟踪已经成为该领域一个非常活跃的课题。
无论在民用还是军用方面,运动物体跟踪系统都获得了广泛的应用,例如在交通监控、天文观测、医学研究、军事导航、运动分析等领域都有很高的实用价值。
尤其在军事应用中,运动物体跟踪技术已被成功地用于武器的成像制导、侦察和监视方面。
运动目标检测与跟踪处于整个视觉监视系统的最底层,是各种后续高级处理如目标分类、行为理解等的基础。
运动目标检测是指从视频流中实时提取目标,一般是确定目标所在区域和颜色特征等。
目标检测的结果是一种“静态”目标——前景目标,由一些静态特征所描述。
运动目标跟踪则指对目标进行连续的跟踪以确定其运动轨迹。
受跟踪的目标是一种“动态”目标——运动目标,与前景目标相比,描述它的特征中多了动态特征(如运动参数等)。
运动物体跟踪算法是为了实现对视频中运动物体的跟踪。
算法主要通过提取视频中的图像帧序列,运用数字图像分析技术,识别出运动物体,进而对运动物体进行跟踪,最终得到运动物体的轨迹。
运动物体跟踪算法是智能视频监控的重要组成部分,设计实现该算法具有一定的实用价值。
第1章系统开发环境概述
在Windows平台上使用VC开发环境,综合运用数字图像处理技术,基于OpenCV设计实现运动物体跟踪算法。
1.1VisualC++
1.1.1VisualC++的特点
VisualC++是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。
从功能上来看,它除了继承了MFC1.0的全部功能外,还增加了以下新的特性:
1)全面支持文件的Open、Save和SaveAs等菜单项,并且采用了最近才使用的文件列表形式。
2)可以方便地进行打印和打印预显。
3)支持滚动窗口和切分窗口(SplitterWindow)。
4)支持工具条(Toolbar)和状态条(Statusbar)。
5)能够处理MicrosoftVisualBasic控制。
6)能够方便地实现上下文相关帮助(ContextSensitiveHelp)。
7)能够自动处理进入对话框中的数据。
8)实现OLE的接口更加简单、方便。
因此,它现在已经成为开发Win32环境程序,包括图像处理程序的主要开发工具。
1.1.2VC++的组成
VisualC++包含了两套完整的Windows应用开发系统。
由以下的部分组成:
1)Visual工作平台和创建过程:
这是一个运行于Windows上的交互式开发环境,它是直接从MicrosoftQuickCforWindows演化而来的。
2)AppStudio资源编辑器:
堪称是Windows应用,同时它本身就是通过使用VisualC++工具及类库编写而成的,可以对自身的资源进行编辑。
3)C/C++编译器:
VisualC++的编译器可以处理C和C++源代码,它通过源代码文件后缀来识别代码本身所使用的语言。
4)连接器:
为了生成EXE文件,VisualC++的连接器需要对编译器所生成的OBJ文件进行处理。
5)资源编译器:
在编译状态和联编状态都要用到资源编译器。
6)调试器:
为了能够对程序进行调试,在创建程序时必须设置编译器和连接器相应的选项以便产生相应的可调试信息。
7)AppWizard:
它会按照用户通过对话框指定的特性、类名及源代码文件名来产生Windows应用的工作构架。
8)ClassWizard:
能够给出原型、函数体以及将消息同应用框架相联系的相应代码。
9)源程序浏览器:
能够使人们从类或函数的角度来了解程序。
10)联机帮助:
有关WindowsSDK参考手册及类库参考手册的全部内容都包含在VisualC++的联机帮助中。
11)Windows诊断工具:
用于对手工编制的make文件进行处理的NMAKE程序。
1.2OpenCV
OpenCV这一名称包含了Open和ComputerVision两者的意思。
实际上,Open指OpenSource(开源,即开放源代码),ComputerVision则指计算机视觉。
OpenCV是Intel资助的开源计算机视觉库。
它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV拥有包括300多个C/C++函数的跨平台的中、高层API。
它不依赖与其它的外部库,尽管也可以使用某些外部库。
1.2.1OpenCV的特点
OpenCV作为开放的数字图像处理和计算机视觉软件平台,有以下特点:
1)开放C源码。
2)基于Intel处理器指令集开发的优化代码。
3)统一的结构和功能定义。
4)强大的图像和矩阵运算能力。
5)方便灵活的用户接口。
6)同时支持MS-Windows和Linux平台。
1.2.2OpenCV的功能
1)对图像数据的操作,包括分配、释放、复制、设置和转换数据。
2)对图像和视频的输入输出,指文件和摄像头作为输入,图像和视频文件作为输出。
3)具有对矩阵和向量的操作以及线性代数的算法程序,包括矩阵积、解方程、特征值以及奇异值等。
4)可对各种动态数据结构,如列表、队列、集合、树和图等进行操作。
5)具有基本的数字图像处理能力,如可进行滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图和图像金字塔等操作。
6)可对各种结构进行分析,包括连接部件分析、轮廓处理、距离变换、各种距的计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合和Delaunay三角划分等。
7)对摄像头的定标,包括发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计和立体对应。
8)对运动的分析,如对光流、运动分割和跟踪的分析。
9)对目标的识别,可采用特征法和隐马尔可夫模型(HMM)法。
10)具有基本的GUI功能,包括图像与视频显示、键盘和鼠标事件处理及滚动条等。
11)可对图像进行标注,如对线、二次曲线和多边形进行标注,还可以书写文字。
1.2.3OpenCV模块
OpenCV包括以下几个模块,其具体功能是:
1)CV:
主要的OpenCV函数。
2)CVAUX:
辅助的(实验性的)OpenCV函数。
3)CXCORE:
数据结构与线性代数支持。
4)HIGHGUI:
图像界面函数。
5)ML:
机器学习,包括模式分类和回归分析等。
6)CVCAM:
负责读取摄像头数据的模块。
第2章运动物体跟踪算法概述
2.1运动物体跟踪算法研究的背景和发展现状
2.1.1论文的背景及意义
近年来,计算机视觉的研究重点已逐渐从对静态图像的研究过渡到对动态图像序列的研究上面,多媒体技术和通讯技术一直将运动目标,例如人和车辆,作为一项重要的考虑因素。
视频数据库、虚拟现实、智能房间、智能桌椅以及安全监控等技术的应用都需要对运动目标进行检测和跟踪,并对运动目标的行为做出解释。
因此,对运动目标的检测与跟踪也成了视觉研究中的一个重要问题。
2.1.2运动物体跟踪算法的研究和发展现状
1、运动目标检测
运动目标跟踪是对摄像机得到的图像序列进行视觉上的分析处理,其主要的目的是实时地观测被监视场景的运动目标,并分析描述它们的行为。
运动目标的提取主要包括运动检测以及目标提取两个步骤,其中运动检测处于整个视觉监视系统的最底层,是各种后续高级处理如目标分类,行为理解等的基础。
运动检测可以分为静止背景下的运动检测和运动背景下的运动检测。
对于静止背景下序列图像的变化检测,主要有三种方法:
连续帧间差分法、背景差分法和光流场法。
连续帧间差分法对于动态环境有很好的适应性,在运动目标和背景有明显区别的时候且目标运动较快的时候比较有效,算法简单,计算复杂度低,但不能完全提取出目标的所有相关点。
背景差分法能够较完整地提取目标点,对于背景较为稳定的情况,检测效果好。
对于背景变化的场景,例如光照、背景的抖动、背景中新物体的加入等情况比较敏感。
光流场法,基于光流的变化检测采用了运动目标随时间变化的光流特性,虽然能够直接用于摄像机运动下的目标检测,但大多数光流方法运算量较大,若没有特定的硬件支持一般很难满足实时处理的要求。
在实时跟踪系统中,人们更热衷于使用帧差法或背景减法来获得期望的结果。
2、运动目标跟踪
所谓运动目标跟踪,就是在运动目标检测的基础上,利用目标有效特征,选择使用适当的匹配算法,在序列图像中寻找与目标模板最相似的图像的位置,简单的说就是给目标定位。
在实际应用中,运动目标跟踪不仅可以提供目标的运动轨迹和准确定位目标,为下一步的目标行为分析与理解提供了可靠的数据来源,而且也可以为运动目标检测提供帮助。
首先,从算法过程上看,运动目标的跟踪方法主要分为基于图像帧内信息的跟踪和基于帧内——帧间信息的跟踪两种。
基于图像帧内信息的跟踪方法是对每帧图像信号进行单独处理,利用目标信号在二维空间中的特征将目标从背景中分割出来,完成对目标的定位,其优点是仅对当前帧进行计算,因此不会造成跟踪过程中的误差累积。
根据实现过程的不同,该方法又可以分为两类:
形心跟踪和模板匹配跟踪。
形心跟踪是利用目标检测方法将目标从背景中分割出来,计算目标的形心(重心)在图像中的位置,以达到目标定位的目的。
形心跟踪法的优点是过程简单,计算效率高,但对于复杂背景中的目标的检测识别困难较大。
模板匹配跟踪法首先确定目标模板,然后将该模板在图像中逐点滑动进行相关匹配,得到相关曲线,使得相关曲线达到最大值,即相关性最大的区域就是目标的当前区域。
模板匹配法的优点是可靠性较高,但是计算量较大,而且要对目标模板进行定期更新。
基于帧内——帧间相关性的跟踪方法除了利用目标信号在帧内的空间特征外,还利用了它在时间域上的运动特性,即帧与帧之间的相关性,对目标在后继帧中的位置和运动状态信息进行预测和更新。
2.2运动跟踪系统的技术概述
一个完整的运动目标跟踪系统及过程可分为下面几步:
图像预处理、目标检测与分割、目标特征提取与识别、目标运动状态分析与跟踪。
图2-1所示是一个运动目标跟踪系统框图。
结果
视频帧
图2-1运动目标跟踪系统框图
现对这几部分分别介绍如下:
(1)图像预处理。
图像的预处理是将成像系统所得到的图像进行适当的处理,使得处理后的图像更易于进行检测和分割。
预处理通常是为了降低图像噪声、干扰和增强目标、背景的对比度。
针对不同的成像方法得到的图像,处理方法也不尽相同。
(2)目标检测与分割。
目标检测和分割一直是图像处理领域中的重点和难点。
目标检测是对可能是目标的区域定位;
目标分割是将目标从背景中分离出来。
在绝大多数检测和分割技术中,两者是不可分离的。
在目标识别和跟踪系统中,对图像分割的质量也有很大的依赖性。
(3)目标特征提取与识别。
目标识别是目标跟踪中的重要一环,而特征提取是目标识别中的关键技术。
特征提取的优劣直接影响到目标识别以及跟踪系统的性能。
目标的特征可分为形状、灰度、边缘、区域、纹理等。
不同的特征,对应不同的提取方法。
一般地,特征提取方法必须满足一些必要准则:
不变性、唯一性和稳定性。
(4)目标运动状态分析与跟踪。
经过目标识别环节后,就可以得到感兴趣的目标区域,进而计算出图像中目标的形心位置。
对序列图像而言,就可以描绘出目标大致的运动轨迹,估算出运动速度和方向等参数信息。
根据这些运动参数以及帧间的相关性,预测下一帧或几帧中目标的位置,完成跟踪过程。
现有的跟踪算法多种多样,但最基本的两个要求是跟踪的可靠性和实时性。
在应用中,人们往往根据不同的目标特性和实际需求,选择不同的跟踪算法。
第3章运动物体跟踪算法具体描述
3.1背景统计量的累积
1、Acc
功能:
将帧叠加到累积器(accumulator)中。
格式:
voidcvAcc(constCvArr*image,CvArr*sum,constCvArr*mask=NULL);
说明:
函数cvAcc将整个图像image或某个选择区域叠加到sum中,其定义是:
sum(x,y)=sum(x,y)+image(x,y)ifmask(x,y)!
=0
2、SquareAcc
叠加输入图像的平方到累积器中。
voidcvSquareAcc(constCvArr*image,CvArr*sqsum,constCvArr*mask=NULL);
函数cvSquareAcc叠加输入图像image或某个选择区域的二次方,到累积器sqsum中,其定义是:
sqsum(x,y)=sqsum(x,y)+image(x,y)2ifmask(x,y)!
3、MultiplyAcc
将两幅输入图像的乘积叠加到累积器中。
voidcvMultiplyAcc(constCvArr*image1,constCvArr*image2,CvArr*acc,constCvArr*mask=NULL);
函数cvMultiplyAcc叠加两个输入图像的乘积到累积器acc中,其定义是:
acc(x,y)=acc(x,y)+image1(x,y)*image2(x,y)ifmask(x,y)!
4、RunningAvg
更新加权累加图像。
voidcvRunningAvg(constCvArr*image,CvArr*acc,doublealpha,constCvArr*mask=NULL);
函数cvRunningAvg计算输入图像image的加权和以及累积器acc,使得acc成为帧序列的一个加权平均,其定义是:
acc(x,y)=(1-α)*acc(x,y)+α*image(x,y)ifmask(x,y)!
其中,α(alpha)调节更新速率(即累积器以多快的速率忘掉前面的帧)。
例如:
利用背景建模检测运动物体。
(运行结果如图3-1所示)
图3-1背景建模检测运动物体
3.2运动模板
1、UpdateMotionHistory
去掉影像(silhouette)以更新运动历史图像。
voidcvUpdateMotionHistory(constCvArr*silhouette,CvArr*mhi,doubletimestamp,doubleduration);
参数:
(1)silhouette影像掩码,运动发生地方具有非零象素。
(2)mhi运动历史图像(单通道,32-比特浮点数),被本函数更新。
(3)timestamp当前时间,毫秒或其它单位。
(4)duration运动跟踪的最大持续时间,用timestamp一样的时间单位。
函数cvUpdateMotionHistory用下面方式更新运动历史图像:
timestampifsilhouette(x,y)!
mhi(x,y)=0ifsilhouette(x,y)=0andmhi(x,y)<
timestamp-duration
mhi(x,y)otherwise
也就是,MHI(motionhistoryimage)中在运动发生的象素点被设置为当前时间戳,而运动发生较久的象素点被清除。
2、CalcMotionGradient
计算运动历史图像的梯度方向。
voidcvCalcMotionGradient(constCvArr*mhi,CvArr*mask,CvArr*orientation,doubledelta1,doubledelta2,intaperture_size=3);
(1)mhi运动历史图像。
(2)mask掩码图像,用来标注运动梯度数据正确的点,为输出参数。
(3)orientation运动梯度的方向图像,包含从0到360角度。
(4)delta1,delta2函数在每个象素点(x,y)邻域寻找mhi的最小值m(x,y)和最大值M(x,y),并且假设梯度是正确的,当且仅当:
min(delta1,delta2)<
=M(x,y)-m(x,y)<
=max(delta1,delta2)。
(5)aperture_size函数所用微分算子的开孔尺寸CV_SCHARR,为1,3,5或7。
函数cvCalcMotionGradient计算MHI的差分Dx和Dy,然后计算梯度方向如下式:
orientation(x,y)=arctan[Dy(x,y)/Dx(x,y)]
其中要考虑Dx(x,y)和Dy(x,y)的符号(与cvCartToPolar类似),然后填充mask以表示哪些方向是正确的。
3、CalcGlobalOrientation
计算某些选择区域的全局运动方向。
doublecvCalcGlobalOrientation(constCvArr*orientation,constCvArr*mask,constCvArr*mhi,doubletimestamp,doubleduration);
(1)orientation运动梯度方向图像,由函数cvCalcMotionGradient得到。
(2)mask掩码图像。
它可以是正确梯度掩码(由函数cvCalcMotionGradient得到)与区域掩码的结合,其中区域掩码确定哪些方向需要计算。
(3)mhi运动历史图像。
(4)timestamp当前时间(单位毫秒或其它)最好在传递它到函数cvUpdateMotionHistor之前存储一下以便以后的重用,因为对大图像运行cvUpdateMotionHistory和cvCalcMotionGradient会花费一些时间。
(5)duration运动跟踪的最大持续时间,用法与函数cvUpdateMotionHistory中的一致。
函数cvCalcGlobalOrientation在选择的区域内计算整个运动方向,并且返回0°
到360°
之间的角度值。
首先,函数创建运动直方图,寻找基本方向作为直方图最大值的坐标;
然后函数计算与基本方向的相对偏移量,作为所有方向向量的加权和,运行越近,权重越大;
最后,得到的角度是基本方向和偏移量的循环和。
4、SegmentMotion
将整个运动分割为独立的运动部分。
CvSeq*cvSegmentMotion(constCvArr*mhi,CvArr*seg_mask,CvMemStorage*storage,doubletimestamp,do
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动 物体 跟踪 算法 设计 实现 毕业设计 论文