在尝试使用SVM训练数据时,我遇到了一个问题。我从脸部图像中得到了一些不同的区域(一组连通像素),而且眼睛的区域非常相似,所以我想使用Hu时刻进行形状描述,使用SVM进行训练。但是SVM不能正常工作,方法svm.predict后来评估所有内容为非眼睛,而且标记并在训练阶段用作眼睛的相同区域被评估为非眼睛。特征数据仅包含7个Hu时刻。我稍后会在这里发布一些源代码示例,在此先感谢:)
附加信息:
输入图片:http://i.stack.imgur.com/GyLO0.png
为1张图片设置基本svm:
int image_regions = 10;
Mat training_mat(image_regions ,7,CV_32FC1); // 7 hu moments
Mat labels(image_regions ,1,CV_32FC1); // for labels 1 (eye) and -1 (non eye)
// computing hu moments
Moments moments2=moments(croppedImage,false);
double hu[7];
HuMoments(moments2,hu);
// putting them into svm traning mat
for (int k=0;k<huCounter;k++)
training_mat.at<float>(counter,k) = hu[k]; // counter is current number of region
if (isEye(...))
{
labels.at<float>(counter,0)=1.0;
}
else
{
labels.at<float>(counter,0)=-1.0;
}
//I use the following:
CvSVM svm;
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 1000, 1e-6);
// ... do the above mentioned phase, and then:
svm.train(training_mat, labels, Mat(), Mat(), params);
我希望以下建议可以帮助你......