一种改进的汽车牌照字符分割算法及MATLAB实现
用matlab编程实现车牌字符的批量分割并保存

%subplot(5,7,32),imshow(word4),title('4');
%subplot(5,7,33),imshow(word5),title('5');
subplot(5,7,16),imshow(word2),title('2');
subplot(5,7,17),imshow(word3),title('3');
subplot(5,7,18),imshow(word4),title('4');
'*.*','All Files (*.*)'};
% 利用uigetfile函数交互式选取训练样本图片
[FileName FilePath,flag] = uigetfile(PicFormat,'导入分割好的车牌图像',...
'*.jpg','MultiSelect','on');
%imshow(I1);
%I1=getplate(I);%提取车牌
I2=binaryzation3(I1);%车牌二值化
%I3=rotate(I2);
%figure,subplot(211),imshow(I1),title('定位剪切彩色车牌');
车牌分割matlab开发程序

车牌分割matlab开发程序来源于人民邮电出版社Visual C++/MA TLAB 图像处理与识别实用案例精选I=imread('Car.jpg');[y,x,z]=size(I);myI=double(I);%%%%%%%%%%% RGB to HSI %%%%%%%%tic % 测定算法执行的时间,开始计时%%%%%%%%%%% 统计分析%%%%%%%%%%%%%%%%%%%%%%% Y方向%%%%%%%%%%Blue_y=zeros(y,1);for i=1:yfor j=1:xif((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3) >=119)))% 蓝色RGB的灰度范围Blue_y(i,1)= Blue_y(i,1)+1; % 蓝色象素点统计endendend[temp MaxY]=max(Blue_y); % Y方向车牌区域确定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 方向%%%%%%%%%%Blue_x=zeros(1,x); % 进一步确定X方向的车牌区域for j=1:xfor i=PY1:PY2if((myI(i,j,1)<=30)&&((myI(i,j,2)<=62)&&(myI(i,j,2)>=51))&&((myI(i,j,3)<=142)&&(myI(i,j,3) >=119)))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-2; % 对车牌区域的修正PX2=PX2+2;Plate=I(PY1:PY2,PX1-2:PX2,:);t=toc % 读取计时%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%figure,imshow(I);figure,plot(Blue_y);gridfigure,plot(Blue_x);gridfigure,imshow(IY);figure,imshow(Plate);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%文字识别子函数function [Numeral]=Recognition(StrokeTop,StrokeLeft,StrokeRight,StrokeBottom,Comp) % 采用四边的轮廓结构特征和笔划统计(仅针对0 和8)识别残缺数字% Comp 是用于识别0和8 的底部补充信息StrT='T';StrL='T';StrR='T';StrB='T';RStr='T'; % 用于保存识别出的数字[temp XT]=size(StrokeTop);[temp XL]=size(StrokeLeft);[temp XR]=size(StrokeRight);%[temp XB]=size(StrokeBottom);for Ti=2:XTif (StrokeTop(Ti)=='C')if ((XL==2)&&(XR==2))if ((Comp>=3)||((StrokeBottom(2)~='C')&&(StrokeLeft(2)=='C')&&(StrokeRight(2)=='C'))) RStr='8';elseRStr='0';endelse if ((StrokeLeft(XL)=='L')&&(StrokeLeft(XL-1)=='P')&&(StrokeLeft(2)~='C')) RStr='2';else if ((StrokeLeft(2)=='C')&&(XL>=3)&&(StrokeLeft(3)=='P'))RStr='9';else if (XL>2)for Li=2:XLif (StrokeLeft(Li)=='P')RStr='3';endendelse if (XL==2)for Ri=2:XR-1if (StrokeRight(Ri)=='P')RStr='6';endendendendendendendelse if (StrokeTop(Ti)=='V') % Topif ((XR==2)&&(StrokeRight(2)=='C')) % 数字3 右端只有一个结构RStr='3';else if ((XR==2)&&((StrokeLeft(2)=='P')||(StrokeLeft(3)=='P')||(StrokeLeft(XL)=='V'))) RStr='7';else if (XR>2)for Ri=2:XRif (StrokeRight(Ri)=='P')RStr='5';endendendendendelse if ((StrokeTop(Ti)=='L')) % Topif ((StrokeRight(XR)=='V')&&(XR<=2))RStr='4';elsefor Ri=2:XRif ((StrokeRight(Ri)=='L')||(StrokeRight(Ri)=='C'))RStr='6';endendendendend %对应于'V'end % 对应于'C'end % 对应于第一个for 循环Numeral=RStr; 来源研学论坛Matlab实现①装入待处理图象并显示原始图象,如①图所示:clear;close all;i=imread('原始图象');figure,imshow(i);......Matlab程序:clear;close all;i=imread('原始图象');figure,imshow(i);%装入待处理图象并显示原始图象s=strel('disk',10);bg=imopen(i,s);figure,imshow(bg);%对‘原始图象’进行开操作得到图象背景bw=imsubtract(i,bg);figure,imshow(bw);%用原始图象与背景图象作减法%figure,imhist(i);%求图象直方图level=0.5;bw2=im2bw(bw,level);figure,imshow(bw2);%通过图象的直方图取得阈值,将图象二值化。
如何使用Matlab技术进行车牌识别

