gusucode.com > matlab程序语言实现的水准网平差程序,使用于测绘人员 > 一种基于极大值稳定区域的文本定位方法matlab源码程序/毕业设计/代码/hog_svm.m

    clc; 
clear ;  
%% 训练阶段  
ReadList1  = textread('pos_list.txt','%s','delimiter','\n');%载入正样本列表  
sz1=size(ReadList1);  
label1=ones(sz1(1),1); %正阳本标签 

ReadList2  = textread('neg_list.txt','%s','delimiter','\n');%载入负样本列表  
sz2=size(ReadList2);  
label2=zeros(sz2(1),1);%负样本标签 

label=[label1',label2']';%标签汇总  
total_num=length(label);  
data=zeros(total_num,1764);  

%读取正样本并计算hog特征  
for i=1:sz1(1)  
   name= char(ReadList1(i,1));  
   image=imread(strcat('D:\daily\样本\机器学习\pos\',name)); 
   im=imresize(image,[64,64]);  
   img=rgb2gray(im);  
   %hog =hogcalculator(img);  
   [hog,hogVisualization] = extractHOGFeatures(img);  
   data(i,:)=hog;  
end  

%读取负样本并计算hog特征  
for j=1:sz2(1)  
   name= char(ReadList2(j,1));  
   image=imread(strcat('D:\daily\样本\机器学习\neg\',name));  
   im=imresize(image,[64,64]);  
   img=rgb2gray(im);  
   %hog =hogcalculator(img);
   [hog,hogVisualization] = extractHOGFeatures(img);  
   data(sz1(1)+j,:)=hog;  
end  

[train, test] = crossvalind('holdOut',label);  
cp = classperf(label);  
svmStruct = svmtrain(data(train,:),label(train));  
save svmStruct svmStruct  
classes = svmclassify(svmStruct,data(test,:));  
classperf(cp,classes,test);  
cp.CorrectRate   

%% 训练完成后保存 svmStruct即可对新输入的对象进行分类了无需再执行上面训练阶段代码  
load svmStruct  
test=imread('test.jpg');  
     
im=imresize(test,[64,64]);
figure;  
imshow(im);  
img=rgb2gray(im);  
%hogt =hogcalculator(img);
[hogt,hogVisualization] = extractHOGFeatures(img);  
classes = svmclassify(svmStruct,hogt);%classes的值即为分类结果