Test accuracy for PR#3829.Fix warning on gcc, comment out INIT_RANDOM_SEED for same...
authorippei ito <github@mysrv.link>
Tue, 24 Mar 2015 20:16:30 +0000 (05:16 +0900)
committerippei ito <github@mysrv.link>
Tue, 24 Mar 2015 20:28:29 +0000 (05:28 +0900)
modules/features2d/test/test_lshindex_flannbased_matcher.cpp

index 64616b2..2359513 100644 (file)
@@ -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();
 }