如何使用Matlab技术进行车牌识别车牌识别技术是一种在现代交通管理、安保等领域应用广泛的技术。
通过使用Matlab软件,我们可以轻松实现车牌识别功能。
本文将介绍如何使用Matlab技术进行车牌识别。
一、图像预处理在进行车牌识别之前,首先需要对图像进行预处理。
图像预处理的目的是提取车牌信息并减小噪声干扰。
在Matlab中,我们可以使用一系列图像处理函数来实现图像预处理,包括图像二值化、边缘检测、形态学操作等。
这些函数可以帮助我们提取车牌轮廓,并去除背景和噪声。
二、车牌定位车牌定位是车牌识别的关键步骤之一。
通过车牌定位,我们可以找到图像中的车牌区域,并将其与其他区域进行区分。
在Matlab中,可以使用图像分割、形态学滤波等技术来实现车牌定位。
这些技术可以帮助我们提取车牌的形状、颜色和纹理等特征,并将其与其他区域进行区分。
三、字符分割一旦我们成功地定位了车牌区域,就需要将车牌中的字符进行分割。
字符分割是车牌识别中的一个重要环节。
通过将车牌中的字符进行分割,我们可以得到单个字符的图像,为后续的字符识别做准备。
在Matlab中,可以使用一系列图像处理函数来实现字符分割,包括边缘检测、连通性分析和投影分析等。
这些函数可以帮助我们将车牌中的字符与其他区域进行分离。
四、字符识别字符识别是车牌识别的核心任务。
通过对字符进行识别,我们可以得到车牌中的文本信息。
在Matlab中,可以使用模式识别、神经网络或者深度学习等技术来实现字符识别。
这些技术可以帮助我们训练一个分类器,将字符图像与对应的字符进行匹配。
通过匹配算法,我们可以得到车牌的文本信息。
五、车牌识别结果展示在进行车牌识别之后,我们可以将识别结果进行展示。
通过将识别结果与原始图像进行对比,我们可以验证车牌识别的准确性。
在Matlab中,可以使用图像绘制函数和文本显示函数来实现车牌识别结果的展示。
通过这些函数,我们可以在原始图像中标注出识别结果,并将结果显示在图像上。
基于改进连通域算法的车牌字符分割方法

