#include <mexutils.h>#include <vl/mathop.h>#include <vl/generic.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#include <assert.h>
Go to the source code of this file.
Defines | |
| #define | ABS(x) ((x) >= 0 ? (x) : -(x)) |
| #define | ABS_DIFF(x, y) ((x) >= (y) ? ((x) - (y)) : ((y) - (x))) |
| #define | CMP(s1, s2) ((double)MIN(s1,s2)) |
| #define | CORE(NORM, F, DC, AC) |
| #define | CORE_SPARSE(NORM, F) |
| #define | DEF_CLASS(NORM, F) |
| #define | DISPATCH_CLASS(NORM, DC, AC) |
| #define | DISPATCH_NORM(NORM) |
| #define | DOUBLE_t double |
| #define | F_CHI2(AC, x, y) |
| #define | F_HELL(AC, x, y) F_HELL_ ## AC (x,y) |
| #define | F_HELL_DOUBLE(x, y) { acc += x + y - 2 * sqrt (x * y) ; } |
| #define | F_HELL_INT16(x, y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_HELL_INT32(x, y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_HELL_INT8(x, y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_HELL_SINGLE(x, y) { acc += x + y - 2 * sqrtf (x * y) ; } |
| #define | F_HELL_UINT16(x, y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_HELL_UINT32(x, y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_HELL_UINT8(x, y) { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_KCHI2(AC, x, y) |
| #define | F_KHELL(AC, x, y) F_KHELL_ ## AC (x,y) |
| #define | F_KHELL_DOUBLE(x, y) { acc += sqrt (x * y) ; } |
| #define | F_KHELL_INT16(x, y) { acc += vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_KHELL_INT32(x, y) { acc += vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_KHELL_INT8(x, y) { acc += vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_KHELL_SINGLE(x, y) { acc += sqrtf (x * y) ; } |
| #define | F_KHELL_UINT16(x, y) { acc += vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_KHELL_UINT32(x, y) { acc += vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_KHELL_UINT8(x, y) { acc += vl_fast_sqrt_ui32 (x * y) ; } |
| #define | F_KL1(AC, x, y) { acc += MIN(x,y) ; } |
| #define | F_KL2(AC, x, y) { acc += (x*y) ; } |
| #define | F_L0(AC, x, y) { acc += (x) != (y) ; } |
| #define | F_L1(AC, x, y) { acc += ABS_DIFF(x,y) ; } |
| #define | F_L2(AC, x, y) { AC ## _t tmp = ABS_DIFF(x,y) ; acc += tmp * tmp ; } |
| #define | F_LINF(AC, x, y) { acc = MAX(acc, ABS_DIFF(x,y)) ; } |
| #define | F_MIN(AC, x, y) { acc += MIN(x,y) ; } |
| #define | INT16_t vl_int16 |
| #define | INT32_t vl_int32 |
| #define | INT8_t vl_int8 |
| #define | MAX(x, y) ((x) >= (y) ? (x) : (y)) |
| #define | MIN(x, y) ((x) <= (y) ? (x) : (y)) |
| #define | SINGLE_t float |
| #define | sqrtf(x) ((float)sqrt(x)) |
| #define | UINT16_t vl_uint16 |
| #define | UINT32_t vl_uint32 |
| #define | UINT8_t vl_uint8 |
Enumerations | |
| enum | { opt_LINF, opt_L2, opt_L1, opt_L0, opt_CHI2, opt_HELL, opt_KL2, opt_KL1, opt_KCHI2, opt_KHELL, opt_MIN } |
Functions | |
| void | mexFunction (int nout, mxArray *out[], int nin, const mxArray *in[]) |
Variables | |
| vlmxOption | options [] |
| #define ABS | ( | x | ) | ((x) >= 0 ? (x) : -(x)) |
Definition at line 67 of file vl_alldist2.c.
| #define ABS_DIFF | ( | x, | |
| y | |||
| ) | ((x) >= (y) ? ((x) - (y)) : ((y) - (x))) |
Definition at line 68 of file vl_alldist2.c.
Definition at line 78 of file vl_alldist2.c.
| #define CORE | ( | NORM, | |
| F, | |||
| DC, | |||
| AC | |||
| ) |
void \ dist ## NORM ## _ ## DC ## _ ## AC \ ( \ AC ## _t * pt, DC ## _t * s1_pt, \ DC ## _t * s2_pt, \ vl_size L, vl_size N1, vl_size N2, \ bool self) \ { \ vl_uindex j1,j2,l ; \ for(j2 = 0 ; j2 < N2 ; ++j2) { \ for(j1 = 0 ; j1 < N1 ; ++j1) { \ if(! self || j1>=j2) { \ AC ## _t acc = 0 ; \ DC ## _t * s1_it = s1_pt + L*j1 ; \ DC ## _t * s2_it = s2_pt + L*j2 ; \ for(l = 0 ; l < L ; ++l) { \ AC ## _t s1 = *s1_it++ ; \ AC ## _t s2 = *s2_it++ ; \ F(AC, s1, s2) \ } \ *pt = acc; \ } else { \ *pt = *(pt + (j1 - j2) * (N1 - 1)) ; \ } \ pt++ ; \ } \ } \ } \
Definition at line 89 of file vl_alldist2.c.
| #define CORE_SPARSE | ( | NORM, | |
| F | |||
| ) |
Definition at line 119 of file vl_alldist2.c.
| #define DEF_CLASS | ( | NORM, | |
| F | |||
| ) |
CORE (NORM, F, INT8, INT32) \ CORE (NORM, F, UINT8, UINT32) \ CORE (NORM, F, INT16, INT32) \ CORE (NORM, F, UINT16, UINT32) \ CORE (NORM, F, INT32, INT32) \ CORE (NORM, F, UINT32, UINT32) \ CORE (NORM, F, SINGLE, SINGLE) \ CORE (NORM, F, DOUBLE, DOUBLE)
Definition at line 203 of file vl_alldist2.c.
| #define DISPATCH_CLASS | ( | NORM, | |
| DC, | |||
| AC | |||
| ) |
case mx ## DC ## _CLASS : \
acc_class = mx ## AC ## _CLASS ; \
out[OUT_D] = mxCreateNumericArray(2,dims,acc_class,mxREAL) ; \
dist ## NORM ## _ ## DC ## _ ## AC \
( (AC ## _t *)mxGetData(out[OUT_D]), \
(DC ## _t *)s1_pt, \
(DC ## _t *)s2_pt, \
L, N1, N2, \
self ) ; \
break ;
| #define DISPATCH_NORM | ( | NORM | ) |
case opt_ ## NORM : \ if (sparse) { \ out[OUT_D] = mxCreateNumericArray(2,dims,mxDOUBLE_CLASS,mxREAL) ; \ CORE_SPARSE(NORM, VL_XCAT(F_, NORM)) \ } else { \ switch (data_class) { \ DISPATCH_CLASS(NORM, UINT8 , UINT32) \ DISPATCH_CLASS(NORM, INT8 , INT32) \ DISPATCH_CLASS(NORM, UINT16, UINT32) \ DISPATCH_CLASS(NORM, INT16, INT32) \ DISPATCH_CLASS(NORM, UINT32, UINT32) \ DISPATCH_CLASS(NORM, INT32, INT32) \ DISPATCH_CLASS(NORM, SINGLE, SINGLE) \ DISPATCH_CLASS(NORM, DOUBLE,DOUBLE) \ default: \ mexErrMsgTxt("Data class not supported!") ; \ } \ } \ break ;
| #define DOUBLE_t double |
Definition at line 87 of file vl_alldist2.c.
| #define F_CHI2 | ( | AC, | |
| x, | |||
| y | |||
| ) |
{ \
AC ## _t meant2 = ((x) + (y)) ; \
if (meant2 != 0) { \
AC ## _t tmp = ABS_DIFF(x,y) ; \
acc += tmp * tmp / meant2 ; \
} \
}
Definition at line 217 of file vl_alldist2.c.
| #define F_HELL | ( | AC, | |
| x, | |||
| y | |||
| ) | F_HELL_ ## AC (x,y) |
Definition at line 233 of file vl_alldist2.c.
| #define F_HELL_DOUBLE | ( | x, | |
| y | |||
| ) | { acc += x + y - 2 * sqrt (x * y) ; } |
Definition at line 226 of file vl_alldist2.c.
| #define F_HELL_INT16 | ( | x, | |
| y | |||
| ) | { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 230 of file vl_alldist2.c.
| #define F_HELL_INT32 | ( | x, | |
| y | |||
| ) | { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 228 of file vl_alldist2.c.
| #define F_HELL_INT8 | ( | x, | |
| y | |||
| ) | { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 232 of file vl_alldist2.c.
| #define F_HELL_SINGLE | ( | x, | |
| y | |||
| ) | { acc += x + y - 2 * sqrtf (x * y) ; } |
Definition at line 225 of file vl_alldist2.c.
| #define F_HELL_UINT16 | ( | x, | |
| y | |||
| ) | { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 229 of file vl_alldist2.c.
| #define F_HELL_UINT32 | ( | x, | |
| y | |||
| ) | { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 227 of file vl_alldist2.c.
| #define F_HELL_UINT8 | ( | x, | |
| y | |||
| ) | { acc += x + y - 2 * vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 231 of file vl_alldist2.c.
| #define F_KCHI2 | ( | AC, | |
| x, | |||
| y | |||
| ) |
{ \
AC ## _t mean = ((x) + (y)) / 2 ; \
if (mean != 0) { \
AC ## _t tmp = (x) * (y) ; \
acc += tmp / mean ; \
} \
}
Definition at line 238 of file vl_alldist2.c.
| #define F_KHELL | ( | AC, | |
| x, | |||
| y | |||
| ) | F_KHELL_ ## AC (x,y) |
Definition at line 254 of file vl_alldist2.c.
| #define F_KHELL_DOUBLE | ( | x, | |
| y | |||
| ) | { acc += sqrt (x * y) ; } |
Definition at line 247 of file vl_alldist2.c.
| #define F_KHELL_INT16 | ( | x, | |
| y | |||
| ) | { acc += vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 251 of file vl_alldist2.c.
| #define F_KHELL_INT32 | ( | x, | |
| y | |||
| ) | { acc += vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 249 of file vl_alldist2.c.
| #define F_KHELL_INT8 | ( | x, | |
| y | |||
| ) | { acc += vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 253 of file vl_alldist2.c.
| #define F_KHELL_SINGLE | ( | x, | |
| y | |||
| ) | { acc += sqrtf (x * y) ; } |
Definition at line 246 of file vl_alldist2.c.
| #define F_KHELL_UINT16 | ( | x, | |
| y | |||
| ) | { acc += vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 250 of file vl_alldist2.c.
| #define F_KHELL_UINT32 | ( | x, | |
| y | |||
| ) | { acc += vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 248 of file vl_alldist2.c.
| #define F_KHELL_UINT8 | ( | x, | |
| y | |||
| ) | { acc += vl_fast_sqrt_ui32 (x * y) ; } |
Definition at line 252 of file vl_alldist2.c.
Definition at line 236 of file vl_alldist2.c.
| #define F_KL2 | ( | AC, | |
| x, | |||
| y | |||
| ) | { acc += (x*y) ; } |
Definition at line 235 of file vl_alldist2.c.
| #define F_L0 | ( | AC, | |
| x, | |||
| y | |||
| ) | { acc += (x) != (y) ; } |
Definition at line 213 of file vl_alldist2.c.
Definition at line 214 of file vl_alldist2.c.
Definition at line 215 of file vl_alldist2.c.
Definition at line 216 of file vl_alldist2.c.
Definition at line 237 of file vl_alldist2.c.
Definition at line 83 of file vl_alldist2.c.
Definition at line 85 of file vl_alldist2.c.
Definition at line 81 of file vl_alldist2.c.
| #define MAX | ( | x, | |
| y | |||
| ) | ((x) >= (y) ? (x) : (y)) |
Definition at line 66 of file vl_alldist2.c.
| #define MIN | ( | x, | |
| y | |||
| ) | ((x) <= (y) ? (x) : (y)) |
Definition at line 65 of file vl_alldist2.c.
| #define SINGLE_t float |
Definition at line 86 of file vl_alldist2.c.
| #define sqrtf | ( | x | ) | ((float)sqrt(x)) |
Definition at line 71 of file vl_alldist2.c.
Definition at line 82 of file vl_alldist2.c.
Definition at line 84 of file vl_alldist2.c.
Definition at line 80 of file vl_alldist2.c.
| anonymous enum |
| opt_LINF | |
| opt_L2 | |
| opt_L1 | |
| opt_L0 | |
| opt_CHI2 | |
| opt_HELL | |
| opt_KL2 | |
| opt_KL1 | |
| opt_KCHI2 | |
| opt_KHELL | |
| opt_MIN |
Definition at line 25 of file vl_alldist2.c.
| void mexFunction | ( | int nout | , |
| mxArray * | out[], | ||
| int | nin, | ||
| const mxArray * | in[] | ||
| ) |
----------------------------------------------------------------- Check the arguments --------------------------------------------------------------
Definition at line 272 of file vl_alldist2.c.
{
{"linf", 0, opt_LINF },
{"l2", 0, opt_L2 },
{"l1", 0, opt_L1 },
{"l0", 0, opt_L0 },
{"chi2", 0, opt_CHI2 },
{"hell", 0, opt_HELL },
{"kl2", 0, opt_KL2 },
{"kl1", 0, opt_KL1 },
{"kchi2", 0, opt_KCHI2 },
{"khell", 0, opt_KHELL },
{"min", 0, opt_MIN },
{0, 0, 0 }
}
Definition at line 41 of file vl_alldist2.c.