基于图像的目标自动识别与跟踪技术研究_第1页
基于图像的目标自动识别与跟踪技术研究_第2页
基于图像的目标自动识别与跟踪技术研究_第3页
基于图像的目标自动识别与跟踪技术研究_第4页
基于图像的目标自动识别与跟踪技术研究_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

基于图像的目标自动识别与跟踪技术研究摘要:近年来,由于科学技术的飞速发展,计算机的视觉技术与视觉图像的并行处理技术在我们生活中所扮演的角色越来越重要。本课题将会围绕着在视频监控图像中,对运动目标进行检测识别以及对目标跟踪的算法展开研究,以此来重点实现算法的实时性、可靠性、算法的软硬件兼容以及算法的处理速度。为了实现算法的流程,将利用Python语言和OpenCV视觉库来搭建运行平台,对数字图像的去噪、目标检测的实时性和可靠性与跟踪算法的稳定性与可靠性进行研究。本文中所运行的算法将实现从视频监控图像里自动识别出不同轮廓外形的物体并对其运动的轨迹进行持续跟踪。关键词:OpenCV视觉库;Python语言;目标识别与跟踪;数字图像处理

目录1. 引言 11.1 课题背景 11.2 研究现状 11.2.1 目标的自动识别与追踪技术发展历史 11.2.2 OpenCV的发展现状 21.2.3 Python的发展现状 31.3 研究的意义与目的 31.4 主要研究内容 42 计算机图像处理相关技术 52.1 图像颜色模型 52.2 图像处理 52.3 图像灰度化 62.4 Canny边缘检测 62.5 常见的图像滤波方式 73 基于图像的目标自动识别与跟踪技术研究的设计 93.1 程序运行开发环境搭载 93.2 算法流程设计 93.3 图像的识别 103.3.1 YOLOv4算法 103.3.2 YOLOv4算法的调用 113.3.3 程序框架的设计 113.3.4 目标识别的设计 133.4 目标图像的跟踪设计 144结论 18致谢 19参考文献 20