第36卷第2期杭州电子科技大学学报(自然科学版)Vol.36No.2 2016年3月Journal of Hangzhou Dianzi University(Natural Sciences)Mar.2016 DOI:10.13954/j.cnki.hdu.2016.02.010基于改进连通域算法的车牌字符分割方法朱亚萍,邱锦山,杨成忠(杭州电子科技大学浙江省物联感知与信息融合技术重点实验室,浙江杭州310018)收稿日期:2015-06-23基金项目:国家自然科学基金资助项目(61427808)作者简介:朱亚萍(1962-),女,江苏张家港人,教授,检测技术与自动化装置.摘要:为了解决车牌字符分割中不连通汉字分割、粘连字符分割以及竖直边框干扰等问题,提出了一种基于改进连通域算法的车牌字符分割方法.采用改进的连通域算法并结合车牌尺寸的先验知识进行车牌字符的粗分割,运用二分投影法实现了车牌字符的细分割,有效地结合了改进的连通域算法与传统的二分投影法.实验结果证明,改进后的算法能较好地解决上述在字符分割中存在的问题,具有较高的实用性.关键词:车牌;字符分割;连通域中图分类号:TP391 文献标识码:A 文章编号:1001-9146(2016)02-0048-040 引 言现代交通管理系统智能化是智慧城市的一个重要发展方向,而汽车牌照自动识别系统是其不可或缺的一环[1].车牌字符的准确分割是车牌字符正确识别的前提.车牌字符分割主要存在3个难点,分别为汉字不连通、多字符粘连、竖直边框噪声干扰.对车牌字符进行分割的常用方法有投影法、连通域法、静态边界法.文献[2]使用的投影法速度快,可以解决多字符粘连,但是不能很好地解决汉字不连通问题.文献[3]使用的连通域法可以有效地分割连通的字符,但是标记算法需要扫描两遍像素点,运行速度慢,而且对汉字不连通问题也不能很好地解决.文献[4]使用的静态边界法可以解决汉字不连通问题,但是对车牌图像质量要求高.针对上述分割方法的不足以及字符分割存在的难点,本文在研究连通域算法的基础上,结合车牌尺寸的先验知识,提出了一种改进的连通域字符分割算法.1 车牌字符分割算法的流程在车牌识别系统中,对车牌进行精确定位及图像预处理后,车牌的字符需要进行逐个分割,以便于下一步进行识别.基于连通域算法的车牌字符分割算法通常会采用由粗到精的字符分割思想[5].算法流程如下:1)车牌图像预处理.对校正后的车牌图像进行光照不均校正、对比度增强、二值化处理以及尺寸归一化,预处理能有效地克服车牌图像中存在的噪声干扰;2)车牌字符粗分割.粗分割通常是采用基于连通域算法的车牌字符分割方法,对经过预处理后的车牌图像进行第一步分割;3)车牌字符细分割.细分割算法采用的是二分垂直投影法[6],可以解决字符粘连的问题,确保整个字符分割算法的可靠性.2 连通域算法的改进图像的连通区域是指具有同一像素值并且像素点位置关系符合某种规则的区域.像素点位置关系图1 连通区域的邻域模板通常考虑4-邻域和8-邻域,其邻域模板如图1所示.p为目标像素点,在二值图像中,p的像素值为1,4-邻域选取p的上、下、左、右4个点,8-邻域除了选取4-邻域的点外,还包括左上、右上、左下、右下4个点.连通域算法用于将图像中的各个连通区域找出并将属于同一区域的像素点标记为同一标记值.本文采用常用的4-邻域进行连通域算法的研究.2.1 传统的连通域算法传统的连通域算法通常需要两次扫描车牌图像进行区域的标记.首先,对车牌图像按行进行像素点的扫描,扫描时赋予每个像素点位置一个label,第一遍扫描后,通常会出现属于同一连通区域的点被标记为多个不同label的现象.因此,车牌图像需要进行第二遍按行扫描,消除同一连通区域被分别标记的现象.传统的连通域算法虽然能准确分割出连通的字符,但是需要对二值图像进行两次扫描,在同一连通域重复性标记较多的情况下,该方法的执行效率较低;并且传统的算法没有考虑车牌图像存在不连通汉字和竖直边框的情况.2.2 改进的连通域算法本文针对传统连通域法的缺陷和车牌字符分割存在的难点,对传统的连通域算法进行改进,改进的连通域算法流程如图2所示.首先,采用种子填充算法进行连通域像素点的标记,实现了单遍扫描车牌图像,相对于传统连通域标记法的两遍扫描,标记效率提高;然后,在分割连通字符的过程中,采用车牌尺寸先验知识进行校验,去除竖直边框噪声的干扰;最后,根据汉字在车牌图像中的特殊位置,分割出汉字,有效处理了汉字的不连通性问题.图2 改进的连通域算法流程图2.2.1 基于种子填充算法的连通域标记相对于传统方法的两次遍历图像,本文把种子填充法引入到连通区域的标记中,实现了单次遍历图像标记连通区域.车牌图像经过预处理后,字符区域的像素值为1,所以本文选取1作为种子.本文标记连通区域的基本步骤:1)对车牌图像进行按行扫描,当像素点的灰度值与种子相等时,赋予该像素点一个label,接着把与该点符合4-邻域并且灰度值与种子相等的所有点存入栈中;2)取出栈顶的像素点,在该点上赋予其相同的label,再把与该点符合4-邻域并且灰度值与种子相等的所有点存入栈中;3)重复步骤2,直到栈为空;4)重复执行步骤1,直到车牌图像被完整扫描一遍.2.2.2 连通字符的分割车牌图像的噪声在预处理阶段无法完全去除,噪声区域会形成独立的连通域.尤其在预处理阶段车牌图像的竖直边框噪声没有被完全去除时,会被误认为是数字“1”,字符分割的正确率受到影响.本文改进了传统连通域字符分割方法,在分割连通区域时采用车牌尺寸的先验知识,当区域的宽高比小于先验知识字符的宽高比,或者区域中白色区域占整个矩形区域的比例小于先验知识的比例,以上均视为不是字符区域,在分割过程中丢弃不符合条件的连通区域.94第2期朱亚萍,等:基于改进连通域算法的车牌字符分割方法连通的数字和字母的分割结果如图3所示.图3(b)为使用传统连通域算法分割的结果,分割出的连通区域存在竖直边框噪声区域,传统的方法并不能很好地处理这种情况.从图3(c)中可以看出,改进后的算法能有效地去除竖直边框噪声的干扰.图3 连通字符的分割2.2.3 汉字字符的分割车牌图像中的第一个字符通常由多个区域组成,这些区域都是不连通的,如“苏”、“浙”等.针对上述的问题,本文改进了传统的连通域车牌字符分割算法.车牌的尺寸在图像预处理阶段进行了归一化,在分割连通区域字符的过程中,记录下车牌第二个字符的起始位置Lsec,并根据已分割出字符的平均宽度Wagv,确定出汉字字符的起始点Lch=Lsec-Wagv,利用文献[4]的静态边界法对汉字进行分割.经过预处理后的车牌图像如图4(a)、图4(b)所示.图5(a)、图5(b)是利用传统连通域算法分割的结果,由于图4(a)、图4(b)中都存在汉字字符不连通问题,并且图4(a)中边框与汉字字符粘连.使用传统连通域方法进行分割时,连通的字符被很好地分割出来,但是不连通的汉字“苏”被分为两部分,而且图5(a)中分割出的汉字与边框相连;图6(a)、图6(b)是使用改进的连通域算法分割后的结果,从图6中明显看出,改进的连通域算法能很好地解决汉字的不连通问题,同时也解决了边框与汉字粘连的问题.图4 预处理后的车牌图像图5 传统算法分割结果图图6 改进算法分割结果图2.3 算法的比较图7 预处理后的车牌图像字符粗分割分别采用改进后的连通域算法和传统的连通域算法,细分割统一采用二分垂直投影法.图7选取了一幅具有代表性的车牌图像,存在汉字不连通和竖直边框问题,而且车牌字符“F”、“M”粘连在一起.对比图8与图9可以看出,改进后的连通域算法准确地分割出不连通的汉字和连通的单独字符,而且有效去除了竖直边框噪声的干扰,使得车牌图像经过细分割后,最终得到正确的车牌字符.图8 改进连通域算法的字符分割图9 传统连通域算法的字符分割4 实验结果与分析本文选取了200幅倾斜校正成功的车牌图像作为实验数据库,选用CPU主频为2.27GHz,内存为2GB的PC机,在Visual Studio 2010平台下进行验证实验.实验1改进的连通域标记法与传统连通域标记法的效率对比.分别采用本文改进的连通域标记算法和传统的连通域标记算法,对实验数据库中的车牌图片进行05杭州电子科技大学学报(自然科学版)2016年连通域的标记,比较这两种标记算法的效率.实验结果如表1所示,从算法的耗时对比可以看出,本文的算法缩短了连通域标记的时间,具有较高的效率.实验2本文完整算法与传统垂直投影法、传统连通域法的实验对比.为了比较算法的分割准确率,本文分别采用文献[2]的传统垂直投影法、文献[3]的传统连通域法、本文完整算法,对实验数据库中的车牌图片进行字符的分割.实验结果如表2所示.通过表2的比较可知,与传统垂直投影法和传统连通域法相比较,本文完整的字符分割算法提高了车牌字符分割的准确率.表1 连通域标记效率对比测试方法测试图片/幅耗时/s传统连通域标记法200 10.31本文连通域标记法200 6.55表2 字符分割对比测试分割方法测试图片/幅分割成功/幅准确率/%传统垂直投影法200 170 85.0传统连通域法200 173 86.5本文完整算法200 192 96.05 结束语本文对传统的连通域算法进行改进,并将改进的算法与传统的二分垂直投影法相结合.第一级粗分割利用改进的连通域算法,提高了连通域标记的效率,对不连通的汉字字符进行了准确分割,去除了竖直边框噪声的干扰;运用二分垂直投影法进行第二级字符细分割,对粘连的字符进行了有效分割.本文算法弥补了传统字符分割方法的不足,解决了字符分割存在的难题.参考文献[1]YOON Y W,BAN K D,YOON H,et al.Blob extraction based character segmentation method for automatic license platerecognition system[C]//Systems,Man,and Cybernetics(SMC),2011IEEE International Conference on.Anchorage,AK:IEEE,2011:2192-2196.[2]瞿中,李梦露,常庆丽,等.退化车牌字符的两级分割算法研究[J].计算机工程与设计,2013,34(7):2465-2469.[3]甘玲,林小晶.基于连通域提取的车牌字符分割算法[J].计算机仿真,2011,28(4):336-339.[4]顾弘,赵光宙,齐冬莲,等.车牌识别中先验知识的嵌入及字符分割方法[J].中国图象图形学报,2010,15(5):749-756.[5]MIAO L G.License Plate Character Segmentation Algorithm Based on Variable-Length Template Matching[C]//Signal Processing,2012IEEE 11th International Conference on.Beijing:IEEE,2012:947-951.[6]迟晓君,孟庆春.基于投影特征值的车牌字符分割算法[J].计算机应用研究,2006,23(7):256-257.License Plate Character Segmentation Method Based on ImprovedConnected Domain AlgorithmZHU Yaping,QIU Jinshan,YANG Chengzhong(Key Lab of IoT and Information Fusion Technology of Zhejiang Province,Hangzhou Dianzi University,Hangzhou Zhejiang310018,China)Abstract:In order to solve the problems of the disconnected character segmentation,adhesioncharacter segmentation and vertical border interference in license plate character segmentation,a kindof license plate character segmentation method based on the improved connected domain algorithm isproposed in this paper.Coarse-grained segmentation is conducted on license plate characters bycombining the improved connected domain algorithm and prior knowledge of license plate size.Besides,the fine-grained segmentation of license plate characters is achieved with the help of binaryprojection method and the method effectively combines the improved connected domain algorithm andtraditional binary projection method.The experimental results show that the improved algorithm cansolve the above problems in character segmentation more effectively and it has higher practicability.Key words:license plate;character segmentation;connected domain15第2期朱亚萍,等:基于改进连通域算法的车牌字符分割方法。
基于某matlab车牌地定位与分割识别程序

