用支持向量机做OCR(MATLAB)
2015-06-06 15:32
429 查看
输入的图片是42x24的二值图片。
下面的是训练SVM
clc;clear all;close all;
NN = 15;
P_P=[];
for L_one =1:NN;
one=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\1\ (',num2str(L_one),').bmp')),1,1008);
P_P=[P_P;one];
end
for L_two =1:NN;
two=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\2\ (',num2str(L_two),').bmp')),1,1008);
P_P=[P_P;two];
end
for L_three =1:NN;
three=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\3\ (',num2str(L_three),').bmp')),1,1008);
P_P=[P_P;three];
end
for L_four =1:NN;
four=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\4\ (',num2str(L_four),').bmp')),1,1008);
P_P=[P_P;four];
end
for L_five =1:NN;
five=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\5\ (',num2str(L_five),').bmp')),1,1008);
P_P=[P_P;five];
end
for L_six =1:NN;
six=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\6\ (',num2str(L_six),').bmp')),1,1008);
P_P=[P_P;six];
end
for L_seven =1:NN;
seven=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\7\ (',num2str(L_seven),').bmp')),1,1008);
P_P=[P_P;seven];
end
for L_eight =1:NN;
eight=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\8\ (',num2str(L_eight),').bmp')),1,1008);
P_P=[P_P;eight];
end
for L_nine =1:NN;
nine=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\9\ (',num2str(L_nine),').bmp')),1,1008);
P_P=[P_P;nine];
end
for L_zero =1:NN;
zero=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\0\ (',num2str(L_zero),').bmp')),1,1008);
P_P=[P_P;zero];
end
% for AA =1:NN;
% A=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\a\ (',num2str(AA),').bmp')),1,1008);
% end
% for BB =1:NN;
% B=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\b\ (',num2str(BB),').bmp')),1,1008);
% end
% for CC =1:NN;
% C=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\c\ (',num2str(CC),').bmp')),1,1008);
% end
% for DD =1:NN;
% D=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\d\ (',num2str(DD),').bmp')),1,1008);
% end
% for EE =1:NN;
% E=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\e\ (',num2str(EE),').bmp')),1,1008);
% end
% for FF =1:NN;
% F=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\f\ (',num2str(FF),').bmp')),1,1008);
% end
% for GG =1:NN;
% G=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\g\ (',num2str(GG),').bmp')),1,1008);
% end
% for HH =1:NN;
% H=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\h\ (',num2str(HH),').bmp')),1,1008);
% end
% for II =1:NN;
% I=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\i\ (',num2str(II),').bmp')),1,1008);
% end
% for JJ =1:NN;
% J=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\j\ (',num2str(JJ),').bmp')),1,1008);
% end
% for KK =1:NN;
% K=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\k\ (',num2str(KK),').bmp')),1,1008);
% end
% for LL =1:NN;
% L=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\l\ (',num2str(LL),').bmp')),1,1008);
% end
% for MM =1:NN;
% M=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\m (',num2str(MM),').bmp')),1,1008);
% end
% for NN =1:NN;
% N=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\n\ (',num2str(NN),').bmp')),1,1008);
% end
% for OO =1:NN;
% O=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\o\ (',num2str(OO),').bmp')),1,1008);
% end
% for PP =1:NN;
% P=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\p\ (',num2str(PP),').bmp')),1,1008);
% end
% for QQ =1:NN;
% Q=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\q\ (',num2str(QQ),').bmp')),1,1008);
% end
% for RR =1:NN;
% R=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\r\ (',num2str(RR),').bmp')),1,1008);
% end
% for SS =1:NN;
% S=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\s\ (',num2str(SS),').bmp')),1,1008);
% end
% for TT =1:NN;
% T=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\t\ (',num2str(TT),').bmp')),1,1008);
% end
% for UU =1:NN;
% U=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\u\ (',num2str(UU),').bmp')),1,1008);
% end
% for VV =1:NN;
% V=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\v\ (',num2str(VV),').bmp')),1,1008);
% end
% for WW =1:NN;
% W=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\w\ (',num2str(WW),').bmp')),1,1008);
% end
% for XX =1:NN;
% X=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\x\ (',num2str(XX),').bmp')),1,1008);
% end
% for YY =1:NN;
% Y=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\y (',num2str(YY),').bmp')),1,1008);
% end
% for ZZ =1:NN;
% Z=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\z\ (',num2str(ZZ),').bmp')),1,1008);
% end
data = double(P_P);
T_T1(1:15)=1;
T_T1(16:150)=-1;
T_T2(1:15)=-1;
T_T2(16:30)=1;
T_T2(31:150)=-1;
T_T3(1:30)=-1;
T_T3(31:45)=1;
T_T3(46:150)=-1;
T_T4(1:45)=-1;
T_T4(46:60)=1;
T_T4(61:150)=-1;
T_T5(1:60)=-1;
T_T5(61:75)=1;
T_T5(76:150)=-1;
T_T6(1:75)=-1;
T_T6(76:90)=1;
T_T6(91:150)=-1;
T_T7(1:90)=-1;
T_T7(91:105)=1;
T_T7(106:150)=-1;
T_T8(1:105)=-1;
T_T8(106:120)=1;
T_T8(121:150)=-1;
T_T9(1:120)=-1;
T_T9(120:135)=1;
T_T9(136:150)=-1;
T_T0(1:135)=-1;
T_T0(136:150)=1;
S1=svmtrain(data,T_T1');
save S1;
S2=svmtrain(data,T_T2');
save S2;
S3=svmtrain(data,T_T3');
save S3;
S4=svmtrain(data,T_T4');
save S4;
S5=svmtrain(data,T_T5');
save S5;
S6=svmtrain(data,T_T6');
save S6;
S7=svmtrain(data,T_T7');
save S7;
S8=svmtrain(data,T_T8');
save S8;
S9=svmtrain(data,T_T9');
save S9;
S0=svmtrain(data,T_T0');
save S0;
仿真
testdata = data(1:30,:);
class(1,:)=svmclassify(S1,testdata);
class(2,:)=svmclassify(S2,testdata);
class(3,:)=svmclassify(S3,testdata);
class(4,:)=svmclassify(S4,testdata);
class(5,:)=svmclassify(S5,testdata);
class(6,:)=svmclassify(S6,testdata);
class(7,:)=svmclassify(S7,testdata);
class(8,:)=svmclassify(S8,testdata);
class(9,:)=svmclassify(S9,testdata);
class(10,:)=svmclassify(S0,testdata);
这是识别函数
中间被坑了一回
data=double(imagen)这样全局定义的话死活不成功,不知道原因。
function letter = my_svm(imagen)
imagen=reshape(imagen,1,1008);
load S1
load S2
load S3
load S4
load S5
load S6
load S7
load S8
load S9
load S0
if( svmclassify(S1,double(imagen))==1)
letter='1';
elseif ( (svmclassify(S2,double(imagen))==1))
letter='2';
elseif ( (svmclassify(S3,double(imagen))==1))
letter='3';
elseif ( (svmclassify(S4,double(imagen))==1))
letter='4';
elseif ( (svmclassify(S5,double(imagen))==1))
letter='5';
elseif ( (svmclassify(S6,double(imagen))==1))
letter='6';
elseif ( (svmclassify(S7,double(imagen))==1))
letter='7';
elseif ( (svmclassify(S8,double(imagen))==1))
letter='8';
elseif ( (svmclassify(S9,double(imagen))==1))
letter='9';
elseif ( (svmclassify(S0,double(imagen))==1))
letter='0';
else
letter ='x';
end
end
下面的是训练SVM
clc;clear all;close all;
NN = 15;
P_P=[];
for L_one =1:NN;
one=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\1\ (',num2str(L_one),').bmp')),1,1008);
P_P=[P_P;one];
end
for L_two =1:NN;
two=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\2\ (',num2str(L_two),').bmp')),1,1008);
P_P=[P_P;two];
end
for L_three =1:NN;
three=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\3\ (',num2str(L_three),').bmp')),1,1008);
P_P=[P_P;three];
end
for L_four =1:NN;
four=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\4\ (',num2str(L_four),').bmp')),1,1008);
P_P=[P_P;four];
end
for L_five =1:NN;
five=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\5\ (',num2str(L_five),').bmp')),1,1008);
P_P=[P_P;five];
end
for L_six =1:NN;
six=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\6\ (',num2str(L_six),').bmp')),1,1008);
P_P=[P_P;six];
end
for L_seven =1:NN;
seven=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\7\ (',num2str(L_seven),').bmp')),1,1008);
P_P=[P_P;seven];
end
for L_eight =1:NN;
eight=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\8\ (',num2str(L_eight),').bmp')),1,1008);
P_P=[P_P;eight];
end
for L_nine =1:NN;
nine=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\9\ (',num2str(L_nine),').bmp')),1,1008);
P_P=[P_P;nine];
end
for L_zero =1:NN;
zero=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\0\ (',num2str(L_zero),').bmp')),1,1008);
P_P=[P_P;zero];
end
% for AA =1:NN;
% A=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\a\ (',num2str(AA),').bmp')),1,1008);
% end
% for BB =1:NN;
% B=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\b\ (',num2str(BB),').bmp')),1,1008);
% end
% for CC =1:NN;
% C=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\c\ (',num2str(CC),').bmp')),1,1008);
% end
% for DD =1:NN;
% D=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\d\ (',num2str(DD),').bmp')),1,1008);
% end
% for EE =1:NN;
% E=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\e\ (',num2str(EE),').bmp')),1,1008);
% end
% for FF =1:NN;
% F=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\f\ (',num2str(FF),').bmp')),1,1008);
% end
% for GG =1:NN;
% G=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\g\ (',num2str(GG),').bmp')),1,1008);
% end
% for HH =1:NN;
% H=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\h\ (',num2str(HH),').bmp')),1,1008);
% end
% for II =1:NN;
% I=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\i\ (',num2str(II),').bmp')),1,1008);
% end
% for JJ =1:NN;
% J=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\j\ (',num2str(JJ),').bmp')),1,1008);
% end
% for KK =1:NN;
% K=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\k\ (',num2str(KK),').bmp')),1,1008);
% end
% for LL =1:NN;
% L=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\l\ (',num2str(LL),').bmp')),1,1008);
% end
% for MM =1:NN;
% M=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\m (',num2str(MM),').bmp')),1,1008);
% end
% for NN =1:NN;
% N=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\n\ (',num2str(NN),').bmp')),1,1008);
% end
% for OO =1:NN;
% O=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\o\ (',num2str(OO),').bmp')),1,1008);
% end
% for PP =1:NN;
% P=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\p\ (',num2str(PP),').bmp')),1,1008);
% end
% for QQ =1:NN;
% Q=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\q\ (',num2str(QQ),').bmp')),1,1008);
% end
% for RR =1:NN;
% R=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\r\ (',num2str(RR),').bmp')),1,1008);
% end
% for SS =1:NN;
% S=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\s\ (',num2str(SS),').bmp')),1,1008);
% end
% for TT =1:NN;
% T=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\t\ (',num2str(TT),').bmp')),1,1008);
% end
% for UU =1:NN;
% U=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\u\ (',num2str(UU),').bmp')),1,1008);
% end
% for VV =1:NN;
% V=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\v\ (',num2str(VV),').bmp')),1,1008);
% end
% for WW =1:NN;
% W=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\w\ (',num2str(WW),').bmp')),1,1008);
% end
% for XX =1:NN;
% X=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\x\ (',num2str(XX),').bmp')),1,1008);
% end
% for YY =1:NN;
% Y=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\y (',num2str(YY),').bmp')),1,1008);
% end
% for ZZ =1:NN;
% Z=reshape(imread(strcat('C:\Users\taizhimin\Desktop\number\z\ (',num2str(ZZ),').bmp')),1,1008);
% end
data = double(P_P);
T_T1(1:15)=1;
T_T1(16:150)=-1;
T_T2(1:15)=-1;
T_T2(16:30)=1;
T_T2(31:150)=-1;
T_T3(1:30)=-1;
T_T3(31:45)=1;
T_T3(46:150)=-1;
T_T4(1:45)=-1;
T_T4(46:60)=1;
T_T4(61:150)=-1;
T_T5(1:60)=-1;
T_T5(61:75)=1;
T_T5(76:150)=-1;
T_T6(1:75)=-1;
T_T6(76:90)=1;
T_T6(91:150)=-1;
T_T7(1:90)=-1;
T_T7(91:105)=1;
T_T7(106:150)=-1;
T_T8(1:105)=-1;
T_T8(106:120)=1;
T_T8(121:150)=-1;
T_T9(1:120)=-1;
T_T9(120:135)=1;
T_T9(136:150)=-1;
T_T0(1:135)=-1;
T_T0(136:150)=1;
S1=svmtrain(data,T_T1');
save S1;
S2=svmtrain(data,T_T2');
save S2;
S3=svmtrain(data,T_T3');
save S3;
S4=svmtrain(data,T_T4');
save S4;
S5=svmtrain(data,T_T5');
save S5;
S6=svmtrain(data,T_T6');
save S6;
S7=svmtrain(data,T_T7');
save S7;
S8=svmtrain(data,T_T8');
save S8;
S9=svmtrain(data,T_T9');
save S9;
S0=svmtrain(data,T_T0');
save S0;
仿真
testdata = data(1:30,:);
class(1,:)=svmclassify(S1,testdata);
class(2,:)=svmclassify(S2,testdata);
class(3,:)=svmclassify(S3,testdata);
class(4,:)=svmclassify(S4,testdata);
class(5,:)=svmclassify(S5,testdata);
class(6,:)=svmclassify(S6,testdata);
class(7,:)=svmclassify(S7,testdata);
class(8,:)=svmclassify(S8,testdata);
class(9,:)=svmclassify(S9,testdata);
class(10,:)=svmclassify(S0,testdata);
这是识别函数
中间被坑了一回
data=double(imagen)这样全局定义的话死活不成功,不知道原因。
function letter = my_svm(imagen)
imagen=reshape(imagen,1,1008);
load S1
load S2
load S3
load S4
load S5
load S6
load S7
load S8
load S9
load S0
if( svmclassify(S1,double(imagen))==1)
letter='1';
elseif ( (svmclassify(S2,double(imagen))==1))
letter='2';
elseif ( (svmclassify(S3,double(imagen))==1))
letter='3';
elseif ( (svmclassify(S4,double(imagen))==1))
letter='4';
elseif ( (svmclassify(S5,double(imagen))==1))
letter='5';
elseif ( (svmclassify(S6,double(imagen))==1))
letter='6';
elseif ( (svmclassify(S7,double(imagen))==1))
letter='7';
elseif ( (svmclassify(S8,double(imagen))==1))
letter='8';
elseif ( (svmclassify(S9,double(imagen))==1))
letter='9';
elseif ( (svmclassify(S0,double(imagen))==1))
letter='0';
else
letter ='x';
end
end
相关文章推荐
- MATLAB新手教程
- Opencv与matlab的混合编程
- Matlab 常用功能
- 编写Matlab过程中一些实用的小知识,记录下
- 积分图像的应用(一):局部标准差 分类: 图像处理 Matlab 2015-06-06 13:31 137人阅读 评论(0) 收藏
- 积分图像 分类: 图像处理 Matlab 2015-06-06 10:30 149人阅读 评论(0) 收藏
- Matlab图像处理系列3———空间域锐化滤波器
- 文章标题
- MATLAB产生的导频经QPSK调制后的精度的问题
- matlab使用reshape应该注意的问题
- MATLAB实现控制鼠标移动和点击
- huffman编码的MATLAB递归实现
- matlab画甘特图
- 模糊控制器介绍与应用
- matlab secant method
- matlab生成圆
- Matlab图像处理系列2———空间域平滑滤波器
- MATLAB squeeze 函数
- matlab 常用函数汇总
- 双车道元胞自动机交通流Matlab仿真