谁有MATLAB车牌字符识别识别的字符库40*20的

只需一步,快速开始
扫一扫,访问微社区
查看: 6029|回复: 7|关注: 0
新人求助!车牌识别系统里的字符模版存放路径是哪里
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
??? Error using ==& imread
File &字符模板\苏.jpg& does not exist.
Error in ==& bb at 207
& && && && &SamBw2 = imread(fname);&&%读取图片文件中的数据
字符模版应该放在哪个目录下
<h1 style="color:# 麦片财富积分
function [d]=main(jpg)
I=imread('car8.jpg');
figure(1),imshow(I);title('原图');
I1=rgb2gray(I);& &%将真彩色图像转换为灰度图像
figure(2),subplot(1,2,1),imshow(I1);title('灰度图');
figure(2),subplot(1,2,2),imhist(I1);title('灰度图直方图');
I2=edge(I1,'robert',0.08,'both');&&%高斯滤波器,方差为0.08
figure(3),imshow(I2);title('robert算子边缘检测')
se=[1;1;1];
I3=imerode(I2,se);&&%图像的腐蚀
figure(4),imshow(I3);title('腐蚀后图像');
se=strel('rectangle',[40,40]);&&%构造结构元素,以长方形构造一个se
I4=imclose(I3,se); %对图像实现闭运算,闭运算也能平滑图像的轮廓,但与开运算相反,它一般融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
figure(5),imshow(I4);title('平滑图像的轮廓');
I5=bwareaopen(I4,2000); %从二进制图像中移除所有少于p像素的连接的组件(对象),产生另一个二进制图像
figure(6),imshow(I5);title('从对象中移除小对象');
[y,x,z]=size(I5);&&%返回I5各维的尺寸,并存储在变量y、x、z中
myI=double(I5); %换成双精度数值
& & %begin横向扫描
tic&&%计算tic与toc之间程序的运行时间
& &&&Blue_y=zeros(y,1); %产生y*1的全0矩阵
& && &for i=1:y
& && && &for j=1:x
& && && && & if(myI(i,j,1)==1)
& && && & %如果myI(i,j,1)即myI图像中坐标为(i,j)的点为蓝色
& && && & %则Blue_y的相应行的元素white_y(i,1)值加1
& && && &&&Blue_y(i,1)= Blue_y(i,1)+1;%蓝色像素点统计
& && && && &&&end&&
[temp MaxY]=max(Blue_y);%temp为向量white_y的元素中的最大值,MaxY为该值的索引( 在向量中的位置)
& &&&while ((Blue_y(PY1,1)&=120)&&(PY1&1))
& && && & PY1=PY1-1;
& &&&while ((Blue_y(PY2,1)&=40)&&(PY2&y))
& && &&&PY2=PY2+1;
& &&&IY=I(PY1:PY2,:,:);
%IY为原始图像I中截取的纵坐标在PY1:PY2之间的部分
%end横向扫描
%begin纵向扫描
& && &Blue_x=zeros(1,x);%进一步确定x方向的车牌区域
& && && &for i=PY1:PY2
& && && && & if(myI(i,j,1)==1)
& && && && && && &Blue_x(1,j)= Blue_x(1,j)+1;& && && && && &
& && && && && &end&&
& && && &&&end& && &
& && &while ((Blue_x(1,PX1)&3)&&(PX1&x))
& && && & PX1=PX1+1;
& && &end& &
& && &while ((Blue_x(1,PX2)&3)&&(PX2&PX1))
& && && && & PX2=PX2-1;
& && & end
& && &%end纵向扫描
PX1=PX1-2;%对车牌区域的校正
PX2=PX2+2;
dw=I(PY1:PY2,:,:);
& && &&&t=
figure(7),subplot(1,2,1),imshow(IY),title('行方向合理区域');
figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色车牌图像')
imwrite(dw,'dw.jpg'); %将图像数据写入到图像文件中
[filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像');
jpg=strcat(filepath,filename); %将数组filepath,filename水平地连接成单个字符串,并保存于变量jpg中
a=imread('dw.jpg');&&%读取图片文件中的数据
b=rgb2gray(a);&&%将真彩色图像转换为灰度图像
imwrite(b,'1.车牌灰度图像.jpg');&&%将图像数据写入到图像文件中
figure(8);subplot(3,2,1),imshow(b),title('1.车牌灰度图像')
g_max=double(max(max(b)));&&%换成双精度数值
g_min=double(min(min(b)));&&%换成双精度数值
T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值
[m,n]=size(b);&&%返回矩阵b的尺寸信息, 并存储在m、n中。其中m中存储的是行数,n中存储的是列数。
d=(double(b)&=T);&&% d:二值图像
imwrite(d,'2.车牌二值图像.jpg');&&%将图像数据写入到图像文件中
figure(8);subplot(3,2,2),imshow(d),title('2.车牌二值图像')
figure(8),subplot(3,2,3),imshow(d),title('3.均值滤波前')
h=fspecial('average',3); %建立预定义的滤波算子,average指定算子的类型,3为相应的参数
d=im2bw(round(filter2(h,d)));&&%转换为二值图像
imwrite(d,'4.均值滤波后.jpg');&&%将图像数据写入到图像文件中
figure(8),subplot(3,2,4),imshow(d),title('4.均值滤波后')
% 某些图像进行操作
% 膨胀或腐蚀
% se=strel('square',3); % 使用一个3X3的正方形结果元素对象对创建的图像膨胀
% 'line'/'diamond'/'ball'...
se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵
[m,n]=size(d); %返回矩阵b的尺寸信息, 并存储在m、n中。其中m中存储的是行数,n中存储的是列数
if bwarea(d)/m/n&=0.365&&%计算二值图像中对象的总面积
& && &&&d=imerode(d,se);&&%图像的腐蚀
elseif bwarea(d)/m/n&=0.235&&%计算二值图像中对象的总面积
& && && &d=imdilate(d,se);&&%实现膨胀操作
imwrite(d,'5.膨胀或腐蚀处理后.jpg');&&%将图像数据写入到图像文件中
figure(8),subplot(3,2,5),imshow(d),title('5.膨胀或腐蚀处理后')
% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
d=qiege(d);&&%切割
[m,n]=size(d); %返回矩阵b的尺寸信息, 并存储在m、n中。其中m中存储的是行数,n中存储的是列数
figure,subplot(2,1,1),imshow(d),title(n)
k1=1;k2=1;s=sum(d);j=1;
while j~=n
& && &&&while s(j)==0
& && && && & j=j+1;
& && &&&end
& && && && && &k1=j;
& && && & while s(j)~=0 && j&=n-1
& && && && && &j=j+1;
& && && &end
& && && && && &&&k2=j-1;
& && & if k2-k1&=round(n/6.5)
& && && && &&&[val,num]=min(sum(d(:,[k1+5:k2-5])));
& && && &&&d(:,k1+num+5)=0;&&% 分割
& && && & end
d=qiege(d);
% 切割出 7 个字符
y1=10;y2=0.25;flag=0;word1=[];
while flag==0
& && && && &[m,n]=size(d);
& && &&&left=1;wide=0;
& && &&&while sum(d(:,wide+1))~=0
& && && && &wide=wide+1;
& && && &end
& && && &if wide&y1& &% 认为是左侧干扰
& && && && &&&d(:,[1:wide])=0;
& && && && &&&d=qiege(d);
& && && &else
& && && && &&&temp=qiege(imcrop(d,[1 1 wide m]));
& && && && &&&[m,n]=size(temp);
& && && && &&&all=sum(sum(temp));
& && && && &&&two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
& && && & if two_thirds/all&y2
& && && && && &flag=1;word1=& &% WORD 1
& && && && & end
& && && && &&&d(:,[1:wide])=0;d=qiege(d);
& && && & end
% 分割出第二个字符
[word2,d]=getword(d);
% 分割出第三个字符
[word3,d]=getword(d);
% 分割出第四个字符
[word4,d]=getword(d);
% 分割出第五个字符
[word5,d]=getword(d);
% 分割出第六个字符
[word6,d]=getword(d);
% 分割出第七个字符
[word7,d]=getword(d);
figure(9),imshow(word1),title('1');
figure(10),imshow(word2),title('2');
figure(11),imshow(word3),title('3');
figure(12),imshow(word4),title('4');
figure(13),imshow(word5),title('5');
figure(14),imshow(word6),title('6');
figure(15),imshow(word7),title('7');
[m,n]=size(word1); %返回矩阵b的尺寸信息, 并存储在m、n中。其中m中存储的是行数,n中存储的是列数
word1=imresize(word1,[40 20]);% 商用系统程序中归一化大小为 40*20,此处演示
word2=imresize(word2,[40 20]); %对图像做缩放处理,高40,宽20
word3=imresize(word3,[40 20]);
word4=imresize(word4,[40 20]);
word5=imresize(word5,[40 20]);
word6=imresize(word6,[40 20]);
word7=imresize(word7,[40 20]);
figure(16),
subplot(3,7,8),imshow(word1),title('1');
subplot(3,7,9),imshow(word2),title('2');
subplot(3,7,10),imshow(word3),title('3');
subplot(3,7,11),imshow(word4),title('4');
subplot(3,7,12),imshow(word5),title('5');
subplot(3,7,13),imshow(word6),title('6');
subplot(3,7,14),imshow(word7),title('7');
imwrite(word1,'1.jpg');
imwrite(word2,'2.jpg');
imwrite(word3,'3.jpg');
imwrite(word4,'4.jpg');
imwrite(word5,'5.jpg');
imwrite(word6,'6.jpg');
imwrite(word7,'7.jpg');
liccode=char(['0':'9' 'A':'Z' '苏豫陕鲁']);&&%建立自动识别字符代码表,将t'0':'9' 'A':'Z' '苏豫陕鲁'多个字符串组成一个字符数组,每行对应一个字符串,字符数不足的自动补空格
SubBw2=zeros(40,20);&&%产生40*20的全0矩阵
& && && &&&ii=int2str(I);&&%转换为串
& && &&&t=imread([ii,'.jpg']);&&%读取图片文件中的数据
& && &&&SegBw2=imresize(t,[40 20],'nearest');&&%对图像做缩放处理,高40,宽20,'nearest': 这个参数,是默认的, 即改变图像尺寸时采用最近邻插值算法
& && && &&&if l==1& && && && && &&&%第一位汉字识别
& && && && &kmin=37;
& && && && &kmax=40;
& && &&&elseif l==2& && && && & %第二位 A~Z 字母识别
& && && && &kmin=11;
& && && && &kmax=36;
& && &&&else l&=3& && && && && &%第三位以后是字母或数字识别
& && && && &kmin=1;
& && && && &kmax=36;
& && &&&end
& && &&&for k2=kmin:kmax
& && && && &fname=strcat('字符模板\',liccode(k2),'.jpg');&&%把一个行向量转化成字符串
& && && && &SamBw2 = imread(fname);&&%读取图片文件中的数据
& && && && &for&&i=1:40
& && && && && & for j=1:20
& && && && && && &&&SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
& && && && && & end
& && && && &end
& && && &&&% 以上相当于两幅图相减得到第三幅图
& && && && &Dmax=0;
& && && && &for k1=1:40
& && && && && & for l1=1:20
& && && && && && &&&if&&( SubBw2(k1,l1) & 0 | SubBw2(k1,l1) &0 )
& && && && && && && && &Dmax=Dmax+1;
& && && && && && &&&end
& && && && && & end
& && && && &end
& && && && &Error(k2)=D
& && &&&end
& && &&&Error1=Error(kmin:kmax);
& && &&&MinError=min(Error1);
& && &&&findc=find(Error1==MinError);
& && &&&l=l+1;
figure(17),subplot(3,1,2),imshow(dw),title ('车牌号码: 陕 A B A 2 2 3');
%子程序:(getword子程序)
function [word,result]=getword(d)
word=[];flag=0;y1=8;y2=0.5;
& & while flag==0
& && &&&[m,n]=size(d);
& && &&&wide=0;
& && &&&while sum(d(:,wide+1))~=0 && wide&=n-2
& && && && &wide=wide+1;
& && &&&end
& && &&&temp=qiege(imcrop(d,[1 1 wide m]));
& && &&&[m1,n1]=size(temp);
& && &&&if wide&y1 && n1/m1&y2
& && && && &d(:,[1:wide])=0;
& && && && &if sum(sum(d))~=0
& && && && && & d=qiege(d);&&% 切割出最小范围
& && && && &else word=[];flag=1;
& && && && &end
& && &&&else
& && && && &word=qiege(imcrop(d,[1 1 wide m]));
& && && && &d(:,[1:wide])=0;
& && && && &if sum(sum(d))~=0;
& && && && && & d=qiege(d);flag=1;
& && && && &else d=[];
& && && && &&&end
& && && &&&end
& && &&&end
& && && & result=d;
& && && &% (qiege子程序)
function e=qiege(d)
[m,n]=size(d);
top=1;bottom=m;left=1;right=n;& &% init
while sum(d(top,:))==0 && top&=m
& && && && &top=top+1;
while sum(d(bottom,:))==0 && bottom&1
& && && & bottom=bottom-1;
while sum(d(:,left))==0 && left&n
& && && & left=left+1;
while sum(d(:,right))==0 && right&=1
right=right-1;
hh=bottom-
e=imcrop(d,[left top dd hh]);&&%返回图像的一个裁剪区域
<h1 style="color:# 麦片财富积分
要毕业设计了 发表于
function [d]=main(jpg)
I=imread('car8.jpg');
figure(1),imshow(I);title('原图');
我也是做这个的 在这遇到问题了
<h1 style="color:# 麦片财富积分
我也遇到这个问题了,求救啊啊啊啊啊啊。。。。。。
<h1 style="color:# 麦片财富积分
??? Error using ==& imread
File &字符模板\鲁.jpg& does not exist.
Error in ==& main at 206
& && && && &SamBw2 = imread(fname);
这个能有人帮忙解答么?
<h1 style="color:# 麦片财富积分
??? Error using ==& imread
File &字符模板\苏.jpg& does not exist.
Error in ==& main at 206
& && && && &SamBw2 = imread(fname);
这个问题现在有大神能解决吗?字符模板应该放哪?毕设卡这了,希望能帮忙解决下,谢谢!!!
<h1 style="color:# 麦片财富积分
楼主这个问题解决了没?
<h1 style="color:# 麦片财富积分
我也遇到了这个问题,我是从文件属性里找的位置,我觉得应该没问题的,可是它提示就是路径不存在:'(
站长推荐 /3
车辆动力学工具箱介绍:一款集成3D虚拟环境的汽车仿真产品
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区导读:就爱阅读网友为您分享以下“数字图像处理车牌识别课程设计matlab实现附源代码”的资讯,希望对您有所帮助,感谢您对92to.com的支持![m,n]=size(d);
subplot(3,2,5),imshow(d),title(n)
k1=1;k2=1;s=sum(d);j=1;
while j~=n
while s(j)==0
while s(j)~=0 && j&=n-1
if k2-k1&=round(n/6.5)
[val,num]=min(sum(d(:,[k1+5:k2-5])));
d(:,k1+num+5)=0;
d=qiege(d);
% 切割出 7 个字符
y1=10;y2=0.25;flag=0;word1=[];
while flag==0
[m,n]=size(d);
left=1;wide=0;
while sum(d(:,wide+1))~=0
wide=wide+1;
if wide&y1
% 认为是左侧干扰
d(:,[1:wide])=0;
d=qiege(d);
temp=qiege(imcrop(d,[1 1 wide m]));
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
if two_thirds/all&y2
flag=1;word1=
d(:,[1:wide])=0;d=qiege(d);
% 分割出第二个字符
[word2,d]=getword(d);
% 分割出第三个字符
[word3,d]=getword(d);
% 分割出第四个字符
[word4,d]=getword(d);
% 分割出第五个字符
[word5,d]=getword(d);
% 分割出第六个字符
[word6,d]=getword(d);
% 分割出第七个字符
[word7,d]=getword(d);
figure(9);
subplot(2,7,1),imshow(word1),title(&#39;1&#39;);
subplot(2,7,2),imshow(word2),title(&#39;2&#39;);
subplot(2,7,3),imshow(word3),title(&#39;3&#39;);
subplot(2,7,4),imshow(word4),title(&#39;4&#39;);
subplot(2,7,5),imshow(word5),title(&#39;5&#39;);
subplot(2,7,6),imshow(word6),title(&#39;6&#39;);
subplot(2,7,7),imshow(word7),title(&#39;7&#39;);
[m,n]=size(word1);
% 商用系统程序中归一化大小为 40*20,此处演示
word1=imresize(word1,[40 20]);
word2=imresize(word2,[40 20]);
word3=imresize(word3,[40 20]);
word4=imresize(word4,[40 20]);
word5=imresize(word5,[40 20]);
word6=imresize(word6,[40 20]);
word7=imresize(word7,[40 20]);
subplot(2,7,8),imshow(word1),title(&#39;1&#39;);
subplot(2,7,9),imshow(word2),title(&#39;2&#39;);
subplot(2,7,10),imshow(word3),title(&#39;3&#39;);
subplot(2,7,11),imshow(word4),title(&#39;4&#39;);
subplot(2,7,12),imshow(word5),title(&#39;5&#39;);
subplot(2,7,13),imshow(word6),title(&#39;6&#39;);
subplot(2,7,14),imshow(word7),title(&#39;7&#39;);
imwrite(word1,&#39;1.jpg&#39;);
imwrite(word2,&#39;2.jpg&#39;);
imwrite(word3,&#39;3.jpg&#39;);
imwrite(word4,&#39;4.jpg&#39;);
imwrite(word5,&#39;5.jpg&#39;);
imwrite(word6,&#39;6.jpg&#39;);
imwrite(word7,&#39;7.jpg&#39;);
运行结果如下:
9.车牌识别:
模板匹配是图象识别方法中最具代表性的基本方法之一,它是将从待识别的图象或图象区域f(i,j)中提取的若干特征量与模板T(i,j)相应的特征量逐个进行比较,计算它们之间规格化的互相关量,其中互相关量最大的一个就表示期间相似程度最高,可将图象归于相应的类。也可以计算图象与模板特征量之间的距离,用最小距离法判定所属类。
此处采用相减的方法来求得字符与模板中哪一个字符最相似,然后找到相似度最大的输出。汽车牌照的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限,汉字共约50多个,大写英文字母26个,数字10个。为了实验方便,结合本次设计所选汽车牌照的特点,只建立了7个数字26个字母与10个数字的模板。其他模板设计的方法与此相同。
首先取字符模板,接着依次取待识别字符与模板进行匹配,将其与模板字符相减,得到的0越多那么就越匹配。把每一幅相减后的图的0值个数保存,即为识别出来的结果。 识别的流程图如下所示:
欢迎转载:
相关推荐:你好,我在做车牌识别时,字符模板已经在matlab路径下了_百度知道
你好,我在做车牌识别时,字符模板已经在matlab路径下了
for k2=kmin:kmax
fname=strcat(&#39;字符模板&#39;,liccode(k2),&#39;.jpg&#39;);
SamBw22=imread(fname);运行的话出现错误??? Error using ==& imreadFile &字符模板A.jpg& does not exist.怎么会出现“字符模板A”,求解答,谢谢!
我有更好的答案
我测了下,代码没毛病。你检查一下你保存的字符模板是否是jpg格式、文件名是否正确。还有一个问题,你这个for循环最后为什么没有end,强迫症不能忍。
采纳率:96%
去网上下载一份matlab字符模版即可,你的matlab可能木有。。。
本回答被提问者采纳
为您推荐:
其他类似问题
车牌识别的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。1被浏览9分享邀请回答暂时还没有回答,开始写第一个回答

我要回帖

更多关于 车牌字符识别算法 的文章

 

随机推荐