DescriptorExtractor* createDescriptorExtractor(const std::string& descriptorType) { DescriptorExtractor* extractor = 0; if(descriptorType == "SIFT") { extractor = new SiftDescriptorExtractor();/*( double magnification=SIFT::DescriptorParams::GET_DEFAULT_MAGNIFICATION(), bool isNormalize=true, bool recalculateAngles=true, int nOctaves=SIFT::CommonParams::DEFAULT_NOCTAVES, int nOctaveLayers=SIFT::CommonParams::DEFAULT_NOCTAVE_LAYERS, int firstOctave=SIFT::CommonParams::DEFAULT_FIRST_OCTAVE, int angleMode=SIFT::CommonParams::FIRST_ANGLE )*/ } else if(descriptorType == "BRIEF") { extractor = new BriefDescriptorExtractor(); } else if(descriptorType == "BRISK") { extractor = new cv::BRISK();/*brisk default: (int thresh=30, int octaves=3, float patternScale=1.0f)*/ } else if(descriptorType == "FREAK") { extractor = new cv::FREAK(); } else if(descriptorType == "SURF") { extractor = new SurfDescriptorExtractor();/*( int nOctaves=4, int nOctaveLayers=2, bool extended=false )*/ } else if(descriptorType == "SURF128") { extractor = new SurfDescriptorExtractor();/*( int nOctaves=4, int nOctaveLayers=2, bool extended=false )*/ extractor->set("extended", 1); } #if CV_MAJOR_VERSION > 2 || CV_MINOR_VERSION >= 3 else if(descriptorType == "ORB") { extractor = new OrbDescriptorExtractor(); } #endif else if(descriptorType == "SIFTGPU") { ROS_DEBUG("%s is to be used as extractor, creating SURF descriptor extractor as fallback.", descriptorType.c_str()); extractor = new SurfDescriptorExtractor();/*( int nOctaves=4, int nOctaveLayers=2, bool extended=false )*/ } else { ROS_ERROR("No valid descriptor-matcher-type given: %s. Using SURF", descriptorType.c_str()); extractor = createDescriptorExtractor("SURF"); } assert(extractor != 0 && "No extractor could be created"); return extractor; }