1 // 2009-01-14, Xavier Delacour <xavier.delacour@gmail.com>
5 // * add test for cvFindFeaturesBoxed
11 class CV_KdtreeTest : public CvTest {
16 virtual void run( int start_from );
19 CV_KdtreeTest::CV_KdtreeTest()
20 : CvTest( "kd-tree", "cvFindFeatures-kd" ) {
23 CV_KdtreeTest::~CV_KdtreeTest() {
27 void CV_KdtreeTest::run( int /*start_from*/ ) {
30 int k = 1; // * should also test 2nd nn etc.?
36 CvMat* desc = cvCreateMat(features, dims, CV_64FC1);
37 cvRandArr( &rng, desc, CV_RAND_UNI, cvRealScalar(0), cvRealScalar(1));
39 CvFeatureTree* tr = cvCreateKDTree(desc);
40 CvMat* results = cvCreateMat(points, k, CV_32SC1);
41 CvMat* dist = cvCreateMat(points, k, CV_64FC1);
43 CvMat* pts = cvCreateMat(points, dims, CV_64FC1);
44 std::vector<int> fmap(points);
45 for (int j = 0; j < points; ++j) {
46 int fi = cvRandInt(&rng) % features;
48 double* f = (double*)cvPtr2D(desc, fi, 0);
49 double* p = (double*)cvPtr2D(pts, j, 0);
50 for (int k = 0; k < dims; ++ k)
51 p[k] = f[k] + cvRandReal(&rng) * noise;
54 cvFindFeatures(tr, pts, results, dist, k, emax);
56 int correct_matches = 0;
57 { // Aisle "j" to avoid error on MSVC6
58 for (int j = 0; j < points; ++j) {
59 int fi = (int)cvGetReal2D(results, j, 0);
65 double correct_perc = correct_matches / (double)points;
66 ts->printf( CvTS::LOG, "correct_perc = %d\n", correct_perc );
67 if (correct_perc < .8)
68 ts->set_failed_test_info(CvTS::FAIL_INVALID_OUTPUT);
70 cvReleaseFeatureTree(tr);
74 CV_KdtreeTest kdtree_test;