Changed Detector_descriptor group name to Feature2D group name

Added BRISK and FREAK features

git-svn-id: http://find-object.googlecode.com/svn/trunk/find_object@179 620bd6b2-0a58-f614-fd9a-1bd335dccda9
This commit is contained in:
matlabbe 2012-10-29 20:00:44 +00:00
parent c9e52fdbae
commit 72bdae12b0
5 changed files with 191 additions and 134 deletions

View File

@ -69,6 +69,7 @@ int main(int argc, char * argv[])
cv::FeatureDetector * detector = new cv::SIFT(); cv::FeatureDetector * detector = new cv::SIFT();
// cv::FeatureDetector * detector = new cv::StarFeatureDetector(); // cv::FeatureDetector * detector = new cv::StarFeatureDetector();
// cv::FeatureDetector * detector = new cv::SURF(600.0); // cv::FeatureDetector * detector = new cv::SURF(600.0);
// cv::FeatureDetector * detector = new cv::BRISK();
detector->detect(objectImg, objectKeypoints); detector->detect(objectImg, objectKeypoints);
printf("Object: %d keypoints detected in %d ms\n", (int)objectKeypoints.size(), time.restart()); printf("Object: %d keypoints detected in %d ms\n", (int)objectKeypoints.size(), time.restart());
detector->detect(sceneImg, sceneKeypoints); detector->detect(sceneImg, sceneKeypoints);
@ -82,6 +83,8 @@ int main(int argc, char * argv[])
// cv::DescriptorExtractor * extractor = new cv::ORB(); // cv::DescriptorExtractor * extractor = new cv::ORB();
cv::DescriptorExtractor * extractor = new cv::SIFT(); cv::DescriptorExtractor * extractor = new cv::SIFT();
// cv::DescriptorExtractor * extractor = new cv::SURF(600.0); // cv::DescriptorExtractor * extractor = new cv::SURF(600.0);
// cv::DescriptorExtractor * extractor = new cv::BRISK();
// cv::DescriptorExtractor * extractor = new cv::FREAK();
extractor->compute(objectImg, objectKeypoints, objectDescriptors); extractor->compute(objectImg, objectKeypoints, objectDescriptors);
printf("Object: %d descriptors extracted in %d ms\n", objectDescriptors.rows, time.restart()); printf("Object: %d descriptors extracted in %d ms\n", objectDescriptors.rows, time.restart());
extractor->compute(sceneImg, sceneKeypoints, sceneDescriptors); extractor->compute(sceneImg, sceneKeypoints, sceneDescriptors);
@ -98,8 +101,8 @@ int main(int argc, char * argv[])
// Binary descriptors detected (from ORB or Brief) // Binary descriptors detected (from ORB or Brief)
// Create Flann LSH index // Create Flann LSH index
cv::flann::Index flannIndex(sceneDescriptors, cv::flann::LshIndexParams(12, 20, 2)); cv::flann::Index flannIndex(sceneDescriptors, cv::flann::LshIndexParams(12, 20, 2), cvflann::FLANN_DIST_HAMMING);
printf("Time creating FLANN index = %d ms\n", time.restart()); printf("Time creating FLANN LSH index = %d ms\n", time.restart());
results = cv::Mat(objectDescriptors.rows, k, CV_32SC1); // Results index results = cv::Mat(objectDescriptors.rows, k, CV_32SC1); // Results index
dists = cv::Mat(objectDescriptors.rows, k, CV_32FC1); // Distance results are CV_32FC1 ?!?!? NOTE OpenCV doc is not clear about that... dists = cv::Mat(objectDescriptors.rows, k, CV_32FC1); // Distance results are CV_32FC1 ?!?!? NOTE OpenCV doc is not clear about that...
@ -112,8 +115,8 @@ int main(int argc, char * argv[])
// assume it is CV_32F // assume it is CV_32F
// Create Flann KDTree index // Create Flann KDTree index
cv::flann::Index flannIndex(sceneDescriptors, cv::flann::KDTreeIndexParams()); cv::flann::Index flannIndex(sceneDescriptors, cv::flann::KDTreeIndexParams(), cvflann::FLANN_DIST_EUCLIDEAN);
printf("Time creating FLANN index = %d ms\n", time.restart()); printf("Time creating FLANN KDTree index = %d ms\n", time.restart());
results = cv::Mat(objectDescriptors.rows, k, CV_32SC1); // Results index results = cv::Mat(objectDescriptors.rows, k, CV_32SC1); // Results index
dists = cv::Mat(objectDescriptors.rows, k, CV_32FC1); // Distance results are CV_32FC1 dists = cv::Mat(objectDescriptors.rows, k, CV_32FC1); // Distance results are CV_32FC1

