hog matlab代码1——实现hog+svm图像二分类

最近因为需要实现hog+svm的分类代码,网上找了一些例子,觉得这篇博客还不错:http://blog.csdn.net/libin88211/article/details/19968205,下面结合该博客写一下步骤,供新手们交流学习~~(如果侵犯了版权问题的话,可以联系删除,尊重作者原创~~)

hog干嘛的?hog就是提取图片特征的。hog源程序参考http://blog.csdn.net/huangli19870217/article/details/7695458

准备工作:

1、创建正阳本文件夹“pos”将正阳本放入

pos文件夹用来存放正阳样本的,下图是我自己准备的(就是一些狗狗的图像)

hog matlab代码1——实现hog+svm图像二分类_第1张图片

2、创建负样本文件夹“neg”将负样本放入

neg文件夹用来存放负样本,下图准备的是一些猫的(当然,负样本嘛,随便的,可以是其他的东东,不一定非要是猫,只要正阳样本是狗就行~~)

hog matlab代码1——实现hog+svm图像二分类_第2张图片

这里正负样本都是20个。

3、制作正阳本文件列表pos_list.txt

制作参考下图:

hog matlab代码1——实现hog+svm图像二分类_第3张图片

4、制作负样本文件列表neg_list.txt

hog matlab代码1——实现hog+svm图像二分类_第4张图片

制作参考下图:

5、执行下面程序进行训练,测试

[plain] view plain copy
print ?
  1. clc;   
  2. clear ;    
  3. %% 训练阶段    
  4. ReadList1  = textread('pos_list.txt','%s','delimiter','\n');%载入正样本列表    
  5. sz1=size(ReadList1);    
  6.     
  7. label1=ones(sz1(1),1); %正阳本标签    
  8. ReadList2  = textread('neg_list.txt','%s','delimiter','\n');%载入负样本列表    
  9. sz2=size(ReadList2);    
  10. label2=zeros(sz2(1),1);%负样本标签    
  11. label=[label1',label2']';%标签汇总    
  12. total_num=length(label);    
  13. data=zeros(total_num,1764);    
  14.   
  15. %读取正样本并计算hog特征    
  16. for i=1:sz1(1)    
  17.    name= char(ReadList1(i,1));    
  18.    image=imread(strcat('D:\daily\冰\机器学习\pos\',name));   
  19.    im=imresize(image,[64,64]);    
  20.    img=rgb2gray(im);    
  21.    hog =hogcalculator(img);    
  22.    data(i,:)=hog;    
  23. end    
  24.   
  25. %读取负样本并计算hog特征    
  26. for j=1:sz2(1)    
  27.    name= char(ReadList2(j,1));    
  28.    image=imread(strcat('D:\daily\冰\机器学习\neg\',name));    
  29.    im=imresize(image,[64,64]);    
  30.    img=rgb2gray(im);    
  31.    hog =hogcalculator(img);    
  32.    data(sz1(1)+j,:)=hog;    
  33. end    
  34.   
  35. [train, test] = crossvalind('holdOut',label);    
  36. cp = classperf(label);    
  37. svmStruct = svmtrain(data(train,:),label(train));    
  38. save svmStruct svmStruct    
  39. classes = svmclassify(svmStruct,data(test,:));    
  40. classperf(cp,classes,test);    
  41. cp.CorrectRate     
  42.   
  43. %% 训练完成后保存 svmStruct即可对新输入的对象进行分类了无需再执行上面训练阶段代码    
  44. load svmStruct    
  45. test=imread('test.jpg');    
  46.        
  47. im=imresize(test,[64,64]);    
  48. figure;    
  49. imshow(im);    
  50. img=rgb2gray(im);    
  51. hogt =hogcalculator(img);    
  52. classes = svmclassify(svmStruct,hogt);%classes的值即为分类结果    
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);  
   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);  
   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);  
classes = svmclassify(svmStruct,hogt);%classes的值即为分类结果  

源代码以及图片文件已经上传CSDN,这里给出链接~~

http://download.csdn.net/detail/jcy1009015337/9716482

你可能感兴趣的:(HOG行人检测)