【車牌識別】基於matlab車輛出入庫計時系統【含Matlab原始碼 469期】
阿新 • • 發佈:2021-06-28
一、簡介
基於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