车牌的定位、字符分割、并用神经网络实现了字符识别功能matlab源码程序 - matlab图像处理 - 谷速源码
下载频道> 资源分类> matlab源码> 图像处理> 车牌的定位、字符分割、并用神经网络实现了字符识别功能matlab源码程序

标题:车牌的定位、字符分割、并用神经网络实现了字符识别功能matlab源码程序
分享到:

所属分类: 图像处理 资源类型:程序源码 文件大小: 108.11 KB 上传时间: 2019-06-16 14:04:55 下载次数: 92 资源积分:1分 提 供 者: zhangsan456 code
内容:
车牌的定位、字符分割、并用神经网络实现了字符识别功能matlab源码程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
function [d]=lpcseg(jpg)
clc
clear
I=imread('car.jpg');                %特征提取?
I1=rgb2gray(I);
I2=edge(I1,'robert',0.15,'both');     %   ?
se=[1;1;1];                           %  ?
I3=imerode(I2,se);
se=strel('rectangle',[25,25]);
I4=imclose(I3,se);
I5=bwareaopen(I4,2000);               %    <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; %扫描y方向
            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-1;
 PX2=PX2+1;
 dw=I(PY1:PY2-8,PX1:PX2,:);
 t=toc; 
figure(1),subplot(4,2,1),imshow(dw), ('定位剪切后的彩色车牌图像')
imwrite(dw,'dw.jpg');
[filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像');
jpg=strcat(filepath,filename);
a=imread(jpg);
figure(1);subplot(4,2,1),imshow(a), ('1.定位剪切后的彩色车牌图像')
b=rgb2gray(a);
imwrite(b,'2.车牌灰度图像.jpg');
figure(1);subplot(4,2,2),imshow(b), ('2.车牌灰度图像')
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,'3.车牌二值图像.jpg');
figure(1);subplot(4,2,3),imshow(d), ('3.车牌二值图像')
 
% 旋转
rotate=0;
d=imread('3.车牌二值图像.jpg');
bw=edge(d);
[m,n]=size(d);
%theta=1:179;
% bw 表示需要变换的图像,theta 表示变换的角度
% 返回值 r 表示的列中包含了对应于 theta中每一个角度的 Radon 变换结果
% 向量 xp 包含相应的沿 x轴的坐标
%[r,xp]=radon(bw,theta);
%i=find(r>0);
%[foo,ind]=sort(-r(i));     %
%k=i(ind(1:size(i)));
%[y,x]=ind2sub(size(r),k);
%[mm,nn]=size(x);
%if mm~=0 && nn~=0
%    j=1;
%    while mm~=1 && j<180 && nn~=0
  %      i=find(r>j);
  %      [foo,ind]=sort(-r(i));
   %     k=i(ind(1:size(i)));
  %      [y,x]=ind2sub(size(r),k);
  %      [mm,nn]=size(x);
  %      j=j+1;
  %  end
 %   if nn~=0
 %       if x   % Enpty matrix: 0-by-1 when x is an enpty array.列
 %           x=x;
 %      else  % 可能 x 为空值
  %          x=90; % 其实就是不旋转
  %      end
  %      d=imrotate(d,abs(90-x)); % 旋转图像
  %      rotate=1;
  %  end
  %end
%imwrite(d,'4.Radon 变换旋转后的二值图像.jpg');
%figure(1),subplot(3,2,4),imshow(d), ('4.Radon 变换旋转后的二值图像')
 
% 统一到白底黑字
[m,n]=size(d);
% flag=0 表示原来就是白底黑字,否则表示原来是黑底白字
flag=0;
c=d([round(m/3):m-round(m/3)],[round(n/3):n-round(n/3)]);
if sum(sum(c))/m/n*9>0.5
    d=~d;flag=1;
end
imwrite(d,'4.统一成白底黑字.jpg');
figure(1),subplot(4,2,4),imshow(d), ('4.背景色统一成白底黑字')
%figure(2),subplot(4,1,1),imshow(d), ('5.黑底白字的二值车牌图像')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%去除左右上下边框
%去除左右边框
% 对反色后的图像预处理,整列几乎为白的认为是背景
if flag==1
    for j=1:n
        if sum(sum(d(:,j)))/m>=0.95
            d(:,j)=0;
        end
    end
    % 对以上处理后的图像再处理
    % 在左边 1/2 处找连续两条黑线,认为该黑线左边为背景;在右边 1/2 处找连续两条黑线,认为该黑线右边是背景
    % 左边 1/2
    jj=0;
    for j=1:round(n/2)
        if sum(sum(d(:,[j:j+0])))==0
            jj=j;
        end
    end
    d(:,[1:jj])=0;
    % 右边 1/2
    for j=n:-1:round(n/2)
        if sum(sum(d(:,[j-0:j])))==0
            jj=j;
        end
    end
    d(:,[jj:n])=0;
