summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc')
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc87
1 files changed, 87 insertions, 0 deletions
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc
new file mode 100755
index 0000000..1a2b15d
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc
@@ -0,0 +1,87 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15#ifndef MAX_LEVEL
16# define MAX_LEVEL 5
17#endif
18// TODO: add number of corners parameter
19void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
20 // usage: [newFeaturePnt validFlag ] =
21 // calcOptFlowLKPyrWInitMex2(Ipyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter, initFPnt)
22 // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell.
23 // featurePnt 2xn int
24 // winSize c_level int
25 // c_xx c_xy c_yy: image size double*
26 // image must be double
27
28
29 const mxArray* imgArray;
30 int* imdims;
31 const int *curImgDims;
32 const int *nFeatures;
33 double *iP[MAX_LEVEL], *jP[MAX_LEVEL];
34 double *fPnt, *newFPnt, *initFPnt;
35 char* valid;
36 double accuracy_th;
37 int winSize, max_iter;
38 const int *cellDims = mxGetDimensions(prhs[0]);
39
40 accuracy_th=(double)mxGetScalar(prhs[4]);
41 max_iter=(int)mxGetScalar(prhs[5]);
42 initFPnt=(double*)mxGetPr(prhs[6]);
43
44 winSize = (int)mxGetScalar(prhs[3]);
45 fPnt=(double*)mxGetPr(prhs[2]);
46 nFeatures=mxGetDimensions(prhs[2]);
47
48 imdims=(int*)malloc(sizeof(int)*cellDims[0]*2);
49
50 for(int i=0; i<cellDims[0]; i++){
51 //imgArray=mxGetCell(prhs[0],i);
52 //curImgDims = mxGetDimensions(imgArray);
53 curImgDims = mxGetDimensions(mxGetCell(prhs[0],i));
54 imdims[i*2+0]= curImgDims[0];
55 imdims[i*2+1]= curImgDims[1];
56 //imdims[i][1] = curImgDims[1];
57
58 iP[i]= (double*)mxGetPr(mxGetCell(prhs[0],i));
59 jP[i]= (double*)mxGetPr(mxGetCell(prhs[1],i));
60 }
61
62 plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxDOUBLE_CLASS, mxREAL);
63 plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxUINT8_CLASS, mxREAL);
64
65 newFPnt = (double*)mxGetPr(plhs[0]);
66 valid = (char*)mxGetPr(plhs[1]);
67
68 //idx convert from matlab to c
69 for(int i=0; i<nFeatures[1]; i++){
70 fPnt[i*2]=fPnt[i*2]-1;
71 fPnt[i*2+1]=fPnt[i*2+1]-1;
72 initFPnt[i*2]=initFPnt[i*2]-1;
73 initFPnt[i*2+1]=initFPnt[i*2+1]-1;
74 valid[i]=1;
75 }
76 calcPyrLKTrackWInit( iP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize,
77 newFPnt, initFPnt, valid, accuracy_th, max_iter);
78 //idx convert from matlab to c
79 for(int i=0; i<nFeatures[1]*2; i++){
80 fPnt[i]=fPnt[i]+1;
81 initFPnt[i]=initFPnt[i]+1;
82 newFPnt[i]=newFPnt[i]+1;
83 }
84 free(imdims);
85 //free(iP);
86 //free(jP);
87}