车牌识别的malab程序程序讲解模板

合集下载

matlab车牌识别程序代码

matlab车牌识别程序代码

% 车牌识别程序主体clc;close all;clear all;%==========================================================%说明:%%%===========================================================% ==============测定算法执行的时间,开始计时=================tic %%%%%记录程序运行时间%=====================读入图片================================[fn,pn,fi]=uigetfile('*.jpg','选择图片');I=imread([pn fn]);figure;imshow(I);title('原始图像');%显示原始图像chepailujing=[pn fn]I_bai=I;[PY2,PY1,PX2,PX1]=caitu_fenge(I);% I=rgb2hsv(I);% [PY2,PY1,PX2,PX1]=caitu_tiqu(I,I_bai);%用HSI模型识别蓝色,用rgb模型识别白色%================分割车牌区域=================================%===============车牌区域根据面积二次修正======================[PY2,PY1,PX2,PX1,threshold]=SEC_xiuzheng(PY2,PY1,PX2,PX1);%==============更新图片=============================Plate=I_bai(PY1:PY2,PX1:PX2,:);%使用caitu_tiqu%==============考虑用腐蚀解决蓝色车问题=============bw=Plate;figure,imshow(bw);title('车牌图像');%hsv彩图提取图像%==============这里要根据图像的倾斜度进行选择这里选择的图片20090425686.jpgbw=rgb2gray(bw);figure,imshow(bw);title('灰度图像');%================倾斜校正======================qingxiejiao=rando_bianhuan(bw)bw=imrotate(bw,qingxiejiao,'bilinear','crop');figure,imshow(bw);title('倾斜校正');%取值为负值向右旋转%==============================================bw=im2bw(bw,graythresh(bw));%figure,imshow(bw);bw=bwmorph(bw,'hbreak',inf);%figure,imshow(bw);bw=bwmorph(bw,'spur',inf);%figure,imshow(bw);title('擦除之前');bw=bwmorph(bw,'open',5);%figure,imshow(bw);title('闭合运算');bw = bwareaopen(bw, threshold);figure,imshow(bw);title('擦除');%==================加入进度条================================% h=waitbar(0,'程序运行中,请稍等......')% for i=1:10000% waitbar(i/5000,h)% end% close(h);%wavplay(wavread('程序运行中.wav'),22000);%==========================================================bw=~bw;figure,imshow(bw);title('擦除反色');%=============对图像进一步裁剪,保证边框贴近字体===========bw=touying(bw);figure;imshow(bw);title('Y方向处理');bw=~bw;bw = bwareaopen(bw, threshold);bw=~bw;%figure,imshow(bw);title('二次擦除');[y,x]=size(bw);%对长宽重新赋值%=================文字分割=================================fenge=shuzifenge(bw,qingxiejiao)[m,k]=size(fenge);%=================显示分割图像结果=========================figure;for s=1:2:k-1subplot(1,k/2,(s+1)/2);imshow(bw( 1:y,fenge(s):fenge(s+1)));end%================ 给七张图片定位===============桂AV6388han_zi =bw( 1:y,fenge(1):fenge(2));zi_mu =bw( 1:y,fenge(3):fenge(4));zm_sz_1 =bw( 1:y,fenge(5):fenge(6));zm_sz_2 =bw( 1:y,fenge(7):fenge(8));shuzi_1 =bw( 1:y,fenge(9):fenge(10));shuzi_2 =bw( 1:y,fenge(11):fenge(12));shuzi_3 =bw( 1:y,fenge(13):fenge(14));%==========================识别====================================%======================把修正数据读入============================== xiuzhenghanzi = imresize(han_zi, [110 55],'bilinear');xiuzhengzimu = imresize(zi_mu, [110 55],'bilinear');xiuzhengzm_sz_1= imresize(zm_sz_1,[110 55],'bilinear');xiuzhengzm_sz_2 = imresize(zm_sz_2,[110 55],'bilinear');xiuzhengshuzi_1 = imresize(shuzi_1,[110 55],'bilinear');xiuzhengshuzi_2 = imresize(shuzi_2,[110 55],'bilinear');xiuzhengshuzi_3 = imresize(shuzi_3,[110 55],'bilinear');%============ 把0-9 , A-Z以及省份简称的数据存储方便访问==================== hanzishengfen=duquhanzi(imread('cpgui.bmp'),imread('cpguizhou.bmp'),imread('cpjing.bmp'),im read('cpsu.bmp'),imread('cpyue.bmp'));%因数字和字母比例不同。

(完整版)基于matlab的车牌识别(含子程序)

(完整版)基于matlab的车牌识别(含子程序)

