2012-03-28 3 views
0

Ich habe angefangen Funktionen mit opencv erkennen:Was bedeutet Trainingsbild in openCV?

Eine Sequenz wie:

cv::SurfFeatureDetector detector(40 ); 
std::vector<cv::KeyPoint> keypoints_object; 
detector.detect(img_object, keypoints_object); 
//-- Step 2: Calculate descriptors (feature vectors) 
cv::SurfDescriptorExtractor extractor; 
cv::Mat descriptors_object, descriptors_scene; 
extractor.compute(img_object, keypoints_object, descriptors_object); 
//-- Step 3: Matching descriptor vectors using FLANN matcher 

werden Merkmale des Bildes extrahieren, die gegen Features von anderen Bildern extrahiert angepasst werden kann. Was bedeutet der Begriff "Trainingsbild" in diesem Zusammenhang?

Muss ich das Bild mehrmals drehen und/oder skalieren?

Wenn ja. Können die Features zu einem einzigen Deskriptor zusammengeführt werden?

Antwort

2

Trainingsbild im Kontext der Merkmalsextraktion lässt mich an Klassifizierung denken. Dort haben Sie eine Reihe von Trainingsbildern aus verschiedenen Klassen, aus denen Sie Funktionen extrahieren. Dann versuchen Sie, eine Art von Klassifizierer mit diesen Funktionen zu lernen. Also hast du diese Bilder benutzt, um einen Klassifikator zu trainieren.

SURF Features sind skalier- und rotationsinvariant. Es ist also nicht notwendig, ein Bild zu skalieren oder zu drehen.

Um einen einzelnen Feature-Vektor pro Bild zu erhalten, können Sie bag of words model verwenden.

+0

+1 Ich werde tatsächlich FAST-Funktionen verwenden, kann ich sie in einer DB speichern und sie mit einem Bild abgleichen, das von einer Kamera aufgenommen wurde, ohne einen Trainingsvorgang? – stacker

+0

Natürlich können Sie. Diese Prozedur wird [1 Nearest Neighbour Classifier] genannt (http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm). Dann besteht die Trainingsstufe lediglich darin, Bilder zu einer Datenbank hinzuzufügen. – sietschie

+0

Danke, ich fand auch eine andere Ressource (für die Datensätze) http://opencv.willowgarage.com/documentation/cpp/k_nearest_neighbors.html – stacker