久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2899|回復: 0
打印 上一主題 下一主題
收起左側

MATLAB車牌識別源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:328038 發(fā)表于 2018-5-12 09:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
function []=main(jpg)
close all
clc
tic        %測定算法執(zhí)行的時間

[fn,pn,fi]=uigetfile('BMW.jpg','選擇圖片');%讀入圖片
I=imread([pn fn]);
figure,imshow(I);title('原始圖像');%顯示原始圖像

Im1=rgb2gray(I);
figure(2),subplot(1,2,1),
imshow(Im1);
title('灰度圖');
figure(2),
subplot(1,2,2),
imhist(Im1);
title('灰度圖的直方圖');%顯示圖像的直方圖

Tiao=imadjust(Im1,[0.19,0.78],[0,1]); %調整圖片
figure(3),
subplot(1,2,1),
imshow(Tiao);title('增強灰度圖');
figure(3),
subplot(1,2,2),
imhist(Tiao);
title('增強灰度圖的直方圖');

Im2=edge(Im1,'sobel',0.15,'both'); %使用sobel算子進行邊緣檢測
figure(4),
imshow(Im2);
title('sobel算子實現邊緣檢測')

se=[1;1;1];
Im3=imerode(Im2,se); %圖像腐蝕
figure(5),
imshow(Im3);
title('腐蝕效果圖');
se=strel('rectangle',[25,25]); % 創(chuàng)建由指定形狀的結構元素,矩形
Im4=imclose(Im3,se);%對圖像實現閉運算figure(6),
imshow(Im4);
title('平滑圖像的輪廓');

Im5=bwareaopen(Im4,2000); %刪除小面積圖形
figure(7),
imshow(Im5);
title('移除小對象');

[y,x,z]=size(Im5);
Im6=double(Im5);
Blue_y=zeros(y,1);%創(chuàng)建元素為零的數組或矩陣y*1
for i=1:y
    for j=1:x
             if(Im6(i,j,1)==1)
                  Blue_y(i,1)= Blue_y(i,1)+1; %根據Im5的y值確定
            end  
     end      
end
[temp MaxY]=max(Blue_y);%垂直方向車牌區(qū)域確定
PY1=MaxY;
while ((Blue_y(PY1,1)>=5)&&(PY1>1))
        PY1=PY1-1;
end   
PY2=MaxY;
while ((Blue_y(PY2,1)>=5)&&(PY2<y))
        PY2=PY2+1;
end
IY=I(PY1:PY2,:,:);
Blue_x=zeros(1,x);
for j=1:x
     for i=PY1:PY2
            if(Im6(i,j,1)==1)
                Blue_x(1,j)= Blue_x(1,j)+1; %根據Im5的x值確定
            end  
     end      
end
PX1=1;
while ((Blue_x(1,PX1)<3)&&(PX1<x))
       PX1=PX1+1;
end   
PX2=x;
while ((Blue_x(1,PX2)<3)&&(PX2>PX1))
        PX2=PX2-1;
end
PX1=PX1-1;%對車牌區(qū)域的校正
PX2=PX2+1;
  dw=I(PY1:PY2-6,PX1:PX2 ,:);
figure(8),
subplot(1,2,1),
imshow(IY),
title('垂直方向合理區(qū)域');
figure(8),
subplot(1,2,2),
imshow(dw),
title('定位剪切后的彩色車牌圖像')

imwrite(dw,'dw.jpg'); %把圖像寫入圖形文件中

a=imread('dw.jpg');
b=rgb2gray(a);
imwrite(b,'車牌灰度圖像.jpg');
figure(9);
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);
d=(double(b)>=T);  % d為二值圖像
imwrite(d,'車牌二值圖像.jpg');
figure(9);
subplot(3,2,2),
imshow(d),
title('2.車牌二值圖像')
figure(9),
subplot(3,2,3),
imshow(d),
title('3.均值濾波前')

h=fspecial('average',3);
d=im2bw(round(filter2(h,d)));
imwrite(d,'均值濾波后.jpg');
figure(9),
subplot(3,2,4),
imshow(d),
title('4.均值濾波后')

se=eye(2);
[m,n]=size(d); % d為二值圖像
if bwarea(d)/m/n>=0.365
    d=imerode(d,se);
elseif bwarea(d)/m/n<=0.235
    d=imdilate(d,se);
end
imwrite(d,'膨脹或腐蝕處理后.jpg');
figure(9),
subplot(3,2,5),
imshow(d),
title('5.膨脹或腐蝕處理后')