引言 课题背景视觉系统是我们人类的主要感觉系统,是我们获取外界信息的主要途径来源,它是一种为我们人类提供丰富的外界信息的重要媒介。跟据统计显示,我们所接收到的80%左右的信息都是通过视觉系统接收的。然而,因为人类的视野和精力问题限制,我们的视觉系统在各个领域的应用受到了很大的限制,工作效率也很低。随着近几年以来,图像处理技术的快速发展,也相应地对目标自动识别和跟踪技术的发展产生了极大的促进作用。尤其是在不同的环境下,如何实现目标的准确识别和稳定的跟踪,其相关方面的研究具有重要的理论价值和实践意义。图像处理与识别技术是一项包含众多学科领域的先进高科技研究。随着计算机软件技术和硬件技术的不断提高,计算机图像处理与识别技术在20世纪80年代中期到90年代末期得到了高速发展,并且开始在工业、农业、公共交通、经济金融、地质勘探、海洋观察、气象预报、生物医学、军事研究、公安监控、电商服务、卫星定位、机器人视觉系统、目标跟踪、车辆GPS导航、多媒体网络信息通信等众多领域被广泛应用,收获了明显的经济效益和不错的社会反响。研究价值大到战争中对敌人的飞机,舰船,导弹等军事目标的拦截,小到我们生活中手机照相自动对人脸识别并对焦,这项技术在我们身边可谓是无处不在。其在机械工业领域也有广泛运用的前景,例如对精细的小零件进行分类,人眼在这种高精度环境下不能时刻保持高强度状态,所以需要利用计算机来进行识别和分类。目前,计算机图像的处理与识别技术被人们当作是认识和改造新世界的重要方法,是在21世纪信息化时代能引领我们未来发展的一门高新技术学科[1]。研究现状目标的自动识别与追踪技术发展历史目标的自动识别和跟踪技术是现代科学界在视觉领域研究的热门话题,伴随着计算机技术的高速发展和计算机应用的广泛普及,目标的自动识别和跟踪技术取得了显著的进步[2]。上个世纪对于图像的处理主要集中在对单幅图像的处理,即使在处理动态图像时跟踪其中运动的目标,也具有明显的静态图像处理色彩。直至上世纪80年代,光流法被提出,目标的跟踪研究才在真正意义上踏入了研究动态图像序列的领域。但是光流法对于现在的计算机处理速度来说挑战过于艰巨,在实际应用时很难满足实时性[3]。此外,在视频序列中存在的噪声会对光流法的追踪产生极大的干扰,因此光流法现在很难得到广泛的应用。由于对视觉跟踪这一项技术的研究价值和研究回报非常高,并且随着计算机技术在上世纪末期取得的卓越进步,人们对于计算机视觉跟踪技术发展的需求愈发强烈,这使得欧美等发达国家开始了对视觉跟踪技术开展了深入探索和研究。1997年通过美国国防署牵头,美国CarnegieMellon大学为首,由麻省理工大学等众多知名高校参与的视觉监控重大项目VASM(VisualSurveillanceandMonitoring)成立,在对用于战场和普通民用场所进行监控的自动视频理解技术这一课题展开研究。美国波士顿大学研制的用于在高速公路上行驶的汽车上的实时视觉系统采用颜色,边缘和运动信息来识别和跟踪道路边界、车道和其他车辆。Maryland大学所研制的实时视觉监控系统是对一个人及其肢体行为进行实时处理的系统,它不仅能够检测并跟踪人的肢体活动,还可以通过建立人物的外观模型来实现对多个人进行目标跟踪,甚至还能够检测出是否有物体被跟踪对象携带等行为[4]。此外,英国的雷丁大学对车辆和行人进行跟踪并开展其交互作用识别的相关研究。美国麻省理工大学在物体的检测、识别和跟踪方面也做了大量研究工作。国内在1986年开始对视觉跟踪技术展开研究,在视觉跟踪领域的理论知识与实践技术方面得到了发展[5]。除此之外,中国科学院自动化研究所、清华大学、交通大学等在目标检测、识别和跟踪方面做了大量研究工作,取得了一系列研究成果。目前这项技术在民用领域,如视频监控,人脸识别,车辆识别等场合应用研究比较多,取得了较大的成就。OpenCV的发展现状OpenCV是OpenSourceComputerVisionLibrary的简称,是由英特尔公司所资助的开源计算机视觉库,包含许多计算机视觉方面的通用算法来实现图像的处理,比如说图像的特征检测与追踪、运动轨迹分析以及目标的识别和分割。随着时代发展,人们对数字图像的处理需求不断增加,越来越多的图像处理软件和程序也应运而生。但它们或多或少都有些缺点:很少有软件包对高级数学函数进行收录;MATLAB虽然拥有丰富的数学函数,但是其运行速度相比较其他的软件不够理想;大多数软件包对网络服务器程序的应用支持较差;大部分软件包缺少可嵌入性。OpenCV是在C/C++语言的基础上所开发的一种开源软件,它可以在Linux、Windows、Android等操作系统上运行,还提供有MATLAB、Python等语言的接口,使许多计算机视觉方面的很多算法以及图像处理的实际操作得以实现,其巨大的函数库可以为大多数计算机视觉问题创建一个完整的解决方案[6]。OpenCV因为其高水平的图像处理和矩阵运算能力,函数处理库丰富多样,可以大大减少开发人员开发时的投入精力,有效地提高程序的开发效率并减少运行时程序报错的几率。因此在计算机视觉的图像处理上广泛使用OpenCV,OpenCV近几年在图像的特征检测以及图像识别方面所发挥的作用越来越重要。CV图像处理和视觉算法MCV图像处理和视觉算法MLL统计分类器HihhGUIGUI、图像和视频输入、输出CCXCORE基本结构和算法、XML支持、绘图函数图STYLEREF1\s1.SEQ图\*ARABIC\s11OpenCV基本架构Python的发展现状Python是在上世纪90年代初所设计的一门计算机编程语言,它不仅有高效的高级数据结构可以选择,还可以简洁明了地直接面向编程对象进行编程。自2004年起,Python的使用率逐年增长。Python语言作为解释型的通用语言,因为其拥有简洁、易读和可扩展性等相比于其他编程开发语言所不具备的特点,国外进行一些科学计算的研发也越来越倾向于使用Python语言,有些知名的大学甚至采用Python语言来进行程序设计的教学。此外,Python的调用接口在众多开源的科学计算软件中都能提供,例如计算机OpenCV视觉库、三位可视化库VTK以及医学图像处理库ITK;而Python也有不少专用科学计算扩展库,比如说为Python分别提供了数值的快速处理、数值的计算和绘制图片等功能的NumPy、SciPy和Matplotlib。因此在实验数据处理、图表绘制以及对应用程序开发方面选择Python语言以及用它众多的程序扩展库来搭建开发环境成了众多人的选择。Python目前的前景发展良好,是人工智能编程首选的语言,除此之外Python还在Web开发、嵌入式应用开发和自动化运行等方面展现出了越来越大的作用。研究的意义与目的感觉是人们与外界交流的桥梁,是人们感受外界信息的窗口,它的主要作用是识别我们周围的物体并判别它们的联系,使人类的主观思维和客观世界建立起关系。而视觉系统是人类的主要感官系统之一,是获取外界信息的主要媒介。但我们的眼睛受到视野和精度限制,使我们的视觉系统在各领域发挥的作用都非常有限。随着计算机技术的高速发展,让计算机处理视觉信息,弥补人类视觉系统的不足成为了一项重要研究课题,计算机视觉技术这一项研究的发展因此得到了推动。计算机视觉这一学科是将图像处理、人工智能、计算机识别模式、计算机图形、物理和数学等领域相融合交互性很强的学科。计算机视觉的研究目的是把我们感官所感知到的外部世界中物体的形状,位置以及运动信息进行识别、描述和储存。对运动的目标进行追踪是视频分析方面的研究,视频分析的研究方向是对图像的序列进行分析处理,分析预测出目标运动的轨迹和运动的规律或者是向系统决策提供是否支持执行上报信息的支持,主要研究内容有对运动物体检测、对目标识别并分类以及目标追踪等[7]。对视频中运动的目标进行追踪的研究和应用是人们对计算机视觉领域重点关心的科学技术,现在在科学建设、国防技术、航空航天等科学研究方面正被日渐广泛地应用,上到国家科研,下到人民生活,目标的自动识别和跟踪技术在现代社会中正扮演着重要作用并且发展前景广阔。主要研究内容1.熟悉OpenCV的整体结构,熟悉并掌握OpenCV编程,了解OpenCV的算法,并使用算法运行出结果,实现在场景中的自动识别与追踪系统。2.使用Python语言编程运行目标自动识别和跟踪的程序并分析程序结构,了解其原理。3.了解计算机图像处理的过程,即对数字图像去噪、目标检测的实时性和可靠性与跟踪算法的稳定性与可靠性进行研究。4.从监控视频图像中的众多物体中准确识别出不同的物体并进行位置持续追踪。

