利用libsvm识别数字,总共100副图片,其中0-9各10副,图像大小为28*20
1、提取训练和测试数据
clear all;
clc;
global train_picture; %全局变量
train_picture = ones(100,560); %生成100行,561列矩阵,最后一个表示数字
for i = 0:99
train_index = i + 1;
train_direc = strcat('.\1\in\',int2str(i),'.bmp'); %训练图片路径
picture = imread(train_direc,'bmp'); %以BMP格式读入
picture_gray = rgb2gray(picture); %变成灰度图像
picture_shape = reshape(picture_gray,1,560); %变成1行560列
picture_uint = im2uint8(picture_shape); %变成int类型
picture_double = double(picture_uint);
picture_normalization = picture_double/255;
train_picture(train_index,:) = picture_normalization; %放到数组里面
end;
save train_picture.mat train_picture; %保存
2、训练
clear all; %清空显示
fprintf('载入输入样本。。。');
load train_picture.mat; %加载数据
y = ones(100,1); %二值数据存储
x = train_picture(:,:); %到处训练样本
%构造输出矩阵
for i = 0:99
m = i ;
h = floor(m/10);
y(m + 1,:) = h;
end
model = svmtrain(y(:,1),x,'-s 0 -t 2 -c 1 -g 0.1');
save train.mat
3、测试
%--------------------------------------------------------------------------
clear all; %清空显示
load train.mat; %加载数据
test = ones(1,560);
%--------------------------------------------------------------------------
%读入要识别的数字
%--------------------------------------------------------------------------
fprintf('正在识别数字。。。。\n');
%test_direc = strcat('.\1\in\67.bmp'); %训练图片路径
test_direc = strcat('.\44_1.bmp'); %训练图片路径
picture = imread(test_direc,'bmp'); %以BMP格式读入
imshow(picture);
picture_gray = rgb2gray(picture); %变成灰度图像
picture_shape = reshape(picture_gray,1,560); %变成1行560列
picture_uint = im2uint8(picture_shape); %变成int类型
picture_double = double(picture_uint);
picture_normalization = picture_double/255;
test(1,:) = picture_normalization; %放到测试数组里面
y=1;
%进行数字识别--------------------------------------------------------------
%output the separation resultof test sample
[plabel,accuracy,decision_values] = svmpredict(y,test,model);
fprintf('识别完毕,数字识别为:%d \n',plabel);
源代码下载:http://download.csdn.net/detail/u013747358/7295489