end
imwrite(d,'5.连续两条黑线则被认为是背景.jpg');
figure(2),subplot(4,1,1),imshow(d), ('5.连续两条黑线则被认为是背景.')
% 去除上下边框
% STEP 1  黑白跳变小于阈值则被视为背景
% 上面 2/5
y1=10;  % y1: 跳变阈值
for i=1:round(m/5*2)
    count=0;jump=0;temp=0;
    for j=1:n
        if d(i,j)==1
            temp=1;
        else
            temp=0;
        end
        if temp==jump
            count=count;
        else
            count=count+1;
        end
        jump=temp;
    end
    if count<y1
        d(i,:)=0;
    end
end
% 下面 2/5
for i=2*round(m/5):m
    count=0;jump=0;temp=0;
    for j=1:n
        if d(i,j)==1
            temp=1;
        else
            temp=0;
        end
        if temp==jump
            count=count;
        else
            count=count+1;
        end
        jump=temp;
    end
    if count<y1
        d(i,:)=0;
    end
end
imwrite(d,'6.黑白跳变小于某阈值的行则被视为背景.jpg');
figure(2),subplot(4,1,2),imshow(d), ('6.黑白跳变小于某阈值的行则被视为背景')
 
% STEP 2  单行白色大于阈值则被认为是背景,考虑 FLAG 的值
% 上面 2/5
%y2=round(n/2); % y2: 阈值  round取整
%for i=1:round(m/5*2)
%    if flag==0
  %      temp=sum(d(i,:));y2=round(n/2);
 %       if temp>y2
 %           d(i,:)=0;
 %       end
 %else
 %       temp=m-sum(d(i,:));y2=m-round(n/2);
 %       if temp<y2
 %           d(i,:)=0;
 %       end
 %   end
 %end
% 下面 2/5
%for i=round(3*m/5):m
  %  if flag==0
  %     temp=sum(d(i,:));y2=round(n/2);
  %      if temp>y2
  %         d(i,:)=0;
  %     end
  %  else
 %       temp=m-sum(d(i,:));y2=m-round(n/2);
 %       if temp<y2
 %           d(i,:)=0;
 %end
 %end
 %end
%imwrite(d,'7.单行白色点总数大于某阈值则该行被认为是背景.jpg');
%figure(2),subplot(5,1,3),imshow(d), ('7.单行白色点总数大于某阈值则该行被认为是背景')
% STEP 3  单行白色大于阈值则被认为是背景,考虑 FLAG 的值
% 上面 2/5
y2=round(n/2); % y2: 阈值
for i=1:round(m/5*2)
    if flag==0
        temp=sum(d(i,:));y2=round(n/2);
        if temp>y2
            d(i,:)=0;
        end
    else
        temp=m-sum(d(i,:));y2=m-round(n/2);
        if temp<y2
            d(i,:)=0;
        end
    end
end
% 下面 2/5
for i=round(3*m/5):m
    if flag==0
        temp=sum(d(i,:));y2=round(n/2);
        if temp>y2
            d(i,:)=0;
        end
    else
        temp=m-sum(d(i,:));y2=m-round(n/2);
        if temp<y2
            d(i,:)=0;
        end
    end
end
imwrite(d,'7.单行白色点总数大于某阈值则该行被认为是背景.jpg');
figure(2),subplot(4,1,3),imshow(d), ('7.单行白色点总数大于某阈值则该行被认为是背景')
%  STEP 4 做完以上处理后,上边 1/2 中搜索连续两条黑线,认为该黑线以上为背景;
% 在下边 1/2 中搜索连续两条黑线,认为该黑线以下为背景
% 上边 1/2
for i=1:round(m/2)
    if sum(sum(d([i:i+0],:)))==0
        ii=i;
    end
