14 #include "edge/BgDefaults.h"
16 #include <sys/timeb.h>
19 double bgSign(
double x)
26 double factorial(
double num)
30 return (num * factorial(num - 1));
36 int bgSolveCubic(
double a,
double b,
double c,
double d,
double& s1,
double& s2,
double& s3)
46 q = (2*r*r*r)/27.0-(r*s)/3.0+t;
49 R = bgSign(q)*sqrt(fabs(p)/3.0);
50 D = pow(p/3.0,3)+pow(q/2,2);
56 phi = acos(q/(2*R*R*R));
57 s1 = -2*R*cos(phi/3)-r/3;
58 s2 = -2*R*cos(phi/3+2*PI/3)-r/3;
59 s3 = -2*R*cos(phi/3+4*PI/3)-r/3;
65 phi = log(z+sqrt(z*z-1));
66 s1 = -2*R*cosh(phi/3)-r/3;
73 phi = log(z+sqrt(z*z+1));
74 s1 = -2*R*sinh(phi/3)-r/3;
83 inline int bgRound(
double in_x)
85 return int(floor(in_x + 0.5));
88 inline int bgRoundSign(
double in_x)
92 return ((
int) (in_x + 0.5));
96 return ((
int) (in_x - 0.5));
100 void bgSort(
double* ra,
int nVec)
102 unsigned long n, l, ir, i, j;
131 if (j<ir && ra[j-1]<ra[j+1-1])
148 double bgMedian(
double* vec,
int nVec,
double rank)
151 int krank = int(floor(rank*nVec));
157 double bgMedianToSigmaGaussian(
double med)
159 return med * 1.482602219;
162 int write_pgm_image(
const char *outfilename,
unsigned char *image,
int rows,
163 int cols,
char *comment,
int maxval)
172 if(outfilename == NULL) fp = stdout;
174 if((fp = fopen(outfilename,
"wb")) == NULL){
175 fprintf(stderr,
"Error writing the file %s in write_pgm_image().\n",
185 fprintf(fp,
"P5\n%d %d\n", cols, rows);
187 if(strlen(comment) <= 70) fprintf(fp,
"# %s\n", comment);
188 fprintf(fp,
"%d\n", maxval);
194 if(rows != fwrite(image, cols, rows, fp)){
195 fprintf(stderr,
"Error writing the image data in write_pgm_image().\n");
196 if(fp != stdout) fclose(fp);
200 if(fp != stdout) fclose(fp);
205 void write_MATLAB_ASCII(
char *filename,
float *data,
int rows,
int cols)
207 FILE *fp = fopen(filename,
"wb");
209 for(i = 0; i < rows; i++)
211 for(j = 0; j < cols-1; j++)
213 fprintf(fp,
"%10.6f ", data[i*rows+j]);
215 fprintf(fp,
"%10.6f\n", data[i*rows+cols-1]);
253 bgLog(
"timer start...\n");
258 unsigned long seconds, milliseconds;
259 seconds = (timeend-timestart)/CLOCKS_PER_SEC;
260 milliseconds = ((100*(timeend-timestart))/CLOCKS_PER_SEC) - 100*seconds;
261 bgLog(
"timer stop, elapsed %d.%d seconds.\n", seconds, milliseconds);
277 void bgZoomIn(
unsigned char **dest,
unsigned char *src,
int w,
int h,
int zconst,
bool interpolate)
281 if((!(*dest))||(!src)||(zconst < 1))
287 memcpy(*dest, src, 3*w*h*
sizeof(
unsigned char));
299 unsigned char *dptr = (*dest);
301 int i, j, x, y, dp, offset, factor, index;
304 if(factor = w%zconst)
306 for(j=0; j<(h-zconst); j+=zconst)
308 for(i=0; i<(w-zconst); i+=zconst)
311 for(y=0; y<zconst; y++)
313 for(x=0; x<zconst; x++)
316 dptr[dp+offset ] = src[index ];
317 dptr[dp+offset+1] = src[index+1];
318 dptr[dp+offset+2] = src[index+2];
327 for(y=0; y<(zconst-factor-1); y++)
329 for(x=0; x<(zconst-factor-1); x++)
332 dptr[dp+offset ] = src[index ];
333 dptr[dp+offset+1] = src[index+1];
334 dptr[dp+offset+2] = src[index+2];
345 for(j=0; j<(h-zconst); j+=zconst)
347 for(i=0; i<(w); i+=zconst)
350 for(y=0; y<zconst; y++)
352 for(x=0; x<zconst; x++)
355 dptr[dp+offset ] = src[index ];
356 dptr[dp+offset+1] = src[index+1];
357 dptr[dp+offset+2] = src[index+2];
369 dp = 3*(h-zconst)*(w);
370 for(i=0; i<(w); i+=zconst)
372 for(y=0; y<(zconst-factor); y++)
374 for(x=0; x<(zconst-factor); x++)
377 dptr[dp+offset ] = src[index ];
378 dptr[dp+offset+1] = src[index+1];
379 dptr[dp+offset+2] = src[index+2];
402 void bgZoomOut(
unsigned char **dest,
unsigned char *src,
int w,
int h,
int zconst,
bool interpolate)
406 if((!(*dest))||(!src)||(zconst <= 1))
413 unsigned char *dptr = (*dest);
417 for(j=0; j<h; j+=zconst)
419 for(i=0; i<w; i+=zconst)
422 dptr[index ] = src[dp ];
423 dptr[index+1] = src[dp+1];
424 dptr[index+2] = src[dp+2];
443 void BgAddExtension(
char **filename,
char *label)
446 char *new_filename =
new char [strlen(*filename) + strlen(label) + 1], ext[5];
449 strcpy(new_filename, *filename);
452 char *pdest = strchr(new_filename,
'.');
457 strcpy(pdest, label);
458 strcat(new_filename, ext);
462 (*filename) = new_filename;