基于RBF简单的matlab手写识别

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

rbftest.m

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

test.m

clear
clc
I=imread('sample3.bmp');
A=GetFeature(I);
Y=rbfnettest(A)

相关数据库与代码下载地址:http://pan.baidu.com/s/1c0oH7l2

你可能感兴趣的:(RBF,神经网络,手写识别)