end
d([1:ii],:)=0;
% 下边 1/2
for i=m:-1:round(m/2)
    if sum(sum(d([i-0:i],:)))==0
        ii=i;
    end
end
d([ii:m],:)=0;
imwrite(d,'8.搜索上下两条黑线后的结果.jpg');
figure(2),subplot(4,1,4),imshow(d), ('8.搜索上下两条黑线后的结果')
 
% 反旋转
if rotate==1
    d=imrotate(d,-abs(x-90));
end
imwrite(d,'10.反旋转去毛刺后.jpg');
%figure(3),subplot(3,2,1),imshow(d), ('10.反旋转去毛刺后')
% 切割处最小范围
d=qiege(d);e=d;
imwrite(d,'9.切割处最小范围.jpg');
figure(3),subplot(3,2,1),imshow(d), ('9.切割处最小范围')
%figure(3),subplot(3,2,2),imshow(d), ('9.均值滤波前')
 
% 滤波
h=fspecial('average',3);        %Create 2-D special filters 
d=im2bw(round(filter2(h,d)));   %Convert an image to a binary image, d on threshold
imwrite(d,'10.均值滤波后.jpg');
figure(3),subplot(3,2,2),imshow(d), ('10.均值滤波后')
 
% 某些图像进行操作
% 膨胀或腐蚀
% se=strel('square',3);  % 使用一个3X3的正方形结果元素对象对创建的图像进行膨胀
% 'line'/'diamond'/'ball'...
sse=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,sse);
elseif bwarea(d)/m/n<=0.235
    d=imdilate(d,sse);
end
imwrite(d,'11.膨胀或腐蚀处理后.jpg');
figure(3),subplot(3,2,3),imshow(d), ('11.膨胀或腐蚀处理后')
 
I=imread('11.膨胀或腐蚀处理后.jpg');
%I=imread('49-3-BW01.jpg');
I=double(im2bw(I,0.43));
[y x]=size(I);
 
 
Top=zeros(1,x);         % 顶端轮廓检测
for i=1:x
        j=1;
    while ((I(j,i)==1)&(j<y))
        j=j+1;
    end
    Top(i)=y-j;
end
 
Bottom=zeros(1,x);      % 底部轮廓检测
for i=1:x
        j=y;
    while ((I(j,i)==1)&(j>1))
        j=j-1;
    end
    Bottom(i)=y-j;
end
 
Height=Top-Bottom;
WordHeight=max(Height);    % 文字高度
 
%=== 轮廓线的凹检测 ===%
TopD=zeros(1,x-1);
Concave=1;                            % 记录凹轮廓处的位置, 1表示默认起始列为第一个Concave
Deep=0;                               % 下降值
DeepH=0;                              %  上升值
DeepT=5;                              % 凹轮廓的深度阈值
Sign=0;
for i=1:x-1
    TopD(i)=Top(i+1)-Top(i);
end
for i=1:x-2
    if (TopD(i)<0)  % 判断是否为凹轮廓
        Sign=1;     % 置标志位
        DeepH=0;
        Deep=Deep+TopD(i);
        tempX=i+1;  % 下一列可能为切分的Concave, 最接近于左端
    end
    if ((Sign==1)&(TopD(i)>0))
        if (abs(Deep)>=DeepT)
            DeepH=DeepH+TopD(i);
            if (abs(DeepH)>=DeepT)
               Concave=[Concave tempX];
               Sign=0;    % 确认为凹后,复位标志位
               DeepH=0;
           end
        else
           Sign=0;    % 确认为凹后,复位标志位
           Deep=0;           
        end      
    end
end
 
%=== 轮廓线的凸检测 ===%
BottomD=zeros(1,x-1);
Convex=1;
Asend=0;                     % 上升值
Desend=0;                    % 下降值
ConvexT=3;                   %  凸程度阈值
Sign=0;
for i=1:x-1
    BottomD(i)=Bottom(i+1)-Bottom(i);
end
for i=1:x-2
    if (BottomD(i)>0)
        Sign=1;
        Desend=0;
        Asend=Asend+BottomD(i);        
        tempX=i+1;         % 最接近于左端
    end
    if((Sign==1)&(BottomD(i)<0))
        if (abs(Asend)>=ConvexT)
            Desend=Desend+BottomD(i);
            if (abs(Desend)>=ConvexT)
                Convex=[Convex tempX];
                Sign=0;             % 复位                                    
                Desend=0;
            end
        else
        Sign=0;             % 复位
        Asend=0;     
        end  
    end
