用matlab编程实现车牌字符的批量分割并保存

合集下载

车牌分割matlab开发程序

车牌分割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中,可以使用模式识别、神经网络或者深度学习等技术来实现字符识别。

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

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

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

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

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

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

基于某matlab车牌地定位与分割识别程序

基于某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 的车牌定位与分割 经典算法I 二imread('car.jpg');I1=rgb2gray(l);%转化为灰度图像subplot(3,2,2),imshow(I1),title('灰度图像');I2=edge(I1,'robert',0.09,'both');%采用 robert 算子进行边缘检测 subplot(3,2,3),imshow(I2),title('边缘检测后图像');%读取图像figure 。

; subplot(3,2,1),imshow(l), title('原始图像');边绿检浪I 启图像se=[1;1;1]; %线型结构元素 I3=imerode(l2,se);%腐蚀图像subplot(3,2,4),imshow(l3),title('腐蚀后边缘图像');se=strel('recta ngle',[25,25]);矩形结构元素 I4=imclose(l3,se);%图像聚类、填充图像 subplot(3,2,5),imshow(I4),title('填充后图像');一5Hbwa「eaopen(一4200S % 卅弗W HM W 血、」丿-H 2000subp_0f(326二M X N H si z e (_5=_6Hdoub_e(_5xYlHzeros(y3_fonyf o r li-r xif(l6(i,j,1)==1)Y 1(i,1)= Y1(i,1)+1;endend[temp MaxY]=max(Y1);figure。

;subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和'), xlabel('行值'),ylabel('像素');行值%求的车牌的行起始位置和终止位置PY 仁Max Y;while ((Y 1(PY1,1)>=50)&&(PY 1>1))PY 1=P Y1-1;endPY 2=Max Y;while ((Y 1(PY2,1)>=50)&&(PY2<y))endPY 2=P Y2+1;endIY=I(P Y1:P Y2,:,:);X1= zeros(1,x);for j=1:xfor i=PY1:PY2if(l6(i,j,1)==1)X1(1,j)= X1(1,j)+1;endend endsubplot(3,2,2),plot(0:x-1,X1),title('列方向像素点灰度值累计和'), xlabel('列值'),ylabel('像数');歹U方向像素点衣度值黒计环CT1OC%求的车牌的列起始位置和终止位置PX仁1;while ((X1(1,PX1)<3)&&(PX1<x))PX1= PX1+1;endPX2=x;O 2OD 400 600 800歹UfSwhile ((X1(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPX仁PX1-1;PX2=PX2+1;%分割出车牌图像%dw=l(P Y1:P Y2,PX1:PX2,:);subplot(3,2,3),imshow(dw),title('定位剪切后的彩色车牌图像')定位剪切后的耘色车牌图像4.2车牌字符分割确定车牌位置后下一步的任务就是进行字符切分分离出车牌号码的全部字符图像。

matlab课程设计车牌分割

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实现字符串分割(split)

用Matlab实现字符串分割(split)

⽤Matlab实现字符串分割(split)
⽤Matlab实现字符串分割(split)
Posted on 2011/08/08
Matlab的字符串处理没有C#强⼤,本⾝⼜没有提供OO特性,需要依赖别的⼿段完成这项任务。

我们在这⾥借助正则表达式函数regexp的split模式。

⼀般语法:
S = regexp(str, char, 'split')
其中str是待分割的字符串,char是作为分隔符的字符(可以使⽤正则表达式)。

分割出的结果存在S中。

以下⾯这样⼀串字符为例
Hello Nocturne Studio
⾸先去除⾸尾的多余空格:
str = deblank(str)
例1:设这⼏个字符串是以制表符分隔的,可以这样来做:
S = regexp(str, '\t', 'split')
例2:设这些字符串是以⼀个或多个空格分隔的,可以⽤正则表达式来描述:
S = regexp(str, '\s+', 'split')
这样,S(1)=’Hello’,S(2)=’Nocturne’,S(3)=’Studio’。

注意,上⾯得到的结果S是⼀个cell型变量,它的每个元素⽐如S(1)仍然是cell型的,只能⽤来display,不能直接⽤来进⾏字符串操作(⽐如获取其中的某个字符),所以我们在使⽤需要执⾏⼀次:
s1 = char(S(1))
这样的s1才是⼀个真正的字符串,可以进⾏后续的操作。

车牌识别matlab源程序基于颜色的车牌定位和分割技术研究与实现function

车牌识别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;。

车牌字符识别与分割

车牌字符识别与分割

一、实验目的:使用matlab软件提取出给定图像中的字符区域,或分割出各个字符二、设计方案:一个完整的车牌识别系统闭应包括车辆检测、图像采集、图像预处理、车牌定位、字符分割、字符识别等单元。

当车辆到达触发图像采集单元时,系统采集当前的视频图像。

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

车牌识别系统原理如图l所示。

图1 车牌识别系统原理图(1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。

(2)车牌定位:从预处理后的汽车图像中分割出车牌图像。

即在一幅车辆图像中找到车牌所在的位置。

(3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像(4)字符识别:对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。

为了用于牌照的分割和牌照字符的识别,原始图象应具有适当的亮度,较大的对比度和清晰可辩的牌照图象。

但由于车辆牌照的整洁度、自然光照条件、拍摄时摄像机与牌照的矩离和角度以及车辆行驶速度等因素的影响,牌照图象可能出现模糊、歪斜和缺损等严重缺陷,因此需要对原始图象进行识别前的预处理。

牌照的定位和分割是牌照识别系统的关键技术之一,其主要目的是在经图象预处理后的原始灰度图象中确定牌照的具体位置,并将包含牌照字符的一块子图象从整个图象中分割出来,供字符识别子系统识别之用,分割的准确与否直接关系到整个牌照字符识别系统的识别率。

由于拍摄时的光照条件、牌照的整洁程度的影响,和摄像机的焦距调整、镜头的光学畸变所产生的噪声都会不同程度地造成牌照字符的边界模糊、细节不清、笔划断开或粗细不均,加上牌照上的污斑等缺陷,致使字符提取困难,进而影响字符识别的准确性。

因此,需要对字符在识别之前再进行一次针对性的处理。

车牌识别的最终目的就是对车牌上的文字进行识别。

基于MATLAB的车牌识别系统

基于MATLAB的车牌识别系统

基于MATLAB的车牌识别系统
MATLAB是一款常用的科学计算软件,它具有强大的图像处理功能,因此可以用来实现一些基于图像的应用,如车牌识别系统。

以下是一个基于MATLAB的车牌识别系统的实现步骤:
1. 图像采集:使用摄像头或者其他图像采集设备获取车牌图像。

2. 图像预处理:对采集到的车牌图像进行预处理,实现图像的
灰度化、噪声去除、边缘检测等操作。

3. 车牌定位:在处理后的图像中,通过车牌的大小、形状以及
颜色等特征,确定车牌的位置和范围。

4. 字符切割:根据车牌的字符间距和字符大小等特征,将车牌
区域的字符进行切割和分离,得到每个字符的图像。

5. 字符识别:利用机器学习算法、神经网络等方法,对切割出
的字符进行识别,确定车牌号码。

6. 结果显示:将识别结果显示在屏幕上,以及保存结果。

需要注意的是,在识别车牌号码的过程中,需要大量的实例图
像和标注数据,用来进行训练和测试。

同时,对于车牌识别系统,
还需要考虑一些实际应用中的问题,如光线、角度、车速等因素对
图像质量的影响。

因此,需要设计合适的算法和方法,充分考虑实
际应用中的各种因素,提高识别准确度和可靠性。

基于matlab的蓝色车牌定位与识别---分割

基于matlab的蓝色车牌定位与识别---分割

基于matlab的蓝⾊车牌定位与识别---分割接着上⾯的⼯作,接下去就该是进⾏字符分割了。

考虑到为了后⾯的字符识别,因此在这部分需要实现的⽬标是需要把车牌的边框全部切除,对重新定位的车牌进⾏垂直⽅向⽔平⽅向调整,保证字符是正的。

最后才是字符的分割。

1.⾸先上下边框切割。

对定位的车牌每⾏作⼀次的差分,计算每⾏的综合,⼩于某个阈值时候将其舍去。

部分代码:[length height]=size(p);% ⽔平⽅向定位for i=1:length % ⽔平⼀阶差分for j=1:height-1revise_row(i,j)=abs(p(i,j)-p(i,j+1));endrevise_row(i,height)=revise_row(i,height-1);endfor i=1:lengthT(i)=sum(revise_row(i,:));endfor i=2:length-1T(i)=1/2*(T(i-1)+T(i)+T(i+1));endT(1)= T(2);T(length)=T(length-1);% 截取⽔平区间left_row=0;right_row=0;threshold_row=max(T);for i=1:lengthif(T(i)>1/6*threshold_row)left_row=i;break;endendfor i=length:-1:1if(T(i)>1/6*threshold_row)right_row=i;break;endendtemp=1;for i=left_row:right_row %截取区间p_row(temp,:)=p1(i,:);temp=temp+1;end左右切割结果图:2 左右边框切割。

对定位的车牌每列作⼀次的差分。

考虑到左右边框的⼀阶总数是两边⼤,中间⼩,因此采⽤获取左右的峰值,当⼩于峰值的摸个阈值时进⾏截取。

部分代码:% 竖直⽅向定位for j=1:height % ⼀阶差分for i=1:length-1revise_column(i,j)=abs(p1(i,j)-p1(i+1,j));endrevise_column(length,j)=0;endfor j=1:heightT(j)=sum(revise_column(:,j));endfor j=2:height-1T(j)=1/3*(T(j-1)+T(j)+T(j+1));endT(1)= T(2);T(height)=T(height-1);[max_peak max_num]=max(T);%求出峰值threshold=0.25*max_peak;%阈值left_peak= T(1);right_peak= T(height);%找到左峰值for j=2:heightif(T(j)>=threshold&(T(j)>=T(j-1))&(T(j)>=T(j+1))&(j<=max_num))left_peak=j;break;endend%找到右峰值if(max_num<1/2*height)threshold=1/2*threshold;endfor j=height-1:-1:2if(T(j)>=threshold&(T(j)>=T(j-1))&(T(j)>=T(j+1))&(j>=max_num))right_peak=j;break;endendleft_valley=1;%⾕底值right_valley=right_peak;%找出左边最⼩值for j=left_peak:-1:2if((T(j)<=T(j-1))&(T(j)<=T(j+1)))left_valley=j;break;endendfor j=right_peak:height-1if((T(j)<=T(j-1))&(T(j)<=T(j+1)))right_valley=j;break;endendtemp=1;for j=left_valley:right_valley %截取部分参数分开,否则仍然按照原图⼤⼩p_array(:,temp)=p_row(:,j);temp=temp+1;end截取图:3 接下来进⾏车牌的⽔平校正。

车牌图像分割matlab代码

车牌图像分割matlab代码

图像分割matlab代码作者:佚名发布时间:2010-1-1 阅读次数:498 字体大小: 【小】【中】【大】% This is a program for extracting objects from an image. Written for vehicle number plate segmentation and extraction% Authors : Jeny Rajan, Chandrashekar P S% U can use attached test image for testing% input - give the image file name as input. eg :- car3.jpgclc;clear all;k=input('Enter the file name','s'); % input image; color imageim=imread(k);im1=rgb2gray(im);im1=medfilt2(im1,[3 3]); %Median filtering the image to remove noise%BW = edge(im1,'sobel'); %finding edges[imx,imy]=size(BW);msk=[0 0 0 0 0;0 1 1 1 0;0 1 1 1 0;0 1 1 1 0;0 0 0 0 0;];B=conv2(double(BW),double(msk)); %Smoothing image to reduce the number of connected componentsL = bwlabel(B,8);% Calculating connected componentsmx=max(max(L))% There will be mx connected components.Here U can give a value between 1 and mx for L or in a loop you can extract all connected components% If you are using the attached car image, by giving 17,18,19,22,27,28 to L you can extract the number plate completely.[r,c] = find(L==17);rc = [r c];[sx sy]=size(rc);n1=zeros(imx,imy);for i=1:sxx1=rc(i,1);y1=rc(i,2);n1(x1,y1)=255;end % Storing the extracted image in an array figure,imshow(im);figure,imshow(im1);figure,imshow(B);figure,imshow(n1,[]);。

基于Matlab的车牌自动识别技术研究与实现(基于Matlab的车牌二值化、阈值分割)

基于Matlab的车牌自动识别技术研究与实现(基于Matlab的车牌二值化、阈值分割)

学位申请人:指导教师:学科专业:软件工程 学位类别:工学学士2012年 06月 题目:基于Matlab 的车牌二值化、阈值分割西安工业大学毕业设计(论文)任务书院(系)计算机学院专业软件工程班080605 姓名陈章权学号0806051011.毕业设计(论文)题目:基于Matlab车牌自动识别技术的研究与实现2.题目背景和意义:车牌识别是现代智能交通系统中的重要组成部分之一,应用十分广泛。

它以数字图像处理、模式识别、计算机视觉等技术基础,对摄像机所拍摄的车辆图像或者视频序列进行分析,得到每一辆汽车唯一的车牌号码,从而完成识别过程。

通过一些后续处理手段可以实现停车场收费管理、交通流量控制指标测量,车辆定位,汽车防盗,高速公路超速自动化监管等等功能。

对于维护交通安全和城市治安,防止交通堵塞,实现交通自动化管理有着现实的意义。

3.设计(论文)的主要内容:要求学生使用Matlab工具对车牌识别进行开发。

主要研究内容包括:(1)图像数据采集和预处理(2)二值化研究(3)系统实现和效果评价4.设计的基本要求及进度安排(含起始时间、设计地点):要求熟悉数字图像处理的基本知识,熟悉matlab编程毕业设计的进度安排如下:1~3周:准备所需资料,详细设计,开题报告,准备开题答辩。

4~12周:完成界面设计开发,详细设计,编程及调试。

13~15周:系统测试。

16~17周:书写毕业设计论文。

18周:改进完善,提交毕业论文,准备答辩。

5.毕业设计(论文)的工作量要求:*或实习(天数):18周①实验(时数)*:无②图纸(幅面和张数)③其他要求:毕业论文不少于15000字。

指导教师签名:年月日学生签名:年月日系(教研室)主任审批:年月日说明:1本表一式二份,一份由学生装订入附件册,一份教师自留。

2 带*项可根据学科特点选填。

毕I-2基于Matlab的车牌自动识别技术的研究与实现摘要车牌识别是现代智能交通系统中的重要组成部分之一,应用十分广泛。

车牌识别的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在智能车牌识别中的应用

Matlab在智能车牌识别中的应用近年来,随着人工智能的不断进步和应用领域的扩展,智能车牌识别系统逐渐成为交通管理和安全监控领域的重要组成部分。

而在智能车牌识别系统的研究和开发过程中,Matlab作为一种功能强大的计算机编程语言和开发环境,在图像处理和模式识别方面的应用日益受到重视。

本文将探讨Matlab在智能车牌识别中的应用,并讨论其优势和潜力。

首先,在智能车牌识别系统中,图像处理是十分关键的一步。

Matlab作为一个专门用于科学和工程计算的开发环境,提供了丰富的图像处理函数和工具包,使得手动处理车牌图像变得更加简单和高效。

通过调用Matlab中的函数,可以对车牌图像进行预处理,包括图像灰度化、二值化、图像增强、噪声去除等操作,从而提高车牌识别的准确性和鲁棒性。

其次,在车牌识别过程中,模式识别是至关重要的一环。

Matlab提供了大量的模式识别工具包和算法,如支持向量机(Support Vector Machine)和人工神经网络(Artificial Neural Network)等,这些算法可以用于车牌的字符分割和字符识别。

通过学习和训练,利用Matlab实现的模式识别算法可以有效地识别车牌中的字符信息,进而实现对车牌的自动识别和辨识。

此外,Matlab还具有强大的可视化和数据分析功能,这对于智能车牌识别系统的研究和开发非常有帮助。

通过Matlab的图像显示和处理函数,可以直观地展示车牌识别结果并进行可视化分析,以便进一步改进算法和提高系统性能。

同时,Matlab还支持对识别结果进行统计和数据分析,在交通管理和安全监控方面具有巨大的潜力。

需要指出的是,尽管Matlab在智能车牌识别中的应用具有很多优势,但也面临一些挑战和限制。

首先,车牌识别系统需要处理大量的图像数据,这对于计算资源和计算效率提出了一定的要求。

其次,车牌图像的质量和光照条件可能会对识别结果产生影响,需要对算法进行优化和鲁棒性测试。

使用Matlab进行车牌识别的技巧与实践

使用Matlab进行车牌识别的技巧与实践

使用Matlab进行车牌识别的技巧与实践引言:车牌识别技术是计算机视觉领域中一个重要的研究方向。

随着交通流量的急剧增加,车牌识别已成为自动化交通监控系统中的一项核心任务。

本文将介绍如何使用Matlab进行车牌识别,并分享一些技巧与实践经验。

一、图像预处理车牌识别的第一步是图像预处理,目的是提取感兴趣的车牌区域。

在Matlab中,可以使用各种图像处理函数来进行预处理操作,如灰度化、二值化、滤波等。

其中,灰度化可以将彩色图像转换为灰度图像,简化后续处理过程。

二值化操作则能够将图像处理为黑白两色,方便车牌区域的提取。

此外,使用滤波函数可以对图像进行平滑处理,减少噪声的干扰。

二、车牌区域提取在预处理过程中,车牌区域的提取是非常关键的一步。

通常情况下,可以通过车牌的形状和颜色进行提取。

Matlab提供了多种寻找物体边界的方法,如边缘检测、连通区域分析等。

边缘检测可以识别图像中的边缘信息,然后根据车牌的形状特点,选择合适的方法提取车牌边缘。

连通区域分析则可以找到图像中具有相同灰度或颜色的连通区域,进一步筛选出车牌区域。

三、字符分割车牌识别的下一个步骤是字符分割。

通过将车牌图像分割为单个字符,可以便于后续的字符识别工作。

在Matlab中,字符分割可以通过一系列几何变换和图像处理操作来实现。

例如,可以使用形态学操作来去除车牌区域中的噪声和冗余信息,然后通过寻找字符之间的间隔来进行字符的分割。

另外,还可以考虑使用基于模板匹配的方法来实现字符分割。

四、字符识别字符识别是车牌识别的核心环节之一。

在Matlab中,有多种方法和工具可以实现字符识别。

一种常用的方法是基于模板匹配的字符识别算法。

该方法需要预先准备好字符的模板库,并通过计算输入字符与模板之间的匹配度来实现识别。

另一种常用的方法是基于机器学习的字符识别算法,如支持向量机(SVM)和深度学习算法。

这些算法可以通过训练样本来学习字符的特征,然后进行识别。

不同的方法有各自的优缺点,根据具体需求选择合适的算法进行字符识别。

车牌识别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结构体来保存图形界面中各种对象的句柄,或者中间结果,这些句柄或者中间结果在创建图形对象或运算中产生,需要在以后的回调函数中多次用到,所以这里的作用类似于全局变量的作用,用来进行数据的传递。

matlab对彩色车牌字符切割代码

matlab对彩色车牌字符切割代码

一、引言在计算机视觉和图像处理领域,对彩色车牌的字符进行切割是一个重要的问题。

在实际应用中,比如车牌识别系统中,准确地将车牌上的字符进行切割可以为后续的字符识别提供可靠的输入。

而MATLAB作为一种强大的科学计算软件,其丰富的图像处理工具和灵活的编程环境使得它成为了许多研究者和工程师处理图像问题的首选工具。

本文将介绍MATLAB对彩色车牌字符切割的代码实现方法。

二、彩色车牌图像预处理1. 车牌图像的读取在MATLAB中,可以使用imread函数读取彩色车牌图像,将其存储为一个三维的数组,分别表示红、绿、蓝三个通道的像素值。

2. 图像的灰度化对于彩色车牌图像,我们首先需要将其转换为灰度图像,可以使用rgb2gray函数来实现。

3. 图像的二值化我们可以对灰度图像进行二值化处理,将车牌字符部分变为白色,背景部分变为黑色。

可以使用im2bw函数并调节合适的阈值来实现。

三、车牌字符的定位1. 边缘检测在得到车牌图像的二值图像之后,可以利用MATLAB提供的边缘检测函数,比如edge函数对图像进行边缘检测,以便后续的字符定位。

2. 车牌区域的定位利用边缘检测的结果,我们可以利用MATLAB提供的连通区域分析函数,比如bwconp函数来对车牌区域进行定位,并将其提取出来。

3. 车牌字符的切割在得到车牌区域之后,可以利用MATLAB提供的图像处理函数,比如imcrop函数来对车牌区域进行字符切割,得到单独的字符图像。

四、代码实现以下是MATLAB对彩色车牌字符切割的代码实现:```读取彩色车牌图像I = imread('car_plate.jpg');将图像转换为灰度图像I_gray = rgb2gray(I);对灰度图像进行二值化处理I_bw = im2bw(I_gray, 0.5);对二值图像进行边缘检测I_edge = edge(I_bw, 'sobel');进行连通区域分析cc = bwconp(I_edge);对车牌区域进行切割plate_region = regionprops(cc, 'BoundingBox');for i = 1:cc.NumObjects切割字符区域character_image = imcrop(I_gray,plate_region(i).BoundingBox);保存字符图像imwrite(character_image, ['character' num2str(i) '.jpg']);end```五、实验结果经过以上步骤,我们可以得到彩色车牌字符切割的结果,得到单独的字符图像,为后续的字符识别提供了可靠的输入。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%subplot(5,7,31),imshow(word3),title(&#39;3&#39;);
%subplot(5,7,32),imshow(word4),title(&#39;4&#39;);
%subplot(5,7,33),imshow(word5),title(&#39;5&#39;);
subplot(5,7,16),imshow(word2),title(&#39;2&#39;);
subplot(5,7,17),imshow(word3),title(&#39;3&#39;);
subplot(5,7,18),imshow(word4),title(&#39;4&#39;);
&#39;*.*&#39;,&#39;All Files (*.*)&#39;};
% 利用uigetfile函数交互式选取训练样本图片
[FileName FilePath,flag] = uigetfile(PicFormat,&#39;导入分割好的车牌图像&#39;,...
&#39;*.jpg&#39;,&#39;MultiSelect&#39;,&#39;on&#39;);
%imshow(I1);
%I1=getplate(I);%提取车牌
I2=binaryzation3(I1);%车牌二值化
%I3=rotate(I2);
%figure,subplot(211),imshow(I1),title(&#39;定位剪切彩色车牌&#39;);
%subplot(212),imshow(I3),title(&#39;Random矫正车牌&#39;);
subplot(5,7,19),imshow(word5),title(&#39;5&#39;);
subplot(5,7,20),imshow(word6),title(&#39;6&#39;);
subplot(5,7,21),imshow(word7),title(&#39;7&#39;);
I5=remove_border1(I4);%车牌去上下边框
%subplot(313),imshow(I5),title(&#39;去边框车牌&#39;);
%I5=filtering(I4);
%figure,imshow(I5),title(&#39;车牌滤波膨胀腐蚀&#39;);
% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
j=j+1;
end
k2=j-1;
if k2-k1&gt;=round(n/6.5)
[val,num]=min(sum(d(:,[k1+5:k2-5])));
d(:,k1+num+5)=0; % 分割
end
end
% 再切割
d=qiege(d);
% 切割出 7 个字符
y1=10;y2=0.25;flag=0;word1=[];
c7 = strcat(&#39;hg&#39;,FileName{k});
C7 = strcat(c7,&#39;.bmp&#39;);
imwrite(word1,C1);
imwrite(wormp&#39;);
imwrite(word3,C3);
word5=imresize(word5,[32 16])
word6=imresize(word6,[32 16])
word7=imresize(word7,[32 16])
%word8=imresize(word8,[32 16])
subplot(5,7,15),imshow(word1),title(&#39;1&#39;);
while flag==0
[m,n]=size(d);
left=1;wide=0;
while sum(d(:,wide+1))~=0
wide=wide+1;
end
if wide&lt;y1 % 认为是左侧干扰
d(:,[1:wide])=0;
d=qiege(d);
else
temp=qiege(imcrop(d,[1 1 wide m]));
%word3 = bwmorph(word3 , &#39;thin&#39; , Inf);
%word4 = bwmorph(word4 , &#39;thin&#39; , Inf);
%word5 = bwmorph(word5 , &#39;thin&#39; , Inf);
%word6 = bwmorph(word6 , &#39;thin&#39; , Inf);
c2 = strcat(&#39;hb&#39;,FileName{k});
C2 = strcat(c2,&#39;.bmp&#39;);
c3 = strcat(&#39;hc&#39;,FileName{k});
C3 = strcat(c3,&#39;.bmp&#39;);
c4 = strcat(&#39;hd&#39;,FileName{k});
I3=whitebackground(I2);%背景色统一成黑底白字
I4=bwareaopen(I3,10);%形态学滤波
%figure,subplot(311),imshow(I3),title(&#39;背景色统一成黑底白字二值车牌&#39;);
%subplot(312),imshow(I4),title(&#39;中值滤波后二值车牌&#39;);
subplot(5,7,3),imshow(word3),title(&#39;3&#39;);
subplot(5,7,4),imshow(word
4),title(&#39;4&#39;);
subplot(5,7,5),imshow(word5),title(&#39;5&#39;);
%stdin标准输入
PicFormat = {&#39;*.bmp&#39;,&#39;Bitmap image (*.bmp)&#39;;...
&#39;*.jpg&#39;,&#39;JPEG image (*.jpg)&#39; ;...
%字符图像大小归一化
% 商用系统程序中归一化大小为 32*16
word1=imresize(word1,[32 16])
word2=imresize(word2,[32 16])
word3=imresize(word3,[32 16])
word4=imresize(word4,[32 16])
FileName = cellstr(FileName);%n*1的cell字符数组
n = length(FileName);
for k = 1:n
I1 = imread([FilePath,FileName{k}]); %读入一幅图片
%I1=imread(&#39;dw12.bmp&#39;);
d(:,[1:wide])=0;d=qiege(d);
end
end;
% 分割出第二个字符
[word2,d]=getword(d);
% 分割出第三个字符
[word3,d]=getword(d);
% 分割出第四个字符
[word4,d]=getword(d);
% 分割出第五个字符
[word5,d]=getword(d);
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
if two_thirds/all&gt;y2
flag=1;word1=temp; % WORD 1
end
% 分割出第六个字符
[word6,d]=getword(d);
% 分割出第七个字符
[word7,d]=getword(d);
%[word8,d]=getword(d);
subplot(5,7,1),imshow(word1),title(&#39;1&#39;);
subplot(5,7,2),imshow(word2),title(&#39;2&#39;);
if ~flag
return;%flag为0,用户取消选择,返回;
end
%将导入的图像样本名称用cell数组存储,因为导入一个图像时filename用char型存储,
%cellstr作用后变为filename用1*1的cell数组存储。导入多个图像时filename用cell存储,
%cellstr作用后不变
C4 = strcat(c4,&#39;.bmp&#39;);
相关文档
最新文档