车牌识别项目实验报告_第1页
车牌识别项目实验报告_第2页
车牌识别项目实验报告_第3页
车牌识别项目实验报告_第4页
车牌识别项目实验报告_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

基于数学形态学的车牌定位方法【摘要】在汽车牌照识别系统中,车牌定位是整个识别模块实现的前提,目前车牌定位的方法多种多样,各有所长,但存在着计算量大或定位准确率不高等问题。本文结合数学形态学的根本运算,尝试使用数学形态学来实现车牌照识别系统中的关键步骤——车牌定位。实验结果说明此方法算法简单,且有一定的定位准确率。【关键词】数学形态学,结构元素,车牌定位AMethod0fLicensePlateLocationBased0nMorphology【Abstract】Incarlicenseplaterecognitionsystem,licenseplatelocationisthepreconditionofthewholerecognitionmodule.Nowvariousmethodsareusedinit,eachofwhichhasitsownadvantage.However,suchproblemsasthequantityincalculationorthelowcorrectlocationratearen’tsolved.Thispaperusesmathematicalmorphologycombinedwithitselementalcalculationtorealizethecrucialprocedure—licenseplatelocationincarlicenseplaterecognition.Experimentresultsshowthatsuchmethodcallsimplifythealgorithmandhassomecorrectlocationrate.【KeyWords】Morphology,Structureelement,Licenseplatelocation目录第1章绪论 11.1车牌研究概要 11.1.1车牌定位的背景 11.1.2车牌定位的意义 21.2本文研究的内容 31.2.1车牌定位研究的主要内容 41.2.2研究小结 4第2章车牌定位算法的研究 52.1传统的车牌定位算法 52.1.1基于颜色的分割算法 52.1.2基于纹理的分割算法 52.1.3基于边缘检测的分割算法 62.1.4基于数学形态学的分割算法 62.1.5基于遗传算法的分割方法 72.1.6基于神经网络的分割算法 82.2形态学的根本运算 82.2.1膨胀,腐蚀 92.2.2开,闭运算 102.3本章小结 11第3章车牌定位算法的实现 123.1算法处理过程 123.2二值化处理 123.3腐蚀去噪 133.4作膨胀,腐蚀运算 133.5标记连通域 133.6标识并定位车牌 143.7本章小结 15第4章实验结果及分析 164.1实验说明 164.1.1实验流程 164.1.2实验分析 174.2实验小结 20结论 21参考文献 22附录 24致谢 43图目录TOC\h\z\t"图标题"\c图〔〕实验过程 12图〔〕实验流程图 16图〔〕原始图像 17图〔〕边缘二值化结果 17图〔〕腐蚀去除噪声 18图〔〕膨胀 18图〔〕腐蚀 19图〔〕标记连通区域 19图〔〕最终识别结果 20第1章绪论车牌研究概要在汽车牌照识别系统中,车牌定位是整个识别模块实现的前提,目前车牌定位的方法多种多样各有所长,但存在着计算量大或定位准确率不高等问题。文章结合数学形态学的根本运算,尝试使用数学形态学来实现车牌照识别系统中的关键步骤——车牌定位。车牌定位的背景随着21世纪经济全球化和信息时代的到来,作为信息来源的自动检测、图像识别技术越来越受到人们的重视。近年来计算机的飞速开展和数字图像技术的日趋成熟,为传统的交通管理带来巨大转变,先进的计算机处理技术,不但可以将人力从繁琐的人工观察,监测中解放出来,而且能够大大提高其精确度,汽车牌照自动识别系统就是在这样的背景与目的下进行开发的。目前指纹识别、视网膜识别技术已经到了实用阶段;声音识别技术开展也相当快,而对汽车牌照等相关信息的自动采集和管理对于交通车辆管理、园区车辆管理、停车场管理、交警稽查等方面有着十分重要的意义,成为信息处理技术的一项重要研究课题。车辆牌照识别〔LicensePlateRecognition,LPR〕技术作为交通管理自动化的重要手段,其任务是分析、处理汽车监控图像,自动识别汽车牌号,并进行相关智能化数据库管理。LPR系统可以广泛应用于高速公路电子收费站、出入控制、公路流量监控、失窃车辆查询、停车场车辆管理、公路稽查、监测黑牌机动车、监控违章车辆的电子警察等需要车牌认证的重要场合,尤其在高速公路收费系统中,实现不停车收费技术可提高公路系统的运行效率,LPR系统更具有不可替代的作用,因而对LPR车牌识别技术的研究和应用系统开发具有重要的现实意义。汽车牌照识别系统〔VLRPS〕是对公路上配置的摄像头拍摄的照片进行数字图像处理与分析,综合应用大量的图像处理最新成果和数学形态学方法对汽车图像进行平滑、二值化、模糊处理、边缘检测、图像分割、开运算、比运算、区域标识等多种手段以提取车牌区域,进而到达对汽车牌照的精确定位并最终完成对汽车牌照的识别。车牌定位的意义在国内,廖金周等用线性滤波器,水平方向和垂直方向投影来确定车牌的位置[1],但是该方法受光照和噪声的影响很大,叶晨洲等人采用纹理信息和多分类器进行集成的方法来进行车牌的定位和识别[2],但是车牌的纹理信息好多不太明显,受环境的影响较大。在国外,使用数学形态学[3],边缘提取[4],梯度特征合成[5],基于神经网络的颜色分层[6],矢量量化[7]等方法用于车牌定位和识别,例如J.R.Parker等使用5×5的中值滤波器[8]进行预处理,Shen—Castan边缘算子[9]得到边缘,然后利用遗传算法提取车牌,但是遗传算法收敛速度很慢,MeiYu等人利用模板匹配的方法对车牌文本识别,但是适应性不太好。中科院自动化所文字识别工程中心从1998年以来一直从事车牌识别的研究工作,并且已经开始成功地把研究成果应用到高速公路的收费系统中去。车牌识别系统将有效率地利用现有交通设施,减少交通负荷,保证交通平安,提高运输效率。中国是一个经济持续开展的开展中国家,改革开放以来,城市化与汽车化开展十分迅猛。改革开放前,城市化水平缺乏19%,目前已经开展到超过30%,预测2021年将接近50%;机动车拥有量目前已达6000万辆,并以每年10%的速度持续增长,预计2021年将到达1.3亿辆。中国城市交通的特点是混合交通,目前自行车拥有量超过1.8亿辆,如果公共交通效劳水平不提高,城市交通结构不完善,自行车拥有量将会有增无减。改革开放以来,中国道路交通设施及管理设施虽然有较大改观,但跟不上自动车增长速度。总体开展水平与兴旺国家有较大差距,特别是大多数城市路网结构不合理,道路功能不完善,道路系统不健全,交通管理设施缺乏,管理水平不高。即使各地都建立了交通控制中心,大多只是实现了监视功能,而远没有发挥控制功能的效应。中国城市的大气质量恶化,已逐步由无烟煤污染转变为机动车尾气污染。其中主要原因是交通拥堵、车速下降以及车况差、车辆技术性能低等,致使在世界十大空气污染最严重的城市中,我国就据之有七。同时,车辆状况差也影响到城市交通,并已成为制约我国城市交通的重要因素。以车况较好的北京市为例,平均日故障次数达500次以上,给城市交通带来了巨大压力。车牌定位系统的应用范围:1.交通路口的智能化交通管理;2.交通信息的自动采集;3.机场,港口等出入口车辆管理;4.警方及其他执法机关设立临时稽查站,对来往车辆实施稽查,自动甄别待查车辆;5.路桥、隧道等卡口的自动收费系统;6.现代住宅小区、停车场、重要机关单位的出入口管理等。1.2本文研究的内容车牌区域的特点:1.车牌底色往往与车身颜色、字符颜色有较大差异;2.车牌的矩形区域内存在较丰富的边缘,呈现出规那么的纹理特征;3.车牌内字符之间的间隔比拟均匀,字符和牌照底色在灰度上存在跳变;4.图像中牌照长宽比的变化有一定范围。车牌定位中存在的问题:1.现场影像中的字符与那些统一格式的文字文件或者封面图片比照,由于外部环境条件的变化而产生了明显的差异。因为太阳光的照射,改变了那些字的明亮度,所以从早上到夜晚,这些字符的灰度会随着时间的推移产生很明显的变化。同时,由于周围的各种灯光和阴影,以及其他一些周边的物体,都会对这些字符产生变化,使人们觉得这些字符看起来很不平衡。此外,不同的天气环境,比方下雨,下雪,雾等,也会对这些现场影像中的字符效果产生影响。2.由于所有摄像头的位置并不相同,那些关键字符与相机的位置变化,使得那些现场的图片上或多或少地带有一些三维效果。比方某些字符是从一些非常不标准的角度拍摄的,使得这些字看起来是倾斜的,这会导致那些字符相当难以识别。3.在现场图片中可能会有其他类似的物体,它们与车牌有着相似的形状与特征,容易产生混淆。〔例如:窗框,围墙,栏杆,楼梯等等〕车牌定位研究的主要内容本文将提出一种快速自适应车牌定位算法。在粗定位阶段结合车牌区域的纹理特征和灰度信息定位车牌,接着利用车牌字符的边缘特点精确定位,为下一阶段的车牌字符处理打下了良好的根底。经实验证明,本文提出的方法速度较快,满足整个系统的实时性要求,对车牌大小、长宽比、车牌类型、是否有边框等车牌信息不敏感,对不同的拍摄方式、不同的拍摄条件、不同的图像类型同样具用较好的鲁棒性。由于抓住了车牌共有的特征,本方法有着广泛的适用性,可应用于道路收费、车辆监控、停车场管理等诸多领域。研究小结在本章中,对于车牌定位的意义和研究内容及其开展情况进行了介绍。并对本文的工作进行了说明。随着数字图像处理与计算机视觉领域的开展,很多应用领域对于图像特征提取的质量将提出更大的要求。基于定位算法的多样性和复杂性,车牌定位算法的完善性还未形成。本文从当前基于形态学的问题入手,对现有的车牌定位系统算法提出改良,并与增强算法结合,实验结果显示具有很强的现实意义。第2章车牌定位算法的研究传统的车牌定位算法车牌定位就是从复杂的车辆背景图像中准确的提取出车牌区域。如何从车牌序列图像中准确的获取车牌位置是车牌自动识别算法实现的关键。车牌定位是整个车牌自动识别算法的根底,车牌定位的准确与否,直接决定了后阶段的图像处理的质量与处理速度、识别的精度与识别的速度。目前,车牌定位主要采用以下几种方法:基于图像彩色信息的方法[10];基于纹理分析的方法[11];基于边缘检测的方法[12];基于数学形态学的定位[13];基于遗传算法的定位[14];基于神经网络的定位等[15]。它们有一定的优点,但也有缺乏之处。2.1.1基于颜色的分割算法该方法是根据不同颜色车牌出现的概率,合理利用投影技术,进行统计分析,而后定位和分割出车牌。该算法具有速度快、准确率高、适应性强等特点。但是,该方法在车牌区域颜色与附近区域颜色非常相近时,车牌的定位误差会有所增加。在进行车牌定位以前,需要对图像进行预处理,增大图像的比照度。由于我国车牌有多种颜色格式,且受天气光照等影响,所以需要先将彩色图像转换为灰度图像。2.1.2基于纹理的分割算法纹理分析算法描述:(1)首先进行行扫描,根据上述的关于车牌线段的定义,找出图像中每一行所含有的车牌线段。记录下它们的起始坐标和长度:(2)如果有连续假设干行且行数大于某一阈值R,满足每一行存在不少于一个的车牌线段。那么认为找到了车牌的行可能区域。这样,就确定了可能存在车牌的区域的起始行和高度。(3)进行列扫描,以确定车牌候选区域的起始行、高度和起始列、宽度。(4)继续在其他可能存在车牌的区域寻找,直至找到所有的车牌候选区域。然后根据车牌的长,宽,长宽比这些车牌的几何特征进一步删除伪车牌,如果还是有多个车牌候选区域。那么需要用其他方法进一步判别。利用字符纹理定位车牌,对于光照偏弱、偏强或不均匀,牌照倾斜和变形等情况定位较好。但应用于背景复杂的图像时,很容易把一些纹理分布比拟丰富的其他非车牌区域也定位进来,产生包含真车牌在内的较多的车牌候选区域。通过结合垂直投影的方法可以弥补纹理分析法的缺乏。2.1.3车牌字符区域灰度频率变化是车牌区域最稳定的特征。所以可以利用它的变化来进行车牌定位.即首先对车辆图像进行边缘增强,再利用水平扫描线进行车牌区域的检测。边缘检测的算子很多,例如:Sobel算子、Roberts算子、Prewitt算子、Laplacian算子等。这些算于都不是专门用于检测垂直边缘的,且运算量较大。一般采用一种水平模板算子与图像进行卷积然后再与原图像作差分运算,当差分值大于某一门限值就认为它是边缘目标,否那么是背景。该方法的定位准确率较高,反映时间快,能有效去掉噪声,适合于包含多个车牌的图象,并且在多车牌图像的情况下定位速度也很快。但是对车牌严重褪色的情况,南于检测不到字符笔画的边缘会导致定位失败定位后的区域在外界有干扰以及车牌倾斜时比车牌稍大。2.1.4基于数学形态学的车牌区域粗定位。主要是根据车牌整体特征从水平方向初步确定车牌位置,它不能精确确定车牌左右边界的位置。所以必须辅以其余的定位方法进行精定位。而基于字符边缘特征的车牌区域精定位,可以利用车牌微观特征进一步从纵向上精确确定车牌位置。所以,这两种定位方法常常结合来使用。本文主要研究的就是这种算法。2.1.5遗传算法是在达尔文进化论和盂德尔遗传变异理论根底上开展起来的一种随机搜索寻优算法,它通过模拟生物进化的形式,完成对某个目标函数的全局优化。在车牌定位过程中.需要对待定区域进行特征提取处理。搜索空间很大,遗传算法能够快速搜索到全局最优值。遗传算法的处理过程一般为:(1)将待求解问题的解进行参数编码,并给出针对该参数编码的适度函数。适度函数值的全局最大值对应问题的全局最优解:(2)生成初始种群,一般为一组随机生成的可能解;(3)计算种群个体适度值,并判断是否满足算法停止条件,是那么退出并输出当前最优解:(4)根据适度函数进行选择操作,从种群中选择进入下一代的个体,被选择的概率正比于个体的适度函数值;(5)对选择后的个体以重组概率P两两进行重组生成新个体(6)对新个体以变异概率进行变异操作;(7)转(3)继续执行。根据在待定区域获得的纹理特征向量。将其与车牌的纹理特征向量进行比拟就能得到该待定区域为车牌区的可能概率。传统算法进行特征提取的时候,当目标图像质量较差或者有较大的退化时,不是很有效。而遗传定位算法能够对全图的待定目标区域图像进行小范围的图像增强和提取,实际应用也说明该方法在图像质量较差时对目标区域都有很好的目标增强效果。对夜间迎车头灯时抓拍的图像定位很成功。但仍然具有进一步算法优化的潜力。可以在算法中参加适当的局部搜索算子来进一步改善算法的性能。2.1.6多层前馈人工神经网络是最流行、最成熟的人工神经网络。误差反向传播(BP)算法又是应用中首选的算法。BP算法是由两局部组成:信息的正向传递与误差的反向传播。在正向传播的过程中,输人信息从输人层经隐含层逐层计算传向输出层。每一层神经元的状态只影响下一层神经元的状态。如果在输出层没有得到期望的输出,那么计算输出层的误差变化值,然后转向反向传播,通过网络将误差信号沿原来的连接通路反传回来修改各层神经元的权值直至到达期望的目标。该定位流程为:(1)采样窗口的选取窗口应为长方行,尺寸不能太大,否那么神经网络规模太大太小的话不能充分提取车牌特征;(2)样本图像的选择用什么样的样本来训练网络。网络就具备了认知该类样本的能力。所以对车牌和背景反复采样,并且注重不同条件下的各种图像,以实现网络的泛化;(3)搜索的策略在用采样窗口遍历图像时,用自下而上的策略更优越一些。因为车牌一般位于图像的中下方,而且车牌上方对车牌定位的干扰比下方的多;(4)定位速度的提高可以采用改变步长的遍历方法来提高速度:假设当前窗口对应输出较低,那么跳过一个甚至数个窗口的距离再采样计算;反之那么依次遍历。这样速度会有较大提高。该方法利用牌照的长宽比、面积、面积与周长比来区分真正的牌照区域与类牌照区域。该方法具有较强的自适应能力,可以在较复杂背景中精确定位大小不同的车牌。并且通过对传统的BP网络的改良。一定程度上提高了定位的精度和速度此方法要求图像中的牌照尺寸根本不变,一旦图像中的牌照尺寸发生了较大的变化,必须对神经网络重新进行训练。定位效果比拟好,但计算量较大。2.2形态学的根本运算数学形态学是一种应用于图像处理和模式识别领域的新方法。形态学是生物学的一个分支,常用它来处理动物和植物的形状和结构。1964年,法国学者Serra对铁矿石的岩相进行定量分析,以预测铁矿石的可扎性。几乎同时,Matheron研究了多孔介质的几何结构、渗透性及两者的关系,他们的研究成果直接导致数学形态学的形成。随后Serra和Matheron在法国共同建立了Fontainebleau数学形态学研究中心。在以后几年的研究中,他们逐步建立并完善了数学形态学的理论体系,此后,又研究了基于数学形态学的图像处理系统。数学形态学是一门建立在严密的数学理论根底上的科学。Matheron于1975年出版的?RandomSetsandIntegralGeometry?一书中严谨而详细地论证了随机集论和积分几何,为数学形态学奠定了理论根底。1982年,Serra出版的专著?imageAnalysisandimageprocessing?是数学形态学开展的里程碑,它说明数学形态学在理论上已经趋于完备,在实践应用中不断深入。此后,经过科学工作者的不断努力,Serra主编的?ImageAnalysisandMathematicalMorphology?第2、3卷相继出版。1986年,CVGIP(ComputerVisionGraphicsandImageProcessing)发表了数学形态学专辑,从而使得数学形态学的研究呈现了新的景象。同时,Fontainebleau研究中心的学者们又相继提出了基于数学形态学方法的纹理分析模型系列,从而使数学形态学的研究前景更加光明。随着数学形态学逻辑根底的开展,其应用开始向边缘学科和工业技术方面开展。数学形态学的应用领域已经不限于传统的微生物学和材料学领域,80年代初又出现了几种新的应用领域,如:工业控制、放射医学、运动场景分析等。形态学图像处理的根本思想,是利用一个称为结构元素(StructureElement)的“探针〞收集图像的信息。作为探针的结构元素,可直接携带知识(形态、大小、甚至参加灰度和色度信息),来探测研究图像的结构特点。膨胀,腐蚀腐蚀是数学形态学最根本的运算。腐蚀表示用某个结构元素对一个图像进行探测,以便找出在图像内部可以放下该结构元素的区域。〔2.1〕其中A称为输入图像,B为结构元素。由将B平移x但仍包含在A内的所有点x组成。如果将B看作为模板,那么那么由在平移模板的过程中,所有可以填入A内部的模板的原点组成。一般地,可以得到以下性质:如果原点在结构元素的内部,那么腐蚀后的图像为输入图像的一个子集;如果原点在结构元素的外部,那么,腐蚀后的图像那么可能不在输入图像的内部。形态学的第二个根本运算是膨胀,膨胀是腐蚀运算的对偶运算。可以定义为:〔2.2〕因而,膨胀可以通过相对结构元素的所有点平移输入图像,然后计算其并集得到。膨胀也可以通过对补集的腐蚀来定义。因为腐蚀表示对图像内部作滤波处理,而膨胀那么表示对图像的外部作处理。如果结构元素为一个圆盘,那么膨胀可以填充图像中的孔,而腐蚀那么可以消除图像中小的成分。值得注意的是,结构元素的大小和形状对腐蚀和膨胀的结果会产生不同的影响。2.2.2开,闭运算在形态学图像处理中,除了腐蚀和膨胀这两种根本运算之外,还有两种二次运算即开运算及闭运算也起着非常重要的作用。利用图像B对图像A作开运算,其定义为:〔2.3〕或如下定义:〔2.4〕上式说明,开运算可以通过计算所有可以填入图像内部的结构元素平移的并求得。即对每一个可填入位置作标记,计算结构元素平移到每一个标记位置时的并,便可得到开运算结果。事实上,这正是先作腐蚀,然后作膨胀运算的结果。如果结构元素为圆盘,那么开运算可以有两个作用:(1)利用圆盘作开运算起到磨光内边缘的作用,即可以使图像的尖角转化为背景;(2)圆盘的圆化作用可以得到低通滤波的效果。闭运算是开运算的对偶运算,即先作膨胀然后再作腐蚀。利用拟作闭运算定义为:〔2.5〕本章小结纵观国内外文献,车牌定位算法的开展方向还是和整个车牌识别系统趋于完善的方向还是一致并相辅相成的,只有不断地从每一步的不断完善做起,才可能有更快更好的算法产生。对车牌定位方法的评价衡量主要是从定位分割精确率和算法的精干灵活的角度。适用于任意背景、位置和光照下的汽车像,各种性能都满足要求的算法目前还没有。因此,综合应用多种算法进行定位分析既是客观实际的需要,也是我本次学习和研究工作的重点。第3章车牌定位算法的实现3.1算法处理过程车牌定位算法的处理过程如下图:待处理图像待处理图像膨胀,腐蚀运算标记连通域二值化处理标识并定位车牌腐蚀去噪图〔3.1〕实验过程3.2二值化处理在作形态学处理之前,首先必须对输入的包含车牌的图像作二值化处理。经过实验发现,使用传统的全局阈值或局部阈值的二值化方法,效果不理想,为此采用垂直边缘提取的二值化方法。采用这种二值化方法的另一个原因是,可直接应用形态学处理而无须判断车牌底色。由于车牌存在黑底自字和白底黑字两种类型,常规的二值化处理后,必须分清形态学究竟是在二值图中的前景还是背景中作处理。由此可见,无论哪种底色类型的车牌,这种边缘二值化提取的结果都保存在前景(白色)中,因此,后续的形态学处理可对二值图像的前景作统一处理。本文采用基于垂直边缘检测与阈值分割相结合的车牌定位方法,图像的边缘是图像的最根本特征,边缘是其周围的像素灰度有阶跃变化。牌照区域的字符和背景就有明显的边缘,而且边缘的个数也很多,这是牌照区域区别于其他区域的根本特之一,也是本算法的根本依据。物体边缘是由灰度不连续性反映的,经典的边缘提取方法是考察图像的每个像索在某个领域内灰度的变化,利用边缘邻近一阶或二阶方向导数变化规律来提取。本算法采用阈值比拟,取threshold=80.0,周围的象素与其比拟,通过比拟的结果来判断这个象素是否转化为黑或者白,这样再对图像进行处理时,图像的几何性质只与“0〞和,“1〞的位置有关了,不再涉及到像素的灰度值,从而使后面的处理变得简单,且数据的压缩量很大,给存储和处理都带来了很大的方便,同时也提高了系统的经济实用性。腐蚀去噪对已二值化的图像结果作滤波,可去除一些噪声。许多方法都可以用在这个步骤。为了消除噪声而采用滤波的方法,可分为空域滤波和频域滤波。按照空域滤波器的功能又可以分为平滑滤波器和锐化滤波器,平滑滤波器常用的方法有邻域平均法、选择平均法、中值滤波、自适应滤波等其中,去噪处理多采用中值滤波,能获得较好的效果。实际应用中可能采用传统的邻域平均平滑算法,也可能采用某些改良的算法,如应用灰度差倒数加权算法进行滤波处理。这里采用形态学的滤波方法,即使用一定大小的结构元素对图作腐蚀运算。根据实际情况,还可以使用带有方向性的结构元素作腐蚀滤波。3.4作膨胀,腐蚀运算在上面两步的根底上,可以开始作形态学处理。首先使用特定大小的结构元素作膨胀运算,然后使用同样大小的结构元素再作腐蚀运算,使车牌所在区域形成连通的区域。可见,经过形态学的运算,车牌区域已形成闭合的连通区域。其实这正是形态学闭运算作用的结果。标记连通域如果图像中有许多物体,如图2(c)所示,要把我们感兴趣的物体从背景中别离出来,那么必须确定连通成分,并作连通成分标记。要将一幅图像中所有被标记的点组合成物体图像,这里先假设组成物体的点在空间上是非常接近的,利用空间接近概念可以严格定义,利用此定义研究的算法可以把空间上非常接近的点聚合在一起,构成图像的一个成分。图像中,背景用“0〞表示,前景用“l〞表示。对每个连通的前景区域进行标志,标号从“2〞开始递增,背景保持不变。于是,我们将采用如下递归连通标记算法:(1)设起始标号为label=l,原始图像为f(i,j),其中i=l,2,PlateHeight;j=1,2,PlateWidth。(2)从起始点(l,1)开始依次考察原图中的每个点f(i,j).如果f(i,j)=l,调用子函数find(id);否那么,考察下一个点,直至终点f(PlateHeight,PlateWidth)。(3)子函数find(i,j)完成下述功能:1)考察当前点f(i,j)。如果f(i,j)=1,跳转至2);否那么,跳出子函数;2)考察当前点ff(i,j)的四邻域,如果其中至少有一个邻域的值大于“1”3)将f(i,j)的四邻域f(i-1,j),f(i+1,j),f(i,j-1),f(i,j+1)分别作为当前点,依次递归调用子函数find(i-1,j),find(i+1,j),find(i,j-1),find(i,j+1)。连通标记算法可以找到图像中的所有连通成分,并对同一连通成分的所有点分配同一标记。上述连通标记算法结束后,得到月个标记的连通区域,第i个连通区域的像素值标记为i(i=1,2,,n)。标识并定位车牌在连通区域标记的根底上,我们可以计算出每个连通区域的外接矩形框,并且利用车牌的先验知识,确定车牌区域的位置。设第i个连通区域的宽高比为:〔3.1〕式中Width(i)、Height(i)分别为第i个连通区域的宽度和高度。第i个区域的面积为area(i)。根据车牌的先验知识,采用的车牌区域的判定式如下:〔3.2〕那么判定第i个连通区域为车牌区域。上式中:〔3.3〕rs和as分别为标准车牌的宽高比和面积。和为比例因子。由于连通标记后去除了一些较小的连通区域,因此取1,取0,可简化为:〔3.4〕由此判定式,可得到正确的车牌区域判定结果。本章小结上述基于形态学处理的车牌定位方法,可以较好地确定图像中车牌的位置,且算法简单、实时性好,具有较好的运用前景。此方法不仅可以处理由单行字符组成的车牌,同样也可适用于由双排字符组成的车牌。第4章实验结果及分析4.1实验说明本课题所采用的图像均为带车牌的图像,我们通过对图像进行二值化、细化、定位,提取后产生只保存有一个车牌位置的图像。在形态学算法的应用中,采用了递归连通标记算法的方法进行快速的连通区域标记。在实验结果局部,所有输出图像都与原图像进行了比拟,并且执行不同次数后的效果。从实验的结果看来,我们的算法效果是显著的。4.1.1我们可以采用流程图简单地描述整个实验过程,如图4-1所示:待处理图像待处理图像膨胀,腐蚀运算标记连通域二值化处理标识并定位车牌腐蚀去噪图〔4.1〕实验流程图其中,在各个实验环节,我们还需补充以下几点:二值化:目的是把车牌图像变成“0〞和“1〞取值的二值图,即把车牌图像的纹线和背景区分开来。这样再对图像进行处理时,图像的几何性质只与“0〞和,“1〞的位置有关了,不再涉及到像素的灰度值,从而使后面的处理变得简单,且数据的压缩量很大,给存储和处理都带来了很大的方便,同时也提高了系统的经济实用性。在这里,采取了边缘提取二值化,使得在处理时不用考虑车牌的底色以及与周围环境色的相差导致二值化提取的不同。图像腐蚀去噪:图像去噪是图像预处理中的重要内容,直接影响着车牌系统的准确率。现有的对图像进行去噪的方法有:中值滤波、小波去噪、形态学滤波等,本文采用形态学滤波,它的关键是结构元素的选用,过大或者过小的元素都会导致车牌区域无法形成闭合的连通区域。4.1.2图〔4.2〕原始图像这是原始图像,一般的停车场,高速公路收费站等根本都是过摄像头得到如上的根本BMP位图。图〔4.3〕边缘二值化结果经过了边缘二值化,图像已经变为黑白二色,这时不能明显地看出车牌所在位置,同时图像上存在大量噪声影响了判定。图〔4.4〕腐蚀去除噪声这一步是腐蚀去噪,这一步与下面两步中,最重要的是结构元素的选取,过大或者过小都会影响判定。经过这一步的运算,大局部的噪声都已经去除,只有小局部比拟大的还存在。图〔4.5〕膨胀继续对图像进行膨胀运算,使得图像上的车牌局部形成了连通区域。图〔4.6〕腐蚀腐蚀运算,进一步去除了图像上绝大局部噪声,使得图像可以进行递归连通算法来标记连通区域。图〔4.7〕标记连通区域这里进行了递归连通算法运算,将图像上大于一定范围的连通区域都进行了标记,而那些尚未去除的噪声那么被排除了标记范围。图〔4.8〕最终识别结果最后一步,通过对连通区域的长宽比例进行判断,将长宽比例符合车牌比例范围左右的区域进行标识,最终判定车牌所在区域,进而完成了整个车牌定位算法。4.2实验小结在本章中,我们给出了基于数学形态学的车牌定位算法的定位效果。通过上述图片,我们可以看出,测试效果明显,实验的目的已经到达。结论本文的车牌定位系统算法主要内容包括以下局部:〔1〕边缘检测二值化;〔2〕腐蚀去噪;〔3〕膨胀,腐蚀形成连通区域;〔4〕递归连通标记算法标记连通域;〔5〕标识,定位车牌。经实验证明,本文提出的方法速度较快,满足整个系统的实时性要求,对车牌大小、长宽比、车牌类型、是否有边框等车牌信息不敏感,对不同的拍摄方式、不同的拍摄条件、不同的图像类型同样具用较好的鲁棒性。由于抓住了车牌共有的特征,本方法有着广泛的适用性,可应用于道路收费、车辆监控、停车场管理等诸多领域。上述基于形态学处理的车牌定位方法,可以较好地确定图像中车牌的位置,且算法简单、实时性好,具有较好的运用前景。此方法不仅可以处理由单行字符组成的车牌,同样也可适用于由双排字符组成的车牌。在基于形态学的车牌定位方法中,使用过大或过小的结构元素,都无法使车牌区域形成闭合的连通区域。因此,结构元素的选取显得非常重要。经过测试发现,结构元素的大小和车牌中字符的大小存在一定关系。因此,为了进一步提高基于形态学的车牌定位方法的精度,应尝试采取自适应的形态学处理方法。参考文献[1][美]RafaelC.Gonzalez,RichardE.Woods.数字图像处理〔第二版〕,[M],电子工业出版社,2003.[2]周长发,精通VisualC++图像处理编程,[M],电子工业出版社,2006.[3]Jun-WeiHsieh,Shih-HaoYu,Yung-ShengChen,Morphology-basedlicenseplatedetectionfromcomplexscenes[C].PatternRecognition,2002.Proceedings.16thInternationalConferenceon.[4]GuL.,KanekoT.,TanakaN.,HaralickR.M..Robustextractionofcharactersfromcolorsceneimageusingmathematicalmorphology[C],PatternRecognition,1998.Proceedings.FourteenthInternationalConferenceon.[5]卢雅琴,邬凌超.基于数学形态学的车牌定位方法[J].计算机工程,2005,31(3).[6]李波,曾致远,付祥胜.基于数学形态学和边缘特征的车牌定位算法[J].视频技术应用与工程,2005,7.[7]严宝民,于万波,魏小鹏.汽车牌照定位研究综述[J].大连大学学报,2002,23(2).[8]刘伟铭,赵雪平.一种基于扫描行的汽车牌照定位算法[J]。计算机工程与应用,2004,6.[9]燕鹏,刘长松,丁晓青.复杂背景下的汽车牌照自动识别系统[J].电视技术,2005,6.[10]叶茂亮,刘长松,丁晓青,等.基于笔画分析和形态学的汽车牌照定位算法[J].电视技术,2005,5.[11]赵雪春,戚飞虎.基于彩色分割的汽车自动识别技术[J].上海交通大学学报,1998,32(10).[12]崔屹.图像处理与分析一数学形态学方法及应用[M].北京:科学出版社,2000.[13]OstuN.AThresholdSelectionMethodfromGray-LevelHistograms[J],IEEETransactions,Systems,ManandCyber-netics,1979,SMC-9(1):62-66.[14]HsiehJun-wei,YuShih-Hao,Yung-ShengChen.Morphology-basedLicensePlateDetectionfromComplexScenes[C].In:Proceedingsof16thInternationalConferenceonPatternRecognition,2002:176-179.[15]廖金周,宣国荣.车辆识别的自动分割[J].微型电脑应用,1999,7.