end
 
%=== 切分 ===%
 
[mytemp n]=size(Concave);   % 注意 Concave 的第一个数值无效
StrokeT=5;                  % 笔划宽度阈值
GapT=8;
W=zeros(1,n);
 
for i=1:n-1
    W(i)=Concave(i+1)-Concave(i);
end
W(n)=x-Concave(n);
Width=median(W);           % 近似的字符宽度
 
    PXR1=1;                 % 记录第一次切分位置
    PXR2=1;                 % 记录第二次切分位置
       
    Mark=0;         % 记录黑白转换的次数
    %CrossSign=0;    % 交错粘连的标志
    
    Black=zeros(1,x);        % 统计笔划像素点
    BP=zeros(1,x);
    SegSoke=zeros(3,x);      % 切分点处的笔划宽度
    RH=zeros(1,x);           % 切分后的高度比
    RW=zeros(1,x);           % 切分后的宽度比    
    Score=zeros(1,x);        % 特征值的总得分
    
    XGood=1;                 %  X切分位置    
    SegY=1;         % 记录第一次切分的Y深度
 
for k=2:n
    WordH=max(Height(Concave(k-1):Concave(k)));
    WordW=Concave(k)-Concave(k-1);
    if ((WordW>=0.5*Width)&(WordW<=1.5*Width))
             
        % 选定切分的区域
        PX1=Concave(k);
        PX2=PX1;              
        while ((TopD(PX2)==0)&(PX2<x))
               PX2=PX2+1;                % 凹右边的列位置
        end
            
       i=fix((PX1+PX2)/2+2);
   
       if (Top(i)==1)                  % 无粘连
           PXR1=[PXR1 i];
           PXR2=[PXR2 i];
       else                            
            j=y+1-Top(i);                % PY为实际的y坐标值,此处已为黑色像素点
            Mark=0;        
            while((j<y)&(Mark<2)) 
                if (I(j,i)==0)
                    Black(i)=Black(i)+1; % 记录黑色象素点数            
                    Si=i;
                    while ((Si>1)&(I(j,Si)==0))   % 左笔划宽度
                            Si=Si-1;
                            SegSoke(1,i)=SegSoke(1,i)+1;
                    end   
                        
                    Si=i;
                    while ((Si<x)&(I(j,Si)==0))   % 右笔划宽度
                           Si=Si+1;
                           SegSoke(2,i)=SegSoke(2,i)+1;
                     end
               end
                 
                Mark=Mark+abs(I(j+1,i)-I(j,i));  % 检测是否通过笔划
                j=j+1;
            end
            SegY=[SegY j-1];                           % 第一次切分截止处
            if (j==38)
                PXR1=[PXR1 i];
                PXR2=[PXR2 i];
            else                                       % 单点粘连  
                SLi=i;
                while ((SLi>1)&(I(j-1,SLi)==1))        % 选定区域左边界
                       SLi=SLi-1;
                end
        
                SRi=i;
                while ((SRi<x+1)&(I(j-1,SRi)==1))        % 选定区域右边界
                       SRi=SRi+1;
                end
                [Mytemp PX2]=max(Bottom(SLi:SRi));
                PXR2=[PXR2 PX2+SLi-1];
                PXR1=[PXR1 i];
            end
      end    
         
    else if (WordW>1.5*Width)
             PX=fix((Concave(k)+Concave(k-1))/2);  % 避免水平“横”的粘连
             k=k-1;
         end
                      %  如果宽度过小,则不切分       
   end            
               
end
 
%==== Segment ===%
for i=2:n
    WI=I(:,fix((PXR1(i-1)+PXR2(i-1))/2):fix((PXR1(i)+PXR2(i))/2));
    figure(10+i);imshow(WI);
end
WI=I(:,fix((PXR1(i)+PXR2(i))/2):x);
figure(10+i);imshow(WI);
 
 
%=== 图像显示 ===%
 
%px=(1:x);                % X轴坐标
 
%figure(1);
%imshow(I);
 
%figure(2);
%plot(Top);hold on
%plot(px,y,'red');grid
% ('上轮廓');
 
%figure(3);
%plot(Bottom);hold on
%plot(px,y,'red');grid
% ('下轮廓');
 
