车牌定位分割识别程序
- 格式:doc
- 大小:44.00 KB
- 文档页数:8
请简述车牌识别的工作过程。
车牌识别是人工智能领域中重要的一部分,也是促进智慧停车技术发展的主要动力。
车牌识别通过触发设备、摄像设备、照明设备、图像采集设备、号码识别处理机、缴费终端等硬件设备以及车牌定位、字符分割、字符识别等软件算法来运作车牌识别过程,具体包含以下七个流程:1.图像采集:车牌识别根据车辆检测方式的不同,图像采集一般分为两种,一种是静态模式下的图像采集,通过车辆触发地感线圈、红外或雷达等装置,给相机一个触发信号,相机在接收到触发信号后会抓拍一张图像,该方法的优点是触发率高,性能稳定,缺点是需要切割地面铺设线圈,施工量大;另一种是视频模式下的图像采集,外部不需要任何触发信号,相机会实时地记录视频流图像,该方法的优点是施工方便,不需要切割地面铺设线圈,也不需要安装车检器等零部件,但其缺点也十分显著,由于算法的极限,该方案的触发率与识别率较之外设触发都要低一些。
2.预处理:车牌识别由于图像质量容易受光照、天气、相机位置等因素的影响,所以在识别车牌之前需要先对相机和图像做一些预处理,以保证得到车牌最清晰的图像。
一般会根据对现场环境和已经拍摄到的图像的分析得出结论,实现相机的自动曝光处理、自动白平衡处理、自动逆光处理、自动过爆处理等,并对图像进行噪声过滤、对比度增强、图像缩放等处理。
去噪方法有均值滤波、中值滤波和高斯滤波等;增强对比度的方法有对比度线性拉伸、直方图均衡和同态滤波器等;图像缩放的主要方法有最近邻插值法、双线性插值法和立方卷积插值法等。
3.车牌定位:车牌识别从整个图像中准确地检测出车牌区域,是车牌识别过程的一个重要步骤,如果定位失败或定位不完整,会直接导致最终识别失败。
由于复杂的图像背景,且要考虑不清晰车牌的定位,所以很容易把栅栏,广告牌等噪声当成车牌,所以如何排除这些伪车牌也是车牌定位的一个难点。
为了提高定位的准确率和提高识别速度,一般的车牌识别系统都会设计一个外部接口,让用户自己根据现场环境设置不同的识别区域。
车牌的定位与分割实验报告一实验目的针对交通智能系统所拍摄的汽车图片,利用设定的算法流程,完成对汽车车牌部分的定位,分割车牌部分,并完成字符的分割,以便于系统的后续分析及处理。
二实验原理详见《车牌的定位与字符分割》论文。
三概述1一般流程车牌自动识别技术大体可分为四个步骤:图像预处理、车牌定位与分割、车牌字符的分割和车牌字符识别。
而这四个步骤又可归结为两大部分:车牌分割和车牌字符识别。
图1-1为车牌自动识别技术的一般流程图。
2本实验的流程(1)图像预处理:图像去噪(2)车牌的定位:垂直边缘检测(多次)形态学处理的粗定位合并邻近区域结合车牌先验知识的精确定位(3)车牌预处理:车牌直方图均衡化倾斜校正判定(蓝底白字或者黄底黑字)归一化、二值化(4)字符的分割:垂直投影取分割阈值确定各个字符的左右界限(结合字符宽度、间隔等先验知识)分割字符四实验过程4.1图像预处理4.1.1图像去噪一般的去噪方法有:空间域上的均值滤波和中值滤波;频率域上的巴特沃斯滤波器。
图4-1是各滤波器处理椒盐噪声的效果。
a.被椒盐噪声污染的图片 b.均值滤波的效果图 c.中值滤波的效果图 d.BLPF的效果图图4-1 各滤波器处理椒盐噪声的仿真可见,中值滤波对椒盐噪声的处理效果极好,而一般所拍摄的图片上最多的便是孤立的污点,所以此处以中值滤波为主进行去噪。
图4-2是采用中值滤波处理实际汽车图片的效果。
a.原始图像b.灰度图像c.中值滤波后的图像图4-2 中值滤波处理实际汽车图片的效果很显然,经过中值滤波后去除了原图上的部分污点。
4.1.2图像复原由于通常情况下都不知道点扩展函数,所以我们采用基于盲解卷积的图像复原策略。
图4-3~4-7图是函数进行盲解卷积的实验结果,其中图4-3是图像cameraman 的模糊图像。
图4-3 模糊图像在盲解卷积处理中,选择适当大小的矩阵对恢复图像的效果很重要。
PSF的大小比PSF的值更重要,所以首先指定一个有代表性的全1矩阵作为初始PSF。
简述车牌识别流程
车牌识别流程
步骤1:图像预处理
在车牌识别过程中,第一步是对原始图像进行预处理,以确保图像的可靠性与可理解性。
预处理通常包括对图像进行灰度化,去除噪声,二值化和边缘检测等操作,以提高图像的质量,使图像更加易于处理。
步骤2:车牌定位
在车牌识别中,定位是一个重要的步骤,目的是确定图像中车牌的位置。
系统根据车牌的特征,在图像中进行定位检测,以确定车牌的位置,从而将图像分割为车牌区域。
步骤3:车牌分割
接下来,根据定位的结果,系统将图像分割为车牌区域,以便之后的字符识别。
步骤4:字符识别
在车牌识别流程中,最后一步是字符识别,它的目的是从车牌区域中识别出车牌字符。
系统会使用一些机器学习算法,如支持向量机,深度学习等来辨别字符,以识别出车牌字符。
步骤5:结果输出
最终,系统会将识别出的车牌字符输出,作为车牌识别的结果,如“ABC123”等。
车牌识别的方法车牌识别系统(Vehicle License Plate Recognition,VLPR)是计算机视频图像识别技术在车辆牌照识别中的一种应用,能够将运动中的车辆牌照信息(含汉字字符、英文字母、阿拉伯数字及号牌颜色)从复杂背景中提取并识别出来,通过车牌提取、图像预处理、特征提取、车牌字符识别等技术,识别车辆牌号、颜色等信息,目前最新的技术水平为字母和数字的识别率均可达到99%以上。
车牌识别是现代智能交通系统中的重要组成部分之一,应用十分广泛。
它以数字图像处理、模式识别、计算机视觉等技术为基础,对摄像机所拍摄的车辆图像或者视频序列进行分析,得到每一辆汽车唯一的车牌号码,从而完成识别过程。
当前,车牌识别技术已经广泛应用于停车管理、称重系统、静态交通车辆管理、公路治超、公路稽查、车辆调度、车辆检测等各种场合,对于维护交通安全和城市治安,防止交通堵塞,实现交通自动化管理有着现实的意义。
目前车牌识别技术已经开始成熟,国内外厂商推出了一批性能优异的产品,开始在交通、公安、停车场、安防、小区、充电站、加油站、车服门店等许多领域得到了成功的应用。
目前的车牌识别产品除自动识别车牌号码外,有些产品比如深睛S-VX系列车牌识别一体机还能同时识别车牌颜色,车身颜色,车辆品牌及年代,完成相关图像的保存和记录。
根据应用条件和要求的不同,车牌识别产品也有多种类型。
从实现模式来说,分为软识别和硬识别两种。
软识别即车牌识别软件,基本是安装的PC端、服务器端,前端硬件设备采集视频或抓拍图片,传输到后端带有识别软件识别端进行识别,这种技术多数应用在前期模拟相机时代停车场,高速公路,电子警察,但这种方式针对分析端要求较高,如中间传输出现中断或者分析端出现重启情况,不可实时进行识别。
特别是在一些小型场景,比如停车场,加油站,新能源电动车充电站内,PC在岗亭或者机房,经常由于温度、潮湿等条件影响,会存在不稳定情况;另外在特定场景,由于天气、复杂环境、角度影响,识别率迟迟达不到很高标准,所以这项已经很少使用。
【车牌识别】-车牌中字符分割代码详解车牌识别项⽬中,关于字符分割的实现:思路: 1. 读取图⽚,使⽤ cv2 。
2. 将 BGR 图像转为灰度图,使⽤ cv2.cvtColor( img,cv2.COLOR_RGB2GRAY) 函数。
3. 车牌原图尺⼨(170, 722) ,使⽤阈值处理灰度图,将像素值⼤于175的像素点的像素设置为 255 ,不⼤于175的像素点的像素设置为0 。
4.观察车牌中字符,可以看到每个字符块中的每列像素值的和都不为 0 ,这⾥做了假设,将左右结构的省份简写的字也看作是由连续相邻的列组成的,如 “ 桂 ” 。
5. 对于经过阈值处理的车牌中的字符进⾏按列求像素值的和,如果⼀列像素值的和为 0,则表明该列不含有字符为空⽩区域。
反之,则该列属于字符中的⼀列。
判断直到⼜出现⼀列像素点的值的和为0,则这这两列中间的列构成⼀个字符,保存到字典character_dict 中,字典的 key 值为第⼏个字符 ( 下标从0开始 ),字典的value值为起始列的下标和终⽌列的下标。
character_dict 是字典,每⼀个元素中的value 是⼀个列表记录了夹住⼀个字符的起始列下标和终⽌列下标。
6. 之后再对字符进⾏填充,填充为170*170⼤⼩的灰度图(第三个字符为⼀个点,不需要处理,跳过即可。
有可能列数不⾜170,这影响不⼤)。
7. 对填充之后的字符进⾏resize,处理成20*20的灰度图,然后对字符分别进⾏存储。
代码实现:1### 对车牌图⽚进⾏处理,分割出车牌中的每⼀个字符并保存2# 在本地读取图⽚的时候,如果路径中包含中⽂,会导致读取失败。
34import cv25import paddle6import numpy as np7import matplotlib.pyplot as plt8#以下两⾏实现了在plt画图时,可以输出中⽂字符9 plt.rcParams['font.sans-serif']=['SimHei']10 plt.rcParams['axes.unicode_minus'] = False111213# cv2.imread() 读进来直接是BGR 格式数据,数值范围在 0~255 。
一、车牌识别技术:车牌识别技术(Vehicle License Plate Recognition,VLPR) 是指能够检测到受监控路面的车辆并自动提取车辆牌照信息(含汉字字符、英文字母、阿拉伯数字及号牌颜色)进行处理的技术。
车牌识别是现代智能交通系统中的重要组成部分之一,应用十分广泛。
它以数字图像处理、模式识别、计算机视觉等技术为基础,对摄像机所拍摄的车辆图像或者视频序列进行分析,得到每一辆汽车唯一的车牌号码,从而完成识别过程。
二、车牌识别流程:车牌识别实验台主要包括四部分:前端的抓拍摄像机(负责抓车牌和读车牌)、地感线圈(负责触发摄像机抓车牌),车辆检测器,后端的对比软件(即车牌定位)和数据库。
1、地感线圈检测原理:地感线圈检测车辆的基本原理如下图所示:地感线圈采用单条多股铜线埋设在车道上的切割槽中,安装时采用螺旋形绕法缠绕4~6圈,两线合并后采用麻花形绕法。
地面切槽长度以车道宽度为准,宽度控制在30~40cm左右。
车辆检测的核心器件是与地感线圈相连接的车辆感应器。
车辆感应器采用先进的锁相环技术。
当线圈上面没有车辆时,车辆感应器和地感线圈之间产生一个平衡点,车辆感应器输出一个低电平到CPU;当地感线圈上面有车辆时,地感线圈形成的磁场分布状况发生改变,车辆感应器输出高电平到CPU。
检测系统通过对两个信号进行检测判断,即可得到所需的车辆检测信号。
2、车牌定位模块:车牌定位识别系统是在软硬件的结构上,利用先进的图像处理模式识别等技术,对采集到的汽车图像进行处理,进而得到相应的车牌图像,以完成车牌的自动识别功能,如下图所示,其主要的两个子系统是车牌的精确定位、分割系统,车牌字符的分割、识别系统.2.1图像预处理车牌的准确定位是识别的关键,当利用摄像机采集图像时,由于角度、光照等影响,采集到的图像信息往往很复杂,质量不高,为了精确的实现定位,就必须对图像进行预处理.汽车图像预处理包括:彩色图像的灰度化、二值化,其目的是为是减少原始图像中的复杂信息,使得车牌定位算法更为简单,速度更快。
停车场识别车牌的原理停车场识别车牌是利用计算机视觉技术和图像处理算法来实现的。
下面我们将从图像采集、车牌定位、字符分割、字符识别、比对入库、匹配查询和通道管理等方面来详细介绍停车场识别车牌的原理。
1.图像采集图像采集是停车场识别车牌的第一步。
通常使用高清晰度的摄像头对停车场中的车辆进行拍摄,并获取车辆的图像信息。
在采集图像时,需要注意摄像头的角度和位置,以确保拍摄到的车牌区域清晰可见。
同时,还需要考虑光照条件、车牌所在位置以及车牌区域的背景等因素。
2.车牌定位车牌定位是在图像中确定车牌区域的位置。
首先,可以利用颜色和形状等特征进行初步筛选,排除与车牌无关的区域。
然后,通过车牌的特定形状和字符布局等特点,对筛选后的区域进行进一步的判断和定位。
在实际应用中,车牌定位的精度会受到多种因素的影响,例如光照条件、车牌污损、字符重叠等,这些问题需要算法进行优化和改进。
3.字符分割字符分割是在定位后的车牌区域中对每个字符进行分割。
由于车牌中的字符排列有一定规律,因此可以利用这个特点进行字符分割。
首先,可以通过垂直投影法等算法,将车牌区域中的字符分割成单个字符的候选区域。
然后,利用字符的宽度、高度、倾斜度等特征进行进一步的筛选和确认,排除干扰项,最终得到准确的字符分割结果。
4.字符识别字符识别是将分割后的字符转换成机器可读的字模,并与已知的车牌号码进行比对。
字符识别通常采用深度学习和神经网络等算法来实现。
在训练阶段,利用大量已知的车牌号码数据集进行训练,让模型学会将字符图像转换为数字。
在识别阶段,将分割后的字符输入到已经训练好的模型中进行预测,得到相应的字符编码,再与数据库中的车牌号码进行比对,判断是否匹配。
5.比对入库比对入库是将识别后的车牌信息与数据库中的信息进行比对,实现车辆入库管理。
通常,将识别的车牌号码与数据库中已有的车牌信息进行比对,如果匹配成功,则将车辆信息添加到停车场管理系统中,实现自动化的车辆入库管理。
车牌识别(⼀)-车牌定位在对车牌识别过程中,常⽤的⽅法有:基于形状、基于⾊调、基于纹理、基于⽂字特征等⽅法。
⾸先基于形状,在车牌中因为车牌为形状规格的矩形,所以⽬的转化为寻找矩形特征,常常是利⽤车牌长宽⽐例特征、占据图像的⽐例等。
基于⾊调,国内的车牌往往是蓝底⽩字,可以采⽤图像的⾊调或者饱和度特征,进⼊⽣成⼆值图,定位车牌位置。
基于纹理特征⾃⼰还没有基础到。
基于⽂字特征往往是根据⽂字轮廓特征进⾏识别,原理是基于相邻⽂字轮廓特征、⽐例进⾏定位车牌位置。
⼀、图像⼆值化正如前⾯⽂章所⾔,⾸先进⾏获取图像⼆值化特征,本⽂采取了根据图像亮度特征,提⾼对⽐度,进⾏可以清晰获取⽂字的图像,为下⼀步的⽂字轮廓识别打好基础。
1.1 算法流程伪代码1、图像转化为HSV图像,获取V通道图像2、提⾼对⽐度3、V图像⾼斯滤波,去除噪声4、图像⼆值化程序源码:def get_colorvalue(image):height, width, shape = image.shapeimage_hsv = np.zeros((height,width), np.uint8)image_hsv = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)image_hue, image_saturation, image_value = cv2.split(image_hsv)return image_valuedef enhance_contrast(image):kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))img_tophat = cv2.morphologyEx(image, cv2.MORPH_TOPHAT,kernel)img_blackhat = cv2.morphologyEx(image, cv2.MORPH_BLACKHAT, kernel)image_plus_tophat = cv2.add(image, img_tophat)image_plus_blackhat_minus_blackhat = cv2.subtract(image_plus_tophat, img_blackhat)return image_plus_blackhat_minus_blackhatdef preprocess(srcimage):image_value = get_colorvalue(srcimage)image_enhance = enhance_contrast(image_value)image_blur = cv2.GaussianBlur(image_enhance, (5,5), 0)# _, image_binary = cv2.threshold(image_blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)_, image_binary = cv2.threshold(image_blur, 100, 255, cv2.THRESH_BINARY )cv2.imwrite('image_binary.png',image_binary)return image_binary1.2 算法分析在实验中在获取通道图像时,发现可以利⽤图像饱和度图像进⾏定位。
附录A%主函数function [d]=main(jpg)close allclcI=imread('car1.jpg');figure(1),imshow(I);title('原图')I1=rgb2gray(I); %将RGB图形或色图矩阵转换成灰度图figure(2),subplot(1,2,1),imshow(I1);title('灰度图');figure(2),subplot(1,2,2),imhist(I1);title('灰度图直方图');I2=edge(I1,'robert',0.15,'both');%提取I1的边缘,利用robert算子figure(3),imshow(I2);title('robert算子边缘检测')se=[1;1;1]; %结构矩阵,用于图像的腐蚀I3=imerode(I2,se);%以图像I2和结构元素SE为参数调用imerode函数进行腐蚀操作figure(4),imshow(I3);title('腐蚀后图像');se=strel('rectangle',[25,25]);I4=imclose(I3,se); %形态学中的闭运算,se为结构元素figure(5),imshow(I4);title('平滑图像的轮廓');I5=bwareaopen(I4,2000);figure(6),imshow(I5);title('从对象中移除小对象');[y,x,z]=size(I5); %读取I5的大小,行列页myI=double(I5); %将I5元素转为double型tic %计时开始Blue_y=zeros(y,1); %给蓝色像素个数赋初始值0for i=1:yfor j=1:x % 这两行是循环,先行,再列if(myI(i,j,1)==1) % 如果I5第一页中的元素为1的话,则是蓝色像素Blue_y(i,1)= Blue_y(i,1)+1;%蓝色像素点统计endendend[temp MaxY]=max(Blue_y);%Y方向车牌区域确定,temp为最大值,MaxY为最大值位置PY1=MaxY; %最大值的位置赋给PY1while ((Blue_y(PY1,1)>=5)&&(PY1>1))PY1=PY1-1;end % 这个循环是在Y方向,向上求离最大值最近的像素小于5的点的位置,存在PY1中PY2=MaxY;while ((Blue_y(PY2,1)>=5)&&(PY2<y))PY2=PY2+1;end %这个循环是在Y方向,向下求离最大值最近的像素小于5的点的位置,存在PY2中IY=I(PY1:PY2,:,:); %截取PY1和PY2之间的像素矩阵,X方向暂不限制。
%因为车牌是个矩形,%是原图像中矩阵的一部分,所以要将其提取出来,%先确定Y方向上取值的区间,再确定X方向。
%%%%%% X方向%%%%%%%%%Blue_x=zeros(1,x);%进一步确定x方向的车牌区域for j=1:xfor i=PY1:PY2 %简单起见,只取PY1到PY2,减少计算量if(myI(i,j,1)==1)Blue_x(1,j)= Blue_x(1,j)+1;endendendPX1=1;while ((Blue_x(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while ((Blue_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;end %这里和求Y方向的方法一样PX1=PX1-1;%对车牌区域的校正PX2=PX2+1;dw=I(PY1:PY2-8,PX1:PX2,:); %车牌矩阵存在变量dw中t=toc; % 计时结束,输出运行时间figure(7),subplot(1,2,1),imshow(IY),title('行方向合理区域');figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色车牌图像')imwrite(dw,'dw.jpg');[filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像');jpg=strcat(filepath,filename);a=imread('dw.jpg');b=rgb2gray(a);imwrite(b,'1.车牌灰度图像.jpg');figure(8);subplot(3,2,1),imshow(b),title('1.车牌灰度图像')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,'2.车牌二值图像.jpg');figure(8);subplot(3,2,2),imshow(d),title('2.车牌二值图像')figure(8),subplot(3,2,3),imshow(d),title('3.均值滤波前')% 滤波h=fspecial('average',3);d=im2bw(round(filter2(h,d)));imwrite(d,'4.均值滤波后.jpg');figure(8),subplot(3,2,4),imshow(d),title('4.均值滤波后')% 某些图像进行操作% 膨胀或腐蚀% se=strel('square',3); % 使用一个3X3的正方形结果元素对象对创建的图像进行膨胀% 'line'/'diamond'/'ball'...se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵[m,n]=size(d);if bwarea(d)/m/n>=0.365d=imerode(d,se);elseif bwarea(d)/m/n<=0.235d=imdilate(d,se);endimwrite(d,'5.膨胀或腐蚀处理后.jpg');figure(8),subplot(3,2,5),imshow(d),title('5.膨胀或腐蚀处理后')% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割d=qiege(d);[m,n]=size(d);figure,subplot(2,1,1),imshow(d),title(n)k1=1;k2=1;s=sum(d);j=1;while j~=nwhile s(j)==0j=j+1;endk1=j;while s(j)~=0 && j<=n-1j=j+1;endk2=j-1;if k2-k1>=round(n/6.5)[val,num]=min(sum(d(:,[k1+5:k2-5])));d(:,k1+num+5)=0; % 分割endend% 再切割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+1))~=0wide=wide+1;endif wide<y1 % 认为是左侧干扰d(:,[1:wide])=0;d=qiege(d);elsetemp=qiege(imcrop(d,[1 1 wide m]));[m,n]=size(temp);all=sum(sum(temp));two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));if two_thirds/all>y2flag=1;word1=temp; % WORD 1endd(:,[1:wide])=0;d=qiege(d);endend% 分割出第二个字符[word2,d]=getword(d);% 分割出第三个字符[word3,d]=getword(d);% 分割出第四个字符[word4,d]=getword(d);% 分割出第五个字符[word5,d]=getword(d);% 分割出第六个字符[word6,d]=getword(d);% 分割出第七个字符[word7,d]=getword(d);subplot(5,7,1),imshow(word1),title('1');subplot(5,7,2),imshow(word2),title('2');subplot(5,7,3),imshow(word3),title('3');subplot(5,7,4),imshow(word4),title('4');subplot(5,7,5),imshow(word5),title('5');subplot(5,7,6),imshow(word6),title('6');subplot(5,7,7),imshow(word7),title('7');[m,n]=size(word1);% 商用系统程序中归一化大小为40*20,此处演示word1=imresize(word1,[40 20]);word2=imresize(word2,[40 20]);word3=imresize(word3,[40 20]);word4=imresize(word4,[40 20]);word5=imresize(word5,[40 20]);word6=imresize(word6,[40 20]);word7=imresize(word7,[40 20]);subplot(5,7,15),imshow(word1),title('1');subplot(5,7,16),imshow(word2),title('2');subplot(5,7,17),imshow(word3),title('3');subplot(5,7,18),imshow(word4),title('4');subplot(5,7,19),imshow(word5),title('5');subplot(5,7,20),imshow(word6),title('6');subplot(5,7,21),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');imwrite(word7,'7.jpg');liccode=char(['0':'9' 'A':'Z' '苏豫陕鲁']); %建立自动识别字符代码表SubBw2=zeros(40,20);l=1;for I=1:7ii=int2str(I);t=imread([ii,'.jpg']);SegBw2=imresize(t,[40 20],'nearest');if l==1 %第一位汉字识别kmin=37;kmax=40;elseif l==2 %第二位A~Z 字母识别kmin=11;kmax=36;else l>=3 %第三位以后是字母或数字识别kmin=1;kmax=36;endfor k2=kmin:kmaxfname=strcat('字符模板\',liccode(k2),'.jpg');SamBw2 = imread(fname);for i=1:40for j=1:20SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);endend% 以上相当于两幅图相减得到第三幅图Dmax=0;for k1=1:40for l1=1:20if ( SubBw2(k1,l1) > 0 | SubBw2(k1,l1) <0 )Dmax=Dmax+1;endendendError(k2)=Dmax;endError1=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;endfigure(10),subplot(5,7,1:7),imshow(dw),title('第一步车牌定位'),xlabel({'','第二步车牌分割'});subplot(6,7,15),imshow(word1);subplot(6,7,16),imshow(word2);subplot(6,7,17),imshow(word3);subplot(6,7,18),imshow(word4);subplot(6,7,19),imshow(word5);subplot(6,7,20),imshow(word6);subplot(6,7,21),imshow(word7);subplot(6,7,22:42),imshow('dw.jpg');xlabel(['第三步识别结果为: ', Code],'Color','b');。