您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 基于MATLAB的车牌识别程序详解..精要
基于MATLAB的车牌识别系统小组成员:张佰涛刘强伟崔敏滕秀萍龚恒耿车牌识别系统的摄像头通过对经过指定区域的机动车辆进行拍照,因为照片会受到光照、拍摄位置和车辆行驶速度的影响,导致拍摄的图片不能准确的确定汽车的车牌。而车牌识别系统就通过对机动车辆的照片进行图像预处理、车牌定位、字符分割、字符识别等技术手段,从而得到清晰的机动车牌照的照片,从而提高现代智能交通的管理效率,可以说车牌识别系统对于现代智能交通至关重要。系统技术:本系统应用图像处理技术、车牌分割技术、字符特征提取方法、神经网络识别技术,模板匹配的方法来解决车辆牌照识别问题。完整的车牌识别系统包括图像采集、图像处理、车牌定位、字符分割、字符识别、数据库、数据库支持模块等模块。一、图像处理:本系统中图像处理主要分为几个步骤:图像预处理,图像增强,图像去噪,图像切割,图像提取等几个步骤。(一)图像预处理收集到的图片一般为彩色图片,由于彩色图片占用存储容量大,处理时间长,因此需要对图像进行灰度转换,将彩色图像转换为灰度图像,灰度图像只保留亮度信息,方便使用,也为后面的对图像进行二值化处理提供方便。程序:I1=rgb2gray(I);rgb2gray,MATLAB中灰度图像转换函数,原图及处理后的灰度图显示如下一、图像处理(二)、图像增强:图像增强是数字图像处理过程中经常采用的一种方法。为了改善视觉效果或者便于人和机器对图像的理解和分析,根据图像的特点或存在的问题采取的改善方法或者加强特征的措施称为图像增强。采集的图片受天气、光照、观察点等制约,往往会产生对比度不足,图像细节不清,另外,图像传输过程中也会产生失真,影响识别率。图像增强的方法有:中值滤波、直方图均衡,灰度拉伸、通天滤波、高斯滤波、多图像平均、领域平均。腐蚀膨胀等。一、图像处理(二)、图像增强:本系统中使用到的方法有:平均滤波,膨胀腐蚀,直方图均衡直方图均衡程序:figure(2),subplot(1,2,2),imhist(I1;title('灰度图直方图');imhist函数,用来提取灰度图中直方图信息,用来直方图均衡,增强图像。处理后的直方图显示如下:一、图像处理(二)、图像增强:膨胀腐蚀程序:I3=imerode(I2,se);imerode,MATLAB中的腐蚀函数处理后的腐蚀图像显示如下:(三)、图像的去噪:通常使用2种方法:线性滤波、中值滤波。线性滤波可以去除图像中某些类型的噪声,本程序中采用平均滤波发:邻域平均法的均值滤波器就非常适用于去除通过扫描得到的图像中的颗粒噪声。经邻域平均后,噪声的均值不变,噪声方差变小,说明噪声强度减弱了,即抑制了噪声。邻域平均法也平滑了图像信号,特别是可能使图像目标区域的边界变得模糊。可以证明,对图像进行邻域平均处理相当于图像信号通过一低通滤波器。相关的MATLAB指令:h=fspecial(‘average’,3);;%平均值的设定d=im2bw(round(filter2(h,d)));%平均滤波(四)、图像的边缘检测:边缘是图像的最本特征,边缘检测在计算机视觉、图像分析等应用中起着重要的作用,使图像识别与分析的重要环节。边缘存在于目标与背景、目标与目标、区域与区域之间因此它是图像分割、形状特征、纹理特征的基础。缘具有方向与幅度两个特征。沿边缘走向,像素变化比较平缓。而垂直于边缘走向,则像素变化剧烈。这种剧烈可能呈现阶跃状,也可能呈现斜坡状。边缘的上的像素的一阶导数较大;二阶导数在边缘检测处值为零,呈现零交叉。这种特点使得边缘检测可以利用数学方法获得,经典的边缘检测算子有Roberts、Sobel、Prewitt、LoG、Canny算子。本设计中采用Roberts算子其MATLAB指令:I2=edge(I1,'robert',0.15,'both');%使用robert算子进行边缘检测。%将灰度图像用Robert算子计算,间距0.15,方向水平,垂直两个方向,图像边缘处理,利用Robert算子运算要先进行牌照的倾斜校正。由于牌照的上下沿是两条明显的平行直线,因此,一般都采用霍夫(Hough)变换,检测出这两条直线,然后对牌照进行校正。汽车牌照的定位,是指从摄入的汽车图像中找到汽车牌照所在的位置,并把含有车牌的子区域提取出来。从编程实现的角度来看,就是针对某汽车图像,通过运行某个定位算法,确定车牌子区域的对角坐标。为了准确而快速的实现车牌的定位,人们提出了许多定位算法。这些算法大都基于汽车牌照的不同特征而提出的。这些特征包括:(1)车牌区域内字符的纹理特征。(2)车牌的格式标准和字符标准信息。(3)车牌区域水平或者垂直投影特征。(4)车牌区域的位置特点。(5)车牌的彩色信息。(6)频谱特征。处理方法主要分为两大块:行定位与列定位。具体方法如下:获取特征图像要想从一整幅包括车身,背景等其他相对于车牌来说属于干扰因素的图像中提取出车牌,就必须抓住车牌区域的最主要特征。车牌区域最主要的特征应该是:车牌的底色和车牌字的颜色形成强烈对比,而且灰度变化频繁。程序:Blue_y=zeros(y,1);fori=1:yforj=1:xif(myI(i,j,1)==1)Blue_y(i,1)=Blue_y(i,1)+1;endendend[tempMaxY]=max(Blue_y)PY1=MaxY;while((Blue_y(PY1,1)=5)&&(PY11))PY1=PY1-1;endPY2=MaxY;while((Blue_y(PY2,1)=5)&&(PY2y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);PX1=1;while((Blue_x(1,PX1)3)&&(PX1x))PX1=PX1+1;endPX2=x;while((Blue_x(1,PX2)3)&&(PX2PX1))PX2=PX2-1;endPX1=PX1-1;PX2=PX2+1;dw=I(PY1:PY2-8,PX1:PX2,:);通过以上的行列扫描确定了车牌的区域,并将车牌提取出来,效果如下图程序部分详解(1)图像预处理function[d]=main(jpg)closeallclcI1=imread('car2.jpg');%读入图片figure(1),imshow(I);title('原图')%显示输出一个图形窗口I1=rgb2gray(I);%变为灰度图像,图像转换预处理figure(2),subplot(1,2,1)(‘灰度图’);title(‘灰度图')figure图片产生一行两列子图激活第1个格子图此部分是图像预处理部分,将采集到的图像转换为灰度图像,便于后面处理,同时显示原图的图片以及处理好的灰度图片。(2)图像增强与边缘检测figure(2),subplot(1,2,2),imhist(I1;title('灰度图直方图');)%显示图像直方图,图像增强处理,直方图均衡I2=edge(I1,'robert',0.15,'both');%将灰度图像用Robert算子计算,间距0.15,方向水平,垂直两个方向,图像边缘处理,利用Robert算子运算figure(3),imshow(I2)%显示边缘处理后的;title('robert算子边缘检测')se=[1;1;1];%创造一个维度矩阵,用于腐蚀单位扫描I3=imerode(I2,se);%将I3灰度腐蚀,se为腐蚀算子figure(4),imshow(I3);title('腐蚀后图像');%对裁剪好的图像进行图像增强处理,利用腐蚀处理se=strel('rectangle',[25,25]);%构建一个25为边长的正方形结构体图I4=imclose(I3,se);%对I3利用正方形结构图闭运算,平滑图片轮廓,修补缝隙;figure(5),imshow(I4);title('平滑图像的轮廓');I5=bwareaopen(I4,2000);%删掉原图的面积小于2000的不必要的小部分figure(6),imshow(I5);title('从对象中移除小对象');[y,x,z]=size(I5);%I5是移除小对象后的图像,将I5各维尺寸存储在X,Y,Z中myI=double(I5);%换成双精度数据。首先利用直方图,统计灰度图中像素灰度的信息,对此进行直方图均衡,增强图像,将直方图显示;利用robert算子进行边缘检测,对原图进行处理,然后创建一个维度矩阵,用来进行腐蚀操作,将图像进一步增强然后对图像进行进一步修补,建立一个正方形结构图进行闭运算,修补轮廓,填补缝隙。由于原图中存在车标志等因素的干扰,因此要对干扰消除,删除掉不必要的小部分。最后将最终图像的图像数据各个维度存储在数组中,转换为双精度为下面的行列扫描做准备。(3)车牌区域的确定与提取tic%保存当前时间,用toc计算程序运行时间Blue_y=zeros(y,1);%产生y*1的全零矩阵fori=1:y%对应图片中像素点横向坐标forj=1:x%对应图片中像素点纵向坐标if(myI(i,j,1)==1)%灰度图像中白色表示为全1,若myI=1,则表示是数字区域,进行行扫描,列不变,所以j不变%利用行数加一循环统计蓝色像素点Blue_y(i,1)=Blue_y(i,1)+1;%Blue_y第i行第一列数值加一,即若图片中出现白色点,将对应的位置横向坐标存放在变量中,保存数字区域行信息endendend%确定数字区域,将数字区域所在行信息输入Blue_y中[tempMaxY]=max(Blue_y);%Y方向车牌区域确定temp为blue-y最大值所在位置,maxy为最大值PY1=MaxY;while((Blue_y(PY1,1)=5)&&(PY11))PY1=PY1-1;end%从右方往左截取一段区域,区域的右限为PY1PY2=MaxY;while((Blue_y(PY2,1)=5)&&(PY2y))PY2=PY2+1;%从左方截取一段区域,区域的左限为PY2endIY=I(PY1:PY2,:,:);%IY为PY2到PY1的区域,横向区域%%%%%%X方向%%%%%%%%%Blue_x=zeros(1,x);%通过x方向进一步确定y方向的车牌区域forj=1:xfori=PY1:PY2if(myI(i,j,1)==1)Blue_x(1,j)=Blue_x(1,j)+1;%Blue_y第i行第一列数值加一,即若图片中出现白色点,将对应的位置横向坐标存放在变量中,保存数字区域列信息endendend%纵向扫描,进一步确定车牌区域PX1=1;while((Blue_x(1,PX1)3)&&(PX1x))PX1=PX1+1;end%从上至下截取一段区域,区域上限位PY1PX2=x;while((Blue_x(1,PX2)3)&&(PX2PX1))PX2=PX2-1;end%从下至上截取一段区域,区域下限位PY2PX1=PX1-1;%对车牌区域的校正PX2=PX2+1;dw=I(PY1:PY2-8,PX1:PX2,:);%车牌区域提取,考虑到车牌边框区域,进行剪切t=toc;%计算程序运行时间figure(7),subplot(1,2,1),imshow(IY),title('行方向合理区域');%显示行合适区域图片,将它放在第一个小图位置figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色车牌图像')%显示车牌区域,放到第二个小图imwrite(dw,‘dw.jpg’);%将图像数据写入图像文件中figure(8);subplot(3,2,1),imshow(b),title('1.车牌灰度图像')%产生3行两列子图,将灰度图放到第一个小图位置通过运用for循环来进行行列扫描,将图片中数字部分所在的行列信息付给变量,对变量的操作来完成对图片车牌区域的提取。(4)图像的二值化灰度图像是有256个灰度级的单色图像,多级别的图像能够呈现出较为丰富的明暗度,但对于目标搜索来说,总是希望尽可能地减
本文标题:基于MATLAB的车牌识别程序详解..精要
链接地址:https://www.777doc.com/doc-5220536 .html