基于Matlab的车牌定位与分割经典算法I=imread('car.jpg'); %读取图像figure(); subplot(3,2,1),imshow(I), title('原始图像');I1=rgb2gray(I);%转化为灰度图像subplot(3,2,2),imshow(I1),title('灰度图像');I2=edge(I1,'robert',0.09,'both');%采用robert算子进行边缘检测subplot(3,2,3),imshow(I2),title('边缘检测后图像');se=[1;1;1]; %线型结构元素I3=imerode(I2,se); %腐蚀图像subplot(3,2,4),imshow(I3),title('腐蚀后边缘图像');se=strel('rectangle',[25,25]); 矩形结构元素I4=imclose(I3,se);%图像聚类、填充图像subplot(3,2,5),imshow(I4),title('填充后图像');I5=bwareaopen(I4,2000);%去除聚团灰度值小于2000的部分subplot(3,2,6),imshow(I5),title('形态滤波后图像');[y,x,z]=size(I5);I6=double(I5);Y1=zeros(y,1);for i=1:yfor j=1:xif(I6(i,j,1)==1)Y1(i,1)= Y1(i,1)+1;endendend[temp MaxY]=max(Y1);figure();subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和'),xlabel('行值'),ylabel('像素');%求的车牌的行起始位置和终止位置PY1=MaxY;while ((Y1(PY1,1)>=50)&&(PY1>1))PY1=PY1-1;endPY2=MaxY;while ((Y1(PY2,1)>=50)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);X1=zeros(1,x);for j=1:xfor i=PY1:PY2if(I6(i,j,1)==1)X1(1,j)= X1(1,j)+1;endend endsubplot(3,2,2),plot(0:x-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('像数');%求的车牌的列起始位置和终止位置PX1=1;while ((X1(1,PX1)<3)&&(PX1<x))PX1=PX1+1;endPX2=x;while ((X1(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPX1=PX1-1;PX2=PX2+1;%分割出车牌图像%dw=I(PY1:PY2,PX1:PX2,:);subplot(3,2,3),imshow(dw),title('定位剪切后的彩色车牌图像')4.2 车牌字符分割确定车牌位置后下一步的任务就是进行字符切分分离出车牌号码的全部字符图像。
基于Matlab的车牌识别算法

