summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc')
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc62
1 files changed, 62 insertions, 0 deletions
diff --git a/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc b/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc
new file mode 100755
index 0000000..376a096
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc
@@ -0,0 +1,62 @@
1
2/* compile with
3 mex goodFeaturesToTrack.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv
4*/
5
6#include "mex.h"
7#include "opencv/cv.h"
8#include "opencv/highgui.h"
9#include <stdio.h>
10#include <math.h>
11
12#define MAX_CORNERS 500
13
14IplImage *eigtemp = NULL, *temp2 = NULL;
15
16// TODO: add number of corners parameter
17void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
18 // usage: [ features numvalid ] =
19 // goodFeaturesToTrack(image, quality, mindist, mask)
20 // image must be single-channel, 8-bit
21 // quality = minimum acceptable ratio of eigenvalues
22 // mindist = minimum distance between corners
23 // mask (optional) = bitmap mask "region of interest" (MUST BE uint8 TYPE!)
24
25 char *image_pr = (char*)mxGetPr(prhs[0]);
26 // int imdims[] = { (int)d_imdims[0], (int)d_imdims[1] };
27 const int *imdims = mxGetDimensions(prhs[0]);
28 double quality = mxGetScalar(prhs[1]);
29 double mindist = mxGetScalar(prhs[2]);
30 bool use_roi = nrhs > 3;
31
32 plhs[0] = mxCreateNumericMatrix(2, MAX_CORNERS, mxSINGLE_CLASS, mxREAL);
33 plhs[1] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
34
35 CvPoint2D32f *corner_coords = (CvPoint2D32f*)mxGetPr(plhs[0]);
36 int *corner_count = (int*)mxGetPr(plhs[1]);
37 *corner_count = MAX_CORNERS;
38
39 if (eigtemp == NULL) {
40 eigtemp = cvCreateImage(cvSize(imdims[0],imdims[1]), IPL_DEPTH_32F, 1);
41 temp2 = cvCreateImage(cvSize(imdims[0],imdims[1]), IPL_DEPTH_32F, 1);
42 }
43
44 IplImage *image =
45 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
46 image->imageData = image_pr;
47
48 IplImage *roimask = NULL;
49 if (use_roi) {
50 roimask = cvCreateImage(cvSize(imdims[0],imdims[1]), IPL_DEPTH_8U, 1);
51 roimask->imageData = (char*)mxGetPr(prhs[3]);
52 }
53
54 cvGoodFeaturesToTrack(image,
55 eigtemp, temp2,
56 corner_coords,
57 corner_count,
58 quality,
59 mindist,
60 roimask
61 );
62}