人工智能-用matlab实现数字识别
生活随笔
收集整理的這篇文章主要介紹了
人工智能-用matlab实现数字识别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
給定一張模板圖和待識別圖,將待識別的數(shù)字都讀寫出來。(模板圖和待識別的圖片中數(shù)字的字體的大小一致)
(國慶研究了很久,放棄了,找到師姐,在師姐的基礎(chǔ)上增加了三行識別,如果要多行,需要改進(jìn)。)
注意:圖片格式為單色位圖.bmp
模板圖:1.bmp
待識別圖:3.bmp
clc clear %讀取 x=imread('1.bmp');%讀取標(biāo)準(zhǔn)圖片 [M,N]=size(x); %計(jì)算圖片大小 t0=0; t1=0; A_number=1; for i=1:1:M %獲取上下邊界if (t0==0)&&(sum(x(i,:))~=N)I0=i;t0=1;endif (t0==1)&&(sum(x(i,:))==N)I1=i-1;t0=0;end end distanceI=I1-I0; %標(biāo)準(zhǔn)圖像上下邊界差distanceJ=0; %標(biāo)準(zhǔn)圖像左右距離賦值 for j=1:1:N %獲取左右邊界if (t1==0) &&sum(x(I0:I1,j))~=I1-I0+1J0=j;t1=1;endif (t1==1) &&sum(x(I0:I1,j))==I1-I0+1J1=j-1;t1=0;if J1-J0>distanceJdistanceJ=J1-J0; %獲取左右邊界最大值endend end if mod(distanceI,5)~=0distanceI=distanceI+(5-mod(distanceI,5));%求出標(biāo)準(zhǔn)框的寬 end if mod(distanceJ,5)~=0distanceJ=distanceJ+(5-mod(distanceJ,5));%求出標(biāo)準(zhǔn)框的高 end height=distanceI/5; weight=distanceJ/5;%得到每個(gè)小框的高和寬 for C_number=1:10c1(C_number).C=ones(distanceI,distanceJ);%建立標(biāo)準(zhǔn)框 end jishu=1; for j=1:1:N %獲取左右邊界if (t1==0) &&sum(x(I0:I1,j))~=I1-I0+1J0=j;t1=1;endif (t1==1) &&sum(x(I0:I1,j))==I1-I0+1J1=j-1;t1=0;c1(jishu).C(round((distanceI-(I1-I0))/2):round((distanceI-(I1-I0))/2+I1-I0),round((distanceJ-(J1-J0))/2):round((distanceJ-(J1-J0))/2+J1-J0))=x(I0:I1,J0:J1);%將數(shù)字寫入標(biāo)準(zhǔn)框jishu=jishu+1; end end temp=1; for i=1:1:(jishu-1)for r = 1:1:5for s= 1:1:5x1=c1(temp).C(((r-1)*height+1):(r*height),((s-1)*weight+1):(s*weight));%獲取圖中各個(gè)數(shù)字u(r,s)=((weight*height)-sum(sum(x1(:,:))))/(height*weight);%隸屬度endendtemp=temp+1;a(A_number).A=u;%范例的隸屬度矩陣集aA_number=A_number+1; end%識別 y=imread('3.bmp');%讀圖 [C,D]=size(y); %計(jì)算圖片大小 t0=0; t1=0; m=1; for i=1:1:3S0(i)=zeros(1,1);S1(i)=zeros(1,1);disI(i)=zeros(1,1); end yanz=[]; bij_value = []; for i=1:1:C%獲取上下邊界if (t0==0)&&sum(y(i,:))~=DS0(m)=i;t0=1;endif (t0==1)&&(sum(y(i,:))==D)S1(m)=i-1;t0=0;disI(m)=S1(m)-S0(m);m=m+1;end end for k=1:1:(m-1)B_number=1;number=1;for j=1:1:D%獲取左右邊界if (t1==0) &&sum(y(S0(k):S1(k),j))~=S1(k)-S0(k)+1J0=j;t1=1;endif (t1==1) &&sum(y(S0(k):S1(k),j))==S1(k)-S0(k)+1J1=j-1;t1=0;number=number+1;%計(jì)數(shù):一共讀取了多少個(gè)數(shù)字endendfor D_number = 1:(number-1)%最終計(jì)數(shù)會比真實(shí)數(shù)字個(gè)數(shù)多一c2(D_number).C=ones(distanceI,distanceJ);%建立標(biāo)準(zhǔn)框endjishu1=1;for j=1:1:D%獲取左右邊界if (t1==0) &&sum(y(S0(k):S1(k),j))~=S1(k)-S0(k)+1J0=j;t1=1;endif (t1==1) &&sum(y(S0(k):S1(k),j))==S1(k)-S0(k)+1J1=j-1;t1=0;c2(jishu1).C(round((distanceI-(S1-S0))/2):round((distanceI-(S1-S0))/2)+S1(k)-S0(k),round((distanceJ-(J1-J0))/2):round((distanceJ-(J1-J0))/2)+J1-J0)=y(S0(k):S1(k),J0:J1);%將數(shù)字寫入標(biāo)準(zhǔn)框jishu1=jishu1+1;endendtemp1=1;for i=1:1:(number-1)for r = 1:1:5for s= 1:1:5x1=c2(temp1).C(((r-1)*height+1):(r*height),((s-1)*weight+1):(s*weight));%獲取圖中各個(gè)數(shù)字u(r,s)=((weight*height)-sum(sum(x1(:,:))))/(height*weight);%隸屬度endendtemp1=temp1+1;b(B_number).B=u;%需識別圖片的隸屬度矩陣集bB_number=B_number+1;end%計(jì)算貼近度for i=1:1:B_number-1for j=1:1:10tiejd(i,j)=corr2(a(j).A,b(i).B);%用matlab自帶的corr2()函數(shù)計(jì)算貼近度endend%function [ bij_value ] = bij( a,b )%獲取待識別數(shù)字與各范例數(shù)字的貼近度中最大的,該貼近度的索引減一即為實(shí)際數(shù)字for i=1:1:(B_number-1)[~,index]=max(tiejd(i,:));%max輸出最大元素的索引bij_value(k,i)=index-1;endyanz(k,:)=bij_value(k,:);%yanz(k,:)=bij(tiejd,B_number-1);%用matlab自帶的corr2()函數(shù)識別出的各個(gè)數(shù)字%Out=sprintf('%d',yanz(k,:))%輸出 end Out = sprintf('%d%d%d',yanz(1,:),yanz(2,:),yanz(3,:)); % for k=1:1:(m-1) % out=sprintf('%d',yanz(k,:))%多次輸出 % end% function [ bij_value ] = bij( a,b ) % %獲取待識別數(shù)字與各范例數(shù)字的貼近度中最大的,該貼近度的索引減一即為實(shí)際數(shù)字 % for i=1:1:b % [~,index]=max(a(i,:)); % bij_value(1,i)=index-1; % % end % end得到的結(jié)果圖:
我的分析圖:
?
總結(jié)
以上是生活随笔為你收集整理的人工智能-用matlab实现数字识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【dubbo】No provider a
- 下一篇: SLB 负载均衡实践