基于Matlab的车牌识别算法基于Matlab的车牌识别算法摘要车牌系统是计算机视觉和模式识别技术在智能交通领域的重要应用课题之一。
车牌识别系统是以特定目标为对象的专用计算机系统,该系统主要包括三个内容:车牌定位、字符分割和字符识别。
其中车牌定位的目的就是从所拍摄的汽车图像中确定车牌的位置,从而便于后续的字符分割和字符识别工作。
目前常用的方法有:基于模板匹配的方法、基于特征的方法和神经网络法等。
本设计采用基于模板匹配算法和基于人工神经网络算法对车牌进行定位识别,此算法只对蓝底白字车牌进行分割识别,对黑底白字车牌原则上整个算法可直接适用,。
此算法分割出的图像像素值和模板图像达到了一致,由此便避免了切割出的图像像素值不一致所带来的问题。
但对白底黑字车牌、黄底黑字车牌,需要对车牌定位算法进行调整,并将图像反转(0变1、1变0)。
关键词:车牌识别系统;字符分割;车牌定位LICENSE PLATE RECOGNITION ALGORITHM BASEDON MATLABABSTRACTLicense plate system is a computer vision and pattern recognition technology in one of the important application research topic in the field of intelligent transportation. License plate recognition system based on specific goals of a special computer system, the system mainly includes three contents: license plate locating, character segmentation and character recognition. One of the purpose of license plate location is taken from the auto locate the license plate in the image, so as to facilitate the subsequent work character segmentation and character recognition. Now commonly used methods are: based on template matching method, based on the characteristics of the method and neural network, etc.This design USES based on template matching algorithm and based on artificial neural network algorithm to locate license plate recognition, the algorithm is only for blue white license plate segmentation recognition, the algorithm can be directly applicable in principle to the black white plate,. This algorithm to segment the image pixel values and template image, thus to avoid the cut out in the process of image pixel values are not consistent. But black on white background and black text plate, yellow bottom plate, adjustments need to license plate localization algorithm, and the image inversion of (0, 1, 1, 0).Key words: license plate recognition system; Character segmentation; License plate location目录1 前言 (5)1.1车牌号识别研究背景 (5)1.2 车牌号识别技术研究现状和趋势 (7)1.2.1国内外车牌识别技术情况及我国车牌特点 (7)1.2.2车牌识别技术的应用前景 (8)1.3 车牌识别研究内容 (9)2 车牌识别系统设计原理概述 (10)3 车牌识别系统程序设计 (12)3.1图像读取及车牌区域提取 (12)3.1.1图像灰度图转化 (13)3.1.2图像的边缘检测 (14)3.1.3灰度图腐蚀 (15)3.1.4图像平滑处理 (16)3.1.5移除小对象 (17)3.1.6车牌区域的边界值计算 (18)3.2字符切割 (19)3.2.1字符切割前的图像去噪处理 (19)3.2.2字符切割前的图像膨胀和腐蚀处理 (20)3.2.3字符切割 (20)3.3字符识别 (23)3.3.1字符识别方法选择 (23)3.3.2字符归一化 (23)3.3.3字符匹配识别 (24)4 仿真结果及分析 (27)4.1 车牌定位及图像读取及其图像处理 (27)4.2 车牌字符分割及其图像处理 (27)5 结论 (29)参考文献 (30)致谢.............................................. 错误!未定义书签。
matlab课程设计车牌分割

