Update to 2.0.0 tree from current Fremantle build
[opencv] / tests / swig_python / feature_tree_tests.py
diff --git a/tests/swig_python/feature_tree_tests.py b/tests/swig_python/feature_tree_tests.py
new file mode 100755 (executable)
index 0000000..c6a16d7
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+
+# 2009-01-16, Xavier Delacour <xavier.delacour@gmail.com>
+
+import unittest
+from numpy import *;
+from numpy.linalg import *;
+import sys;
+import cvtestutils
+from cv import *;
+from adaptors import *;
+
+def planted_neighbors(query_points, R = .4):
+    n,d = query_points.shape
+    data = zeros(query_points.shape)
+    for i in range(0,n):
+        a = random.rand(d)
+        a = random.rand()*R*a/sqrt(sum(a**2))
+        data[i] = query_points[i] + a
+    return data
+
+class feature_tree_test(unittest.TestCase):
+
+    def test_kdtree_basic(self):
+        n = 1000;
+        d = 64;
+        query_points = random.rand(n,d)*2-1;
+        data = planted_neighbors(query_points)
+
+        tr = cvCreateKDTree(data);
+        indices,dist = cvFindFeatures(tr, query_points, 1, 100);
+
+        correct = sum([i == j for j,i in enumerate(indices)])
+        assert(correct >= n * .75);
+
+    def test_spilltree_basic(self):
+        n = 1000;
+        d = 64;
+        query_points = random.rand(n,d)*2-1;
+        data = planted_neighbors(query_points)
+
+        tr = cvCreateSpillTree(data);
+        indices,dist = cvFindFeatures(tr, query_points, 1, 100);
+
+        correct = sum([i == j for j,i in enumerate(indices)])
+        assert(correct >= n * .75);
+
+def suite():
+    return unittest.TestLoader().loadTestsFromTestCase(feature_tree_test)
+
+if __name__ == '__main__':
+    suite = suite()
+    unittest.TextTestRunner(verbosity=2).run(suite)
+