matlab實現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文件夾用來存放正陽樣本的,下圖是我自己準備的(就是一些狗狗的圖像)


2、創建負樣本文件夾“neg”將負樣本放入

neg文件夾用來存放負樣本,下圖準備的是一些貓的(當然,負樣本嘛,隨便的,可以是其他的東東,不一定非要是貓,只要正陽樣本是狗就行~~)


這裏正負樣本都是20個。

3、製作正陽本文件列表pos_list.txt

製作參考下圖:


4、製作負樣本文件列表neg_list.txt


製作參考下圖:

5、執行下面程序進行訓練,測試

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章