matlab课程设计车牌分割一、教学目标本节课的教学目标是使学生掌握使用MATLAB进行车牌分割的方法和技巧。
通过本节课的学习,学生将能够理解车牌分割的原理,熟练运用MATLAB中的图像处理函数进行车牌分割,并能够对分割结果进行分析和优化。
具体来说,知识目标包括:1.理解车牌分割的基本原理和方法。
2.掌握MATLAB中常用的图像处理函数及其使用方法。
技能目标包括:1.能够运用MATLAB进行车牌分割的实践操作。
2.能够对分割结果进行分析和优化,提高分割的准确性和效率。
情感态度价值观目标包括:1.培养学生的动手能力和实践能力,提高他们对科学研究的兴趣和热情。
2.培养学生的创新思维和问题解决能力,使他们能够将所学知识应用到实际问题中。
二、教学内容本节课的教学内容主要包括车牌分割的原理、MATLAB图像处理函数的使用以及车牌分割的实践操作。
1.车牌分割原理:介绍车牌分割的基本原理和方法,包括阈值分割、边缘检测等。
2.MATLAB图像处理函数:介绍MATLAB中常用的图像处理函数,如imread、imshow、bwmorph等,并讲解其使用方法和注意事项。
3.车牌分割实践操作:通过实例演示和练习,使学生能够熟练运用MATLAB进行车牌分割的操作,并对分割结果进行分析和优化。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法相结合的方式。
1.讲授法:通过讲解车牌分割的原理和方法,使学生掌握基本概念和理论知识。
2.案例分析法:通过分析实际案例,使学生了解车牌分割在实际应用中的重要性。
3.实验法:通过实践操作,使学生熟练掌握使用MATLAB进行车牌分割的方法和技巧。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:提供相关的教材和参考书,以便学生能够深入学习车牌分割的原理和方法。
2.多媒体资料:制作PPT和视频等多媒体资料,以便学生能够更直观地了解车牌分割的过程和技巧。
车牌识别matlab源程序基于颜色的车牌定位和分割技术研究与实现function

