基于opencv的运动目标检测与跟踪

申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

文档介绍

基于opencv的运动目标检测与跟踪

基于VC的运动图像跟踪算法设计学院自动化学院专业班级学号姓名指导教师负责教师沈阳航空航天大学2013年6月\n\n沈阳航空航天大学毕业设计(论文)摘要运动目标检测与跟踪作为计算机视觉领域的一个重要分支与基础,在工业、医疗保健、航空航天、军事等各个领域具有广泛的应用前景,一直受到广泛的关注,并成为计算机视觉领域的一个研究热点。但是由于运动目标检测问题本身的复杂性,运动目标的检测与跟踪依然面临着诸多挑战。本文在现有研究成果的基础上,对静态场景下的运动目标检测跟踪进行了深入的讨论。本文首先对运动目标检测的基本方法----帧间差分法与背景差分法进行了深入的学习和探讨,然后,借助于OpenCV技术,在VisualC++6.0编程环境下开发了运动目标检测跟踪系统。该系统首先对采集的视频图像序列进行相关的预处理之后,将视频图像序列中的运动目标比较可靠地检测出来。通过系统的测试结果和数据可以得出结论:本文基于OpenCV设计的运动目标检测跟踪系统具有良好的实时性,能够正确地进行运动目标的实时检测与跟踪。关键词:运动目标检测;帧间差分法;视频图像;OpenCV47\n沈阳航空航天大学毕业设计(论文)AlgorithmDesignofImageMotionTrackingBasedonVCAbstractMovingtargetdetectionandtrackingfieldofcomputervisionasanimportantbranchofthefoundation,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;OpenCV47\n沈阳航空航天大学毕业设计(论文)目录1绪论11.1课题来源与背景11.2数字图像处理技术的发展与应用11.3运动目标检测技术的研究现状21.4本文的任务、主要内容及结构41.5本章小结52OpenCV技术介绍62.1OpenCV简介62.2OpenCV的优势62.3OpenCV在VisualC++6.0下的配置方法72.4OpenCV中常用的数据结构及函数介绍92.5本章小结133图像预处理143.1图像的获取与灰度转换143.1.1图像噪声153.1.2噪声的特征153.1.3噪声的分类153.2图像滤波163.2.1中值滤波原理163.2.2中值滤波特性173.3本章小结184运动目标检测194.1运动目标检测的基本方法194.1.1帧间差分法204.1.2背景差法214.1.3光流法224.2本文采用的算法设计2247\n沈阳航空航天大学毕业设计(论文)4.2.1新算法思想234.2.2算法描述234.3图像的二值化244.4数学形态学滤波254.4.1腐蚀与膨胀264.4.2开运算和闭运算264.5目标检测试验与结果分析284.6本章小结295目标跟踪算法的研究305.1运动目标的跟踪原理305.2运动目标特征305.3图像匹配法315.4基于团块的目标跟踪315.5本章小结346程序结果演示与分析356.1运动目标检测与跟踪演示356.2本章小结37结论38参考文献40致谢41附录Ⅰ程序清单4247\n沈阳航空航天大学毕业设计(论文)1绪论如何更好地、更准确地理解视觉信息已经成为当前科学研究的一个重要课题。而计算机视觉就是通过计算机代替人眼及大脑对外界环境进行感知、分析和理解。随着计算机技术的不断发展和计算机性能的逐渐提高,计算机视觉成为了一个崭新且发展迅速的热门领域,并成为计算机科学的重要研究领域之一。计算机视觉技术已经在许多领域得到广泛应用,可以这么说,需要人类视觉的场地方几乎都可以借助于计算机视觉。许多人类视觉无法触及的场合,如危险场景监测、微观物体精确定量、不可见物体感知等,计算机视觉更突显其优越性。1.1课题来源与背景随着计算机技术的高速发展,运动物体的检测和跟踪在图像处理、计算机视觉、模式识别、人工智能、多媒体技术等领域越来越受到人们的关注。运动跟踪和检测的应用广泛,在智能监控和人机交互中,如:银行、交通、超市等场合常常使用运动跟踪分析技术,通过定位物体并对其行为进行分析,一旦发现物体有异常行为,监控系统就发出警报,提醒人们注意并即时的处理,改善了人工监督注意力分散、反应时间较慢、人力资源浪费等问题。运动目标的跟踪在虚拟现实、工业控制、军事设备、医学研究、视频监控、交通流量观测监控等很多领域也有重要的实用价值。特别在军事上,先进的武器导航、军事侦察和监控中都成功运用了自动跟踪技术。而跟踪的难点在于如何快速而准确的在每一帧图像中实现目标定位。正因如此,对运动目标的跟踪和检测的研究很有价值。1.2数字图像处理技术的发展与应用数字图像处理技术是20世纪60年代随着计算机技术和VLS(IVeryLargeScaleIntegration)的发展而产生、发展和不断成熟起来的一个新兴技术领域,它在理论上和实际应用中都取得了巨大的成就。20世纪20年代,图像处理技术首次应用于改善伦敦和纽约之间海底电缆发送的图片质量。到20世纪50年代,计算机发展到一定的水平后,数字图像处理才真正引起人们的兴趣。1964年美国喷气推进实验室通过计算机对“徘徊者七号”47\n沈阳航空航天大学毕业设计(论文)太空船发回的大批月球照片进行处理,获得了巨大成功。20世纪60年代末,数字图像处理初步具备了比较完整的体系,形成了一门新兴的学科。20世纪70年代,数字图像处理技术得到迅猛的发展,理论和方法进一步完善,应用范围更加广泛。在这一时期,图像处理主要和模式识别及图像理解系统的研究相联系,如文字识别、医学图像处理、遥感图像的处理等。20世纪70年代后期到现在,各个应用领域对数字图像处理提出越来越高的要求,促进了这门学科向更高要求的方向发展。特别是在景物理解和计算机视觉(即机器视觉)方面,图像处理已由二维处理发展到三维理解或解释。进入21世纪后,随着计算机技术的迅猛发展和相关理论的不断完善,数字图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就。属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等。该技术成为一门引人注目、前景远大的新型学科。1.1运动目标检测技术的研究现状由运动目标所形成的图像序列可分为两种情况:一种是静态场景,一种是动态场景。前一种情况通常发生在摄像机相对静止状态(如监视某一路口车流量的固定摄像机),后一种情况通常发生在摄像机也在相对运动状态(如装在卫星或飞机上的监视系统)。近几年来,研究人员提出了许多方法用于检测和跟踪序列图像中的运动目标,其中绝大多数方法都假设用于获取序列图像的背景是静止的,而大多数实际情况也满足这一假设,所以人们主要研究的是背景静止-物体运动这种情况下获取的动态序列图像。针对这种情况,现有的运动目标检测方法主要有三类:帧差法(Temporaldifference)、背景减法(Backgroundsubtraction)、光流场法(Opticalflow)。帧差法即帧间差分法,是在连续的图像序列中,提取两个或三个相邻帧,采用基于像素的时间差分来获取图像中的运动信息。帧间差分法计算简单,对动态环境具有较强的适应性,但不能提取出目标的所有相关点,容易在目标内部形成“空洞”,而且要求背景绝对静止或基本无变化(噪声较小),因而适用场合有限。背景减法也称背景差分法,基本思想是将当前帧图像与事先存储或者实时得到的背景图像相减,即当前图像与已知背景图像之间的差分。较早期的背景差分法有均值、中值、运动平均、高斯模型方法等,随着研究的深入,逐渐出现了一些比较成熟的背景差方法。1999年MIT的C.Stauffer提出了基于混合高斯模型的背景差方法,针对高斯噪声的复杂背景,采用多个高斯分布描述像素过程;2000年MIT的Oliver47\n沈阳航空航天大学毕业设计(论文)等人提出了背景特征化建模的方法。主要研究的焦点都落在了背景更新与建模方法上。从实际应用角度来看,帧差和背景减相结合的运动检测是使用最广泛的一种方法。Spagnol等人提出了一种运用邻域的相关系数结合帧差和背景减来进行运动检测的方法,该方法不仅有效地抑制了光照变化对检测结果的影响,并解决了阴影、重影和伪前景等问题。但国内有人指出了Spagnol的方法的三个不足之处:①会将背景颜色一致的区域误判为前景;②当运动目标速度缓慢或静止时,存在漏检;③在背景复杂的情况下,背景更新策略将使背景模型退化。并且,提出了首先用灰度拉伸变换,并结合灰度值信息来改进邻域相关系数的计算方法,以排除背景的误判;然后通过在帧差和背景减相结合的策略中加入运动分析,用来改善运动缓慢目标的检测结果;最后在背景复杂的情况下用运行期更新法进行背景更新,以防止背景模型的退化。最后,光流场法是分析序列图像中运动目标的重要方法,它既可以用于运动目标的检测,也可以用于运动目标的跟踪。所谓光流是指图像中灰度模式运动的速度;它是景物中可见点的三维速度矢量在成像平面上的投影,它表示了景物表面点在图像中位置的瞬时变化;同时光流场携带了有关运动和结构的丰富信息。光流场的计算最初是由国外两名学者提出的,它是一种以灰度梯度基本不变或亮度恒定的约束假设为基础的运动目标探测的有效方法。光流法能够较好的处理运动背景的情况,但计算量巨大,难以应用到实时系统,同时对噪声比较敏感,精度较低,难以得到运动目标的精确边界。而张泽旭等将Canny边缘提取融入光流场分割技术,对单运动目标和多运动目标均取得了比较满意的效果,实时性也大大提高。但如何进一步提高其抗噪性、实时性和运算速度,有待于深入研究。47\n沈阳航空航天大学毕业设计(论文)总的来说,过去的二三十年中,国内外学者在运动目标检测理论及其实现方面做了大量、深入的研究工作,取得了令人瞩目的成果,并将研究的成果应用到很多领域,如智能监控系统、军事制导等等。但是由于运动目标检测问题本身的复杂性和目前视频技术发展水平的限制,运动目标的检测技术至今仍然处于研究和讨论阶段,到目前为止,还没有出现能够适用于各种场合、各种情况的通用算法。现今的各种算法在稳健性、准确性、可靠性等方面还有着这样、那样的不足。这些算法有的简单、易于实现,实时性好,但可靠性不高,在复杂场景和运动下算法容易失效;有的虽然可靠性较高,但算法过于复杂,不利于进行实时检测。而且,静态场景下的运动目标检测的研究较多;而动态场景下的检测研究较少,算法还不成熟。已有的运动目标检测系统大多受限于特定的应用场景,目标检测算法还有待于进一步研究和优化,研究一种鲁棒性好、精确度高、性能稳定和适用性强的运动目标检测算法依然任重道远,面临巨大挑战。1.1本文的任务、主要内容及结构课题研究的主要任务及技术指标主要任务:该毕业设计的主要工作包括了解摄像头图像采集系统的工作过程,首先实现摄像头的数据采集过程,进而编写基于VC的图像处理程序,对画面中的动态物体进行识别并用矩形方框将其标记。技术指标:构造出完整的基于VC的摄像头数据采集及运动图像跟踪系统;实现摄像头的数据采集过程,进而编写基于VC的图像处理程序,对画面中的动态物体进行识别并用矩形方框将其标记。本文的主要内容及结构本文选取的运动目标检测跟踪的算法作为研究重点。利用OpenCV和VisualC++组建实验平台,针对数字图像特定噪声的去除、运动目标的正确识别与分割、处理的实时性要求等难点进行了研究。本文主要工作总结如下:在对图像噪声的处理方面:综合使用各种方法去除图像噪声,通过实验比较了这些方法所适用的场合。在运动目标检测跟踪方面:重点研究了目前在实际应用中普遍采用的以帧间差算法。在对检测出的变化区域进行后处理方面:采用适当的形态学滤波处理得到更清晰、更准确的运动目标,进而进行连通性分析,去除小面积噪声,保留足够大的目标。最后进行区域标记,分割出完整的运动目标,加以标记。综上,本文旨在利用现有的理论、算法和工具,以工程应用为目的,研究如何从序列图像中检测出运动目标。并且,本文基于OpenCV这个开放的计算机视觉程序库,通过VC++编程环境对运动目标检测算法进行了编程实现,完成了运动目标检测系统。按照问题描述、问题建模、问题求解的思路共分六章,主要内容及结构组织如下:第一章绪论。概述了课题的研究背景,主要讨论了运动目标检测技术的研究现状、数字图像处理技术的发展与应用,阐述了论文的整体结构。47\n沈阳航空航天大学毕业设计(论文)第二章介绍研究OpenCV技术。其中OpenCV的优势、OpenCV在VisualC++6.0下的配置方法和OpenCV中常用的数据结构及函数介绍。对数据结构的必要描述为后面函数的应用奠定了一定的理论基础。第三章图像预处理。本章对图像预处理的过程进行了详细的描述。为此,我们首先要图像的提取和灰度转换。然后图像上噪声进行研究,详细叙述了中值滤波原理,利用中值滤波去除图像的噪声。不断进行实验,以确定较为理想的阈值。第四章运动目标检测。本次课题研究运动目标跟踪算法,必然需要对其运动目标进行检测。通过讨论三种目标检测方法,确定本次课题以帧间差法为检测方法,然后对图像进行二值化和数学形态滤波,最后通过实验检测算法的鲁棒性。第五章目标跟踪算法的研究本章首先讨论了运动目标的跟踪原理,详细描述了运动目标特征的重要作用。运动目标的特征是一个重要的跟踪依据,在很多跟踪算法中都有目标特征提取这一环节。所提取的目标特征必须在环境变化、目标自身变化或者运动改变时,仍然能够将运动目标描述出来。最后详细叙述了基于团块的目标跟踪算法,包括数据的定义、模块结构与相应函数。第六章程序结果演示与分析本章将配置好的系统进行演示与分析,系统成功的对画面中的动态物体进行识别并用矩形方框将其标记。1.1本章小结在本章绪论中,主要介绍了基于VC的运动图像跟踪算法设计研究课题的背景知识发展概况及其应用,阐述了运动图像跟踪算法的现实意义,总结了论文的任务、内容与结构。47\n沈阳航空航天大学毕业设计(论文)1OpenCV技术介绍OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和单片机系统中。1.1OpenCV简介OpenCV是Intel®开源计算机视觉库。它由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。其重要重要特性包括:拥有包括300多个C函数的跨平台的中、高层API。它不依赖于其它的外部库——尽管也可以使用某些外部库。对非商业应用和商业应用都是免费(FREE)的。(细节参考BSDlicense)。为Intel@IntegratedPerformancePrimitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的的IPP库,OpenCV将在运行时自动加载这些库。1.2OpenCV的优势1)纯C代码,源代码开放。开源软件之所以能够风靡世界,首先是其开源的免费特性;此外,由于有全球众多编程者的参与,开源软件一般具有简约精炼、资源占用少、功能集中和安全性好的优点。2)丰富的函数功能,强大的图像和矩阵运算能力:OpenCV提供了数组、序列、矩阵、树等基本结构,也包含了差分方程求解、傅立叶分析、积分运算、特殊函数等众多高级数学计算函数,以及各种图像处理操作和目标跟踪、摄像机校准、三维重建等高级视觉函数。3)平台无关性:基于OpenCV开发的程序可以直接在Windows、Unix、Linux、MacOSX、Solaris、HP等平台之间相互移植,无需对代码进行任何修改。4)方便灵活的用户接口。OpenCV作为一个开放的计算机视觉函数库在使用上必然没有Matlab那样解释执行来得方便,而softhitegration将CH和OpenCV绑定起来推出的CHOpenCV47\n沈阳航空航天大学毕业设计(论文),解决了这一使用上的瓶颈。并且具有交互性、强大的扩展功能、Web实现性和可嵌入性等特性。1.1OpenCV在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,在下方填入路径:47\n沈阳航空航天大学毕业设计(论文)图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。47\n沈阳航空航天大学毕业设计(论文)图2.4项目设置1.1OpenCV中常用的数据结构及函数介绍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结构47\n沈阳航空航天大学毕业设计(论文)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:要被读入的文件的文件名。47\n沈阳航空航天大学毕业设计(论文)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);初始化从摄像头中获取视频;index:要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。函数cvCreateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。释放这个结构,也要使用函数cvReleaseCapture。4)cvQueryFrame():从摄像头或者文件中抓取并返回一帧IplImage*cvQueryFrame(CvCapture*capture);capture:视频获取结构。函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。返回的图像不可以被用户释放或者修改。5)cvGetCaptureProperty()与cvSetCaptureProperty()doublecvGetCaptureProperty(CvCapture*capture,intproperty_id);获得摄像头或者视频文件的指定属性;capture:视频获取结构。property_id:属性标识。可以是下面之一:CV_CAP_PROP_POS_MSEC-影片目前位置,为毫秒数或者视频获取时间戳47\n沈阳航空航天大学毕业设计(论文)CV_CAP_PROP_POS_FRAMES-将被下一步解压/获取的帧索引,以0为起点CV_CAP_PROP_POS_AVI_RATIO-视频文件的相对位置(0-影片的开始,1-影片的结尾)CV_CAP_PROP_FRAME_WIDTH-视频流中的帧宽度CV_CAP_PROP_FRAME_HEIGHT-视频流中的帧高度CV_CAP_PROP_FPS-帧率CV_CAP_PROP_FOURCC-表示codec的四个字符CV_CAP_PROP_FRAME_COUNT-视频文件中帧的总数intcvSetCaptureProperty(CvCapture*capture,intproperty_id,doublevalue);设置指定视频获取的属性。目前这个函数对视频文件只支持:CV_CAP_PROP_POS_MSEC,CV_CAP_PROP_POS_FRAMES,CV_CAP_PROP_POS_AVI_RATIO;capture:视频获取结构。property_id:属性标识。可以是下面之一:CV_CAP_PROP_POS_MSEC-从文件开始的位置,单位为毫秒CV_CAP_PROP_POS_FRAMES-单位为帧数的位置(只对视频文件有效)CV_CAP_PROP_POS_AVI_RATIO-视频文件的相对位置(0-影片的开始,1-影片的结尾)CV_CAP_PROP_FRAME_WIDTH-视频流的帧宽度(只对摄像头有效)CV_CAP_PROP_FRAME_HEIGHT-视频流的帧高度(只对摄像头有效)CV_CAP_PROP_FPS-帧率(只对摄像头有效)CV_CAP_PROP_FOURCC-表示codec的四个字符(只对摄像头有效)value:属性的值。6)cvCreateVideoWriter():创建视频写入器结构CvVideoWriter*cvCreateVideoWriter(constchar*filename,intfourcc,doublefps,CvSizeframe_size,intis_color=1);filename:输出视频文件名。fourcc:四个字符用来表示压缩帧的codec例如,CV_FOURCC('P','I','M','1')是47\n沈阳航空航天大学毕业设计(论文)MPEG-1codec,CV_FOURCC('M','J','P','G')是motion-jpegcodec等。在Win32下,如果传入参数-1,可以从一个对话框中选择压缩方法和压缩参数。fps:被创建视频流的帧率。frame_size:视频流的大小。is_color:如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。7)cvWriteFrame():写入一帧到一个视频文件中intcvWriteFrame(CvVideoWriter*writer,constIplImage*image);writer:视频写入器结构。image:被写入的帧。1.1本章小结本章主要介绍了OpenCV技术,包括OpenCV在VisualC++6.0编程环境下的配置方法,着重介绍了与本文工作密切相关的OpenCV中的数据结构和常用函数,为后面的系统实现打下基础。47\n沈阳航空航天大学毕业设计(论文)1图像预处理数字图像处理(DigitalImageProeessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。为了消除采集图像的噪声和干扰,加强有用信息,使图像更易于辨识。其中,处理的重点是去除噪声,但选取怎么样的滤波器最合适则是个难题。通常图像里的噪声类型有高斯噪声、脉冲噪声、瑞利噪声等。高斯噪声的特点是密度大、噪声强度的波动范围宽。受高斯噪声污染的图像不仅在图像的每一像素灰度级上都受影响,而且即便同一灰度级上造成的污染程度也可能存在着较大的差异。图像中出现的一般为高斯噪声。一般用平滑滤波器降低高斯噪声。1.1图像的获取与灰度转换原始彩色图像的背景提取,基本思想是,图像中的某个像素按时间抽样,其作为背景像素的时间比作为运动前景的时间长,即其作为背景的概率比作为前景的概率大,而且背景和前景在颜色上和亮度上都有很大不同。这是因为,对于固定场景,运动物体在运动,其转瞬即逝,大多数时间我们看到的都是静止背景,因此图像上某个像素点作为前景的时间相对作为背景的时间短得多;而且,运动物体和静止背景在色彩上有明显区别,人能轻易分辨出前景物体,即使在一张静止图像上。不论何种方法,都是基于这个思想。利用普通的彩色CCD摄像机拍摄的图像都可以统一规整为宽度为384,高度为255像素(pixels)点的位图文件格式,即彩色的BMP位图文件。BMP格式的图像是以象素的形式记录图像的,它的每个象素点(Pxiel)由红、绿、蓝三原色组成,每个色彩通道的颜色值都由一个八位的字节来表示。BMP图像文件的结构分为:文件头、调色板数据和图像数据三个部分,其中文件头的长度固定为54个字节,文件头中包含两种数据结构。然而,考虑到图像文件的存储量和处理图像需占用大量机器资源,本图像识别系统均采用不含彩色信息的灰度图像,即图像中每个象素仅由一个八位字节表示该像素的亮度值,因而灰度图像是具有256个灰度级的黑白图像,便于后续的图像二值化,处理运算量大大减少。一些系统的摄像部分采用单色CCD摄像头则可以直接得到灰度图像。由真彩图像到灰度图像的变换,本课题用如下的变换公式:47\n沈阳航空航天大学毕业设计(论文)RGB→Gray:Y=0.*R+0.*G+0.72169*B(3.1)其中Y为灰度图像的灰度值,R、G、B为真彩图像的红、绿、蓝三通道颜色值。在openCV中,主要使用的图像格式为Ipllmage,即IpL图像头。Ipllmage结自于IntelImageproeessingLibrary(是所具有的)。OpenCV只支持其中的一个子集。Ipllmgae结构中各成员变量所代表的含义。1.1.1图像噪声噪声主要在数字图像的获取(量化)和传输中产生,可以理解为妨碍人的视觉器官或系统传感器对所接收图像源信息进行理解或分析的各种因素,一般是不可预测的随机信号,只能用概率统计的方法去认识。噪声对图像处理十分重要,影响图像处理的输入、采集、处理的各个环节以及输出结果的全过程。特别是图像的输入、采集噪声的抑制是十分关键的问题,若输入伴有较大的噪声,必然影响处理全过程及输出的结果。因此一个良好的图像处理系统,不论是模拟处理还是用计算机进行的数字处理,无不把减少最前一级的噪声作为主攻目标。1.1.2噪声的特征设图像信号为灰度图像并按二维亮度f(x,y)分布,则噪声可看作是对亮度的干扰,可用n(x,y)来表示。噪声是随机的,因而需用随机过程来描述,即要求知道其分布函数和密度函数。但在许多情况下这些函数很难测出或描述,甚至不可能得到,所以常用统计特征描述噪声,如:均值、方差、相关函数等。用噪声平方的平均值(E[]表示均值操作)描述噪声的总功率;用噪声的方差描述噪声的交流功率;用噪声平均值的平方表示噪声的直流功率。1.1.3噪声的分类根据噪声产生的来源,大致可以分为外部噪声和内部噪声两大类。外部噪声是指从处理系统外来的影响。如天线干扰或电磁波从电源线窜入系统的噪声。内部噪声则有如下四种最常见形式。1.由光和电的基本性质引起的噪声。例如电流可看作电子或空穴运动这些粒子运动产生随机散粒噪声,导体中电子流动的热噪声,光量子运动的光量子噪声等。2.47\n沈阳航空航天大学毕业设计(论文)由机械运动引起的噪声。例如,接头振动使电流不稳,磁头或磁带、磁盘抖动等。3.元器件噪声。如光学底片的颗粒噪声,磁带、磁盘缺陷噪声,光盘的疵点噪声等。4.系统内部电路的噪声。从噪声的分类方法来看是多种多样的。但综合来说,噪声是随机产生的量,所以又可以从统计数学的观点来定义噪声。凡是统计特征不随时间变化的噪声称为平稳噪声,而统计特征随时间变化的噪声称作非平稳噪声。从噪声的分类方法来看是多种多样的。但综合来说,噪声是随机产生的量,所以又可以从统计数学的观点来定义噪声。凡是统计特征不随时间变化的噪声称为平稳噪声,而统计特征随时间变化的噪声称作非平稳噪声。而噪声反应在图片上则有高斯噪声、脉冲噪声、瑞利噪声等。高斯噪声的特点是密度大、噪声强度的波动范围宽。受高斯噪声污染的图像不仅在图像的每一像素灰度级上都受影响,而且即便同一灰度级上造成的污染程度也可能存在着较大的差异。1.1图像滤波为了消除采集图像的噪声和干扰,加强有用信息,使图像更易于辨识,需要去除噪声。可通过图像滤波的方法实现。噪声信号的滤波是信号处理的基本任务之一。过去这一任务主要由线性滤波器来完成,但线性滤波器不能有效地抑制各种非加性高斯噪声,且不利于信号边缘等细节特征的保持。因而,近年来的噪声信号恢复问题主要采用非线性滤波器来处理。在诸多种类的非线性滤波器中,中值滤波器是最具代表性和很有发展前途的一种滤波器,因为它是以排序为基础的,具有并行快速实现的特点,一直受到国内外学者的普遍关注和广泛研究。中值滤波器的主要功能是改变与周围象素灰度值差别比较大的象素的值而改取与周围象素灰度值接近的值,从而消除孤立的噪声点。1.1.1中值滤波原理47\n沈阳航空航天大学毕业设计(论文)中值滤波的基本思想是用象素点邻域灰度值的中值来代替该象素点的灰度值,对于奇数个元素,中值是指按大小排序后中间的数值;对于偶数个元素,中值是指排序后中间两个元素灰度值的平均值。中值滤波这种方法由于不依赖于邻域内那些与典型值差别很大的值,因而能在去除噪声脉冲、椒盐噪声的同时又能保留图像边缘细节。中值滤波一般采用一个含有奇数个点的滑动窗口,具体方法为首先确定一个奇数象素的窗口W,窗口内各象素按灰度大小排队后,用其中间位置的灰度值代替原f(x,y)灰度值成为增强图像(x,y),即:(3.2)其中,W为选定窗口大小。本文在对图像进行滤波时正是考虑了图像中多为尖峰状干扰,中值滤波能去除点状尖峰干扰而边缘不会变坏,若用低通滤波虽能去除噪声但陡峭的边缘将被模糊。对于一维情况,中值滤波器不影响阶跃函数和斜坡函数,并可以有效地消除单、双脉冲,使三角函数的顶端变平;对于二维情况,中值滤波的窗口形状和尺寸对滤波器效果影响很大。使用二维中值滤波最值得注意的是要保持图像中有效的细线状物体,如果图像中的线、尖角细节较多,则不宜采用中值滤波。1.1.1中值滤波特性(1)对某些输入信号中值滤波的不变性;(2)中值滤波去噪性能:可以用来减弱随机干扰和脉冲干扰。对尖峰性干扰效果好,即保持边缘的陡度又去掉干扰,对高斯分布噪声效果差;对脉冲干扰来讲,特别是相距较远的窄脉冲干扰,中值滤波是很有效的。图3.1中值滤波后的图像47\n沈阳航空航天大学毕业设计(论文)1.1本章小结本章主要讨论了图像预处理的思路,先将背景图像进行灰度处理,然后分析图像上产生的噪声,为了消除采集图像的噪声和干扰,分析与选用何种滤波器,讨论滤波器的特性和是否满足需求。47\n沈阳航空航天大学毕业设计(论文)1运动目标检测运动目标检测处于整个视频监视系统的最底层,是各种后续高级应用如目标跟踪、目标分类、目标行为理解等的基础。运动目标检测是指从视频流中实时提取目标,一般是确定目标所在区域和颜色特征等。运动目标检测的结果是一种“静态”目标一一前景目标,由一些静态特征所描述。运动目标检测依据前景目标所处的背景环境,可以划分为两类一一静态背景下运动目标检测和动态背景下运动目标检测,本章结合论文的工作实际主要研究摄像机不发生运动的静态背景运动目标检测算法。相对于静止信息来说,运动信息更能引起人们的注意,也更加有用。例如,对于自动视频监控系统,监控对象的变化也是它更感兴趣的信息。自动视频监控系统是利用摄像机采集到的图像序列对监控的对象进行不间断监视,如出现异常情况,给出报警信号,通知有关人员进行及时处理。为了对监控对象的变化进行检测,系统要对采集得到的图像序列进行有效地处理,从中分离出变化信息,对于一般场合变化信息就是目标的运动。目前,检测运动目标的方法主要有光流法和帧间差阈值法。由于噪声、多光源、阴影、透明性和遮挡性等原因,使得计算出的光流场分布不是十分可靠和精确,光流场的计算实时性和实用性较差。帧间差阈值法速度快,易于硬件实现。不足之处是很难求出运动物体的速度,且当运动物体在成像平面有重迭时,帧间差阈值法不适用。本文使用图像背景差分的方法来对序列图像中的运动目标进行检测。1.1运动目标检测的基本方法目标检测与提取在目标跟踪应用中有着重要的地位。目标检测与提取的准确性直接影响到跟踪的结果和精度。一个好的运动目标检测算法,应该能适用于所监视的各种环境,通常一个优秀的运动目标检测算法应具有以下的特征:1不依赖于摄像头的安装位置;2在各种天气条件下应是鲁棒的;3对环境光线的变化应是鲁棒的;4应能够处理杂乱无章的大面积区域的各种运动,以及视场内目标的叠加;47\n沈阳航空航天大学毕业设计(论文)5能适应场景中个别物体运动的干扰,如树木的摇晃,水面的波动;人们总是希望能有一个能适用于监视各种各样环境,能够满足各种要求以及普遍适用的一个运动目标检测算法,但是实际应用中要达到这样的要求是十分困难的,因为实际应用中不但要考虑到算法要尽量适用于多种环境,而且一般还要在算法的复杂度、可靠性,以及实时性等诸多方面中考虑。通常情况下,运动目标检测的算法可以按照被监视场景是室内还是室外分为室内监测算法和室外监测算法,也可以按照算法具体使用的方法分为连续帧间差分法、背景差分法和光流法。1.1.1帧间差分法对于许多应用来说,检测图像序列中连续帧图像的差异是非常重要的步骤。场景中任何可观察的运动都会体现在场景图像序列的变化上,如果能检测这种变化,就可以分析其运动特性。进一步,如果目标的运动限制在平行于图像平面的一个平面上,则可以得到目标运动特性定量参数的很好估计。图1.1相邻两帧图像差分法基本原理流程连续帧间差分法可分为相邻两帧图像差分和连续三帧图像差分,这里主要介绍相邻两帧图像差分法。相邻两帧图像差分法的基本运算过程如图(4.1)。首先,利用公式(4.1)计算第k帧图像与第k−1帧图像之间的差别,得到差分后的图像,然后对差分后图像使用图像分割算法—式(4.2)进行二值化处理,即认为当差分图像中某一像素的差大于设定的闭值时,则认为该像素是前景像素(检测到的目标),反之则认为是背景像素。在对差分图像二值化后还可以使用数学形态学对其进行滤波处理,然后得到图像凡,最后对47\n沈阳航空航天大学毕业设计(论文)图像进行区域连通性分析,当某一连通的区域的面积大于某一给定闭值,则成为检测目标,并认为该区域就是目标的区域范围,就可以确定目标的最小外接矩形。(4.1)其中,为连续两帧图像;为帧差图像。(4.2)其中T是二值化设定阀值。基于连续帧间差分法的运动目标检测其主要优点是:1算法实现简单。2程序设计复杂度低。3易于实现实时监视。4由于相邻帧的时间间隔较短,因此该方法对场景光线的变化不太敏感,受目标阴影的影响也不太大,可以讲连续帧间差分法对动态环境有较好的适应性。然而,这种方法在使用过程中还存在两个问题:一是两帧间目标的重叠部分不容易检测出来,即只能检测出目标的一部分:二是检测出目标在两帧中变化的信息,这样会存在较多的伪目标点,检测出的目标要比实际的目标大一些。分析原因,前者是由于我们直接用相邻的两帧相减后,保留下来的部分是两帧中相对变化的部分,因此两帧间目标的重叠部分不容易被检测出来;后者是由于相邻两帧必然存在的灰度变化所产生的。1.1.1背景差法其原理如下图所示图1.1背景差分法原理流程47\n沈阳航空航天大学毕业设计(论文)基于背景差分方法的原理非常简单,其基本运算过程如图(4.2)所示:先利用公式(4.3)计算背景图像fbk与当前帧图像fk的差,然后依据公式(4.4)对差分图像Dk进行二值化和形态学滤波处理,并对所得结果Rk进行区域连通性分析,当某一连通的区域的面积大于某一给定阈值,则成为检测目标,并认为该区域就是目标的区域范围,就可以确定目标的最小外接矩形。(4.3)其中fk(x,y)、fbk(x,y)为连续两帧图像,Dk(x,y)为帧差图像。(4.4)其中T是二值化设定阀值。此方法的主要特点是:1要求使用当前被监视环境中的一幅静态背景图像;2利用背景图像与当前帧图像的差进行运动目标检测;在确定了比例参数后调解积分参数,最后调节微分参数。1.1.1光流法光流是指图像亮度模式的表观(或视在)运动。使用“表观运动”的主要原因是光流无法有运动图像的局部信息唯一的确定,例如,亮度比较均匀的区域或亮度等值线上的点都无法唯一的确定其点的运动对应性,但是运动是可以观察到的。这就说明了光流与运动场不一定是唯一对应的,即有光流不一定就是物体运动产生的,反之物体发生了运动也不一定会产生光流。但一般情况下,可以认为光流与运动场没有太大区别,因此就可以根据图运动估计相对运动。由于实时性和实用性都比较差,所以不采用,也就不多做介绍了。1.2本文采用的算法设计47\n沈阳航空航天大学毕业设计(论文)鉴于背景差分法和帧间差分法的优缺点,我们将这两种方法结合起来,使它们优势互补,从而克服相互的弱点,提高运动检测的效果。但是在实际的场景中,即便是室内环境,也存在光线等各种变化造成的干扰,或者人为造成的开灯等光线的强烈变化。所以在背景差分法的实现中,它的固定背景不能一成不变。如果不进行重新初始化,错误的检测结果将随时间不断累计,造成恶性循环,从而造成监控失效。因此,我们在提出检测算法的同时,要建立背景更新模型。保证背景图像能随着光线的变化而变化,确保检测的准确性。1.1.1新算法思想在视频图像序列中,利用已有的背景差分法和帧间差分法作为启示,将动态图像中连续两帧差图像和背景差图像直接进行与操作,再将结果进行二值化处理得到运动结果。这样就达到了加大目标信息的权重,同时抑制了静态背景的效果,得到的运动检测图像包含了更多日标的信息,不仅包含目标轮廓而且还有目标轮廓内的目标相关点,从而将运动目标从背景图像中分离出来,最终得到视频序列图像中运动存在与否的二值化图像。1.1.2算法描述(l)、对序列图像进行3×3中值滤波预处理,去掉图像随机噪声。减少以后运算的复杂度,克服噪声对图像处理结果的干扰。(2)、从视频图像序列中选取出背景图像Bk(x,y),使其只包含固定的背景图像;(3)、在视频图像序列中选取连续的两帧图像,其中前一帧图像Pk-1(x,y),当前帧图像Pk(x,y);(4)、计算当前帧与背景帧的差得FD(x,y),从图像中提取出完整的目标;(5)、计算当前1帧的差得FG(x,y),得到目标的变化量;(6)、求帧差FD(x,y)与,FG(x,y)的交集得到运动目标粗糙的运动区域图像;(7)、数学形态学运算使得运动区域封闭、连续、完整,并去掉背景中的噪声。其中:(4.5)(4.6)47\n沈阳航空航天大学毕业设计(论文)上式中,T为阈值。对于给定视频序列的图像.假设像素点k处没有运动,其帧差dk服从均值为0,方差为的Gauss分布N(0,):(4.7)上式中表示无运动假设,是帧差的统计方差,通常认为它等于摄像机噪声方差的两倍。根据概率统计学假设检验“3”法则,并依据“正确的阈值T应该能消除大部分噪声”的原则。由试验测试得阈值T在本文特定的应用背景下可以选在5~15之间。1.1图像的二值化要从图像中分离出对象物,得把图形(对象物)和其背景作为二值图像对待。图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。47\n沈阳航空航天大学毕业设计(论文)图1.1图像的二值化1.2数学形态学滤波为了解决阈值分割后的差分图像可能会存在的一些目标空洞和少孤立噪声的问题,使用了数学形态学图像处理。形态学一般指生物学究动物和植物结构的一个分支,后来人们用数学形态学表示以形态为对图像进行分析的数学工具。数学形态学的基本思想是用具有一定形态结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的。该技术一般以二值图像为处理对象,但也可以用在某些灰度图像用中。形态学运算主要用于如下几个目的:1图像预处理(去噪声、简化形状)2增强物体结构(抽取骨骼、细化、粗化、凸包、物体标记)3从背景中分割物体4物体量化描述(面积、周长、投影、Euler-poineare特征)黑白点的集合构成了二值图像的描述。假定只考虑黑色像素,其分认为是背景。基本的形态学变换是膨胀和腐蚀,由这两个变换可以更多的形态学运算,如开运算、闭运算和形状分解,等等。47\n沈阳航空航天大学毕业设计(论文)1.1.1腐蚀与膨胀数学形态学中二值图像的形态变换是一种针对集合的处理过程。其形态算子的实质是表达物体或形状的集合与结构元素间的相互作用,结构元素的形状就决定了这种运算所提取的信号的形状信息。形态学图像处理是在图像中移动一个结构元素,然后将结构元素与下面的二值图像进行交、并等集合运算。基本的形态运算是腐蚀和膨胀。在形态学中,结构元素是最重要最基本的概念。结构元素在形态变换中的作用相当于信号处理中的“滤波窗口”。用B(x)代表结构元素,对工作空间E中的每一点x。腐蚀定义为:(4.8)上式表明E用B腐蚀的结果是所有x的集合,其中B平移X后仍在E中。换句话说,用E来腐蚀A得到的集合是B完全包含在E中时B的原点位置的集合。对图像进行腐蚀运算的作用是消除物体边界点。腐蚀可以把小于结构元素的物体去掉。另外,如果两个物体之间有细小的连通,那么选择适当的结构元素,通过腐蚀运算就可以把两个物体分开。膨胀定义为:(4.9)上式表明用B膨胀E的过程是,先对B做关于原点的映射,再将其映象平移x,这里E与B映象的交集不为空集。膨胀运算的作用是把图像周围的背景点合并到物体中。如果两个物体之间的距离比较近,那么膨胀运算可能会使两个物体连通在一起。膨胀对填补图象分割后物体中的空洞很有用。用B(x)对E进行腐蚀的结果就是把结构元素B平移后使B包含于E的所有点构成的集合。用B(x)对E进行膨胀的结果就是把结构元素B平移后使B与E的交集非空的点构成的集合。1.1.2开运算和闭运算膨胀和腐蚀并不是互为逆运算,所以它们可以级连结合使用。例如,可先对图像进行腐蚀然后膨胀其结果,或先对图像进行膨胀然后腐蚀其结果(47\n沈阳航空航天大学毕业设计(论文)使用同一个结构元素)。先腐蚀后膨胀的过程称为开运算。它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。先膨胀后腐蚀的过程称为闭运算。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。实验结果:图1.1膨胀与腐蚀的实验结果可见,二值形态膨胀与腐蚀可转化为集合的逻辑运算,算法简单,适于并行处理,且易于硬件实现,适于对二值图像进行图像分割、细化、抽取骨架、边缘提取、形状分析。但是,在不同的应用场合,结构元素的选择及其相应的处理算法是不一样的,对不同的目标图像需设计不同的结构元素和不同的处理算法。结构元素的大小、形状选择合适与否,将直接影响图像的形态运算结果。因此,很多学者结合自己的应用实际,提出了一系列的改进算法。如梁勇提出的用多方位形态学结构元素进行边缘检测算法既具有较好的边缘定位能力,又具有很好的噪声平滑能力。许超提出的以最短线段结构元素构造准圆结构元素或序列结构元素生成准圆结构元素相结合的设计方法,用于骨架的提取,可大大减少形态运算的计算量,并可同时满足尺度、平移及旋转相容性,适于对形状进行分析和描述。47\n沈阳航空航天大学毕业设计(论文)1.1目标检测试验与结果分析对比几种运动目标检测的基本方法,这里选取帧间法来检测运动目标,在经过图像二值化将运动目标提取出来,在经形态学滤波处理改善提取效果。就可以得到运动目标的方位和大小。图1.1帧间差法运动目标检测演示由此可以看出,通过合理的快速的算法实现,该方法在应用中取得了很好的效果。首先分析序列图像的差分图像的统计特性,自适应对图像进行二值化处理,去除了背景,突出其中的运动目标,以此为基础,结合数学形态学和面积阈值的方法,消除了干扰和背景中可能存在的周期性运动物体所带来的噪声,最后分割出目标的运动区域,通过分析差分图像的投影图,在较短几帧内从图像序列检测出运动目标,定位目标的位置。47\n沈阳航空航天大学毕业设计(论文)1.1本章小结本章介绍了差分法识别目标的具体过程及实现流程,主要内容为利用VC++6.0实现从序列帧中对检测出运动的目标。详细介绍了识别过程中用到的图像的二值化、帧间法、形态学滤波等理论基础,并给出了部分处理过程的结果图。47\n沈阳航空航天大学毕业设计(论文)1目标跟踪算法的研究目标跟踪是在事先不了解目标运动信息的条件下,通过来自信息源的数据实时估计出目标的运动状态,从而实现对目标的位置和运动趋势的判定。运动目标的跟踪问题是一个复杂的估计问题。开始主要是用于军事研究,是精确武器制导中的关键技术。目前,随着图像跟踪技术研究的深入,图像跟踪的应用已渗透到诸如视觉监控、医学诊断等越来越多的领域。研究一种鲁棒性好、精确度高、性能稳定和适用性强的目标跟踪方法依然面临巨大挑战,并且具有重要的理论意义和实用价值。1.1运动目标的跟踪原理目标跟踪即等价于在连续的图像帧间创建基于位置、速度、形状、纹理、色彩等有关特征的对应匹配问题。1.2运动目标特征运动目标的特征是一个重要的跟踪依据,在很多跟踪算法中都有目标特征提取这一环节。所提取的目标特征必须在环境变化、目标自身变化或者运动改变时,仍然能够将运动目标描述出来。图像目标的特征大致分为:①像的视觉特征,如图像的轮廓、边缘、形状、纹理和区域等特征;②图像的统计特征,如颜色直方图、各种不变矩等特征;③图像变换系数特征,如傅立叶描述子、小波变换系数和自回归模型等特征;④图像的代数特征,如图像矩阵的奇异值分解等。图像的边缘是图像的最基本特征。所谓边缘(或边沿)是指其周围像素灰度有阶跃变化或屋顶变化的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间、基元与基元之间。图像中的边缘通常与图像亮度的不连续性或图像亮度的一阶导数的不连续性有关。图像亮度的不连续性可分为:1、阶跃不连连续,即图像亮度在不连续处的两边的像素灰度值有着显著差异;47\n沈阳航空航天大学毕业设计(论文)2、线条不连续,即图像亮度突然从一个值变化到另一个值,保持一个较小的行程后又返回到原来的值。实际中,阶跃边缘将变成斜坡型边缘,线条边缘将变成屋顶型边缘。轮廓(contour)是指将检测到的边缘连接起来,而形成的封闭的或非封闭的轮廓。封闭的轮廓对应于区域的边界,而区域内的像素可以通过填充算法来填满,断开的轮廓可能是区域边界的一部分,也可能是图像的线条特征,如手写体笔画、图画中的线条等。轮廓可以用边缘有序表或曲线来表示,其中曲线被称为轮廓的数学模型,包括线段、二次曲线、三次样条曲线等。轮廓的表示要求:1、轮廓应该是一种简洁的表示;2、轮廓应能精确的逼近图像特征;3、轮廓应适合于后处理阶段的计算。1.1图像匹配法通过图像匹配法可以识别待跟踪的运动目标并且确定其相对位置。早在上世纪50年代末期,欧洲MACE巡航导弹就已开始采用图像匹配技术作地形匹配制导。相关跟踪是根据测量两幅图像之间的相关度函数去计算目标的位置变化,跟踪点就是两个图像匹配最好的位置,即相关函数的峰值。在相关跟踪的误差信号处理中,对相关度的取值有一定的要求,相关跟踪系统对与选定的跟踪目标图像不相似的其它一切景物都不敏感,所以它有较好的选择跟踪能力和抗背景干扰能力。相关跟踪是把一个预先存储的目标图像样板作为识别和测定目标位置的依据,用目标样板与实时目标图像的各个子区域图像进行比较(算出相关函数值),找出和目标样板最相似的一个子图像位置,就认为是当前目标的位置,这就是相关跟踪的基本思想,这种方法也叫做“图像匹配”。它的基本原则就是通过相关函数的计算来找到待跟踪目标及其位置。1.2基于团块的目标跟踪基于团块(blob)47\n沈阳航空航天大学毕业设计(论文)的跟踪算法基本原则是对候选像素进行图像分割,判断该像素是属于目标还是属于背景或者属于其他的区域。基于团块的跟踪算法也可以称为基于图像分割的跟踪,因为它和图像分割所使用的基本方法是一致的,都是根据给定线索优化像素的选择、合并和分离,都把具有相同特征的像素点集合成一个区域。它与传统的图像分割的不同在于:目标视觉跟踪的目的是在图像序列中进行目标定位,可以有一定程度的像素分类不准确,只需分割结果足可区分目标和背景,而传统的图像分割算法需要精确显示目标轮廓。分割线索一般有目标的运动特征、纹理特征和图像深度信息等。这里提到了团块的概念,在OpenCV中团块的数据结构定义如下:CvBlob结构描述团块的位置,大小和标识符(ID)。x和y分别是团块位置的横坐标和纵坐标,w和h分别是团块的宽度和高度,ID是团块的标识符,用于区分不同的团块。typedefstructCvBlob{floatx,y;/*团块位置*/floatw,h;/*团块大小*/intID;/*团块ID*/}CvBlob;CvBlobSeq类用来表示一系列团块。这些团块的集合可以是运动轨迹,或当前帧中的所有团块。所以些列表是一个具有索引的数组,该数组里的每个元素可以通过关键值(key)来访问。这个类还提供一些操作函数,用来方便地添加和删除团块。classCvBlobSeq{public;CvBlobSeq(intBlobSize=sizeof(CvBlob));virtual~CvBlobSeq();virtualCvBlob*GetBlob(intBlobIndex);/*根据索引获取团块*/virtualCvBlob*GetBlobByID(intBlobID);/*根据团块ID获取团块*/virtualvoidDelBlob(intBlobIndex);/*根据索引删除团块*/virtualvoidDelBlobByID(intBlobID);/*根据团块ID删除团块*/virtualvoidClear();/*清除所有团块*/virtualvoidAddBlob(CvBlob*pB);/*添加一个团块*/virtualintGetBlobNum();/*获取团块数目*/};47\n沈阳航空航天大学毕业设计(论文)CvFGDetector是一个虚类,描述了前景检测模块的接口。具体的前景检测算法在文件cvaux/src/vs/bgfg_estimation.cpp中实现。如果想创建一个自己的前景检测类,需要首先创建一个CvFGDetector的子类,然后CvFGDetector中的所有虚函数。前景检测模块的输入数据为当前帧图像,输出数据为当前帧的前景掩码(mask),其结构如图5.1所示。前景掩码视频帧前景检测模块图1.1前景检测模块结构前景检测模块将当前帧上的像素分为前景像素和背景像素。例如运动的物体(人)被认为是前景,而视频中不动的部分都被当做背景区域。前景掩码通过函数GetMask获得。所有函数必须在子类中被重载,同时也需要重写新类的创建函数。新团块检测模块的输入数据为当前帧的前景掩码和已有的团块,输出数据为新检测到的团块。此模块结构如图5.2所示。视频帧新团块(pos,size)前景掩码新团块检测模块图1.2新团块检测模块结构团块跟踪模块的输入数据为当前帧(是RGR图像)、当前帧的前景掩码和新团块,输出数据为当前帧的团块信息(ID,pos,size)。此模块的结构如图5.3所示。前景掩码新团块位置团块(ID,pos,size)团块跟踪模块视频帧图1.3团块跟踪模块结构新检测到的团块需要加入到团块跟踪模块列表cvblobTrackerList中,CvBlobTrackerList是团块跟踪模块的一个实现,是CvBlobTracker的一个子类,是一个外壳(shell)模块。此模块的目的是简化团块跟踪模块的创建。创建此类的函数cvCreateBlobTrackerList只有一个参数,该参数是一个更简单的团块跟踪器CvBlobTrackerOne。CvBlobTrackerOne只实现一个团块的跟踪功能。47\n沈阳航空航天大学毕业设计(论文)CvCreateBlobTrackerList的函数原型如下。CvBlobTracker*cvCreateBlobTrackerList(CvBlobTrackerOne*(*create)());所以,CvBlobTrackerList与CvBlobTrackerOne的关系如图5.4所示。团块跟踪列表BlobTrackerOne跟踪团块1团块(ID,pos,size)团块(ID,pos,size)团块(pos,size)团块(pos,size)团块(pos,size)团块(pos,size)BlobTrackerOne跟踪团块N图1.1团块跟踪列表1.2本章小结在本章中首先介绍了运动物体的目标特征,对几种比较常见的的目标跟踪算法进行比较,重点描述了团块跟踪算法,并给出部分流程图与核心代码。总的说来,运动目标跟踪的难点在于如何快速而可靠地从一帧图像到另一帧图像中匹配目标。只有快速才能保证跟踪的实时性,而可靠性则是目标跟踪最基本的要求。因此如何选取目标的特征信息,并且在可靠的前提下简化运算是目标跟踪的关键。47\n沈阳航空航天大学毕业设计(论文)1程序结果演示与分析本文的硬件平台为普通的笔记本电脑,内存容量为2G。视频输入有一个USB摄像头。软件开发平台为WindowsXP、OpenCV1.0以及MSVisualC++6.0(以下简称VC6.0)。1.1运动目标检测与跟踪演示本实验是在学校寝室内,固定好摄像头,连接摄像头后,打开运行程序可以得到如图所示的结果图1.1运动目标检测与跟踪演示图147\n沈阳航空航天大学毕业设计(论文)图1.1运动目标检测与跟踪演示图2图1.2运动目标检测与跟踪演示图347\n沈阳航空航天大学毕业设计(论文)1.1本章小结在本章中,主要是将OPENCV进行配置,与摄像头连接,固定在合适的地方后,运行系统。系统成功的对画面中的动态物体进行识别并用矩形方框将其标记,但是出现由于多人距离相近识别成一个运动目标的情况,仍需进一步提高。47\n沈阳航空航天大学毕业设计(论文)结论随着计算机视觉在军事领域、交通智能监控领域的发展,视频的运动目标检测及跟踪必然会得到越来越广泛的应用和发展。本论文历时四个月年,主要研究的是应用OpenCV实现运动目标的检测和跟踪,实验结果表明系统具有良好的鲁棒性和精确度,达到了毕业设计的预期目标,结合工作中的问题和实际应用,论文主要完成了以下几个方面的工作:1.OPENCV平台的配置与函数的学习阐述了课题的研究背景和研究意义,并说明了当前研究的难点,以及本课题所要解决的问题和创新点。本文以VC6.0为平台,通过调用OPENCV函数进行算法设计。首先正确配置OPENCV平台,介绍了OpenCV函数库,并实现实验平台的搭建。提取单帧视频图像,采用各种算法对其进行图像预处理,并对处理效果进行分析比较。2.运动目标检测与跟踪方面在运动目标检测跟踪方面:重点研究了目前在实际应用中普遍采用的以帧间差算法。在对检测出的变化区域进行后处理方面:采用适当的形态学滤波处理得到更清晰、更准确的运动目标,进而进行连通性分析,去除小面积噪声,保留足够大的目标。最后进行区域标记,分割出完整的运动目标,加以标记。3.系统实验测试在软件的设计和实现过程中,对多种设计方案和算法进行编程实现,经过多次测试,性能稳定,运行良好。分析并改进了目前较常用的图像预处理、分割、特征提取、图像识别与跟踪算法,并对每一个模块进行了详细的论述和设计。这就是本次课题研究达到的目标。总的来说,本次毕业设计基本上完成了课题要求。实现摄像头的数据采集过程,进而编写基于VC的图像处理程序,对画面中的动态物体进行识别并用矩形方框将其标记。如何提高目标识别与跟踪算法的精度、速度及抗干扰能力是实时图像目标识别与跟踪的主要研究任务。然而,迄今为止的主要目标图像识别和跟踪算法却无法同时满足这三方面的要求。由于时间有限和一些其它客观上的原因,本文只是对运动目标的检测与跟踪进行了基础性的研究。对于存在的一些问题,有待于以后进一步改进和完善。47\n沈阳航空航天大学毕业设计(论文)1)本文目标图像识别与跟踪算法的前提简单背景下的面目标,具有一定的像素面积,且只能是单个目标的跟踪,对距离目标较近的运动物体的干扰比较敏感,所以干扰问题有待于进一步解决。2)本文研究的跟踪算法也有待进一步改进,使之能够在更短时间内,更精确地完成目标的跟踪。由于研究时间和所学知识所限,我对本领域的相当一些内容了解还不够透彻,仍有很多难题需要解决,如阴影的去除,目标的重叠,以及目标与背景色彩相近时的辨别,以及程序移植到嵌入式系统中的问题,同时程序本身也需要进一步地完善。在处处智能化的今天,基于OpenCV的运动目标的检测与跟踪有着很美好的前景,相信今后会有更多的研究人员投入其中,使其应用越来越广泛。47\n沈阳航空航天大学毕业设计(论文)参考文献[1]刘瑞祯,于仕琪.OpenCV教程基础篇[M].北京:北京航空航天大学出版社,2007.[2]彭达.VisualC++多媒体编程技术[M].北京:人民邮电出版社,1999.[3]丁金铸.基于图像处理的运动目标检测跟踪系统的设计与实现[D].华中师范大学,2007.[4]王建中,姜昱明.基于块匹配的运动对象检测算法[J].微电子与计算机,2005,22(1):10-12.[5]林少丹.VC++程序设计基础[M].北京:人民交通出版社,2009.[6]唐双发.基于OpenCV的车辆视频检测技术研究[D].华中科技大学,2009.[7]李庆忠,陈显华,王立红.视频监视中运动目标检测与识别方法[J].计算机工程,2004,30(16):30-33.[8]胡晓峰,吴玲达,老松杨,司光亚.多媒体技术教程[M].北京:人民邮电出版社,2002.[9]韩鸿哲,王志良,刘冀伟,李郴,韩忠涛.阴影消除的自适应背景建模[C].第二届全国智能视觉监控学术会议论文集,2003,35-39.[10]张玲,叶海炳,何伟.一种基于边缘信息的改进车辆检测方法[J].重庆大学学报(自然科学版),2004,27(11):56-58.[11]J.B.Kim,H.J.Kim.EfficientRegion—basedMotionSegmentationforVideoMonitoringSystem[J].PatternRecognitionLetters,2003,3(24):113-128.[12]王春平,朱元昌,黄允华.基于图像信息的跟踪算法分析[J].火力与指挥控制,2000,25(1):64-67.[13]杨枝灵,王开.VisualC++数字图像获取处理及实践应用[M].北京:人民邮电出版社,2003.[14]H.ChenandT.liu.Trust-RegionMethodsforReal-TimeTracking[C].Proc.EigthInt'1Conf.ComputerVision,2001,52-55.[15]NilsTSiebel.DesignandImplementationofPeopleTrackingAlgorithmsforVisualSurveillanceApplicationsThesisfortheDegreeofDoctorofPhilosophy[D].TheUniversityofReading,2003.47\n沈阳航空航天大学毕业设计(论文)致谢时间过得真快,由于我在校外实习,毕业设计一直让指导老师很费心,在指导老师的指导和督促下,完成这个学期的毕业设计。本次毕业设计还有很多不足的地方需要改进,指导老师虽然有繁忙的工作,但仍抽出时间耐心给予我毕设上的指导和帮助,在此,谨向关威老师致以深深的敬意和由衷的感谢。当然,毕业设计这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。需要的是我们的细心和耐心,我正在努力的学习,希望最后能交上一个完美的答卷。在这次设计当中,实现的路很漫长,不懂的地方还很多,非常感谢关威老师。感谢老师的谆谆教诲,感谢老师的理解支持。最初的“懵懂”、焦虑并没有影响老师的悉心关切,设计中遇到的问题老师都一一解答。还要感谢给我帮助的同学们,他们对我毕业设计的成功起到了关键的作用。那么多个日夜,如此多的困难,同学们勤恳塌实,从开始到结束,没有显出一点倦意,始终热情高涨,我感谢这种氛围,感谢学校提供的良好条件。在毕业设计的实践中磨练了我的意志,很大程度上培养了我拼搏的工作精神。总之在这个过程里我受益匪浅,让我更加明了了自己专业的方向。再次向帮助过我的老师们、同学们说声“谢谢”!47\n沈阳航空航天大学毕业设计(论文)附录Ⅰ程序清单#include"cv.h"#include"highgui.h"#include#include#include#include#include//跟踪的参数(单位为秒)constdoubleMHI_DURATION=0.5;//0.5s为运动跟踪的最大持续时间constdoubleMAX_TIME_DELTA=0.5;//最大时间增量为0.5sconstdoubleMIN_TIME_DELTA=0.05;//最小时间增量0.05sconstintN=3;//constintCONTOUR_MAX_AERA=3;//ringimagebufferIplImage**buf=0;intlast=0;//临时图像IplImage*mhi=0;//运动历史图像CvFilterfilter=CV_GAUSSIAN_5x5;CvConnectedComp*cur_comp,min_comp;CvConnectedCompcomp;CvMemStorage*storage;//内存存储器CvPointpt[4];//二维坐标系下的点,类型为整型 ,通常以0点为原点,有x坐标和y坐标47\n沈阳航空航天大学毕业设计(论文)//参数://img–输入视频帧//dst–检测结果voidupdate_mhi(IplImage*img,IplImage*dst,intdiff_threshold){doubletimestamp=clock()/100.;//时间戳CvSizesize=cvSize(img->width,img->height);//得到当前帧的尺寸inti,j,idx1,idx2;IplImage*silh;ucharval;floattemp;IplImage*pyr=cvCreateImage(cvSize((size.width&-2)/2,(size.height&-2)/2),8,1);CvMemStorage*stor;CvSeq*cont,*result,*squares;CvSeqReaderreader;/*先进行数据的初始化*/ if(!mhi||mhi->width!=size.width||mhi->height!=size.height){if(buf==0)//若尚没有初始化则分配内存给他 {buf=(IplImage**)malloc(N*sizeof(buf[0]));memset(buf,0,N*sizeof(buf[0]));}for(i=0;ih_next){//Numberpointmustbemorethanorequalto6(forcvFitEllipse_32f).if(cont->total<6)continue;//Drawcurrentcontour.cvDrawContours(img,cont,CV_RGB(255,0,0),CV_RGB(255,0,0),0,1,8,cvPoint(0,0));}//endoffor-loop:"cont"*///直接使用CONTOUR中的矩形来画轮廓for(;cont;cont=cont->h_next){CvRectr=((CvContour*)cont)->rect;if(r.height*r.width>CONTOUR_MAX_AERA)//面积小的方形抛弃掉{cvRectangle(img,cvPoint(r.x,r.y),cvPoint(r.x+r.width,r.y+r.height),47\n沈阳航空航天大学毕业设计(论文)CV_RGB(255,0,0),1,CV_AA,0);}}//freememorycvReleaseMemStorage(&stor);cvReleaseImage(&pyr);}intmain(intargc,char**argv){IplImage*motion=0;CvCapture*capture=0;if(argc==1||(argc==2&&strlen(argv[1])==1&&isdigit(argv[1][0])))capture=cvCaptureFromCAM(argc==2?argv[1][0]-'0':0);elseif(argc==2)capture=cvCaptureFromAVI(argv[1]);if(capture){cvNamedWindow("Motion",1);//建立窗口for(;;){IplImage*image;if(!cvGrabFrame(capture))//捕捉一帧 break;image=cvRetrieveFrame(capture);//取出这个帧if(image)//若取到则判断motion是否为空 {if(!motion){motion=cvCreateImage(cvSize(image->width,image->height),8,147\n沈阳航空航天大学毕业设计(论文));//创建motion帧,八位,一通道cvZero(motion);//零填充motionmotion->origin=image->origin;//内存存储的顺序和取出的帧相同 }}update_mhi(image,motion,60);//更新历史图像cvShowImage("Motion",image);//显示处理过的图像if(cvWaitKey(10)>=0)10ms中按任意键退出 break;}cvReleaseCapture(&capture);//释放设备cvDestroyWindow("Motion");//销毁窗口 }return0;}内部资料仅供参考9JWKffwvG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ^!djs#XuyUP2kNXpRWXmA&UE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmUE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z8vG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ^!djs#XuyUP2kNXpRWXmA&UE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^G89AmUE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z8vG#tYM*Jg&6a*CZ7H$dq8KqqfHVZFedswSyXTy#&QA9wkxFyeQ^!djs#XuyUP2kNXpRWXmA&UE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmUE9aQ@Gn8xp$R#͑Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^GjqvadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%MadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*adNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%MzadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@adNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^GjqvUE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3adNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz84!z89Amv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^GjqvtnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqvz849Gx^Gjqv^$U*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNuGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5ux^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7Jv#nD6YWRrWwc^vR9CpbK!zn%MzFA5uxY7JnD6YWRrWwc^vR9CpbK!zn%Mz849Gx^Gjqv^$UE9wEwZ#Qc@UE%&qYp@Eh5pDx2zVkum&gTXRm6X4NGpP$vSTT#&ksv*3tnGK8!z89AmYWpazadNu##KN&MuWFA5uxY7Jv#nD6YWRrWwc^vR9CpbK!zn%MzXNQExJB8VK#%W7m$ZA5JdkVWce9APz^FvJzwYWCcyAh*bnxBvaFQH8YHV$#&3Q3vdWe3YXvbJr内部资料仅供参考图2-3:地块位置图47\n沈阳航空航天大学毕业设计(论文)47
查看更多

相关文章

您可能关注的文档