车牌识别
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验步骤及截图
dw=dingwei(I5);
总体原理:
定位字符主要就是通过对预处理后的图像制作行方向 像素点灰度值累积和与列方向像素点灰度值累积和的 图表,并对准坐标明确各个字母的位置。
可能遭遇的问题:
由于定位的是与处理之后的图像,所以对预处理有很 多要求,如需要将图像摆正,需要对部分有标点的车 牌进行标点处理等等。
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
图像预处理
边缘检测后就要将不感兴趣的部分去除,这时我们 可以运用图像的腐蚀。
se=[1;1;1]; I3=imerode(I2,se);
图像预处理
腐蚀之后对图像进行填充,也就是对图像实现闭运 算,闭运算也能平滑图像的轮廓,它一般融合窄的 缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙, 使得腐蚀后的车牌区域变得饱满,易于定位。
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;
编写程序语言及作用:
IY=I(PY1:PY2,:,:); %行方向车牌区域确定 %%%%%% X方向 %%%%%%%%% X1=zeros(1,x);%进一步确定x方向的车牌区域 for j=1:x for i=PY1:PY2
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)
se=strel('rectangle',[25,25]);
%构造结构元素以正方形构造一个se I4=imclose(I3,se);
图像预处理
填充之后在车牌区域外部还有少许小面积对象,我 们运用bwareaopen函数删除这些小面积对象。
I5=bwareaopen(I4,2000);
图像预处理
算法
图片对比
车牌字符识别
车牌字符识别
Байду номын сангаас
字符识别方法目前主要有基于模板匹配 算法和基于人工神经网络算法。基于模板匹 配算法首先将分割后的字符二值化,并将其尺 寸大小缩放为字符数据库中模板的大小,然 后与所有的模板进行匹配,最后选最佳匹配 作为结果。基于人工神经元网络的算法有两 种:一种是先对待识别字符进行特征提取, 然后用所获得特征来训练神经网络分配器; 另一种方法是直接把待处理图像输入网络, 由网络自动实现特征提取直至识别出结果。
Y1(i,1)= Y1(i,1)+1;%蓝色像素点统计 end end end
编写程序语言及作用:
[temp MaxY]=max(Y1);%Y方向车牌区域确定 figure(); subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和'),xlabel('行值'),ylabel('像 素');
运行结果
⑤对处理完的图像进行字符分割
在进行车牌分割前,需要首先对车牌特征有一定分析 及了解,目前国内产检的车牌都是7个字符的长方形 车牌,按照国家标准规定,标准的车牌具有如下特征: 尺寸固定。国家标准规定,普通车牌号由7个字符组 成,每个字符的宽高比为1:2,第一个字符为汉字, 第2~4个字符为字母或数字,其余为数字,并且字符 与字符间有一定的间隔,一般蓝底白字或黄底黑字
Y1(i,1)= Y1(i,1)+1 ;
end
编写程序语言及作用:
Py1=1; Py0=1; while ((Y1(Py0,1)<20)&&(Py0<y1)) Py0=Py0+1; end Py1=Py0; while((Y1(Py1,1)>=20)&&(Py1<y1)) Py1=Py1+1; end I2=I2(Py0:Py1,:,:); subplot(3,2,6); imshow(I2),title('目标车牌区域');
imwrite(dw,'dw.jpg');%将彩色车牌写入dw文件中 I=imread('dw.jpg');%读取车牌文件中的数据 I1 = rgb2gray(I); g_max=double(max(max(I1))); g_min=double(min(min(I1))); T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值
[m,n]=size(I1);% d:二值图像
%h=graythresh(I1); I1=im2bw(I1,T/256); subplot(3,2,4); imshow(I1),title('二值化车牌图像');
编写程序语言及作用:
I2=bwareaopen(I1,20);
运行结果
④进行腐蚀或膨胀操作
腐蚀的具体操作是:用一 个结构元素(一般是3×3的 大小)扫描图像中的每一个 像素,用结构元素中的每 一个像素与其覆盖的像素 做“与”操作,如果都为 1,则该像素为1,否则为 0。 膨胀的具体操作是:用一 个结构元素(一般是3×3的 大小)扫描图像中的每一个 像素,用结构元素中的每 一个像素与其覆盖的像素 做“与”操作,如果都为 0,则该像素为0,否则为 1。 作用消除小物体或者填充 小空洞,平滑边界并且不 改原来物体变面积。
编写程序语言及作用:
PX1=PX1-1;%对车牌区域的校正
PX2=PX2+1;
%分割出车牌图像%
dw=I(PY1:PY2,PX1:PX2,:); subplot(3,2,3),imshow(dw),title('定位剪切
后的彩色车牌图像');
编写程序语言及作用:
心得体会及感想:
通过这部分的工作,我收获很大,不单单是努力做好 了自己这部分的工作,也明白了分工合作的重要性, 并且再接替之前工作的同时懂得了为下一部分的工作 打基础,增强了自己的团体意识。
车牌分割
试验程序
实验结果
前情提要
因为我们小组负责的是车牌分割部分的程序,所以我 们的前几组应该做到整张车辆图片的预处理、识别并 且分割出车牌图像。因为我们几个小组各组都是同步 进行,所以我们小组直接在网上截取一张车牌图像进 行测试。
I2=edge(I1,'robert',0.11,'both');
图像预处理
关于边缘检测算子的阈值 经过多次试验,发现阈值越低,能够检测出的边线越 多,结果也就越容易受到图片噪声的影响,导致无法 准确定位车牌。与此相反,一个高的阈值将会遗失细 的或者短的线段,结果就是车牌有可能只有一半被定 位。
基于MATLAB的 汽车牌照识别程序
流程图
达到目标: 载入带车牌的汽车图片 后能正确输出车牌号码。
分工分组情况
结果演示
I=imread(‘car.jpg’);
图像预处理
陈霖 2011010992
杨硕 2011011005
图像预处理
图像预处理的操作主要是为后续定位车牌找出有用 区域也就是车牌区域。
实验步骤
我们小组选取的车牌图像。
总体思想
载入车牌区域图像,对分割出的彩色车牌图像进行灰 度转换、二值化、均值滤波、腐蚀膨胀以及字符分割 以从车牌图像中分离出组成车牌号码的单个字符图像。 对分割出来的字符进行预处理(二值化、归一化)方 便下一个步。
①将载入的车牌区域图像转化为灰度图像
由于车牌底色跟上面 的字符的颜色对比度 很大,所以将RGB图像 转化为灰度图时,车 牌底色跟字符的灰度 值也会相差很大,这 样就可以很明显的显 现出车牌区域,便于 后续处理。
到此图像预处理的工作基本完成。
图像预处理
心得: 在整个程序部分图像的预处理还是比较简单的 部分,关键在于预处理中各个处理的衔接顺序,以及 算子阈值参数的选定,要想准确定位车牌位置对原始 图片进行预处理是必要的。
车牌的定位
编写程序语言及作用:
[y,x,z]=size(I5);%返回I5各维的尺寸,存储在x,y,z中 I6=double(I5);%将I5转换成双精度 Y1=zeros(y,1);%产生一个y*1的零阵 for i=1:y for j=1:x if(I6(i,j,1)==1) %如果I6(i,j,1)即I6的图像中坐标为(i,j)的点值为1,即该点为车牌背景颜色蓝色 %则Y1(i,1)的值加1
车牌倾斜校正
由于摄像头拍摄角度的不同,可能使拍摄的车牌图片 也发生倾斜,为了图像的后续处理以及很好的去识别 字符,需对提取的带有倾斜的车牌图像进行校正。我 们采用的办法是,首先用radon 算法进行倾斜角度计 算,然后根据倾斜角对图片精选修正,从而得到水平 方向一致的图片,利于后期的分割识别。
RADON
归一化处理
分割出来的字符要进行 进一步的处理,以满足 下一步字符识别的需要。 但是对于车牌的识别, 并不需要太多的处理就 已经可以达到正确识别 的目的。在此只进行了 归一化处理,归一化大 小为 40*20,然后进行 后期处理。
总结
此次试验在前期分组进行,所以我和张旭一开始并没 有考虑复杂的情况,导致在总体调试时出现倾斜的车 辆图片无法进行分割的情况,所以最后在处理车牌区 域图片前增加了车牌倾斜校正程序,增加分割成功率
模板匹配法:
运行结果
②车牌灰度图像的二值化处理
图像的二值化处理就是将 图像上的点的灰度置为0或 255,也就是将整个图像呈 现出明显的黑白效果。即 将256个亮度等级的灰度图 像通过适当的阈值选取而 获得仍然可以反映图像整 体和局部特征的二值化图 像。
运行结果
③对图像进行均值滤波
基本原理是用均值代替原图 像中的各个像素值,即对待 处理的当前像素点(x,y), 选择一个模板,该模板由其 近邻的若干像素组成,求模 板中所有像素的均值,再把 该均值赋予当前像素点(x, y),用这种方法对二值化图 像进行抑制噪声,但也会使 图像变模糊
转换为灰度 图
边缘检测
腐蚀
形态滤波
填充图像,闭 运算
图像预处理
由于车牌的定位与车牌的识别对于色彩的要求几乎 不需要,因此第一步就直接将图片转换为灰度图像, 这样既能减少占用空间也能加快处理速度。
I1=rgb2gray(I);
图像预处理
灰度化后我们需要对其进行边缘检测 常见边缘检测算子有四种:Roberts算子,Sobel算 子,Prewitt算子,Kirsch算子 由于这次边缘检测的目的是为后续腐蚀做准备的, 因此我们选择了只考虑图像2*2领域的最简单的边缘 检测算子 Roberts算子
根据水平投影确定车牌字符高度
用水平投影来确定车牌 字符的高度
基于垂直投影的车牌字符分割方法
该算法是依据车牌字符 间的像素为零而找到各 个字符的左右位置分割 的。 由图可见:在字符之间 的像素值理想情况下为 零,实际情况可能有些 许噪声,但只要噪声不 大,已可据此实现字符 的分割。
切割结果
基于垂直投影的车牌字符分割方法
投影分割方法的原理是首先将车牌图像转换为二值图 像(设白色为1,黑色为0),然后将车牌像素灰度值按 垂直方向累加,即所谓的垂直投影。由于车牌中字符 之间的灰度值通常为O,因此,投影图将会在字符之 间形成谷底,或者说在字符处形成波峰(一种特殊的 波峰)。通过寻找两个波峰之间的谷点,将其作为字 符分割的位置,完成字符的分割。