Mat get_image_BOF(Mat image, std::vector<KeyPoint> extracted_keypoints, int KNN) { cout << "Attempting to classify new image" << endl ; cvtColor(image, image, CV_BGR2GRAY); image.convertTo(image, CV_8U); cout << "creating description matcher" << endl ; Ptr<DescriptorMatcher> matcher (new FlannBasedMatcher()) ; cout << "creating feature detector" << endl ; Ptr<FeatureDetector> detector (new SiftFeatureDetector()) ; cout << "creating descriptor extractor" << endl ; Ptr<DescriptorExtractor> extractor (new SiftDescriptorExtractor()) ; cout << "creating bag of words image descriptor extractor" << endl ; BOWImgDescriptorExtractor bowDE(extractor, matcher) ; cout << "setting vocabulary" << endl ; bowDE.setVocabulary(loaded_dictionary) ; cout << "keypoints size:" << extracted_keypoints.size() << endl ; cout << "computing description matrix, image_type:" << image.type() << endl ; Mat bowDescriptor ; bowDE.compute(image, extracted_keypoints, bowDescriptor) ; cout << "feature mat has been created successfully." << endl ; imshow("bowDescriptor", bowDescriptor); waitKey(0); }
void SVMformat::bowExtractor(Mat img, Mat mask) { Ptr<DescriptorMatcher> matcher(new FlannBasedMatcher); //KNN vector<KeyPoint> cornor; int minHessian = 400; //SURF Hessian Threshold Ptr<FeatureDetector> detector(new SurfFeatureDetector()); Ptr<DescriptorExtractor> extractor(new SurfDescriptorExtractor(minHessian,4,2,false)); BOWImgDescriptorExtractor bowDE(extractor,matcher); bowDE.setVocabulary(dictionary); Mat bowDescriptor; detector->detect(img, cornor, mask); if(cornor.size() < 10) return; bowDE.compute(img, cornor, bowDescriptor); bowDescriptor = bowDescriptor*100; bowDescSet.push_back(bowDescriptor); //have to convert to CV_8U before training }