附录车牌定位程序模块//Imageprocess.cpp:implementationoftheCImageprocessclass.//////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"Draw24.h"#include"Imageprocess.h"#include"math.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endifexternBYTE*m_pDib;extern intm_Width;extern intm_Height;extern CStringCurrentPathName;////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CImageprocess::CImageprocess(){ m_pDib=NULL; lpBitmap=NULL;}CImageprocess::~CImageprocess(){ close();}BOOLCImageprocess::Open(constchar*pzFileName){ CStringCurrentName(pzFileName); if(CurrentName.Find(".bmp")==-1&&CurrentName.Find(".BMP")==-1) { AfxMessageBox("不是位图,不能翻开!"); returnFALSE; } CFilefile; if(!file.Open(pzFileName,CFile::modeRead|CFile::typeBinary)) returnFALSE; if(file.Read((void*)&bmpfh,sizeof(BITMAPFILEHEADER))!=(UINT)sizeof(BITMAPFILEHEADER)) { file.Close(); returnFALSE; } if(file.Read((void*)&bmpih,sizeof(BITMAPINFOHEADER))!=(UINT)sizeof(BITMAPINFOHEADER)) { file.Close(); returnFALSE; } //清空内存 close(); m_Width=bmpih.biWidth; m_Height=bmpih.biHeight; length=m_Width*3; if(length%4) length=(m_Width*3/4+1)*4; intsize; size=bmpfh.bfSize-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER); if(bmpih.biBitCount==24) { m_pDib=newBYTE[size]; file.ReadHuge(m_pDib,size); } else { if(bmpih.biBitCount!=8) { AfxMessageBox("无效位图,不能翻开!"); file.Close(); returnFALSE; } unsignedintPaletteSize=1<<bmpih.biBitCount; if(bmpih.biClrUsed!=0&&bmpih.biClrUsed<PaletteSize) PaletteSize=bmpih.biClrUsed; lpBitmap=newBYTE[size]; file.ReadHuge(lpBitmap,size); RGBQUAD*pPalette=(RGBQUAD*)lpBitmap; BYTE*lpBits=lpBitmap+sizeof(RGBQUAD)*PaletteSize; intlwidth=m_Width; if(m_Width%4) lwidth=(m_Width/4+1)*4; //24位位图内存 intnfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+length*m_Height; m_pDib=newBYTE[length*m_Height]; memset(m_pDib,0,length*m_Height); bmpfh.bfType='B'+'M'*256; bmpfh.bfSize=nfSize; bmpfh.bfReserved1=1; bmpfh.bfReserved2=0; bmpfh.bfOffBits=54; bmpih.biSize=sizeof(BITMAPINFOHEADER); bmpih.biWidth=m_Width; bmpih.biHeight=m_Height; bmpih.biPlanes=1; bmpih.biBitCount=24; bmpih.biCompression=BI_RGB; bmpih.biSizeImage=0; bmpih.biXPelsPerMeter=0; bmpih.biYPelsPerMeter=0; bmpih.biClrUsed=0; bmpih.biClrImportant=0; inti,j,p1,p2,Palette; for(i=0;i<m_Height;i++) { for(j=0;j<m_Width;j++) { p1=i*lwidth+j; p2=i*length+j*3; if(lpBits[p1]<PaletteSize)Palette=lpBits[p1]; elsePalette=0; m_pDib[p2]=pPalette[Palette].rgbBlue; m_pDib[p2+1]=pPalette[Palette].rgbGreen; m_pDib[p2+2]=pPalette[Palette].rgbRed; } } } file.Close(); returnTRUE;}voidCImageprocess::Draw(CDC*pDC,intnWidth,intnHeight){ if(!m_pDib) return; m_hDrawDib=DrawDibOpen(); DrawDibRealize(m_hDrawDib,pDC->GetSafeHdc(),TRUE); DrawDibDraw(m_hDrawDib, //hdd pDC->GetSafeHdc(), //hdc 0, //xDst图象在窗口中的位置 0, //yDst m_Width, //dxDst图象的显示长宽 m_Height, //dyDst可自由拉伸 &bmpih, m_pDib, 0, //xSrc 0, //ySrc m_Width, //dxSrc m_Height, //dySrc DDF_BACKGROUNDPAL); DrawDibClose(m_hDrawDib); m_hDrawDib=NULL;}BOOLCImageprocess::Save(constchar*szFileName){ if(m_pDib==NULL) { AfxMessageBox("内存空空如也!检查是否有误!"); returnFALSE; } CStringFileName(szFileName); if(FileName.Compare(CurrentPathName)==0) { if(AfxMessageBox("覆盖原文件?",MB_OKCANCEL)!=IDOK) returnFALSE; } CFilefile; if(!file.Open(szFileName,CFile::modeWrite|CFile::typeBinary|CFile::modeCreate)) returnFALSE; file.Write((void*)&bmpfh,sizeof(BITMAPFILEHEADER)); file.Write((void*)&bmpih,sizeof(BITMAPINFOHEADER)); intsize; size=bmpfh.bfSize-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER); file.WriteHuge(m_pDib,size); file.Close(); returnTRUE;}BOOLCImageprocess::Process(){//边缘二值化 inti,j,k,m; float**tempA; BYTE*FS,*PZ,*imagetemp; intsize=bmpfh.bfSize-sizeof(BITMAPFILEHEADER)-sizeof(BITMAPINFOHEADER); FS=newBYTE[size];PZ=newBYTE[size]; imagetemp=newBYTE[size]; memcpy(imagetemp,m_pDib,size); tempA=new(float*[m_Height]); for(k=0;k<m_Height;k++) tempA[k]=new(float[m_Width]); doubletempx[3],tempy[3],D[3],tempb; for(i=1;i<m_Height-1;i++) for(j=1;j<m_Width-1;j++) { for(m=0;m<3;m++) {/* tempx[m]=fabs((m_pDib[(i+1)*length+(j-1)*3+m]+2*(m_pDib[(i+1)*length+j*3+m]) +m_pDib[(i+1)*length+(j+1)*3+m]) -(m_pDib[(i-1)*length+(j-1)*3+m]+2*(m_pDib[(i-1)*length+j*3+m]) +m_pDib[(i-1)*length+(j+1)*3+m]));*/ tempy[m]=fabs((m_pDib[(i-1)*length+(j+1)*3+m]+2*(m_pDib[i*length+(j+1)*3+m]) +m_pDib[(i+1)*length+(j+1)*3+m]) -(m_pDib[(i-1)*length+(j-1)*3+m]+2*(m_pDib[i*length+(j-1)*3+m]) +m_pDib[(i+1)*length+(j-1)*3+m]));// D[m]=sqrt(pow(tempx[m],2)+pow(tempy[m],2)); } if(tempy[1]>tempy[2]) {tempb=tempy[1];} elsetempb=tempy[1]; if(tempy[0]>tempb) tempb=tempy[0]; tempA[i][j]=tempb; // tempA[i][j]=sqrt(pow(D[1],2)+pow(D[2],2)+pow(D[0],2));// tempA[i][j]=fabs(D[1])+fabs(D[2])+fabs(D[0]); } doublethreshold=80.0; for(i=1;i<m_Height-1;i++) for(j=1;j<m_Width-1;j++) { if(tempA[i][j]>threshold) tempA[i][j]=255;// m_pDib[i*length+j*3+1]=m_pDib[i*length+j*3+2]=m_pDib[i*length+j*3] else tempA[i][j]=0;// m_pDib[i*length+j*3+1]=m_pDib[i*length+j*3+2]=m_pDib[i*length+j*3]=0; } for(i=1;i<m_Height-1;i++) for(j=1;j<m_Width-1;j++) m_pDib[i*length+j*3+1]=m_pDib[i*length+j*3+2]=m_pDib[i*length+j*3]=tempA[i][j];//腐蚀去噪 for(m=0;m<size;m++) { FS[m]=m_pDib[m];PZ[m]=m_pDib[m]; } for(i=1;i<m_Height-1;i++)for(j=1;j<m_Width-1;j++) { if(m_pDib[i*length+j*3]==255 &&m_pDib[(i-1)*length+j*3]==255 &&m_pDib[(i+1)*length+j*3]==255 &&m_pDib[i*length+(j-1)*3]==255 &&m_pDib[i*length+(j+1)*3]==255 &&m_pDib[(i+1)*length+(j+1)*3] &&m_pDib[(i-1)*length+(j-1)*3])FS[i*length+j*3]=255; elseFS[i*length+j*3]=0; } for(i=1;i<m_Height-1;i++) for(j=1;j<m_Width-1;j++) m_pDib[i*length+j*3+1]=m_pDib[i*length+j*3+2]=m_pDib[i*length+j*3]=FS[i*length+j*3];//膨胀 intr,h; for(i=9;i<m_Height-9;i++)for(j=4;j<m_Width-4;j++) { if(m_pDib[i*length+j*3]==255) {for(r=1;r<10;r++) for(h=0;h<5;h++) {PZ[(i-r)*length+(j-h)*3]=PZ[(i+r)*length+(j-h)*3]=PZ[(i+r)*length+(j+h)*3]=PZ[(i-r)*length+(j+h)*3]=255; } } } for(i=1;i<m_Height-1;i++) for(j=1;j<m_Width-1;j++) m_pDib[i*length+j*3+1]=m_pDib[i*length+j*3+2]=m_pDib[i*length+j*3]=PZ[i*length+j*3];//腐蚀inttag=0; for(i=9;i<m_Height-9;i++)for(j=4;j<m_Width-4;j++) { {for(r=1;r<10;r++) for(h=0;h<5;h++) {if(m_pDib[(i-r)*length+(j-h)*3]==255 &&m_pDib[(i+r)*length+(j-h)*3]==255 &&m_pDib[(i+r)*length+(j+h)*3]==255 &&m_pDib[(i-r)*length+(j+h)*3]==255) tag=tag++; else tag=0; } } if(tag>31) FS[i*length+j*3]=255; else FS[i*length+j*3]=0; } for(i=1;i<m_Height-1;i++) for(j=1;j<m_Width-1;j++) m_pDib[i*length+j*3+1]=m_pDib[i*length+j*3+2]=m_pDib[i*length+j*3]=FS[i*length+j*3]; //标识连通域 intcMaxSize=100; int*xtemp=new(int[cMaxSize]); int*ytemp=new(int[cMaxSize]); for(intt=0;t<cMaxSize;t++) { xtemp[t]=-1; ytemp[t]=-1; } BOOL*Checked=new(BOOL[m_Width*m_Height]); int*nPdeMark=new(int[m_Width*m_Height]); for(i=0;i<m_Height;i++) for(j=0;j<m_Width;j++)nPdeMark[i*m_Width+j]=-1; for(i=1;i<m_Height-1;i++) for(j=1;j<m_Width-1;j++)nPdeMark[i*m_Width+j]=m_pDib[i*length+j*3]; for(i=0;i<m_Height;i++) for(intj=0;j<m_Width;j++) Checked[i*m_Width+j]=FALSE; longCount; longmaxcount=0; intmaxt=0; intBlockSign=0; for(i=1;i<m_Height-1;i++) { for(intj=1;j<m_Width-1;j++) { Count=0; if(nPdeMark[i*m_Width+j]==255&&!Checked[i*m_Width+j]) { BlockSign=BlockSign+1; BlockPixelCount(nPdeMark,xtemp,ytemp,Checked,&Count,i,j,m_Height,m_Width,cMaxSize,BlockSign);// if(Count==1001)// {// BlockSign--;// } if(Count>maxcount) { maxcount=Count; maxt=BlockSign; } if(Count<=cMaxSize) { for(intk=0;k<Count;k++) nPdeMark[xtemp[k]*m_Width+ytemp[k]]=0; } } }// printf("i=%ddone\n",i); }//标识定位车牌 intXmax=1; intXmin=1000; intYmax=1; intYmin=1000; //intl=0; intresult_XMax,result_XMin,result_YMax,result_YMin; doubleR,Wd,Hg; for(t=1;t<=BlockSign;t++) { Xmax=1;Xmin=1000;Ymax=1;Ymin=1000; for(i=1;i<m_Height-1;i++) for(j=1;j<m_Width-1;j++) { if(nPdeMark[i*m_Width+j]==t) { // tempB[t][l]=nPdeMark[i*m_Width+j]; // l++; if(i>Xmax)Xmax=i; if(i<Xmin)Xmin=i; if(j>Ymax)Ymax=j; if(j<Ymin)Ymin=j; } } Hg=fabs(X

温馨提示

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

评论

0/150

提交评论