Hi,
I want to use the Java API 3.0 to detect food image with HOG feature. After I trained the SVM, I want to get the svmdetector with alpha and rho. But when I call getDecisionFunction function, the alpha returns a 1*1 mat. How can I get the right data?
SVM csvm=SVM.create();
csvm.setType(SVM.C_SVC);
csvm.setKernel(SVM.LINEAR);
csvm.setC(0.01);
TermCriteria tc=new TermCriteria(TermCriteria.MAX_ITER, 3000, 1e-6);
csvm.setTermCriteria(tc);
csvm.train(dataMat, Ml.ROW_SAMPLE, labelMat);
csvm.save(this.svmModelPath+"\\"+labelname+".xml");
System.out.println(csvm.getDegree());
System.out.println(csvm.getVarCount());
System.out.println(csvm.getSupportVectors());
int svdim=csvm.getVarCount();
int numofsv=csvm.getSupportVectors().rows();
Mat alpha=Mat.zeros(numofsv,svdim,CvType.CV_32FC1);
Mat svidx=Mat.zeros(1, numofsv,CvType.CV_64FC1);
System.out.println(alpha);
System.out.println(svidx);
double rho=csvm.getDecisionFunction(0, alpha, svidx);
alpha.convertTo(alpha, CvType.CV_32FC1);
System.out.println(rho);
System.out.println(alpha);
System.out.println(svidx);
The output is : 0.0 2304 Mat [ 11282304CV_32FC1, isCont=true, isSubmat=false, nativeObj=0xa10850, dataAddr=0x1d611080 ] Mat [ 11282304CV_32FC1, isCont=true, isSubmat=false, nativeObj=0xa10af0, dataAddr=0x1c509080 ] Mat [ 11128CV_64FC1, isCont=true, isSubmat=false, nativeObj=0xa10e70, dataAddr=0xa30d80 ] -1.0566525311046109 Mat [ 11CV_32FC1, isCont=true, isSubmat=false, nativeObj=0xa10af0, dataAddr=0xa29e00 ] Mat [ 11CV_32SC1, isCont=true, isSubmat=false, nativeObj=0xa10e70, dataAddr=0xa292c0 ]