View File

@ -1163,8 +1163,8 @@ void MainWindow::notifyParametersChanged(const QStringList & paramChanged)
if(!detectorDescriptorParamsChanged && if(!detectorDescriptorParamsChanged &&
( iter->contains(currentDetectorType) || ( iter->contains(currentDetectorType) ||
iter->contains(currentDescriptorType) || iter->contains(currentDescriptorType) ||
iter->compare(Settings::kDetector_Descriptor_1Detector()) == 0 || iter->compare(Settings::kFeature2D_1Detector()) == 0 ||
iter->compare(Settings::kDetector_Descriptor_2Descriptor()) == 0 )) iter->compare(Settings::kFeature2D_2Descriptor()) == 0 ))
{ {
detectorDescriptorParamsChanged = true; detectorDescriptorParamsChanged = true;
} }

View File

@ -364,12 +364,15 @@ void ParametersToolBox::changeParameter(const int & value)
{ {
bool nnStrategyChanged = false; bool nnStrategyChanged = false;
//verify binary issue with nearest neighbor strategy //verify binary issue with nearest neighbor strategy
if(comboBox->objectName().compare(Settings::kDetector_Descriptor_2Descriptor()) == 0 || if(comboBox->objectName().compare(Settings::kFeature2D_2Descriptor()) == 0 ||
comboBox->objectName().compare(Settings::kNearestNeighbor_1Strategy()) == 0) comboBox->objectName().compare(Settings::kNearestNeighbor_1Strategy()) == 0)
{ {
QComboBox * descriptorBox = (QComboBox*)this->getParameterWidget(Settings::kDetector_Descriptor_2Descriptor()); QComboBox * descriptorBox = (QComboBox*)this->getParameterWidget(Settings::kFeature2D_2Descriptor());
QComboBox * nnBox = (QComboBox*)this->getParameterWidget(Settings::kNearestNeighbor_1Strategy()); QComboBox * nnBox = (QComboBox*)this->getParameterWidget(Settings::kNearestNeighbor_1Strategy());
bool isBinaryDescriptor = descriptorBox->currentText().compare("ORB") == 0 || descriptorBox->currentText().compare("Brief") == 0; bool isBinaryDescriptor = descriptorBox->currentText().compare("ORB") == 0 ||
descriptorBox->currentText().compare("Brief") == 0 ||
descriptorBox->currentText().compare("BRISK") == 0 ||
descriptorBox->currentText().compare("FREAK") == 0;
if(isBinaryDescriptor && nnBox->currentText().compare("Lsh") != 0) if(isBinaryDescriptor && nnBox->currentText().compare("Lsh") != 0)
{ {
QMessageBox::warning(this, QMessageBox::warning(this,

View File

@ -49,6 +49,17 @@ void Settings::loadSettings(const QString & fileName, QByteArray * windowGeometr
QVariant value = ini.value(key, QVariant()); QVariant value = ini.value(key, QVariant());
if(value.isValid()) if(value.isValid())
{ {
QString str = value.toString();
if(str.contains(";") && str.size() != getParameter(key).toString().size())
{
// If a string list is modified, update the value
// (assuming that index < 10... one character for index)
QChar index = str.at(0);
str = getParameter(key).toString();
str[0] = index.toAscii();
value = QVariant(str);
printf("Updated list of parameter \"%s\"\n", key.toStdString().c_str());
}
setParameter(key, value); setParameter(key, value);
} }
} }
@ -107,7 +118,7 @@ void Settings::saveSettings(const QString & fileName, const QByteArray & windowG
cv::FeatureDetector * Settings::createFeaturesDetector() cv::FeatureDetector * Settings::createFeaturesDetector()
{ {
cv::FeatureDetector * detector = 0; cv::FeatureDetector * detector = 0;
QString str = getDetector_Descriptor_1Detector(); QString str = getFeature2D_1Detector();
QStringList split = str.split(':'); QStringList split = str.split(':');
if(split.size()==2) if(split.size()==2)
{ {
@ -116,7 +127,7 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
if(ok) if(ok)
{ {
QStringList strategies = split.last().split(';'); QStringList strategies = split.last().split(';');
if(strategies.size() == 8 && index>=0 && index<8) if(strategies.size() == 9 && index>=0 && index<9)
{ {
switch(index) switch(index)
{ {
@ -124,13 +135,13 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
if(strategies.at(index).compare("Dense") == 0) if(strategies.at(index).compare("Dense") == 0)
{ {
detector = new cv::DenseFeatureDetector( detector = new cv::DenseFeatureDetector(
getDetector_Descriptor_Dense_initFeatureScale(), getFeature2D_Dense_initFeatureScale(),
getDetector_Descriptor_Dense_featureScaleLevels(), getFeature2D_Dense_featureScaleLevels(),
getDetector_Descriptor_Dense_featureScaleMul(), getFeature2D_Dense_featureScaleMul(),
getDetector_Descriptor_Dense_initXyStep(), getFeature2D_Dense_initXyStep(),
getDetector_Descriptor_Dense_initImgBound(), getFeature2D_Dense_initImgBound(),
getDetector_Descriptor_Dense_varyXyStepWithScale(), getFeature2D_Dense_varyXyStepWithScale(),
getDetector_Descriptor_Dense_varyImgBoundWithScale()); getFeature2D_Dense_varyImgBoundWithScale());
if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "Dense"); if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "Dense");
} }
break; break;
@ -138,8 +149,8 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
if(strategies.at(index).compare("Fast") == 0) if(strategies.at(index).compare("Fast") == 0)
{ {
detector = new cv::FastFeatureDetector( detector = new cv::FastFeatureDetector(
getDetector_Descriptor_Fast_threshold(), getFeature2D_Fast_threshold(),
getDetector_Descriptor_Fast_nonmaxSuppression()); getFeature2D_Fast_nonmaxSuppression());
if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "Fast"); if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "Fast");
} }
break; break;
@ -147,12 +158,12 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
if(strategies.at(index).compare("GFTT") == 0) if(strategies.at(index).compare("GFTT") == 0)
{ {
detector = new cv::GFTTDetector( detector = new cv::GFTTDetector(
getDetector_Descriptor_GFTT_maxCorners(), getFeature2D_GFTT_maxCorners(),
getDetector_Descriptor_GFTT_qualityLevel(), getFeature2D_GFTT_qualityLevel(),
getDetector_Descriptor_GFTT_minDistance(), getFeature2D_GFTT_minDistance(),
getDetector_Descriptor_GFTT_blockSize(), getFeature2D_GFTT_blockSize(),
getDetector_Descriptor_GFTT_useHarrisDetector(), getFeature2D_GFTT_useHarrisDetector(),
getDetector_Descriptor_GFTT_k()); getFeature2D_GFTT_k());
if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "GFTT"); if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "GFTT");
} }
break; break;
@ -160,15 +171,15 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
if(strategies.at(index).compare("MSER") == 0) if(strategies.at(index).compare("MSER") == 0)
{ {
detector = new cv::MSER( detector = new cv::MSER(
getDetector_Descriptor_MSER_delta(), getFeature2D_MSER_delta(),
getDetector_Descriptor_MSER_minArea(), getFeature2D_MSER_minArea(),
getDetector_Descriptor_MSER_maxArea(), getFeature2D_MSER_maxArea(),
getDetector_Descriptor_MSER_maxVariation(), getFeature2D_MSER_maxVariation(),
getDetector_Descriptor_MSER_minDiversity(), getFeature2D_MSER_minDiversity(),
getDetector_Descriptor_MSER_maxEvolution(), getFeature2D_MSER_maxEvolution(),
getDetector_Descriptor_MSER_areaThreshold(), getFeature2D_MSER_areaThreshold(),
getDetector_Descriptor_MSER_minMargin(), getFeature2D_MSER_minMargin(),
getDetector_Descriptor_MSER_edgeBlurSize()); getFeature2D_MSER_edgeBlurSize());
if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "MSER"); if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "MSER");
} }
break; break;
@ -176,14 +187,14 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
if(strategies.at(index).compare("ORB") == 0) if(strategies.at(index).compare("ORB") == 0)
{ {
detector = new cv::ORB( detector = new cv::ORB(
getDetector_Descriptor_ORB_nFeatures(), getFeature2D_ORB_nFeatures(),
getDetector_Descriptor_ORB_scaleFactor(), getFeature2D_ORB_scaleFactor(),
getDetector_Descriptor_ORB_nLevels(), getFeature2D_ORB_nLevels(),
getDetector_Descriptor_ORB_edgeThreshold(), getFeature2D_ORB_edgeThreshold(),
getDetector_Descriptor_ORB_firstLevel(), getFeature2D_ORB_firstLevel(),
getDetector_Descriptor_ORB_WTA_K(), getFeature2D_ORB_WTA_K(),
getDetector_Descriptor_ORB_scoreType(), getFeature2D_ORB_scoreType(),
getDetector_Descriptor_ORB_patchSize()); getFeature2D_ORB_patchSize());
if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "ORB"); if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "ORB");
} }
break; break;
@ -191,11 +202,11 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
if(strategies.at(index).compare("SIFT") == 0) if(strategies.at(index).compare("SIFT") == 0)
{ {
detector = new cv::SIFT( detector = new cv::SIFT(
getDetector_Descriptor_SIFT_nfeatures(), getFeature2D_SIFT_nfeatures(),
getDetector_Descriptor_SIFT_nOctaveLayers(), getFeature2D_SIFT_nOctaveLayers(),
getDetector_Descriptor_SIFT_contrastThreshold(), getFeature2D_SIFT_contrastThreshold(),
getDetector_Descriptor_SIFT_edgeThreshold(), getFeature2D_SIFT_edgeThreshold(),
getDetector_Descriptor_SIFT_sigma()); getFeature2D_SIFT_sigma());
if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "SIFT"); if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "SIFT");
} }
break; break;
@ -203,11 +214,11 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
if(strategies.at(index).compare("Star") == 0) if(strategies.at(index).compare("Star") == 0)
{ {
detector = new cv::StarFeatureDetector( detector = new cv::StarFeatureDetector(
getDetector_Descriptor_Star_maxSize(), getFeature2D_Star_maxSize(),
getDetector_Descriptor_Star_responseThreshold(), getFeature2D_Star_responseThreshold(),
getDetector_Descriptor_Star_lineThresholdProjected(), getFeature2D_Star_lineThresholdProjected(),
getDetector_Descriptor_Star_lineThresholdBinarized(), getFeature2D_Star_lineThresholdBinarized(),
getDetector_Descriptor_Star_suppressNonmaxSize()); getFeature2D_Star_suppressNonmaxSize());
if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "Star"); if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "Star");
} }
break; break;
@ -215,14 +226,24 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
if(strategies.at(index).compare("SURF") == 0) if(strategies.at(index).compare("SURF") == 0)
{ {
detector = new cv::SURF( detector = new cv::SURF(
getDetector_Descriptor_SURF_hessianThreshold(), getFeature2D_SURF_hessianThreshold(),
getDetector_Descriptor_SURF_nOctaves(), getFeature2D_SURF_nOctaves(),
getDetector_Descriptor_SURF_nOctaveLayers(), getFeature2D_SURF_nOctaveLayers(),
getDetector_Descriptor_SURF_extended(), getFeature2D_SURF_extended(),
getDetector_Descriptor_SURF_upright()); getFeature2D_SURF_upright());
if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "SURF"); if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "SURF");
} }
break; break;
case 8:
if(strategies.at(index).compare("BRISK") == 0)
{
detector = new cv::BRISK(
getFeature2D_BRISK_thresh(),
getFeature2D_BRISK_octaves(),
getFeature2D_BRISK_patternScale());
if(VERBOSE)printf("Settings::createFeaturesDetector() type=%s\n", "BRISK");
}
break;
default: default:
break; break;
} }
@ -240,7 +261,7 @@ cv::FeatureDetector * Settings::createFeaturesDetector()
cv::DescriptorExtractor * Settings::createDescriptorsExtractor() cv::DescriptorExtractor * Settings::createDescriptorsExtractor()
{ {
cv::DescriptorExtractor * extractor = 0; cv::DescriptorExtractor * extractor = 0;
QString str = getDetector_Descriptor_2Descriptor(); QString str = getFeature2D_2Descriptor();
QStringList split = str.split(':'); QStringList split = str.split(':');
if(split.size()==2) if(split.size()==2)
{ {
@ -249,7 +270,7 @@ cv::DescriptorExtractor * Settings::createDescriptorsExtractor()
if(ok) if(ok)
{ {
QStringList strategies = split.last().split(';'); QStringList strategies = split.last().split(';');
if(strategies.size() == 4 && index>=0 && index<4) if(strategies.size() == 6 && index>=0 && index<6)
{ {
switch(index) switch(index)
{ {
@ -257,7 +278,7 @@ cv::DescriptorExtractor * Settings::createDescriptorsExtractor()
if(strategies.at(index).compare("Brief") == 0) if(strategies.at(index).compare("Brief") == 0)
{ {
extractor = new cv::BriefDescriptorExtractor( extractor = new cv::BriefDescriptorExtractor(
getDetector_Descriptor_Brief_bytes()); getFeature2D_Brief_bytes());
if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "Brief"); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "Brief");
} }
break; break;
@ -265,14 +286,14 @@ cv::DescriptorExtractor * Settings::createDescriptorsExtractor()
if(strategies.at(index).compare("ORB") == 0) if(strategies.at(index).compare("ORB") == 0)
{ {
extractor = new cv::ORB( extractor = new cv::ORB(
getDetector_Descriptor_ORB_nFeatures(), getFeature2D_ORB_nFeatures(),
getDetector_Descriptor_ORB_scaleFactor(), getFeature2D_ORB_scaleFactor(),
getDetector_Descriptor_ORB_nLevels(), getFeature2D_ORB_nLevels(),
getDetector_Descriptor_ORB_edgeThreshold(), getFeature2D_ORB_edgeThreshold(),
getDetector_Descriptor_ORB_firstLevel(), getFeature2D_ORB_firstLevel(),
getDetector_Descriptor_ORB_WTA_K(), getFeature2D_ORB_WTA_K(),
getDetector_Descriptor_ORB_scoreType(), getFeature2D_ORB_scoreType(),
getDetector_Descriptor_ORB_patchSize()); getFeature2D_ORB_patchSize());
if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "ORB"); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "ORB");
} }
break; break;
@ -280,11 +301,11 @@ cv::DescriptorExtractor * Settings::createDescriptorsExtractor()
if(strategies.at(index).compare("SIFT") == 0) if(strategies.at(index).compare("SIFT") == 0)
{ {
extractor = new cv::SIFT( extractor = new cv::SIFT(
getDetector_Descriptor_SIFT_nfeatures(), getFeature2D_SIFT_nfeatures(),
getDetector_Descriptor_SIFT_nOctaveLayers(), getFeature2D_SIFT_nOctaveLayers(),
getDetector_Descriptor_SIFT_contrastThreshold(), getFeature2D_SIFT_contrastThreshold(),
getDetector_Descriptor_SIFT_edgeThreshold(), getFeature2D_SIFT_edgeThreshold(),
getDetector_Descriptor_SIFT_sigma()); getFeature2D_SIFT_sigma());
if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "SIFT"); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "SIFT");
} }
break; break;
@ -292,14 +313,35 @@ cv::DescriptorExtractor * Settings::createDescriptorsExtractor()
if(strategies.at(index).compare("SURF") == 0) if(strategies.at(index).compare("SURF") == 0)
{ {
extractor = new cv::SURF( extractor = new cv::SURF(
getDetector_Descriptor_SURF_hessianThreshold(), getFeature2D_SURF_hessianThreshold(),
getDetector_Descriptor_SURF_nOctaves(), getFeature2D_SURF_nOctaves(),
getDetector_Descriptor_SURF_nOctaveLayers(), getFeature2D_SURF_nOctaveLayers(),
getDetector_Descriptor_SURF_extended(), getFeature2D_SURF_extended(),
getDetector_Descriptor_SURF_upright()); getFeature2D_SURF_upright());
if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "SURF"); if(VERBOSE)printf("Settings::createDescriptorsExtractor() type=%s\n", "SURF");
} }
break; 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: default:
break; break;
} }
@ -316,14 +358,14 @@ cv::DescriptorExtractor * Settings::createDescriptorsExtractor()
QString Settings::currentDetectorType() QString Settings::currentDetectorType()
{ {
int index = getDetector_Descriptor_1Detector().split(':').first().toInt(); int index = getFeature2D_1Detector().split(':').first().toInt();
return getDetector_Descriptor_1Detector().split(':').last().split(';').at(index); return getFeature2D_1Detector().split(':').last().split(';').at(index);
} }
QString Settings::currentDescriptorType() QString Settings::currentDescriptorType()
{ {
int index = getDetector_Descriptor_2Descriptor().split(':').first().toInt(); int index = getFeature2D_2Descriptor().split(':').first().toInt();
return getDetector_Descriptor_2Descriptor().split(':').last().split(';').at(index); return getFeature2D_2Descriptor().split(':').last().split(';').at(index);
} }
QString Settings::currentNearestNeighborType() QString Settings::currentNearestNeighborType()

View File

@ -59,68 +59,77 @@ class Settings
PARAMETER(Camera, 5mediaPath, QString, ""); PARAMETER(Camera, 5mediaPath, QString, "");
//List format : [Index:item0;item1;item3;...] //List format : [Index:item0;item1;item3;...]
PARAMETER(Detector_Descriptor, 1Detector, QString, "7:Dense;Fast;GFTT;MSER;ORB;SIFT;Star;SURF"); PARAMETER(Feature2D, 1Detector, QString, "7:Dense;Fast;GFTT;MSER;ORB;SIFT;Star;SURF;BRISK");
PARAMETER(Detector_Descriptor, 2Descriptor, QString, "3:Brief;ORB;SIFT;SURF"); PARAMETER(Feature2D, 2Descriptor, QString, "3:Brief;ORB;SIFT;SURF;BRISK;FREAK");
PARAMETER(Detector_Descriptor, Brief_bytes, int, 32); PARAMETER(Feature2D, Brief_bytes, int, 32);
PARAMETER(Detector_Descriptor, Dense_initFeatureScale, float, 1.f); PARAMETER(Feature2D, Dense_initFeatureScale, float, 1.f);
PARAMETER(Detector_Descriptor, Dense_featureScaleLevels, int, 1); PARAMETER(Feature2D, Dense_featureScaleLevels, int, 1);
PARAMETER(Detector_Descriptor, Dense_featureScaleMul, float, 0.1f); PARAMETER(Feature2D, Dense_featureScaleMul, float, 0.1f);
PARAMETER(Detector_Descriptor, Dense_initXyStep, int, 6); PARAMETER(Feature2D, Dense_initXyStep, int, 6);
PARAMETER(Detector_Descriptor, Dense_initImgBound, int, 0); PARAMETER(Feature2D, Dense_initImgBound, int, 0);
PARAMETER(Detector_Descriptor, Dense_varyXyStepWithScale, bool, true); PARAMETER(Feature2D, Dense_varyXyStepWithScale, bool, true);
PARAMETER(Detector_Descriptor, Dense_varyImgBoundWithScale, bool, false); PARAMETER(Feature2D, Dense_varyImgBoundWithScale, bool, false);
PARAMETER(Detector_Descriptor, Fast_threshold, int, 10); PARAMETER(Feature2D, Fast_threshold, int, 10);
PARAMETER(Detector_Descriptor, Fast_nonmaxSuppression, bool, true); PARAMETER(Feature2D, Fast_nonmaxSuppression, bool, true);
PARAMETER(Detector_Descriptor, GFTT_maxCorners, int, 1000); PARAMETER(Feature2D, GFTT_maxCorners, int, 1000);
PARAMETER(Detector_Descriptor, GFTT_qualityLevel, double, 0.01); PARAMETER(Feature2D, GFTT_qualityLevel, double, 0.01);
PARAMETER(Detector_Descriptor, GFTT_minDistance, double, 1); PARAMETER(Feature2D, GFTT_minDistance, double, 1);
PARAMETER(Detector_Descriptor, GFTT_blockSize, int, 3); PARAMETER(Feature2D, GFTT_blockSize, int, 3);
PARAMETER(Detector_Descriptor, GFTT_useHarrisDetector, bool, false); PARAMETER(Feature2D, GFTT_useHarrisDetector, bool, false);
PARAMETER(Detector_Descriptor, GFTT_k, double, 0.04); PARAMETER(Feature2D, GFTT_k, double, 0.04);
PARAMETER(Detector_Descriptor, ORB_nFeatures, int, 500); PARAMETER(Feature2D, ORB_nFeatures, int, 500);
PARAMETER(Detector_Descriptor, ORB_scaleFactor, float, 1.2f); PARAMETER(Feature2D, ORB_scaleFactor, float, 1.2f);
PARAMETER(Detector_Descriptor, ORB_nLevels, int, 8); PARAMETER(Feature2D, ORB_nLevels, int, 8);
PARAMETER(Detector_Descriptor, ORB_edgeThreshold, int, 31); PARAMETER(Feature2D, ORB_edgeThreshold, int, 31);
PARAMETER(Detector_Descriptor, ORB_firstLevel, int, 0); PARAMETER(Feature2D, ORB_firstLevel, int, 0);
PARAMETER(Detector_Descriptor, ORB_WTA_K, int, 2); PARAMETER(Feature2D, ORB_WTA_K, int, 2);
PARAMETER(Detector_Descriptor, ORB_scoreType, int, 0); PARAMETER(Feature2D, ORB_scoreType, int, 0);
PARAMETER(Detector_Descriptor, ORB_patchSize, int, 31); PARAMETER(Feature2D, ORB_patchSize, int, 31);
PARAMETER(Detector_Descriptor, MSER_delta, int, 5); PARAMETER(Feature2D, MSER_delta, int, 5);
PARAMETER(Detector_Descriptor, MSER_minArea, int, 60); PARAMETER(Feature2D, MSER_minArea, int, 60);
PARAMETER(Detector_Descriptor, MSER_maxArea, int, 14400); PARAMETER(Feature2D, MSER_maxArea, int, 14400);
PARAMETER(Detector_Descriptor, MSER_maxVariation, double, 0.25); PARAMETER(Feature2D, MSER_maxVariation, double, 0.25);
PARAMETER(Detector_Descriptor, MSER_minDiversity, double, 0.2); PARAMETER(Feature2D, MSER_minDiversity, double, 0.2);
PARAMETER(Detector_Descriptor, MSER_maxEvolution, int, 200); PARAMETER(Feature2D, MSER_maxEvolution, int, 200);
PARAMETER(Detector_Descriptor, MSER_areaThreshold, double, 1.01); PARAMETER(Feature2D, MSER_areaThreshold, double, 1.01);
PARAMETER(Detector_Descriptor, MSER_minMargin, double, 0.003); PARAMETER(Feature2D, MSER_minMargin, double, 0.003);
PARAMETER(Detector_Descriptor, MSER_edgeBlurSize, int, 5); PARAMETER(Feature2D, MSER_edgeBlurSize, int, 5);
PARAMETER(Detector_Descriptor, SIFT_nfeatures, int, 0); PARAMETER(Feature2D, SIFT_nfeatures, int, 0);
PARAMETER(Detector_Descriptor, SIFT_nOctaveLayers, int, 3); PARAMETER(Feature2D, SIFT_nOctaveLayers, int, 3);
PARAMETER(Detector_Descriptor, SIFT_contrastThreshold, double, 0.04); PARAMETER(Feature2D, SIFT_contrastThreshold, double, 0.04);
PARAMETER(Detector_Descriptor, SIFT_edgeThreshold, double, 10); PARAMETER(Feature2D, SIFT_edgeThreshold, double, 10);
PARAMETER(Detector_Descriptor, SIFT_sigma, double, 1.6); PARAMETER(Feature2D, SIFT_sigma, double, 1.6);
PARAMETER(Detector_Descriptor, Star_maxSize, int, 45); PARAMETER(Feature2D, Star_maxSize, int, 45);
PARAMETER(Detector_Descriptor, Star_responseThreshold, int, 30); PARAMETER(Feature2D, Star_responseThreshold, int, 30);
PARAMETER(Detector_Descriptor, Star_lineThresholdProjected, int, 10); PARAMETER(Feature2D, Star_lineThresholdProjected, int, 10);
PARAMETER(Detector_Descriptor, Star_lineThresholdBinarized, int, 8); PARAMETER(Feature2D, Star_lineThresholdBinarized, int, 8);
PARAMETER(Detector_Descriptor, Star_suppressNonmaxSize, int, 5); PARAMETER(Feature2D, Star_suppressNonmaxSize, int, 5);
PARAMETER(Detector_Descriptor, SURF_hessianThreshold, double, 600.0); PARAMETER(Feature2D, SURF_hessianThreshold, double, 600.0);
PARAMETER(Detector_Descriptor, SURF_nOctaves, int, 4); PARAMETER(Feature2D, SURF_nOctaves, int, 4);
PARAMETER(Detector_Descriptor, SURF_nOctaveLayers, int, 2); PARAMETER(Feature2D, SURF_nOctaveLayers, int, 2);
PARAMETER(Detector_Descriptor, SURF_extended, bool, true); PARAMETER(Feature2D, SURF_extended, bool, true);
PARAMETER(Detector_Descriptor, SURF_upright, bool, false); PARAMETER(Feature2D, SURF_upright, bool, false);
PARAMETER(Feature2D, BRISK_thresh, int, 30);
PARAMETER(Feature2D, BRISK_octaves, int, 3);
PARAMETER(Feature2D, BRISK_patternScale, float, 1.0f);
PARAMETER(Feature2D, FREAK_orientationNormalized, bool, true);
PARAMETER(Feature2D, FREAK_scaleNormalized, bool, true);
PARAMETER(Feature2D, FREAK_patternScale, float, 22.0f);
PARAMETER(Feature2D, FREAK_nOctaves, int, 4);
PARAMETER(NearestNeighbor, 1Strategy, QString, "1:Linear;KDTree;KMeans;Composite;Autotuned;Lsh"); PARAMETER(NearestNeighbor, 1Strategy, QString, "1:Linear;KDTree;KMeans;Composite;Autotuned;Lsh");
PARAMETER(NearestNeighbor, 2Distance_type, QString, "0:EUCLIDEAN_L2;MANHATTAN_L1;MINKOWSKI;MAX;HIST_INTERSECT;HELLINGER;CHI_SQUARE_CS;KULLBACK_LEIBLER_KL"); PARAMETER(NearestNeighbor, 2Distance_type, QString, "0:EUCLIDEAN_L2;MANHATTAN_L1;MINKOWSKI;MAX;HIST_INTERSECT;HELLINGER;CHI_SQUARE_CS;KULLBACK_LEIBLER_KL;HAMMING");
PARAMETER(NearestNeighbor, 3nndrRatioUsed, bool, true); PARAMETER(NearestNeighbor, 3nndrRatioUsed, bool, true);
PARAMETER(NearestNeighbor, 4nndrRatio, float, 0.8f); PARAMETER(NearestNeighbor, 4nndrRatio, float, 0.8f);
PARAMETER(NearestNeighbor, 5minDistanceUsed, bool, false); PARAMETER(NearestNeighbor, 5minDistanceUsed, bool, false);