%figure(4);
%plot(Height);grid
 
 
subplot(6,6,1),imshow(WI);
imwrite(WI,'14.12.jpg');
subplot(6,6,2),imshow(WI);
imwrite(WI,'14.13.JPG');
subplot(6,6,3),imshow(WI);
imwrite(WI,'14.14.jpg');
subplot(6,6,4),imshow(WI);
imwrite(WI,'14.15.JPG');
subplot(6,6,5),imshow(WI);
imwrite(WI,'14.16.jpg');
subplot(6,6,6),imshow(WI);
imwrite(WI,'14.17.JPG');
 
% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
%d=qiege(d);
%[m,n]=size(d);
%figure,subplot(2,1,1),imshow(d), (n)     %2*1 1th matrix(rectangular)
%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=8;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
 
%[word1,d]=getword(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);
%subplot(5,7,1),imshow(word1), ('1');
%subplot(5,7,2),imshow(word2), ('2');
%subplot(5,7,3),imshow(word3), ('3');
%subplot(5,7,4),imshow(word4), ('4');
%subplot(5,7,5),imshow(word5), ('5');
%subplot(5,7,6),imshow(word6), ('6');
%subplot(5,7,7),imshow(word7), ('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), ('1');
%subplot(5,7,16),imshow(word2), ('2');
%subplot(5,7,17),imshow(word3), ('3');
%subplot(5,7,18),imshow(word4), ('4');
%subplot(5,7,19),imshow(word5), ('5');
%subplot(5,7,20),imshow(word6), ('6');
%subplot(5,7,21),imshow(word7), ('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');
%wordn=imshow(WI);
% 该子程序用于切割出最小范围
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]); 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function net = create_net(P,T);
% P - the inputs samples
% T - the corresponded targets
 
%S0 = 10;
S1 = 20; % middle
S2 = 10; % output
 
% create the net
net = newff(minmax([SAMP SAMP_NOISE SAMP_OR]),[S1 S2],{'logsig' 'logsig'}, 'traingdx');
 
% train the net
net.performFcn = 'sse'; % or sse
net.trainParam.goal = 0.01;
net.trainParam.show = 5;
net.trainParam.epochs = 5000;
net.trainParam.mc = 0.95;
 
% train the net
[net,tr] = train(net,[SAMP SAMP_NOISE SAMP_OR],[TARG TARG TARG]);
 
% 编号: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  create_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
 
%subplot(6,1,1),imshow(WI), ('1');
% ('2');
% ('3');
% ('4');
% ('5');
% ('6');
% ('7');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

文件列表(点击上边下载按钮,如果是垃圾文件请在下面评价差评或者投诉):

