码迷,mamicode.com
首页 > 其他好文 > 详细

【车牌识别】基于matlab车辆出入库计时系统【含Matlab源码 469期】

时间:2021-06-28 20:59:56      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:war   函数   loading   描述   src   rop   二值图像   大于   元素对象   

一、简介

基于matlab车辆出入库计时系统

二、源代码

%-----------------------------出停车场---------------------------
clc;
clear all;
[filename,filepath]=uigetfile(‘.jpg‘,‘输入一个需要识别的车牌图像‘);% 直接自动读入%
fil=strcat(filepath,filename); %strcat函数:连接字符串;把filepath的字符串与filename的连接,即路径/文件名
I=imread(fil);
I1=rgb2gray(I);  
I2=edge(I1,‘roberts‘,0.15,‘both‘);  
se=[1;1;1];  
I3=imerode(I2,se);  
se=strel(‘rectangle‘,[25,25]);  
I4=imclose(I3,se);  
I5=bwareaopen(I4,2000);  
[y,x,z]=size(I5);  
myI=double(I5);  
tic  
 white_y=zeros(y,1);  
 for i=1:y  
    for j=1:x  
             if(myI(i,j,1)==1)   
                white_y(i,1)= white_y(i,1)+1;   
            end    
     end         
 end  
 [temp MaxY]=max(white_y);  
 PY1=MaxY;  
 while ((white_y(PY1,1)>=5)&&(PY1>1))  
        PY1=PY1-1;  
 end      
 PY2=MaxY;  
 while ((white_y(PY2,1)>=5)&&(PY2<y))  
        PY2=PY2+1;  
 end  
 IY=I(PY1:PY2,:,:);  
 white_x=zeros(1,x);  
 for j=1:x  
     for i=PY1:PY2  
            if(myI(i,j,1)==1)  
                white_x(1,j)= white_x(1,j)+1;                 
            end    
     end         
 end  
    
 PX1=1;  
 while ((white_x(1,PX1)<3)&&(PX1<x))  
       PX1=PX1+1;  
 end      
 PX2=x;  
 while ((white_x(1,PX2)<3)&&(PX2>PX1))  
        PX2=PX2-1;  
 end  
 PX1=PX1-2;  
 PX2=PX2+3;  
 dw=I(PY1:PY2-8,PX1:PX2,:);  
 t=toc;      
a=dw;  
b=rgb2gray(a);   
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);  
d=(double(b)>=T);  % d:二值图像  

% 滤波  
h=fspecial(‘average‘,3);  
d=im2bw(round(filter2(h,d)));  

  
% 某些图像进行操作  
% 膨胀或腐蚀  
% 使用一个3X3的正方形结果元素对象对创建的图像进行膨胀  
se=eye(2); 
[m,n]=size(d);  
if bwarea(d)/m/n>=0.365  
    d=imerode(d,se);  
elseif bwarea(d)/m/n<=0.235  
    d=imdilate(d,se);  
end  
  
% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割  
d=qiege(d);  
[m,n]=size(d);  
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  
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=temp;   % WORD 1  
        end  
        d(:,[1:wide])=0;d=qiege(d);  
    end  
end  

三、运行结果

技术图片

四、备注

版本:2014a
完整代码或代写加1564658423

【车牌识别】基于matlab车辆出入库计时系统【含Matlab源码 469期】

标签:war   函数   loading   描述   src   rop   二值图像   大于   元素对象   

原文地址:https://www.cnblogs.com/homeofmatlab/p/14944153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!