MATLAB车牌识别过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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:y
for j=1:x
if((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; %统计蓝色像素点
end
end
end
[temp MaxY]=max(Blue_y); %
PY1=MaxY;%
while ((Blue_y(PY1,1)>=Y_threshlow)&&(PY1>1)) %
PY1=PY1-1;
end
PY2=MaxY;
while ((Blue_y(PY2,1)>=Y_threshlow)&&(PY2 PY2=PY2+1; end PY1, PY2 figure(2),subplot(1,2,1),plot(Blue_y),title('行方向的蓝色像素点统 计');grid on IY=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('投影'); 运行结构如下: