1、不管是教职工人员开车来上班还是学生开车来上课,又或则是进出高校的其他社会车辆对校园这个类小区型的区域已经形成了比较大的车辆管理需求。就以华南农业大学作为例子,进出华农的车辆每天都以数百辆记录,由于学校内部出入口众多,现阶段采用的是设立专门的监管人员对进出车辆进行简单的记录。这种简单的记录对需要对学校进行长期车辆监管的需求已经完全不适应。采用人工监管的方式,不仅对进出车辆通过关卡时间大大增加,还会增加车辆记录的错误风险,从而对学校内部的安检产生影响。因此建立一套既能快速高效识别车辆牌号、将车辆数据与已知数据库相匹配,对车辆信息长期进行管理的车辆管理系统就显得尤为重要了。1.2 设计目标设计目标是
2、建立一个web版本的基于图像识别的车辆管理系统,初步计划采用J2EE开发这个系统,依据图像识别的方法建立一个系统网站,通过网络与网站系统数据库进行交互,并且将各个接口采集回来的图像数据进行分析处理,从而实时的将这些分析处理后的数据反馈到网站上。图1 校园监控效果图初步规划出网站的具体模块,包括进出校园车辆识别、车辆数据库、实时车辆分析。其中车牌的识别部分为重点内容是本文主要研究的模块。建立车辆数据库所需要的车辆信息,初步设计数据库。对网站系统的图像识别模块进行重点研究,能够通过调用jar包实现对车辆图像的车牌识别。2系统开发环境2.1 系统配置 电脑:X86 兼容 台式电脑 操作系统:Wind
3、ows XP 专业版 ( 32位 / SP3 / DirectX 9.0c ) 处理器:英特尔 Pentium(奔腾) 双核 E5300 2.60GHz 主板:捷波 蓝光-P43/XBLUE-P43D AM03.2 07-27-2009( 英特尔 4 Series Chipset ) 内存: 2 GB ( 金士顿 DDR2 800MHz ) 2.2 图像识别技术简介人的图像识别能力是很强的。图像距离的改变或图像在感觉器官上作用位置的改变,都会造成图像在视网膜上的大小和形状的改变。即使在这种情况下,人们仍然可以认出他们过去知觉过的图像。甚至图像识别可以不受感觉通道的限制。例如,人可以用眼看字,当
4、别人在他背上写字时,他也可认出这个字来。 图像识别技术可能是以图像的主要特征为基础的。每个图像都有它的特征,如字母A有个尖,P有个圈、而Y的中心有个锐角等。对图像识别时眼动的研究表明,视线总是集中在图像的主要特征上,也就是集中在图像轮廓曲度最大或轮廓方向突然改变的地方,这些地方的信息量最大。而且眼睛的扫描路线也总是依次从一个特征转到另一个特征上。由此可见,在图像识别过程中,知觉机制必须排除输入的多余信息,抽出关键的信息。同时,在大脑里必定有一个负责整合信息的机制,它能把分阶段获得的信息整理成一个完整的知觉映象。在人类图像识别系统中,对复杂图像的识别往往要通过不同层次的信息加工才能实现。对于熟悉
5、的图形,由于掌握了它的主要特征,就会把它当作一个单元来识别,而不再注意它的细节了。这种由孤立的单元材料组成的整体单位叫做组块,每一个组块是同时被感知的。在文字材料的识别中,人们不仅可以把一个汉字的笔划或偏旁等单元组成一个组块,而且能把经常在一起出现的字或词组成组块单位来加以识别。2.3 车牌识别技术简介车牌识别系统一般由图像采集部分、中央处理器、识别系统、相关数据库等几个部分组成。当有车辆通过预定区域时,一般通过埋在该区域的地感线圈触发图像采集系统,通过CCD摄像机拍摄车辆图像,经过处理器分系统,输出车牌号码。为了提高系统对天气、环境、光线等的适应性,摄像机一般采用自动对焦、自动光圈调整的一体
6、化摄像机。车牌自动识别系统往往可以根据工作顺序分为车牌图像获取、车牌区域定位、字符分割和字符识别等几个部分。 图2 车牌识别设计流程车牌识别系统中最重要的部分是车牌区域定位分割技术和车牌字符识别技术。在该系统中,完成车牌定位和字符分割后,就要对分割出的字符进行准确确认,最终反馈出一个汉字、字母、数字组合的号码序列。完整的系统包括连接相应的数据库,并实时进行数据的更新、存储、查询、修改等功能的完整的工程体系。3 总体设计在详细设计之前先进行总体设计的必要性:可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本
7、开发出较高质量的软件系统。整个车辆管理系统的核心部分在于三个模块的组合使用。图3 网站模块总体划分其中本文主要探究的是车辆识别模块中的对图像进行识别分析模块,即单独编写了一个java应用程序实现对拍摄的车辆图像进行车牌识别。对于图像识别模块主要采用以下几个步骤对图像进行识别:灰度化、灰度直方图、图像均衡化、边缘化、找车牌、二值化。4 详细设计4.1系统功能模块设计进出校园车辆识别模块模块能够调用校园各个视频接口,能够实时的查看各个校园出入口的进出车辆状况,并且能够根据图像识别技术快速的对进出学校的车辆进行拍摄将图片存入系统的车辆信息数据据库。对一些车辆车牌被遮住、污染等状况发出警报。其中车辆识
8、别模块又分为:读取车辆图片、车牌识别、以及车牌与车牌数据库比对。车辆数据库模块车辆数据库主要存储的是进出校园车辆的所有具体信息,包括了车主的信息,进出时刻车牌的照片,通过图像识别所得到的车牌号码,车辆所属单位,车辆进出校园的每个具体时刻。通过车辆数据库的具体数据信息可以查知图像识别系统的实际车辆照片从而对一些车辆拍照识别不是很确定或则车辆拍照被污染的车辆进行照片人工比对。车辆数据库模块分为:按日期查找模块、按车牌号码查找模块、以及车辆信息查询。实时车辆分析模块该模块能够实时的监控校内车辆的状况。通过调用车辆数据库的信息,能够查知最近某个时间段进出校园比较频繁的车辆牌照号码,还能识别出最近都没有
9、出现过的陌生牌号。实时车辆分析模块,即能实时的将校园内各个视频接口拍摄的图片进行图像识别比对,并存入车辆数据库。 图4 系统功能模块图4.2 图像识别功能设计以及实现4.2.1 灰度化 灰度图像是一种具有从黑到白256级灰度色域或等级的单色图像。该图像中的每个像素用8位数据表示,因此像素点值介于黑白间的256种灰度中的一种。该图像只有灰度等级,而没有颜色的变化。灰度图是指只含亮度信息,不含彩色信息的图像,就像我们平时看到的亮度由暗到明的黑白照片一样,亮度变化是连续的。因此,要表示灰度图,就需要把亮度进行量化,通常划分为0255共256个级别,0最暗(全黑),255最亮(全白)。任何颜色都有红、
10、绿、蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:1.浮点算法:Gray=R*0.3+G*0.59+B*0.11 2.整数方法:Gray=(R*30+G*59+B*11)/100 3.移位方法:Gray =(R*28+G*151+B*77)>&8;4.平均值法:Gray=(R+G+B)/3;5.仅取绿色:Gray=G;通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。本次功能实现主要采用
11、第一种方法对图像进行灰度化。实验代码:public void toGrayMethd() for (int i = 0; i width; i+) for (int j = 0; j height; j+) int grayValue = (int) (pixelsij1 * 0.30 + pixelsij2 * 0.59 + pixelsij3 * 0.11 + 0.5); pixelsij1 = grayValue; pixelsij2 = grayValue; pixelsij3 = grayValue; histogramArraygrayValue+; currentImage.se
12、tRGB(i, j, getGRB(pixelsij0, pixelsij1, pixelsij2, pixelsij3); 实验原图及其灰度化的图:图5 原24位彩色的图像图6 灰度化后的图像4.2.2 灰度直方图 灰度直方图(histogram)是灰度级的函数,它表示图象中具有每种灰度级的象素的个数,反映图象中每种灰度出现的频率。如下图所示,灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频率,是图象的最基本的统计特征。从概率的观点来理解,灰度出现的频率可看作其出现的概率,这样直方图就对应于概率密度函数pdf(probability density function),而概率分布函数就是
13、直方图的累积和,即概率密度函数的积分。在具体实现时,本次设计程序采用了一个长度为256的数组来记录各个灰度级的统计值,同时对其做了归一化操作。图7 灰度直方图实现代码为:4.2.3 图像均衡化 图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。 直方图均衡化处理的“中心思想”是把原始图像
14、的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像元值,是一定灰度范围内的像元数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。缺点:1)变换后图像的灰度级减少,某些细节消失;2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。图8 均衡化后的图象与直方图实现代码: public void equilibrationMethd() int totalPixels = width * height; double densityArray = new double256; double
15、 distributionArray = new double256; 256; densityArrayi = histogramArrayi * 1.0 / totalPixels; distributionArrayi = 0;= i; distributionArrayi += densityArrayj; distributionArrayi = distributionArrayi * 255; histogramArrayi = 0; int grayValue = (int) (distributionArraypixelsij2 + 0.5);4.2.4 边缘化对一幅图像进行
16、边缘化,就是找出该图像中的象素点,该点的灰度值和其附近的点的灰度值相差较大。本实验采用了拉普拉斯算子,是一种微分算子,是输入图像为f(i,j),算子输出图像为g(i,j),拉普拉斯4算子邻域算子图下: 表1 拉普拉斯算子-14图9 边缘化后的图像public BufferedImage borderMethd() BufferedImage outImage = new BufferedImage(currentImage .getWidth(), currentImage.getHeight(), currentImage .getType(); float elements = 0.0f,
17、 -1.0f, 0.0f, -1.0f, 4.f, -1.0f, 0.0f, -1.0f, 0.0f ; Kernel kernel = new Kernel(3, 3, elements); ConvolveOp cop = new ConvolveOp(kernel, ConvolveOp.EDGE_ZERO_FILL, null); cop.filter(currentImage, outImage); currentImage = outImage; int pixel = currentImage.getRGB(i, j); pixelsij0 = getAlpha(pixel);
18、pixelsij1 = getRed(pixel); pixelsij2 = getGreen(pixel); pixelsij3 = getBlue(pixel); histogramArraypixelsij1+; return outImage;4.2.5 找车牌本次程序实现中找车牌有两种方法,第一种是通过找顶点来确定矩形,第二种采用矩形框模式匹配。首先找四个点,左上角的点请往x轴正方向走一段距离的灰度值总和满足一定的灰度总和最低值,往Y轴向下走一段距离的灰度值总和满足一定的灰度总和最低值。用相似的方法可以找到右上角的点、左下角的点,和右下角的点。然后通过这四个点来确定矩形。本次程序实现
19、中X轴的距离取70,Y轴的距离取20,也就是说一条由点出发,拿左上角的点为例,往X轴出发,如果有条直线,其长度大于70,灰度值总和大于某一特定值;且往X轴出发,如果有条直线,其长度大于20,灰度值总和大于某一特定值则这个点满足左上角点的要求,列入了fixlefttop数组中。同理可以找到其余三个点,分别保存在fixrighttop,fixleftbellow ,fixrightbellow中。其中在查找过程中设了一个灰度过高象素过滤值,以防治由于灰度值不均衡,某些点灰度过大影响灰度总和最低值的过滤作用。为了减少搜索的次数,本实验采取了直线的两端同时搜索的办法来找符合要求的点。求得满足要求的四个
20、点以后,在对四个数组进行矩形的匹配。本实验的匹配方法如下说明。以左上角和右下角的两个数组进行循环搜索。比如满足要求左上角的点为A,满足要求的右下角的点为B,以这两个点为矩形左上角点和右下角点,其可以确定唯一性。在用两个过滤条件对所有可能的矩形进行过滤。可以求得车牌的长,宽,长宽比。车牌的长度和宽度有一定的限制,而且都大于0,且长宽比通常都在2.5到3.5之间。以此为过滤条件1。过滤条件2是在由左上角点和右下角的点可以求出右上角和左下角的点的坐标,看看是否存在于右上角和左下角这两个数组中。找到满足以上要求的即退出循环。采用方法一由于图片效果的问题和最小条件值的原因可能找不到车牌,然后在进行第二种
21、方法的搜索。设定一个矩形框,矩形框的大小是固定的。然后遍历图像中的点,找到矩形宽内灰度值总和最大的点。即找到车牌。图10 矩形框法原理图图11 找到的车牌 public BufferedImage imagLocationMethd() long xwalk = 0; long ywalk_left = 0; long ywalk_right = 0; int acclefttop = 0; int accrighttop = 0; int accleftbellow = 0; int accrightbellow = 0; int fixlefttop = new int2000; int
22、fixrighttop = new int2000; int fixleftbellow = new int2000; int fixrightbellow = new int2000; for(int i=20;ithis.height-25;i+) for(int j=1;jthis.width-70;j+) for(int k=0;k70;k+) xwalk+=this.pixelsj+ki2; for(int m=0;m3000&ywalk_left1300) if(acclefttop+2 if(accrighttop+2 fixrighttopaccrighttop=i*width+j+70; accrighttop+; xwalk=0; ywalk_left=0; ywalk_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1