diff options
Diffstat (limited to 'SD-VBS/benchmarks/texture_synthesis/src/matlab/MEX/pointOp.c')
-rwxr-xr-x | SD-VBS/benchmarks/texture_synthesis/src/matlab/MEX/pointOp.c | 126 |
1 files changed, 0 insertions, 126 deletions
diff --git a/SD-VBS/benchmarks/texture_synthesis/src/matlab/MEX/pointOp.c b/SD-VBS/benchmarks/texture_synthesis/src/matlab/MEX/pointOp.c deleted file mode 100755 index 6ffcb45..0000000 --- a/SD-VBS/benchmarks/texture_synthesis/src/matlab/MEX/pointOp.c +++ /dev/null | |||
@@ -1,126 +0,0 @@ | |||
1 | /* | ||
2 | RES = pointOp(IM, LUT, ORIGIN, INCREMENT, WARNINGS) | ||
3 | >>> See pointOp.m for documentation <<< | ||
4 | EPS, ported from OBVIUS, 7/96. | ||
5 | */ | ||
6 | |||
7 | #define V4_COMPAT | ||
8 | #include <matrix.h> /* Matlab matrices */ | ||
9 | #include <mex.h> | ||
10 | |||
11 | #include <stddef.h> /* NULL */ | ||
12 | |||
13 | #define notDblMtx(it) (!mxIsNumeric(it) || !mxIsDouble(it) || mxIsSparse(it) || mxIsComplex(it)) | ||
14 | |||
15 | void internal_pointop(); | ||
16 | |||
17 | void mexFunction(int nlhs, /* Num return vals on lhs */ | ||
18 | mxArray *plhs[], /* Matrices on lhs */ | ||
19 | int nrhs, /* Num args on rhs */ | ||
20 | const mxArray *prhs[] /* Matrices on rhs */ | ||
21 | ) | ||
22 | { | ||
23 | double *image, *lut, *res; | ||
24 | double origin, increment; | ||
25 | int x_dim, y_dim, lx_dim, ly_dim; | ||
26 | int warnings = 1; | ||
27 | mxArray *arg; | ||
28 | double *mxMat; | ||
29 | |||
30 | if (nrhs < 4 ) mexErrMsgTxt("requres at least 4 args."); | ||
31 | |||
32 | /* ARG 1: IMAGE */ | ||
33 | arg = prhs[0]; | ||
34 | if notDblMtx(arg) mexErrMsgTxt("IMAGE arg must be a real non-sparse matrix."); | ||
35 | image = mxGetPr(arg); | ||
36 | x_dim = (int) mxGetM(arg); /* X is inner index! */ | ||
37 | y_dim = (int) mxGetN(arg); | ||
38 | |||
39 | /* ARG 2: Lookup table */ | ||
40 | arg = prhs[1]; | ||
41 | if notDblMtx(arg) mexErrMsgTxt("LUT arg must be a real non-sparse matrix."); | ||
42 | lut = mxGetPr(arg); | ||
43 | lx_dim = (int) mxGetM(arg); /* X is inner index! */ | ||
44 | ly_dim = (int) mxGetN(arg); | ||
45 | if ( (lx_dim != 1) && (ly_dim != 1) ) | ||
46 | mexErrMsgTxt("Lookup table must be a row or column vector."); | ||
47 | |||
48 | /* ARG 3: ORIGIN */ | ||
49 | arg = prhs[2]; | ||
50 | if notDblMtx(arg) mexErrMsgTxt("ORIGIN arg must be a real scalar."); | ||
51 | if (mxGetM(arg) * mxGetN(arg) != 1) | ||
52 | mexErrMsgTxt("ORIGIN arg must be a real scalar."); | ||
53 | mxMat = mxGetPr(arg); | ||
54 | origin = *mxMat; | ||
55 | |||
56 | /* ARG 4: INCREMENT */ | ||
57 | arg = prhs[3]; | ||
58 | if notDblMtx(arg) mexErrMsgTxt("INCREMENT arg must be a real scalar."); | ||
59 | if (mxGetM(arg) * mxGetN(arg) != 1) | ||
60 | mexErrMsgTxt("INCREMENT arg must be a real scalar."); | ||
61 | mxMat = mxGetPr(arg); | ||
62 | increment = *mxMat; | ||
63 | |||
64 | /* ARG 5: WARNINGS */ | ||
65 | if (nrhs>4) | ||
66 | { | ||
67 | arg = prhs[4]; | ||
68 | if notDblMtx(arg) mexErrMsgTxt("WARINGS arg must be a real scalar."); | ||
69 | if (mxGetM(arg) * mxGetN(arg) != 1) | ||
70 | mexErrMsgTxt("WARNINGS arg must be a real scalar."); | ||
71 | mxMat = mxGetPr(arg); | ||
72 | warnings = (int) *mxMat; | ||
73 | } | ||
74 | |||
75 | plhs[0] = (mxArray *) mxCreateDoubleMatrix(x_dim,y_dim,mxREAL); | ||
76 | if (plhs[0] == NULL) mexErrMsgTxt("Cannot allocate result matrix"); | ||
77 | res = mxGetPr(plhs[0]); | ||
78 | |||
79 | internal_pointop(image, res, x_dim*y_dim, lut, lx_dim*ly_dim, | ||
80 | origin, increment, warnings); | ||
81 | return; | ||
82 | } | ||
83 | |||
84 | |||
85 | /* Use linear interpolation on a lookup table. | ||
86 | Taken from OBVIUS. EPS, Spring, 1987. | ||
87 | */ | ||
88 | void internal_pointop (im, res, size, lut, lutsize, origin, increment, warnings) | ||
89 | register double *im, *res, *lut; | ||
90 | register double origin, increment; | ||
91 | register int size, lutsize, warnings; | ||
92 | { | ||
93 | register int i, index; | ||
94 | register double pos; | ||
95 | register int l_unwarned = warnings; | ||
96 | register int r_unwarned = warnings; | ||
97 | |||
98 | lutsize = lutsize - 2; /* Maximum index value */ | ||
99 | if (increment > 0) | ||
100 | for (i=0; i<size; i++) | ||
101 | { | ||
102 | pos = (im[i] - origin) / increment; | ||
103 | index = (int) pos; /* Floor */ | ||
104 | if (index < 0) | ||
105 | { | ||
106 | index = 0; | ||
107 | if (l_unwarned) | ||
108 | { | ||
109 | mexPrintf("Warning: Extrapolating to left of lookup table...\n"); | ||
110 | l_unwarned = 0; | ||
111 | } | ||
112 | } | ||
113 | else if (index > lutsize) | ||
114 | { | ||
115 | index = lutsize; | ||
116 | if (r_unwarned) | ||
117 | { | ||
118 | mexPrintf("Warning: Extrapolating to right of lookup table...\n"); | ||
119 | r_unwarned = 0; | ||
120 | } | ||
121 | } | ||
122 | res[i] = lut[index] + (lut[index+1] - lut[index]) * (pos - index); | ||
123 | } | ||
124 | else | ||
125 | for (i=0; i<size; i++) res[i] = *lut; | ||
126 | } | ||