1 // 2009-01-14, Xavier Delacour <xavier.delacour@gmail.com>
9 class CV_SpilltreeTest : public CvTest {
14 virtual void run( int start_from );
17 CV_SpilltreeTest::CV_SpilltreeTest()
18 : CvTest( "spill-tree", "cvFindFeatures-spill" ) {
21 CV_SpilltreeTest::~CV_SpilltreeTest() {
25 void CV_SpilltreeTest::run( int /*start_from*/ )
29 int k = 1; // * should also test 2nd nn etc.?
34 // CvRNG rng = cvRNG();
35 // CvMat* desc = cvCreateMat(features, dims, CV_64FC1);
36 // cvRandArr( &rng, desc, CV_RAND_UNI, cvRealScalar(0), cvRealScalar(1));
37 CvRNG rng = cvRNG(0xffffffff);
38 CvMat* desc = cvCreateMat( features, dims, CV_64FC1 );
39 cvRandArr( &rng, desc, CV_RAND_UNI, cvRealScalar(-100), cvRealScalar(100) );
41 CvFeatureTree* tr = cvCreateSpillTree( desc, 50, .7, .2 );
42 CvMat* results = cvCreateMat(points, k, CV_32SC1);
43 CvMat* dist = cvCreateMat(points, k, CV_64FC1);
45 CvMat* pts = cvCreateMat(points, dims, CV_64FC1);
46 std::vector<int> fmap(points);
47 for (int j = 0; j < points; ++j) {
48 int fi = cvRandInt(&rng) % features;
50 double* f = (double*)cvPtr2D(desc, fi, 0);
51 double* p = (double*)cvPtr2D(pts, j, 0);
52 for (int k = 0; k < dims; ++ k)
53 p[k] = f[k] + cvRandReal(&rng) * noise;
56 cvFindFeatures(tr, pts, results, dist, k, emax);
58 int correct_matches = 0;
59 { // Aisle "j" to avoid error on MSVC6
60 for (int j = 0; j < points; ++j) {
61 int fi = (int)cvGetReal2D(results, j, 0);
67 double correct_perc = correct_matches / (double)points;
68 std::cout << "correct_perc = " << correct_perc << std::endl;
69 if (correct_perc < .8)
70 ts->set_failed_test_info(CvTS::FAIL_INVALID_OUTPUT);
72 cvReleaseFeatureTree(tr);
76 CV_SpilltreeTest spilltree_test;