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;
}
Example #2
0
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);
	}
}