2012-04-06 4 views
0

mein Projekt Bereich ist Währung Note Identifizierung durch den Vergleich der Beispielbilder Feature-Set. Dort habe ich die Feature-Extraktion Teil der Beispielbilder abgeschlossen. Außerdem muss ich die Beispielbildfunktionen in der Textdatei oder XML-Datei und deren Klassifizierung speichern. bitte helfen Sie mir, den Bildklassifizierungsteil zu machen, indem Sie SVM classifier auf dem OpenCv verwendenSVM für Bild Feature-Klassifizierung mit OpenCv

das ist der Merkmalsextraktionscode, den ich vollendet habe.

int main (intargc, char ** argv) { /das Bild als Grauskala Laden/

//declaring Mat object.This will holds an image(like iplimage in old opencv versions). 

Mat gray_scale_img; 


//imread is used to load an image. in here i have load the image as a grayscale image. 

gray_scale_img=imread("100.jpg",CV_LOAD_IMAGE_GRAYSCALE); 


/*surf detector settings*/ 

//setting the threshold value.high value will result low number of keypoints. 
int hessian=100; 

//initializing the surf keypoint detector 
SurfFeatureDetectordetector(hessian); 


/*detect surf key points*/ 


//creating vector to store detected keypoints 
std::vector<KeyPoint>keypoints; 

//detect keypoints 
detector.detect(gray_scale_img,keypoints); 


/*extract descriptor vectors/feature vectors from each and every keypoints */ 

SurfDescriptorExtractor extractor; 


//this mat object will goinf to hold the extracted descriptors. 
Mat descriptors; 

//extracting descriptors/features 
extractor.compute(gray_scale_img,keypoints,descriptors); 

}

Antwort

1

SVM in OpenCV wird in CvSVM Klasse implementiert;

Sie benötigen einen Feature-Vektor in Form einer Matrix (zeilenweise).

Angenommen, Sie Höhe verwenden, Breite als Merkmalsvektor, wird Ihre Matte wie folgt (vorausgesetzt, Sie 20 Merkmalsvektoren haben):

Mat FV(20,2, CV_32F); 
Mat flagmat(20,1,CV_8U); 

/* 
code to populate the matrix FV. 

Fill the matrix with values so that it will look something as follows: 

20 30 
30 40 
.. 
.. 
code to populate the matrix flagmat. 
Fill the matrix with labels of each corresponding feature vector in matrix FV. It will look something as follows: 
1 
-1 
1 
1 
-1 
1 
1 
1 
.. 
*/ 

CvSVM svm; 

svm.train(datamat, flagmat,Mat(),Mat(),CvSVMParams()); 

Mat testFV(20,2,CV_32F); 
Mat sample(1,2,CV_32F); 

/* similarly as described above fill testFV matrix*/ 
float res;// to store result 
for(int i =0;i<testFV.rows;i++) 
{ 

    sample.at<float>(0,0)=testFV.at<float>(i,0); 
    sample.at<float>(0,1)=testFV.at<float>(i,1); 
    float res = svm.predict(sample); 
    cout<<"predicted label: "<<res<<endl; 
} 

Ich gehe davon aus können Sie numerische Werte aus der Funktion extrahieren Deskriptoren/Vektoren und lege sie in die Beispielmatrix im obigen Code. Sie können die Feature-Vektoren durch einen beliebigen Feature-Deskriptor ersetzen.

+0

kann ich einige Quellcodes dafür bekommen? –