计算机图像处理相关技术图像颜色模型计算机图像中的颜色模型就是用一组数值来对颜色进行描述的数学模型。下面主要介绍下RGB模型。RGB颜色模型又被叫做三基色模型,是计算机图像中最常用的颜色模型,也是编辑图像模型所用到的最佳色彩模式。RGB色彩模型采用三维笛卡尔坐标系,在颜色坐标空间内,任何一种色光都可以由红(R,波长700nm)、绿(G,波长546.1nm)、蓝(B,波长435.8nm)三基色按照不同的比例相加混合而成[8]。图STYLEREF1\s2.SEQ图\*ARABIC\s11RGB颜色模型RGB模型如图2.1所示,其坐标系原点位置(0,0,0)所对应的颜色为黑色,离原点距离最远的顶点为白色。图像处理为了对视频中运动的目标进行识别并追踪,要先对视频中的图像序列开展目标分割并识别,即先对所要分析处理的图像序列进行处理前的准备工作。为了消除图像中的噪声等一些没有用的信息,我们可以通过对图像进行预处理来达成目的,这有助于我们在后续过程中对图像中运动的目标进行准确地识别,这样不仅可以简化图像数据,还可以提高算法的可靠性。对图像进行平滑去噪是预处理中所使用的常见方法,它去除图像中的无用信息的方式是抑制图像中的噪声,然后高亮显示出图像中重要的外部轮廓信息并进行提取。图像的平滑处理令图像的亮度平缓渐变,图像突变梯度减小以达到改善图像质量这一目的[9]。让图像的颜色灰度变化更光滑是图像平滑处理的目的。图像的平滑可以通过低通滤波来达成[10]。不同的滤波所发挥的作用各不相同,低通滤波是将图像中的噪声去除,而高通滤波则是将图像边缘提取出来。图像的锐化是对图像边缘轮廓进行补偿,通过增强图像的边缘以及灰度跳变部分来让图像变得清晰。图像锐化的目的是突出图像上物体的边缘轮廓,或是某些线性目标要素的特征,从而有利于对目标物体的边界进行分割提取。图像的锐化提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强[11]。图像灰度化由于彩色图像中所存储的数据量较大,会增加后续目标检测和追踪的计算量,所以需要对图像进行灰度化处理。灰度指的是每一个像素在灰度图像上的颜色值,指的是在黑白图像中每一个点的颜色深度,范围在0~255之间,0代表黑色,255代表白色,灰度值指的是色彩的浓淡程度。现在大部分的彩色图像采用的都是RGB颜色模式,所以在对图像进行处理的时候,要分别对R、G、B三种颜色分量进行处理,但是实际上RGB颜色模型并不能完全反映出图像的形态特征,只是从光学的原理上来对颜色进行调配[12]。图像的灰度化处理是图像预处理的重要步骤,为之后进行图像分割、图像识别和图像分析等后续上层操作打下基础。图像灰度化主要有分量法,最大值法和平均值法三种方法。分量法是将彩色图像中的三分量的亮度作为三个灰度图像的灰度值。可以列为F1(i,j)=R(i,j);F2(i,j)=G(i,j);F3(i,j)=B(i,j)三个分式,其中Fk(i,j)(k=1,2,3)为转换后的灰度图像在(i,j)处的灰度值。最大值法是将彩色图像中的RGB三原色分量中,亮度的最大值作为灰度图的灰度值。即R=G=B=max(R,G,B)(2.1)平均值法是求取彩色图像中的RGB三原色分量亮度的平均值得到的一个灰度值。即R=G=B=(R+G+B)/3(2.2)Canny边缘检测Canny边缘检测法是在1986年被提出的,但直到今天它仍然是图像边缘检测算法中最优异的算法之一。和其他算法比较,Canny边缘检测不仅可以充分利用边缘的梯度方向,抑制了边缘梯度方向的非极大值,还对最后得到的二值图像利用了双阈值滞后阈值处理。Canny边缘检测基于三个基本条件:低错误率;很好地定位边缘点;单一边缘点响应[13]。所以,Canny边缘检测法的步骤如下:首先,用高斯滤波平滑处理输入的图像来滤除噪声以降低报错率;接着通过一阶偏导的有限差分法运算梯度幅度的大小和方向,以此估算出每一点的边缘方向和强度;然后根据计算得出的梯度方向,对梯度幅值进行非极大值抑制,通过这一步操作来获得梯度幅值内最大的像素点并把它设定为边缘点;除去所有不满足成为边缘点条件的点,通过留下的边缘点来确定轮廓的边缘;双阈值处理和边缘的连接,对梯度幅值进行边缘点的检测。常见的图像滤波方式图像滤波是在尽量不破坏图像的细节特征的基础上,抑制目标图像中的噪声,是在图像预处理过程中不可缺少的一部分,这一操作对图像进行预处理的结果会令后续更上层的图像处理和图像分析的可靠性、有效性直接产生重大影响。又因为成像系统、传输介质和记录设备目前还不够完善,数字图像在形成和传输的过程中经常会被各种各样的噪声所污染。除此之外,在图像处理的某些过程当中,当输入的图片不符合预期图像效果时,会在生成出的图像中引入噪声。产生的这些噪声通常会以孤立的像素点或像素块的形式出现在图像中,产生强烈的视觉效果。一般来说,噪声信号是独立于被研究的对象的,并且以干扰图像可观察信息的无用信息的形式出现。对于数字图像信号,噪声表是指噪声的最大值或最小值。这些极值对各个图像像素的真实的灰度值或增大,或减小,使得图像中产生亮点和暗点,对视觉观感造成了影响,使图像的质量大大降低,对后续的图像恢复、分割、特征提取和图像识别等操作产生影响。为了有效地去除目标和背景中的噪声,构造一个有效的噪声抑制滤波器必须考虑。同时,可以很好地保护图像对象的形状、大小以及特定的几何和拓扑特征。常见的滤波方法有均值滤波,高斯滤波,中值滤波和双边滤波等。均值滤波是一种典型的线性滤波算法。它是在图像上给目标像素一个模板,该模板包括目标像素在内和周围8个像素共同构成一个滤波模板,然后再用模板中的全体像素的平均值来代替每一个像素原来的像素值,这样能够降低图像中像素点“突然”的变化,这一特点也使得均值滤波器在降低图像当中噪声的同时,也会使图像的边缘变得模糊[14]。均值滤波器的处理结果是把图像中与滤波器模板大小相比较小的像素区域滤除。图STYLEREF1\s2.SEQ图\*ARABIC\s12均值滤波后效果中值滤波是一种非线性信号处理方法,因此它既是一种非线性滤波器,又是一种统计排序滤波器。它是将每一个像素点的灰度值设置为该点所在的周围区域内的所有像素的灰度中值。它处理孤立的噪声像素,如椒盐噪声和脉冲噪声有很好的滤波效果,可以保持图像的边缘特性,不会造成图像外部轮廓的显著模糊。中值滤波是将数字图像或数字序列中的一个像素点的值替换为该点附近所有像素点的中值,使其周围的所有像素值都接近于一个真实值,从而消除孤立的噪声点。中值滤波对于脉冲噪声有很好的滤波效果,特别是在滤波噪声时,它可以保护信号的边缘不被模糊。而线性滤波方法不具备这些优良的特性。此外,中值滤波算法相比于其他滤波算法较为简洁,更容易通过硬件实现。因此,中值滤波方法被广泛应用于数字信号处理领域。高斯滤波是一种线性平滑滤波,主要被用来消除高斯噪声,在图像处理的降噪过程中被广泛运用。一般来说,高斯滤波就是对整个图像的像素点进行加权平均的过程。每个像素的值都是通过对其本身和邻域内其他像素值的加权平均得到的。高斯滤波的具体工作原理是用一个模板去扫描图像中的每一个像素点,然后用模板所确定的邻域像素的加权平均灰度值去替换掉模板中心像素的值。高斯滤波的作用相当于是信号的滤波器,用于对信号的平滑处理。双边滤波是一种非线性的滤波方法,是集合了图像的空间的邻近性和像素值的相似度,并同时考虑了空间信息和灰度的相似度,以实现保持原有的边缘轮廓和去除噪声的目的。双边滤波对轮廓边缘的保持较好。通常用来降低噪声的高斯滤波会使轮廓边缘的模糊更加明显,而对于高频细节的保护效果不够明显。双边滤波器是比高斯滤波器多一个高斯方差sigma-d,即基于空间分布的高斯滤波器函数。因此,在靠近轮廓边缘的地方,离边缘较远的像素点不会对边缘上的像素值产生太大的影响,从而使轮廓边缘附近的像素值得到了较好的保存。但由于这种方法保留了太多的高频信息,对于彩色图像中的高频噪声,双边滤波器不能完全干净地将高频噪声滤除,只能用于对低频信息中的噪声进行滤波。由于不同类型的噪声其产生的原因也各不相同,每一种滤波器对于不同的噪声滤波效果也不一样,选择滤波器的时候要根据具体的滤波要求对不同的噪声选用合适的滤波器来进行滤除。滤除高斯噪声,双边滤波器相较于其他几种滤波器的去噪效果较好,图像轮廓边缘能很好地保留。处理椒盐噪声,相比其他几种滤波器来说,中值滤波器的去噪效果更好,能够基本滤除噪声而其他几种滤波方式只是稍微弱化了噪声影响,效果甚微。基于图像的目标自动识别与跟踪技术研究的设计实现目标的自动识别和跟踪技术的程序主要分两部分:识别不同图像的边缘轮廓和对识别的目标的持续跟踪。程序运行开发环境搭载程序开发环境的配置是运行算法的重要基础。本文中运行的目标自动识别和跟踪程序是以Python语言为基础,OpenCV视觉库中丰富的函数及算法为支持,在PyCharm中安装Python解释器来输入程序进行试运行,利用Anaconda软件运行结果。PyCharm是一种Python语言的集成开发环境,拥有一整套提高Python语言开发效率的工具,能帮助我们进行调试、代码行跳转、项目管理、函数语法高亮提示等一系列高级的辅助功能,对于检查程序的语法问题非常有帮助,故在下载了PyCharm的基础上加装Python解释器来调试程序完善代码。由于VisualStudio软件平台对Python语言支持不够,换用Anaconda来执行运算算法结果。Anaconda支持众多操作系统,还提供有环境管理功能,能很好地解决众多Python版本的共存问题以及外部环境安装配置等。图STYLEREF1\s3.SEQ图\*ARABIC\s11Python解释器配置算法流程设计程序设计主要思路是先通过函数命令读取文件夹中所需用到的视频文件,接着将读取的视频文件拆分成一帧一帧的图像,并对每一帧图像进行预处理,滤除图像噪声并提取运动目标的外部轮廓,为之后的目标识别打下基础。随后识别视频图像中的不同汽车并对不同的汽车编不同的号码。最后部分是对识别出的不同汽车在较近距离的视野内进行持续稳定的追踪,同时能看到坐标位置的变化。图像采集图像采集使图像平滑使图像平滑图像预处理图像预处理噪声去除噪声去除目标识别图像分割目标识别图像分割目标特征提取目标特征提取跟踪算法跟踪算法目标跟踪确定目标位置目标跟踪确定目标位置图STYLEREF1\s3.SEQ图\*ARABIC\s12算法流程设计思路图像的识别识别运动中的目标物体是要在背景图像中将某一部分确定的区域分割并提取出来的过程[15]。要想准确地识别出运动状态下的目标就必须消除周围场景的干扰如光线,云层,影子等一系列自然性因素造成的干扰。现在对运动目标进行检测的算法主要分为两类,一类是以背景差分法和光流法为代表,基于检测目标运动信息的算法[16]。另一类是对特定的目标进行检测的算法,这种算法是通过读取目标的特征信息来建立运动模型,不会受到目标运动信息影响,可以准确地检测到特定目标,更具有准确性和可靠性,但是计算量较大,所以实时性较差[17]。YOLOv4算法YOLO系列的目标检测算法是一种较为经典的单阶段目标检测框架,具有较快的推算速度,可以较好地满足现实场景的要求。YOLO一开始是被Redmon提出的一个基于回归单阶段的算法,在YOLOv3版本中设计引入了特征金字塔网络提高了检测的精度以及检测目标的能力[18]。目标检测部分程序所用到的YOLOv4算法是以YOLOv3为基础进行改进,使得其运算速度和运算精度都得到了极大提升。下图展示了YOLOv4目标检测算法的整体架构图。图STYLEREF1\s3.SEQ图\*ARABIC\s13YOLOv4网络架构一个目标检测算法通常可以划分为四个通用模块:输入端、基准网络、Neck网络与Head输出端。输入端就是所需处理的图像输入的端口,这一阶段是图像进行预处理的阶段,系统会将要输入的图像进行缩放,使其与网络的输入大小一致并进行归一化操作。基准网络一般是用于提取通用特征来表示的。YOLOv4使用了CSPDarknet53结构作为基准网络;用Mish激活函数来代替原来的RELU激活函数。此外,该模块中还加入了DropBlock模块,进一步提高了模型的泛化能力。Neck网络是用来提升特征的多样性和鲁棒性的,YOLOv4算法通过SSP模块来融合不同尺寸的特征图像。最后Head输出端是用来输出目标检测的结果。YOLOv4利用CIOU_LOSS函数来代替SmoothL1Loss函数,并利用DIOU_NMS来代替传统的NMS操作,进一步提升了算法的检测精度[19]。YOLOv4算法的调用本文的目标识别检测程序是调用了YOLOv4算法架构,调用并读取了路径为dnn_model文件夹中物体的各种信息特征及数字图像处理的卷积模板,对每帧的运动目标特征完成提取,将其从背景图像中提取出来,以此对目标进行识别。输入端将每帧图像缩放为608*608的大小,非极大抑制值设为0.4。图STYLEREF1\s3.SEQ图\*ARABIC\s14调用命令程序框架的设计在正式程序开始前,先使用import命令将OpenCV库和Python扩展程序库以方便后续的程序命令实现和运行。接着要读取所需要用到的视频文件,通过VideoCapture命令来加载读取所需要的视频文件素材。视频的本质上是一帧一帧众多连续图像的集合,对图像中的目标识别也是建立在识别目标在每一帧上的位置,故需编辑算法完成视频循环时逐帧提取视频中的图像。同时设定停止运行并关闭程序窗口命令的键位,按Esc键释放视频文件,退出程序运行,关闭所有窗口。此处使用了基础的选择结构编写程序来实现本次操作。图STYLEREF1\s3.SEQ图\*ARABIC\s15视频帧图像的提取按键按键所按键位是否为“Esc”是否释放视频,退出程序的运行并关闭所有相关窗口继续程序的运行图STYLEREF1\s3.SEQ图\*ARABIC\s16中途退出运行的程序流程当前帧数读取当前帧数读取当前帧数+1当前帧数+1当前帧是否还有图像当前帧是否还有图像否是否是视屏结束视屏结束结束程序运行关闭所有窗口图STYLEREF1\s3.SEQ图\*ARABIC\s17逐帧判断视频是否结束的算法流程图由于视频的时长是有限的,即图像集合的帧数有限,当视频播放完毕时,不能检测到图像,需要结束程序并退出运行窗口。这里需要加入一个多结构的程序来完成实现操作。先加入选择结构读取当前帧数,初始帧数计数为0,先执行操作使当前帧数+1,接着判断当前帧是否还有图像,如果没有图像则退出循环,结束所有进程并关闭窗口,如果还有图像则说明当前帧不是最后一帧,嵌套加入循环结构继续执行count命令令当前帧帧数+1,同时对当前帧进行计数,继续判断,直到检测到最后一帧图像为止或手动按下“Esc”键退出程序的运行。目标识别的设计为了完成对视频中出现的各种车辆进行目标识别,再次使用import命令将对象检测算法载入后,可以来检测视频框架中的目标对象。在目标检测算法中读取的名称为dnn_model的文件里含有足够的目标对象信息来准确地检测识别出不同的目标。不同的目标经过识别区分后,是要明确显示出不同的运动目标并简化算法,下面将直接通过程序把识别出的不同目标分别用同一类型的矩形框框出一个个区域。此处由于视野较远处的目标特征轮廓提取较为模糊,图像特征信息难以被准确识别,故距离镜头视野较远的目标将不会被识别框出。完成了框出目标物体的代码后要确定框大小位置等信息,要想确定矩形框的位置就要有矩形起始点的位置和矩形的长和宽。程序中使用(x,y,w,h)四个参数来确定框的大小和位置。其中x,y确定了矩形框左上角的顶点的坐标,w和h分别表示矩形框的长和宽,(x+w,y+h)确定了矩形框右下角的点,同时通过RGB颜色模型设定框的颜色,绿色(0,255,0)和框的粗细,以此完成目标识别并且框出识别到的不同目标物体。程序中加入print命令来打印当前帧的帧数以及此时屏幕中识别到的目标物体框的顶点坐标及长宽确定当前帧数中目标的位置,为后续进行目标跟踪的设计打下基础。图STYLEREF1\s3.SEQ图\*ARABIC\s18框出识别出的运动目标目标图像的跟踪设计目前常见的目标跟踪算法分为四种:一种是基于建立的物体模型进行跟踪,一种是基于主动轮廓进行跟踪,一种是基于区域进行跟踪,还有一种是基于特征进行跟踪[20]。本文采用基于对区域的跟踪设计,通过上一部分的设计,在将识别出的目标框出后,以每个目标框作为区域,利用框出的目标区域对不同的目标进行跟踪,在每个目标框内取中心点作为位置参考,以同一个中心点在不同帧的坐标位置变化反应物体的位置变化,通过对不同目标框的跟踪来实现对不同物体的跟踪。根据上图3.2的设计流程,之前已经完成了对视频逐帧图像进行预处理的准备,并搭建完整个程序流程的框架和识别出图像中不同的目标后,是要设计出对识别出对不同的目标进行持续跟踪的算法。尽管上一章运行的程序已经能够识别并框出不同的目标,但是随着视频的播放,帧与帧之间图像上的目标并没有关联,如果我们要跟踪其中一个物体的位置变化,就要看这个物体识别框的坐标位置变化,但是现在还不能实现,因为现在无法判断该识别框对应了上一帧图像中哪一个识别框,无法准确匹配到同一辆车,得到确切的坐标位置变化。现在只是做到检测一辆辆车的随机框的坐标,随着时间推移,他们之间没有位置变化的联系。所以这里要先取出框架的中心点并对其进行编号以此确定每个物体的移动位置变化。设框架中心点横坐标cx取(x+x+w)/2,中心点纵坐标cy取(y+y+h)/2,同时以每个中心点为圆心,以RGB颜色模型确定中心点颜色(255,0,0)为红色,画一个小的实心圆,并创建一个数组来储存这些中心点坐标信息。此时随着图像上视频的播放,不仅存在这一帧的中心点,上一帧的中心点也被留在了视频图像上。虽然已经能跟踪到物体的位置变化,能比较物体和前一帧的坐标位置,但随着视频的进行,屏幕上的中心点会越来越多,进而引发混乱,令存储位置信息的数组越来越大,影响后续的运行。我们需要进行新的操作让其仅检查前后两帧之间的变化,一步一步跟随对象而不是保留对象所有的历史纪录。这里首先需要建立一个数组来存放当前帧的中心点坐标,在这段程序后面建立一个用来存放前一帧的中心点坐标,并把当前帧的中心点坐标复制给它,便于比较,并用print指令将前后帧的中心点坐标打印。现在不仅可以得到前一帧和后一帧的坐标比较,还可以利用两坐标点和勾股定理的计算函数来计算两点间距离。同时把上一帧的坐标点覆盖存放先前帧坐标的数组中,把当前帧的坐标点覆盖存放进这一帧坐标的数组中。图STYLEREF1\s3.SEQ图\*ARABIC\s19前后帧坐标比较完成了前后帧坐标的对比,我们还要准确判断跟踪的目标,并对他编号。这里通过插入一个判断结构比较前后帧之间的距离判断是否为同一目标,假设两坐标点之间在两帧之间移动的距离小于10个像素,判断是否,如果是,则认为是同一个目标对象。此处要添加一个新变量名称tracking_objects来存放跟踪的目标坐标信息,还要建立trackid对目标进行编号,因为识别到的不同的汽车要有不同的编号。当跟踪目标和编号开始计数时,将一个中心坐标点赋值给跟踪目标tracking_objects,同时编号trackid值+1,同时将跟踪的目标物体编号和中心点坐标信息加入,并用print指令打印现在这帧图像上跟踪目标tracking_objects的信息使其与对应坐标点一起显示以及用for…in…语句将对应编号加入视频中并出现在对应坐标附近。图STYLEREF1\s3.SEQ图\*ARABIC\s110目标识别并跟踪初次调试此时距视野镜头较近处的一辆车未能显示编号id和中心点。猜测是由于视线效果近大远小的缘故,靠近底部的汽车距离镜头较近,所以一帧之间移动速度较快,移动距离超过10个像素,导致系统判断其不是同一个目标,没有对其进行编号和保存坐标点。这里对判断规则稍作修改,但距离不能设定过远,否则可能误判到其他目标。修改前后帧之间移动的位置距离小于20个像素则判定为同一目标。修改后识别出的目标都能被准确跟踪到,并正确识别。图STYLEREF1\s3.SEQ图\*ARABIC\s111调试后运行结果但是随着视频的播放,同一中心点坐标的id一直在更新变化,这意味着现在的目标跟踪做到还不够精确,跟踪设计的目标是让识别为相同目标的一辆车保持相同的id。现在的程序只是在添加坐标点的id当运行到新的一帧时前一帧坐标依然被显示,且同一辆车在新帧的坐标id在不断更新,这意味着程序还需要改进。首先在计算两帧之间距离的基础上附加嵌套一个选择结构,让程序只在开始时的前两帧比较前一帧中心点和当前帧中心点的距离。否则将比较对象换成当前帧中心点与拥有目标跟踪id的中心点,如果两点之间的距离小于20个像素则说明是同一辆车,则在存储坐标信息的数组中更新目标坐标点位置,将其id赋值给新位置的中心坐标点并持续跟踪。但此时出现了一个问题,当车辆驶出图像丢失id时,失去跟踪目标的id会留在屏幕上,需要添加代码使目标不再存在在图像上时删除他们。图STYLEREF1\s3.SEQ图\*ARABIC\s112目标丢失因此当循环执行上述指令时,可以建立一个字典遍历循环和坐标数组,如果有没更新的坐标位置就及时更新,如果跟踪的目标不在图像上就删除它。在新的一帧中将上一帧已经识别到的目标id和坐标点放入存放复制跟踪的目标信息的数组中进行检查,判断是否为同一目标,检查图像及坐标后通过创建新的变量并赋值trueorfalse来告知系统目标是否还存在,并用选择结构决定:存在,则删除上一帧坐标信息用这一帧的坐标信息覆盖;若目标不存在,即目标离开了这阵图像,则直接删除该点坐标和id信息。此外,对新识别到并进行跟踪的目标要添加新的id,将新识别到的坐标点放入现有的中心点数组中,建立新的识别目标坐标信息并用循环结构不断地为新识别的目标赋予新的id。图STYLEREF1\s3.SEQ图\*ARABIC\s113识别与跟踪效果图跟踪物体和图像中中心点坐标分别复制存放入不同数组跟踪物体和图像中中心点坐标分别复制存放入不同数组在已识别目标信息数组中遍历物体i在已识别目标信息数组中遍历物体id和坐标点信息否物体是否存在否物体是否存在是是距离计算距离计算两点间距离<两点间距离<20个像素判断为同一物体,更新坐标信息,删除上一帧坐标信息判断为同一物体,更新坐标信息,删除上一帧坐标信息移除坐标id移除坐标id继续下一帧图STYLEREF1\s3.SEQ图\*ARABIC\s114坐标位置跟新流程

4结论全文首先介绍了目标的自动识别和跟踪技术在现代生活中的各种应用,并且指出该项研究技术在各个领域中发挥的重要作用,描述了其在国内外的研究和发展历史,随后介绍了实现这项研究技术所使用到的计算机语言Python和OpenCV视觉库,还解释了选择它们作为工具开发的原因,又介绍了一些图像处理方面的相关知识以及要对图像处理做的一些准备工作。接着叙述了本文所要实现运行的程序的大概要求:使用Python语言运行能实现对不同的运动目标进行识别并持续稳定地对识别到的目标分别进行跟踪的程序。随后对系统的整体实现分别进行了分析与解释:先将整体程序的框架进行搭建,完成视频文件的读取,在此基础上将视频逐帧图像并预处理;接着通过调用的YOLOv4模块及含有的多种物体信息来对图像中不同的汽车进行识别并将识别出的目标分别用框框出;框出识别到的目标后,对目标的跟踪程序进行了一步一步的细化,成功通过对不同的目标框进行编号,并在不同帧之间保持编号不变来实现目标的跟踪,直到目标消失在屏幕中。程序较为精确地实现了设计要求。通过这一次的毕业设计使我对程序的开发和Python语言的运用有了更加深入的学习和了解。本系统还存在有不足之处,那就是对于视野距离较远处的物体无法提取足够外部信息进行识别,这是由于远处物体目标轮廓较为模糊,随意使用轮廓近似算法来修复外部轮廓可能导致外部轮廓失真影响到识别的准确性;同时,由于识别方面是通过导入的物体信息来对视频中的物体来进行对比识别,要想识别出更多类型的目标需要导入更多的信息。目标自动识别和跟踪技术具有非常广阔的发展前景,它在未来的发展趋势一定是逐步上升的,并且能越来越好地满足我们的各种需求。随着现代社会计算机视觉技术的高速发展,目标识别和跟踪技术也被大大地推动着发展,甚至在国防军事领域也得到了应用。在今后的学习和发展中,这项技术会得到越来越多的提升,取得我们难以想象的进步,为我们带来更多的便利。紧跟时代发展的潮流,把握

温馨提示

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

评论

0/150

提交评论