cv::DescriptorExtractor * Settings::createDescriptorsExtractor() { cv::DescriptorExtractor * extractor = 0; QString str = getFeature2D_2Descriptor(); QStringList split = str.split(':'); if(split.size()==2) { bool ok = false; int index = split.first().toInt(&ok); if(ok) { QStringList strategies = split.last().split(';'); if(strategies.size() == 6 && index>=0 && index<6) { switch(index) { case 0: if(strategies.at(index).compare("Brief") == 0) { extractor = new cv::BriefDescriptorExtractor( getFeature2D_Brief_bytes()); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "Brief"); } break; case 1: if(strategies.at(index).compare("ORB") == 0) { extractor = new cv::ORB( getFeature2D_ORB_nFeatures(), getFeature2D_ORB_scaleFactor(), getFeature2D_ORB_nLevels(), getFeature2D_ORB_edgeThreshold(), getFeature2D_ORB_firstLevel(), getFeature2D_ORB_WTA_K(), getFeature2D_ORB_scoreType(), getFeature2D_ORB_patchSize()); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "ORB"); } break; case 2: if(strategies.at(index).compare("SIFT") == 0) { extractor = new cv::SIFT( getFeature2D_SIFT_nfeatures(), getFeature2D_SIFT_nOctaveLayers(), getFeature2D_SIFT_contrastThreshold(), getFeature2D_SIFT_edgeThreshold(), getFeature2D_SIFT_sigma()); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "SIFT"); } break; case 3: if(strategies.at(index).compare("SURF") == 0) { extractor = new cv::SURF( getFeature2D_SURF_hessianThreshold(), getFeature2D_SURF_nOctaves(), getFeature2D_SURF_nOctaveLayers(), getFeature2D_SURF_extended(), getFeature2D_SURF_upright()); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "SURF"); } break; case 4: if(strategies.at(index).compare("BRISK") == 0) { extractor = new cv::BRISK( getFeature2D_BRISK_thresh(), getFeature2D_BRISK_octaves(), getFeature2D_BRISK_patternScale()); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "BRISK"); } break; case 5: if(strategies.at(index).compare("FREAK") == 0) { extractor = new cv::FREAK( getFeature2D_FREAK_orientationNormalized(), getFeature2D_FREAK_scaleNormalized(), getFeature2D_FREAK_patternScale(), getFeature2D_FREAK_nOctaves()); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "FREAK"); } break; default: break; } } } } if(!extractor) { printf("ERROR: descriptor strategy not found !? Using default SURF...\n"); extractor = new cv::SURF(); } return extractor; }
DescriptorExtractor * Settings::createDescriptorExtractor() { cv::DescriptorExtractor * extractor = 0; GPUFeature2D * extractorGPU = 0; QString str = getFeature2D_2Descriptor(); QStringList split = str.split(':'); if(split.size()==2) { bool ok = false; int index = split.first().toInt(&ok); if(ok) { QStringList strategies = split.last().split(';'); if(strategies.size() == 6 && index>=0 && index<6) { switch(index) { case 0: if(strategies.at(index).compare("Brief") == 0) { extractor = new cv::BriefDescriptorExtractor( getFeature2D_Brief_bytes()); UDEBUG("type=%s", strategies.at(index).toStdString().c_str()); } break; case 1: if(strategies.at(index).compare("ORB") == 0) { if(getFeature2D_ORB_gpu() && cv::gpu::getCudaEnabledDeviceCount()) { extractorGPU = new GPUORB( getFeature2D_ORB_nFeatures(), getFeature2D_ORB_scaleFactor(), getFeature2D_ORB_nLevels(), getFeature2D_ORB_edgeThreshold(), getFeature2D_ORB_firstLevel(), getFeature2D_ORB_WTA_K(), getFeature2D_ORB_scoreType(), getFeature2D_ORB_patchSize(), getFeature2D_Fast_threshold(), getFeature2D_Fast_nonmaxSuppression()); UDEBUG("type=%s (GPU)", strategies.at(index).toStdString().c_str()); } else { extractor = new cv::ORB( getFeature2D_ORB_nFeatures(), getFeature2D_ORB_scaleFactor(), getFeature2D_ORB_nLevels(), getFeature2D_ORB_edgeThreshold(), getFeature2D_ORB_firstLevel(), getFeature2D_ORB_WTA_K(), getFeature2D_ORB_scoreType(), getFeature2D_ORB_patchSize()); UDEBUG("type=%s", strategies.at(index).toStdString().c_str()); } } break; case 2: if(strategies.at(index).compare("SIFT") == 0) { extractor = new cv::SIFT( getFeature2D_SIFT_nfeatures(), getFeature2D_SIFT_nOctaveLayers(), getFeature2D_SIFT_contrastThreshold(), getFeature2D_SIFT_edgeThreshold(), getFeature2D_SIFT_sigma()); UDEBUG("type=%s", strategies.at(index).toStdString().c_str()); } break; case 3: if(strategies.at(index).compare("SURF") == 0) { if(getFeature2D_SURF_gpu() && cv::gpu::getCudaEnabledDeviceCount()) { extractorGPU = new GPUSURF( getFeature2D_SURF_hessianThreshold(), getFeature2D_SURF_nOctaves(), getFeature2D_SURF_nOctaveLayers(), getFeature2D_SURF_extended(), getFeature2D_SURF_keypointsRatio(), getFeature2D_SURF_upright()); UDEBUG("type=%s (GPU)", strategies.at(index).toStdString().c_str()); } else { extractor = new cv::SURF( getFeature2D_SURF_hessianThreshold(), getFeature2D_SURF_nOctaves(), getFeature2D_SURF_nOctaveLayers(), getFeature2D_SURF_extended(), getFeature2D_SURF_upright()); UDEBUG("type=%s", strategies.at(index).toStdString().c_str()); } } break; case 4: if(strategies.at(index).compare("BRISK") == 0) { extractor = new cv::BRISK( getFeature2D_BRISK_thresh(), getFeature2D_BRISK_octaves(), getFeature2D_BRISK_patternScale()); UDEBUG("type=%s", strategies.at(index).toStdString().c_str()); } break; case 5: if(strategies.at(index).compare("FREAK") == 0) { extractor = new cv::FREAK( getFeature2D_FREAK_orientationNormalized(), getFeature2D_FREAK_scaleNormalized(), getFeature2D_FREAK_patternScale(), getFeature2D_FREAK_nOctaves()); UDEBUG("type=%s", strategies.at(index).toStdString().c_str()); } break; default: break; } } } } Q_ASSERT(extractorGPU!=0 || extractor!=0); if(extractorGPU) { return new DescriptorExtractor(extractorGPU); } else { return new DescriptorExtractor(extractor); } }