车牌识别matlab源程序基于颜色的车牌定位和分割技术研究与实现function车牌识别matlab 源程序基于颜色的车牌定位和分割技术研究与实现function [seg] = character_segmentation(bw); % character_segmentation: Returns the digit segments in the supplied binary image. % The function uses the "segment" function, keeping only the seven % segments in the result with largest area, and in case less than seven % segments were found, it attempts to recall the function, making the % separation between the already found segments clearer (by cleaning the % bits which are there. DIGIT_WIDTH = 18; MIN_AREA = 250; load global_var.mat; plot_vector(sum(bw), 4, Character Segmentation - Columns Sum Graph:, debug2); seg = segment(bw, DIGIT_WIDTH, MIN_AREA); [x y] = size(seg); % If we got less than 7 digits, we try to make the sepration between them % clearer by cleaning the bits between them, and we call the "segment" % function again: if x < 7 for i = 1 : x bw(:,seg(i,2))=0; end; seg = segment(bw, DIGIT_WIDTH, MIN_AREA); end; % Keeping in the results the seven segments with the largest area: area = []; for i = 1 : x pic = bw(:, seg(i,1) : seg(i,2), :); area(i) = bwarea(pic); end; area1 = sort(area); seg = seg; for j = 1:(length(area1)-7) i = find(area == area1(j)); len = length(area); if i == 1 area = [area(2:len)]; seg = [seg(:,2:len)]; elseif i == len area = [area(1:i-1)]; seg = [seg(:,1:i-1)]; else area = [area(1:i-1) area(i+1:len)]; seg = [seg(:,1:i-1) seg(:,i+1:len)]; end; end; seg = seg; return; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%% %%%% %%%%%%%%%%%%%%%% %%%%%%%%%%% function [segmentation] = segment(im, digit_width, min_area); % segment: Segment the pictures in digitimages according to the variable % "digit_width" and returns a matrix containing the two bounds of the each % digit segment. The function keeps in the result only segment whose % "rectangular" areas is more than "min_area". segmentation = []; % Summing the colums of the pic: t = sum(im); % Getting the segments in the pic: seg = clean(find_valleys(t, 2, 1, digit_width), 3); % Keeping in the result only the segments whose rectangular areas is more than min_area: j = 1; for i = 1 : (length(seg) - 1) band_width = seg(i+1) - seg(i); maxi = max(t(1, seg(i):seg(i+1))); if(maxi * band_width > min_area) segmentation(j, 1) = seg(i); segmentation(j, 2) = seg(i+1); j = j + 1; end; end; return; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%% %%%% %%%%%%%%%%%%%%%% %%%%%%%%%%% function [s] = find_valleys(t, val, offset, digit_width); % find_valleys: Uses the method named peak-to-valleyin order to segment the % pictures in digit images getting the two bounds of the each digit segment % according to the statistical parameter digit_width = 18. % The function is recursive; it uses the vector of the sums of the columns % in the LP binary image supplied in the parameter "t". % The function passes over the graph corresponding to this vector from left % to right, bottom-up, incrementing at each recursive step the height that % is examined on the graph (val). It checks the bandwidth of the first part % of the signal: if it is greater than DIGIT_WIDTH, the function is % recursively called after incrementing the height which is examined on % the graph, (val). Otherwise, if the bandwidth is good, the two bounds of % the signal with this bandwidth are taken as a digit segment, and the % function is recursively called for the part of the image which is at % the right side of the digit segment just found. This is done until the %whole width of the picture has been passed over. % Determining the points which are inferior to the examined hieght: s = find(t < val); % If no more than one point is found, incrementing val and recursively calling the function again. if(length(s) < 2) s = find_valleys(t, val + 1, offset, digit_width); return; end; % If no point is found terminating: if length(s) == 0 return; end; % Arranging the boundaries, so that if we have a big value at the beginning % or the end of the picture the algorithm still works: in this case, the % algorithmincludes also those points. if((t(1,1) >= val) & s(1) ~= 1) s = [1 s]; end; if((t(1, length(t)) >= val) & s(length(s)) ~= length(t)) s = [s length(t)]; end; % Updating the real coordinates according to offset: s = add(s, offset - 1); % Cleaning points which are very close each other keeping only one of them. s = clean(s, 3); % While there is a bad segment in "s", (starting from the left side): while bad_segm(s, digit_width) == 1 for i = 1: (length(s) - 1) if (s(i + 1) - s(i)) > digit_width % The subvector which does not correspond to a valid digit % segemnt: sub_vec = t(1, s(i) - offset + 1 : s(i+1) - offset + 1); % Recursively, separating this bad segment in two or more valid % digit segments: s = [s(1 : i) find_valleys(sub_vec, val + 1, s(i), digit_width) s(i+1 : length(s))]; end; end; end;return; %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %%%% %%%%%%%%%%%%%% %%%%%%%%%%%%% function [bool] = bad_segm(s, digit_width); % bad_segm: Returns true (1) iff there is a bad digit segment in s, namely, % two points that ar distant one from the other by more than "digit_width". if length(s) == 0 bool = 0; return; end; tmp = s(1); bool = 0; for i = 2 : length(s) if(s(i) - tmp) > digit_width bool = 1; return; end; tmp = s(i); end;return; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%% %%%% %%%%%%%%%%%%%%%% %%%%%%%%%%% function [t] = clean(s, val); % clean: Cleans form the vector s all the poins which are distant the one % from the other by less than "val" keeping only one of them. t = []; len = length(s); i = 2; j = 1; while i <= len while(s(i) - s(i-1) <= val) i = i + 1; if(i > len) return; end; end; if j == 1 | (s(i-1) - t(j-1)) > val t(j) = s(i-1); j = j + 1; end; t(j) = s(i); j = j + 1; i = i + 1; end; return; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%% %%%% %%%%%%%%%%%%%%%% %%%%%%%%%%% function [t] = add(s, val); % add: Adds "val" to each one of the entries in the vector s and returns the new vector. len = length(s); t = []; for i = 1:len t(i) = s(i) + val; end; return;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
引言上世纪以来,随着科学技术的日新月异,人们的生活发生了巨大的变化,尤其是自动化交通工具的普及使人们享受到了前所未有的便捷,但是交通发展的同时也带来很多问题,因而人们一直在探索利用现有的技术使交通更加顺畅、安全。
智能交通系统(Intel-ligent Transportation System,ITS)是人们提出的一种有效地解决交通问题的方案,而车牌识别(License Plate Recognition,LPR)是ITS 中的关键技术之一,同时作为一项单独的技术,车牌识别在公共安全、交通管理等部门有着极其重要地应用前景。
本文所探讨的针对我国汽车牌照的字符分割算法正是车牌识别系统的基础与关键之所在,因为只有正确地分割字符才能保证后期正确地识别车牌号码完成指定的功能。
应用的广泛性也决定了该算法具有一定的难度,对于我国来讲,汽车牌照图字符分割算法存在许多难点,如:1)在大部分实际应用中都要求算法速度快,从而能够实时地对车辆进行识别以及时地反馈车牌信息,对信息做进一步处理,所以算法执行效率必须很好以满足实时化的要求。
2)有些车辆车牌存在严重的干扰(如褪色,污损),车牌周围有各种装饰物等。
3)车牌本身信息较为复杂,既有汉字也有英文字母与数字。
基于上述考虑,本论文中的算法流程简单,思路清晰、明了,以垂直投影法[1]基础,利用先验知识大大增加了对汽车牌照图像的处理准确性,本算法先将图像二值化图,所处理的数据量小,未对图像进行大量复杂的运算,有利于算法简单、高效实现。
1字符分割算法1)首先对提取好的汽车牌照灰度图像进行二值化,图像在二值化后所要处理的数据量大大减少,本算法采用全局阙值法[2],在MATLAT 中采用im2bw 函数实现[3],阙值参数为0.7,待处理图像及其二值化效果如图1、2所示。
2)在车牌二值化之后之后对各个字符进行分割以便进一步对其进行识别。
算法分析:在车牌二值化图像中,一般字符部分是白色,其它部分是黑色,这里使用垂直投影法逐个统计每列中所包含的白色像素的数量,结果如图3所示,在各个字符的间隙处的列白色像素很少,甚至为0。
(1)第一个字符的判断。
以水平方向为X 轴,以第一个白色像素点高于一定值的点为第一个字符的起始点,然后以下一个白色像素低于一定值(本文中取5,与车牌图像本身像素有关)的点作为第一个字符的始终点、由于第一个字符一般是汉字笔划比较多,所以一般不会误判。
判断一个字符的算法流程见图4。
(2)其它字符的判断。
这里利用先验知识,字符的大小是均匀的,这样其它字符的宽度与第一个字符相差不会太大。
这样在判断其它字符时同样是利用(1)中所提的算法进行判断,检测每一个字符一起始点,但是要加上限制条件:字符宽度须大小第一个字符宽度90%,否则继续向后搜索符合条件的点,这样大大减少了对”C ”“U ”“L ”“7”等字符的误分割。
图5为误判结果,图6为改进后的结果。
同时由于第二个与第三个字符之间有空隙且可吕利青(中北大学信息与通信工程学院,山西太原030051)【摘要】在相关资料的基础上,对汽车牌照图像字符分割算法进行了研究,提出了基于垂直投影法的改进的字符分割算法。
在上述研究的基础上,用MATLAB7.0设计了相应程序,并采集图片进行了测试,表明了算法的有效性和实用性。
【关键词】汽车牌照辨识系统;二值化;字符分割【中图分类号】TP391【文献标识码】A 【文章编号】1003-773X (2009)01-0192-02一种改进的汽车牌照字符分割算法及MATLAB 实现图1待处理的图像图2二值化后的图像图3每列白色像素数量的坐标图像图4算法流程图第24卷第1期(总第106期)机械管理开发2009年2月Vol.24No.1(SUM No.106)MECHANICAL MANAGEMENT AND DEVELOPMENTFeb .2009作者简介:吕利青(1979-),女,山西朔州人,助工,中北大学在读硕士研究生,研究方向:电气工程及其自动化。
收稿日期:2008-09-01192··第24卷第1期(总第106期)机械管理开发2009年2月吕利青:一种改进的汽车牌照字符分割算法及其MATLAB 实现!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(上接第191页)从预测结果可以看出,预测结果与理论值较为接近,说明Elman 神经网络预测铣削力的可行性。
3结束语本文以切削深度,切削宽度,主轴转速,每齿进给量作为影响因素,以铣削力为输出,建立了铣削力的Elman 神经网络模型对铣削力进行了预测,取得了较为准确的预测结果,说明了Elman 神经网络模型预测铣削力的可行性。
如果要取得更加客观、准确的结果,需要加入其他影响因素如材料性质,刀具磨损等,将会提高网络的泛化能力,提高网络的预测精度。
参考文献[1]飞思科技产品研发中心.神经网络理论与MATLAB7实现[M].北京:电子工业出版社,2006.[2]韩力群.人工神经网络教程[M].北京:北京邮电大学出版社,2006.[3]林岗,周月平,彭宝权.基于遗传神经网络的铣削力预测方法[J].组合机床与自动化加工技术2005:11-13.Evaluating Model of Milling Forces Based on Elman Neural NetworkLIU-Xu-hui(School of Information and Communication Engineering,North University of China,Taiyuan 030051,China)〔Abstract 〕This paper based oncutting depth,cutting width,spindle speed,feed per tooth take as the input,the milling forces in x,y,zthree direction components take as output,establishes the Elman evaluating model.The forecasting result is close to the expectation result,therefore the method is suitable for evaluating the milling forces.〔Key words 〕Elman neural network ;Milling forces ;Evaluating Model能存在一定干扰信息如铆钉等,所以在判断第三个字符时加上另一个限制条件:第三个字符的起始点与最二个字符的结束点之的横坐标差大于第一个字符宽度50%,这样大大减少了对这一区域的误断。
图7为误判结果,图8为改进后的结果。
图9为应用本算法对图1的最终处理结果。
2软件测试结果及分析2.1测试结果测试结果如表1所示:2.2结果分析不能正确分割的4张图像中,都是由于车牌本身噪声较多,二值化后白色像素分布散乱,无法区分字符与间隙造成的。
这说明算法在大多情况下能得到正确的结果,但鲁棒性还不够强,不能对严重干扰的图像做出正确的预处理。
考虑到本次测试所使用的摄像头像素较低,成像效果较差,预计本软件对清晰的高质量的图片的分割成功比率还能进一步地提高。
3结束语本文在所讨论的算法简单,实用,执行速度快,有利于实际应用中的实时化要求,正符合ITS 系统的需要,但也存在一些缺点,主要是其鲁棒性不够强,对质量差的图像不能成功处理,离实际应用还有一定的差距。
参考文献[1]刘广起,严殊,张晓波.车牌定位和分割技术的研究与实现.可编程控制器与工厂自动化[J].2005(1):124-126.[2]陈书海,傅录祥.实用数字图像处理[M].北京:科学出版社,2005.[3]苏金明,王永利.MATLAB 图形图像[M].北京:电子工业出版社,2005.表1测试结果编程软件Matlab7.0测试图像总量60张图像分辨率640×480(插值)图像采集设备130万像素CMOS 摄像头测试结果正确分割56张,分割成功的比率93.3%单张图像处理时间<9ms微机硬件环境P42.0,512MA Modified Character Segmentation Algorithm in License Plate and ItsImplementation in MatlabLV Li-qing(College of Information and Communication,North University of China,Taiyuan 030051,Shanxi )〔Abstract 〕On the basis of analyzing relevant information ,methods of Character segmentation Algorithm in License Plate are studied in this paper.A modified algorithm based on vertical projection is advanced in the paper.Through above study ,corresponding program is designed inmatlab7.0and experiment isdone using the collected pictures.The results shows the validity and pratical use of the algorithm.〔Key words 〕License plate recognition system ;Binarization ;Character segmentation图5误分割图像图6矫正后的分割结果图7误分割图像图8矫正后的分割结果图9对图1的最终处理结果193··。