code/
code/英文字母识别/
code/英文字母识别/test/
code/英文字母识别/words/
code/lpcseg.asv
code/lpcseg.m
code/lpr_loc.asv
code/lpr_loc.m
code/英文字母识别/0.bmp
code/英文字母识别/1.bmp
code/英文字母识别/10.bmp
code/英文字母识别/11.bmp
code/英文字母识别/12.bmp
code/英文字母识别/13.bmp
code/英文字母识别/14.bmp
code/英文字母识别/15.bmp
code/英文字母识别/16.bmp
code/英文字母识别/17.bmp
code/英文字母识别/18.bmp
code/英文字母识别/19.bmp
code/英文字母识别/2.bmp
code/英文字母识别/20.bmp
code/英文字母识别/21.bmp
code/英文字母识别/22.bmp
code/英文字母识别/23.bmp
code/英文字母识别/24.bmp
code/英文字母识别/25.bmp
code/英文字母识别/26.bmp
code/英文字母识别/27.bmp
code/英文字母识别/28.bmp
code/英文字母识别/29.bmp
code/英文字母识别/3.bmp
code/英文字母识别/30.bmp
code/英文字母识别/31.bmp
code/英文字母识别/32.bmp
code/英文字母识别/33.bmp
code/英文字母识别/34.bmp
code/英文字母识别/35.bmp
code/英文字母识别/36.bmp
code/英文字母识别/37.bmp
code/英文字母识别/38.bmp
code/英文字母识别/39.bmp
code/英文字母识别/4.bmp
code/英文字母识别/40.bmp
code/英文字母识别/41.bmp
code/英文字母识别/42.bmp
code/英文字母识别/43.bmp
code/英文字母识别/44.bmp
code/英文字母识别/45.bmp
code/英文字母识别/46.bmp
code/英文字母识别/47.bmp
code/英文字母识别/48.bmp
code/英文字母识别/49.bmp
code/英文字母识别/5.bmp
code/英文字母识别/50.bmp
code/英文字母识别/51.bmp
code/英文字母识别/52.bmp
code/英文字母识别/53.bmp
code/英文字母识别/54.bmp
code/英文字母识别/55.bmp
code/英文字母识别/56.bmp
code/英文字母识别/57.bmp
code/英文字母识别/58.bmp
code/英文字母识别/59.bmp
code/英文字母识别/6.bmp
code/英文字母识别/60.bmp
code/英文字母识别/61.bmp
code/英文字母识别/62.bmp
code/英文字母识别/63.bmp
code/英文字母识别/64.bmp
code/英文字母识别/65.bmp
code/英文字母识别/7.bmp
code/英文字母识别/8.bmp
code/英文字母识别/9.bmp
code/英文字母识别/Example1.asv
code/英文字母识别/Example1.m
code/英文字母识别/Example1Tr.asv
code/英文字母识别/Example1Tr.m
code/英文字母识别/op.m
code/英文字母识别/preprocess.m
code/英文字母识别/recognize.m
code/英文字母识别/test/0.bmp
code/英文字母识别/test/19.bmp
code/英文字母识别/test/46.bmp
code/英文字母识别/test/56.bmp
code/英文字母识别/test/62.bmp
code/英文字母识别/test/63.bmp
code/英文字母识别/test/65.bmp
code/英文字母识别/words/0.bmp
code/英文字母识别/words/1.bmp
code/英文字母识别/words/10.bmp
code/英文字母识别/words/11.bmp
code/英文字母识别/words/12.bmp
code/英文字母识别/words/13.bmp
code/英文字母识别/words/14.bmp
code/英文字母识别/words/15.bmp
code/英文字母识别/words/16.bmp
code/英文字母识别/words/17.bmp
code/英文字母识别/words/18.bmp
code/英文字母识别/words/19.bmp
code/英文字母识别/words/2.bmp
code/英文字母识别/words/20.bmp
code/英文字母识别/words/21.bmp
code/英文字母识别/words/22.bmp
code/英文字母识别/words/23.bmp
code/英文字母识别/words/24.bmp
code/英文字母识别/words/25.bmp
code/英文字母识别/words/26.bmp
code/英文字母识别/words/27.bmp
code/英文字母识别/words/28.bmp
code/英文字母识别/words/29.bmp
code/英文字母识别/words/3.bmp
code/英文字母识别/words/30.bmp
code/英文字母识别/words/31.bmp
code/英文字母识别/words/32.bmp
code/英文字母识别/words/33.bmp
code/英文字母识别/words/34.bmp
code/英文字母识别/words/35.bmp
code/英文字母识别/words/36.bmp
code/英文字母识别/words/37.bmp
code/英文字母识别/words/38.bmp
code/英文字母识别/words/39.bmp
code/英文字母识别/words/4.bmp
code/英文字母识别/words/40.bmp
code/英文字母识别/words/41.bmp
code/英文字母识别/words/42.bmp
code/英文字母识别/words/43.bmp
code/英文字母识别/words/44.bmp
code/英文字母识别/words/45.bmp
code/英文字母识别/words/46.bmp
code/英文字母识别/words/47.bmp
code/英文字母识别/words/48.bmp
code/英文字母识别/words/49.bmp
code/英文字母识别/words/5.bmp
code/英文字母识别/words/50.bmp
code/英文字母识别/words/51.bmp
code/英文字母识别/words/52.bmp
code/英文字母识别/words/53.bmp
code/英文字母识别/words/54.bmp
code/英文字母识别/words/55.bmp
code/英文字母识别/words/6.bmp
code/英文字母识别/words/7.bmp
code/英文字母识别/words/8.bmp
code/英文字母识别/words/9.bmp
code/英文字母识别/复件 (3) recognize.m

关键词: 车牌的定位 字符分割 神经网络 字符识别

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘
沪ICP备19040327号-3
公安备案号:沪公网安备 31011802003874号
库纳格流体控制系统(上海)有限公司 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved