《基于OpenCV的运动目标检测与跟踪.doc》由会员分享,可在线阅读,更多相关《基于OpenCV的运动目标检测与跟踪.doc(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于VC的运动图像跟踪算法设计学 院自动化学院专 业班 级学 号姓 名指导教师负责教师沈阳航空航天大学2013年6月沈阳航空航天大学毕业设计(论文)摘 要运动目标检测与跟踪作为计算机视觉领域的一个重要分支与基础,在工业、医疗保健、航空航天、军事等各个领域具有广泛的应用前景,一直受到广泛的关注,并成为计算机视觉领域的一个研究热点。但是由于运动目标检测问题本身的复杂性,运动目标的检测与跟踪依然面临着诸多挑战。本文在现有研究成果的基础上,对静态场景下的运动目标检测跟踪进行了深入的讨论。本文首先对运动目标检测的基本方法-帧间差分法与背景差分法进行了深入的学习和探讨,然后,借助于OpenCV技术,在Vi
2、sual C+ 6.0编程环境下开发了运动目标检测跟踪系统。该系统首先对采集的视频图像序列进行相关的预处理之后,将视频图像序列中的运动目标比较可靠地检测出来。通过系统的测试结果和数据可以得出结论:本文基于OpenCV设计的运动目标检测跟踪系统具有良好的实时性,能够正确地进行运动目标的实时检测与跟踪。关键词:运动目标检测;帧间差分法;视频图像;OpenCVAlgorithm Design of Image Motion Tracking Based on VCAbstractMoving target detection and tracking field of computer vision
3、 as an important branch of the foundation, in the industrial, healthcare, aerospace, military and other fields with a wide range of applications, has been widespread concern, and the field of computer vision to become a research hotspot. However, due to moving target detection complexity of the prob
4、lem itself, moving target detection and tracking is still facing many challenges. In this paper, based on the results of existing research in static scenes of the moving target detection and tracking in-depth discussion.This article first basic method of moving target detection - frame difference me
5、thod and background subtraction method conducted in-depth study and discussion, and then, by means of OpenCV technology, Visual C 6.0 programming environment developed a moving target detection and tracking system. The system and the collection of the associated video sequence after pretreatment, th
6、e video image of the moving target sequence comparison reliably detected. Through systematic test results and data can be concluded: Based on OpenCV design moving target detection and tracking system has good real-time, be able to properly carry out real-time moving target detection and tracking.Key
7、words: moving target detection; frame difference method; video frame; OpenCV目 录1 绪 论11.1 课题来源与背景11.2 数字图像处理技术的发展与应用11.3 运动目标检测技术的研究现状21.4 本文的任务、主要内容及结构41.5 本章小结52 OpenCV技术介绍62.1 OpenCV简介62.2 OpenCV的优势62.3 OpenCV在Visual C+6.0下的配置方法72.4 OpenCV中常用的数据结构及函数介绍92.5 本章小结133 图像预处理143.1 图像的获取与灰度转换143.1.1 图像噪声
8、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 本文采用的算法设计224.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
9、.3 图像匹配法315.4 基于团块的目标跟踪315.5 本章小结346 程序结果演示与分析356.1 运动目标检测与跟踪演示356.2 本章小结37结论38参考文献40致 谢41附录 程序清单42471 绪 论如何更好地、更准确地理解视觉信息已经成为当前科学研究的一个重要课题。而计算机视觉就是通过计算机代替人眼及大脑对外界环境进行感知、分析和理解。随着计算机技术的不断发展和计算机性能的逐渐提高,计算机视觉成为了一个崭新且发展迅速的热门领域,并成为计算机科学的重要研究领域之一。计算机视觉技术已经在许多领域得到广泛应用,可以这么说,需要人类视觉的场地方几乎都可以借助于计算机视觉。许多人类视觉无法
10、触及的场合,如危险场景监测、微观物体精确定量、不可见物体感知等,计算机视觉更突显其优越性。1.1 课题来源与背景随着计算机技术的高速发展,运动物体的检测和跟踪在图像处理、计算机视觉、模式识别、人工智能、多媒体技术等领域越来越受到人们的关注。运动跟踪和检测的应用广泛,在智能监控和人机交互中,如:银行、交通、超市等场合常常使用运动跟踪分析技术,通过定位物体并对其行为进行分析,一旦发现物体有异常行为,监控系统就发出警报,提醒人们注意并即时的处理,改善了人工监督注意力分散、反应时间较慢、人力资源浪费等问题。运动目标的跟踪在虚拟现实、工业控制、军事设备、医学研究、视频监控、交通流量观测监控等很多领域也有
11、重要的实用价值。特别在军事上,先进的武器导航、军事侦察和监控中都成功运用了自动跟踪技术。而跟踪的难点在于如何快速而准确的在每一帧图像中实现目标定位。正因如此,对运动目标的跟踪和检测的研究很有价值。1.2 数字图像处理技术的发展与应用数字图像处理技术是20世纪 60 年代随着计算机技术和VLS(I Very Large Scale Integration)的发展而产生、发展和不断成熟起来的一个新兴技术领域,它在理论上和实际应用中都取得了巨大的成就。20世纪20年代,图像处理技术首次应用于改善伦敦和纽约之间海底电缆发送的图片质量。到20世纪50年代,计算机发展到一定的水平后,数字图像处理才真正引起
12、人们的兴趣。1964年美国喷气推进实验室通过计算机对“徘徊者七号”太空船发回的大批月球照片进行处理,获得了巨大成功。20世纪60年代末,数字图像处理初步具备了比较完整的体系,形成了一门新兴的学科。20世纪70年代,数字图像处理技术得到迅猛的发展,理论和方法进一步完善,应用范围更加广泛。在这一时期,图像处理主要和模式识别及图像理解系统的研究相联系,如文字识别、医学图像处理、遥感图像的处理等。20世纪70年代后期到现在,各个应用领域对数字图像处理提出越来越高的要求,促进了这门学科向更高要求的方向发展。特别是在景物理解和计算机视觉(即机器视觉)方面,图像处理已由二维处理发展到三维理解或解释。进入21
13、世纪后,随着计算机技术的迅猛发展和相关理论的不断完善,数字图像处理技术在许多应用领域受到广泛重视并取得了重大的开拓性成就。属于这些领域的有航空航天、生物医学工程、工业检测、机器人视觉、公安司法、军事制导、文化艺术等。该技术成为一门引人注目、前景远大的新型学科。1.3 运动目标检测技术的研究现状由运动目标所形成的图像序列可分为两种情况: 一种是静态场景,一种是动态场景。前一种情况通常发生在摄像机相对静止状态(如监视某一路口车流量的固定摄像机), 后一种情况通常发生在摄像机也在相对运动状态(如装在卫星或飞机上的监视系统)。近几年来,研究人员提出了许多方法用于检测和跟踪序列图像中的运动目标,其中绝大
14、多数方法都假设用于获取序列图像的背景是静止的,而大多数实际情况也满足这一假设,所以人们主要研究的是背景静止物体运动这种情况下获取的动态序列图像。针对这种情况,现有的运动目标检测方法主要有三类:帧差法(Temporal difference)、背景减法(Background subtraction)、光流场法(Optical flow)。帧差法即帧间差分法,是在连续的图像序列中,提取两个或三个相邻帧,采用基于像素的时间差分来获取图像中的运动信息。帧间差分法计算简单,对动态环境具有较强的适应性,但不能提取出目标的所有相关点,容易在目标内部形成“空洞”,而且要求背景绝对静止或基本无变化(噪声较小),
15、因而适用场合有限。背景减法也称背景差分法,基本思想是将当前帧图像与事先存储或者实时得到的背景图像相减,即当前图像与已知背景图像之间的差分。较早期的背景差分法有均值、中值、运动平均、高斯模型方法等,随着研究的深入,逐渐出现了一些比较成熟的背景差方法。1999年MIT的C.Stauffer提出了基于混合高斯模型的背景差方法,针对高斯噪声的复杂背景,采用多个高斯分布描述像素过程;2000年MIT的Oliver等人提出了背景特征化建模的方法。主要研究的焦点都落在了背景更新与建模方法上。从实际应用角度来看,帧差和背景减相结合的运动检测是使用最广泛的一种方法。Spagnol等人提出了一种运用邻域的相关系数
16、结合帧差和背景减来进行运动检测的方法,该方法不仅有效地抑制了光照变化对检测结果的影响,并解决了阴影、重影和伪前景等问题。但国内有人指出了Spagnol的方法的三个不足之处:会将背景颜色一致的区域误判为前景;当运动目标速度缓慢或静止时,存在漏检;在背景复杂的情况下,背景更新策略将使背景模型退化。并且,提出了首先用灰度拉伸变换,并结合灰度值信息来改进邻域相关系数的计算方法,以排除背景的误判;然后通过在帧差和背景减相结合的策略中加入运动分析,用来改善运动缓慢目标的检测结果;最后在背景复杂的情况下用运行期更新法进行背景更新,以防止背景模型的退化。最后,光流场法是分析序列图像中运动目标的重要方法,它既可
17、以用于运动目标的检测,也可以用于运动目标的跟踪。所谓光流是指图像中灰度模式运动的速度;它是景物中可见点的三维速度矢量在成像平面上的投影,它表示了景物表面点在图像中位置的瞬时变化;同时光流场携带了有关运动和结构的丰富信息。光流场的计算最初是由国外两名学者提出的,它是一种以灰度梯度基本不变或亮度恒定的约束假设为基础的运动目标探测的有效方法。光流法能够较好的处理运动背景的情况,但计算量巨大,难以应用到实时系统,同时对噪声比较敏感,精度较低,难以得到运动目标的精确边界。而张泽旭等将Canny边缘提取融入光流场分割技术,对单运动目标和多运动目标均取得了比较满意的效果,实时性也大大提高。但如何进一步提高其
18、抗噪性、实时性和运算速度,有待于深入研究。总的来说,过去的二三十年中,国内外学者在运动目标检测理论及其实现方面做了大量、深入的研究工作,取得了令人瞩目的成果,并将研究的成果应用到很多领域,如智能监控系统、军事制导等等。但是由于运动目标检测问题本身的复杂性和目前视频技术发展水平的限制,运动目标的检测技术至今仍然处于研究和讨论阶段,到目前为止,还没有出现能够适用于各种场合、各种情况的通用算法。现今的各种算法在稳健性、准确性、可靠性等方面还有着这样、那样的不足。这些算法有的简单、易于实现,实时性好,但可靠性不高,在复杂场景和运动下算法容易失效;有的虽然可靠性较高,但算法过于复杂,不利于进行实时检测。
19、而且,静态场景下的运动目标检测的研究较多;而动态场景下的检测研究较少,算法还不成熟。已有的运动目标检测系统大多受限于特定的应用场景,目标检测算法还有待于进一步研究和优化,研究一种鲁棒性好、精确度高、性能稳定和适用性强的运动目标检测算法依然任重道远,面临巨大挑战。1.4 本文的任务、主要内容及结构课题研究的主要任务及技术指标主要任务: 该毕业设计的主要工作包括了解摄像头图像采集系统的工作过程,首先实现摄像头的数据采集过程,进而编写基于VC的图像处理程序,对画面中的动态物体进行识别并用矩形方框将其标记。技术指标:构造出完整的基于VC的摄像头数据采集及运动图像跟踪系统;实现摄像头的数据采集过程,进而
20、编写基于VC的图像处理程序,对画面中的动态物体进行识别并用矩形方框将其标记。本文的主要内容及结构本文选取的运动目标检测跟踪的算法作为研究重点。利用OpenCV和Visual C+组建实验平台,针对数字图像特定噪声的去除、运动目标的正确识别与分割、处理的实时性要求等难点进行了研究。本文主要工作总结如下:在对图像噪声的处理方面:综合使用各种方法去除图像噪声,通过实验比较了这些方法所适用的场合。在运动目标检测跟踪方面:重点研究了目前在实际应用中普遍采用的以帧间差算法。在对检测出的变化区域进行后处理方面:采用适当的形态学滤波处理得到更清晰、更准确的运动目标,进而进行连通性分析,去除小面积噪声,保留足够
21、大的目标。最后进行区域标记,分割出完整的运动目标,加以标记。综上,本文旨在利用现有的理论、算法和工具,以工程应用为目的,研究如何从序列图像中检测出运动目标。并且,本文基于OpenCV这个开放的计算机视觉程序库,通过VC+编程环境对运动目标检测算法进行了编程实现,完成了运动目标检测系统。按照问题描述、问题建模、问题求解的思路共分六章,主要内容及结构组织如下:第一章 绪论。概述了课题的研究背景,主要讨论了运动目标检测技术的研究现状、数字图像处理技术的发展与应用,阐述了论文的整体结构。第二章 介绍研究OpenCV技术。其中OpenCV的优势、OpenCV在Visual C+6.0下的配置方法和Ope
22、nCV中常用的数据结构及函数介绍。对数据结构的必要描述为后面函数的应用奠定了一定的理论基础。第三章 图像预处理。本章对图像预处理的过程进行了详细的描述。为此,我们首先要图像的提取和灰度转换。然后图像上噪声进行研究,详细叙述了中值滤波原理,利用中值滤波去除图像的噪声。不断进行实验,以确定较为理想的阈值。第四章 运动目标检测。本次课题研究运动目标跟踪算法,必然需要对其运动目标进行检测。通过讨论三种目标检测方法,确定本次课题以帧间差法为检测方法,然后对图像进行二值化和数学形态滤波,最后通过实验检测算法的鲁棒性。第五章 目标跟踪算法的研究本章首先讨论了运动目标的跟踪原理,详细描述了运动目标特征的重要作
23、用。运动目标的特征是一个重要的跟踪依据,在很多跟踪算法中都有目标特征提取这一环节。所提取的目标特征必须在环境变化、目标自身变化或者运动改变时,仍然能够将运动目标描述出来。最后详细叙述了基于团块的目标跟踪算法,包括数据的定义、模块结构与相应函数。第六章 程序结果演示与分析本章将配置好的系统进行演示与分析,系统成功的对画面中的动态物体进行识别并用矩形方框将其标记。1.5 本章小结在本章绪论中,主要介绍了基于VC的运动图像跟踪算法设计研究课题的背景知识发展概况及其应用,阐述了运动图像跟踪算法的现实意义,总结了论文的任务、内容与结构。2 OpenCV技术介绍OpenCV提供的视觉处理算法非常丰富,并且
24、它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和单片机系统中。2.1 OpenCV简介OpenCV是Intel开源计算机视觉库。它由一系列C函数和少量C+类构成,实现了图像处理和计算机视觉方面的很多通用算法。其重要重要特性包括:拥有包括300多个C函数的跨平台的中、高层API。它不依赖于其它的外部库尽管也可以使用某些外部库。对非商业应用和商业应用都是免费(FREE)的。(细节参考BSD license)。为IntelIntegrated Perform
25、ance Primitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的的IPP库,OpenCV将在运行时自动加载这些库。2.2 OpenCV的优势1)纯C代码,源代码开放。开源软件之所以能够风靡世界,首先是其开源的免费特性;此外,由于有全球众多编程者的参与,开源软件一般具有简约精炼、资源占用少、功能集中和安全性好的优点。2)丰富的函数功能,强大的图像和矩阵运算能力:OpenCV提供了数组、序列、矩阵、树等基本结构,也包含了差分方程求解、傅立叶分析、积分运算、特殊函数等众多高级数学计算函数,以及各种图像处理操作和目标跟踪、摄像机校准、三维重建等高级视觉函数。3)平台无关性:基于
26、OpenCV开发的程序可以直接在Windows、Unix、Linux、MacOSX、Solaris、HP等平台之间相互移植,无需对代码进行任何修改。4)方便灵活的用户接口。OpenCV作为一个开放的计算机视觉函数库在使用上必然没有Matlab那样解释执行来得方便,而softhitegration将CH和OpenCV绑定起来推出的CH OpenCV,解决了这一使用上的瓶颈。并且具有交互性、强大的扩展功能、Web实现性和可嵌入性等特性。2.3 OpenCV在Visual C+6.0下的配置方法本文的硬件平台为普通的笔记本电脑,内存容量为2G。视频输入有一个USB摄像头。软件开发平台为Windows
27、XP、OpenCV 1.0以及MS Visual C+6.0 (以下简称VC6.0)。其中OpenCV配置的过程如下:假如要将OpenCV安装到C:Program FilesOpenCV,在安装OpenCV时选择将OpenCVbin加入系统变量(AddOpenCVbin to the systerm PATH)。然后,检查C:Program FilesOpenCVbin是否已经被加入到环境变量PATH,如果没有,请加入。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。(可以在任务管理器里重启explorer.exe)。在VC6.0下的配置步骤如下:1)全局设置菜单Tools-O
28、ptions-Directories:先设置lib路径,选择Library files,在下方填入路径:C:Program FilesOpenCVlib。图2.1 Library files设置然后选择Include files,在下方填入路径:图2.2 Include files设置然后选择Source files,在下方填入路径:图2.3 Source files设置最后点击“OK”,完成设置。2)项目设置每创建一个将要使用OpenCV的VC Project,都需要给它指定需要的lib。菜单:Project-Settings,然后将Setting for选为All Configuratio
29、ns,然后选择右边的link标签,在Object/library modules(对象/库模块)附加上:cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib如果你不需要这么多lib,你可以只添加你需要的lib。图2.4 项目设置2.4 OpenCV中常用的数据结构及函数介绍2.4.1数据结构OpenCV设计了一些基础的数据类型和一些帮助数据类型,在运用OpenCV函数库进行编程的过程中,常常会需要用到这些结构类型,只有正真了解这些结构才能够很好地利用OpenCV函数库来解决问题。下面对几个比较常用的简单结构进行介绍。1)CvPoint
30、结构表示二维坐标系下的点,类型为整型,定义如下:typedef struct CvPointint x; /* x坐标, 通常以0为基点 */int y; /* y坐标, 通常以0为基点 */ CvPoint;2)CvSize结构 CvSize结构用来表示矩形框大小,以像素为精度,结构体中分别定义了矩形的宽高和高度,定义如下:typedef struct Cvsize int width; /*矩形宽度,单位为像素*/ int height; /*矩形高度,单位为像素*/ CvSize;3)IplImage 结构 OpenCV库主要是使用“IplImage”结构体来创造和处理图像。IplIma
31、ge结构来源于inter的另外一个函数库IPL,该函数库主要是针对图像处理。定义如下:typedef struct IplImage int nSize; /*IplImage大小*/ int ID; /*版本(=0)*/ int nChannels; /*大多数opencv函数支持14个信道*/ int depth; /*像素的位深度*/ int dataOrder; /*0:交叉存取颜色信道。1:分开的颜色信道。只有cvCreateImage可以创建交叉存取图像*/ int origin; /*0:顶左结构,1:底左结构*/ int width; /* 图像宽像素 */ int heigh
32、et; /*图像高像素*/ struct_IplROI *roi; /*图像感兴趣区域*/ int imageSize; /*图像数据大小*/ int widthStep; /*排列的图像大小,以字节为单位*/ 4)CvCapture结构typedef struct CvCapture CvCapture;结构CvCapture 没有公共接口,它只能被用来作为视频获取函数的一个参数。5)cvCreateVideoWriter结构typedef struct CvVideoWriter CvVideoWriter;2.4.2常用函数下面介绍一下OpenCV中常用的几个函数,也是本系统常用的函数,
33、分别说明如下。1)cvLoadImage( ):载入图像IplImage* cvLoadImage( const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR );filename:要被读入的文件的文件名。iscolor:指定读入图像的颜色和深度。指定的颜色可以将输入的图片转为3信道(CV_LOAD_IMAGE_COLOR),单信道 (CV_LOAD_IMAGE_GRAYSCALE),或者保持不变(CV_LOAD_IMAGE_ANYCOLOR)。2)cvShowImage( ):在指定窗口中显示图像void cvShowImage( const
34、 char* name,const CvArr* image );name:窗口的名字。image:被显示的图像。3)cvCreateFileCapture( )与cvCreateCameraCapture( )CvCapture* cvCreateFileCapture( const char* filename );初始化从文件中获取视频;filename:视频文件名。 函数cvCreateFileCapture给指定文件中的视频流分配和初始化CvCapture结构。当分配的结构不再使用的时候,它应该使用cvReleaseCapture函数释放掉。CvCapture* cvCreateCa
35、meraCapture( int index );初始化从摄像头中获取视频;index :要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。函数cvCreateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。释放这个结构,也要使用函数cvReleaseCapture。4)cvQueryFrame( ):从摄像头或者文件中抓取并返回一帧IplImage* cvQueryFrame( CvCapture* capture );capture:视频获取结构。 函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回
36、这一帧。返回的图像不可以被用户释放或者修改。5)cvGetCaptureProperty( )与cvSetCaptureProperty( )double cvGetCaptureProperty( CvCapture* capture, int property_id );获得摄像头或者视频文件的指定属性;capture:视频获取结构。property_id:属性标识。可以是下面之一:CV_CAP_PROP_POS_MSEC - 影片目前位置,为毫秒数或者视频获取时间戳 CV_CAP_PROP_POS_FRAMES - 将被下一步解压/获取的帧索引,以0为起点CV_CAP_PROP_POS_
37、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 - 视频文件中帧的总数int cvSetCaptureProperty( CvCapture* capture, int property_id, double value );设置指定视频获取的属性。目前这个函数
38、对视频文件只支持: 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 - 视频流的帧宽度(只对摄
39、像头有效) CV_CAP_PROP_FRAME_HEIGHT - 视频流的帧高度(只对摄像头有效) CV_CAP_PROP_FPS - 帧率(只对摄像头有效) CV_CAP_PROP_FOURCC - 表示codec的四个字符(只对摄像头有效)value :属性的值。6)cvCreateVideoWriter( ):创建视频写入器结构CvVideoWriter* cvCreateVideoWriter( const char* filename,int fourcc, double fps,CvSize frame_size,int is_color=1 );filename:输出视频文件名。
40、 fourcc:四个字符用来表示压缩帧的codec 例如,CV_FOURCC(P,I,M,1)是MPEG-1 codec,CV_FOURCC(M,J,P,G)是motion-jpeg codec等。在Win32下,如果传入参数-1,可以从一个对话框中选择压缩方法和压缩参数。fps:被创建视频流的帧率。frame_size:视频流的大小。is_color:如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。7)cvWriteFrame( ):写入一帧到一个视频文件中int cvWriteFrame( CvVideoWriter* writer, co
41、nst IplImage* image );writer:视频写入器结构。image:被写入的帧。2.5 本章小结本章主要介绍了OpenCV技术,包括OpenCV在Visual C+6.0编程环境下的配置方法,着重介绍了与本文工作密切相关的OpenCV中的数据结构和常用函数,为后面的系统实现打下基础。3 图像预处理数字图像处理(Digital Image Proeessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。为了消除采集图像的噪声和干扰,加强有用信息,使图像更易于辨识。其中,处理的重点是去除噪声,但选取怎么样的滤波器最合适则是个难题。通常图像
42、里的噪声类型有高斯噪声、脉冲噪声、瑞利噪声等。高斯噪声的特点是密度大、噪声强度的波动范围宽。受高斯噪声污染的图像不仅在图像的每一像素灰度级上都受影响,而且即便同一灰度级上造成的污染程度也可能存在着较大的差异。图像中出现的一般为高斯噪声。一般用平滑滤波器降低高斯噪声。3.1 图像的获取与灰度转换原始彩色图像的背景提取,基本思想是,图像中的某个像素按时间抽样,其作为背景像素的时间比作为运动前景的时间长,即其作为背景的概率比作为前景的概率大,而且背景和前景在颜色上和亮度上都有很大不同。这是因为,对于固定场景,运动物体在运动,其转瞬即逝,大多数时间我们看到的都是静止背景,因此图像上某个像素点作为前景的
43、时间相对作为背景的时间短得多;而且,运动物体和静止背景在色彩上有明显区别,人能轻易分辨出前景物体,即使在一张静止图像上。不论何种方法,都是基于这个思想。利用普通的彩色CCD 摄像机拍摄的图像都可以统一规整为宽度为384,高度为255像素(pixels)点的位图文件格式,即彩色的BMP 位图文件。BMP 格式的图像是以象素的形式记录图像的,它的每个象素点(Pxiel)由红、绿、蓝三原色组成,每个色彩通道的颜色值都由一个八位的字节来表示。BMP 图像文件的结构分为:文件头、调色板数据和图像数据三个部分,其中文件头的长度固定为54个字节,文件头中包含两种数据结构。然而,考虑到图像文件的存储量和处理图
44、像需占用大量机器资源,本图像识别系统均采用不含彩色信息的灰度图像,即图像中每个象素仅由一个八位字节表示该像素的亮度值,因而灰度图像是具有256 个灰度级的黑白图像,便于后续的图像二值化,处理运算量大大减少。一些系统的摄像部分采用单色CCD 摄像头则可以直接得到灰度图像。由真彩图像到灰度图像的变换,本课题用如下的变换公式:RGB Gray :Y = 0.212671*R + 0.715160 *G + 0.72169*B (3.1)其中Y 为灰度图像的灰度值,R、G、B 为真彩图像的红、绿、蓝三通道颜色值。在openCV 中,主要使用的图像格式为Ipllmage,即IpL 图像头。Ipllmag
45、e 结自于Intel Imageproeessing Library(是所具有的)。OpenCV 只支持其中的一个子集。Ipllmgae结构中各成员变量所代表的含义。3.1.1 图像噪声噪声主要在数字图像的获取(量化)和传输中产生,可以理解为妨碍人的视觉器官或系统传感器对所接收图像源信息进行理解或分析的各种因素,一般是不可预测的随机信号,只能用概率统计的方法去认识。噪声对图像处理十分重要,影响图像处理的输入 、采集、处理的各个环节以及输出结果的全过程。特别是图像的输入、采集噪声的抑制是十分关键的问题,若输入伴有较大的噪声,必然影响处理全过程及输出的结果。因此一个良好的图像处理系统,不论是模拟处
46、理还是用计算机进行的数字处理,无不把减少最前一级的噪声作为主攻目标。3.1.2 噪声的特征设图像信号为灰度图像并按二维亮度 f (x, y)分布,则噪声可看作是对亮度的干扰,可用n(x, y)来表示。噪声是随机的,因而需用随机过程来描述,即要求知道其分布函数和密度函数。但在许多情况下这些函数很难测出或描述,甚至不可能得到,所以常用统计特征描述噪声,如:均值、方差、相关函数等。用噪声平方的平均值 (E表示均值操作)描述噪声的总功率;用噪声的方差描述噪声的交流功率;用噪声平均值的平方表示噪声的直流功率。3.1.3 噪声的分类根据噪声产生的来源,大致可以分为外部噪声和内部噪声两大类。外部噪声是指从处
47、理系统外来的影响。如天线干扰或电磁波从电源线窜入系统的噪声。内部噪声则有如下四种最常见形式。1.由光和电的基本性质引起的噪声。例如电流可看作电子或空穴运动这些粒子运动产生随机散粒噪声,导体中电子流动的热噪声,光量子运动的光量子噪声等。2.由机械运动引起的噪声。例如,接头振动使电流不稳,磁头或磁带、磁盘抖动等。3.元器件噪声。如光学底片的颗粒噪声,磁带、磁盘缺陷噪声,光盘的疵点噪声等。4.系统内部电路的噪声。从噪声的分类方法来看是多种多样的。但综合来说,噪声是随机产生的量,所以又可以从统计数学的观点来定义噪声。凡是统计特征不随时间变化的噪声称为平稳噪声,而统计特征随时间变化的噪声称作非平稳噪声。从噪声的分类方法来看是多种多样的。但综合来说,噪声是随机产生的量,所以又可以从统计数学的观点来定义噪声。凡是统计特征不