示例#1
0
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);

} 
示例#2
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	
}