matlab版hog+svm圖像二分類

開始接觸svm分類器是opencv中的使用起來很方便,後來根據實際需要需要使用matlab版的,以前沒怎麼接觸過,開始有點頭大,不知從何下手,查閱相關例子後,就開始訓練了自己所需分類器了,也很方便.其中hog源程序參考http://blog.csdn.net/huangli19870217/article/details/7695458

準備工作

1:創建正陽本文件夾“pos”將正陽本放入

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

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

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

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

 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(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(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('test2.jpg');
   
   im=imresize(test,[64,64]);
   figure;
   imshow(im);
   img=rgb2gray(im);
   hogt =hogcalculator(img);
   classes = svmclassify(svmStruct,hogt);%classes的值即爲分類結果


發佈了52 篇原創文章 · 獲贊 18 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章