takminの書きっぱなし備忘録 @はてなブログ

主にコンピュータビジョンなど技術について、たまに自分自身のことや思いついたことなど

OpenCVの機械学習におけるvar_idxの使い方

OpenCV機械学習クラス、例えばCvSVM、CvBoost、CvDTreeなどなどのtrain()関数にはvar_idxなる引数があるけど、これの使い方が、その親クラスであるCvStatModelの説明

http://www.opencv.jp/opencv-1.0.0/document/opencvref_ml_introduction.html#decl_CvStatModel_train

を読んでも良くわからなかったので、自分なりに調べたことを解説。

まず、このvar_idxは例えば
------------------------
10, 3, 25, 6, 11, 12
------------------------
というような、6次元の学習データがあった場合、実際に学習で考慮したいのは、3番目の要素だけだ、という場合に指定する。
その際の指定方法は2通りあって、一つは、var_idxのデータ型がCV_8UC1またCV_8SC1のときで、これは(0,0,1,0,0,0)というようなマスクの形で指定する。

もう一つは型がCV_32SC1の時で、これはインデックス値が整数で入る。

具体的なソース
------------- パターン1 ---------------
CvMat* var_idx = cvCreateMat(1,6,CV_8UC1);
cvSet(var_idx, 0);
var_idx->data.ptr[2] = 1;
----------------------------------------

------------- パターン2 ---------------
CvMat* var_idx = cvCreateMat(1,1,CV_32SC1);
var_idx->data.i[0] = 2;
----------------------------------------

こんな感じ