您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 计算机视觉课堂大作业-车牌检测识别小功能的实现
计算机视觉课堂大作业车牌检测识别小功能的实现班级:1302041姓名:学号:13020410024指导教师:一、实验目的1、了解车牌识别系统的实现,及车牌识别系统的应用;2、了解并掌握车牌识别系统如何实现。二、实验内容1、车牌识别系统的图像预处理、2、车牌定位、3、字符分割4、字符识别三、实验原理车辆牌照识别(LPR)系统是一个专用的计算机视觉系统,它能够自动地摄取车辆图像和识别车牌号码,可应用在公路自动收费、停车场管理、失窃车辆侦察、门卫系统、智能交通系统等不同场合。LPR系统的广泛应用将有助于加快我国交通管理自动化的进程。1、预处理摄像时的光照条件,牌照的整洁程度,摄像机的状态(焦距,角度和镜头的光学畸变),以及车速的不稳定等因素都会不同程度的影响图像效果,出现图像模糊,歪斜或缺损,车牌字符边界模糊不清,细节不清,笔画断开,粗细不均等现象,从而影响车牌区域的分割与字符识别的工作,所以识别之前要进行预处理。预处理的包括:1)消除模糊——用逆滤波处理消除匀速运动造成的图像运动模糊2)图像去噪。通常得到的汽车图像会有一些污点,椒盐噪声,应用中值滤波3)图像增强自然光照度的昼夜变化会引起图像对比度的不足,所以必须图像增强,可以采用灰度拉伸,直方图均衡等通过以上处理,提高了图像的质量,强化了图像区域。2、车牌定位自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。•图像的灰度化•图像灰度拉伸•对图像进行边缘检测采用Sobel算子经行边缘检测该算子包含两组3*3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:AGx*]101202101andA*121000121Gy图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。2y2xGGG然后可用以下公式计算梯度方向。xyGGarctan在以上例子中,如果以上的角度等于零,即代表图像该处拥有纵向边缘,左方较右方暗。•对其进行二值化•纹理分析法行扫描行法是利用了车牌的连续特性。车牌区域有连续7个字符,而且字符与字符之间的距离在一定范围内。定义从目标到背景或者从背景到目标为一个跳变。牌照区域相对于其它非车牌区域跳变多,而且间距在定范围内和跳变次数大于一定次数,并且连续满足上述要求的行要达到一定的数目。从下到上的顺序扫描,对图像的每一行进行从左向右的扫描,碰到跳变点记录下当前位置,如果某行连续20个跳变点以上,并且前一个跳变点和后一个跳变点的距离在30个像素内,就记录下起始点和终止点位置,如果连续有10行以上这样的跳变点,我们就认为该区域就是车牌预选区域。3、字符分割:完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。字符分割一般采用垂直投影法。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件。利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果。•车牌区域灰度二值化•确定字符上下边框和去除铆钉和车牌垂直投影字符分割难点由于铆钉和周围其它干扰像素的原因,使得垂直投影中,铆钉会对图像的分割起干扰作用,所以要先去除铆钉和确定字符上下界。方法:将图片看成是一个平面。将图片向水平方向投影,这样有字的地方的投影值就高,没字的地方投影得到的值就低。这样会得到一根曲线,像一个又一个山头。下面是我手画示意图:然后,用一根扫描线(上图中的S)从下向上扫描。这个扫描线会与图中曲线存在交点,这些交点会将山头分割成一个又一个区域。车牌图片一般是7个字符,因此,当扫描线将山头分割成七个区域时停止。然后根据这七个区域向水平线的投影的坐标就可以将图片中的七个字符分割出来。•字符大小归一化外形归一化:将文字的外边框按比例线性放大或缩小成为规定尺寸的文字图像简单的采用图像的放大和缩小算法,实现所有字符的同大小,为下一步识别做好准备。4、字符识别:字符识别方法目前主要有基于模板匹配算法和基于人工神经网络算法。我们选用基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。用采集到的20多幅汽车图片作为实验样本数据,用纯软件的方法实现了车牌字符的自动识别,达到了较高的识别率。四、详细设计与实现1、预处理1)灰度化主要流程图图像的采集循环扫描并按公式得灰度输出灰度图像车牌图片预处理车牌定位字符匹配字符识别输出结果2)图像二值化主要流程图2、车牌定位1)车牌粗略定位主要流程图边缘检测完后的具有车牌图像对图片从头扫描到底,对符合规律跳变的点存入数组countMatch,也记入行列数至数组mark对数组countMatch进行去噪,除去不符合连续跳变的地方和上半部分面积对数组countMatch进行2*6的粗定位通过处理定位车牌四边,并在图上做出标记分割出车牌区域并显示开始调用graythresh得到二值化阀值调用二值化函数显示二值化图像五、实验结果与分析对十几张图片进行车牌识别,将其中IMAG00291.bmp作为例子,分析其结果。5.1.1打开图片5.1.2图像的灰度化彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。由彩色转换为灰度的过程叫做灰度化处理。选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得图5.1原始图像图5.2灰度化后图像更加清晰、细腻、容易识别。5.1.2图像的二值化5.1.3简易车牌识别图5.3高斯滤波后图像运行该程序后,会将上一步存储的字符与已存好的模板进行匹配,根据其像素点的相同点数和白点的个数作为依据,其效果并不理想,但由于该字符刚好分割出来作为原模板,所以能很好的识别出来,该识别功能并不完美,但能够针对一小部分车牌图像进行很好的识别。表5-1车牌定位车牌分割车牌识别车牌识别2字以内错测试图片数目16151515正确图片张数151557正确率93.8%100%33.3%46.7%分析:该程序的车牌预处理的效果比较好,使得经过sobel边缘检测后,车牌的定位能够准确地定位出来,其正确率经过实验所得,几乎达到94%;但由于是粗略定位,会对车牌字符分割带来一定影响,在字符分割这一块采用了一种自适应分割法,它相对于纯粹的垂直投影法有着明显的优势,尤其是对于粗定位的车牌图片,采用这种分割方法,其效果较为理想,对于矫正过后的图片,其达到了几乎100%的正确率;最后的车牌识别采用的是模板匹配,利用分割出来的字符图片作为模板,再对其匹配,其效果较差,若该字符刚好是模板,则其能识别出来,若不是,则其正确率较低,最终识别率仅为33.3%,两个字内错的也仅为46.7%。在车牌识别的过程中数字库的建立很重要,只有数字库的准确才能保证检测出来的数据正确。切割出来的数据要与数据库的数据作比较,所以数据库的数据尤为重要。将A误识别为4了,在识别中还可能出错的有0和D、5和8、1和I等,因此需要在其他方面做些弥补。附录:MATLAB实现%读取待处理的图像,将其转化为二值图像I=imread('car.jpg');I2=rgb2gray(I);imshow(I2)I4=im2bw(I2,0.2);figureimshow(I4)%去除图像中面积过小的、可以肯定不是车牌的区域bw=bwareaopen(I4,500);%为定位车牌,将白色区域膨胀,腐蚀去无关的小物件se=strel('disk',15);bw=imclose(bw,se);bw=imfill(bw,[11]);图5.4车牌识别效果图%figure%imshow(bw)%查找连通域边界[B,L]=bwboundaries(bw,4);figureimshow(label2rgb(L,@jet,[.5.5.5]))holdon%找出所有连通域中最可能是车牌的那一个fork=1:length(B)boundary=B{k};plot(boundary(:,2),boundary(:,1),'w','LineWidth',2)end%找到每个连通域的质心stats=regionprops(L,'Area','Centroid');%循环历遍每个连通域的边界fork=1:length(B)%获取一条边界上的所有点boundary=B{k};%计算边界周长delta_sq=diff(boundary).^2;perimeter=sum(sqrt(sum(delta_sq,2)));%获取边界所围面积area=stats(k).Area;%计算匹配度metric=27*area/perimeter^2;%要显示的匹配度字串metric_string=sprintf('%2.2f',metric);%标记出匹配度接近1的连通域ifmetric=0.9&&metric=1.1centroid=stats(k).Centroid;plot(centroid(1),centroid(2),'ko');%提取该连通域所对应在二值图像中的矩形区域goalboundary=boundary;s=min(goalboundary,[],1);e=max(goalboundary,[],1);goal=imcrop(I4,[s(2)s(1)e(2)-s(2)e(1)-s(1)]);end%显示匹配度字串text(boundary(1,2)-35,boundary(1,1)+13,...metric_string,'Color','g',...'FontSize',14,'FontWeight','bold');endgoal=~goal;goal(256,256)=0;figure;imshow(goal);
本文标题:计算机视觉课堂大作业-车牌检测识别小功能的实现
链接地址:https://www.777doc.com/doc-5790326 .html