您的位置:首页 > 编程语言 > MATLAB

基于RBF简单的matlab手写识别

2015-10-25 20:38 190 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: