| 19 |
|
double mhistot; /* modified histogram total */ |
| 20 |
|
double cumf[HISTRES+1]; /* cumulative distribution function */ |
| 21 |
|
|
| 22 |
+ |
static double centprob(int x, int y); |
| 23 |
+ |
static void mkcumf(void); |
| 24 |
+ |
static double cf(double b); |
| 25 |
+ |
static double BLw(double Lw); |
| 26 |
+ |
#if ADJ_VEIL |
| 27 |
+ |
static void mkcrfimage(void); |
| 28 |
+ |
#endif |
| 29 |
|
|
| 30 |
< |
getfixations(fp) /* load fixation history list */ |
| 31 |
< |
FILE *fp; |
| 30 |
> |
|
| 31 |
> |
|
| 32 |
> |
void |
| 33 |
> |
getfixations( /* load fixation history list */ |
| 34 |
> |
FILE *fp |
| 35 |
> |
) |
| 36 |
|
{ |
| 37 |
|
#define FIXHUNK 128 |
| 38 |
|
RESOLU fvres; |
| 39 |
|
int pos[2]; |
| 40 |
< |
register int px, py, i; |
| 40 |
> |
int px, py, i; |
| 41 |
|
/* initialize our resolution struct */ |
| 42 |
|
if ((fvres.rt=inpres.rt)&YMAJOR) { |
| 43 |
|
fvres.xr = fvxr; |
| 92 |
|
} |
| 93 |
|
|
| 94 |
|
|
| 95 |
< |
gethisto(fp) /* load precomputed luminance histogram */ |
| 96 |
< |
FILE *fp; |
| 95 |
> |
void |
| 96 |
> |
gethisto( /* load precomputed luminance histogram */ |
| 97 |
> |
FILE *fp |
| 98 |
> |
) |
| 99 |
|
{ |
| 100 |
|
double histo[MAXPREHIST]; |
| 101 |
|
double histart, histep; |
| 102 |
< |
double l, b, lastb, w; |
| 102 |
> |
double b, lastb, w; |
| 103 |
|
int n; |
| 104 |
< |
register int i; |
| 104 |
> |
int i; |
| 105 |
|
/* load data */ |
| 106 |
|
for (i = 0; i < MAXPREHIST && |
| 107 |
|
fscanf(fp, "%lf %lf", &b, &histo[i]) == 2; i++) { |
| 162 |
|
} |
| 163 |
|
|
| 164 |
|
|
| 165 |
< |
double |
| 166 |
< |
centprob(x, y) /* center-weighting probability function */ |
| 167 |
< |
int x, y; |
| 165 |
> |
static double |
| 166 |
> |
centprob( /* center-weighting probability function */ |
| 167 |
> |
int x, |
| 168 |
> |
int y |
| 169 |
> |
) |
| 170 |
|
{ |
| 171 |
|
double xr, yr, p; |
| 172 |
|
/* paraboloid, 0 at 90 degrees from center */ |
| 177 |
|
} |
| 178 |
|
|
| 179 |
|
|
| 180 |
< |
comphist() /* create foveal sampling histogram */ |
| 180 |
> |
void |
| 181 |
> |
comphist(void) /* create foveal sampling histogram */ |
| 182 |
|
{ |
| 183 |
|
double l, b, w, lwmin, lwmax; |
| 184 |
< |
register int x, y; |
| 184 |
> |
int x, y; |
| 185 |
|
/* check for precalculated histogram */ |
| 186 |
|
if (what2do&DO_PREHIST) |
| 187 |
|
return; |
| 190 |
|
for (y = 0; y < fvyr; y++) |
| 191 |
|
for (x = 0; x < fvxr; x++) { |
| 192 |
|
l = plum(fovscan(y)[x]); |
| 193 |
< |
if (l < lwmin) lwmin = l; |
| 194 |
< |
if (l > lwmax) lwmax = l; |
| 193 |
> |
if ((l < lwmin) & (l > LMIN)) lwmin = l; |
| 194 |
> |
if ((l > lwmax) & (l < LMAX)) lwmax = l; |
| 195 |
|
} |
| 196 |
|
lwmax *= 1.01; |
| 197 |
|
if (lwmax > LMAX) |
| 246 |
|
} |
| 247 |
|
|
| 248 |
|
|
| 249 |
< |
mkcumf() /* make cumulative distribution function */ |
| 249 |
> |
static void |
| 250 |
> |
mkcumf(void) /* make cumulative distribution function */ |
| 251 |
|
{ |
| 252 |
< |
register int i; |
| 253 |
< |
register double sum; |
| 252 |
> |
int i; |
| 253 |
> |
double sum; |
| 254 |
|
|
| 255 |
|
mhistot = 0.; /* compute modified total */ |
| 256 |
|
for (i = 0; i < HISTRES; i++) |
| 265 |
|
} |
| 266 |
|
|
| 267 |
|
|
| 268 |
< |
double |
| 269 |
< |
cf(b) /* return cumulative function at b */ |
| 270 |
< |
double b; |
| 268 |
> |
static double |
| 269 |
> |
cf( /* return cumulative function at b */ |
| 270 |
> |
double b |
| 271 |
> |
) |
| 272 |
|
{ |
| 273 |
|
double x; |
| 274 |
< |
register int i; |
| 274 |
> |
int i; |
| 275 |
|
|
| 276 |
|
i = x = HISTRES*(b - bwmin)/(bwmax - bwmin); |
| 277 |
|
x -= (double)i; |
| 279 |
|
} |
| 280 |
|
|
| 281 |
|
|
| 282 |
< |
double |
| 283 |
< |
BLw(Lw) /* map world luminance to display brightness */ |
| 284 |
< |
double Lw; |
| 282 |
> |
static double |
| 283 |
> |
BLw( /* map world luminance to display brightness */ |
| 284 |
> |
double Lw |
| 285 |
> |
) |
| 286 |
|
{ |
| 287 |
|
double b; |
| 288 |
|
|
| 295 |
|
|
| 296 |
|
|
| 297 |
|
double |
| 298 |
< |
htcontrs(La) /* human threshold contrast sensitivity, dL(La) */ |
| 299 |
< |
double La; |
| 298 |
> |
htcontrs( /* human threshold contrast sensitivity, dL(La) */ |
| 299 |
> |
double La |
| 300 |
> |
) |
| 301 |
|
{ |
| 302 |
|
double l10La, l10dL; |
| 303 |
|
/* formula taken from Ferwerda et al. [SG96] */ |
| 318 |
|
|
| 319 |
|
|
| 320 |
|
double |
| 321 |
< |
clampf(Lw) /* histogram clamping function */ |
| 322 |
< |
double Lw; |
| 321 |
> |
clampf( /* histogram clamping function */ |
| 322 |
> |
double Lw |
| 323 |
> |
) |
| 324 |
|
{ |
| 325 |
|
double bLw, ratio; |
| 326 |
|
|
| 330 |
|
} |
| 331 |
|
|
| 332 |
|
double |
| 333 |
< |
crfactor(Lw) /* contrast reduction factor */ |
| 334 |
< |
double Lw; |
| 333 |
> |
crfactor( /* contrast reduction factor */ |
| 334 |
> |
double Lw |
| 335 |
> |
) |
| 336 |
|
{ |
| 337 |
|
int i = HISTRES*(Bl(Lw) - bwmin)/(bwmax - bwmin); |
| 338 |
|
double bLw, ratio, Tdb; |
| 349 |
|
|
| 350 |
|
|
| 351 |
|
#if ADJ_VEIL |
| 352 |
< |
mkcrfimage() /* compute contrast reduction factor image */ |
| 352 |
> |
static void |
| 353 |
> |
mkcrfimage(void) /* compute contrast reduction factor image */ |
| 354 |
|
{ |
| 355 |
|
int i; |
| 356 |
|
float *crfptr; |
| 369 |
|
|
| 370 |
|
|
| 371 |
|
int |
| 372 |
< |
mkbrmap() /* make dynamic range map */ |
| 372 |
> |
mkbrmap(void) /* make dynamic range map */ |
| 373 |
|
{ |
| 374 |
|
double Tdb, b, s; |
| 375 |
|
double ceiling, trimmings; |
| 376 |
< |
register int i; |
| 376 |
> |
int i; |
| 377 |
|
/* copy initial histogram */ |
| 378 |
|
memcpy((void *)modhist, (void *)bwhist, sizeof(modhist)); |
| 379 |
|
s = (bwmax - bwmin)/HISTRES; /* s is delta b */ |
| 401 |
|
} |
| 402 |
|
|
| 403 |
|
|
| 404 |
< |
scotscan(scan, xres) /* apply scotopic color sensitivity loss */ |
| 405 |
< |
COLOR *scan; |
| 406 |
< |
int xres; |
| 404 |
> |
void |
| 405 |
> |
scotscan( /* apply scotopic color sensitivity loss */ |
| 406 |
> |
COLOR *scan, |
| 407 |
> |
int xres |
| 408 |
> |
) |
| 409 |
|
{ |
| 410 |
|
COLOR ctmp; |
| 411 |
|
double incolor, b, Lw; |
| 412 |
< |
register int i; |
| 412 |
> |
int i; |
| 413 |
|
|
| 414 |
|
for (i = 0; i < xres; i++) { |
| 415 |
|
Lw = plum(scan[i]); |
| 434 |
|
} |
| 435 |
|
|
| 436 |
|
|
| 437 |
< |
mapscan(scan, xres) /* apply tone mapping operator to scanline */ |
| 438 |
< |
COLOR *scan; |
| 439 |
< |
int xres; |
| 437 |
> |
void |
| 438 |
> |
mapscan( /* apply tone mapping operator to scanline */ |
| 439 |
> |
COLOR *scan, |
| 440 |
> |
int xres |
| 441 |
> |
) |
| 442 |
|
{ |
| 443 |
|
double mult, Lw, b; |
| 444 |
< |
register int x; |
| 444 |
> |
int x; |
| 445 |
|
|
| 446 |
|
for (x = 0; x < xres; x++) { |
| 447 |
|
Lw = plum(scan[x]); |
| 457 |
|
} |
| 458 |
|
|
| 459 |
|
|
| 460 |
< |
putmapping(fp) /* put out mapping function */ |
| 461 |
< |
FILE *fp; |
| 460 |
> |
void |
| 461 |
> |
putmapping( /* put out mapping function */ |
| 462 |
> |
FILE *fp |
| 463 |
> |
) |
| 464 |
|
{ |
| 465 |
|
double b, s; |
| 466 |
< |
register int i; |
| 466 |
> |
int i; |
| 467 |
|
double wlum, sf, dlum; |
| 468 |
|
|
| 469 |
|
sf = scalef*inpexp; |