其实就一个图像特征的提取(一种较简单的方法是将图像分成n*n的区域,统计每块区域中像素点所占的百分比),和SVM中参数的选择(上一篇文章)。不多说,上一波代码(Matlab)。运行有点久,因为参数选择很耗时间(相当于运行了100次),如果不需要参数选择,可以采用默认参数就好。每一次对应参数的分类准确率保存在R_train和R_test中。
clc
clear
%载入数据。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
size_pic = 6;
% 利用uigetfile函数交互式选取训练样本
[FileName,PathName,FilterIndex] = uigetfile( ...
{'*.jpg';'*.bmp'},'请导入训练图片','*.png','MultiSelect','on');
if ~FilterIndex
return;
end
num_train = length(FileName);
TrainData = zeros(num_train,size_pic*size_pic);
TrainLabel = zeros(num_train,1);
for k = 1:num_train
pic = imread([PathName,FileName{k}]);
pic = pick_feature(pic);%提取图像特征
% 将标准化图像按列拉成一个向量并转置,生成6*6的训练样本矩阵
TrainData(k,:) = double(pic(:)');
% 样本标签为样本所对应的数字
TrainLabel(k) = str2double(FileName{k}(1