GetFeature.m
%将图像分为25块,计算每一块的空白部分所占比例 function data=GetFeature(I) [row,col]=find(I==0); %返回数字的上下左右的边界 I=I(min(row):max(row),min(col):max(col)); %截取手写数字图像,使其紧包含数字边界,不包含多余的空白 imwrite(I,'您手写的字.bmp','bmp'); %保存截取后的手写数字图像 [row,col]=size(I); r=fix(row/5); %为分25块做准备 c=fix(col/5); sum=0; %计算空白块数目 k=1; feature=[]; for i=1:r:5*r %先从行开始计算 for j=1:c:5*c %保持行不变,先计算列 for m=i:i+r-1 for n=j:j+c-1 if I(m,n)==0 sum=sum+1; %每一块空白的像素块的数目 end end end data(k)=sum/(r*c); %第k个特征分量,即第k块的空白率,k最大为25 sum=0; k=k+1; end end data=data'; %将当前手写数字的特征向量由行向量变为列向量 end
function y = rbfnettest( sample ) load template pattern; c=0; for i=1:10 for j=1:210 c=c+1; p(:,c)=pattern(i).feature(:,j); end end tc(:,1:210)=0; tc(:,211:420)=1; tc(:,421:630)=2; tc(:,631:840)=3; tc(:,841:1050)=4; tc(:,1051:1260)=5; tc(:,1261:1470)=6; tc(:,1471:1680)=7; tc(:,1681:1890)=8; tc(:,1891:2100)=9; tc=tc/10; t=tc; SPREAD=1; rbfnet=newrbe(p,t,SPREAD); t=sim(rbfnet,sample); t=t*10; y=round(t); end
clear clc I=imread('sample3.bmp'); A=GetFeature(I); Y=rbfnettest(A)