基于opencv的运动目标检测与跟踪毕设论文.docx
- 文档编号:27669135
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:50
- 大小:1.71MB
基于opencv的运动目标检测与跟踪毕设论文.docx
《基于opencv的运动目标检测与跟踪毕设论文.docx》由会员分享,可在线阅读,更多相关《基于opencv的运动目标检测与跟踪毕设论文.docx(50页珍藏版)》请在冰豆网上搜索。
基于opencv的运动目标检测与跟踪毕设论文
基于VC的运动图像跟踪算法设计
学院
自动化学院
专业
班级
学号
姓名
指导教师
负责教师
沈阳航空航天大学
2013年6月
摘要
运动目标检测与跟踪作为计算机视觉领域的一个重要分支与基础,在工业、医疗保健、航空航天、军事等各个领域具有广泛的应用前景,一直受到广泛的关注,并成为计算机视觉领域的一个研究热点。
但是由于运动目标检测问题本身的复杂性,运动目标的检测与跟踪依然面临着诸多挑战。
本文在现有研究成果的基础上,对静态场景下的运动目标检测跟踪进行了深入的讨论。
本文首先对运动目标检测的基本方法----帧间差分法与背景差分法进行了深入的学习和探讨,然后,借助于OpenCV技术,在VisualC++6.0编程环境下开发了运动目标检测跟踪系统。
该系统首先对采集的视频图像序列进行相关的预处理之后,将视频图像序列中的运动目标比较可靠地检测出来。
通过系统的测试结果和数据可以得出结论:
本文基于OpenCV设计的运动目标检测跟踪系统具有良好的实时性,能够正确地进行运动目标的实时检测与跟踪。
关键词:
运动目标检测;帧间差分法;视频图像;OpenCV
AlgorithmDesignofImageMotionTrackingBasedonVC
Abstract
Movingtargetdetectionandtrackingfieldofcomputervisionasanimportantbranchofthefoundation,intheindustrial,healthcare,aerospace,militaryandotherfieldswithawiderangeofapplications,hasbeenwidespreadconcern,andthefieldofcomputervisiontobecomearesearchhotspot.However,duetomovingtargetdetectioncomplexityoftheproblemitself,movingtargetdetectionandtrackingisstillfacingmanychallenges.Inthispaper,basedontheresultsofexistingresearchinstaticscenesofthemovingtargetdetectionandtrackingin-depthdiscussion.
Thisarticlefirstbasicmethodofmovingtargetdetection-framedifferencemethodandbackgroundsubtractionmethodconductedin-depthstudyanddiscussion,andthen,bymeansofOpenCVtechnology,VisualC6.0programmingenvironmentdevelopedamovingtargetdetectionandtrackingsystem.Thesystemandthecollectionoftheassociatedvideosequenceafterpretreatment,thevideoimageofthemovingtargetsequencecomparisonreliablydetected.Throughsystematictestresultsanddatacanbeconcluded:
BasedonOpenCVdesignmovingtargetdetectionandtrackingsystemhasgoodreal-time,beabletoproperlycarryoutreal-timemovingtargetdetectionandtracking.
Keywords:
movingtargetdetection;framedifferencemethod;videoframe;OpenCV
1绪论
如何更好地、更准确地理解视觉信息已经成为当前科学研究的一个重要课题。
而计算机视觉就是通过计算机代替人眼及大脑对外界环境进行感知、分析和理解。
随着计算机技术的不断发展和计算机性能的逐渐提高,计算机视觉成为了一个崭新且发展迅速的热门领域,并成为计算机科学的重要研究领域之一。
计算机视觉技术已经在许多领域得到广泛应用,可以这么说,需要人类视觉的场地方几乎都可以借助于计算机视觉。
许多人类视觉无法触及的场合,如危险场景监测、微观物体精确定量、不可见物体感知等,计算机视觉更突显其优越性。
1.1课题来源与背景
随着计算机技术的高速发展,运动物体的检测和跟踪在图像处理、计算机视觉、模式识别、人工智能、多媒体技术等领域越来越受到人们的关注。
运动跟踪和检测的应用广泛,在智能监控和人机交互中,如:
银行、交通、超市等场合常常使用运动跟踪分析技术,通过定位物体并对其行为进行分析,一旦发现物体有异常行为,监控系统就发出警报,提醒人们注意并即时的处理,改善了人工监督注意力分散、反应时间较慢、人力资源浪费等问题。
运动目标的跟踪在虚拟现实、工业控制、军事设备、医学研究、视频监控、交通流量观测监控等很多领域也有重要的实用价值。
特别在军事上,先进的武器导航、军事侦察和监控中都成功运用了自动跟踪技术。
而跟踪的难点在于如何快速而准确的在每一帧图像中实现目标定位。
正因如此,对运动目标的跟踪和检测的研究很有价值。
1.2数字图像处理技术的发展与应用
数字图像处理技术是20世纪60年代随着计算机技术和VLS(IVeryLargeScaleIntegration)的发展而产生、发展和不断成熟起来的一个新兴技术领域,它在理论上和实际应用中都取得了巨大的成就。
20世纪20年代,图像处理技术首次应用于改善伦敦和纽约之间海底电缆发送的图片质量。
到20世纪50年代,计算机发展到一定的水平后,数字图像处理才真正引起人们的兴趣。
1964年美国喷气推进实验室通过计算机对“徘徊者七号”太空船发回的大批月球照片进行处理,获得了巨大成功。
20世纪60年代末,数字图像处理初步具备了比较完整的体系,形成了一门新兴的学科。
20世纪70年代,数字图像处理技术得到迅猛的发展,理论和方法进一步完善,应用范围更加广泛。
在这一时期,图像处理主要和模式识别及图像理解系统的研究相联系,如文字识别、医学图像处理、遥感图像的处理等。
20世纪70年代后期到现在,各个应用领域对数字图像处理提出越来越高的要求,促进了这门学科向更高要求的方向发展。
特别是在景物理解和计算机视觉(即机器视觉)方面,图像处理已由二维处理发展到三维理解或解释。
进入21世纪后,随着计算机技术的迅猛发展和相关理论的不断完善,数字图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就。
属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等。
该技术成为一门引人注目、前景远大的新型学科。
1.3运动目标检测技术的研究现状
由运动目标所形成的图像序列可分为两种情况:
一种是静态场景,一种是动态场景。
前一种情况通常发生在摄像机相对静止状态(如监视某一路口车流量的固定摄像机),后一种情况通常发生在摄像机也在相对运动状态(如装在卫星或飞机上的监视系统)。
近几年来,研究人员提出了许多方法用于检测和跟踪序列图像中的运动目标,其中绝大多数方法都假设用于获取序列图像的背景是静止的,而大多数实际情况也满足这一假设,所以人们主要研究的是背景静止-物体运动这种情况下获取的动态序列图像。
针对这种情况,现有的运动目标检测方法主要有三类:
帧差法(Temporaldifference)、背景减法(Backgroundsubtraction)、光流场法(Opticalflow)。
帧差法即帧间差分法,是在连续的图像序列中,提取两个或三个相邻帧,采用基于像素的时间差分来获取图像中的运动信息。
帧间差分法计算简单,对动态环境具有较强的适应性,但不能提取出目标的所有相关点,容易在目标内部形成“空洞”,而且要求背景绝对静止或基本无变化(噪声较小),因而适用场合有限。
背景减法也称背景差分法,基本思想是将当前帧图像与事先存储或者实时得到的背景图像相减,即当前图像与已知背景图像之间的差分。
较早期的背景差分法有均值、中值、运动平均、高斯模型方法等,随着研究的深入,逐渐出现了一些比较成熟的背景差方法。
1999年MIT的C.Stauffer提出了基于混合高斯模型的背景差方法,针对高斯噪声的复杂背景,采用多个高斯分布描述像素过程;2000年MIT的Oliver等人提出了背景特征化建模的方法。
主要研究的焦点都落在了背景更新与建模方法上。
从实际应用角度来看,帧差和背景减相结合的运动检测是使用最广泛的一种方法。
Spagnol等人提出了一种运用邻域的相关系数结合帧差和背景减来进行运动检测的方法,该方法不仅有效地抑制了光照变化对检测结果的影响,并解决了阴影、重影和伪前景等问题。
但国内有人指出了Spagnol的方法的三个不足之处:
①会将背景颜色一致的区域误判为前景;②当运动目标速度缓慢或静止时,存在漏检;③在背景复杂的情况下,背景更新策略将使背景模型退化。
并且,提出了首先用灰度拉伸变换,并结合灰度值信息来改进邻域相关系数的计算方法,以排除背景的误判;然后通过在帧差和背景减相结合的策略中加入运动分析,用来改善运动缓慢目标的检测结果;最后在背景复杂的情况下用运行期更新法进行背景更新,以防止背景模型的退化。
最后,光流场法是分析序列图像中运动目标的重要方法,它既可以用于运动目标的检测,也可以用于运动目标的跟踪。
所谓光流是指图像中灰度模式运动的速度;它是景物中可见点的三维速度矢量在成像平面上的投影,它表示了景物表面点在图像中位置的瞬时变化;同时光流场携带了有关运动和结构的丰富信息。
光流场的计算最初是由国外两名学者提出的,它是一种以灰度梯度基本不变或亮度恒定的约束假设为基础的运动目标探测的有效方法。
光流法能够较好的处理运动背景的情况,但计算量巨大,难以应用到实时系统,同时对噪声比较敏感,精度较低,难以得到运动目标的精确边界。
而张泽旭等将Canny边缘提取融入光流场分割技术,对单运动目标和多运动目标均取得了比较满意的效果,实时性也大大提高。
但如何进一步提高其抗噪性、实时性和运算速度,有待于深入研究。
总的来说,过去的二三十年中,国内外学者在运动目标检测理论及其实现方面做了大量、深入的研究工作,取得了令人瞩目的成果,并将研究的成果应用到很多领域,如智能监控系统、军事制导等等。
但是由于运动目标检测问题本身的复杂性和目前视频技术发展水平的限制,运动目标的检测技术至今仍然处于研究和讨论阶段,到目前为止,还没有出现能够适用于各种场合、各种情况的通用算法。
现今的各种算法在稳健性、准确性、可靠性等方面还有着这样、那样的不足。
这些算法有的简单、易于实现,实时性好,但可靠性不高,在复杂场景和运动下算法容易失效;有的虽然可靠性较高,但算法过于复杂,不利于进行实时检测。
而且,静态场景下的运动目标检测的研究较多;而动态场景下的检测研究较少,算法还不成熟。
已有的运动目标检测系统大多受限于特定的应用场景,目标检测算法还有待于进一步研究和优化,研究一种鲁棒性好、精确度高、性能稳定和适用性强的运动目标检测算法依然任重道远,面临巨大挑战。
1.4本文的任务、主要内容及结构
课题研究的主要任务及技术指标
主要任务:
该毕业设计的主要工作包括了解摄像头图像采集系统的工作过程,首先实现摄像头的数据采集过程,进而编写基于VC的图像处理程序,对画面中的动态物体进行识别并用矩形方框将其标记。
技术指标:
构造出完整的基于VC的摄像头数据采集及运动图像跟踪系统;实现摄像头的数据采集过程,进而编写基于VC的图像处理程序,对画面中的动态物体进行识别并用矩形方框将其标记。
本文的主要内容及结构
本文选取的运动目标检测跟踪的算法作为研究重点。
利用OpenCV和VisualC++组建实验平台,针对数字图像特定噪声的去除、运动目标的正确识别与分割、处理的实时性要求等难点进行了研究。
本文主要工作总结如下:
在对图像噪声的处理方面:
综合使用各种方法去除图像噪声,通过实验比较了这些方法所适用的场合。
在运动目标检测跟踪方面:
重点研究了目前在实际应用中普遍采用的以帧间差算法。
在对检测出的变化区域进行后处理方面:
采用适当的形态学滤波处理得到更清晰、更准确的运动目标,进而进行连通性分析,去除小面积噪声,保留足够大的目标。
最后进行区域标记,分割出完整的运动目标,加以标记。
综上,本文旨在利用现有的理论、算法和工具,以工程应用为目的,研究如何从序列图像中检测出运动目标。
并且,本文基于OpenCV这个开放的计算机视觉程序库,通过VC++编程环境对运动目标检测算法进行了编程实现,完成了运动目标检测系统。
按照问题描述、问题建模、问题求解的思路共分六章,主要内容及结构组织如下:
第一章绪论。
概述了课题的研究背景,主要讨论了运动目标检测技术的研究现状、数字图像处理技术的发展与应用,阐述了论文的整体结构。
第二章介绍研究OpenCV技术。
其中OpenCV的优势、OpenCV在VisualC++6.0下的配置方法和OpenCV中常用的数据结构及函数介绍。
对数据结构的必要描述为后面函数的应用奠定了一定的理论基础。
第三章图像预处理。
本章对图像预处理的过程进行了详细的描述。
为此,我们首先要图像的提取和灰度转换。
然后图像上噪声进行研究,详细叙述了中值滤波原理,利用中值滤波去除图像的噪声。
不断进行实验,以确定较为理想的阈值。
第四章运动目标检测。
本次课题研究运动目标跟踪算法,必然需要对其运动目标进行检测。
通过讨论三种目标检测方法,确定本次课题以帧间差法为检测方法,然后对图像进行二值化和数学形态滤波,最后通过实验检测算法的鲁棒性。
第五章目标跟踪算法的研究
本章首先讨论了运动目标的跟踪原理,详细描述了运动目标特征的重要作用。
运动目标的特征是一个重要的跟踪依据,在很多跟踪算法中都有目标特征提取这一环节。
所提取的目标特征必须在环境变化、目标自身变化或者运动改变时,仍然能够将运动目标描述出来。
最后详细叙述了基于团块的目标跟踪算法,包括数据的定义、模块结构与相应函数。
第六章程序结果演示与分析
本章将配置好的系统进行演示与分析,系统成功的对画面中的动态物体进行识别并用矩形方框将其标记。
1.5本章小结
在本章绪论中,主要介绍了基于VC的运动图像跟踪算法设计研究课题的背景知识发展概况及其应用,阐述了运动图像跟踪算法的现实意义,总结了论文的任务、内容与结构。
2OpenCV技术介绍
OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和单片机系统中。
2.1OpenCV简介
OpenCV是Intel®开源计算机视觉库。
它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。
其重要重要特性包括:
拥有包括300多个C函数的跨平台的中、高层API。
它不依赖于其它的外部库——尽管也可以使用某些外部库。
对非商业应用和商业应用都是免费(FREE)的。
(细节参考BSDlicense)。
为Intel@IntegratedPerformancePrimitives(IPP)提供了透明接口。
这意味着如果有为特定处理器优化的的IPP库,OpenCV将在运行时自动加载这些库。
2.2OpenCV的优势
1)纯C代码,源代码开放。
开源软件之所以能够风靡世界,首先是其开源的免费特性;此外,由于有全球众多编程者的参与,开源软件一般具有简约精炼、资源占用少、功能集中和安全性好的优点。
2)丰富的函数功能,强大的图像和矩阵运算能力:
OpenCV提供了数组、序列、矩阵、树等基本结构,也包含了差分方程求解、傅立叶分析、积分运算、特殊函数等众多高级数学计算函数,以及各种图像处理操作和目标跟踪、摄像机校准、三维重建等高级视觉函数。
3)平台无关性:
基于OpenCV开发的程序可以直接在Windows、Unix、Linux、MacOSX、Solaris、HP等平台之间相互移植,无需对代码进行任何修改。
4)方便灵活的用户接口。
OpenCV作为一个开放的计算机视觉函数库在使用上必然没有Matlab那样解释执行来得方便,而softhitegration将CH和OpenCV绑定起来推出的CHOpenCV,解决了这一使用上的瓶颈。
并且具有交互性、强大的扩展功能、Web实现性和可嵌入性等特性。
2.3OpenCV在VisualC++6.0下的配置方法
本文的硬件平台为普通的笔记本电脑,内存容量为2G。
视频输入有一个USB摄像头。
软件开发平台为WindowsXP、OpenCV1.0以及MSVisualC++6.0(以下简称VC6.0)。
其中OpenCV配置的过程如下:
假如要将OpenCV安装到C:
\ProgramFiles\OpenCV,在安装OpenCV时选择"将\OpenCV\bin加入系统变量"(Add\OpenCV\bintothesystermPATH)。
然后,检查C:
\ProgramFiles\OpenCV\bin是否已经被加入到环境变量PATH,如果没有,请加入。
加入后需要注销当前Windows用户(或重启)后重新登陆才生效。
(可以在任务管理器里重启explorer.exe)。
在VC6.0下的配置步骤如下:
1)全局设置
菜单Tools->Options->Directories:
先设置lib路径,选择Libraryfiles,在下方填入路径:
C:
\ProgramFiles\OpenCV\lib。
图2.1Libraryfiles设置
然后选择Includefiles,在下方填入路径:
图2.2Includefiles设置
然后选择Sourcefiles,在下方填入路径:
图2.3Sourcefiles设置
最后点击“OK”,完成设置。
2)项目设置
每创建一个将要使用OpenCV的VCProject,都需要给它指定需要的lib。
菜单:
Project->Settings,然后将Settingfor选为AllConfigurations,然后选择右边的link标签,在Object/librarymodules(对象/库模块)附加上:
cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib如果你不需要这么多lib,你可以只添加你需要的lib。
图2.4项目设置
2.4OpenCV中常用的数据结构及函数介绍
2.4.1数据结构
OpenCV设计了一些基础的数据类型和一些帮助数据类型,在运用OpenCV函数库进行编程的过程中,常常会需要用到这些结构类型,只有正真了解这些结构才能够很好地利用OpenCV函数库来解决问题。
下面对几个比较常用的简单结构进行介绍。
1)CvPoint结构
表示二维坐标系下的点,类型为整型,定义如下:
typedefstructCvPoint
{
intx;/*x坐标,通常以0为基点*/
inty;/*y坐标,通常以0为基点*/
}CvPoint;
2)CvSize结构
CvSize结构用来表示矩形框大小,以像素为精度,结构体中分别定义了矩形的宽高和高度,定义如下:
typedefstructCvsize
{
intwidth;/*矩形宽度,单位为像素*/
intheight;/*矩形高度,单位为像素*/
}CvSize;
3)IplImage结构
OpenCV库主要是使用“IplImage”结构体来创造和处理图像。
IplImage结构来源于inter的另外一个函数库IPL,该函数库主要是针对图像处理。
定义如下:
typedefstructIplImage
{
intnSize;/*IplImage大小*/
intID;/*版本(=0)*/
intnChannels;/*大多数opencv函数支持1~4个信道*/
intdepth;/*像素的位深度*/
intdataOrder;/*0:
交叉存取颜色信道。
1:
分开的颜色信道。
只有cvCreateImage可以创建交叉存取图像*/
intorigin;/*0:
顶—左结构,1:
底—左结构*/
intwidth;/*图像宽像素*/
intheighet;/*图像高像素*/
struct_IplROI*roi;/*图像感兴趣区域*/
intimageSize;/*图像数据大小*/
intwidthStep;/*排列的图像大小,以字节为单位*/
}
4)CvCapture结构
typedefstructCvCaptureCvCapture;
结构CvCapture没有公共接口,它只能被用来作为视频获取函数的一个参数。
5)cvCreateVideoWriter结构
typedefstructCvVideoWriterCvVideoWriter;
2.4.2常用函数
下面介绍一下OpenCV中常用的几个函数,也是本系统常用的函数,分别说明如下。
1)cvLoadImage():
载入图像
IplImage*cvLoadImage(
constchar*filename,
intiscolor=CV_LOAD_IMAGE_COLOR
);
filename:
要被读入的文件的文件名。
iscolor:
指定读入图像的颜色和深度。
指定的颜色可以将输入的图片转为3信道(CV_LOAD_IMAGE_COLOR),单信道(CV_LOAD_IMAGE_GRAYSCALE),或者保持不变(CV_LOAD_IMAGE_ANYCOLOR)。
2)cvShowImage():
在指定窗口中显示图像
voidcvShowImage(
constchar*name,
constCvArr*image
);
name:
窗口的名字。
image:
被显示的图像。
3)cvCreateFileCapture()与cvCreateCameraCapture()
CvCapture*cvCreateFileCapture(constchar*filename);
初始化从文件中获取视频;
filename:
视频文件名。
函数cvCreateFileCapture给指定文件中的视频流分配和初始化CvCapture结构。
当分配的结构不再使用的时候,它应该使用cvReleaseCapture函数释放掉。
CvCapture*cvCreateCameraCapture(intindex);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 opencv 运动 目标 检测 跟踪 论文