2012-03-22 78 views
1

我試圖實現SVM在OpenCV進行,我已使用SIFT提取的特徵特性。我已經提取了2個不同對象的特徵(每個對象具有10個不同圖像的特徵,總共我爲一個對象獲得了超過3000個特徵),並且將這些特徵放在一個文件(yaml文件)中。標籤數據OpenCV的C++

我的問題是:我不知道如何標註他們?所以我需要標記這兩個文件(正如我所說,每個文件是yaml的類型,它包含矩陣3260 * 128和第二個yaml文件的第二個對象是3349 * 128)...

所以請幫助我告訴我怎樣才能培養他們後來......我用OpenCV的C++來標註這些文件..順便說一下,對於SVM OpenCV的代碼是基於LIBSVM

謝謝你在先進

+0

試信recog.cpp樣本,數據已經被標記和他們都在同一個文件中,在我的情況;我有2個文件,每個文件對於某個對象 – 2012-03-23 04:36:41

+0

在信recog.cpp – Mario 2012-03-24 15:58:42

回答

4

假設你正確地得到您的矩陣,每一行代表一個樣本,你可以做類似於lakesh建議什麼:

Cv::Mat anger, disgust; 
// Load the data into anger and disgust 
... 
// Make sure anger.cols == disgust.cols 
// Combine your features from different classes into one big matrix 
int numPostives = anger.rows, numNegatives = disgust.rows; 
int numSamples = numPostives+numNegatives; 
int featureSize = anger.cols; 
cv::Mat data(numSamples, featureSize, CV_32FC1) // Assume your anger matrix is in float type 
cv::Mat positiveData = data.rowRange(0, numPostives); 
cv::Mat negativeData = data.rowRange(numPostives, numSamples); 
anger.copyTo(positiveData); 
disgust.copyTo(negativeData); 
// Create label matrix according to the big feature matrix 
cv::Mat labels(numSamples, 1, CV_32SC1); 
labels.rowRange(0, numPositives).setTo(cv::Scalar_<int>(1)); 
labels.rowRange(numPositives, numSamples).setTo(cv::Scalar_<int>(-1)); 
// Finally, train your model 
cv::SVM model; 
model.train(data, labels, cv::Mat(), cv::Mat(), cv::SVMParams()); 

希望這有助於。

附帶OpenCV的樣品
0

標籤很簡單。只需將其中一個類/對象標記爲1,另一個爲-1即可。

    case 'Anger' 
        CVTrainLabel = [CVTrainLabel;1]; 
        Hist = UniformLBP2(I1); 
        CVTrainVec = [CVTrainVec;Hist]; 
        continue; 
       case 'Disgust' 
        CVTrainLabel = [CVTrainLabel;-1]; 
        Hist = UniformLBP2(I1); 
        CVTrainVec = [CVTrainVec;Hist]; 
+0

你有沒有任何代碼示例..不要忘記我在這裏有2個文件,每個文件包含某個對象的功能 – Mario 2012-03-24 15:56:35

+0

只是編輯它看看... – lakesh 2012-03-25 09:51:58

+0

嘿,lakesh,我沒有明白你的觀點:(....讓我們說,我有一個文件是Anger.yaml(其中包含第一個對象的功能),第二個文件是Disgust.yaml(包含第二個對象功能),所以在這種情況下如何做到這一點?我已經通過使用函數filestorage加載它,我可以正確讀取這些文件中的矩陣...... – Mario 2012-03-25 19:20:37