Template=imread(strcat('cha&num\\',num2str(j),'.jpg')); Template=im2bw(Template); Differ=Im-Template;
Compare(j)=sum(sum(abs(Differ))); end
index=find(Compare==(min(Compare))); char=[char store2(index)]; end
figure,imshow(I),title(strcat('车牌为:',char));
4.5.2 结果分析
图4-5 字符识别结果图像
本文以MATLAB R2009a为实验平台,在得到这个结果之前,需要对车牌图像进行预处理、车牌定位、车牌分割等处理。
在图像采集的过程中,由于外界的干扰如光线等因素原因以及车主在车牌周围的装饰,还有生产厂家对车身的点缀容易给车牌的定位造成很大程度的影响,因此需要对原始图象进行识别前的预处理。对于光照条件不理想的图象,可先进行一次图象增强处理,使得图象灰度动态范围扩展和对比度增强,再进行定位和分割,这样可以提高分割的正
27
确率。由于车牌采集的信息都是些彩色图片,含有大量的数据信息,因此我们还要对其进行灰度化处理。图像中车辆牌照是具有比较显著特征的一块图象区域,这此特征表现在:近似水平的矩形区域;其中字符串都是按水平方向排列的;在整体图象中的位置较为固定。正是由于牌照图象的这些特点,再经过适当的图象变换,它在整幅中可以明显地呈现出其边缘,于是对其边缘提取,此处边缘的提取采用的是Sobel算子。随之进行定位及分割还有识别。
对于识别错误情况的分析得到,主要原因有以下几点: (1) 汽车牌照上外界干扰,如在牌照周围添加饰物;
(2) 采用不同的边缘检测算子将会使牌照字符的分割失败,导致识别错误; (3) 某些字符具有相似性,字符识别结果可能发生混淆的情况。
尽管目前牌照字符的识别率还不是很完美,但是只要在分割出的字符的大小、位置的归一化,以及尝试提取分类识别能力更好的特征值和设计分类器等环节上再完善,进一步提高识别率是完全可行的。
28
5 总结
近年来我国随着社会经济的高速发展、汽车数量急剧增加,对交通管理的要求也日益提高,而相应的人工管理方式以不能满足实际的需要,微电子、通信和计算机技术在交通领域的应用极大地提高了交通管理的效率。而车牌识别技术恰好能满足这一需求,通过车牌识别我们可以解决被纳入“黑名单”的通缉车辆,可以统计一定时间范围内进出各省的车辆,还能有效的对该车辆进行定位,对公安机关等相关部门有着很重要的作用通过智能的车牌定位及识别技术将对于维护交通安全和城市治安,防止交通堵塞,实现交通自动化管理有着现实的意义。
通过本次车牌识别的设计,我也对数字图像处理技术的原理及MATLAB编程技术有了更进一步的了解。让我不仅仅是在学习知识上,还有对科学实验的严谨态度上都有了很大提升。本次设计的研究以MATLAB软件作为设计工具,通过对采集到的原始图像进行预处理、车牌定位、字符分割以及字符识别才识别出图像中的车牌。本次设计主要解决了一下几个问题:
(1)对彩色图像进行灰度化处理的方法:
(2)选取合适的边缘检测算子及对灰度图像进行边缘检测的方法; (3)如何在图像中定位出车牌位置并从定位好的车牌图像中提取出车牌; (4)如何对车牌字符进行分割和字符识别。
在车辆牌照字符识别系统的研究领域,近几年已经出现了许多切实可行的识别技术和方法,从这些新技术和方法中可以看到两个明显的趋势:一是单一的人工选取合适的算法和其他指标已经不能取得很好的结果。二是车牌识别逐渐走上智能化的过程,通过智能系统选取不同的算法进行自动的分析才能更准确的应对各个角度及位置的车牌信息识别。虽然本次设计出的车牌识别技术还存在很多不足之处,但是我在此次的毕业设计中学习到了很多知识,增加了我的学习能力,这对我来说是很大的锻炼。
29
附录
设计代码 I=imread('cell.jpg');
subplot(3,2,1);imshow(I), title('原始图像'); I_gray=rgb2gray(I);
subplot(3,2,2),imshow(I_gray),title('灰度图像'); I_edge=edge(I_gray,'sobel');
subplot(3,2,3),imshow(I_edge),title('边缘检测后图像'); se=[1;1;1];
I_erode=imerode(I_edge,se);
subplot(3,2,4),imshow(I_erode),title('腐蚀后边缘图像'); se=strel('rectangle',[25,25]);
I_close=imclose(I_erode,se); %图像闭合、填充图像 subplot(3,2,5),imshow(I_close),title('填充后图像');
I_final=bwareaopen(I_close,2000); %去除聚团灰度值小于2000的部分 subplot(3,2,6),imshow(I_final),title('形态滤波后图像'); I_new=zeros(size(I_final,1),size(I_final,2)); location_of_1=[];
for i=1:size(I_final,1) %寻找二值图像中白的点的位置 for j=1:size(I_final,2) if I_final(i,j)==1; newlocation=[i,j];
location_of_1=[location_of_1;newlocation]; end end end
mini=inf;maxi=0;
for i=1:size(location_of_1,1)
%寻找所有白点中,x坐标与y坐标的和最大,最小的两个点的位置 temp=location_of_1(i,1)+location_of_1(i,2);
30
if temp
first_point=location_of_1(a,:); last_point=location_of_1(b,:); x1=first_point(1)+4; x2=last_point(1)-4; y1=first_point(2)+4; y2=last_point(2)-4; I_plate=I(x1:x2,y1:y2);
g_max=double(max(max(I_plate))); g_min=double(min(min(I_plate)));
T=round(g_max-(g_max-g_min)/3); I_plate =im2bw (I_plate,T/256); subplot(3,2,5),imshow(I_plate); I_plate=bwareaopen(I_plate,20);
figure,imshow(I_plate),title('车牌提取') X=[]; flag=0;
for j=1:size(I_plate,2) sum_y=sum(I_plate(:,j));
if logical(sum_y)~=flag X=[X j];
flag=logical(sum_y); end end figure
%和最小的点为车牌的左上角 %和最大的点为车牌的右下角 %坐标值修正 % T 为二值化的阈值 %最终车牌
%用来存放水平分割线的横坐标 %列和有变化时,记录下此列 31