From f618466c25d43f3bae9e40920273bf77de1e1149 Mon Sep 17 00:00:00 2001 From: leochanj105 Date: Mon, 19 Oct 2020 23:09:30 -0400 Subject: initial sd-vbs initial sd-vbs add sd-vbs sd-vbs --- SD-VBS/common/toolbox/lagrcv/Makefile | 21 + SD-VBS/common/toolbox/lagrcv/README.sxw | Bin 0 -> 5929 bytes SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.cc | 45 + .../toolbox/lagrcv/calcGradientPyrMex.mexa64 | Bin 0 -> 28391 bytes .../toolbox/lagrcv/calcGradientPyrMex.mexglx | Bin 0 -> 23141 bytes SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.cc | 30 + SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexa64 | Bin 0 -> 27799 bytes SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexglx | Bin 0 -> 22665 bytes SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.cc | 85 + .../common/toolbox/lagrcv/calcOptFlowLKMex.mexa64 | Bin 0 -> 28499 bytes .../common/toolbox/lagrcv/calcOptFlowLKMex.mexglx | Bin 0 -> 23321 bytes .../common/toolbox/lagrcv/calcOptFlowLKPyrMex.cc | 99 + .../toolbox/lagrcv/calcOptFlowLKPyrMex.mexa64 | Bin 0 -> 28778 bytes .../toolbox/lagrcv/calcOptFlowLKPyrMex.mexglx | Bin 0 -> 23692 bytes .../common/toolbox/lagrcv/calcOptFlowLKPyrMex2.cc | 99 + .../toolbox/lagrcv/calcOptFlowLKPyrMex2.mexa64 | Bin 0 -> 28811 bytes .../toolbox/lagrcv/calcOptFlowLKPyrMex2.mexglx | Bin 0 -> 23725 bytes .../toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc | 91 + .../toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexa64 | Bin 0 -> 28815 bytes .../toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexglx | Bin 0 -> 23693 bytes .../toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.cc | 91 + .../lagrcv/calcOptFlowLKPyrWInitMex2.mexa64 | Bin 0 -> 28880 bytes .../lagrcv/calcOptFlowLKPyrWInitMex2.mexglx | Bin 0 -> 23726 bytes .../lagrcv/calcOptFlowLKPyrWInitSobelMex.cc | 87 + .../lagrcv/calcOptFlowLKPyrWInitSobelMex.mexa64 | Bin 0 -> 28724 bytes .../lagrcv/calcOptFlowLKPyrWInitSobelMex.mexglx | Bin 0 -> 23558 bytes SD-VBS/common/toolbox/lagrcv/calcOpticalFlowLK.cc | 59 + .../common/toolbox/lagrcv/calcOpticalFlowPyrLK.cc | 77 + .../toolbox/lagrcv/calcOpticalFlowPyrLK.mexglx | Bin 0 -> 6538 bytes SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.cc | 33 + .../common/toolbox/lagrcv/calcResizedImgMex.mexa64 | Bin 0 -> 27842 bytes .../common/toolbox/lagrcv/calcResizedImgMex.mexglx | Bin 0 -> 22704 bytes SD-VBS/common/toolbox/lagrcv/calcSobelMex.cc | 32 + SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexa64 | Bin 0 -> 27837 bytes SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexglx | Bin 0 -> 22699 bytes SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.cc | 44 + .../common/toolbox/lagrcv/calcSobelPyrMex.mexa64 | Bin 0 -> 28388 bytes .../common/toolbox/lagrcv/calcSobelPyrMex.mexglx | Bin 0 -> 23138 bytes .../common/toolbox/lagrcv/calcSubsampleAvgMex.cc | 33 + .../toolbox/lagrcv/calcSubsampleAvgMex.mexa64 | Bin 0 -> 27844 bytes .../toolbox/lagrcv/calcSubsampleAvgMex.mexglx | Bin 0 -> 22706 bytes SD-VBS/common/toolbox/lagrcv/calcTextureMex.cc | 53 + SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexa64 | Bin 0 -> 28273 bytes SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexglx | Bin 0 -> 23171 bytes SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.cc | 54 + .../common/toolbox/lagrcv/calcTexturePyrMex.mexa64 | Bin 0 -> 28392 bytes .../common/toolbox/lagrcv/calcTexturePyrMex.mexglx | Bin 0 -> 23226 bytes SD-VBS/common/toolbox/lagrcv/dummyMex.cc | 58 + SD-VBS/common/toolbox/lagrcv/dummyMex.mexa64 | Bin 0 -> 8245 bytes SD-VBS/common/toolbox/lagrcv/dummyMex.mexglx | Bin 0 -> 6329 bytes SD-VBS/common/toolbox/lagrcv/findCornerSubPix.cc | 39 + .../common/toolbox/lagrcv/goodFeaturesToTrack.cc | 62 + .../toolbox/lagrcv/goodFeaturesToTrack.mexglx | Bin 0 -> 6280 bytes SD-VBS/common/toolbox/lagrcv/lagrcv.cpp | 840 ++++++ SD-VBS/common/toolbox/lagrcv/lagrcv.h | 51 + SD-VBS/common/toolbox/lagrcv/liblagrcv.a | Bin 0 -> 26268 bytes SD-VBS/common/toolbox/lagrcv/lk_flow.cc | 76 + SD-VBS/common/toolbox/lagrcv/lk_flow.mexglx | Bin 0 -> 7224 bytes SD-VBS/common/toolbox/lagrcv/test.cc | 34 + SD-VBS/common/toolbox/lagrcv/test/getPyramid.m | 10 + SD-VBS/common/toolbox/lagrcv/test/img0.ppm | 3137 ++++++++++++++++++++ SD-VBS/common/toolbox/lagrcv/test/img1.ppm | 3100 +++++++++++++++++++ SD-VBS/common/toolbox/lagrcv/test/pathdef.m | 284 ++ SD-VBS/common/toolbox/lagrcv/test/test_lk.m | 74 + SD-VBS/common/toolbox/lagrcv/test/test_lk_disp.m | 49 + SD-VBS/common/toolbox/lagrcv/test/test_lk_opencv.m | 47 + 66 files changed, 8894 insertions(+) create mode 100755 SD-VBS/common/toolbox/lagrcv/Makefile create mode 100755 SD-VBS/common/toolbox/lagrcv/README.sxw create mode 100755 SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOpticalFlowLK.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcSobelMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcTextureMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/dummyMex.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/dummyMex.mexa64 create mode 100755 SD-VBS/common/toolbox/lagrcv/dummyMex.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/findCornerSubPix.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/lagrcv.cpp create mode 100755 SD-VBS/common/toolbox/lagrcv/lagrcv.h create mode 100755 SD-VBS/common/toolbox/lagrcv/liblagrcv.a create mode 100755 SD-VBS/common/toolbox/lagrcv/lk_flow.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/lk_flow.mexglx create mode 100755 SD-VBS/common/toolbox/lagrcv/test.cc create mode 100755 SD-VBS/common/toolbox/lagrcv/test/getPyramid.m create mode 100755 SD-VBS/common/toolbox/lagrcv/test/img0.ppm create mode 100755 SD-VBS/common/toolbox/lagrcv/test/img1.ppm create mode 100755 SD-VBS/common/toolbox/lagrcv/test/pathdef.m create mode 100755 SD-VBS/common/toolbox/lagrcv/test/test_lk.m create mode 100755 SD-VBS/common/toolbox/lagrcv/test/test_lk_disp.m create mode 100755 SD-VBS/common/toolbox/lagrcv/test/test_lk_opencv.m (limited to 'SD-VBS/common/toolbox/lagrcv') diff --git a/SD-VBS/common/toolbox/lagrcv/Makefile b/SD-VBS/common/toolbox/lagrcv/Makefile new file mode 100755 index 0000000..af7e8f5 --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/Makefile @@ -0,0 +1,21 @@ +rm liblagrcv.a +gcc -c -fPIC lagrcv.cpp +ar rc liblagrcv.a lagrcv.o +ranlib liblagrcv.a + +mex -O calcSubsampleAvgMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcSobelMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcImgBlurMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcOptFlowLKMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcResizedImgMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcTextureMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcGradientPyrMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcSobelPyrMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcTexturePyrMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcOptFlowLKPyrMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcOptFlowLKPyrMex2.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcOptFlowLKPyrWInitMex2.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcOptFlowLKPyrWInitMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O calcOptFlowLKPyrWInitSobelMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ +mex -O dummyMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/ + diff --git a/SD-VBS/common/toolbox/lagrcv/README.sxw b/SD-VBS/common/toolbox/lagrcv/README.sxw new file mode 100755 index 0000000..9f20d14 Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/README.sxw differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.cc b/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.cc new file mode 100755 index 0000000..d94130b --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.cc @@ -0,0 +1,45 @@ + +/* compile with +rm liblagrcv.a +gcc -c lagrcv.cpp +ar rc liblagrcv.a lagrcv.o +ranlib liblagrcv.a +mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/ +*/ + +#include "mex.h" +#include "lagrcv.h" +#include +#include + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [dxPye dyPyr] = + // calcGradientPyrMex(imagePyr) + + const int *cellDims = mxGetDimensions(prhs[0]); + double *image; + const mxArray* imgArray; + mxArray *dxArray, *dyArray; + double *dx, *dy; + const int *imdims; + + plhs[0] = mxCreateCellArray(1, cellDims); + plhs[1] = mxCreateCellArray(1, cellDims); + + for(int i=0; i +#include + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [IBlur] = + // calcImgBlurMex(image) + + double *image, *retImg; + const int *imdims; + + image=(double*)mxGetPr(prhs[0]); + imdims = mxGetDimensions(prhs[0]); + + plhs[0] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + retImg=(double*)mxGetPr(plhs[0]); + + calcImgBlur(image, imdims[0], imdims[1], retImg); +} diff --git a/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexa64 new file mode 100755 index 0000000..8f4bfea Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexa64 differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexglx new file mode 100755 index 0000000..ade786d Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexglx differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.cc b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.cc new file mode 100755 index 0000000..e22af8b --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.cc @@ -0,0 +1,85 @@ + +/* compile with +rm liblagrcv.a +gcc -c lagrcv.cpp +ar rc liblagrcv.a lagrcv.o +ranlib liblagrcv.a +mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/ +*/ + +#include "mex.h" +#include "lagrcv.h" +#include +#include + +#ifndef MAX_LEVEL +# define MAX_LEVEL 5 +#endif +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [newFeaturePnt validFlag ] = + // calcOptFlowLKMex(I, Idx, Idy, J, c_xx, c_xy, c_yy, featurePnt, initialPnt, winSize, accuracy_th, max_iter) + // featurePnt 2xn int + // winSize c_level int + // c_xx c_xy c_yy: image size double* + // image must be double + + + const int* imdims; + const int *nFeatures; + double *imgI, *iDx, *iDy, *imgJ, *c_xx, *c_xy, *c_yy; + double *fPnt, *initPnt, *newFPnt; + char* valid; + double accuracy_th; + int winSize, max_iter; + + if (nrhs > 10) { + accuracy_th=(double)mxGetScalar(prhs[10]); + max_iter=(int)mxGetScalar(prhs[11]); + } + + winSize = (int)mxGetScalar(prhs[9]); + initPnt=(double*)mxGetPr(prhs[8]); + fPnt=(double*)mxGetPr(prhs[7]); + c_xx=(double*)mxGetPr(prhs[6]); + c_xy=(double*)mxGetPr(prhs[5]); + c_yy=(double*)mxGetPr(prhs[4]); + imgJ=(double*)mxGetPr(prhs[3]); + iDy=(double*)mxGetPr(prhs[2]); + iDx=(double*)mxGetPr(prhs[1]); + imgI=(double*)mxGetPr(prhs[0]); + nFeatures=mxGetDimensions(prhs[7]); + imdims=mxGetDimensions(prhs[0]); + + plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxDOUBLE_CLASS, mxREAL); + plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxUINT8_CLASS, mxREAL); + + newFPnt = (double*)mxGetPr(plhs[0]); + valid = (char*)mxGetPr(plhs[1]); + + //idx convert from matlab to c + for(int i=0; i10){ + calcLKTrack( imgI, iDx, iDy, imgJ, imdims, + c_xx, c_xy, c_yy, + fPnt, initPnt, nFeatures[1], winSize, + newFPnt, valid, accuracy_th, max_iter); + }else{ + calcLKTrack( imgI, iDx, iDy, imgJ, imdims, + c_xx, c_xy, c_yy, + fPnt, initPnt, nFeatures[1], winSize, + newFPnt, valid); + } + //idx convert from matlab to c + for(int i=0; i +#include + +#ifndef MAX_LEVEL +# define MAX_LEVEL 5 +#endif +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [newFeaturePnt validFlag ] = + // calcOptFlowPyrLKMex(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter) + // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell. + // featurePnt 2xn int + // winSize c_level int + // c_xx c_xy c_yy: image size double* + // image must be double + + + const mxArray* imgArray; + int* imdims; + const int *curImgDims; + const int *nFeatures; + //double **iP, **iDxP, **iDyP, **jP; + double *iP[MAX_LEVEL], *iDxP[MAX_LEVEL], *iDyP[MAX_LEVEL], *jP[MAX_LEVEL]; + double *fPnt, *newFPnt; + char* valid; + double accuracy_th; + int winSize, max_iter; + const int *cellDims = mxGetDimensions(prhs[0]); + + if (nrhs > 6) { + accuracy_th=(double)mxGetScalar(prhs[6]); + max_iter=(int)mxGetScalar(prhs[7]); + } + + winSize = (int)mxGetScalar(prhs[5]); + fPnt=(double*)mxGetPr(prhs[4]); + nFeatures=mxGetDimensions(prhs[4]); + + imdims=(int*)malloc(sizeof(int)*cellDims[0]*2); + //iP=(double**)malloc(sizeof(double*)*cellDims[0]); + //iDxP=(double**)malloc(sizeof(double*)*cellDims[0]); + //iDyP=(double**)malloc(sizeof(double*)*cellDims[0]); + //jP=(double**)malloc(sizeof(double*)*cellDims[0]); + + for(int i=0; i6){ + calcPyrLKTrack( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize, + newFPnt, valid, accuracy_th, max_iter); + }else{ + calcPyrLKTrack( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize, + newFPnt, valid); + } + //idx convert from matlab to c + for(int i=0; i +#include + +#ifndef MAX_LEVEL +# define MAX_LEVEL 5 +#endif +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [newFeaturePnt validFlag ] = + // calcOptFlowPyrLKMex(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter) + // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell. + // featurePnt 2xn int + // winSize c_level int + // c_xx c_xy c_yy: image size double* + // image must be double + + + const mxArray* imgArray; + int* imdims; + const int *curImgDims; + const int *nFeatures; + //double **iP, **iDxP, **iDyP, **jP; + double *iP[MAX_LEVEL], *iDxP[MAX_LEVEL], *iDyP[MAX_LEVEL], *jP[MAX_LEVEL]; + double *fPnt, *newFPnt; + char* valid; + double accuracy_th; + int winSize, max_iter; + const int *cellDims = mxGetDimensions(prhs[0]); + + if (nrhs > 6) { + accuracy_th=(double)mxGetScalar(prhs[6]); + max_iter=(int)mxGetScalar(prhs[7]); + } + + winSize = (int)mxGetScalar(prhs[5]); + fPnt=(double*)mxGetPr(prhs[4]); + nFeatures=mxGetDimensions(prhs[4]); + + imdims=(int*)malloc(sizeof(int)*cellDims[0]*2); + //iP=(double**)malloc(sizeof(double*)*cellDims[0]); + //iDxP=(double**)malloc(sizeof(double*)*cellDims[0]); + //iDyP=(double**)malloc(sizeof(double*)*cellDims[0]); + //jP=(double**)malloc(sizeof(double*)*cellDims[0]); + + for(int i=0; i6){ + calcPyrLKTrack( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize, + newFPnt, valid, accuracy_th, max_iter); + }else{ + calcPyrLKTrack( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize, + newFPnt, valid); + } + //idx convert from matlab to c + for(int i=0; i +#include + +#ifndef MAX_LEVEL +# define MAX_LEVEL 5 +#endif +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [newFeaturePnt validFlag ] = + // calcOptFlowLKPyrWInitMex2(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter, initFPnt) + // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell. + // featurePnt 2xn int + // winSize c_level int + // c_xx c_xy c_yy: image size double* + // image must be double + + + const mxArray* imgArray; + int* imdims; + const int *curImgDims; + const int *nFeatures; + double *iP[MAX_LEVEL], *iDxP[MAX_LEVEL], *iDyP[MAX_LEVEL], *jP[MAX_LEVEL]; + double *fPnt, *newFPnt, *initFPnt; + char* valid; + double accuracy_th; + int winSize, max_iter; + const int *cellDims = mxGetDimensions(prhs[0]); + + accuracy_th=(double)mxGetScalar(prhs[6]); + max_iter=(int)mxGetScalar(prhs[7]); + initFPnt=(double*)mxGetPr(prhs[8]); + + winSize = (int)mxGetScalar(prhs[5]); + fPnt=(double*)mxGetPr(prhs[4]); + nFeatures=mxGetDimensions(prhs[4]); + + imdims=(int*)malloc(sizeof(int)*cellDims[0]*2); + + for(int i=0; i +#include + +#ifndef MAX_LEVEL +# define MAX_LEVEL 5 +#endif +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [newFeaturePnt validFlag ] = + // calcOptFlowLKPyrWInitMex2(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter, initFPnt) + // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell. + // featurePnt 2xn int + // winSize c_level int + // c_xx c_xy c_yy: image size double* + // image must be double + + + const mxArray* imgArray; + int* imdims; + const int *curImgDims; + const int *nFeatures; + double *iP[MAX_LEVEL], *iDxP[MAX_LEVEL], *iDyP[MAX_LEVEL], *jP[MAX_LEVEL]; + double *fPnt, *newFPnt, *initFPnt; + char* valid; + double accuracy_th; + int winSize, max_iter; + const int *cellDims = mxGetDimensions(prhs[0]); + + accuracy_th=(double)mxGetScalar(prhs[6]); + max_iter=(int)mxGetScalar(prhs[7]); + initFPnt=(double*)mxGetPr(prhs[8]); + + winSize = (int)mxGetScalar(prhs[5]); + fPnt=(double*)mxGetPr(prhs[4]); + nFeatures=mxGetDimensions(prhs[4]); + + imdims=(int*)malloc(sizeof(int)*cellDims[0]*2); + + for(int i=0; i +#include + +#ifndef MAX_LEVEL +# define MAX_LEVEL 5 +#endif +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [newFeaturePnt validFlag ] = + // calcOptFlowLKPyrWInitMex2(Ipyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter, initFPnt) + // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell. + // featurePnt 2xn int + // winSize c_level int + // c_xx c_xy c_yy: image size double* + // image must be double + + + const mxArray* imgArray; + int* imdims; + const int *curImgDims; + const int *nFeatures; + double *iP[MAX_LEVEL], *jP[MAX_LEVEL]; + double *fPnt, *newFPnt, *initFPnt; + char* valid; + double accuracy_th; + int winSize, max_iter; + const int *cellDims = mxGetDimensions(prhs[0]); + + accuracy_th=(double)mxGetScalar(prhs[4]); + max_iter=(int)mxGetScalar(prhs[5]); + initFPnt=(double*)mxGetPr(prhs[6]); + + winSize = (int)mxGetScalar(prhs[3]); + fPnt=(double*)mxGetPr(prhs[2]); + nFeatures=mxGetDimensions(prhs[2]); + + imdims=(int*)malloc(sizeof(int)*cellDims[0]*2); + + for(int i=0; i +#include + +#define WIN_SIZE 10 +#define PYR_LEVELS 3 + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [ newpoints status pyr1 ] = + // calcOpticalFlowPyrLK(im1,im2,oldpoints,pyr1) + // images must be single-channel, 8-bit + // DO NOT PASS SAME IMAGE IN TWICE! + + char *im1_ptr = (char*)mxGetPr(prhs[0]); + char *im2_ptr = (char*)mxGetPr(prhs[1]); + const int *imdims = mxGetDimensions(prhs[0]); + int flags = 0; + int max_iter; + + if(nrhs>3){ + max_iter=(int)mxGetScalar(prhs[3]); + }else{ + max_iter=20; + } + + /* images */ + IplImage *im1 = + cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1); + IplImage *im2 = + cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1); + im1->imageData = im1_ptr; + im2->imageData = im2_ptr; + + /* coordinate arrays */ + CvPoint2D32f *oldpoints = (CvPoint2D32f*)mxGetPr(prhs[2]); + const int *pointsdim = mxGetDimensions(prhs[2]); + int npoints = pointsdim[1]; + plhs[0] = mxCreateNumericMatrix(2, npoints, mxSINGLE_CLASS, mxREAL); + CvPoint2D32f *newpoints = (CvPoint2D32f*)mxGetPr(plhs[0]); + + /* status array */ + plhs[1] = mxCreateNumericMatrix(1, npoints, mxUINT8_CLASS, mxREAL); + char *status = (char*)mxGetPr(plhs[1]); + + cvCalcOpticalFlowLK(im1, im2, + cvSize(WIN_SIZE, WIN_SIZE), velx, vely + status, + NULL, + cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,max_iter,0.03), + flags + ); +} diff --git a/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.cc b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.cc new file mode 100755 index 0000000..d4be5ff --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.cc @@ -0,0 +1,77 @@ + +/* compile with + mex calcOpticalFlowPyrLK.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv +*/ + +#include "mex.h" +#include "opencv/cv.h" +#include "opencv/highgui.h" +#include +#include + +#define WIN_SIZE 8 +#define PYR_LEVELS 3 + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [ newpoints status pyr1 ] = + // calcOpticalFlowPyrLK(im1,im2,oldpoints,pyr1) + // images must be single-channel, 8-bit + // DO NOT PASS SAME IMAGE IN TWICE! + + char *im1_ptr = (char*)mxGetPr(prhs[0]); + char *im2_ptr = (char*)mxGetPr(prhs[1]); + const int *imdims = mxGetDimensions(prhs[0]); + IplImage *pyr1 = 0, *pyr2 = 0; + int flags = 0; + bool clearPyr1 = false; + int max_iter; + + max_iter=30; + + /* images */ + IplImage *im1 = + cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1); + IplImage *im2 = + cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1); + im1->imageData = im1_ptr; + im2->imageData = im2_ptr; + + /* allocate pyramids */ + pyr1 = cvCreateImageHeader(cvSize(imdims[0],imdims[1]), IPL_DEPTH_8U, 1); + pyr2 = cvCreateImageHeader(cvSize(imdims[0],imdims[1]), IPL_DEPTH_8U, 1); + // reuse pyramid if given + if (nrhs > 3) { + pyr1->imageData = (char*)mxGetPr(prhs[3]); + flags |= CV_LKFLOW_PYR_A_READY; + } else { + clearPyr1 = true; + cvCreateData(pyr1); + } + + // pyr2 will be reused, so allocate in return value + plhs[2] = mxCreateNumericMatrix(imdims[0], imdims[1], mxUINT8_CLASS, mxREAL); + pyr2->imageData = (char*)mxGetPr(plhs[2]); + + /* coordinate arrays */ + CvPoint2D32f *oldpoints = (CvPoint2D32f*)mxGetPr(prhs[2]); + const int *pointsdim = mxGetDimensions(prhs[2]); + int npoints = pointsdim[1]; + plhs[0] = mxCreateNumericMatrix(2, npoints, mxSINGLE_CLASS, mxREAL); + CvPoint2D32f *newpoints = (CvPoint2D32f*)mxGetPr(plhs[0]); + + /* status array */ + plhs[1] = mxCreateNumericMatrix(1, npoints, mxUINT8_CLASS, mxREAL); + char *status = (char*)mxGetPr(plhs[1]); + + cvCalcOpticalFlowPyrLK(im1, im2, + pyr1, pyr2, + oldpoints, newpoints, npoints, + cvSize(WIN_SIZE, WIN_SIZE), PYR_LEVELS, + status, + NULL, + cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,max_iter,0.03), + flags + ); + if (clearPyr1) + cvReleaseImage(&pyr1); +} diff --git a/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.mexglx b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.mexglx new file mode 100755 index 0000000..ad5d0e9 Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.mexglx differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.cc b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.cc new file mode 100755 index 0000000..9c1aed7 --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.cc @@ -0,0 +1,33 @@ + +/* compile with +rm liblagrcv.a +gcc -c lagrcv.cpp +ar rc liblagrcv.a lagrcv.o +ranlib liblagrcv.a +mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/ +*/ + +#include "mex.h" +#include "lagrcv.h" +#include +#include + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [dxPye dyPyr] = + // calcGradientPyrMex(imagePyr) + + double *image, *retImg; + int newSizeY, newSizeX; + const int *imdims; + + image=(double*)mxGetPr(prhs[0]); + imdims = mxGetDimensions(prhs[0]); + + newSizeY=(imdims[0]+1)/2; + newSizeX=(imdims[1]+1)/2; + plhs[0] = mxCreateNumericMatrix(newSizeY, newSizeX, mxDOUBLE_CLASS, mxREAL); + retImg=(double*)mxGetPr(plhs[0]); + + calcImgResize(image, imdims[0], imdims[1], retImg, newSizeY, newSizeX); +} diff --git a/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexa64 new file mode 100755 index 0000000..0f66793 Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexa64 differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexglx new file mode 100755 index 0000000..192ea5a Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexglx differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelMex.cc b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.cc new file mode 100755 index 0000000..8667ec4 --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.cc @@ -0,0 +1,32 @@ + +/* compile with +rm liblagrcv.a +gcc -c lagrcv.cpp +ar rc liblagrcv.a lagrcv.o +ranlib liblagrcv.a +mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/ +*/ + +#include "mex.h" +#include "lagrcv.h" +#include +#include + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [dx dy] = + // calcSobelMex(image) + + double *image, *dx, *dy; + const int *imdims; + + image=(double*)mxGetPr(prhs[0]); + imdims = mxGetDimensions(prhs[0]); + + plhs[0] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[1] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + dx=(double*)mxGetPr(plhs[0]); + dy=(double*)mxGetPr(plhs[1]); + + calcSobel(image, imdims[0], imdims[1], dx, dy); +} diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexa64 new file mode 100755 index 0000000..272563f Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexa64 differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexglx new file mode 100755 index 0000000..9fc5d10 Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexglx differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.cc b/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.cc new file mode 100755 index 0000000..314c835 --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.cc @@ -0,0 +1,44 @@ + +/* compile with +rm liblagrcv.a +gcc -c lagrcv.cpp +ar rc liblagrcv.a lagrcv.o +ranlib liblagrcv.a +mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/ +*/ + +#include "mex.h" +#include "lagrcv.h" +#include +#include + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [dxPye dyPyr] = + // calcGradientPyrMex(imagePyr) + + const int *cellDims = mxGetDimensions(prhs[0]); + double *image; + const mxArray* imgArray; + mxArray *dxArray, *dyArray; + double *dx, *dy; + const int *imdims; + + plhs[0] = mxCreateCellArray(2, cellDims); + plhs[1] = mxCreateCellArray(2, cellDims); + + for(int i=0; i +#include + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [dxPye dyPyr] = + // calcGradientPyrMex(imagePyr) + + double *image, *retImg; + int newSizeY, newSizeX; + const int *imdims; + + image=(double*)mxGetPr(prhs[0]); + imdims = mxGetDimensions(prhs[0]); + + newSizeY=imdims[0]/2; + newSizeX=imdims[1]/2; + plhs[0] = mxCreateNumericMatrix(newSizeY, newSizeX, mxDOUBLE_CLASS, mxREAL); + retImg=(double*)mxGetPr(plhs[0]); + + calcSubSampleAvg(image, imdims[0], imdims[1], retImg, newSizeY, newSizeX); +} diff --git a/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexa64 new file mode 100755 index 0000000..6cf4f0e Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexa64 differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexglx new file mode 100755 index 0000000..f8acfde Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexglx differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcTextureMex.cc b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.cc new file mode 100755 index 0000000..f91d184 --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.cc @@ -0,0 +1,53 @@ + +/* compile with +rm liblagrcv.a +gcc -c lagrcv.cpp +ar rc liblagrcv.a lagrcv.o +ranlib liblagrcv.a +mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/ +*/ + +#include "mex.h" +#include "lagrcv.h" +#include +#include + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [ lambda tr det c_xx c_xy c_yy] = + // goodFeaturesToTrack(image, winSize) + // image must be single-channel, 8-bit + + double *image; + int winSize = (int)mxGetScalar(prhs[1]); + double *lambda, *tr, *det, *c_xx, *c_xy, *c_yy; + const int *imdims; + //double dx[360000];//[MAX_IMAGE_SIZE_1D]; + //double dy[360000];//[MAX_IMAGE_SIZE_1D]; + double *dx, *dy; + + image = (double*)mxGetPr(prhs[0]); + imdims = mxGetDimensions(prhs[0]); + dx=(double*)malloc(sizeof(double)*imdims[0]*imdims[1]); + dy=(double*)malloc(sizeof(double)*imdims[0]*imdims[1]); + + plhs[0] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[1] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[2] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[3] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[4] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[5] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + + lambda = (double*)mxGetPr(plhs[0]); + tr = (double*)mxGetPr(plhs[1]); + det = (double*)mxGetPr(plhs[2]); + c_xx = (double*)mxGetPr(plhs[3]); + c_xy = (double*)mxGetPr(plhs[4]); + c_yy = (double*)mxGetPr(plhs[5]); + + calcSobel(image, imdims[0], imdims[1], dx, dy); + calcGoodFeature(dx, dy, imdims[0], imdims[1], winSize, + lambda, tr, det, c_xx, c_xy, c_yy); + free(dx); + free(dy); +} diff --git a/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexa64 new file mode 100755 index 0000000..3c023ea Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexa64 differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexglx new file mode 100755 index 0000000..f8e0c99 Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexglx differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.cc b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.cc new file mode 100755 index 0000000..3c332ca --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.cc @@ -0,0 +1,54 @@ + +/* compile with +rm liblagrcv.a +gcc -c lagrcv.cpp +ar rc liblagrcv.a lagrcv.o +ranlib liblagrcv.a +mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/ +*/ + +#include "mex.h" +#include "lagrcv.h" +#include +#include + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [ lambda tr det c_xx c_xy c_yy] = + // calcTexturePyrMex(dxPyr, dyPyr, winSize, level) + // image is assumed to be double + // the lowest level is 1 + + const int *cellDims = mxGetDimensions(prhs[0]); + int level=0; + char winSize = (char )mxGetScalar(prhs[2]); + double *dx, *dy; + const mxArray* dxArray, * dyArray; + const int *imdims; + double *tr, *det, *lambda, *c_xx, *c_xy, *c_yy; + + if (nrhs > 3) level = (int)mxGetScalar(prhs[3])-1; + + dxArray= mxGetCell(prhs[0],level); + dyArray= mxGetCell(prhs[1],level); + dx=mxGetPr(dxArray); + dy=mxGetPr(dyArray); + imdims = mxGetDimensions(dxArray); + + plhs[0] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[1] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[2] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[3] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[4] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + plhs[5] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL); + + lambda = (double*)mxGetPr(plhs[0]); + tr = (double*)mxGetPr(plhs[1]); + det = (double*)mxGetPr(plhs[2]); + c_xx = (double*)mxGetPr(plhs[3]); + c_xy = (double*)mxGetPr(plhs[4]); + c_yy = (double*)mxGetPr(plhs[5]); + + calcGoodFeature(dx, dy, imdims[0], imdims[1], winSize, lambda, tr, det, c_xx, c_xy, c_yy); + +} diff --git a/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexa64 new file mode 100755 index 0000000..ebede53 Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexa64 differ diff --git a/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexglx new file mode 100755 index 0000000..697ceec Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexglx differ diff --git a/SD-VBS/common/toolbox/lagrcv/dummyMex.cc b/SD-VBS/common/toolbox/lagrcv/dummyMex.cc new file mode 100755 index 0000000..0799182 --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/dummyMex.cc @@ -0,0 +1,58 @@ + +/* compile with +rm liblagrcv.a +gcc -c lagrcv.cpp +ar rc liblagrcv.a lagrcv.o +ranlib liblagrcv.a +mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/ +*/ + +#include "mex.h" +#include "lagrcv.h" +#include +#include + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [newFeaturePnt validFlag ] = + // calcOptFlowPyrLKMex(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, c_level, c_det, c_xx, c_xy, c_yy) + // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell. + // featurePnt 2xn int + // winSize c_level int + // c_xx c_xy c_yy: image size double* + // image must be single-channel, 8-bit + + + double* fPntDouble; + const int *nFeatures; + char* valid; + int *fPnt, *newFPnt; + + fPntDouble=(double*)mxGetPr(prhs[0]); + nFeatures=mxGetDimensions(prhs[0]); + fPnt=(int*)malloc(sizeof(int)*nFeatures[0]*nFeatures[1]); + + printf("nFeatures %d, %d", nFeatures[0], nFeatures[1]); + //plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxINT32_CLASS, mxREAL); + plhs[0] = mxCreateNumericArray(2,nFeatures,mxINT32_CLASS, mxREAL); + //plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxINT32_CLASS, mxREAL); + plhs[1] = mxCreateNumericArray(1,nFeatures+1,mxUINT8_CLASS, mxREAL); + + newFPnt = (int*)mxGetPr(plhs[0]); + valid = (char*)mxGetPr(plhs[1]); + + //idx convert from matlab to c + for(int i=0; i +#include + +//#define MAX_CORNERS 500 +#define WIN_SIZE 5 + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [ features ] = + // findCornerSubPix(image, features) + // image must be single-channel, 8-bit + + char *image_pr = (char*)mxGetPr(prhs[0]); + const int *imdims = mxGetDimensions(prhs[0]); + IplImage *image = + cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1); + image->imageData = image_pr; + + const int *feature_dims = mxGetDimensions(prhs[1]); + int nfeatures = feature_dims[1]; + plhs[0] = mxCreateNumericMatrix(2, nfeatures, mxSINGLE_CLASS, mxREAL); + CvPoint2D32f *newfeatures = (CvPoint2D32f*)mxGetPr(plhs[0]); + CvPoint2D32f *oldfeatures = (CvPoint2D32f*)mxGetPr(prhs[1]); + // plhs[0] = mxDuplicateArray(prhs[1]); + // CvPoint2D32f *newfeatures = (CvPoint2D32f*)mxGetPr(plhs[0]); + memcpy(newfeatures, oldfeatures, sizeof(float)*2*nfeatures); + + cvFindCornerSubPix(image, newfeatures, nfeatures, + cvSize(WIN_SIZE,WIN_SIZE), + cvSize(-1,-1), + cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03)); +} 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 @@ + +/* compile with + mex goodFeaturesToTrack.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv +*/ + +#include "mex.h" +#include "opencv/cv.h" +#include "opencv/highgui.h" +#include +#include + +#define MAX_CORNERS 500 + +IplImage *eigtemp = NULL, *temp2 = NULL; + +// TODO: add number of corners parameter +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + // usage: [ features numvalid ] = + // goodFeaturesToTrack(image, quality, mindist, mask) + // image must be single-channel, 8-bit + // quality = minimum acceptable ratio of eigenvalues + // mindist = minimum distance between corners + // mask (optional) = bitmap mask "region of interest" (MUST BE uint8 TYPE!) + + char *image_pr = (char*)mxGetPr(prhs[0]); + // int imdims[] = { (int)d_imdims[0], (int)d_imdims[1] }; + const int *imdims = mxGetDimensions(prhs[0]); + double quality = mxGetScalar(prhs[1]); + double mindist = mxGetScalar(prhs[2]); + bool use_roi = nrhs > 3; + + plhs[0] = mxCreateNumericMatrix(2, MAX_CORNERS, mxSINGLE_CLASS, mxREAL); + plhs[1] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL); + + CvPoint2D32f *corner_coords = (CvPoint2D32f*)mxGetPr(plhs[0]); + int *corner_count = (int*)mxGetPr(plhs[1]); + *corner_count = MAX_CORNERS; + + if (eigtemp == NULL) { + eigtemp = cvCreateImage(cvSize(imdims[0],imdims[1]), IPL_DEPTH_32F, 1); + temp2 = cvCreateImage(cvSize(imdims[0],imdims[1]), IPL_DEPTH_32F, 1); + } + + IplImage *image = + cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1); + image->imageData = image_pr; + + IplImage *roimask = NULL; + if (use_roi) { + roimask = cvCreateImage(cvSize(imdims[0],imdims[1]), IPL_DEPTH_8U, 1); + roimask->imageData = (char*)mxGetPr(prhs[3]); + } + + cvGoodFeaturesToTrack(image, + eigtemp, temp2, + corner_coords, + corner_count, + quality, + mindist, + roimask + ); +} diff --git a/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.mexglx b/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.mexglx new file mode 100755 index 0000000..0fe9080 Binary files /dev/null and b/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.mexglx differ diff --git a/SD-VBS/common/toolbox/lagrcv/lagrcv.cpp b/SD-VBS/common/toolbox/lagrcv/lagrcv.cpp new file mode 100755 index 0000000..4f24b5d --- /dev/null +++ b/SD-VBS/common/toolbox/lagrcv/lagrcv.cpp @@ -0,0 +1,840 @@ +#include "lagrcv.h" +/* +void calcImagePyr(char *src, int sizeY, int sizeX, int level, char *pyr){ + pyr=(char*) malloc(sizeof(char)*(int)sizeY*sizeX*4/3); + int i, startPnt, nX, nY; + + memcpy(pyr,src, sizeY*sizeX); + nY=sizeY; + nX=sizeX; + for(i=0; i> 1; + nX = (nX + 1) >> 1; + calcSubsample(pyr, sizeY, sizeX, pyr+sizeY*sizeX) + } + free(pyr); +} +*/ + +void calcSubSampleAvg(double *src, int sizeY, int sizeX, double *dest, int destSizeY, int destSizeX){ + int i, j, idx, + destI, destJ, idxDest; + for(i=0, destI=0; destI