2012-05-29 29 views
0

我正在進行項目拇指識別。以下是我讀取訂單42 X 25的118張圖像並將其存儲在訓練矩陣中的代碼。使用SVM在matlab中進行拇指識別算法algo

training=zeros(118, 1050); 

imagefiles = dir('*.png');  
nfiles = length(imagefiles);  
for ii=1:nfiles 
    currentfilename = imagefiles(ii).name; 
    I = imread(currentfilename); 

    BW=im2bw(I,graythresh(I));  

    temp = reshape(BW,1,1050); 
    training(ii,:)=temp; 
end 

現在我創建一個labelData矩陣來爲圖像分配標籤。

labelData = zeros(118,1); 
labelData(1:50,:) = 0; 
labelData(51:83,:) = 1; 
labelData(84:118,:) = 2; 

在這裏,我通過提供培訓數據和標籤數據來訓練我的系統。

options=optimset('MaxIter',5000); 
SVMStruct = svmtrain(training,labelData,'Kernel_Function','linear','QuadProg_Opts',options); 

但是當我運行這段代碼是給我這樣的錯誤

Error 1 : SVMTRAIN only supports classification into two groups. GROUP contains 3 groups. 
Error 2 : SVMStruct = svmtrain(training,labelData,'Kernel_Function','linear','QuadProg_Opts',options); 

請幫助我什麼是我使用它,它工作正常前的問題,但現在我不知道是怎麼回事上。提前致謝。

回答

3

錯誤1告訴你什麼是問題 - MATLAB內置的SVM只支持二進制分類。您正在分配3個班級。

的選項有:

  1. 構建三個分類:0與1,2然後1對0,2然後2對比0,1和查看每個的輸出。
  2. 構建0與非0,然後是1與2
  3. 使用來自LIBSVM或svmlight或其他此類包的多類SVM訓練器。
+0

有沒有可用的代碼。我是Matlab新手。謝謝 –

+0

有很多示例代碼 - 只需要搜索它。爲了您的目的,我建議第二個選項 - 使用您已有的代碼結構創建兩個單獨的分類器。 – Ansari

+0

兄弟,我是Matlab新手,很抱歉讓人不安,但我不知道如何創建分類器。 –

1

錯誤信息非常清楚。 MATLAB的svmtrain不支持多類分類,只允許兩類。

所以,你有兩個選擇:1)寫你自己的multiclass classifier作爲svmtrain的包裝。您可以實施一對一或一對一戰略。 2)使用已支持多類分類的svm實現,如libsvm

+0

是否有任何可用於多類分類器或libsvm的代碼。因爲我是Matlab編程的新手。感謝您的答覆。 –

+0

默認情況下,libsvm支持多類問題。它實現了一對一戰略。是的,有一個libsvm的matlab接口,它包含在libsvm包中。 – emrea

0

你的問題是在labelData向量中,並且找到了eror,如果類的數量超過了這個數量,那麼可以使用OAA構造器。