⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpcseg.m

📁 实用原则的基础上不仅可以提高汽车车牌上汉字、英文字母和 数字的识别率
💻 M
📖 第 1 页 / 共 2 页
字号:
se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵
[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
imwrite(d,'13.膨胀或腐蚀处理后.jpg');
figure(3),subplot(3,2,5),imshow(d),title('13.膨胀或腐蚀处理后')

% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
d=qiege(d);
[m,n]=size(d);
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
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
% 分割出第二个字符
[word2,d]=getword(d);
% 分割出第三个字符
[word3,d]=getword(d);
% 分割出第四个字符
[word4,d]=getword(d);
% 分割出第五个字符
[word5,d]=getword(d);
% 分割出第六个字符
[word6,d]=getword(d);
% 分割出第七个字符
[word7,d]=getword(d);
subplot(5,7,1),imshow(word1),title('1');
subplot(5,7,2),imshow(word2),title('2');
subplot(5,7,3),imshow(word3),title('3');
subplot(5,7,4),imshow(word4),title('4');
subplot(5,7,5),imshow(word5),title('5');
subplot(5,7,6),imshow(word6),title('6');
subplot(5,7,7),imshow(word7),title('7');
[m,n]=size(word1);
% 商用系统程序中归一化大小为 32*16,此处演示
word1=imresize(word1,[40 20]);
word2=wordprocess(word2);
word3=wordprocess(word3);
word4=wordprocess(word4);
word5=wordprocess(word5);
word6=wordprocess(word6);
word7=wordprocess(word7);


subplot(5,7,15),imshow(word1),title('1');
subplot(5,7,16),imshow(word2),title('2');
subplot(5,7,17),imshow(word3),title('3');
subplot(5,7,18),imshow(word4),title('4');
subplot(5,7,19),imshow(word5),title('5');
subplot(5,7,20),imshow(word6),title('6');
subplot(5,7,21),imshow(word7),title('7');
imwrite(word1,'14.字符分割归一化后 1.jpg');
imwrite(word2,'14.字符分割归一化后 2.jpg');
imwrite(word3,'14.字符分割归一化后 3.jpg');
imwrite(word4,'14.字符分割归一化后 4.jpg');
imwrite(word5,'14.字符分割归一化后 5.jpg');
imwrite(word6,'14.字符分割归一化后 6.jpg');
imwrite(word7,'14.字符分割归一化后 7.jpg');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
word='';
word(1)=wordrec(word1);
word(2)=wordrec(word2);
word(3)=wordrec(word3);
word(4)=wordrec(word4);
word(5)=wordrec(word5);
word(6)=wordrec(word6);
word(7)=wordrec(word7);
clc
save I  'word1' 'word2' 'word3' 'word4' 'word5' 'word6' 'word7'
clear
load I;
load bp net;
word='';
word(1)=wordrec(word1);
word(2)=wordrec(word2);
word(3)=wordrec(word3);
word(4)=wordrec(word4);
word(5)=wordrec(word5);
word(6)=wordrec(word6);
word(7)=wordrec(word7);
word=strcat('识别结果:',word);
subplot(5,3,14),imshow([]),title(word,'fontsize',24)

% 该子程序用于切割出最小范围
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;
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]);

% 分割字符
function [word,result]=getword(d)
word=[];flag=0;y1=8;y2=0.5;
% if d==[]
%   word=[];
% else
    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
%end
          result=d;
      
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 该子程序用于字符归一化处理
function d=wordprocess(d)
[m,n]=size(d);
%top 1/3, bottom 1/3
for i=1:round(m/3)
    if sum(sum(d([i:i+0],:)))==0
        ii=i;d([1:ii],:)=0;
    end
end
for i=m:-1:2*round(m/3)
    if sum(sum(d([i-0:i],:)))==0
        ii=i;d([ii:m],:)=0;
    end
end
if n~=1
    d=qiege(d);
end
% d=..这个可以通过训练过程设置大小
% d=imresize(d,[32 16]); % 商用系统程序中归一划大小为:32*16
d=imresize(d,[40 20]); 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 编号:A-Z 分别为 1-26; 0-9 分别为 27-36;
% 京  津  沪  渝  港  澳  吉  辽  鲁  豫  冀  鄂  湘  晋  青  皖  苏
% 赣  浙  闽  粤  琼  台  陕  甘  云  川  贵  黑  藏  蒙  桂  新  宁
% 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 
% 60 61 62 63 64 65 66 67 68 69 70
% 使用 BP 网络
function word=wordrec(xx)
% clear
% clc
load bp net;
xx=im2bw(xx);xx=double(xx(:));  % 使用阈值将图像转换为二进制图像
a=sim(net,xx);  % 归一划为: 32*16,则 xx=512*1;
[val,num]=max(a);
if num<=26
    word=char(double('A')+num-1);
elseif num<=36
    word=char(double('0')+num-1-26);
else
    switch num
        case 37
            word='京';
        case 38
            word='津';
        case 39
            word='沪';
        case 40
            word='渝';
        case 41
            word='港';
        case 42
            word='澳';
        case 43
            word='吉';
        case 44
            word='辽';
        case 45
            word='鲁';
        case 46
            word='豫';
        case 47
            word='冀';
        case 48
            word='鄂';
        case 49
            word='湘';
        case 50
            word='晋';
        case 51
            word='青';
        case 52
            word='皖';
        case 53
            word='苏';
        case 54
            word='赣';
        case 55
            word='浙';
        case 56
            word='闽';
        case 57
            word='粤';
        case 58
            word='琼';
        case 59
            word='台';
        case 60
            word='陕';
        case 61
            word='甘';
        case 62
            word='云';
        case 63
            word='川';
        case 64
            word='贵';
        case 65
            word='黑';
        case 66
            word='藏';
        case 67
            word='蒙';
        case 68
            word='桂';
        case 69
            word='新';
        case 70
            word='宁';
    end
end





        
        
            
            

            
            
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -