1、课程设计(论文)题 目 基于投影法的车牌定位方法的研究 姓 名 * * * 学 号 * 专业班级 指导教师 分 院 完成日期 2010年月日 摘 要车辆牌照自动识别系统(LPR)是智能交通系统的基础环节和重要组成部分,具有方便、快速和自动识别车辆牌照的特点,广泛应用于大型停车场、收费站、交通违章管理等领域。数字图像处理技术能将输入的车辆图像通过处理和识别,转换为车牌号的字符串形式,为后续的计算机处理奠定基础,在车辆识别中发挥了关键的作用。系统的难点在于首先需要获取高质量的车辆图像,这对于车牌识别的正确率有很大的影响;其次,需要对车牌区域进行相应的处理;最后需要对车牌区域进行正确的定位。结合车辆
2、牌照的结构特点及先验知识,通过对车牌特征和定位技术的深入研究,本文在对车牌图像进行灰度化、二值化等预处理操作的基础上,提出了基于水平投影和垂直投影的一种改进的车牌定位算法,并进行了仿真实验,实验结果表明:该算法对车牌定位具有精度高、速度快、鲁棒性好等优良特点,为本研究的后续工作车牌字符分割和识别打下了良好基础。关键词: 汽车牌照;图像定位;图像提取;灰度投影;边缘检测27目 录摘 要I第1章绪论11.1研究意义11.2研究方法与技术路线2第2章预处理52.1图像复原52.2图像变换62.2.1灰度变换62.2.2二值化72.3边缘检测92.3.1边缘检测原理102.3.2Roberts算子11
3、第3章车牌提取133.1水平垂直投影153.2实验中的车牌提取153.3车牌提取失败的原因分析16参考文献17附 录18第1章 绪论1.1 研究意义车牌识别系统的研究是和城市化进展、汽车普及、交通管理一起发展起来的。特别是计算机技术、数据通信技术、电子自动控制技术的发展使得交通运输管理体系逐步电子化,使人、车、路及环境密切配合、和谐统一,从而建立了全方位实时、准确的综合管理系统,也就是智能交通系统。车牌自动识别系统是智能交通管理系统的核心技术,在道路交通监控和管理中有很重要的作用。车牌自动识别系统应用于高速公路出入口,结合自动校验身份以及自动控制闸门的功能,就能实现不停车收费的功能,车牌自动识
4、别系统通过自动识别车牌来进行车辆的统计(记录下车牌号码、出入时间、违章情况)可以实现观测站或城市、单位卡口系统的功能,车牌自动识别系统可以广泛的应用在机场、港口、政府机关、军队的重要场所和公安部门、交警部门等公共场所。汽车牌照自动识别系统可安装于公路收费站、停车场、十字路口等交通关卡处。它在公共安全、交通管理及有关军事部门有着重要的应用价值。其广泛的用途包括:1.交通监控利用车牌识别系统的摄像设备,可以同雷达测速器或其他的检测器配合使用,以检测违反限速值的车辆。当发现车辆超速时摄像机获取该车的图像,并得到该车的牌照号码。然后通过数据库找出该车信息,给该车超速的警告信号、开出罚单,还可以配合自动
5、扣费系统使用。2.交通流控制指标参量的测量可以直接监视相应路段的交通状况,获得车辆密度、队长、排队规模等交通信息,防范和观察交通事故。为达到交通流控制的目标,一些交通流指标的测量相当重要。该系统能够测量和统计很多交通流指标参数,如:总的服务流率、总行程时间、总的流入量流出量、车型及车流组成、车流高峰时间段、平均车速、车辆密度等,这也为交通系统提供必要的交通流信息。3.高速公路上的事故自动测报由于该系统能够监视道路情况和测量交通流量指标,能及时发现超速、堵车、排队、事故等交通异常现象。4.对养路费交纳、安全检查、运营管理实行不停车检查根据识别出的车牌号码从数据库中调出该车档案材料,可发现没及时交
6、纳养路费的车辆。另外,该系统还可发现无车牌的车辆、黑车,若同车型检测器联用,可迅速发现所挂车牌与车型不符的车辆。5.车辆定位由于能自动识别车牌号码,因而极易发现被盗车辆以及定位出车辆在道路上的行驶位置。这为防范、发现和追踪涉及车辆的犯罪,保护重要车辆(如运钞车)的安全有重大作用,从而对城市治安及交通安全有重要的保障作用。6.海关进出车辆自动识别管理海关是境内与境外日益连接的桥梁和纽带,为国家肩负着安全和防走私稽查的重任,海关闸口车辆日通行量大,容易造成闸口瞬间堵塞,为关口的管理带来了不必要的麻烦。车辆自动识别管理系统对通行车辆进行自动识别,能有效地提高闸口通行效率并对各种过关车辆进行追踪管理。
7、1.2 研究方法与技术路线要对车牌号码进行自动识别,首要的问题是要将车牌区域从复杂背景中分割出来,在本文中,我们主要完成了拥有这部分功能的车牌检测部分的工作,以便进一步识别的技术,并将该技术应用于高速公路自动收费系统。车牌检测的方法可以很多,例如:第一,基于颜色和文理分析的车牌定位;第二,基于小波和形态学车牌定位;第三,基于彩色图像车牌定位;第四,基于图像处理的车牌定位;第五,基于数学形态学和神经网络的车牌识别等等。本文中我们选定了第四种方法基于图像处理的车牌定位。然而直接在原始图像中搜索车牌是很困难的,所以需要进行一系列预处理(包括图像复原和图像变换),生成灰度图像,然后对其边缘二值化处理。
8、对于二值图像,最后通过车牌进行水平、垂直投影,确定并提取出车牌所在位置的区域。选择用这种方法来处理方法简便,处理过程具有非常高的鲁棒性和实时性。预处理,处像处理,图像提取,车牌定位。由于是基于图像的处理对于处理好的图片,可以根据图像回放、检索来检验结果的准确,于及时发现并解决问题。这是一种针对于我国现有车牌种类的特点开发的车牌处理方法。车牌定位就是从复杂的车辆背景图像中准确的提取出车牌区域。如何从车牌序列图像中准确的获取车牌位置是车牌自动识别算法实现的关键。车牌定位作为复杂背景图像区域特征提取的一个应用,有其特有的特点:1. 车牌区域在车辆图像中的位置不确定。由于摄像机的方位、车辆的不同型号、
9、不同的拍摄角度等因素的影响,车牌区域在车辆图像中的具体位置是不确定的。2. 车牌区域只占整个车辆图像的一小部分。在整个车辆图像中,车牌所占有的区域大约只有车辆图像的1/40左右。3. 车牌区域的大小是不一样的,由于摄像机的拍摄位置等因素的影响,导致了车牌区域在车辆图像中的大小不一致。所以,不能以常规的车牌大小去判断车牌图像中车牌区域大小。4. 车牌区域可能发生畸变,由于摄像机在拍摄的过程中与车辆的有角度的影响,以及车牌本身的倾斜、歪曲、破损等因素的影响,导致车牌区域不规则,发生变形。5. 车牌区域的提取,大多是在复杂的背景下提取的,在提取的过程中,必须排除复杂背景对车牌区域的影响。车牌自动识别
10、系统从总体上可以分为几个重要的环节,分别是图像采集、预处理、边缘提取、车牌定位、车牌字符分割、字符识别以及为了实现这些环节的功能。车牌识别系统的构成:图1.1 车牌的识别系统的构成1. 图像采集:通过安装在道路口或者是车辆出入通道的摄像机实时捕捉车辆视频图像,并传输到计算机上以便于实时的处理。2. 图像预处理:对采集到的处理图像进行图像增强、滤波去噪等处理来突出车牌的特征,以便于更好的车牌定位。3通过计算并选择合适的阈值,对灰度图像二值化处理,得到图像的边缘。4. 车牌定位:车牌定位是车牌识别算法流程中的一个关键环节,定位的准确性直接影响到后续环节的实现。实际拍摄条件的影响,如天气、光照复杂背
11、景都会对车牌定位产生影响。克服这些因素的影响,从车辆图像中准确提取出车牌区域是车牌定位的中心任务。实现方法:基于投影法的车牌定位方法主要包括车牌预处理和车牌的水平与垂直投影。而车牌预处理包括三部分:图像灰度变换、图像边缘检测、图像二值化。第2章 预处理在景物成像的过程中,受多种因素的影响,图像质量都会有所下降。这种图像质量下降的过程称为图像的退化。例如,成像目标物体的运动,在摄像后所形成的运动模糊。由于成像系统的光散射现象而导致图像的模糊。又如传感器特性的非线性,光学系统的像差,以致在成像后与原来景物发生了不一致的现象,称之为畸变。再加上多种环境因素,在成像后造成噪声干扰。在LPR系统中,由于
12、季节的更替、自然光照度的昼夜变化、车辆自身的运动、采集图像的设备本身的因素等,都会引起牌照图像的退化,干扰了有关车牌的信息提取。所以为了改善退化了的牌照图像质量,必须对图像进行预处理。通常有两类方法:图像增强和图像复原。图像增强技术是不考虑图像退化的原因,只是将图像中感兴趣的特征有选择地突出,而衰减其不需要的特征,改善后的图像不一定要去逼近原始图像。图像复原技术则与增强技术不同。它需要了解图像退化的原因,需要根据图像退化过程的某些先验知识,建立模型,再借助该模型,按照某种处理方法,恢复或重建原来的图像。但在LPR系统中并不需要将图像恢复原样,只需突出其中的某些特征,以便后续处理,另外我们对牌照
13、图像的退化过程也了解不全,无法建立较准确的模型。综上我们采用了以下图像增强技术。预处理包括:1.图像复原2.图像变换3.边缘检测4.二值化。预处理中最重要的是第二步:图像变换。在这一步中,本文设计了一个处理函数,设计这个函数的目的就是为了突出车牌的最主要特征,以便更好地提取车牌。2.1 图像复原由于车牌位于汽车的下部,而且从实际应用中可以发现车牌一般位于整幅图像的下半部分。为了提高系统运行速度,减少背景的干扰,提高识别率,本文将图像的处理部分限定在某个范围。在本文中,均以450*250的图像为例:水平处理范围为0450,既所有水平范围;垂直范围为30120(从图像下端起)。而且选择从下往上、从
14、左到右的扫描方法,有效地避免了车上其它部位的影响。如图2.1为处理前图象。图2.1 原图像在本文的算法中,由于车牌提取算法对原始图像的要求不严格,所以图像复原这部分工作主要是放在图像分割的前面进行,只是对车牌这一小部分图像进行复原,这样就大大地节省了整个系统的运行时间。2.2 图像变换2.2.1 灰度变换在计算机图形学与图像处理中,数字图像的灰度是进行图像识别与处理的基础。由于受到运算速度,内存大小等多方面的限制一般都采用基于灰度图像的识别技术。我们需要先读取数字图像的灰度,然后对其进行下一步的分析与处理。数字图像在计算机上以位图(bitmap)的形式存在,位图是一个矩形点阵,其中每点称为像素
15、(pixel),像素是数字图像中的基本单位。一幅m n大小的图像,是由m n个明暗度不等的像素组成的。数字图像中各个像素所具有的明暗程度由灰度值(gray level)所标识。一般将白色的灰度值定义为255,黑色灰度值定义为0,而由黑到白之间的明暗度均匀地划分为256个等级。对于黑白图像,每个像素用一个字节数据来表示,而在彩色图像中,每个像素需用三个字节数据来表述。彩色图像可以分解成红(R)、绿(G)、蓝(B)三个单色图像,任何一种颜色都可以由这三种颜色混合构成。在图像处理中,彩色图像的处理通常是通过对其三个单色图像分别处理而得到的。为了简化处理我们先设计一个函数将彩色位图转换成灰度图像彩色汽
16、车图像处理可得到图2.2。算法体现如下:BufB=fgetc(ImageDataFile);/得到每个像素的B值BufG=fgetc(ImageDataFile);/得到每个像素的G值BufR=fgetc(ImageDataFile);/得到每个像素的R值BufY Index=(unsigned char)(0.299*BufR+0.587*BufG+0.114* BufB);/得到灰度分量图2.2 灰度图像2.2.2 二值化由于考虑到算法的复杂性,处理时间等因素,必须把真彩图像转化为二值图像。因此必须对图像进行二值处理,这种处理过程叫做图像的二值化。一幅数字化的灰度图像包括目标物、背景和噪声
17、。从数字灰度图像中提取出目标物,最常用的方法是设定阀值,用此阀值将灰度图像的数据分成两部分,即大于阀值的象素群和小于阀值的象素群。二值化又称灰度分割(Threshold),将一般灰度图分割成只有两种灰度值的图像,即二值图像(Binary Image)。亦即设定一个灰度值,凡是图像本身灰度大于它的便令其为亮点,而灰度低于设定值的,便令其为暗点,如此可得一个二值图像。一般来说,我们把二值图像中的暗(黑)点的灰度值设为0,目标;亮(白)点的灰度值设为1,背景。而在对二值图进行处理时,习惯上认为目标的灰度值为1,背景的灰度值为0,这是对原图各点的灰度求反的结果。在一个灰度图中,设为图像在点处的灰度值,
18、预将图像分割成二个群体(目标和背景),则选定适当的二值化阀值t,令:f(x,y)t 则f(x,y)设为1;f(x,y)BitCount != 24)AfxMessageBox(本系统只处理24bit图片!);return;POSITION Pos;CMultiDocTemplate* pDocTemplate;CChildFrame * pFrame;CHistDoc * pHistDoc;Pos = AfxGetApp()-m_pDocManager-GetFirstDocTemplatePosition();pDocTemplate = (CMultiDocTemplate*)AfxGet
19、App()-m_pDocManager-GetNextDocTemplate(Pos);pHistDoc = (CHistDoc *)pDocTemplate-CreateNewDocument();pFrame = (CChildFrame *)pDocTemplate-CreateNewFrame(pHistDoc, NULL);pHistDoc-SetDocument(pDoc);Ezh(pHistDoc);pDocTemplate-InitialUpdateFrame(pFrame,pHistDoc,TRUE);void CHistView:Ezh(CHistDoc* pHistDoc
20、)int i, j, nWidth, yzh;nWidth = pHistDoc-nWidth;yuzhi YUZHI;YUZHI.DoModal();yzh=YUZHI.m_yuzhi;for (i = 0; i 30 ; i +)for(j = 0; j BmpWidth ; j +)pHistDoc-pImagei * nWidth+ j*3 = 0;pHistDoc-pImagei * nWidth+ j*3+1 = 0;pHistDoc-pImagei * nWidth+ j*3+2 = 0;for (i = 30; i BmpHeight-130 ; i +)for(j = 0;
21、j BmpWidth ; j +)if(pHistDoc-pImagei * nWidth+ j*3yzh)pHistDoc-pImagei * nWidth+ j*3 = 255;else pHistDoc-pImagei * nWidth+ j*3 = 0;pHistDoc-pImagei * nWidth+ j*3+1 = pHistDoc-pImagei * nWidth+ j*3;pHistDoc-pImagei * nWidth+ j*3+2 = pHistDoc-pImagei * nWidth+ j*3;for (i = pHistDoc-BmpHeight-130; i Bm
22、pHeight ; i +)for(j = 0; j BmpWidth ; j +)pHistDoc-pImagei * nWidth+ j*3 = 0;pHistDoc-pImagei * nWidth+ j*3+1 = 0;pHistDoc-pImagei * nWidth+ j*3+2 = 0;void CHistView:OnHuidu() / TODO: Add your command handler code hereCHistDoc * pDoc = GetDocument();ASSERT_VALID(pDoc);if (pDoc-BitCount != 24)AfxMess
23、ageBox(本系统只处理24bit图片!);return;POSITION Pos;CMultiDocTemplate* pDocTemplate;CChildFrame * pFrame;CHistDoc * pHistDoc;Pos = AfxGetApp()-m_pDocManager-GetFirstDocTemplatePosition();pDocTemplate = (CMultiDocTemplate*)AfxGetApp()-m_pDocManager-GetNextDocTemplate(Pos);pHistDoc = (CHistDoc *)pDocTemplate-C
24、reateNewDocument();pFrame = (CChildFrame *)pDocTemplate-CreateNewFrame(pHistDoc, NULL);pHistDoc-SetDocument(pDoc);Huidu(pHistDoc);pDocTemplate-InitialUpdateFrame(pFrame,pHistDoc,TRUE);void CHistView:Huidu(CHistDoc* pHistDoc)int * Temp;int i, j;int nWidth;long nTemp;Temp=(int*)LocalAlloc(LMEM_FIXED,p
25、HistDoc-BmpHeight* pHistDoc-BmpWidth*4);nWidth = pHistDoc-nWidth;for (i = 0; i BmpHeight ; i +)for(j = 0; j BmpWidth ; j +)nTemp = (int)(0.114*(int)pHistDoc-pImagei * nWidth + j*3 +0.587*(int)pHistDoc-pImagei * nWidth+ j*3+1 +0.299*(int)pHistDoc-pImagei * nWidth+ j*3+2 );Tempi * pHistDoc-BmpWidth +
26、j = nTemp;for (i = 0; i BmpHeight ; i +)for(j = 0; j BmpWidth ; j +)pHistDoc-pImagei * nWidth+ j*3 = (BYTE)Tempi * pHistDoc-BmpWidth + j;pHistDoc-pImagei * nWidth+ j*3+1 = (BYTE)Tempi * pHistDoc-BmpWidth + j;pHistDoc-pImagei * nWidth+ j*3+2 = (BYTE)Tempi * pHistDoc-BmpWidth + j;LocalFree(Temp);void
27、CHistView:OnTouying() / TODO: Add your command handler code hereCHistDoc* pDoc=GetDocument();ASSERT_VALID(pDoc);TOUYING TY;TY.BitCount=pDoc-BitCount;TY.pImage=pDoc-pImage;TY.BmpHeight=pDoc-BmpHeight;TY.BmpWidth=pDoc-BmpWidth;TY.nWidth=pDoc-nWidth;TY.DoModal();void CHistView:Onchepai() / TODO: Add yo
28、ur command handler code hereCHistDoc * pDoc = GetDocument();ASSERT_VALID(pDoc);if (pDoc-BitCount != 24)AfxMessageBox(本系统只处理24bit图片!);return;POSITION Pos;CMultiDocTemplate* pDocTemplate;CChildFrame * pFrame;CHistDoc * pHistDoc;Pos = AfxGetApp()-m_pDocManager-GetFirstDocTemplatePosition();pDocTemplate=(CMultiDocTemplate*)AfxGetApp()-m_pDocManager-GetNextDocTemplate(Pos);pHistDoc = (CHistDoc *)pDocTemplate-CreateNewDocument