Test accuracy for PR#3829.Fix warning on gcc, comment out INIT_RANDOM_SEED for same result each ran.
This commit is contained in:
parent
56cae1b293
commit
d1902a1276
@ -50,7 +50,7 @@
|
||||
#include <time.h> // for time()
|
||||
|
||||
// If defined, the match time and accuracy of the match results are a little different, each time the code ran.
|
||||
#define INIT_RANDOM_SEED
|
||||
//#define INIT_RANDOM_SEED
|
||||
|
||||
// If defined, some outlier images descriptors add() the matcher.
|
||||
#define TRAIN_WITH_OUTLIER_IMAGES
|
||||
@ -184,14 +184,14 @@ TrainInfo transImgAndTrain(
|
||||
const string &matchername,
|
||||
const Mat& imgQuery, const vector<KeyPoint>& query_kp, const Mat& query_desc,
|
||||
const vector<Mat>& imgOutliers, const vector<vector<KeyPoint> >& outliers_kp, const vector<Mat>& outliers_desc, const int totalOutlierDescCnt,
|
||||
const float t, const testparam &tp,
|
||||
const float t, const testparam *tp,
|
||||
const int testno, const bool bVerboseOutput, const bool bSaveDrawMatches)
|
||||
{
|
||||
TrainInfo ti;
|
||||
|
||||
// transform query image
|
||||
Mat imgTransform;
|
||||
(tp.transfunc)(t, imgQuery, imgTransform);
|
||||
(tp->transfunc)(t, imgQuery, imgTransform);
|
||||
|
||||
// extract kp and compute desc from transformed query image
|
||||
vector<KeyPoint> trans_query_kp;
|
||||
@ -253,7 +253,7 @@ TrainInfo transImgAndTrain(
|
||||
// draw status
|
||||
sprintf(buff, "%s accuracy:%-3.2f%% %d descriptors training time:%-3.2fms matching :%-3.2fms", matchername.c_str(), ti.accuracy, ti.traindesccnt, ti.traintime, ti.matchtime);
|
||||
putText(imgResult, buff, Point(0, 12), FONT_HERSHEY_PLAIN, 0.8, Scalar(0., 0., 255.));
|
||||
sprintf(buff, "%s/res%03d_%s_%s%.1f_inlier.png", resultDir, testno, matchername.c_str(), tp.transname.c_str(), t);
|
||||
sprintf(buff, "%s/res%03d_%s_%s%.1f_inlier.png", resultDir, testno, matchername.c_str(), tp->transname.c_str(), t);
|
||||
if (bSaveDrawMatches && !imwrite(buff, imgResult)) cout << "Image " << buff << " can not be saved (may be because directory " << resultDir << " does not exist)." << endl;
|
||||
|
||||
#if defined(TRAIN_WITH_OUTLIER_IMAGES)
|
||||
@ -264,13 +264,13 @@ TrainInfo transImgAndTrain(
|
||||
drawMatches(imgQuery, query_kp, imgOutliers[i], outliers_kp[i], match, imgResult, Scalar::all(-1), Scalar::all(128), mask);// , DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
|
||||
sprintf(buff, "query_num:%d train_num:%d matched:%d %d descriptors training time:%-3.2fms matching :%-3.2fms", (int)query_kp.size(), (int)outliers_kp[i].size(), matchcnt, ti.traindesccnt, ti.traintime, ti.matchtime);
|
||||
putText(imgResult, buff, Point(0, 12), FONT_HERSHEY_PLAIN, 0.8, Scalar(0., 0., 255.));
|
||||
sprintf(buff, "%s/res%03d_%s_%s%.1f_outlier%02d.png", resultDir, testno, matchername.c_str(), tp.transname.c_str(), t, i);
|
||||
sprintf(buff, "%s/res%03d_%s_%s%.1f_outlier%02d.png", resultDir, testno, matchername.c_str(), tp->transname.c_str(), t, i);
|
||||
if (bSaveDrawMatches && !imwrite(buff, imgResult)) cout << "Image " << buff << " can not be saved (may be because directory " << resultDir << " does not exist)." << endl;
|
||||
}
|
||||
#endif
|
||||
if (bVerboseOutput)
|
||||
{
|
||||
cout << tp.transname <<" image matching accuracy:" << ti.accuracy << "% " << ti.traindesccnt << " train:" << ti.traintime << "ms match:" << ti.matchtime << "ms" << endl;
|
||||
cout << tp->transname <<" image matching accuracy:" << ti.accuracy << "% " << ti.traindesccnt << " train:" << ti.traintime << "ms match:" << ti.matchtime << "ms" << endl;
|
||||
}
|
||||
|
||||
return ti;
|
||||
@ -283,9 +283,9 @@ class CV_FeatureDetectorMatcherBaseTest : public cvtest::BaseTest
|
||||
{
|
||||
private:
|
||||
|
||||
Ptr<DescriptorMatcher> bfmatcher; // brute force matcher for accuracy of reference
|
||||
Ptr<DescriptorMatcher> flmatcher; // flann matcher to test
|
||||
Ptr<Feature2D> fe; // feature detector extractor
|
||||
DescriptorMatcher* bfmatcher; // brute force matcher for accuracy of reference
|
||||
DescriptorMatcher* flmatcher; // flann matcher to test
|
||||
Feature2D* fe; // feature detector extractor
|
||||
Mat imgQuery; // query image
|
||||
vector<Mat> imgOutliers; // outlier image
|
||||
vector<KeyPoint> query_kp; // query key points detect from imgQuery
|
||||
@ -295,7 +295,7 @@ private:
|
||||
int totalOutlierDescCnt;
|
||||
|
||||
string flmatchername;
|
||||
testparam tp;
|
||||
testparam *tp;
|
||||
double target_accuracy_margin_from_bfmatcher;
|
||||
|
||||
public:
|
||||
@ -303,7 +303,7 @@ public:
|
||||
//
|
||||
// constructor
|
||||
//
|
||||
CV_FeatureDetectorMatcherBaseTest(testparam _tp, double _accuracy_margin, Ptr<Feature2D> _fe, DescriptorMatcher *_flmatcher, string _flmatchername, int norm_type_for_bfmatcher) :
|
||||
CV_FeatureDetectorMatcherBaseTest(testparam* _tp, double _accuracy_margin, Feature2D* _fe, DescriptorMatcher *_flmatcher, string _flmatchername, int norm_type_for_bfmatcher) :
|
||||
tp(_tp),
|
||||
fe(_fe),
|
||||
flmatcher(_flmatcher),
|
||||
@ -315,7 +315,7 @@ public:
|
||||
srand((unsigned int)time(0));
|
||||
#endif
|
||||
// create brute force matcher for accuracy of reference
|
||||
bfmatcher = makePtr<BFMatcher>(norm_type_for_bfmatcher);
|
||||
bfmatcher = new BFMatcher(norm_type_for_bfmatcher);
|
||||
}
|
||||
|
||||
//
|
||||
@ -372,7 +372,7 @@ public:
|
||||
double totalMatchTime = 0.;
|
||||
double totalAccuracy = 0.;
|
||||
int cnt = 0;
|
||||
for (float t = tp.from; t <= tp.to; t += tp.step, ++testno_for_make_filename, ++cnt)
|
||||
for (float t = tp->from; t <= tp->to; t += tp->step, ++testno_for_make_filename, ++cnt)
|
||||
{
|
||||
if (SHOW_DEBUG_LOG) cout << "Test No." << testno_for_make_filename << " BFMatcher " << t;
|
||||
|
||||
@ -398,7 +398,7 @@ public:
|
||||
totalMatchTime = 0.;
|
||||
totalAccuracy = 0.;
|
||||
cnt = 0;
|
||||
for (float t = tp.from; t <= tp.to; t += tp.step, ++testno_for_make_filename, ++cnt)
|
||||
for (float t = tp->from; t <= tp->to; t += tp->step, ++testno_for_make_filename, ++cnt)
|
||||
{
|
||||
if (SHOW_DEBUG_LOG) cout << "Test No." << testno_for_make_filename << " " << flmatchername << " " << t;
|
||||
|
||||
@ -426,7 +426,7 @@ public:
|
||||
// compare accuracies between the brute force matcher and the test target matcher
|
||||
if (average_accuracy < target_average_accuracy)
|
||||
{
|
||||
ts->printf(cvtest::TS::LOG, "Bad average accuracy %f < %f while test %s %s query\n", average_accuracy, target_average_accuracy, flmatchername.c_str(), tp.transname.c_str());
|
||||
ts->printf(cvtest::TS::LOG, "Bad average accuracy %f < %f while test %s %s query\n", average_accuracy, target_average_accuracy, flmatchername.c_str(), tp->transname.c_str());
|
||||
ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY);
|
||||
}
|
||||
return;
|
||||
@ -459,57 +459,75 @@ static void blur(float k, const Mat& src, Mat& dst)
|
||||
|
||||
TEST(BlurredQueryFlannBasedLshShortKeyMatcherAdditionalTrainTest, accuracy)
|
||||
{
|
||||
Ptr<Feature2D> fe = OrbCreate;
|
||||
Ptr<FlannBasedMatcher> fl = makePtr<FlannBasedMatcher>(makePtr<flann::LshIndexParams>(1, 16, 2));
|
||||
testparam tp("blurred", blur, 1.0f, 11.0f, 2.0f);
|
||||
CV_FeatureDetectorMatcherBaseTest test(tp, SHORT_LSH_KEY_ACCURACY_MARGIN, OrbCreate, new FlannBasedMatcher(makePtr<flann::LshIndexParams>(1, 16, 2)), "FlannLsh(1, 16, 2)", NORM_HAMMING);
|
||||
CV_FeatureDetectorMatcherBaseTest test(&tp, SHORT_LSH_KEY_ACCURACY_MARGIN, fe, fl, "FlannLsh(1, 16, 2)", NORM_HAMMING);
|
||||
test.safe_run();
|
||||
}
|
||||
TEST(BlurredQueryFlannBasedLshMiddleKeyMatcherAdditionalTrainTest, accuracy)
|
||||
{
|
||||
Ptr<Feature2D> fe = OrbCreate;
|
||||
Ptr<FlannBasedMatcher> fl = makePtr<FlannBasedMatcher>(makePtr<flann::LshIndexParams>(1, 24, 2));
|
||||
testparam tp("blurred", blur, 1.0f, 11.0f, 2.0f);
|
||||
CV_FeatureDetectorMatcherBaseTest test(tp, MIDDLE_LSH_KEY_ACCURACY_MARGIN, OrbCreate, new FlannBasedMatcher(makePtr<flann::LshIndexParams>(1, 24, 2)), "FlannLsh(1, 24, 2)", NORM_HAMMING);
|
||||
CV_FeatureDetectorMatcherBaseTest test(&tp, MIDDLE_LSH_KEY_ACCURACY_MARGIN, fe, fl, "FlannLsh(1, 24, 2)", NORM_HAMMING);
|
||||
test.safe_run();
|
||||
}
|
||||
TEST(BlurredQueryFlannBasedLshLongKeyMatcherAdditionalTrainTest, accuracy)
|
||||
{
|
||||
Ptr<Feature2D> fe = OrbCreate;
|
||||
Ptr<FlannBasedMatcher> fl = makePtr<FlannBasedMatcher>(makePtr<flann::LshIndexParams>(1, 31, 2));
|
||||
testparam tp("blurred", blur, 1.0f, 11.0f, 2.0f);
|
||||
CV_FeatureDetectorMatcherBaseTest test(tp, LONG_LSH_KEY_ACCURACY_MARGIN, OrbCreate, new FlannBasedMatcher(makePtr<flann::LshIndexParams>(1, 31, 2)), "FlannLsh(1, 31, 2)", NORM_HAMMING);
|
||||
CV_FeatureDetectorMatcherBaseTest test(&tp, LONG_LSH_KEY_ACCURACY_MARGIN, fe, fl, "FlannLsh(1, 31, 2)", NORM_HAMMING);
|
||||
test.safe_run();
|
||||
}
|
||||
|
||||
TEST(ScaledQueryFlannBasedLshShortKeyMatcherAdditionalTrainTest, accuracy)
|
||||
{
|
||||
Ptr<Feature2D> fe = OrbCreate;
|
||||
Ptr<FlannBasedMatcher> fl = makePtr<FlannBasedMatcher>(makePtr<flann::LshIndexParams>(1, 16, 2));
|
||||
testparam tp("scaled", scale, 0.5f, 1.5f, 0.1f);
|
||||
CV_FeatureDetectorMatcherBaseTest test(tp, SHORT_LSH_KEY_ACCURACY_MARGIN, OrbCreate, new FlannBasedMatcher(makePtr<flann::LshIndexParams>(1, 16, 2)), "FlannLsh(1, 16, 2)", NORM_HAMMING);
|
||||
CV_FeatureDetectorMatcherBaseTest test(&tp, SHORT_LSH_KEY_ACCURACY_MARGIN, fe, fl, "FlannLsh(1, 16, 2)", NORM_HAMMING);
|
||||
test.safe_run();
|
||||
}
|
||||
TEST(ScaledQueryFlannBasedLshMiddleKeyMatcherAdditionalTrainTest, accuracy)
|
||||
{
|
||||
Ptr<Feature2D> fe = OrbCreate;
|
||||
Ptr<FlannBasedMatcher> fl = makePtr<FlannBasedMatcher>(makePtr<flann::LshIndexParams>(1, 24, 2));
|
||||
testparam tp("scaled", scale, 0.5f, 1.5f, 0.1f);
|
||||
CV_FeatureDetectorMatcherBaseTest test(tp, MIDDLE_LSH_KEY_ACCURACY_MARGIN, OrbCreate, new FlannBasedMatcher(makePtr<flann::LshIndexParams>(1, 24, 2)), "FlannLsh(1, 24, 2)", NORM_HAMMING);
|
||||
CV_FeatureDetectorMatcherBaseTest test(&tp, MIDDLE_LSH_KEY_ACCURACY_MARGIN, fe, fl, "FlannLsh(1, 24, 2)", NORM_HAMMING);
|
||||
test.safe_run();
|
||||
}
|
||||
TEST(ScaledQueryFlannBasedLshLongKeyMatcherAdditionalTrainTest, accuracy)
|
||||
{
|
||||
Ptr<Feature2D> fe = OrbCreate;
|
||||
Ptr<FlannBasedMatcher> fl = makePtr<FlannBasedMatcher>(makePtr<flann::LshIndexParams>(1, 31, 2));
|
||||
testparam tp("scaled", scale, 0.5f, 1.5f, 0.1f);
|
||||
CV_FeatureDetectorMatcherBaseTest test(tp, LONG_LSH_KEY_ACCURACY_MARGIN, OrbCreate, new FlannBasedMatcher(makePtr<flann::LshIndexParams>(1, 31, 2)), "FlannLsh(1, 31, 2)", NORM_HAMMING);
|
||||
CV_FeatureDetectorMatcherBaseTest test(&tp, LONG_LSH_KEY_ACCURACY_MARGIN, fe, fl, "FlannLsh(1, 31, 2)", NORM_HAMMING);
|
||||
test.safe_run();
|
||||
}
|
||||
|
||||
TEST(RotatedQueryFlannBasedLshShortKeyMatcherAdditionalTrainTest, accuracy)
|
||||
{
|
||||
Ptr<Feature2D> fe = OrbCreate;
|
||||
Ptr<FlannBasedMatcher> fl = makePtr<FlannBasedMatcher>(makePtr<flann::LshIndexParams>(1, 16, 2));
|
||||
testparam tp("rotated", rotate, 0.0f, 359.0f, 30.0f);
|
||||
CV_FeatureDetectorMatcherBaseTest test(tp, SHORT_LSH_KEY_ACCURACY_MARGIN, OrbCreate, new FlannBasedMatcher(makePtr<flann::LshIndexParams>(1, 16, 2)), "FlannLsh(1, 16, 2)", NORM_HAMMING);
|
||||
CV_FeatureDetectorMatcherBaseTest test(&tp, SHORT_LSH_KEY_ACCURACY_MARGIN, fe, fl, "FlannLsh(1, 16, 2)", NORM_HAMMING);
|
||||
test.safe_run();
|
||||
}
|
||||
TEST(RotatedQueryFlannBasedLshMiddleKeyMatcherAdditionalTrainTest, accuracy)
|
||||
{
|
||||
Ptr<Feature2D> fe = OrbCreate;
|
||||
Ptr<FlannBasedMatcher> fl = makePtr<FlannBasedMatcher>(makePtr<flann::LshIndexParams>(1, 24, 2));
|
||||
testparam tp("rotated", rotate, 0.0f, 359.0f, 30.0f);
|
||||
CV_FeatureDetectorMatcherBaseTest test(tp, MIDDLE_LSH_KEY_ACCURACY_MARGIN, OrbCreate, new FlannBasedMatcher(makePtr<flann::LshIndexParams>(1, 24, 2)), "FlannLsh(1, 24, 2)", NORM_HAMMING);
|
||||
CV_FeatureDetectorMatcherBaseTest test(&tp, MIDDLE_LSH_KEY_ACCURACY_MARGIN, fe, fl, "FlannLsh(1, 24, 2)", NORM_HAMMING);
|
||||
test.safe_run();
|
||||
}
|
||||
TEST(RotatedQueryFlannBasedLshLongKeyMatcherAdditionalTrainTest, accuracy)
|
||||
{
|
||||
Ptr<Feature2D> fe = OrbCreate;
|
||||
Ptr<FlannBasedMatcher> fl = makePtr<FlannBasedMatcher>(makePtr<flann::LshIndexParams>(1, 31, 2));
|
||||
testparam tp("rotated", rotate, 0.0f, 359.0f, 30.0f);
|
||||
CV_FeatureDetectorMatcherBaseTest test(tp, LONG_LSH_KEY_ACCURACY_MARGIN, OrbCreate, new FlannBasedMatcher(makePtr<flann::LshIndexParams>(1, 31, 2)), "FlannLsh(1, 31, 2)", NORM_HAMMING);
|
||||
CV_FeatureDetectorMatcherBaseTest test(&tp, LONG_LSH_KEY_ACCURACY_MARGIN, fe, fl, "FlannLsh(1, 31, 2)", NORM_HAMMING);
|
||||
test.safe_run();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user