2011-07-15 34 views
3

在OpenCV中,有一個CvSVM類,它接受樣本矩陣來訓練SVM。矩陣是2D的,樣本在行中。將HOG提供給SVM:HOG有9個bin,但SVM需要一個1D矩陣

我創建了我自己的方法來生成視頻輸入的定向漸變直方圖(HOG)。爲此,我創建了一個9通道矩陣來存儲HOG,其中每個通道對應一個方向箱。所以最後我有一個類型爲CV_32FC(9)的40x30矩陣。

也爲HOG製作了一個可視化,並且它正在工作。

我沒有看到我應該如何將這個矩陣輸入到OpenCV SVM中,因爲如果我將它變平,我不會看到SVM是如何從一維輸入數據中學習9D超平面的。

回答

3

SVM每個特徵向量總是需要一行數據。特徵向量的維度因此是行的長度。如果你正在處理二維數據,那麼每個特徵向量就有兩個項目。 2D數據的例子是本網頁:在OpenCV的等效演示

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

代碼http://sites.google.com/site/btabibian/labbook/svmusingopencv

的一點是,即使你與9斌細胞思直方圖2D的,特徵向量實際上是這種扁平化版本。所以把它平鋪成一個長特徵矢量是正確的。我的結果是一個長度爲2304(16x16x9)的特徵矢量,我可以在一個小的測試集上獲得100%的預測精度(即它可能略低於100%,但工作異常良好)。

這個原理的工作原理是SVM正在處理每個特徵向量項的權重系統。所以它與問題的維度沒有任何關係,超平面始終與特徵向量處於同一維度。查看它的另一種方法是忘記超平面,並將其視爲特徵向量中每個項目的一組權重。在這種情況下,每個項目需要一個權重,然後將每個項目乘以其權重並輸出結果。

相關問題