车牌定位分割-实验报告(共8页).doc
精选优质文档-倾情为你奉上汽车车牌的号码识别1.车牌号码识别的基本工作原理为:将摄像头拍摄到的包含车辆牌照的图像通过视频卡输入到计算机中进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,得到输出结果。图像采集图像预处理车牌号码定位车牌字符分割车牌字符识别输出结果2. 车牌号码识别系统原理图各部分说明如下:(1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。(2)车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。(3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像。(4)字符识别:对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。3.源程序代码及图形(1)I=imread('yuan.bmp');figure; subplot(2,2,1);imshow(I);title('原图');I1=rgb2gray(I);%图像灰度化subplot(2,2,2);imshow(I1);title('灰度化图');m2=medfilt2(I1,5,5);subplot(2,2,3);imshow(m2);title('中值滤波');w2=wiener2(I1,5,5);%维纳滤波subplot(2,2,4);imshow(w2);title('维纳滤波');(2)图像二值化fmax1=double(max(max(I1);fmin1=double(min(min(I1);level=(fmax1-(fmax1-fmin1)/3)/255;bw2=im2bw(I1,level);bw22=double(bw2);figure,imshow(bw22),title('图像二值化 ');(3)图像算法处理lubo=edge(bw22,'log');figure;subplot(2,2,1);imshow(bw2);title('Log算子边缘检测');%图像边缘检测 bg1=imclose(lubo,strel('rectangle',1,33);subplot(2,2,2),imshow(bg1);title('图像闭运算1,33');bg3=imopen(bg1,strel('rectangle',1,33);subplot(2,2,3),imshow(bg3);title('图像开运算 1,33');bg2=imopen(bg3,strel('rectangle',12,1);subplot(2,2,4),imshow(bg2);title('图像开15,1');(4)图像标记L,num = bwlabel(bg2,8);%标注二进制图像中已连接的部分%Feastats = imfeature(L,'basic');%计算图像区域的特征尺寸%Area=Feastats.Area;%区域面积%BoundingBox=Feastats.BoundingBox;%x y width height车牌的框架大小%RGB = label2rgb(L, 'spring', 'k', 'shuffle'); %标志图像向RGB图像转换figure,imshow(L);title('图像标记 ');%输出框架的彩色图像(5)形态滤波I5=bwareaopen(L,1000);%去除聚团灰度值小于2000的部分figure,imshow(I5),title('形态滤波后图像');(6) y,x,z=size(I5);I6=double(I5); Y1=zeros(y,1); for i=1:y for j=1:x if(I6(i,j,1)=1) Y1(i,1)= Y1(i,1)+1; end end end temp MaxY=max(Y1); figure(); subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和 ),xlabel('行值'),ylabel('像素'); PY1=MaxY; while (Y1(PY1,1)>=50)&&(PY1>1) PY1=PY1-1; end PY2=MaxY; while (Y1(PY2,1)>=50)&&(PY2<y) PY2=PY2+1; end IY=I(PY1:PY2,:,:); X1=zeros(1,x); for j=1:x for i=PY1:PY2 if(I6(i,j,1)=1) X1(1,j)= X1(1,j)+1; end end end subplot(3,2,2),plot(0:x-1,X1),title('列方向像素点灰度值累计和 '),xlabel('列值'),ylabel('像数'); PX1=1; while (X1(1,PX1)<3)&&(PX1<x) PX1=PX1+1; end PX2=x; while (X1(1,PX2)<3)&&(PX2>PX1) PX2=PX2-1; end PX1=PX1-1; PX2=PX2+1; %分割出车牌图像%dw=I(PY1:PY2,PX1:PX2,:); subplot(3,2,3),imshow(dw),title('定位剪切后的彩色车牌图像') if isrgb(dw) II1 = rgb2gray(dw); %将RGB图像转化为灰度图像else II1=dw;endg_max=double(max(max( II1);g_min=double(min(min( II1);T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值m,n=size(II1);% d:二值图像%h=graythresh(I1);II=im2bw(II1,T/256);subplot(3,2,4);imshow(II),title('二值化车牌图像'); I2=bwareaopen(II,20);subplot(3,2,5);imshow(I2),title('形态学滤波后的二值化图像'); y1,x1,z1=size(I2);I3=double(I2);TT=1;%去除图像顶端和底端的不感兴趣的区域 %Y1=zeros(y1,1); for i=1:y1 for j=1:x1 if(I3(i,j,1)=1) Y1(i,1)= Y1(i,1)+1 ; end end endPy1=1;Py0=1;while (Y1(Py0,1)<20)&&(Py0<y1) Py0=Py0+1;endPy1=Py0; while(Y1(Py1,1)>=20)&&(Py1<y1) Py1=Py1+1; endI2=I2(Py0:Py1,:,:);subplot(3,2,6);imshow(I2),title('目标车牌区域');(7)% 分隔字符按行累计值%X1=zeros(1,x1);for j=1:x1 for i=1:y1 if(I3(i,j,1)=1) X1(1,j)= X1(1,j)+1; end end endfigure;plot(0:x1-1,X1),title('列方向像素点灰度值来计和 '),xlabel('列值'),ylabel('累计像素量 '); Px0=1;Px1=1;(8) %分割字符%for i=1:7 while (X1(1,Px0)<3)&&(Px0<x1) Px0=Px0+1; end Px1=Px0; while (X1(1,Px1)>=4)&&(Px1<x1)|(Px1-Px0)<10) Px1=Px1+1; end Z=I2(:,Px0:Px1,:); switch strcat('Z',num2str(i) case 'Z1' PIN0=Z; case 'Z2' PIN1=Z; case 'Z3' PIN2=Z; case 'Z4' PIN3=Z; case 'Z5' PIN4=Z; case 'Z6' PIN5=Z; otherwise PIN6=Z; end figure(8); subplot(1,7,i); imshow(Z);Px0=Px1;end专心-专注-专业