车牌识别综合实验报告大作业 2.docx

上传人:b****4 文档编号:4193167 上传时间:2022-11-28 格式:DOCX 页数:11 大小:146.18KB
下载 相关 举报
车牌识别综合实验报告大作业 2.docx_第1页
第1页 / 共11页
车牌识别综合实验报告大作业 2.docx_第2页
第2页 / 共11页
车牌识别综合实验报告大作业 2.docx_第3页
第3页 / 共11页
车牌识别综合实验报告大作业 2.docx_第4页
第4页 / 共11页
车牌识别综合实验报告大作业 2.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

车牌识别综合实验报告大作业 2.docx

《车牌识别综合实验报告大作业 2.docx》由会员分享,可在线阅读,更多相关《车牌识别综合实验报告大作业 2.docx(11页珍藏版)》请在冰豆网上搜索。

车牌识别综合实验报告大作业 2.docx

车牌识别综合实验报告大作业2

计算机视觉课堂大作业

车牌检测识别小功能的实现

 

班级:

姓名:

陈串串

学号:

指导教师:

余航

 

 

一、实验目的

1、了解车牌识别系统的实现,及车牌识别系统的应用;

2、了解并掌握车牌识别系统如何实现。

二、实验内容

1、车牌识别系统的图像预处理、

2、车牌定位、

3、字符分割

4、字符识别

三、实验原理

车辆牌照识别(LPR)系统是一个专用的计算机视觉系统,它能够自动地摄取车辆图像和识别车牌号码,可应用在公路自动收费、停车场管理、失窃车辆侦察、门卫系统、智能交通系统等不同场合。

LPR系统的广泛应用将有助于加快我国交通管理自动化的进程。

1、预处理

摄像时的光照条件,牌照的整洁程度,摄像机的状态(焦距,角度和镜头的光学畸变),以及车速的不稳定等因素都会不同程度的影响图像效果,出现图像模糊,歪斜或缺损,车牌字符边界模糊不清,细节不清,笔画断开,粗细不均等现象,从而影响车牌区域的分割与字符识别的工作,所以识别之前要进行预处理。

预处理的包括:

1)消除模糊——

用逆滤波处理消除匀速运动造成的图像运动模糊

2)图像去噪。

通常得到的汽车图像会有一些污点,椒盐噪声,应用中值滤波

3)图像增强

自然光照度的昼夜变化会引起图像对比度的不足,所以必须图像增强,可以采用灰度拉伸,直方图均衡等

通过以上处理,提高了图像的质量,强化了图像区域。

2、车牌定位

自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。

首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。

•图像的灰度化

•图像灰度拉伸

•对图像进行边缘检测

采用Sobel算子经行边缘检测

 该算子包含两组3*3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。

如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:

  

and

图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。

然后可用以下公式计算梯度方向。

在以上例子中,如果以上的角度

等于零,即代表图像该处拥有纵向边缘,左方较右方暗。

•对其进行二值化

•纹理分析法

行扫描行法是利用了车牌的连续特性。

车牌区域有连续7个字符,而且字符与字符之间的距离在一定范围内。

定义从目标到背景或者从背景到目标为一个跳变。

牌照区域相对于其它非车牌区域跳变多,而且间距在定范围内和跳变次数大于一定次数,并且连续满足上述要求的行要达到一定的数目。

从下到上的顺序扫描,对图像的每一行进行从左向右的扫描,碰到跳变点记录下当前位置,如果某行连续20个跳变点以上,并且前一个跳变点和后一个跳变点的距离在30个像素内,就记录下起始点和终止点位置,如果连续有10行以上这样的跳变点,我们就认为该区域就是车牌预选区域。

3、字符分割:

完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。

字符分割一般采用垂直投影法。

由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件。

利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果。

•车牌区域灰度二值化

•确定字符上下边框和去除铆钉和车牌垂直投影

字符分割难点

由于铆钉和周围其它干扰像素的原因,使得垂直投影中,铆钉会对图像的分割起干扰作用,所以要先去除铆钉和确定字符上下界。

方法:

将图片看成是一个平面。

将图片向水平方向投影,这样有字的地方的投影值就高,没字的地方投影得到的值就低。

这样会得到一根曲线,像一个又一个山头。

下面是我手画示意图:

     然后,用一根扫描线(上图中的S)从下向上扫描。

这个扫描线会与图中曲线存在交点,这些交点会将山头分割成一个又一个区域。

车牌图片一般是7个字符,因此,当扫描线将山头分割成七个区域时停止。

然后根据这七个区域向水平线的投影的坐标就可以将图片中的七个字符分割出来。

•字符大小归一化

外形归一化:

将文字的外边框按比例线性放大或缩小成为规定尺寸的文字图像

简单的采用图像的放大和缩小算法,实现所有字符的同大小,为下一步识别做好准备。

4、字符识别:

字符识别方法目前主要有基于模板匹配算法和基于人工神经网络算法。

我们选用基于模板匹配算法首先将分割后的字符二值化,并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。

用采集到的20多幅汽车图片作为实验样本数据,用纯软件的方法实现了车牌字符的自动识别,达到了较高的识别率。

四、详细设计与实现

 

1、预处理

1)灰度化主要流程图

 

2)图像二值化主要流程图

 

 

2、车牌定位

 

1)车牌粗略定位主要流程图

 

五、实验结果与分析

对十几张图片进行车牌识别,将其中IMAG00291.bmp作为例子,分析其结果。

5.1.1打开图片

5.1.2图像的灰度化

彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。

由彩色转换为灰度的过程叫做灰度化处理。

选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。

5.1.2图像的二值化

5.1.3简易车牌识别

图5.4车牌识别效果图

运行该程序后,会将上一步存储的字符与已存好的模板进行匹配,根据其像素点的相同点数和白点的个数作为依据,其效果并不理想,但由于该字符刚好分割出来作为原模板,所以能很好的识别出来,该识别功能并不完美,但能够针对一小部分车牌图像进行很好的识别。

表5-1

车牌定位

车牌分割

车牌识别

车牌识别2字以内错

测试图片数目

16

15

15

15

正确图片张数

15

15

5

7

正确率

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);

figure

imshow(I4)

%去除图像中面积过小的、可以肯定不是车牌的区域

bw=bwareaopen(I4,500);

%为定位车牌,将白色区域膨胀,腐蚀去无关的小物件

se=strel('disk',15);

bw=imclose(bw,se);

bw=imfill(bw,[11]);

%figure

%imshow(bw)

%查找连通域边界

[B,L]=bwboundaries(bw,4);

figure

imshow(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.1

centroid=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');

end

goal=~goal;

goal(256,256)=0;

figure;

imshow(goal);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1