+struct CvFeatureTree;
+
+
+extern "C" struct CvFeatureTree* cvCreateKDTree(CvMat* desc);
+
+
+extern "C" struct CvFeatureTree* cvCreateSpillTree( const CvMat* raw_data,
+ const int naive = 50,
+ const double rho = .7,
+ const double tau = .1 );
+
+
+extern "C" void cvReleaseFeatureTree(struct CvFeatureTree* tr);
+
+
+
+extern "C" void cvFindFeatures(struct CvFeatureTree* tr, const CvMat* query_points,
+ CvMat* indices, CvMat* dist, int k, int emax = 20);
+
+
+
+extern "C" int cvFindFeaturesBoxed(struct CvFeatureTree* tr,
+ CvMat* bounds_min, CvMat* bounds_max,
+ CvMat* out_indices);
+
+
+struct CvLSH;
+struct CvLSHOperations;
+
+
+
+extern "C" struct CvLSH* cvCreateLSH(struct CvLSHOperations* ops, int d,
+ int L = 10, int k = 10,
+ int type = (((6) & ((1 << 3) - 1)) + (((1)-1) << 3)), double r = 4,
+ int64 seed = -1);
+
+
+extern "C" struct CvLSH* cvCreateMemoryLSH(int d, int n, int L = 10, int k = 10,
+ int type = (((6) & ((1 << 3) - 1)) + (((1)-1) << 3)), double r = 4,
+ int64 seed = -1);
+
+
+extern "C" void cvReleaseLSH(struct CvLSH** lsh);
+
+
+extern "C" unsigned int LSHSize(struct CvLSH* lsh);
+
+
+extern "C" void cvLSHAdd(struct CvLSH* lsh, const CvMat* data, CvMat* indices = 0);
+
+
+extern "C" void cvLSHRemove(struct CvLSH* lsh, const CvMat* indices);
+
+
+
+extern "C" void cvLSHQuery(struct CvLSH* lsh, const CvMat* query_points,
+ CvMat* indices, CvMat* dist, int k, int emax);
+
+
+typedef struct CvSURFPoint
+{
+ CvPoint2D32f pt;
+ int laplacian;
+ int size;
+ float dir;
+ float hessian;
+} CvSURFPoint;
+
+inline CvSURFPoint cvSURFPoint( CvPoint2D32f pt, int laplacian,
+ int size, float dir = 0,
+ float hessian = 0)
+{
+ CvSURFPoint kp;
+ kp.pt = pt;
+ kp.laplacian = laplacian;
+ kp.size = size;
+ kp.dir = dir;
+ kp.hessian = hessian;
+ return kp;
+}
+
+typedef struct CvSURFParams
+{
+ int extended;
+ double hessianThreshold;
+
+ int nOctaves;
+ int nOctaveLayers;
+}
+CvSURFParams;
+
+extern "C" CvSURFParams cvSURFParams( double hessianThreshold, int extended = 0 );
+
+
+
+extern "C" void cvExtractSURF( const CvArr* img, const CvArr* mask,
+ CvSeq** keypoints, CvSeq** descriptors,
+ CvMemStorage* storage, CvSURFParams params, int useProvidedKeyPts = 0 );
+
+typedef struct CvMSERParams
+{
+
+ int delta;
+
+ int maxArea;
+ int minArea;
+
+ float maxVariation;
+
+ float minDiversity;
+
+
+ int maxEvolution;
+
+ double areaThreshold;
+
+ double minMargin;
+
+ int edgeBlurSize;
+}
+CvMSERParams;
+
+extern "C" CvMSERParams cvMSERParams( int delta = 5, int min_area = 60,
+ int max_area = 14400, float max_variation = .25f,
+ float min_diversity = .2f, int max_evolution = 200,
+ double area_threshold = 1.01,
+ double min_margin = .003,
+ int edge_blur_size = 5 );
+
+
+extern "C" void cvExtractMSER( CvArr* _img, CvArr* _mask, CvSeq** contours, CvMemStorage* storage, CvMSERParams params );
+
+
+typedef struct CvStarKeypoint
+{
+ CvPoint pt;
+ int size;
+ float response;
+}
+CvStarKeypoint;
+
+inline CvStarKeypoint cvStarKeypoint(CvPoint pt, int size, float response)
+{
+ CvStarKeypoint kpt;
+ kpt.pt = pt;
+ kpt.size = size;
+ kpt.response = response;
+ return kpt;
+}
+
+typedef struct CvStarDetectorParams
+{
+ int maxSize;
+ int responseThreshold;
+ int lineThresholdProjected;
+ int lineThresholdBinarized;
+ int suppressNonmaxSize;
+}
+CvStarDetectorParams;
+
+inline CvStarDetectorParams cvStarDetectorParams(
+ int maxSize = 45,
+ int responseThreshold = 30,
+ int lineThresholdProjected = 10,
+ int lineThresholdBinarized = 8,
+ int suppressNonmaxSize = 5)
+{
+ CvStarDetectorParams params;
+ params.maxSize = maxSize;
+ params.responseThreshold = responseThreshold;
+ params.lineThresholdProjected = lineThresholdProjected;
+ params.lineThresholdBinarized = lineThresholdBinarized;
+ params.suppressNonmaxSize = suppressNonmaxSize;
+
+ return params;
+}
+
+extern "C" CvSeq* cvGetStarKeypoints( const CvArr* img, CvMemStorage* storage,
+ CvStarDetectorParams params = cvStarDetectorParams());
+
+
+