《01车牌定位及车牌字符提取程序设计与实现.pdf》由会员分享,可在线阅读,更多相关《01车牌定位及车牌字符提取程序设计与实现.pdf(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 摘要 随着公路逐渐普及,我国的公路交通事业发展迅速,所以人工管理方式已经不能满足实际 的需要,微电子、通信和计算机技术在交通领域的应用极大地提高了交通管理效率。本次课程 设计的主要内容是运用 MATLAB软件进行车牌定位及车牌字符提取的程序设计与实现,需要 用到MATLAB编程和数字图像处理相关知识。 汽车牌照自动识别系统是制约道路交通智能化的 重要因素 ,包括车牌定位、字符分割和字符识别3个主要部分。本设计对这3个方面的技术方法 进行了研究,并在MATLANB下给出了程序设计和实现。 关键字:MATLAB;图像处理;车牌定位;字符提取;车牌识别 目录 1设计原理与方法 .1 1.1设计流程
2、 .1 1.2设计方案 .1 2图像预处理 .2 2.1载入车牌图像 .2 2.2将彩图转换为灰度图 .3 2.3用 Prewitt算子进行边缘检测 .4 2.4图像实施腐蚀操作 .5 2.5平滑图像 .6 2.6删除二值图像的小对象 .7 3车牌定位 .9 3.1车牌区域的边界值计算 .9 3.2车牌定位的程序 .10 4字符分割 .12 4.1字符切割前的图像去噪处理 .12 4.2字符切割前的图像膨胀和腐蚀处理 .13 4.3字符分割 .14 5基于模板匹配的车牌识别 .21 5.1字符识别方法选择 .21 5.2建立模板 .22 5.3字符识别 .22 6结果分析 .25 7小结与体会
3、 .28 参考文献 .29 1 设计原理与方法 1.1 设计流程 由于车辆牌照是机动车唯一的管理标识符号,在交通管理中具有不可替代的作用,因此车 辆牌照识别系统应具有很高的识别正确率,对环境光照条件、拍摄位置和车辆行驶速度等因素 的影响应有较大的容阈,并且要求满足实时性要求。如图1.1是车牌识别系统原理图。 图1.1 车牌识别系统原理图 该系统是计算机图像处理与字符识别技术在智能化交通管理系统中的应用,它主要由图像 的采集和预处理、牌照区域的定位和提取、牌照字符的分割和识别等几个部分组成。 1.2 设计方案 车辆牌照识别系统主要是由车牌定位和字符识别两部分组成,其中车牌定位又可以分为图 像预处
4、理及边缘提取模块和牌照的定位及分割模块;字符识别可以分为字符分割与特征提取和 单个字符识别两个模块。 为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度和清 晰可辩的牌照图象,因此需要对原始图象进行识别前的预处理。 牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原 始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来, 供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。 车牌识别的最终目的就是对车牌上的文字进行识别,主要应用的为模板匹配方法。 2 图像预处理 在车牌图像信号的采集、输
5、入过程中由于受到自然环境的影响,总会使图像的质量下降。 给后面车牌图像的定位、字符分割和识别工作带来困难。因此需要对车牌初始图像进行必要的 预处理,提高图像质量并突出我们所需要的信息,从而有利于进行各种后续的处理。 图像预处理可以看作是对初始采集图像的增强。图像增强的目的就是采用一系列技术,改 善图像的效果或将图像转换成为一种更适合人或者计算机进行分析处理的形式。主要是指按需 要对图像进行适当的变换以突出某些有用的信息,去除或削弱无用的信息,如改变图像的对比 度、去除噪声或强调边缘等处理。 我国车牌颜色有蓝底白字、黄底黑字、黑底白字等,其中蓝底白字的车牌使用最为广泛, 本次实验均采用蓝底白字的
6、车牌。 2.1 载入车牌图像 第一步是要读取车牌图像, 可以使用 uigetfile函数来读取图像。 选取一张图片后, uigetfile 函数可以将图像的文件名返回至 filename,文件的路径名返回至 pathname,再定义 一个全局变量,将文件名和文件路径赋给全局变量,就可以通过读取这个全局变量来读取图像 的数据。 filename,pathname =uigetfile(*.jpg,JPEG文件 (*.jpg); if(filename = 0), return, end globalFILENAME %定义全局变量 FILENAME =pathname filename; I=i
7、mread(FILENAME); figure(1),imshow(I);title(原图像 ) 将车牌的原图显示出来结果如图 2.1所示。 图2.1 车牌原图 2.2 将彩图转换为灰度图 车牌的原图都是彩色图像,彩色图像包含着大量的颜色信息,它的每个像素都具有三个不 同的颜色分量 R、G、B,所以其需要占用的存储空间很大,而且在对其进行处理时也会浪费 较多的系统资源,会降低系统的执行速度。而对于灰度图像,只需对亮度信息进行处理即可, 其计算量是彩色图像的三分之一。因而,我们经常要对图像进行灰度化,将彩色图像转变为占 用存储空间相对较小的灰度图像,可以使用 matlab中的 rgb2gray函
8、数进行灰度图的转换。 Rgb2gray函数对于图象灰度值的计算是利用公式: G=0.110B+0.588G+0.302R (2.1) 程序代码如下: I1=rgb2gray(I);%将彩图转换为灰度图 figure(2),imshow(I1);title(灰度图像 );绘制灰度图的结果如图 2.2所示。 图2.2 灰度图像 2.3 用Prewitt算子进行边缘检测 在 Matlab中利用函数 edge()实现边缘检测,具体的用法是: Car_Image_Bin=edge(Car_Image_Gray,robert,0.14)在 edge()函数中有 Sobel算子, Prewitt 算子, R
9、oberts算子, Log算子, Canny算子及 Robert算子。此处边缘的提取将 Roberts算子和 Prewitt算子的检测结果进行对比,发现 Prewitt 算子的检测结果更好,于是使用 Prewitt算子。两者的对比结果如图 2.3所示。 图 2.3 Roberts算子和 Prewitt算子对比 使用 Prewitt算子进行检测结果如图 2.4所示。 图2.4 prewitt算子边缘检测图像 代码如下: I2=edge(I1,Prewitt,0.14);%选择阈值 0.14,用 prewitt算子进行边缘检测 figure(3),imshow(I2);title(prewitt算
10、子边缘检测图像 ); 从边缘效果图可以看出,经过处理以后车牌的轮廓已经非常明显了,车牌区域及汽车标 志的边缘呈现白色条纹,基本上达到了边缘检测的效果。但是,在车牌附近的其他区域也由 于各种干扰的影响,也存在一些白色区域。所以要对图像做进一步的处理,用灰度图腐蚀来 消除多余的边界点。 2.4 图像实施腐蚀操作 所谓腐蚀即一种消除边界点,使边界向内部收缩的过程。利用它可以消除小而且无意义 的物体。 Matlab中使用 imerode()函数,使用方法如下: Car_Image_Erode=imerode(Car_Image_Bin, Se); 其中结构元素 Se又被形象成为刷子,用于测试输入图像,
11、一般比待处理图像小很多。结 构元素的大小形状任意,一般是二维的。二维结构元素为数值 0和 1组成的矩阵,结构元素 中数值为 1的点决定结构元素的领域像素在进行腐蚀操作时是否需要参加运算。结构元素太 大,会造成腐蚀过度,造成信息丢失,太小起不了预期的效果,这里使用 31矩阵的线性结 构元素,即 Se = 1; 1; 1,程序代码如下: se=1;1;1; I3=imerode(I2,se);%对图像实施腐蚀操作,即膨胀的反操作 figure(4),imshow(I3);title(腐蚀后图像 ); 腐蚀后结果如图 2.5所示。 图 2.5腐蚀结果图 从腐蚀的结果分析,腐蚀的目的是消除小而无意义的
12、物体,对比边缘效果检测图与腐蚀效 果图可以看出,在边缘检测图中还有的小的无意义的图像已经被完全消除了,留下来的仅仅是 车牌区域以及车的标志。已经得到了车牌图像的轮廓线了,只要再经过适当的处理即可把车牌 提出出来。 2.5 平滑图像 得到车牌区域的图像轮廓线后,由于图像存在数字化误差和噪声,因此必须对图像进行平 滑处理, Matlab有一个图像平滑处理函数 imclose(),它能使轮廓线更光滑,与开运算相反, 闭运算融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。 Car_Image_Perform=imclose(Car_Image_Erode, Se); 结构单元中 Se一个小于对象
13、闭合图形,只要两个封闭域的距离小于 Se,就将这两个连接 成一个连通域, Se生成方式采用: Se=strel(rectangle,25,25); 即 Se是一个一个 25 25的矩形, 使用矩形是因为车牌是一个矩形,由于车牌图像经过腐蚀以后只剩下车牌区域以及车的标志, 所以提取的图像最接近预期效果。程序代码如下: se=strel(rectangle,25,25);%构造结构元素,以正方形构造一个 se I4=imclose(I3,se);%图像聚类、填充图像 figure(5),imshow(I4);title(平滑图像 ); 图像平滑后效果如图 2.6所示。 图2.6 图像平滑 从平滑后
14、的效果图分析,消除了图像的数字化误差和噪声的影响。 2.6 删除二值图像的小对象 图像平滑处理后可能会有多个闭合区域, 对于不是车牌区域的必须予以删除, Matlab提供 了一个函数 bwareaopen(),用于删除二值图像中面积小于一个定值的对象,默认情况下使用 8 邻域,格式为: Car_Image_Perform2=bwareaopen(Car_Image_Perform,1800); 程序代码如下: I5=bwareaopen(I4,1800);%去除聚团灰度值小于 1800的部分 figure(6),imshow(I5); title(从对象中移除小的对象 ); 这样, Car_I
15、mage_Perform中面积小于 1800的对象都被删除了。小对象被删除后的图像如 图 2.7所示。 图2.7 小对象被删除后的图像 移除小对象后的效果图已经非常明显了,图像中最后只存在车牌区域,其他的图像已经完 全滤除掉了,包括小物体,车的标志等影响已经没有了。 3 车牌定位 3.1 车牌区域的边界值计算 在将原始图像进行二值化,然后轮廓平滑处理后,图像的每个点为两个离散值中的一个, 这两个值代表开 (1)与关 (0),即只有黑与白的特殊灰度图像,并且整个图像只有两个域 (如 果有多个域需改变参数后重新进行一此剔除干扰对象处理 ), 全 1的域即为车牌区域, 并且近 似矩形,长宽比为 4.
16、5:1,也可以用这两个特性去检验提取的区域是否为车牌区域。 车牌区域确定了,即可将车牌的四个边界值确定下来。这里采用水平与垂直双向投影法。 水平坐标的确定,先定义一个 1*x的数组,其中 x为原始图像的宽度值,然后将二值图像 垂直投影到 x轴。从直方图中基本可以看出水平方向上的两个分界线,为了便于处理,该课题 将像素值临界值定量化,取值 5个像素。从左向右寻找第一个 1值像素大于 5的 x坐标为水平 方向左侧分界线,从右向左寻找到第一个 1值像素量大于 5的为右侧分界线,程序可以用 for 循环语句。 垂直方向的分界线可定义一个 y*1的数组,用和水平坐标的确定同样的方法实现。分界 线计算后,
17、即可从原图像中剪切出只包含车牌的区域图像。 定位后的车牌区域如图3.1所示。 图3.1 定位后的车牌彩色图像 3.2 车牌定位的程序 y,x,z=size(I5);%返回 I5各维的尺寸,存储在 x,y,z中 myI=double(I5);%将 I5转换成双精度 tic %tic表示计时的开始, toc表示计时的结束 %y方向车牌区域确定 Blue_y=zeros(y,1);%产生一个 y*1的零阵 for i=1:y for j=1:x if(myI(i,j,1)=1) %如果 myI(i,j,1)即 myI的图像中坐标为 (i,j)的点值为 1,即该点为车牌背景颜色蓝色 %则 Blue_y
18、(i,1)的值加 1 Blue_y(i,1)= Blue_y(i,1)+1;%蓝色像素点统计 end end end tempMaxY=max(Blue_y);%Y方向车牌区域确定 %temp为向量 white_y的元素中的最大值, MaxY为该值的索引 PY1=MaxY; while(Blue_y(PY1,1)=5) end PY2=MaxY; while(Blue_y(PY2,1)=5) end IY=I(PY1:PY2,:,:); %x方向车牌区域确定 Blue_x=zeros(1,x);%进一步确定 x方向的车牌区域 for j=1:x for i=PY1:PY2 if(myI(i,j
19、,1)=1) Blue_x(1,j)= Blue_x(1,j)+1; end end end PX1=1; while(Blue_x(1,PX1)3) end PX2=x; while(Blue_x(1,PX2)PX1) PX2=PX2-1; end PX1=PX1-1;%对车牌区域的校正 PX2=PX2+1; dw=I(PY1:PY2-8,PX1:PX2,:); t=toc; figure(7),subplot(1,2,1),imshow(IY),title(行方向合理区域 );%行方向车牌区域确定 figure(7),subplot(1,2,2),imshow(dw),title(定位裁剪
20、后的车牌彩色图像 ); 4 字符分割 4.1 字符切割前的图像去噪处理 由于图像车牌号区域提取后获得的是从原始图像中剪切的,是 RGB图像,分割同样采取 投影法,故同样需要先将 RGB图像转换成灰度值,再将灰度图转化成二进制图,转化的方法 就是限定一个阀值,如果大于阀值则为 1,小于阀值为 0,阀值采用全局阀值,全局阀值是指整 幅图像都采用相同的阀值 T处理,适用于背景和前景有明显对比的图像。虽然图像间受背景、 光照等影响存在较大的差异,但计算简单,程序运算效率高。在 Matlab实现方式如下: T=round(License_Image_Gray_max-(License_Image_Gra
21、y_max-License_Image_Gray_mi n)/3); 同时图像中的噪点依然存在,因此可以通过处理图像的低频部分来锐化图像。这里采用均 值滤波算法。 滤波前的二值化图像如图 4.1所示。 图4.1 滤波前的二值化图像 滤波后的二值化图像如图 4.2所示。 图4.2 滤波后的二值化图像 对比滤波前跟滤波后的图像,可以观察到噪声去除了,而且图像得到了锐化。 图像去噪处理的代码如下: imwrite(dw,彩色车牌 .jpg);%将彩色车牌写入彩色车牌文件中 a=imread(彩色车牌 .jpg);%读取车牌文件中的数据 b=rgb2gray(a);%将车牌图像转换为灰度图 imwri
22、te(b,车牌灰度图像 .jpg);%将灰度图像写入文件中 figure(8);subplot(2,2,1),imshow(b),title(车牌灰度图像 ); g_max=double(max(max(b);%找到灰度图片中的灰度最大值 g_min=double(min(min(b);%找到灰度图片中的灰度最小值 T=round(g_max-(g_max-g_min)/3);%T为二值化的阈值 %均值滤波前 m,n=size(b); d=(double(b)=T); %d为二值图像 imwrite(d,均值滤波前 .jpg); subplot(2,2,2),imshow(d),title(均
23、值滤波前 ); %滤波 h=fspecial(average,3);%建立预定义的滤波算子, average为均值滤波,模板的尺寸为 3*3 d=im2bw(round(filter2(h,d);%使用指定的滤波器 h对d进行均值滤波, im2bw函数基于阈值 将图像转变为二值图像, round为四舍五入函数 imwrite(d,均值滤波后 .jpg); subplot(2,2,3),imshow(d),title(均值滤波后 ); 4.2 字符切割前的图像膨胀和腐蚀处理 膨胀刚好与腐蚀相反,运算规则是输出图像的像素值是输入图像邻域中的最大值,在一个 二值图像中,只要一个像素值为 1,则相应的
24、输出像素值为 1。 根据经验值,车牌图像中,字符面积与车牌面积之比在 (0.235,0.365)之间,因此计算字符 面积与车牌面积比值,如果大于 0.365则对图像进行腐蚀,如果小于 0.235则对图像进行膨胀。 结构元素 Se使用一个二维单位矩阵0,1;1,0,matlab中表示为 eye(2)。 对于此图片,matlab给予膨胀处理,结果如图 4.3所示: 图4.3 膨胀或腐蚀处理结果图 图像膨胀和腐蚀处理的代码如下: %膨胀或腐蚀 se=eye(2); %se为二维单位矩阵 m,n=size(d);%返回矩阵 b的尺寸信息,并存储在 m,n中 if bwarea(d)/m/n=0.365
25、 %bwarea函数计算二值图像中对象的总面积,与整个面积的比 是否大于 0.365 d=imerode(d,se);%如果大于 0.365则图像进行腐蚀 elseif bwarea(d)/m/n=0.235 %计算二值图像中对象的总面积与整个面积的比是否小于 0.235 d=imdilate(d,se);%如果小于则实现膨胀操作 end imwrite(d,膨胀或腐蚀处理后.jpg); subplot(3,2,4),imshow(d),title(膨胀或腐蚀处理后); 4.3 字符分割 在汽车牌照自动识别过程中,字符分割有承前启后的作用。它在前期牌照定位的基础上进 行字符的分割,然后再利用分
26、割的结果进行字符识别。字符识别的算法很多,因为车牌字符 间间隔较大,不会出现字符粘连情况,所以此处采用的方法为寻找连续有文字的块,若长度 大于某阈值,则认为该块有两个字符组成,需要分割。一般分割出来的字符要进行进一步的 处理,以满足下一步字符识别的需要。但是对于车牌的识别,并不需要太多的处理就已经可 以达到正确识别的目的。在此只进行了归一化处理,然后进行后期处理。经过切割的字符图 像如图4.4所示。 切割后一连串的字符串变成了单个字符, 为后面的字符匹配识别奠定了基础。 图4.4 切割后的单个字符图像 字符分割的代码如下: %寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要
27、分割 %首先创建子函数 qiege与 getword,而后调用子程序,将车牌的字符分割开并且进行 归一化处理 d=qiege(d); m,n=size(d); k1=1;k2=1;s=sum(d);j=1; while j=n while s(j)=0 j=j+1; end k1=j; whiles(j)=0 d(:,k1+num+5)=0; %分割 end end %再切割 d=qiege(d); %切割出 7个字符 y1=10;y2=0.25;flag=0;word1=; while flag=0 m,n=size(d); left=1;wide=0; while sum(d(:,wide
28、+1)=0 wide=wide+1; end ifwidey2 flag=1;word1=temp; end d(:,1:wide)=0;d=qiege(d); end end %分割出第二个字符 word2,d=getword(d); %分割出第三个字符 word3,d=getword(d); %分割出第四个字符 word4,d=getword(d); %分割出第五个字符 word5,d=getword(d); %分割出第六个字符 word6,d=getword(d); %分割出第七个字符 word7,d=getword(d); figure(9); subplot(2,7,1),imsho
29、w(word1),title(1); subplot(2,7,2),imshow(word2),title(2); subplot(2,7,3),imshow(word3),title(3); subplot(2,7,4),imshow(word4),title(4); subplot(2,7,5),imshow(word5),title(5); subplot(2,7,6),imshow(word6),title(6); subplot(2,7,7),imshow(word7),title(7); m,n=size(word1); %商用系统程序中归一化大小为 40*20,此处演示 word
30、1=imresize(word1,4020); word2=imresize(word2,4020); word3=imresize(word3,4020); word4=imresize(word4,4020); word5=imresize(word5,4020); word6=imresize(word6,4020); word7=imresize(word7,4020); subplot(2,7,8),imshow(word1),title(1); subplot(2,7,9),imshow(word2),title(2); subplot(2,7,10),imshow(word3),
31、title(3); subplot(2,7,11),imshow(word4),title(4); subplot(2,7,12),imshow(word5),title(5); subplot(2,7,13),imshow(word6),title(6); subplot(2,7,14),imshow(word7),title(7); imwrite(word1,1.jpg); imwrite(word2,2.jpg); imwrite(word3,3.jpg); imwrite(word4,4.jpg); imwrite(word5,5.jpg); imwrite(word6,6.jpg)
32、; imwrite(word7,7.jpg); qiege子程序代码 : functione=qiege(d) m,n=size(d); top=1;bottom=m;left=1;right=n;%int while sum(d(top,:)=0 end while sum(d(:,left)=0 end dd=right-left; hh=bottom-top; e=imcrop(d,lefttopddhh);%返回图像的一个裁剪区域 getword子程序代码 : functionword,result=getword(d) word=;flag=0;y1=8;y2=0.5; while
33、flag=0 m,n=size(d); wide=0; while sum(d(:,wide+1)=0 end temp=qiege(imcrop(d,11widem); m1,n1=size(temp); If widey2 d(:,1:wide)=0; if sum(sum(d)=0 d=qiege(d)%切割出最小范围 else word=;flag=1; end else word=qiege(imcrop(d,11wide m); d(:,1:wide)=0; if sum(sum(d)=0 d=qiege(d);flag=1; elsed=; end end end result=
34、d; 5 基于模板匹配的车牌识别 5.1 字符识别方法选择 模板匹配是图象识别方法中最具代表性的基本方法之一,它是将从待识别的图象或图象区 域 f(i,j)中提取的若干特征量与模板 T(i,j)相应的特征量逐个进行比较,计算它们之间规格化的 互相关量,其中互相关量最大的一个就表示相似程度最高,可将图象归于相应的类。此处采用 相减的方法来求得字符与模板中哪一个字符最相似,然后找到相似度最大的输出。 模板匹配法虽然识别率低,但实现简单,计算量小,只有矩阵的加减与统计,而且车牌字 符只有阿拉伯数字、英文大写字母和部分汉字,需要的模板字库量不大,因此本课题使用这种 方法。对于模板匹配,首先建立标准模板
35、库,库中字符使用统一的尺寸,这里使用 2040,需 要识别的字符也保存为 2040的统一格式。 识别的流程如图 5.1所示。 图 5.1模板识别流程图 5.2 建立模板 中国汽车牌照的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,紧 接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限,汉字共约 50多 个,大写英文字母 26个,数字 10个。由于英文字母中 O和数字 0相似, I和数字 1相似,所 以车牌后六位中不采用大写英文字母 O和 I,使用的是数字 0和 1。 为了实验方便,结合本次设计所选汽车牌照的特点,只建立了 7个数字 24个字母与 10 个数字的模
36、板。 模板可以从网络上搜索到相关的图片,再把图片的像素修改为 40*20和分割出的待识别 的字符相同,把修改后的模板图片保存到字符模板文件夹中即可。 部分字符模板如图 5.2所示。 图5.2 部分字符模板 5.3 字符识别 首先取字符模板,接着依次取待识别字符与模板进行匹配,将其与模板字符相减,得到的 0越多那么就越匹配。把每一幅相减后的图的 0值个数保存,选出 0最多的图片模板的结果, 即为识别出来的结果。字符识别的结果如图 5.3所示,由图可知识别正确。 图 5.3字符识别结果 字符识别的程序代码如下: liccode=char(0:9A:H J:N P:Z京辽鲁陕苏豫浙 ); %建立自动
37、识别字符代码表 SubBw2=zeros(40,20); %产生 40*20的全 0矩阵 l=1;%从第一个字符开始识别 for I=1:7 ii=int2str(I); %将整数转为字符,即将数字 I转为字符 I t=imread(ii,.jpg);%读取图片文件中的数据 SegBw2=imresize(t,4020,nearest);%对图像做缩放处理, nearest最近邻插值 SegBw2=double(SegBw2)20;%double表示双精度浮点类型 If l=1 %第一位汉字识别 kmin=35; kmax=41; elseif l=2 %第二位 AZ除了 O、I的字母识别 k
38、min=11; kmax=34; else l=3 %第三位以后是字母或数字识别 kmin=1; kmax=34; end for k2=kmin:kmax fname=strcat(字符模板 ,liccode(k2),.jpg); %把行向量转化成字符串 SamBw2 = imread(fname);%读取字符模板的数据 SamBw2=double(SamBw2)1; for i=1:40 for j=1:20 SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);%图片与字符模板相减 end end %以上相当于两幅图相减得到第三幅图 %统计非零点的个数 Dmax=0;
39、for k1=1:40 for l1=1:20 if (SubBw2(k1,l1)0 |SubBw2(k1,l1)0) Dmax=Dmax+1; end end end Error(k2)=Dmax; end Error1=Error(kmin:kmax); MinError=min(Error1); findc=find(Error1=MinError); Code(l*2-1)=liccode(findc(1)+kmin-1); Code(l*2)=;%输出最大相关图像 l=l+1; end figure(10),imshow(dw),title(车牌号码 :,Code,Color,r); 6 结果分析 车牌定位能较为准确的定位车牌的位置,字符分割能顺利将车牌分割为 7个字符,但是 模板识别功能有时候只能大致识别出字符,还存在一些错误。这种垂直扫描的方式还存在一 些缺点,要求图像的中车的牌照接近水平,如果倾斜的比较厉害,很难只截取车牌号的区域。 扫描字符的时