matlab hog+svm 二分类问题

1、文件结构如图所示  训练集  测试集 下面分布存有正负样本

2、代码分析:设置标签 自动读取  分别生成一个txt 文件,自动读取TXT文件访问图片

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

ReadList2  = textread('I:\SVM\train\neg\neg.txt','%s','delimiter','\n');%载入负样本列表  
ReadList2(1001)=[];
sz2=size(ReadList2);  
label2=zeros(sz2(1),1);%负样本标签  
label=[label1',label2']';%标签汇总  
total_num=length(label);  
data=zeros(total_num,1764);  

3、使用传统hog svm 提取特征与融合   完整的代码如下

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

ReadList2  = textread('I:\SVM\train\neg\neg.txt','%s','delimiter','\n');%载入负样本列表  
ReadList2(1001)=[];
sz2=size(ReadList2);  
label2=zeros(sz2(1),1);%负样本标签  
label=[label1',label2']';%标签汇总  
total_num=length(label);  
data=zeros(total_num,1764);  

 
% num=0;


%读取正样本并计算hog特征  
for i=1:sz1(1)  
   name= char(ReadList1(i,1));  
   image=imread(strcat('train\pos\',name)); 
%    image=imread(name); 作用同上 
   im=imresize(image,[64,64]);  %%%%%%需要16的倍数  1152*864
%    img=rgb2gray(im);  
   hog =hogcalculator(im);  
   data(i,:)=hog;  
end  

%读取负样本并计算hog特征  
for j=1:sz2(1)  
   name= char(ReadList2(j,1));  
   image=imread(strcat('train\neg\',name));  
   im=imresize(image,[64,64]);  
%    img=rgb2gray(im);  
   hog =hogcalculator(im);  
   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\0\2571.tif');  
     
im=imresize(test,[64,64]);  
figure;  
% imshow(im);  
% img=rgb2gray(im);  
hogt =hogcalculator(im);  
classes = svmclassify(svmStruct,hogt);
%classes的值即为分类结果 

% charsImage1  = textread('I:\SVM\test\1\1.txt','%s','delimiter','\n'); 
charsImage1  = textread('I:\SVM\test\0\0.txt','%s','delimiter','\n'); 
charsImage1(end)=[];
legth=size(charsImage1); 
testclasses=ones(1,800);
num=0;
for i=1:legth
   testname= char(charsImage1(i,1));  
   testimage=imread(strcat('test\0\',testname)); 
   testim=imresize(testimage,[64,64]);  %需要16的倍数 
%    testimg=rgb2gray(testimage);  
   testhogt =hogcalculator(testim);  
   testclasses(i) = svmclassify(svmStruct,testhogt); 
  if testclasses(i)==1
       num=num+1;
       fprintf('The num is %3d\n',i)       
   end    
end  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值