summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc')
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc91
1 files changed, 91 insertions, 0 deletions
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc
new file mode 100755
index 0000000..b9c3289
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc
@@ -0,0 +1,91 @@
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, IdxPyr, IdyPyr, 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], *iDxP[MAX_LEVEL], *iDyP[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[6]);
41 max_iter=(int)mxGetScalar(prhs[7]);
42 initFPnt=(double*)mxGetPr(prhs[8]);
43
44 winSize = (int)mxGetScalar(prhs[5]);
45 fPnt=(double*)mxGetPr(prhs[4]);
46 nFeatures=mxGetDimensions(prhs[4]);
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 iDxP[i]= (double*)mxGetPr(mxGetCell(prhs[1],i));
60 iDyP[i]= (double*)mxGetPr(mxGetCell(prhs[2],i));
61 jP[i]= (double*)mxGetPr(mxGetCell(prhs[3],i));
62 }
63
64 plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxDOUBLE_CLASS, mxREAL);
65 plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxUINT8_CLASS, mxREAL);
66
67 newFPnt = (double*)mxGetPr(plhs[0]);
68 valid = (char*)mxGetPr(plhs[1]);
69
70 //idx convert from matlab to c
71 for(int i=0; i<nFeatures[1]; i++){
72 fPnt[i*2]=fPnt[i*2]-1;
73 fPnt[i*2+1]=fPnt[i*2+1]-1;
74 initFPnt[i*2]=initFPnt[i*2]-1;
75 initFPnt[i*2+1]=initFPnt[i*2+1]-1;
76 valid[i]=1;
77 }
78 calcPyrLKTrackWInit( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize,
79 newFPnt, initFPnt, valid, accuracy_th, max_iter);
80 //idx convert from matlab to c
81 for(int i=0; i<nFeatures[1]*2; i++){
82 fPnt[i]=fPnt[i]+1;
83 initFPnt[i]=initFPnt[i]+1;
84 newFPnt[i]=newFPnt[i]+1;
85 }
86 free(imdims);
87 //free(iP);
88 //free(iDxP);
89 //free(iDyP);
90 //free(jP);
91}