d=QieGe(d);%尋找連續(xù)有文字的塊
[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);
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;
        end
        d(:,[1:wide])=0;d=QieGe(d);
    end
end

[word2,d]=FenGe(d);%分割出第二個字符
[word3,d]=FenGe(d);%分割出第三個字符
[word4,d]=FenGe(d);%分割出第四個字符
[word5,d]=FenGe(d);%分割出第五個字符
[word6,d]=FenGe(d);%分割出第六個字符
[word7,d]=FenGe(d);%分割出第七個字符

word1=imresize(word1,[40 20]);%模板字符大小統(tǒng)一為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]);
figure(10)
subplot(2,7,1),
imshow(word1),
title('1');
subplot(2,7,2),
imshow(word2),
title('2');
subplot(2,7,3),
imshow(word3),
title('3');
subplot(2,7,4),
imshow(word4),
title('4');
subplot(2,7,5),
imshow(word5),
title('5');
subplot(2,7,6),
imshow(word6),
title('6');
subplot(2,7,7),
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' '京遼魯陜蘇浙']);   %建立自動識別字符代碼表,順序應與文件夾中的相同  
l=1;                                             
for I=1:7
      ii=int2str(I);                         %將整數轉換為字符串
     t=imread([ii,'.jpg']);
      SegBw2=imresize(t,[40 20],'nearest');    %改變圖像的大小
        if l==1             %第一位漢字識別
            kmin=37;
            kmax=40;
      elseif l>=2&&l<=3     %第二、三位 A~Z 字母識別,可根據車牌情況做修改
            kmin=11;
            kmax=36;
      elseif l>=4 & l<=7%第三、四位 0~9  A~Z字母和數字識別,可根據車牌情況做修改
            kmin=1;
            kmax=10;        
        end        
        for k2=kmin:kmax
            fname=strcat('字符模板\',liccode(k2),'.jpg');
            SamBw2 = imread(fname);
            Dm=0;
            for k1=1:40
                for l1=1:20
                    if  SegBw2(k1,l1)==SamBw2(k1,l1)
                        Dm=Dm+1;   %判斷分割字符與模板字符的相似度
                    end
                end
            end
            Error(k2)=Dm;
        end
        Error1=Error(kmin:kmax);
        MinError=max(Error1);
        findc=find(Error1==MinError);%返回矩陣中非0項的坐標
        Resault(l*2-1)=liccode(findc(1)+kmin-1);
        Resault(l*2)=' ';
        l=l+1;     
end
t=toc  
Resault
msgbox(Resault,'識別結果')

fid=fopen('Data.xls','a+');
fprintf(fid,'%s\r\n',Resault,datestr(now));
fclose(fid);                   %將識別結果保存在Data.xls中

function [word,result]=FenGe(d) %定義分割字符用函數(1)
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;      
function e=QieGe(d) %定義分割字符用函數(2)
[m,n]=size(d);
top=1;bottom=m;left=1;right=n;   % init
while sum(d(top,:))==0 && top<=m
    top=top+1;
end
while sum(d(bottom,:))==0 && bottom>=1
    bottom=bottom-1;
end
while sum(d(:,left))==0 && left<=n
    left=left+1;
end
while sum(d(:,right))==0 && right>=1
    right=right-1;
end
dd=right-left;
hh=bottom-top;
e=imcrop(d,[left top dd hh]);

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 性高湖久久久久久久久aaaaa | 一色桃子av一区二区 | 亚洲欧美一区二区三区视频 | 日日操操 | 男女羞羞视频在线免费观看 | 一级黄色生活视频 | 91精品国产色综合久久 | 日韩精品一区二区在线观看 | av资源网站 | 久久久av | 日韩福利 | 亚洲日本一区二区三区四区 | 精品久久久一区 | 国产区精品 | 精品国产伦一区二区三区观看体验 | 成人午夜免费福利视频 | 亚洲一区二区三区免费在线观看 | 成人小视频在线观看 | 国产一区二区三区视频 | 在线中文字幕国产 | 一级一级毛片免费看 | av中文字幕在线播放 | 日本成人福利视频 | 国产欧美精品 | 欧美日韩一区二区在线观看 | 久久国产精品-国产精品 | 亚洲成av人影片在线观看 | 亚洲欧美综合精品久久成人 | 九九精品网 | 91视频一区二区 | 天天爱av| 在线观看国产 | 免费精品| 欧洲一区视频 | 免费看色| 午夜性色a√在线视频观看9 | 成人在线国产 | 日韩精品一区二区三区中文在线 | 免费久久视频 | 国产精品我不卡 | 国产美女久久 |