基于matlab的车牌识别系统一、对车辆图像进行预处理1.载入车牌图像:function [d]=main(jpg)[filename, pathname] = uigetfile({'*.jpg', 'JPEG 文件(*.jpg)'});if(filename == 0), return, endglobal FILENAME %定义全局变量FILENAME = [pathname filename];I=imread(FILENAME);figure(1),imshow(I);title('原图像');%将车牌的原图显示出来结果如下:2.将彩图转换为灰度图并绘制直方图:I1=rgb2gray(I);%将彩图转换为灰度图figure(2),subplot(1,2,1),imshow(I1);title('灰度图像');figure(2),subplot(1,2,2),imhist(I1);title('灰度图直方图');%绘制灰度图的直方图结果如下所示:3. 用roberts算子进行边缘检测:I2=edge(I1,'roberts',0.18,'both');%选择阈值0.18,用roberts算子进行边缘检测figure(3),imshow(I2);title('roberts 算子边缘检测图像');结果如下:4.图像实施腐蚀操作:se=[1;1;1];I3=imerode(I2,se);%对图像实施腐蚀操作,即膨胀的反操作figure(4),imshow(I3);title('腐蚀后图像');5.平滑图像se=strel('rectangle',[25,25]);%构造结构元素以正方形构造一个seI4=imclose(I3,se);% 图像聚类、填充图像figure(5),imshow(I4);title('平滑图像');结果如下所示:6. 删除二值图像的小对象I5=bwareaopen(I4,2000);% 去除聚团灰度值小于2000的部分figure(6),imshow(I5);title('从对象中移除小的对象');结果如下所示:二、车牌定位[y,x,z]=size(I5);%返回I5各维的尺寸,存储在x,y,z中myI=double(I5);%将I5转换成双精度tic %tic表示计时的开始,toc表示计时的结束Blue_y=zeros(y,1);%产生一个y*1的零阵for i=1:yfor j=1:xif(myI(i,j,1)==1)%如果myI(i,j,1)即myI的图像中坐标为(i,j)的点值为1,即该点为车牌背景颜色蓝色 %则Blue_y(i,1)的值加1Blue_y(i,1)= Blue_y(i,1)+1;%蓝色像素点统计endendend[temp MaxY]=max(Blue_y);%Y方向车牌区域确定%temp为向量white_y的元素中的最大值,MaxY为该值的索引PY1=MaxY;while ((Blue_y(PY1,1)>=5)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while ((Blue_y(PY2,1)>=5)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);%x方向车牌区域确定%%%%%% X方向 %%%%%%%%%Blue_x=zeros(1,x);%进一步确定x方向的车牌区域for j=1:xfor i=PY1:PY2if(myI(i,j,1)==1)Blue_x(1,j)= Blue_x(1,j)+1; endendendPX1=1;while ((Blue_x(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while ((Blue_x(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPX1=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('定位裁剪后的车牌彩色图像');的车牌区域如下所示:三、字符分割及处理1.车牌的进一步处理对分割出的彩色车牌图像进行灰度转换、二值化、均值滤波、腐蚀膨胀以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像,对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。

基于MATLAB的车牌识别程序详解..精要

基于MATLAB的车牌识别程序详解..精要
预处理部分,将采集到的图像转换为灰度图像, 便于后面处理,同时显示原图的图片以及处理好的灰度图片。
(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为边长的正方形结构体 图
(一)图像预处理 收集到的图片一般为彩色图片,由于彩色图片占用存储容
量大,处理时间长,因此需要对图像进行灰度转换,将彩色图像转 换为灰度图像,灰度图像只保留亮度信息,方便使用,也为后面的 对图像进行二值化处理提供方便。
程序:I1=rgb2gray(I); rgb2gray,MATLAB中灰度图像转换函数,原图及处理后的
PX1=PX1+1; end %从上至下截取一段区域,区域上限位PY1 PX2=x; while ((Blue_x(1,PX2)<3)&&(PX2>PX1))

如何使用Matlab技术进行车牌识别

如何使用Matlab技术进行车牌识别

如何使用Matlab技术进行车牌识别车牌识别技术是一种在现代交通管理、安保等领域应用广泛的技术。

通过使用Matlab软件,我们可以轻松实现车牌识别功能。

本文将介绍如何使用Matlab技术进行车牌识别。

一、图像预处理在进行车牌识别之前,首先需要对图像进行预处理。

图像预处理的目的是提取车牌信息并减小噪声干扰。

在Matlab中,我们可以使用一系列图像处理函数来实现图像预处理,包括图像二值化、边缘检测、形态学操作等。

这些函数可以帮助我们提取车牌轮廓,并去除背景和噪声。

二、车牌定位车牌定位是车牌识别的关键步骤之一。

通过车牌定位,我们可以找到图像中的车牌区域,并将其与其他区域进行区分。

在Matlab中,可以使用图像分割、形态学滤波等技术来实现车牌定位。

这些技术可以帮助我们提取车牌的形状、颜色和纹理等特征,并将其与其他区域进行区分。

三、字符分割一旦我们成功地定位了车牌区域,就需要将车牌中的字符进行分割。

字符分割是车牌识别中的一个重要环节。

通过将车牌中的字符进行分割,我们可以得到单个字符的图像,为后续的字符识别做准备。

在Matlab中,可以使用一系列图像处理函数来实现字符分割,包括边缘检测、连通性分析和投影分析等。

这些函数可以帮助我们将车牌中的字符与其他区域进行分离。

四、字符识别字符识别是车牌识别的核心任务。

通过对字符进行识别,我们可以得到车牌中的文本信息。

在Matlab中,可以使用模式识别、神经网络或者深度学习等技术来实现字符识别。

这些技术可以帮助我们训练一个分类器,将字符图像与对应的字符进行匹配。

通过匹配算法,我们可以得到车牌的文本信息。

五、车牌识别结果展示在进行车牌识别之后,我们可以将识别结果进行展示。

通过将识别结果与原始图像进行对比,我们可以验证车牌识别的准确性。

在Matlab中,可以使用图像绘制函数和文本显示函数来实现车牌识别结果的展示。

通过这些函数,我们可以在原始图像中标注出识别结果,并将结果显示在图像上。

MATLAB车牌识别过程

MATLAB车牌识别过程

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:yfor j=1:xif((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; %统计蓝色像素点endendend[temp MaxY]=max(Blue_y); %PY1=MaxY;%while ((Blue_y(PY1,1)>=Y_threshlow)&&(PY1>1)) %PY1=PY1-1;endPY2=MaxY;while ((Blue_y(PY2,1)>=Y_threshlow)&&(PY2<y))%ÕÒµ½Í¼Æ¬Éϱ߽çPY2=PY2+1;endPY1, PY2figure(2),subplot(1,2,1),plot(Blue_y),title('行方向的蓝色像素点统计');grid onIY=I(PY1:PY2,:,:);figure(2),subplot(1,2,2),imshow(IY),title('行方向车牌区域');运行结果如下:同理可得X轴方向的车牌区域:两者结合可提取出完整的车牌区域:7.3.3 车牌图像灰度化由于车牌底色跟上面的字符的颜色对比度很大,所以将RGB图像转化为灰度图时,车牌底色跟字符的灰度值也会相差很大,这样就可以很明显的显现出车牌区域,便于后续处理。

车牌识别的matlab程序文件

车牌识别的matlab程序文件

附录车牌识别程序clear ;close all;%Step1 获取图像装入待处理彩色图像并显示原始图像Scolor = imread('3.jpg');%imread函数读取图像文件%将彩色图像转换为黑白并显示Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图figure,imshow(Scolor),title('原始彩色图像');%figure命令同时显示两幅图figure,imshow(Sgray),title('原始黑白图像');%Step2 图像预处理对Sgray 原始黑白图像进行开操作得到图像背景s=strel('disk',13);%strel函数Bgray=imopen(Sgray,s);%打开sgray s图像figure,imshow(Bgray);title('背景图像');%输出背景图像%用原始图像与背景图像作减法,增强图像Egray=imsubtract(Sgray,Bgray);%两幅图相减figure,imshow(Egray);title('增强黑白图像');%输出黑白图像%Step3 取得最佳阈值,将图像二值化fmax1=double(max(max(Egray)));%egray的最大值并输出双精度型fmin1=double(min(min(Egray)));%egray的最小值并输出双精度型level=(fmax1-(fmax1-fmin1)/3)/255;%获得最佳阈值bw22=im2bw(Egray,level);%转换图像为二进制图像bw2=double(bw22);%Step4 对得到二值图像作开闭操作进行滤波figure,imshow(bw2);title('图像二值化');%得到二值图像grd=edge(bw2,'canny')%用canny算子识别强度图像中的边界figure,imshow(grd);title('图像边缘提取');%输出图像边缘bg1=imclose(grd,strel('rectangle',[5,19]));%取矩形框的闭运算figure,imshow(bg1);title('图像闭运算[5,19]');%输出闭运算的图像bg3=imopen(bg1,strel('rectangle',[5,19]));%取矩形框的开运算figure,imshow(bg3);title('图像开运算[5,19]');%输出开运算的图像bg2=imopen(bg3,strel('rectangle',[19,1]));%取矩形框的开运算figure,imshow(bg2);title('图像开运算[19,1]');%输出开运算的图像%Step5 对二值图像进行区域提取,并计算区域特征参数。

车牌识别的matlab程序-(详细注释,并有使用注意点)

车牌识别的matlab程序-(详细注释,并有使用注意点)

附录车牌识别程序clear ;close all;%Step1 获取图像装入待处理彩色图像并显示原始图像Scolor = imread('3.jpg');%imread函数读取图像文件%将彩色图像转换为黑白并显示Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图figure,imshow(Scolor),title('原始彩色图像');%figure命令同时显示两幅图figure,imshow(Sgray),title('原始黑白图像');%Step2 图像预处理对Sgray 原始黑白图像进行开操作得到图像背景s=strel('disk',13);%strel函数Bgray=imopen(Sgray,s);%打开sgray s图像figure,imshow(Bgray);title('背景图像');%输出背景图像%用原始图像与背景图像作减法,增强图像Egray=imsubtract(Sgray,Bgray);%两幅图相减figure,imshow(Egray);title('增强黑白图像');%输出黑白图像%Step3 取得最佳阈值,将图像二值化fmax1=double(max(max(Egray)));%egray的最大值并输出双精度型fmin1=double(min(min(Egray)));%egray的最小值并输出双精度型level=(fmax1-(fmax1-fmin1)/3)/255;%获得最佳阈值bw22=im2bw(Egray,level);%转换图像为二进制图像bw2=double(bw22);%Step4 对得到二值图像作开闭操作进行滤波figure,imshow(bw2);title('图像二值化');%得到二值图像grd=edge(bw2,'canny')%用canny算子识别强度图像中的边界figure,imshow(grd);title('图像边缘提取');%输出图像边缘bg1=imclose(grd,strel('rectangle',[5,19]));%取矩形框的闭运算figure,imshow(bg1);title('图像闭运算[5,19]');%输出闭运算的图像bg3=imopen(bg1,strel('rectangle',[5,19]));%取矩形框的开运算figure,imshow(bg3);title('图像开运算[5,19]');%输出开运算的图像bg2=imopen(bg3,strel('rectangle',[19,1]));%取矩形框的开运算figure,imshow(bg2);title('图像开运算[19,1]');%输出开运算的图像%Step5 对二值图像进行区域提取,并计算区域特征参数。

汽车标志识别设计_MATLAB程序设计

汽车标志识别设计_MATLAB程序设计

汽车标志识别设计_MATLAB程序设计设计目的:车牌定位系统的目的在于正确获取整个图像中车标的区域,并识别出车标。

程序效果:程序实现:STEP1:输入待处理的原始图像:程序:1234 clear;clc;close all; %Step1 获取图像装入待处理彩色图像并显示原始图像Scolor = imread('1.jpg');%imread 函数读取图像文件subplot(3,4,1);imshow(Scolor),title('原始图像')输出:SETP2:图像的灰度化:彩色图像包含着大量的颜色信息,不但在存储上开销很大,而且在处理上也会降低系统的执行速度,因此在对图像进行识别等处理中经常将彩色图像转变为灰度图像,以加快处理速度。

由彩色转换为灰度的过程叫做灰度化处理。

选择的标准是经过灰度变换后,像素的动态范围增加,图像的对比度扩展,使图像变得更加清晰、细腻、容易识别。

程序:输出:原始图像1 2 3 %将彩色图像转换为黑白并显示Sgray = rgb2gray(Scolor);%rgb2gray 转换成灰度图subplot(3,4,2);imshow(Sgray),title('原始黑白图像');STEP3:对原始图像进行开操作得到图像背景图像:程序:1 2 3 4 %对原始图像进行开操作得到图像背景图像:s=strel('disk',13);%strei函数Bgray=imopen(Sgray,s);%打开sgray s图像subplot(3,4,3);imshow(Bgray);title('背景图像');%输出背景图像输出:原始黑白图像STEP4: 灰度图像与背景图像作减法,对图像进行增强处理: 程序:1 2 3 %灰度图像与背景图像作减法,对图像进行增强处理:Egray=imsubtract(Sgray,Bgray);%两幅图相减subplot(3,4,4);imshow(Egray);title('增强黑白图像');%输出黑白图像输出:背景图像增强黑白图像STEP5: 取得最佳阈值,将图像二值化:二值图像是指整幅图像画面内仅黑、白二值的图像。

车牌识别的matlab程序(程序-讲解-模板)

车牌识别的matlab程序(程序-讲解-模板)

clcclearclose allI=imread('chepai.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];endendendmini=inf;maxi=0;for i=1:size(location_of_1,1)%寻找所有白点中,x坐标与y坐标的和最大,最小的两个点的位置temp=location_of_1(i,1)+location_of_1(i,2);if temp<minimini=temp;a=i;endif temp>maximaxi=temp;b=i;endendfirst_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);I_plate=OTSU(I_plate); %以OTSU算法对分割出的车牌进行自适应二值化处理I_plate=bwareaopen(I_plate,50);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);endendfigurefor n=1:7char=I_plate(:,X(2*n-1):X(2*n)-1); %进行粗分割for i=1:size(char,1) %这两个for循环对分割字符的上下进行裁剪if sum(char(i,:))~=0top=i;breakendendfor i=1:size(char,1)if sum(char(size(char,1)-i,:))~=0bottom=size(char,1)-i;breakendendchar=char(top:bottom,:);subplot(2,4,n);imshow(char);char=imresize(char,[32,16],'nearest'); %归一化为32*16的大小,以便模板匹配eval(strcat('Char_',num2str(n),'=char;')); %将分割的字符放入Char_i中end%========================== 字符识别============================= char=[];store1=strcat('京','津','沪','渝','冀','晋','辽','吉','黑','苏','浙'... %汉字识别,'皖','闽','赣','鲁','豫','鄂','湘','粤','琼','川','贵','云','陕'...,'甘','青','藏','桂','皖','新','宁','港','鲁','蒙');for j=1:34Im=Char_1;Template=imread(strcat('chinese\',num2str(j),'.bmp')); %chinese文件附在最后Template=im2bw(Template);Differ=Im-Template;Compare(j)=sum(sum(abs(Differ)));endindex=find(Compare==(min(Compare)));char=[char store1(index)];store2=strcat('A','B','C','D','E','F','G','H','J','K','L','M','M','N','P','Q','R'...,'S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');for i=2:7 %字母数字识别for j=1:35Im=eval(strcat('Char_',num2str(i)));Template=imread(strcat('cha&num\',num2str(j),'.bmp')); %cha&num文件附在最后Template=im2bw(Template);Differ=Im-Template;Compare(j)=sum(sum(abs(Differ)));endindex=find(Compare==(min(Compare)));char=[char store2(index)];endfigure,imshow(I),title(strcat('车牌为:',char))信研-11 XX 2011301XXXXXX模式识别作业—车牌识别1、作业要求:要求:任给一幅符合假定的图片,自动识别出车牌号。

车牌识别地matlab程序--详细注释,并有使用注意点

车牌识别地matlab程序--详细注释,并有使用注意点

附录车牌识别程序clear ;close all;%Step1 获取图像装入待处理彩色图像并显示原始图像Scolor = imread('3.jpg');%imread函数读取图像文件%将彩色图像转换为黑白并显示Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图figure,imshow(Scolor),title('原始彩色图像');%figure命令同时显示两幅图figure,imshow(Sgray),title('原始黑白图像');%Step2 图像预处理对Sgray 原始黑白图像进行开操作得到图像背景s=strel('disk',13);%strel函数Bgray=imopen(Sgray,s);%打开sgray s图像figure,imshow(Bgray);title('背景图像');%输出背景图像%用原始图像与背景图像作减法,增强图像Egray=imsubtract(Sgray,Bgray);%两幅图相减figure,imshow(Egray);title('增强黑白图像');%输出黑白图像%Step3 取得最佳阈值,将图像二值化fmax1=double(max(max(Egray)));%egray的最大值并输出双精度型fmin1=double(min(min(Egray)));%egray的最小值并输出双精度型level=(fmax1-(fmax1-fmin1)/3)/255;%获得最佳阈值bw22=im2bw(Egray,level);%转换图像为二进制图像bw2=double(bw22);%Step4 对得到二值图像作开闭操作进行滤波figure,imshow(bw2);title('图像二值化');%得到二值图像grd=edge(bw2,'canny')%用canny算子识别强度图像中的边界figure,imshow(grd);title('图像边缘提取');%输出图像边缘bg1=imclose(grd,strel('rectangle',[5,19]));%取矩形框的闭运算figure,imshow(bg1);title('图像闭运算[5,19]');%输出闭运算的图像bg3=imopen(bg1,strel('rectangle',[5,19]));%取矩形框的开运算figure,imshow(bg3);title('图像开运算[5,19]');%输出开运算的图像bg2=imopen(bg3,strel('rectangle',[19,1]));%取矩形框的开运算figure,imshow(bg2);title('图像开运算[19,1]');%输出开运算的图像%Step5 对二值图像进行区域提取,并计算区域特征参数。

基于matlab的汽车牌照识别源程序

基于matlab的汽车牌照识别源程序

基于matlab的车牌识别的源程序clcclearfilename='E:\matlab7.0\car.jpg';%图片的路径I=im2gray(filename);%调用自编函数读取图像,并转化为灰度图象;tic%计时开始[height,width]=size(I);%预处理I_edge=zeros(height,width);%创建height*width矩阵for i=1:width-1%对每一列进行遍历I_edge(:,i)=abs(I(:,i+1)-I(:,i));%每列的值赋为原图像中左右两列相减的绝对值(即梯度)end%归一化处理(0~255)I_edge=(255/(max(max(I_edge))-min(min(I_edge))))*(I_edge-min(min(I_edge)));[I_edge,y1]=select(I_edge,height,width);%%%%%%调用select函数选择图像的某个区域BW2 = I_edge;%%%%%%%%%%%%%%%%%一些形态学处理SE=strel('rectangle',[10,10]);%创建10*10的建构元素IM2=imerode(BW2,SE);%腐蚀IM2=bwareaopen(IM2,20);%删除小面积IM3=imdilate(IM2,SE);%膨胀%先腐蚀再膨胀,进行了开运算,消除小物体%%%%%%%%%%%%%%%%%%投影以粗略估计车牌位置p_h=projection(double(IM3),'h');%调用projection函数,水平方向if(p_h (1)>0)p_h=[0,p_h];endp_v=projection(double(IM3),'v');%调用projection函数,垂直方向if(p_v (1)>0)p_v=[0,p_v];end%%%%%%p_h=double((p_h>5));%水平方向p_h=find(((p_h(1:end-1)-p_h(2:end))~=0));len_h=length(p_h)/2;%%%%%p_v=double((p_v>5));%垂直方向p_v=find(((p_v(1:end-1)-p_v(2:end))~=0));len_v=length(p_v)/2;%%%%%%%%%%% %%%%%%%%%%%%%%%%%粗略计算车牌候选区k=1;for i=1:len_hfor j=1:len_vs=IM3(p_h(2*i-1):p_h(2*i),p_v(2*j-1):p_v(2*j));if(mean(mean(s))>0.1)p{k}=[p_h(2*i-1),p_h(2*i)+1,p_v(2*j-1),p_v(2*j)+1];k=k+1;endendendk=k-1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%进一步缩小车牌候选区for i=1:kedge_IM3=double(edge(double(IM3(p{i}(1):p{i}(2),p{i}(3):p{i}(4))),'canny'));[x,y]=find(edge_IM3==1); p{i}=[p{i}(1)+min(x),p{i}(2)-(p{i}(2)-p{i}(1)+1-max(x)),...p{i}(3)+min(y),p{i}(4)-(p{i}(4)-p{i}(3)+1-max(y))];p_center{i}=[fix((p{i}(1)+p{i}(2))/2),fix((p{i}(3)+p{i}(4))/2)];p_ratio(i)=(p{i}(4)-p{i}(3))/(p{i}(2)-p{i}(1));end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%对上面参数和变量的说明:p为一胞元,用于存放每个图像块的左上和右下两个点的坐标;%存放格式为:p{k}=[x1,x2,y1,y2];x1,x2分别为行坐标,y1,y2为列坐标%p_center为一胞元,用于存放每个图像块的中心坐标,p_center{k}=[x,y];x,y分别为行,列坐标%p_ratio为一矩阵,用来存放图像块的长宽比例%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%合并临近区域%%%%%%%%如果有多个区域则执行合并if k>1n=0;ncount=zeros(1,k);for i=1:k-1%%%需要调整if条件中的比例%%%需要调整%检查是否满足合并条件if(abs(p{i}(1)+p{i}(2)-p{i+1}(1)-p{i+1}(2))<=height/30&&abs(p{i+1}(3)-p{i}(4))<=width/15)p{i+1}(1)=min(p{i}(1),p{i+1}(1));p{i+1}(2)=max(p{i}(2),p{i+1}(2));p{i+1}(3)=min(p{i}(3),p{i+1}(3));(4)=max(p{i}(4),p{i+1}(4));%向后合并n=n+1;ncount(n)=i+1;endend%如果有合并,求出合并后最终区域if(n>0)d_ncount=ncount(2:n+1)-ncount(1:n);%避免重复记录临近的多个区域。

车牌识别的matlab程序精选.

车牌识别的matlab程序精选.

附录车牌识别程序clear ;close all;%Step1 获取图像装入待处理彩色图像并显示原始图像Scolor = imread('3.jpg');%imread函数读取图像文件%将彩色图像转换为黑白并显示Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图figure,imshow(Scolor),title('原始彩色图像');%figure命令同时显示两幅图figure,imshow(Sgray),title('原始黑白图像');%Step2 图像预处理对Sgray 原始黑白图像进行开操作得到图像背景s=strel('disk',13);%strel函数Bgray=imopen(Sgray,s);%打开sgray s图像figure,imshow(Bgray);title('背景图像');%输出背景图像%用原始图像与背景图像作减法,增强图像Egray=imsubtract(Sgray,Bgray);%两幅图相减figure,imshow(Egray);title('增强黑白图像');%输出黑白图像%Step3 取得最佳阈值,将图像二值化fmax1=double(max(max(Egray)));%egray的最大值并输出双精度型fmin1=double(min(min(Egray)));%egray的最小值并输出双精度型level=(fmax1-(fmax1-fmin1)/3)/255;%获得最佳阈值bw22=im2bw(Egray,level);%转换图像为二进制图像bw2=double(bw22);%Step4 对得到二值图像作开闭操作进行滤波figure,imshow(bw2);title('图像二值化');%得到二值图像grd=edge(bw2,'canny')%用canny算子识别强度图像中的边界figure,imshow(grd);title('图像边缘提取');%输出图像边缘bg1=imclose(grd,strel('rectangle',[5,19]));%取矩形框的闭运算figure,imshow(bg1);title('图像闭运算[5,19]');%输出闭运算的图像bg3=imopen(bg1,strel('rectangle',[5,19]));%取矩形框的开运算figure,imshow(bg3);title('图像开运算[5,19]');%输出开运算的图像bg2=imopen(bg3,strel('rectangle',[19,1]));%取矩形框的开运算figure,imshow(bg2);title('图像开运算[19,1]');%输出开运算的图像%Step5 对二值图像进行区域提取,并计算区域特征参数。

车牌识别Matlab算法详解

车牌识别Matlab算法详解

生成界面时注意事项1、生成文件主菜单和打开、关闭子菜单不一样的地方,在于文件主菜单不对应实际执行代码,所以在Callback回调函数,这一项,可将其删除为空。

2、在关闭Menu Editor之前,先保存正在编辑的.fig文件,让其自动生成或者更新对应的.m 文件3、在.fig文件编辑器的空白处,双击,弹出Property Inspector,在其中更改Resize 属性为on,表示窗体大小可以更改;更改Units 的单位为pixels ;Tag的名称代表窗体的名称,默认为figure1,另取一个名称为mainFrm.注意在关闭Property Inspector之前总是先保存.fig文件4、假如程序运行出了问题,可先在Command window中查看错误说明,根据提示修改。

或者打开.m源代码文件,重新编译运行。

注意在运行之前使用命令窗口中的clc命令清空内存。

5、现在一行一行来解释源代码。

第一行:function varargout = LicenseRecognition(varargin)分别表示主函数的输出、函数名称、函数输入在% Begin initialization code - DO NOT EDIT% End initialization code - DO NOT EDIT这两行注释符之前的代码是编辑菜单时自动生成的,不需要修改function LicenseRecognition_OpeningFcn(hObject, eventdata, handles, varargin)%系统自动生成handles.output = hObject; %系统自动生成——————————————————————————————————%以下代码为手工添加,表示使用handles结构体来保存图形界面中各种对象的句柄,或者中间结果,这些句柄或者中间结果在创建图形对象或运算中产生,需要在以后的回调函数中多次用到,所以这里的作用类似于全局变量的作用,用来进行数据的传递。

(完整word版)基于Matlab的车牌识别(完整版)

(完整word版)基于Matlab的车牌识别(完整版)

基于Matlab的车牌识别摘要:车牌识别技术是智能交通系统的重要组成部分,在近年来得到了很大的发展。

本文从预处理、边缘检测、车牌定位、字符分割、字符识别五个方面,具体介绍了车牌自动识别的原理。

并用MATLAB软件编程来实现每一个部分,最后识别出汽车车牌。

一、设计原理车辆车牌识别系统的基本工作原理为:将摄像头拍摄到的包含车辆车牌的图像通过视频卡输入到计算机中进行预处理,再由检索模块对车牌进行搜索、检测、定位,并分割出包含车牌字符的矩形区域,然后对车牌字符进行二值化并将其分割为单个字符,然后输入JPEG或BMP格式的数字,输出则为车牌号码的数字。

车牌自动识别是一项利用车辆的动态视频或静态图像进行车牌号码、车牌颜色自动识别的模式识别技术。

其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。

某些车牌识别系统还具有通过视频图像判断车辆驶入视野的功能称之为视频车辆检测。

一个完整的车牌识别系统应包括车辆检测、图像采集、车牌识别等几部分。

当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。

车牌识别单元对图像进行处理,定位出车牌位置,再将车牌中的字符分割出来进行识别,然后组成车牌号码输出。

二、设计步骤总体步骤为:基本的步骤:a.车牌定位,定位图片中的车牌位置;b.车牌字符分割,把车牌中的字符分割出来;c.车牌字符识别,把分割好的字符进行识别,最终组成车牌号码。

车牌识别过程中,车牌颜色的识别依据算法不同,可能在上述不同步骤实现,通常与车牌识别互相配合、互相验证。

(1)车牌定位:自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定车牌区域是整个识别过程的关键。

首先对采集到的视频图像进行大范围相关搜索,找到符合汽车车牌特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为车牌区域,并将其从图象中分割出来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clcclearclose allI=imread('chepai.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];endendendmini=inf;maxi=0;for i=1:size(location_of_1,1)%寻找所有白点中,x坐标与y坐标的和最大,最小的两个点的位置temp=location_of_1(i,1)+location_of_1(i,2);if temp<minimini=temp;a=i;endif temp>maximaxi=temp;b=i;endendfirst_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);I_plate=OTSU(I_plate); %以OTSU算法对分割出的车牌进行自适应二值化处理I_plate=bwareaopen(I_plate,50);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);endendfigurefor n=1:7char=I_plate(:,X(2*n-1):X(2*n)-1); %进行粗分割for i=1:size(char,1) %这两个for循环对分割字符的上下进行裁剪if sum(char(i,:))~=0top=i;breakendendfor i=1:size(char,1)if sum(char(size(char,1)-i,:))~=0bottom=size(char,1)-i;breakendendchar=char(top:bottom,:);subplot(2,4,n);imshow(char);char=imresize(char,[32,16],'nearest'); %归一化为32*16的大小,以便模板匹配eval(strcat('Char_',num2str(n),'=char;')); %将分割的字符放入Char_i中end%========================== 字符识别=============================char=[];store1=strcat('京','津','沪','渝','冀','晋','辽','吉','黑','苏','浙'... %汉字识别,'皖','闽','赣','鲁','豫','鄂','湘','粤','琼','川','贵','云','陕'...,'甘','青','藏','桂','皖','新','宁','港','鲁','蒙');for j=1:34Im=Char_1;Template=imread(strcat('chinese\',num2str(j),'.bmp')); %chinese文件附在最后Template=im2bw(Template);Differ=Im-Template;Compare(j)=sum(sum(abs(Differ)));endindex=find(Compare==(min(Compare)));char=[char store1(index)];store2=strcat('A','B','C','D','E','F','G','H','J','K','L','M','M','N','P','Q','R'...,'S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');for i=2:7 %字母数字识别for j=1:35Im=eval(strcat('Char_',num2str(i)));Template=imread(strcat('cha&num\',num2str(j),'.bmp')); %cha&num文件附在最后Template=im2bw(Template);Differ=Im-Template;Compare(j)=sum(sum(abs(Differ)));endindex=find(Compare==(min(Compare)));char=[char store2(index)];endfigure,imshow(I),title(strcat('车牌为:',char))信研-11 XX 2011301XXXXXX模式识别作业—车牌识别1、作业要求:要求:任给一幅符合假定的图片,自动识别出车牌号。

如:给定如下图片,自动输出(京JX9168)2、设计步骤:所设计的车牌识别的流程包括图像预处理,车牌分割,字符分割,及字符识别。

详见matalb程序。

3、程序讲解1)第一部分为图像的预处理。

此部分借鉴了别人的程序,将灰度图像以sobel算子检测边缘;再对边缘图像进行腐蚀,去除掉细的,间断的边缘;对剩下的区域进行闭合以填充图像,此时可以看到车牌区域形成了一个大的连通域;调用bwareaopen函数去掉小的连通域,此时整个二值图像只b剩下了车牌区域为1。

如下图所示:2)第二部分为车牌的提取此部分的工作为将上一步的白色区域取出,其对应的就是车牌区域。

设计思路如下:首先将二值图像f中所有为1的点的坐标放入数组location_of_1中,对这些坐标遍历计算,寻找x坐标与y坐标之和最大的点a与最小的点b,a即为车牌的左上角,b为车牌的右下角。

通过这两个坐标将车牌分割出来,并对灰度车牌图像以OTSU算法进行自适应二值化分割。

最终效果如下:3)第三部分为字符分割此部分的工作是将车牌里的7个字符分别提取出来。

方法如下:对该二值图从左向右像按列z遍历,计算每一列之和,没有白点的列和为0,有白点的列和非零,转换为逻辑1,记录下所有列和在0与1转换的列,即为需要切割的列,共有14列,可切出7个字符。

切割出单个字符后,放入char_(i)中,并切割掉每个字符的上下的空白区域,完成精确切割,效果如下:4)第四部分为字符的识别识别的方法主要有模板匹配字符识别算法,统计特征匹配算法,神经网络字符识别算法和支持向量机模式识别算法。

由于分割的字符效果较好,为明显畸变,模k板维数低(32*16),且因为时间关系,这里采用了模板匹配识别算法。

该程序把切割出的字符与库里的汉字和字符的模板做减法运算,找到差别点最少的模板为对应模板,输出该模板对应的字符,最后识别出其为“京JX9168”。

相关文档
最新文档