2013-05-27 88 views
2

我正在使用opencv爲圖像開發一個非常簡單的分類器。我想使用svm類型的poly,但它會給出錯誤,而其他類似sigmoid,RBF工作正常。我所定義的參數如下:openCV中的SVM類型

SVMParams params; 
params.svm_type = SVM::C_SVC; 
params.kernel_type = SVM::POLY; 
params.gamma = 20; 
params.degree = 0; 
params.coef0 = 0; 

params.C = 7; 
params.nu = 0.0; 
params.p = 0.0; 

params.class_weights = NULL; 
params.term_crit.type = CV_TERMCRIT_ITER +CV_TERMCRIT_EPS; 
params.term_crit.max_iter = 1000; 
params.term_crit.epsilon = 1e-6; 

錯誤讀取的OpenCV錯誤:一個參數值的超出範圍(內核參數必須是正的)在CvSVM :: set_params。我不確定什麼是錯誤。

+1

這可能是「度數」。零度多項式內核沒有意義,因爲它的值是一個常數。 –

+0

您使用的是哪個版本的OpenCV? –

回答

8

對於多項式內核,degree必須大於1(0無效,1爲線性)。對於大多數軟件包,度數的缺省值爲3.

RBF和S形內核可以正常工作,因爲它們不使用degree。作爲參考,所關注的內核函數是:

  • 多項式:k(u,v)=(gamma*u'*v + coef0)^degree
  • RBF:k(u,v)=exp(-gamma*|u-v|^2)
  • 乙狀結腸:k(u,v)=tanh(gamma*u'*v + coef0)