2024年2月4日发(作者:北汽威旺面包车)
车牌识别系统的设计
一、
摘要:
随着图形图像技术的发展,车牌识别技术的准确率越来越高,识别速度越来越快。无论哪种车牌识别系统,都是由触发器、图像采集、图像识别模块、辅助光源和通信模块组成。车牌识别系统涉及光学、电器、电子控制、数字图像处理、计算视觉、人工智能等多项技术。触发模块负责在车辆到达适当位置时给出触发信号并控制抓拍。辅助光源提供辅助照明,保证系统在不同光照条件下都能拍摄出高质量的图像。图像预处理程序处理捕获的图像,去除噪声,并调整参数。然后通过车牌定位、字符识别,最后输出识别结果。
二、
设计的目的和意义:
设计目的:
1.让学生巩固理论课所学知识,理论联系实际。
2.锻炼学生的实践能力,激发学生的研究潜力,提高学生的合作精神。
设计意义:
车牌定位系统的目的是正确获取整个图像中的车牌区域,识别车牌号码。通过设计和实现车牌识别系统,可以提高学生分析问题和解决问题的能力,也可以培养他们的科研能力。
三、
设计原则:
自动车牌识别是一种利用车辆的动态视频或静态图像自动识别车牌和车牌颜色的模式识别技术。其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、车牌识别处理器等。其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。有些车牌识别系统还具有通过视频图像判断车辆驶入视野的功能,称为视频车辆检测。一个完整的车牌识别系统应该包括车辆检测、图像采集和车牌识别。当车辆检测部分检测到车辆的到达时,它触发图像获取单元获取当前视频图像。车牌识别单元对图像进行处理,定位车牌的位置,然后分割车牌中的字符进行识别,然后形成车牌输出。
四、
详细的设计步骤:
1.提出总体设计方案:
车牌,颜色识别
为了识别牌照,需要执行以下基本步骤:
A.车牌定位,定位图片中的车牌位置;
B.车牌字符分割,将车牌中的字符分离出来;
C.车牌字符识别,对分割出来的字符进行识别,最终形成车牌。
在车牌识别过程中,车牌颜色的识别是基于不同的算法,可能在上述不同的步骤中实现,通常与车牌识别配合验证。
(1)车牌定位:
在自然环境中,汽车图像背景复杂,光照不均匀。如何准确地确定自然背景中的车牌区域是整个识别过程的关键。首先对采集的视频图像进行大范围相关搜索,找到一些符合汽车牌照特征的区域作为候选区域。然后,对这些候选区域进行进一步的分析和判断。最后选择最佳区域作为车牌区域,从图像中分割出来。
流程图:
导入原始
图像
增强图像效果的图像预处理
边缘抽取 图像的打开和关闭操作
车牌位置
(2)车牌字符分割:
车牌区域定位完成后,将车牌区域分割成单个字符,然后进行识别。字符分割一般采用垂直投影法。由于字符的垂直投影,字符之间或字符之间不可避免地要靠近局部最小值,这个位置要满足车牌的字符书写格式、字符、大小限制等一些条件。垂直投影法对复杂环境下的汽车图像中的字符分割有很好的效果。
计算 车牌水平校正的水平投影。
(3)车牌字符识别:
目前,字符识别方法主要有模板匹配算法和人工神经网络算法。基于模板匹配算法,首先对分割后的字符进行二值化,并将其大小缩放到字符数据库中模板的大小。然后,将它们与所有模板进行匹配,最后选择最佳匹配作为结果。基于人工神经网络的算法有两种:一种是提取待识别字符的特征,然后用获得的特征训练神经网络分配器;另一种方法是将待处理的图像直接输入网络,网络会自动提取特征,直到识别出结果。在实践中,车牌识别系统的识别率与车牌质量和拍摄质量密切相关。车牌质量会受到各种因素的影响,如生锈、污损、掉漆、字体褪色、遮挡车牌、倾斜车牌、光亮反光、多车牌、假车牌等。实际拍摄过程也会受到环境亮度、拍摄亮度、车速等因素的影响。这些因素都不同程度地降低了车牌识别的识别率,这是车牌识别系统的难点和挑战。为了提高识别率,除了不断改进识别算法,还应该尽量克服各种光照条件,使采集到的图像最有利于识别。
剪切的字符
被发送到库
中。
从数据库的图片中减去。
分析差异x最小的图片是什么
人物分析依次显示误差最小的图片名称。
拆下牌照架
分析垂直投影找到每个字符的中心。
按左右宽度裁剪字符。
2.每个模块的实现:
2.1输入待处理的原始图像:清晰;
全部关闭;
%Step1获取图像,将其加载到要处理的彩色图像中,并显示原始图像。
scolor = im read(\' 3 . jpg \');%imread函数读取图像文件。
图2.1原始图像
2.2图像的灰度:
彩色图像包含了大量的颜色信息,不仅在存储上耗费了大量的资源,而且在处理上降低了系统的执行速度。因此,通常将彩色图像转换成灰度图像以加快处理速度。将颜色转换为灰度的过程称为灰度处理。选择标准是经过灰度变换后,像素的动态周长增加,图像的对比度扩大,使图像更清晰、更细腻、更容易识别。
%将彩色图像转换为黑白图像并显示。
SG ray = RGB 2 gray(Scolor);%rgb2gray被转换为灰度图像
图,imshow(Sgray),标题(\'黑白原图\');
图2.2原始黑白图像
2.3打开原图得到背景图:
s=strel(\'disk \',13);%strei函数
Bgray=imopen(Sgray,s);%打开sgray的图像
图,im show(Bgray);标题(“背景图像”);%输出背景图像
图2.3背景图像
2.4从背景图像中减去原始图像以增强图像:
Egray=imsubtract(Sgray,Bgray);%减去两张图。
图,imshow(Egray);标题(\'增强黑白图像\');%输出黑白图像
图2.4黑白图像
2.5获得最佳阈值并对图像进行二值化:
二值图像是指整个图像只有黑白二值。在实际的车牌处理系统中,图像二值化的关键是确定合适的阈值,使字符从背景中分离出来。二进制变换结果图像必须具有良好的形状保持性,不丢失有用的形状信息,不产生额外的空位等等。车牌识别系统要求处理速度快、成本低、信息量大。利用二值图像进行处理可以大大提高处理效率。阈值处理的操作过程是一个阈值由用户指定或由算法生成。如果图像中像素的灰度值小于阈值,则将该像素的灰度值设置为0或255,否则,将该像素的灰度值设置为255或0。
fmax 1 = double(max(max(Egray)));%egray的最大值并输出双精度。
fmin 1 = double(min(min(Egray)));%egray和输出双精度的最小值。
level =(fmax 1-(fmax 1-fmin 1)/3)/255;%获得最佳阈值。
bw22=im2bw(Egray,level);%将图像转换为二进制图像
bw2 = double(bw22);
图,im show(bw2);标题(“图像二值化”);%获取二进制图像。
图2.5二进制图像
2.6边缘检测:
具有不同灰度值的两个相邻区域之间总是存在边缘。边缘是灰度值不连续的结果,是图像分割、纹理特征提取、形状特征提取等图像分析的基础。为了对有意义的边缘点进行分类,与该点相关联的灰度必须比在该点的背景上的变换更有效。我们用阈值法来确定一个值是否有效。因此,如果一个点的二维一阶导数大于指定的阈值,我们将把图像中的次要点定义为边缘点,而按照预定的连接准则连接的一组这样的边缘点将被定义为边缘。在对一阶导数进行边缘检测后,如果得到的一阶导数高于某个阈值,则判定该点为边缘点,这会导致检测到的边缘点过多。通过找到对应于梯度的局部最大值的点,并将其识别为边缘点,并去除非局部最大值,可以检测出精确的边缘。一阶导数的局部极大值对应于二阶导数的过零点,这样通过寻找图像强度二阶导数的过零点就可以找到准确的边缘点。
Grd=edge(bw2,\' canny\')%利用canny算子识别灰度图像中的边界
图,im show(grd);标题(“图像边缘提取”);%输出图像边缘
图2.6图像边缘提取
2.7通过开运算对获得图像进行滤波:
数学非线性滤波可以用来抑制噪声,进行特征提取、边缘检测、图像分割等图像处理问题。腐蚀是一个消除边界点的过程。这样一来,目标变窄,孔洞变大,可以有效地消除孤立的噪声点。扩展是将与目标对象接触的所有背景点合并到对象中的过程。结果是目标被放大,空洞被缩小,可以填充目标对象中的空洞,形成连通域。膨胀前的腐蚀过程称为开运算,具有消除小物体、在细长处分离物体、平滑较大物体边界的作用。腐蚀前的膨胀过程称为闭运算,具有填充物体微小孔洞、连接相邻物体、平滑边界的作用。图像有开有闭,闭的操作可以使图像的轮廓更加平滑。它通常用于消除狭窄的不连续性和细长的间隙,消除小孔,并弥补轮廓中的中断。
bg1=imclose(grd,strel(\'rectangle \',[5,19]);%采取矩形框的封闭运算。
图,im show(bg1);标题(\'图像关闭操作[5,19]\');%输出关闭操作的图像。
bg3=imopen(bg1,strel(\'rectangle \',[5,19]);%打开矩形框的操作
图,im show(bg3);标题(\'图像打开操作[5,19]\');%输出打开操作图像。
bg2=imopen(bg3,strel(\'rectangle \',[19,1]);%打开矩形框的操作
图,im show(bg2);标题(\'图像打开操作[19,1]\');%输出打开操作图像。
图2.7.1关闭操作图像图2.7.2打开操作图像
图2.7.3开放操作图像
2.8提取二值图像的区域,并计算区域特征参数。比较区域特征参数,提取车牌区域;
A.标记图像的每个区域,然后计算每个区域的图像特征参数:区域的中心位置、最小包含矩形、面积。
[L,num] = bwlabel(bg2,8);%标记二进制图像的连接部分。
Feastats = imfeature(L,\' basic \');%计算图像区域的特征尺寸。
Area=[Feastats。area];面积百分比
bounding box =[feats。bounding box];%[x y宽高]车牌边框尺寸
RGB = label2rgb(L,\'春天\',\' k \',\'洗牌\');%徽标图像转换为RGB图像
图,imshow(RGB);标题(“图像的颜色标记”);%输出该帧的彩色图像
图2.8.1彩色图像
b、计算标记区域的最小宽度和高度,根据先验知识,比较谁的长宽比更接近车牌的实际长宽比,提取并显示更接近的长宽比。
计算矩形的宽计算矩形的高x框架宽度和高度的周长
车牌起始栏
车牌起始行
计算车牌的长宽获取车牌二进制流程图2.8.2灰色子图和二进制子图
2.9水平投影的峰谷分析:
对水平投影进行峰谷分析,计算出上边框、车牌字符投影、车牌下边框的峰升点、峰降点、峰宽、谷宽、峰间距离、峰中心位置等参数。
hist col 1 = sum(sb w1);%计算垂直投影
histrow = sum(sb w1 \');%计算水平投影
图,subplot(2,1,1),bar(hist col 1);标题(\'垂直投影(包括边框)\');%输出垂直投影
支线剧情(2,1,2),小节(histrow);标题(\'水平投影(包括边框)\');%输出水平投影
图2.9.1垂直投影和水平投影
图,支线剧情(2,1,1),横条(histrow);标题(\'水平投影(包括边框)\');%输出水平
投影
子剧情(2,1,2),im show(sb w1);Title(\'车牌二进制子图\');%输出二元图
水平投影的峰谷分析;
求水平投影的平均求水平投影的最小值
阈值
计算山谷宽度
计算峰值距离
计算下降点
找到峰值中心位图2.9.2水平投影和二元图程序流程图
2.10计算车牌的旋转角度:
A.车牌倾斜的原因导致投影效果的峰谷不明显,这里需要进行车牌校正。这里采用线性拟合的方法,计算车牌顶部或底部图像值为1的点的拟合直线与水平X轴的夹角。
标记图像大小。
找出字符的最大宽检查上面
从顶部边缘扫描到第一个峰值从底部边缘扫描到最后一个峰的上用1求第一个点。
程序流程图
%(2)直线拟合,计算与x的夹角
fresult = fit(xdata \',ydata \',\' poly 1 \');%poly1 Y = p1*x+p2
p1 = fresult.p1
角度= atan(fresult . P1)* 180/pi;%弧度转换为度数,360/2pi,pi=3.14
%(3)旋转车牌图像
subcol = imrotate(subcol1,angle,\'双线性\',\' crop \');%旋转车牌图像
sbw = imrotate(sbw1,angle,\'双线性\',\' crop \');%旋转图像
图,subplot(2,1,1),im show(subcol);标题(\'车牌灰度子图\');%输出旋转后的车牌的灰色图像标题,以显示车牌的灰色子图像。
支线剧情(2,1,2),imshow(sbw);标题(“”);%旋转车牌后输出灰度图像。
Title([\'车牌旋转角度:\',num2str(角度),\'度数\'],\'颜色\',\' r \');%表示牌照的旋转角度。
图2.10.1旋转后的灰度图像和旋转角度
b、旋转车牌后,重新计算车牌的水平投影,去除车牌的水平边框,得到字符高度:
hist col 1 = sum(sbw);%计算垂直投影
histrow = sum(sbw \');%计算水平投影
图,subplot(2,1,1),bar(hist col 1);标题(\'垂直投影(旋转后)\');
支线剧情(2,1,2),小节(histrow);标题(\'水平投影(旋转后)\');
图2.10.2垂直投影(旋转后)和水平投影(旋转后)
图,支线剧情(2,1,1),横条(histrow);标题(\'水平投影(旋转后)\');
支线剧情(2,1,2),imshow(sbw);Title(\'车牌二进制子图(旋转后)\');
图2.10.3水平投影(旋转后)和车牌二值子图(旋转后)
2.11转到水平(上下)边框获取字符高度:
A.通过以上的水平投影和垂直投影分析计算,得到了车牌的字符高度、字符顶尾线、字符宽度以及每个字符的中心位置,为提取分割字符提供了条件。
max hight = max(mark row 2);
findc = find(mark row 2 = = max hight);
row top = markrow(findc);
row bot = markrow(findc+1)-markrow 1(findc+1);
sbw2=sbw(rowtop:rowbot,);%子图片是(rowbot-rowtop+1)行。
max hight = rowbot-rowtop+1;字符高度百分比(rowbot-rowtop+1)
b .计算车牌垂直投影,去除车牌的垂直边框,得到车牌和字符的平均宽度。
hist col = sum(sb w2);%计算垂直投影
图,subplot(2,1,1),bar(hist col);标题(\'垂直投影(去掉水平边框后)\');%输出车牌的垂直投影图像。
支线剧情(2,1,2),im show(sb w2);%输出垂直投影图像
Title([\'车牌字符高度:\',int2str (maxhighlight)],\'颜色\',\' r \');%输出牌照字符高度
%在垂直投影上执行峰谷分析
平均垂直投影。
求垂直投影的最小阈值
计算字符的上升计算山谷宽度
计算字符距离
找到字符中心位图2.11垂直投影图像和车牌字符高度的程序流程图
c .计算车牌上每个字符中心位置和最大字符宽度maxwidth。
l = 0;
对于k=1:n1
mark col 3(k)= mark col(k+1)-mark col 1(k+1);%字符落点
mark col 4(k)= mark col 3(k)-mark col(k);字符宽度百分比(上升点到下降点)
mark col 5(k)= mark col 3(k)-double(uint 16(mark col 4(k)/2));%字符中心位置
目标
mark col 6 = diff(mark col 5);%字符中心距离(字符中心点到下一个字符中心点)
maxs = max(mark col 6);%求最大值,即第二个字符和第三个字符的中心距。
find max = find(mark col 6 = = maxs);
mark col 6(find max)= 0;
maxwidth = max(mark col 6);%求最大值,也就是最大字符宽度。
d .提取分割后的字符,并将其转换成22行×14列的标准子图。
l = 1;
[m2,N2]= size(subcol);
图;
对于k=findmax-1:findmax+5
cleft = mark col 5(k)-maxwidth/2;
c right = mark col 5(k)+maxwidth/2-2;
如果裂缝< 1
裂隙= 1;
cright = maxwidth
目标
如果right>n2
cright = n2
裂缝= N2-最大宽度;
目标
SegGray=sbw(rowtop:rowbot,cleft:cright);
SegBw1=sbw(rowtop:rowbot,cleft:cright);
SegBw2 = imresize(SegBw1,[22 14]);%转换成32行*16列的标准子图。
支线剧情(2,n1,l),im show(seg gray);
如果l==7
Title([\'车牌字符宽度:\',int2str(maxwidth)],\'颜色\',\' r \');
目标
支线剧情(2,n1,n1+l),im show(segbw 2);
fname = strcat(\' F: MATLAB work Sam image \',int2str(k),\'。jpg’);%保存子图像并选择到样本库中,建立样本库。
imwrite(SegBw2,fname,\' jpg \')
l = l+1;
目标
2.12将计算得到的字符图像与样本库进行匹配,自动识别字符代码:
在车牌识别之前,我们需要用样本训练神经网络,然后用训练好的网络来识别车牌。具体过程如下:用汉字、字母、字母数字和数字四个样本分别训练四个子网络,得到相应的节点数和权值。对定位后的车牌图像进行预处理,逐个提取特征,然后从相应的文件中读取相应的节点号和权值,将车牌字符发送到相应的网络进行识别,并输出识别结果。
建立数据库
从数据库里的图片中减计算误差
找出误差最小的图依次鉴别鉴别
流程图2.12车牌识别
五、
设计结果和分析
原始图像:预处理后:
车牌定位与提取:字符分割与识别:
从上面的结果可以看出,这个车牌识别失败,A被误认为4。识别还有0和8的误差,需要在其他方面进行弥补,最终达到识别效果。
原始图像:预处理:
车牌定位与提取:字符分割与识别:
在车牌识别过程中,数字数据库的建立非常重要。只有数字数据库的准确性才能保证检测数据的正确性。切割出来的数据要和数据库里的数据进行比对,所以数据库里的数据就显得尤为重要。
参考资料:
[1]梅明和文东婵。。IBM-PC汇编语言程序设计(第二版)。清华大学,2001年8月
[2]红色。谈论计算机病毒。大学财经学报,2002.12: 527-530
[3]俞军。强化科学管理机制。光明日报,1999-3-24(4)
[4]佐濂,邓荣标,孔嘉圆。中国科技信息[J] .2005(第23期)9 ~ 12。
宋·蔡健。车牌识别技术的研究[J].工业控制计算机,2004,44 ~ 45。
[6]永强,石祥人。汽车牌照子图像的定位算法[M].微型计算机的应用,1999.60 ~ 65。
[7]王美,王国宏。基于关联和互补色特征的车牌字符分割技术[J].大学学报,2007。第37卷
[8]何兴华、周源源、王继阳等。MATLAB图像处理[M]。人民邮电,2006.96 ~ 100。
龚,春平,。数字图像处理与分析[M]。清华,2006.24 ~ 29。
[10]杨、易铁元等。数字图像处理在车牌识别中的应用。大学学报。2004,65 ~ 68。
[11]邢辉,凌,杜生智.车牌定位和倾斜校正方法的研究[J].系统工程与电子,2004,26 (2): 237
~ 239。
[12]叶琛洲,杰,选。汽车牌照字符识别[J].交通大学学报,2000,5 (34): 672 ~ 675。
[13]吴,黄,,戚森,等.一种基于垂直字符边界特征的车牌定位方法.中国公路运输,2000,(4):
88-90
[14]叶晨舟等.汽车牌照的字符识别[J].交通大学学报,2000年4 ~ 6月。
【15智勇,英剑。车牌识别中的图像提取与分割(LPR) [J].中国信息学报,2000,14 (4): 29 ~
34。
[16余、、萧、。车牌识别中的图像提取与分割算法[J].大学学报,2006。第44卷第3期,407 ~
410页。
[16张玉进。数字图像处理与分析[M]。清华大学. 1993.256 ~ 261。
【17易。图像处理与分析-数学形态学方法与应用[M]。:科学,2000年。
[18袁志伟,吕霄。车辆牌照定位算法的研究[J].工业大学学报,2001,26 (2): 56 ~ 60。
[19魏亮、罗剑锋、贾云德。一种复杂背景下的多车牌图像分割与识别方法[D].2003.
[20]罗希平,田杰等.图像分割方法的实践[J].模式识别与人工智能,1999,12 (3): 300 ~ 312。
更多推荐
车牌,图像,字符,识别
发布评论