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 --- .../common/toolbox/MultiNcut/multiIntensityWppc.c | 158 +++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100755 SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.c (limited to 'SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.c') diff --git a/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.c b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.c new file mode 100755 index 0000000..e01e516 --- /dev/null +++ b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.c @@ -0,0 +1,158 @@ +/*================================================================ +* function w = multiIntensityWppc(image,pi,pj,rMin,sigmaX,sigmaIntensite,valeurMinW, +* subgrid,nrSubgrid,ncSubgrid,subpi) +* Input: +* [pi,pj] = index pair representation for MALTAB sparse matrices +* Output: +* w = affinity with IC at [pi,pj] +* + +imageX,wiInOriginalImage,wwj,rMin,dataWpp.sigmaX,sigmaI,minW,subgrid{1,i},p(i),q(i),wi{i} + + +pixels i and j (corresponding to the sampling in pi,pj) are fully connected when d(i,j) <= rmin; + +% test sequence +f = synimg(10); +[i,j] = cimgnbmap(size(f),2); +[ex,ey,egx,egy] = quadedgep(f); +a = affinityic(ex,ey,egx,egy,i,j) +show_dist_w(f,a); + +* Stella X. Yu, Nov 19, 2001. +*=================================================================*/ + +# include "mex.h" +# include "math.h" + +void mexFunction( + int nargout, + mxArray *out[], + int nargin, + const mxArray *in[] +) +{ + /* declare variables */ + int nr, nc, np, nW, total; + int i, j, k, t, ix, iy, jx, jy, nrSubgrid, ncSubgrid; + int *ir, *jc; + int squareDistance; + /* unsigned long *pi, *pj, *subpi; */ + unsigned int *pi, *pj, *subpi; + double *w, *subgrid, *tmp; + + double temp,a1,a2,wij; + double rMin; + double sigmaX, sigmaIntensite,valeurMinW; + double *image; + + /* check argument */ + if (nargin<11) { + mexErrMsgTxt("Eleven input arguments required"); + } + if (nargout>1) { + mexErrMsgTxt("Too many output arguments"); + } + + /* get edgel information */ + nr = mxGetM(in[0]); + nc = mxGetN(in[0]); + np = nr * nc; + /*printf("size: %d, %d, %d\n", nc, nr, np); */ + image = mxGetPr(in[0]); + + + /*get subgrid information*/ + + tmp = mxGetData(in[8]); + nrSubgrid = (int)tmp[0]; + + /* printf("image end = %f ", image[np-1]); */ + + tmp = mxGetData(in[9]); + ncSubgrid = (int)tmp[0]; + + if (nrSubgrid* ncSubgrid != mxGetM(in[7])*mxGetN(in[7])) { + mexErrMsgTxt("Error in the size of the subgrid"); + } + subgrid = mxGetData(in[7]); + nW = nrSubgrid * ncSubgrid; + + + + + /* get new index pair */ + if (!mxIsUint32(in[1]) | !mxIsUint32(in[2])) { + mexErrMsgTxt("Index pair shall be of type UINT32"); + } + if (mxGetM(in[2]) * mxGetN(in[2]) != nW + 1) { + mexErrMsgTxt("Wrong index representation"); + } + pi = mxGetData(in[1]); + pj = mxGetData(in[2]); + subpi = mxGetData(in[10]); + + /* create output */ + out[0] = mxCreateSparse(nW,nW,pj[nW],mxREAL); + if (out[0]==NULL) { + mexErrMsgTxt("Not enough memory for the output matrix"); + } + + w = mxGetPr(out[0]); + ir = mxGetIr(out[0]); + jc = mxGetJc(out[0]); + + + rMin = mxGetScalar(in[3]); + sigmaX = mxGetScalar(in[4]); + sigmaIntensite= mxGetScalar(in[5]); + valeurMinW = mxGetScalar(in[6]); + + a1 = 1.0/ (sigmaX*sigmaX); + a2 = 1.0 / (sigmaIntensite*sigmaIntensite ); + + + + /* computation */ + total = 0; + for (j=0; jnp-1)) {printf("badddddd!");} + /* printf("t = %d\n",t); + printf("j = %d\n",j); */ + jc[j] = total; + jx = t / nr; /* col */ + jy = t % nr; /* row */ + /* printf("pj[j+1] = %d\n",pj[j+1]); */ + + for (k=pj[j]; k5000*5000 ) {printf("trouble! [%d,%d]\n",k,(int)subpi[k]);} */ + + w[total] = wij; + + total = total + 1; + + } /* i */ + + + } /* j */ + + jc[nW] = total; +} -- cgit v1.2.2