annotate toolboxes/FullBNT-1.0.7/KPMtools/rectintLoopC.c @ 0:cc4b1211e677 tip

initial commit to HG from Changeset: 646 (e263d8a21543) added further path and more save "camirversion.m"
author Daniel Wolff
date Fri, 19 Aug 2016 13:07:06 +0200
parents
children
rev   line source
Daniel@0 1
Daniel@0 2 #include "mex.h"
Daniel@0 3 #include <stdio.h>
Daniel@0 4
Daniel@0 5 #define MAX(x,y) ((x)>(y) ? (x) : (y))
Daniel@0 6 #define MIN(x,y) ((x)<(y) ? (x) : (y))
Daniel@0 7
Daniel@0 8 void mexFunction(
Daniel@0 9 int nlhs, mxArray *plhs[],
Daniel@0 10 int nrhs, const mxArray *prhs[]
Daniel@0 11 )
Daniel@0 12 {
Daniel@0 13 int j,k,m,n,nzmax,*irs,*jcs, *irs2, *jcs2;
Daniel@0 14 double *overlap, *overlap2, tmp, areaA, areaB;
Daniel@0 15 double *leftA, *rightA, *topA, *bottomA;
Daniel@0 16 double *leftB, *rightB, *topB, *bottomB;
Daniel@0 17 double *verbose;
Daniel@0 18
Daniel@0 19 m = MAX(mxGetM(prhs[0]), mxGetN(prhs[0]));
Daniel@0 20 n = MAX(mxGetM(prhs[4]), mxGetN(prhs[4]));
Daniel@0 21 /* printf("A=%d, B=%d\n", m, n); */
Daniel@0 22
Daniel@0 23 leftA = mxGetPr(prhs[0]);
Daniel@0 24 rightA = mxGetPr(prhs[1]);
Daniel@0 25 topA = mxGetPr(prhs[2]);
Daniel@0 26 bottomA = mxGetPr(prhs[3]);
Daniel@0 27
Daniel@0 28 leftB = mxGetPr(prhs[4]);
Daniel@0 29 rightB = mxGetPr(prhs[5]);
Daniel@0 30 topB = mxGetPr(prhs[6]);
Daniel@0 31 bottomB = mxGetPr(prhs[7]);
Daniel@0 32
Daniel@0 33 verbose = mxGetPr(prhs[8]);
Daniel@0 34
Daniel@0 35 plhs[0] = mxCreateDoubleMatrix(m,n, mxREAL);
Daniel@0 36 overlap = mxGetPr(plhs[0]);
Daniel@0 37
Daniel@0 38 plhs[1] = mxCreateDoubleMatrix(m,n, mxREAL);
Daniel@0 39 overlap2 = mxGetPr(plhs[1]);
Daniel@0 40
Daniel@0 41 k = 0;
Daniel@0 42 for (j = 0; (j < n); j++) {
Daniel@0 43 int i;
Daniel@0 44 for (i = 0; (i < m); i++) {
Daniel@0 45 tmp = (MAX(0, MIN(rightA[i], rightB[j]) - MAX(leftA[i], leftB[j]) )) *
Daniel@0 46 (MAX(0, MIN(topA[i], topB[j]) - MAX(bottomA[i], bottomB[j]) ));
Daniel@0 47
Daniel@0 48 if (tmp > 0) {
Daniel@0 49 overlap[k] = tmp;
Daniel@0 50
Daniel@0 51 areaA = (rightA[i]-leftA[i])*(topA[i]-bottomA[i]);
Daniel@0 52 areaB = (rightB[j]-leftB[j])*(topB[j]-bottomB[j]);
Daniel@0 53 overlap2[k] = tmp/MIN(areaA, areaB);
Daniel@0 54
Daniel@0 55 if (*verbose) {
Daniel@0 56 printf("j=%d,i=%d,overlap=%5.3f, norm=%5.3f\n", j,i, overlap[k], overlap2[k]);
Daniel@0 57 }
Daniel@0 58 }
Daniel@0 59
Daniel@0 60 k++;
Daniel@0 61 }
Daniel@0 62 }
Daniel@0 63 }
Daniel@0 64
Daniel@0 65
Daniel@0 66
Daniel@0 67
Daniel@0 68
Daniel@0 69
Daniel@0 70
Daniel@0 71