7.3 系统详细设计7.3.1 车牌图像读入目前常用的图像格式主要有*.PCX、*.BMP、*.JPG、*.TIFF、*.GIF 等,本设计采集到的图片格式为*.JPG格式,这种格式的图像占有的存储空间小,而且是使用最广的图片保存和传输格式,大多数的摄像设备也都是以*.JPG格式保存图像的。
利用图像工具的图像读取函数imread() 来读取一副图像,其使用格式为:I=imread(‘fn pn’); %fn为图像文件名,pn为文件路径使用图像工具的图像显示函数imshow() 来显一副图像,使用格式为:Imshow(I);具体代码为:[fn pn]=uigetfile (‘*.JPG’,’选择图片’);%选择图像文件,fn为文件名,pn为路径I= imread ([fn pn]); %显示所选图像Figure,imshow(I);title(‘原始车牌图像’); %在新建的figure中显示所选图像文件,figure标题为原始车牌图像以一副名为“桂APC322”的车牌图片为例,程序运行结果为:7.3.2 彩色(基于蓝色)车牌定位、提取将彩色车牌读入后,采用水平垂直双向投影法,将图像分别投影到X、Y坐标轴,然后分别沿X、Y轴扫描图像。
当沿Y轴扫描时,一边扫描一边统计图像中蓝色像素点的个数,第一次扫描到蓝色像素点最多的行时停止扫描,并记录下蓝色像素点最多的行,然后以这行为基点,分别向上、向下扫描直到统计的像素点小于像素点阀值时,停止扫描,记录上下行的Y轴坐标PY2,PY1,I=(PY1:PY2,: ,:)就为Y轴方向的车牌区域,代码如下:Blue_y=zeros(y,1);for i=1:yfor j=1:xif((myI(i,j,1)<=48)&&((myI(i,j,2)<=100)&&(myI(i,j,2)>=40))&&((myI(i,j ,3)<=200)&&(myI(i,j,3)>=80)))Blue_y(i,1)= Blue_y(i,1)+1; %统计蓝色像素点endendend[temp MaxY]=max(Blue_y); %PY1=MaxY;%while ((Blue_y(PY1,1)>=Y_threshlow)&&(PY1>1)) %PY1=PY1-1;endPY2=MaxY;while ((Blue_y(PY2,1)>=Y_threshlow)&&(PY2<y))%ÕÒµ½Í¼Æ¬Éϱ߽çPY2=PY2+1;endPY1, PY2figure(2),subplot(1,2,1),plot(Blue_y),title('行方向的蓝色像素点统计');grid onIY=I(PY1:PY2,:,:);figure(2),subplot(1,2,2),imshow(IY),title('行方向车牌区域');运行结果如下:同理可得X轴方向的车牌区域:两者结合可提取出完整的车牌区域:7.3.3 车牌图像灰度化由于车牌底色跟上面的字符的颜色对比度很大,所以将RGB图像转化为灰度图时,车牌底色跟字符的灰度值也会相差很大,这样就可以很明显的显现出车牌区域,便于后续处理。
本系统使用的是MA TLAB内的灰度图转换函数rgb2gray(),其图像灰度值计算公式为:G=0.299R+0.578G+0.114B;程序源代码为:bw=rgb2gray (I);figure(6),imshow (bw);title(‘灰度图像’);运行结果为:7.3.4 车牌倾斜校正由于摄像头拍摄角度的不同,可能使拍摄的车牌图片也发生倾斜,为了图像的后续处理以及很好的去识别字符,需对提取的带有倾斜的车牌图像进行校正。
本系统采用的办法是,首先用radon 算法进行倾斜角度计算,然后根据倾斜角对图片精选修正,从而得到水平方向一致的图片,利于后期的分割识别。
代码如下:I=edge(I);%theta = 1:180;[R,xp] = radon(I,theta);[I,J] = find(R>=max(max(R)));%bw=imrotate(bw,qingxiejiao,'bilinear','crop');figure,imshow(bw);title ('车牌倾斜');运行结果如下:7.3.5 车牌图像处理对车牌灰度图像的处理主要有二值化、腐蚀、去除干扰、膨胀、擦除、取反,都可以直接使用图像工具箱的图像处理函数。
经过以上处理过程后可以得到带边框的白底黑字的车牌图片,但是由于还存在车牌的边框,需要对其进行二次的裁剪,裁剪方法跟上面阐述的提取彩色车牌方法相似,先将图片水平垂直投影,然后统计黑色像素点,找到字符边缘进行裁剪,得到除去边框的白底黑字的车牌照。
代码如下:SE=ones(3,3);bw=im2bw(bw);figure,imshow(bw);title('二值化');bw=imerode(bw,SE);figure,imshow(bw);title('腐蚀');bw=bwmorph(bw,'clean',inf);bw=bwmorph(bw,'hbreak',inf);bw=bwmorph(bw,'spur',inf);bw=imdilate(bw,SE);figure,imshow(bw);title('膨胀');bw = bwareaopen(bw, threshold);figure,imshow(bw);title('擦除');bw=~bw;figure,imshow(bw);title('颜色取反');bw=touying(bw);figure;imshow(bw);title('投影');运行结构如下:7.3.6 字符分割对二次裁剪的车牌图像进行水平垂直投影,计算水平垂直峰,检测合理的字符高宽比.可用与区域分割相同的方法进行峰值的删除和合并.但在字符切割时,往往由于阈值取得不好,导致字符切割不准确,针对这种情况,可以由车牌格式的先验知识,对切割出的字符宽度进行统计分析,用以指导切割。
代码如下:[y,x]=size(imfenge);histogram=sum(~imfenge);k=1;for h=1:x-1if((histogram(1,h)<=shedingyuzhi)&&(histogram(1,h+1)>shedingyuzhi))||(( h==1)&&histogram(1,h)>shedingyuzhi)fenge(1,k)=h;k=k+1;elseif((histogram(1,h)>shedingyuzhi)&&(histogram(1,h+1)<=shedingyuzhi))||(( h==x-1)&&histogram(1,h)>shedingyuzhi)fenge(1,k)=h+1;k=k+1;endendk=k-1;if(sum(histogram(1,fenge(1,1):fenge(1,2)))<ganrao)||((fenge(1,2)-fenge( 1,1))<(fenge(1,4)-fenge(1,3))/2)for i=3:kfenge(1,i-2)=fenge(1,i);endend[m n]=size(fenge);fenge=fenge(1,1:14);运行结果如下:7.3.7 字符识别目前字符识别方法主要有神经网络识别法和模板匹配法。
人工神经网络是模拟人脑思维功能和组织建立起来的数学模型,但总体来说其应用还是相对复杂的。
模板匹配法是将从待识别的图象或图象区域f(i,j)中提取的若干特征量与模板T(i,j)相应的特征量逐个进行比较,计算它们之间规格化的互相关量,其中互相关量最大的一个就表示期间相似程度最高,可将图象归于相应的类。
也可以计算图象与模板特征量之间的距离,用最小距离法判定所属类。
本系统使用的是较为简单的模板匹配法来识别字符的。
首先将待识别字符的图像进行归一化处理,使其长宽与模板字符图像长宽一致,模板使用的是80*160的图片尺寸,待识别字符图像归一化代码为:xiuzhenghanzi = imresize(han_zi, [80 160],'bilinear');xiuzhengzimu = imresize(zi_mu, [80 160],'bilinear');xiuzhengzm_sz_1 = imresize(zm_sz_1,[80 160],'bilinear');xiuzhengzm_sz_2 = imresize(zm_sz_2,[80 160],'bilinear');xiuzhengzm_sz_3 = imresize(zm_sz_3,[80 160],'bilinear');xiuzhengzm_sz_4 = imresize(zm_sz_4,[80 160],'bilinear');xiuzhengzm_sz_5 = imresize(zm_sz_5,[80 160],'bilinear');待识别字符图像与模板字符图像长宽一致以后,就可以用带识别字符图像与模板字符图像进行匹配,具体过程为:建立模板字库表读取分割出来的字符第一个字符与模板中的汉字模板进行匹配第二个字符与模板中的字母模板进行匹配后5个字符与模板中的字母与数字模板进行匹配求待识别字符与模板字符的相关系数,相关系数越大,说明其相似度越大识别完成,输出此模板对应值字符匹配代码为:comp=[ ];for n=1:num_letrassem=corr2(xiuzhengzifu,mubanzifu);%利用corr2()函数求待识别字符图像与模板图像的相关系数comp=[comp sem]; %将相关系数的值赋给compendxiangguan=find(comp==max(comp)); %找出相关系数最大的值msgbox(shibiejieguo,'识别结果'); %显示识别结果运行结果如下:7.3.8 语音播报识别结果对字符正确识别之后,用事先对对每一个字符的录音根据对应字符顺序播放。