1 |
|
#ifndef lint |
2 |
|
static const char RCSid[] = "$Id$"; |
3 |
|
#endif |
4 |
< |
/* EVALGLARE V2.00 |
4 |
> |
/* EVALGLARE V2.10 |
5 |
|
* Evalglare Software License, Version 2.0 |
6 |
|
* |
7 |
< |
* Copyright (c) 1995 - 2016 Fraunhofer ISE, EPFL. |
7 |
> |
* Copyright (c) 1995 - 2020 Fraunhofer ISE, EPFL. |
8 |
|
* All rights reserved. |
9 |
|
* |
10 |
|
* |
317 |
|
/* evalglare.c, v2.01 2016/11/16 change of -2 option (now -2 dir_illum). External provision of the direct illuminance necessary, since the sun interpolation of daysim is causing problems in calculation of the background luminance. |
318 |
|
*/ |
319 |
|
/* evalglare.c, v2.02 2017/02/28 change of warning message, when invalid exposure setting is found. Reason: tab removal is not in all cases the right measure - it depends which tool caused the invalid exposure entry */ |
320 |
< |
|
320 |
> |
|
321 |
> |
/* evalglare.c, v2.03 2017/08/04 ad of -O option - disk replacement by providing luminance, not documented |
322 |
> |
*/ |
323 |
> |
|
324 |
> |
/* evalglare.c, v2.04 2017/08/04 adding -q option: use of Ev/pi as background luminance. not documented. no combination with -n option!!! |
325 |
> |
*/ |
326 |
> |
|
327 |
> |
/* evalglare.c, v2.05 2018/08/28 change of the -q option for the choice of the background luminance calculation mode: 0: CIE method (Ev-Edir)/pi, 1: mathematical correct average background luminance, 2: Ev/pi. |
328 |
> |
change of default options: |
329 |
> |
- cosinus weighted calculation of the background luminance (according to CIE) is now default. |
330 |
> |
- absolute threshold for the glare source detection is now default (2000cd/m2), based on study of C. Pierson |
331 |
> |
*/ |
332 |
> |
|
333 |
> |
/* evalglare.c, v2.06 2018/08/29 |
334 |
> |
change of default value of multiplier b to 5.0, if task options (-t or -T ) are activated AND -b NOT used. To be downward compatible when using the task method. |
335 |
> |
*/ |
336 |
> |
|
337 |
> |
/* evalglare.c, v2.07 2018/11/17 |
338 |
> |
bugfix: correction of error in the equations of PGSV_con and PGSV_sat |
339 |
> |
all three PGSV equations are calculated now |
340 |
> |
illuminance from the masking area (E_v_mask) is also printed |
341 |
> |
bugfix: in VCPs error fuction equation, value of 6.347 replaced by 6.374 |
342 |
> |
*/ |
343 |
> |
|
344 |
> |
/* evalglare.c, v2.08 2018/11/27 |
345 |
> |
bugfix: checkroutine for same image size for the masking corrected |
346 |
> |
*/ |
347 |
> |
|
348 |
> |
/* evalglare.c, v2.09 2019/01/18 |
349 |
> |
calculate "illuminance-contribution of zones" |
350 |
> |
-switch to turn off low-light correction: 4 |
351 |
> |
*/ |
352 |
> |
|
353 |
> |
/* evalglare.c, v2.10 2019/07/30, 2020/06/25 |
354 |
> |
-add multiimage-mode for annual glare evaluation -Q |
355 |
> |
-extra output for multiimage mode |
356 |
> |
2020/06/22 - added Ev contribution from each glare source as output to the multiimage mode |
357 |
> |
-switch for correction modes (-C), value of 0 switches off all corrections |
358 |
> |
*/ |
359 |
> |
|
360 |
|
#define EVALGLARE |
361 |
|
#define PROGNAME "evalglare" |
362 |
< |
#define VERSION "2.02 release 28.02.2017 by EPFL, J.Wienold" |
362 |
> |
#define VERSION "2.10 release 25.06.2020 by EPFL, J.Wienold" |
363 |
|
#define RELEASENAME PROGNAME " " VERSION |
364 |
|
|
365 |
|
|
770 |
|
void split_pixel_from_gs(pict * p, int x, int y, int new_gsn, int uniform_gs, double u_r, double u_g , double u_b) |
771 |
|
{ |
772 |
|
int old_gsn, icol; |
773 |
< |
double old_av_posx, old_av_posy, old_av_lum, old_omega, act_omega, |
773 |
> |
double old_av_posx, old_av_posy, old_av_lum, old_omega, act_omega, delta_E, |
774 |
|
new_omega, act_lum; |
775 |
|
|
776 |
|
|
782 |
|
old_av_posx = pict_get_av_posx(p, old_gsn); |
783 |
|
old_av_posy = pict_get_av_posy(p, old_gsn); |
784 |
|
old_omega = pict_get_av_omega(p, old_gsn); |
785 |
+ |
|
786 |
+ |
|
787 |
+ |
|
788 |
|
|
789 |
|
new_omega = old_omega - act_omega; |
790 |
|
pict_get_av_omega(p, old_gsn) = new_omega; |
802 |
|
|
803 |
|
add_pixel_to_gs(p, x, y, new_gsn); |
804 |
|
|
805 |
+ |
|
806 |
+ |
|
807 |
+ |
|
808 |
|
/* color pixel of new gs */ |
809 |
|
|
810 |
|
/* icol = setglcolor(p, x, y, new_gsn, uniform_gs, u_r, u_g , u_b); */ |
1217 |
|
{ |
1218 |
|
float vcp; |
1219 |
|
|
1220 |
< |
vcp = 50 * erf((6.347 - 1.3227 * log(dgr)) / 1.414213562373) + 50; |
1220 |
> |
vcp = 50 * erf((6.374 - 1.3227 * log(dgr)) / 1.414213562373) + 50; |
1221 |
|
if (dgr > 750) { |
1222 |
|
vcp = 0; |
1223 |
|
} |
1388 |
|
return cgi; |
1389 |
|
} |
1390 |
|
|
1391 |
< |
/* subroutine for the calculation of the PGSV; is only applied, when masking is done, since it refers only to the window. Important: masking area must be the window! */ |
1392 |
< |
float get_pgsv(double E_v, double E_mask,double omega_mask,double lum_mask_av) |
1391 |
> |
|
1392 |
> |
|
1393 |
> |
/* subroutine for the calculation of the PGSV_con; is only applied, when masking is done, since it refers only to the window. Important: masking area must be the window! */ |
1394 |
> |
float get_pgsv_con(double E_v, double E_mask,double omega_mask,double lum_mask_av, double Lavg) |
1395 |
|
{ |
1396 |
< |
float pgsv; |
1396 |
> |
float pgsv_con; |
1397 |
|
double Lb; |
1398 |
|
|
1399 |
< |
Lb = (E_v-E_mask)/1.414213562373; |
1399 |
> |
/* Lb = (E_v-E_mask)/3.14159265359; */ |
1400 |
> |
/* Lb = (2*E_v-lum_mask_av*omega_mask)/(2*3.14159265359-omega_mask); */ |
1401 |
> |
Lb = (2*3.14159265359*Lavg-lum_mask_av*omega_mask)/(2*3.14159265359-omega_mask); |
1402 |
|
|
1354 |
– |
pgsv =3.2*log10(lum_mask_av)-0.64*log10(omega_mask)+(0.79*log10(omega_mask)-0.61)*log10(Lb)-8.2 ; |
1403 |
|
|
1404 |
+ |
pgsv_con =3.2*log10(lum_mask_av)-0.64*log10(omega_mask)+(0.79*log10(omega_mask)-0.61)*log10(Lb)-8.2 ; |
1405 |
|
|
1406 |
< |
return pgsv; |
1406 |
> |
|
1407 |
> |
return pgsv_con; |
1408 |
|
} |
1409 |
|
|
1410 |
|
/* subroutine for the calculation of the PGSV_saturation; is only applied, when masking is done, since it refers only to the window. Important: masking area must be the window! */ |
1412 |
|
{ |
1413 |
|
float pgsv_sat; |
1414 |
|
|
1415 |
< |
pgsv_sat =3.3-(0.57+3.3)/pow((1+E_v/1.414213562373/1250),1.7); |
1415 |
> |
pgsv_sat =3.3-(0.57+3.3)/(1+pow(E_v/3.14159265359/1250,1.7)); |
1416 |
|
|
1417 |
|
|
1418 |
|
return pgsv_sat; |
1419 |
|
} |
1420 |
|
|
1421 |
+ |
/* subroutine for the calculation of the PGSV; is only applied, when masking is done, since it refers only to the window. Important: masking area must be the window! */ |
1422 |
|
|
1423 |
+ |
float get_pgsv(double E_v, double E_mask,double omega_mask,double lum_mask_av,double Ltask, double Lavg) |
1424 |
+ |
{ |
1425 |
+ |
float pgsv; |
1426 |
+ |
double Lb; |
1427 |
|
|
1428 |
+ |
/* Lb = (E_v-E_mask)/3.14159265359; */ |
1429 |
+ |
/* Lb = (2*E_v-lum_mask_av*omega_mask)/(2*3.14159265359-omega_mask); */ |
1430 |
+ |
Lb = (2*3.14159265359*Lavg-lum_mask_av*omega_mask)/(2*3.14159265359-omega_mask); |
1431 |
+ |
|
1432 |
+ |
if (Lb==0.0 ) { |
1433 |
+ |
fprintf(stderr, " warning: Background luminance is 0 or masking area = full image! pgsv cannot be calculated (set to -99)!!\n"); |
1434 |
+ |
pgsv=-99; |
1435 |
+ |
}else{ |
1436 |
+ |
if ( (lum_mask_av/Lb) > (E_v/(3.14159265359*Ltask))) { |
1437 |
+ |
pgsv=get_pgsv_con(E_v,E_mask,omega_mask,lum_mask_av, Lavg); |
1438 |
+ |
}else{ |
1439 |
+ |
pgsv=get_pgsv_sat(E_v) ; |
1440 |
+ |
}} |
1441 |
+ |
return pgsv; |
1442 |
|
|
1443 |
+ |
} |
1444 |
+ |
|
1445 |
+ |
|
1446 |
+ |
|
1447 |
|
#ifdef EVALGLARE |
1448 |
|
|
1449 |
|
|
1453 |
|
|
1454 |
|
int main(int argc, char **argv) |
1455 |
|
{ |
1456 |
< |
#define CLINEMAX 4095 /* memory allocated for command line string */ |
1456 |
> |
#define CLINEMAX 999999999 /* memory allocated for command line string */ |
1457 |
|
pict *p = pict_create(); |
1458 |
|
pict *pm = pict_create(); |
1459 |
< |
int skip_second_scan,calcfast,age_corr,cut_view,cut_view_type,calc_vill, output, detail_out2, x1,y1, fill, yfillmax, yfillmin, |
1460 |
< |
ext_vill, set_lum_max, set_lum_max2, img_corr,x_disk,y_disk,task_color, i_splitstart,zones,act_gsn,splitgs, |
1461 |
< |
i_split, posindex_2, task_lum, checkfile, rval, i, i_max, x, y,x2,y2,x_zone,y_zone, i_z1, i_z2, |
1459 |
> |
pict *pcoeff = pict_create(); |
1460 |
> |
int lowlight,skip_second_scan,calcfast,age_corr,cut_view,cut_view_type,calc_vill, output, detail_out2, x1,y1, fill, yfillmax, yfillmin, |
1461 |
> |
ext_vill, set_lum_max, set_lum_max2, img_corr,x_disk,y_disk,task_color, i_splitstart,zones,act_gsn,splitgs,j,multi_image_mode, |
1462 |
> |
i_split, posindex_2, task_lum, checkfile, rval, i, i_max, x, y,x2,y2,x_zone,y_zone, i_z1, i_z2, thres_activate,num_images,xmap,ymap, |
1463 |
|
igs, actual_igs, lastpixelwas_gs, icol, xt, yt, change,checkpixels, before_igs, sgs, splithigh,uniform_gs,x_max, y_max,y_mid, |
1464 |
< |
detail_out, posindex_picture, non_cos_lb, rx, ry, rmx,rmy,apply_disability,band_calc,band_color,masking,i_mask,no_glaresources,force; |
1465 |
< |
double lum_total_max,age_corr_factor,age,dgp_ext,dgp,low_light_corr,omega_cos_contr, setvalue, lum_ideal, E_v_contr, sigma,om,delta_E, |
1466 |
< |
E_vl_ext, lum_max, new_lum_max, r_center, ugp, ugr_exp, dgi_mod,lum_a, pgsv,E_v_mask,pgsv_sat,angle_disk,dist,n_corner_px,zero_corner_px, |
1464 |
> |
detail_out, posindex_picture, non_cos_lb, rx, ry,lastpixelwas_peak, rmx,rmy,apply_disability,band_calc,band_color,masking,i_mask,no_glaresources,force; |
1465 |
> |
double LUM_replace,lum_total_max,age_corr_factor,age,dgp_ext,dgp,low_light_corr,omega_cos_contr, setvalue, lum_ideal, E_v_contr, sigma,om,delta_E, |
1466 |
> |
E_vl_ext, lum_max, new_lum_max, r_center, ugp, ugr_exp, dgi_mod,lum_a, E_v_mask,angle_disk,dist,n_corner_px,zero_corner_px, |
1467 |
|
search_pix, a1, a2, a3, a4, a5, c3, c1, c2, r_split, max_angle,r_actual,lum_actual,dir_ill, |
1468 |
< |
omegat, sang, E_v, E_v2, E_v_dir, avlum, act_lum, ang, angle_z1, angle_z2,per_95_band,per_75_band,pos, |
1468 |
> |
omegat, sang,Ez1,Ez2, E_v, E_v2, E_v_dir, avlum, act_lum, ang, angle_z1, angle_z2,per_95_band,per_75_band,pos, |
1469 |
|
l_max, lum_backg, lum_backg_cos, omega_sources, lum_sources,per_75_mask,per_95_mask,per_75_z1,per_95_z1,per_75_z2,per_95_z2, |
1470 |
|
lum, lum_source,teta,Lveil_cie,Lveil_cie_sum,disability_thresh,u_r,u_g,u_b,band_angle,band_avlum, |
1471 |
|
lum_mask[1],lum_mask_av,lum_mask_std[1],lum_mask_median[1],omega_mask,bbox[2], |
1473 |
|
lum_z1[1],lum_z1_av,lum_z1_std[1],lum_z1_median[1],omega_z1,bbox_z1[2], |
1474 |
|
lum_z2[1],lum_z2_av,lum_z2_std[1],lum_z2_median[1],omega_z2,bbox_z2[2], |
1475 |
|
lum_pos[1],lum_nopos_median[1],lum_pos_median[1],lum_pos2_median[1],lum_pos_mean,lum_pos2_mean; |
1476 |
< |
float lum_task, lum_thres, dgi, vcp, cgi, ugr, limit, dgr, |
1476 |
> |
float lum_task, lum_thres, dgi, vcp, cgi, ugr, limit, dgr,pgsv ,pgsv_sat,pgsv_con, |
1477 |
|
abs_max, Lveil; |
1478 |
< |
char maskfile[500],file_out[500], file_out2[500], version[500]; |
1478 |
> |
char maskfile[500],file_out[500], file_out2[500], version[500],correction_type[500]; |
1479 |
|
char *cline; |
1480 |
+ |
char** temp_image_name; |
1481 |
+ |
int *x_temp_img, *y_temp_img; |
1482 |
|
VIEW userview = STDVIEW; |
1483 |
|
int gotuserview = 0; |
1484 |
+ |
|
1485 |
|
struct muc_rvar* s_mask; |
1486 |
|
s_mask = muc_rvar_create(); |
1487 |
|
muc_rvar_set_dim(s_mask, 1); |
1516 |
|
muc_rvar_clear(s_posweight2); |
1517 |
|
|
1518 |
|
/*set required user view parameters to invalid values*/ |
1519 |
< |
dir_ill=0.0; |
1519 |
> |
lowlight=1; |
1520 |
> |
multi_image_mode=0; |
1521 |
> |
lastpixelwas_peak=0; |
1522 |
> |
num_images=0; |
1523 |
> |
dir_ill=0.0; |
1524 |
|
delta_E=0.0; |
1525 |
|
no_glaresources=0; |
1526 |
|
n_corner_px=0; |
1542 |
|
lum_band_av = 0.0; |
1543 |
|
omega_band = 0.0; |
1544 |
|
pgsv = 0.0 ; |
1545 |
+ |
pgsv_con = 0.0 ; |
1546 |
|
pgsv_sat = 0.0 ; |
1547 |
|
E_v_mask = 0.0; |
1548 |
+ |
Ez1 = 0.0; |
1549 |
+ |
Ez2 = 0.0; |
1550 |
|
lum_z1_av = 0.0; |
1551 |
|
omega_z1 = 0.0; |
1552 |
|
lum_z2_av = 0.0; |
1586 |
|
omega_cos_contr = 0.0; |
1587 |
|
lum_ideal = 0.0; |
1588 |
|
max_angle = 0.2; |
1589 |
< |
lum_thres = 5.0; |
1589 |
> |
lum_thres = 2000.0; |
1590 |
> |
lum_task = 0.0; |
1591 |
|
task_lum = 0; |
1592 |
|
sgs = 0; |
1593 |
|
splithigh = 1; |
1605 |
|
c1 = 5.87e-05; |
1606 |
|
c2 = 0.092; |
1607 |
|
c3 = 0.159; |
1608 |
< |
non_cos_lb = 1; |
1608 |
> |
non_cos_lb = 0; |
1609 |
|
posindex_2 = 0; |
1610 |
|
task_color = 0; |
1611 |
|
limit = 50000.0; |
1627 |
|
omega_mask=0.0; |
1628 |
|
i_mask=0; |
1629 |
|
actual_igs=0; |
1630 |
+ |
LUM_replace=0; |
1631 |
+ |
thres_activate=0; |
1632 |
|
/* command line for output picture*/ |
1633 |
|
|
1634 |
< |
cline = (char *) malloc(CLINEMAX+1); |
1634 |
> |
cline = (char *) malloc(CLINEMAX+100); |
1635 |
|
cline[0] = '\0'; |
1636 |
|
for (i = 0; i < argc; i++) { |
1637 |
|
/* fprintf(stderr, "%d %d \n",i,strlen(argv[i]));*/ |
1679 |
|
break; |
1680 |
|
case 'b': |
1681 |
|
lum_thres = atof(argv[++i]); |
1682 |
+ |
lum_source =lum_thres; |
1683 |
+ |
thres_activate = 1; |
1684 |
|
break; |
1685 |
|
case 'c': |
1686 |
|
checkfile = 1; |
1769 |
|
strcpy(file_out2, argv[++i]); |
1770 |
|
/* printf("max lum set to %f\n",new_lum_max);*/ |
1771 |
|
break; |
1772 |
+ |
case 'O': |
1773 |
+ |
img_corr = 1; |
1774 |
+ |
set_lum_max2 = 3; |
1775 |
+ |
x_disk = atoi(argv[++i]); |
1776 |
+ |
y_disk = atoi(argv[++i]); |
1777 |
+ |
angle_disk = atof(argv[++i]); |
1778 |
+ |
LUM_replace = atof(argv[++i]); |
1779 |
+ |
strcpy(file_out2, argv[++i]); |
1780 |
+ |
/* printf("max lum set to %f\n",new_lum_max);*/ |
1781 |
+ |
break; |
1782 |
|
|
1783 |
< |
case 'n': |
1783 |
> |
|
1784 |
> |
/* deactivated case 'n': |
1785 |
|
non_cos_lb = 0; |
1786 |
|
break; |
1787 |
+ |
*/ |
1788 |
+ |
case 'q': |
1789 |
+ |
non_cos_lb = atoi(argv[++i]); |
1790 |
+ |
break; |
1791 |
|
|
1792 |
|
case 't': |
1793 |
|
task_lum = 1; |
1852 |
|
/*case 'v': |
1853 |
|
printf("evalglare %s \n",version); |
1854 |
|
exit(1); */ |
1855 |
+ |
case 'C': |
1856 |
+ |
strcpy(correction_type,argv[++i]); |
1857 |
+ |
|
1858 |
+ |
if (!strcmp(correction_type,"l-") ){ |
1859 |
+ |
/* printf("low light off!\n"); */ |
1860 |
+ |
lowlight = 0; } |
1861 |
+ |
if (!strcmp(correction_type,"l+") ){ |
1862 |
+ |
/* printf("low light on!\n"); */ |
1863 |
+ |
lowlight = 1; } |
1864 |
+ |
if (!strcmp(correction_type,"0") ){ |
1865 |
+ |
/* printf("all corrections off!\n"); */ |
1866 |
+ |
lowlight = 0; } |
1867 |
+ |
|
1868 |
+ |
break; |
1869 |
|
|
1870 |
+ |
/*case 'v': |
1871 |
+ |
printf("evalglare %s \n",version); |
1872 |
+ |
exit(1); */ |
1873 |
+ |
|
1874 |
|
case '1': |
1875 |
|
output = 1; |
1876 |
|
break; |
1878 |
|
output = 2; |
1879 |
|
dir_ill = atof(argv[++i]); |
1880 |
|
break; |
1881 |
< |
|
1881 |
> |
case '3': |
1882 |
> |
output = 3; |
1883 |
> |
break; |
1884 |
> |
case '4': |
1885 |
> |
lowlight = 0; |
1886 |
> |
break; |
1887 |
> |
case 'Q': |
1888 |
> |
multi_image_mode=1; |
1889 |
> |
output= 3; |
1890 |
> |
calcfast=1; |
1891 |
> |
num_images =atoi(argv[++i]); |
1892 |
> |
temp_image_name = malloc(sizeof(char*)*num_images); |
1893 |
> |
|
1894 |
> |
x_temp_img=(int *) malloc(sizeof(int) * num_images); |
1895 |
> |
y_temp_img=(int *) malloc(sizeof(int) * num_images); |
1896 |
> |
|
1897 |
> |
|
1898 |
> |
/* iterate through all images and allocate 256 characters to each: */ |
1899 |
> |
for (j = 0; j < num_images; j++) { |
1900 |
> |
temp_image_name[j] = malloc(256*sizeof(char)); |
1901 |
> |
strcpy(temp_image_name[j], argv[++i]); |
1902 |
> |
x_temp_img[j] = atoi(argv[++i]); |
1903 |
> |
y_temp_img[j] = atoi(argv[++i]); |
1904 |
> |
} |
1905 |
> |
|
1906 |
> |
|
1907 |
> |
break; |
1908 |
|
case 'v': |
1909 |
|
if (argv[i][2] == '\0') { |
1910 |
|
printf("%s \n",RELEASENAME); |
1933 |
|
} |
1934 |
|
} |
1935 |
|
|
1936 |
+ |
/* set multiplier for task method to 5, if not specified */ |
1937 |
+ |
|
1938 |
+ |
if ( task_lum == 1 && thres_activate == 0){ |
1939 |
+ |
lum_thres = 5.0; |
1940 |
+ |
} |
1941 |
|
/*fast calculation, if gendgp_profile is used: No Vertical illuminance calculation, only dgp is calculated*/ |
1942 |
|
|
1943 |
|
if (output == 1 && ext_vill == 1 ) { |
2008 |
|
|
2009 |
|
if (masking == 1) { |
2010 |
|
|
2011 |
< |
if (!pict_get_xsize(p)==pict_get_xsize(pm) || !pict_get_ysize(p)==pict_get_ysize(pm)) { |
2011 |
> |
if (pict_get_xsize(p)!=pict_get_xsize(pm) || pict_get_ysize(p)!=pict_get_ysize(pm)) { |
2012 |
|
fprintf(stderr, "error: masking image has other resolution than main image ! \n"); |
2013 |
|
fprintf(stderr, "size must be identical \n"); |
2014 |
|
printf("resolution main image : %dx%d\n",pict_get_xsize(p),pict_get_ysize(p)); |
2043 |
|
|
2044 |
|
} |
2045 |
|
} |
2046 |
< |
|
2046 |
> |
|
2047 |
> |
|
2048 |
|
/* Check task position */ |
2049 |
|
|
2050 |
|
if (task_lum == 1) { |
2068 |
|
pict_get_z1_gsn(p,igs) = 0; |
2069 |
|
pict_get_z2_gsn(p,igs) = 0; |
2070 |
|
|
2071 |
+ |
if (multi_image_mode<1) { |
2072 |
|
|
2073 |
+ |
|
2074 |
|
/* cut out GUTH field of view and exit without glare evaluation */ |
2075 |
|
if (cut_view==2) { |
2076 |
|
if (cut_view_type==1) { |
2239 |
|
lum_pos_mean= lum_pos_mean/sang; |
2240 |
|
lum_pos2_mean= lum_pos2_mean/sang; |
2241 |
|
|
2242 |
< |
if (set_lum_max2 >= 1 && E_v_contr > 0 && (E_vl_ext - E_v) > 0) { |
2242 |
> |
if ((set_lum_max2 >= 1 && E_v_contr > 0 && (E_vl_ext - E_v) > 0 ) || set_lum_max2==3) { |
2243 |
|
|
2244 |
+ |
if (set_lum_max2<3){ |
2245 |
|
lum_ideal = (E_vl_ext - E_v + E_v_contr) / omega_cos_contr; |
2246 |
|
if (set_lum_max2 == 2 && lum_ideal >= 2e9) { |
2247 |
|
printf("warning! luminance of replacement pixels would be larger than 2e9 cd/m2. Value set to 2e9cd/m2!\n") ; |
2252 |
|
} |
2253 |
|
printf("change luminance values!! lum_ideal,setvalue,E_vl_ext,E_v,E_v_contr %f %f %f %f %f\n", |
2254 |
|
lum_ideal, setvalue, E_vl_ext, E_v, E_v_contr); |
2255 |
+ |
}else{setvalue=LUM_replace; |
2256 |
+ |
} |
2257 |
|
|
2258 |
|
|
2259 |
|
for (x = 0; x < pict_get_xsize(p); x++) |
2273 |
|
pict_get_color(p, x, y)[BLU] = |
2274 |
|
setvalue / 179.0; |
2275 |
|
|
2276 |
< |
}else{ if(set_lum_max2 ==2 ) { |
2276 |
> |
}else{ if(set_lum_max2 >1 ) { |
2277 |
|
r_actual =acos(DOT(pict_get_cached_dir(p, x_disk, y_disk), pict_get_cached_dir(p, x, y))) * 2; |
2278 |
|
if (x_disk == x && y_disk==y ) r_actual=0.0; |
2279 |
|
|
2286 |
|
pict_get_color(p, x, y)[BLU] = |
2287 |
|
setvalue / 179.0; |
2288 |
|
|
2289 |
< |
} |
2131 |
< |
|
2132 |
< |
|
2289 |
> |
} |
2290 |
|
} |
2291 |
|
} |
2292 |
|
} |
2359 |
|
|
2360 |
|
/* first glare source scan: find primary glare sources */ |
2361 |
|
for (x = 0; x < pict_get_xsize(p); x++) { |
2362 |
< |
/* lastpixelwas_gs=0; */ |
2362 |
> |
lastpixelwas_gs=0; |
2363 |
> |
/* lastpixelwas_peak=0; */ |
2364 |
|
for (y = 0; y < pict_get_ysize(p); y++) { |
2365 |
|
if (pict_get_hangle(p, x, y, p->view.vdir, p->view.vup, &ang)) { |
2366 |
|
if (pict_is_validpixel(p, x, y)) { |
2370 |
|
lum_total_max=act_lum; |
2371 |
|
} |
2372 |
|
/* speed improvement first scan: when last pixel was glare source, then use this glare source number instead of searching. |
2373 |
< |
has been deactivated with v1.25 |
2373 |
> |
has been deactivated with v1.25, reactivated with v2.10 */ |
2374 |
|
|
2375 |
< |
if (lastpixelwas_gs==0 || search_pix <= 1.0 ) { */ |
2375 |
> |
if (lastpixelwas_gs==0 || search_pix <= 1.0 ) { |
2376 |
|
actual_igs = find_near_pgs(p, x, y, max_angle, 0, igs, 1); |
2377 |
< |
/* }*/ |
2377 |
> |
} |
2378 |
|
if (actual_igs == 0) { |
2379 |
|
igs = igs + 1; |
2380 |
|
pict_new_gli(p); |
2390 |
|
pict_get_gsn(p, x, y) = actual_igs; |
2391 |
|
pict_get_pgs(p, x, y) = 1; |
2392 |
|
add_pixel_to_gs(p, x, y, actual_igs); |
2393 |
< |
/* lastpixelwas_gs=actual_igs; */ |
2393 |
> |
lastpixelwas_gs=actual_igs; |
2394 |
|
|
2395 |
|
} else { |
2396 |
|
pict_get_pgs(p, x, y) = 0; |
2397 |
< |
/* lastpixelwas_gs=0;*/ |
2397 |
> |
lastpixelwas_gs=0; |
2398 |
|
} |
2399 |
|
} |
2400 |
|
} |
2489 |
|
|
2490 |
|
/* extract extremes from glare sources to extra glare source */ |
2491 |
|
if (splithigh == 1 && lum_total_max>limit) { |
2492 |
+ |
/* fprintf(stderr, " split of glare source!\n"); */ |
2493 |
|
|
2494 |
|
r_split = max_angle / 2.0; |
2495 |
|
for (i = 0; i <= i_max; i++) { |
2672 |
|
lum_backg = lum_backg_cos; |
2673 |
|
} |
2674 |
|
|
2675 |
+ |
if (non_cos_lb == 2) { |
2676 |
+ |
lum_backg = E_v / 3.1415927; |
2677 |
+ |
} |
2678 |
+ |
|
2679 |
+ |
|
2680 |
|
/* file writing NOT here |
2681 |
|
if (checkfile == 1) { |
2682 |
|
pict_write(p, file_out); |
2728 |
|
muc_rvar_get_median(s_mask,lum_mask_median); |
2729 |
|
muc_rvar_get_bounding_box(s_mask,bbox); |
2730 |
|
/* PSGV only why masking of window is applied! */ |
2731 |
< |
pgsv = get_pgsv(E_v, E_v_mask, omega_mask, lum_mask_av); |
2731 |
> |
|
2732 |
> |
|
2733 |
> |
if (task_lum == 0 || lum_task == 0.0 ) { |
2734 |
> |
fprintf(stderr, " warning: Task area not set or task luminance=0 ! pgsv cannot be calculated (set to -99)!!\n"); |
2735 |
> |
pgsv = -99; |
2736 |
> |
} else { |
2737 |
> |
pgsv = get_pgsv(E_v, E_v_mask, omega_mask, lum_mask_av,lum_task,avlum); |
2738 |
> |
} |
2739 |
> |
|
2740 |
> |
pgsv_con = get_pgsv_con(E_v, E_v_mask, omega_mask, lum_mask_av,avlum); |
2741 |
|
pgsv_sat =get_pgsv_sat(E_v); |
2742 |
|
|
2743 |
|
if (detail_out == 1) { |
2744 |
|
|
2745 |
< |
printf ("masking:no_pixels,omega,av_lum,median_lum,std_lum,perc_75,perc_95,lum_min,lum_max,pgsv,pgsv_sat: %i %f %f %f %f %f %f %f %f %f %f\n",i_mask,omega_mask,lum_mask_av,lum_mask_median[0],sqrt(lum_mask_std[0]),per_75_mask,per_95_mask,bbox[0],bbox[1],pgsv,pgsv_sat ); |
2745 |
> |
printf ("masking:no_pixels,omega,av_lum,median_lum,std_lum,perc_75,perc_95,lum_min,lum_max,pgsv_con,pgsv_sat,pgsv,Ev_mask: %i %f %f %f %f %f %f %f %f %f %f %f %f\n",i_mask,omega_mask,lum_mask_av,lum_mask_median[0],sqrt(lum_mask_std[0]),per_75_mask,per_95_mask,bbox[0],bbox[1],pgsv_con,pgsv_sat,pgsv,E_v_mask ); |
2746 |
|
|
2747 |
|
} |
2748 |
|
|
2770 |
|
muc_rvar_add_sample(s_z1, lum_z1); |
2771 |
|
omega_z1 += pict_get_omega(p, x, y); |
2772 |
|
lum_z1_av += pict_get_omega(p, x, y)* lum_actual; |
2773 |
+ |
Ez1 += DOT(p->view.vdir, pict_get_cached_dir(p, x, y))* pict_get_omega(p, x, y)* lum_actual; |
2774 |
+ |
|
2775 |
|
setglcolor(p,x,y,1,1 , 0.66, 0.01 ,0.33); |
2776 |
|
/*check if separation gsn already exist */ |
2777 |
|
|
2788 |
|
splitgs=(int)(pict_get_z1_gsn(p,act_gsn)); |
2789 |
|
/* printf("splitgs%i \n",splitgs); */ |
2790 |
|
split_pixel_from_gs(p, x, y, splitgs, uniform_gs, u_r, u_g , u_b); |
2791 |
+ |
/* move direct illuminance contribution into zone -value */ |
2792 |
+ |
delta_E=DOT(p->view.vdir, pict_get_cached_dir(p, x, y))* pict_get_omega(p, x, y)* luminance(pict_get_color(p, x, y)); |
2793 |
+ |
pict_get_Eglare(p,act_gsn ) = pict_get_Eglare(p,act_gsn ) - delta_E; |
2794 |
+ |
pict_get_Eglare(p,igs ) = pict_get_Eglare(p,igs ) + delta_E; |
2795 |
+ |
|
2796 |
+ |
|
2797 |
|
} |
2798 |
|
} |
2799 |
|
/*zone2 */ |
2805 |
|
muc_rvar_add_sample(s_z2, lum_z2); |
2806 |
|
omega_z2 += pict_get_omega(p, x, y); |
2807 |
|
lum_z2_av += pict_get_omega(p, x, y)* lum_actual; |
2808 |
+ |
Ez2 += DOT(p->view.vdir, pict_get_cached_dir(p, x, y))* pict_get_omega(p, x, y)* lum_actual; |
2809 |
|
setglcolor(p,x,y,1,1 , 0.65, 0.33 ,0.02); |
2810 |
|
/* printf("zone 2 x y act_gsn pict_get_z1_gsn(p,act_gsn) pict_get_z2_gsn(p,act_gsn): %i %i %f 1:%f 2:%f \n",x,y,act_gsn,pict_get_z1_gsn(p,act_gsn),pict_get_z2_gsn(p,act_gsn)); |
2811 |
|
*/ if (act_gsn > 0){ |
2820 |
|
splitgs=(int)(pict_get_z2_gsn(p,act_gsn)); |
2821 |
|
/* printf("splitgs %i \n",splitgs);*/ |
2822 |
|
split_pixel_from_gs(p, x, y, splitgs, uniform_gs, u_r, u_g , u_b); |
2823 |
+ |
/* move direct illuminance contribution into zone -value */ |
2824 |
+ |
delta_E=DOT(p->view.vdir, pict_get_cached_dir(p, x, y))* pict_get_omega(p, x, y)* luminance(pict_get_color(p, x, y)); |
2825 |
+ |
pict_get_Eglare(p,act_gsn ) = pict_get_Eglare(p,act_gsn ) - delta_E; |
2826 |
+ |
pict_get_Eglare(p,igs ) = pict_get_Eglare(p,igs ) + delta_E; |
2827 |
+ |
|
2828 |
|
} |
2829 |
|
} |
2830 |
|
|
2851 |
|
muc_rvar_get_bounding_box(s_z1,bbox_z1); |
2852 |
|
if (detail_out == 1) { |
2853 |
|
|
2854 |
< |
printf ("zoning:z1_omega,z1_av_lum,z1_median_lum,z1_std_lum,z1_perc_75,z1_perc_95,z1_lum_min,z1_lum_max: %f %f %f %f %f %f %f %f\n",omega_z1,lum_z1_av,lum_z1_median[0],sqrt(lum_z1_std[0]),per_75_z1,per_95_z1,bbox_z1[0],bbox_z1[1] ); |
2854 |
> |
printf ("zoning:z1_omega,z1_av_lum,z1_median_lum,z1_std_lum,z1_perc_75,z1_perc_95,z1_lum_min,z1_lum_max,Ez1: %f %f %f %f %f %f %f %f %f\n",omega_z1,lum_z1_av,lum_z1_median[0],sqrt(lum_z1_std[0]),per_75_z1,per_95_z1,bbox_z1[0],bbox_z1[1],Ez1 ); |
2855 |
|
|
2856 |
|
if (zones == 2 ) { |
2857 |
|
|
2858 |
< |
printf ("zoning:z2_omega,z2_av_lum,z2_median_lum,z2_std_lum,z2_perc_75,z2_perc_95,z2_lum_min,z2_lum_max: %f %f %f %f %f %f %f %f\n",omega_z2,lum_z2_av,lum_z2_median[0],sqrt(lum_z2_std[0]),per_75_z2,per_95_z2,bbox_z2[0],bbox_z2[1] ); |
2858 |
> |
printf ("zoning:z2_omega,z2_av_lum,z2_median_lum,z2_std_lum,z2_perc_75,z2_perc_95,z2_lum_min,z2_lum_max,Ez1: %f %f %f %f %f %f %f %f %f\n",omega_z2,lum_z2_av,lum_z2_median[0],sqrt(lum_z2_std[0]),per_75_z2,per_95_z2,bbox_z2[0],bbox_z2[1],Ez2 ); |
2859 |
|
} } |
2860 |
|
|
2861 |
|
} |
2868 |
|
} |
2869 |
|
} |
2870 |
|
no_glaresources=i; |
2871 |
< |
|
2871 |
> |
/*printf("%i",no_glaresources );*/ |
2872 |
|
/* glare sources */ |
2873 |
< |
if (detail_out == 1) { |
2873 |
> |
if (detail_out == 1 && output != 3) { |
2874 |
|
|
2875 |
|
printf |
2876 |
|
("%i No pixels x-pos y-pos L_s Omega_s Posindx L_b L_t E_vert Edir Max_Lum Sigma xdir ydir zdir Eglare_cie Lveil_cie teta glare_zone\n", |
2916 |
|
} |
2917 |
|
} |
2918 |
|
|
2919 |
+ |
if ( output != 3) { |
2920 |
|
|
2733 |
– |
|
2921 |
|
/* calculation of indicees */ |
2922 |
|
|
2923 |
|
/* check vertical illuminance range */ |
2930 |
|
dgp = |
2931 |
|
get_dgp(p, E_v2, igs, a1, a2, a3, a4, a5, c1, c2, c3, posindex_2); |
2932 |
|
/* low light correction */ |
2933 |
+ |
if (lowlight ==1) { |
2934 |
|
if (E_v < 1000) { |
2935 |
|
low_light_corr=1.0*exp(0.024*E_v-4)/(1+exp(0.024*E_v-4));} else {low_light_corr=1.0 ;} |
2936 |
|
dgp =low_light_corr*dgp; |
2937 |
< |
|
2937 |
> |
} |
2938 |
|
/* age correction */ |
2939 |
|
|
2940 |
|
if (age_corr == 1) { |
3047 |
|
printf("%f\n", dgp); |
3048 |
|
} |
3049 |
|
} |
3050 |
+ |
} |
3051 |
|
|
3052 |
+ |
}else{ |
3053 |
+ |
/* only multiimagemode */ |
3054 |
+ |
|
3055 |
+ |
|
3056 |
+ |
for (j = 0; j < num_images; j++) { |
3057 |
+ |
|
3058 |
+ |
|
3059 |
+ |
/* loop over temporal images */ |
3060 |
+ |
|
3061 |
+ |
pict_read(pcoeff,temp_image_name[j] ); |
3062 |
+ |
|
3063 |
+ |
/*printf ("num_img:%i x-size:%i xpos:%i y-size: %i ypos %i bigimg-xsize %i %i ",num_images,pict_get_xsize(pcoeff),x_temp_img[j],pict_get_ysize(pcoeff),y_temp_img[j],pict_get_xsize(p),pict_get_ysize(p)); |
3064 |
+ |
*/ |
3065 |
+ |
|
3066 |
+ |
/* copy luminance value into big image and remove glare sources*/ |
3067 |
+ |
for (x = 0; x < pict_get_xsize(pcoeff); x++) { |
3068 |
+ |
for (y = 0; y < pict_get_ysize(pcoeff); y++) { |
3069 |
+ |
xmap=x_temp_img[j]+x-1; |
3070 |
+ |
ymap=y_temp_img[j]+y-1; |
3071 |
+ |
if (xmap <0) { xmap=0;} |
3072 |
+ |
if (ymap <0) { ymap=0;} |
3073 |
+ |
|
3074 |
+ |
pict_get_color(p, xmap, ymap)[RED] = pict_get_color(pcoeff, x, y)[RED]; |
3075 |
+ |
pict_get_color(p, xmap, ymap)[GRN] = pict_get_color(pcoeff, x, y)[GRN]; |
3076 |
+ |
pict_get_color(p, xmap, ymap)[BLU] = pict_get_color(pcoeff, x, y)[BLU]; |
3077 |
+ |
pict_get_gsn(p, xmap, ymap) = 0; |
3078 |
+ |
pict_get_pgs(p, xmap, ymap) = 0; |
3079 |
+ |
}} |
3080 |
+ |
|
3081 |
+ |
actual_igs =0; |
3082 |
+ |
|
3083 |
+ |
/* first glare source scan: find primary glare sources */ |
3084 |
+ |
for (x = 0; x < pict_get_xsize(pcoeff); x++) { |
3085 |
+ |
lastpixelwas_gs=0; |
3086 |
+ |
/* lastpixelwas_peak=0; */ |
3087 |
+ |
for (y = 0; y < pict_get_ysize(pcoeff); y++) { |
3088 |
+ |
xmap=x_temp_img[j]+x; |
3089 |
+ |
ymap=y_temp_img[j]+y; |
3090 |
+ |
if (pict_get_hangle(p, xmap, ymap, p->view.vdir, p->view.vup, &ang)) { |
3091 |
+ |
if (pict_is_validpixel(p, xmap, ymap)) { |
3092 |
+ |
act_lum = luminance(pict_get_color(p, xmap, ymap)); |
3093 |
+ |
if (act_lum > lum_source) { |
3094 |
+ |
if (act_lum >lum_total_max) { |
3095 |
+ |
lum_total_max=act_lum; |
3096 |
+ |
} |
3097 |
+ |
|
3098 |
+ |
if (lastpixelwas_gs==0 || search_pix <= 1.0 ) { |
3099 |
+ |
actual_igs = find_near_pgs(p, xmap, ymap, max_angle, 0, igs, 1); |
3100 |
+ |
} |
3101 |
+ |
if (actual_igs == 0) { |
3102 |
+ |
igs = igs + 1; |
3103 |
+ |
pict_new_gli(p); |
3104 |
+ |
pict_get_Eglare(p,igs) = 0.0; |
3105 |
+ |
/* not necessary here pict_get_lum_min(p, igs) = HUGE_VAL; |
3106 |
+ |
pict_get_Eglare(p,igs) = 0.0; |
3107 |
+ |
pict_get_Dglare(p,igs) = 0.0; |
3108 |
+ |
pict_get_z1_gsn(p,igs) = 0; |
3109 |
+ |
pict_get_z2_gsn(p,igs) = 0; */ |
3110 |
+ |
actual_igs = igs; |
3111 |
+ |
|
3112 |
+ |
} |
3113 |
+ |
pict_get_gsn(p, xmap, ymap) = actual_igs; |
3114 |
+ |
pict_get_pgs(p, xmap, ymap) = 1; |
3115 |
+ |
add_pixel_to_gs(p, xmap, ymap, actual_igs); |
3116 |
+ |
lastpixelwas_gs=actual_igs; |
3117 |
+ |
|
3118 |
+ |
|
3119 |
+ |
|
3120 |
+ |
delta_E=DOT(p->view.vdir, pict_get_cached_dir(p, xmap, ymap))* pict_get_omega(p, xmap, ymap)* luminance(pict_get_color(p, xmap, ymap)); |
3121 |
+ |
pict_get_Eglare(p,actual_igs ) = pict_get_Eglare(p,actual_igs ) + delta_E; |
3122 |
+ |
|
3123 |
+ |
|
3124 |
+ |
|
3125 |
+ |
|
3126 |
+ |
} else { |
3127 |
+ |
pict_get_pgs(p, xmap, ymap) = 0; |
3128 |
+ |
lastpixelwas_gs=0; |
3129 |
+ |
} |
3130 |
+ |
} |
3131 |
+ |
} |
3132 |
+ |
} |
3133 |
+ |
} |
3134 |
+ |
|
3135 |
+ |
|
3136 |
+ |
/* here should be peak extraction */ |
3137 |
+ |
i_max=igs; |
3138 |
+ |
r_split = max_angle / 2.0; |
3139 |
+ |
for (i = 0; i <= i_max; i++) { |
3140 |
+ |
|
3141 |
+ |
if (pict_get_npix(p, i) > 0) { |
3142 |
+ |
l_max = pict_get_lum_max(p, i); |
3143 |
+ |
i_splitstart = igs + 1; |
3144 |
+ |
if (l_max >= limit) { |
3145 |
+ |
for (x = 0; x < pict_get_xsize(pcoeff); x++) |
3146 |
+ |
for (y = 0; y < pict_get_ysize(pcoeff); y++) { |
3147 |
+ |
xmap=x_temp_img[j]+x; |
3148 |
+ |
ymap=y_temp_img[j]+y; |
3149 |
+ |
|
3150 |
+ |
|
3151 |
+ |
if (pict_get_hangle |
3152 |
+ |
(p, xmap, ymap, p->view.vdir, p->view.vup, &ang)) |
3153 |
+ |
{ |
3154 |
+ |
if (pict_is_validpixel(p, xmap, ymap) |
3155 |
+ |
&& luminance(pict_get_color(p, xmap, ymap)) |
3156 |
+ |
>= limit |
3157 |
+ |
&& pict_get_gsn(p, xmap, ymap) == i) { |
3158 |
+ |
if (i_splitstart == (igs + 1)) { |
3159 |
+ |
igs = igs + 1; |
3160 |
+ |
pict_new_gli(p); |
3161 |
+ |
pict_get_z1_gsn(p,igs) = 0; |
3162 |
+ |
pict_get_z2_gsn(p,igs) = 0; |
3163 |
+ |
|
3164 |
+ |
pict_get_Eglare(p,igs) = 0.0; |
3165 |
+ |
pict_get_Dglare(p,igs) = 0.0; |
3166 |
+ |
pict_get_lum_min(p, igs) = |
3167 |
+ |
99999999999999.999; |
3168 |
+ |
i_split = igs; |
3169 |
+ |
} else { |
3170 |
+ |
i_split = |
3171 |
+ |
find_split(p, xmap, ymap, r_split, |
3172 |
+ |
i_splitstart, igs); |
3173 |
+ |
} |
3174 |
+ |
if (i_split == 0) { |
3175 |
+ |
igs = igs + 1; |
3176 |
+ |
pict_new_gli(p); |
3177 |
+ |
pict_get_z1_gsn(p,igs) = 0; |
3178 |
+ |
pict_get_z2_gsn(p,igs) = 0; |
3179 |
+ |
|
3180 |
+ |
pict_get_Eglare(p,igs) = 0.0; |
3181 |
+ |
pict_get_Dglare(p,igs) = 0.0; |
3182 |
+ |
pict_get_lum_min(p, igs) = |
3183 |
+ |
99999999999999.999; |
3184 |
+ |
i_split = igs; |
3185 |
+ |
} |
3186 |
+ |
split_pixel_from_gs(p, xmap, ymap, i_split, uniform_gs, u_r, u_g , u_b); |
3187 |
+ |
|
3188 |
+ |
} |
3189 |
+ |
} |
3190 |
+ |
} |
3191 |
+ |
|
3192 |
+ |
} |
3193 |
+ |
change = 1; |
3194 |
+ |
while (change == 1) { |
3195 |
+ |
change = 0; |
3196 |
+ |
for (x = 0; x < pict_get_xsize(pcoeff); x++) |
3197 |
+ |
for (y = 0; y < pict_get_ysize(pcoeff); y++) { |
3198 |
+ |
xmap=x_temp_img[j]+x; |
3199 |
+ |
ymap=y_temp_img[j]+y; |
3200 |
+ |
before_igs = pict_get_gsn(p, xmap, ymap); |
3201 |
+ |
if (before_igs >= i_splitstart) { |
3202 |
+ |
if (pict_get_hangle |
3203 |
+ |
(p, xmap, ymap, p->view.vdir, p->view.vup, |
3204 |
+ |
&ang)) { |
3205 |
+ |
if (pict_is_validpixel(p, xmap, ymap) |
3206 |
+ |
&& before_igs > 0) { |
3207 |
+ |
actual_igs = |
3208 |
+ |
find_near_pgs(p, xmap, ymap, |
3209 |
+ |
max_angle, |
3210 |
+ |
before_igs, igs, |
3211 |
+ |
i_splitstart); |
3212 |
+ |
if (!(actual_igs == before_igs)) { |
3213 |
+ |
change = 1; |
3214 |
+ |
} |
3215 |
+ |
if (before_igs > 0) { |
3216 |
+ |
actual_igs = |
3217 |
+ |
pict_get_gsn(p, xmap, ymap); |
3218 |
+ |
/* icol = |
3219 |
+ |
setglcolor(p, x, y, |
3220 |
+ |
actual_igs, uniform_gs, u_r, u_g , u_b);*/ |
3221 |
+ |
} |
3222 |
+ |
|
3223 |
+ |
} |
3224 |
+ |
} |
3225 |
+ |
} |
3226 |
+ |
|
3227 |
+ |
} |
3228 |
+ |
} |
3229 |
+ |
|
3230 |
+ |
|
3231 |
+ |
} |
3232 |
+ |
} |
3233 |
+ |
|
3234 |
+ |
/* end peak extraction */ |
3235 |
+ |
|
3236 |
+ |
|
3237 |
+ |
/* calculation of direct vertical illuminance for th multi-image-mode */ |
3238 |
+ |
|
3239 |
+ |
|
3240 |
+ |
for (x = 0; x < pict_get_xsize(pcoeff); x++) |
3241 |
+ |
for (y = 0; y < pict_get_ysize(pcoeff); y++) { |
3242 |
+ |
xmap=x_temp_img[j]+x; |
3243 |
+ |
ymap=y_temp_img[j]+y; |
3244 |
+ |
if (pict_get_hangle(p, xmap, ymap, p->view.vdir, p->view.vup, &ang)) { |
3245 |
+ |
if (pict_is_validpixel(p, xmap, ymap)) { |
3246 |
+ |
if (pict_get_gsn(p, xmap, ymap) > 0) { |
3247 |
+ |
actual_igs = pict_get_gsn(p, xmap, ymap); |
3248 |
+ |
delta_E=DOT(p->view.vdir, pict_get_cached_dir(p, xmap, ymap))* pict_get_omega(p, xmap, ymap)* luminance(pict_get_color(p, xmap, ymap)); |
3249 |
+ |
pict_get_Eglare(p,actual_igs ) = pict_get_Eglare(p,actual_igs ) + delta_E; |
3250 |
+ |
} |
3251 |
+ |
} |
3252 |
+ |
} |
3253 |
+ |
} |
3254 |
+ |
|
3255 |
+ |
|
3256 |
+ |
|
3257 |
+ |
|
3258 |
+ |
|
3259 |
+ |
|
3260 |
+ |
|
3261 |
+ |
|
3262 |
+ |
i = 0; |
3263 |
+ |
for (x = 0; x <= igs; x++) { |
3264 |
+ |
if (pict_get_npix(p, x) > 0) { |
3265 |
+ |
i = i + 1; |
3266 |
+ |
}} |
3267 |
+ |
no_glaresources=i; |
3268 |
+ |
|
3269 |
+ |
/* |
3270 |
+ |
|
3271 |
+ |
sprintf(file_out, "%s%i%s","ray2/img_",j,".hdr"); |
3272 |
+ |
pict_write(p, file_out); |
3273 |
+ |
*/ |
3274 |
+ |
printf("%i ",no_glaresources); |
3275 |
+ |
i = 0; |
3276 |
+ |
for (x = 0; x <= igs; x++) { |
3277 |
+ |
if (pict_get_npix(p, x) > 0) { |
3278 |
+ |
i = i + 1; |
3279 |
+ |
pict_get_sigma(p, pict_get_av_posx(p, x), pict_get_av_posy(p, x), p->view.vdir, p->view.vup, &sigma); |
3280 |
+ |
|
3281 |
+ |
x2=pict_get_av_posx(p, x); |
3282 |
+ |
y2=pict_get_av_posy(p, x); |
3283 |
+ |
printf("%f %.10f %f %f %f %f %f ", pict_get_av_lum(p, x), pict_get_av_omega(p, x), get_posindex(p, pict_get_av_posx(p, x), pict_get_av_posy(p, x), |
3284 |
+ |
posindex_2),pict_get_cached_dir(p, x2,y2)[0],pict_get_cached_dir(p, x2,y2)[1],pict_get_cached_dir(p, x2,y2)[2],pict_get_Eglare(p,x) ); |
3285 |
+ |
} |
3286 |
+ |
pict_get_npix(p, x)=0; |
3287 |
+ |
pict_get_av_lum(p, x)=0; |
3288 |
+ |
pict_get_av_posy(p, x)=0; |
3289 |
+ |
pict_get_av_posx(p, x)=0; |
3290 |
+ |
pict_get_av_omega(p, x)=0; |
3291 |
+ |
} |
3292 |
+ |
printf("\n"); |
3293 |
+ |
|
3294 |
+ |
|
3295 |
+ |
/* empty big image and remove glare sources*/ |
3296 |
+ |
for (x = 0; x < pict_get_xsize(pcoeff); x++) { |
3297 |
+ |
for (y = 0; y < pict_get_ysize(pcoeff); y++) { |
3298 |
+ |
xmap=x_temp_img[j]+x; |
3299 |
+ |
ymap=y_temp_img[j]+y; |
3300 |
+ |
pict_get_color(p, xmap, ymap)[RED] = 0; |
3301 |
+ |
pict_get_color(p, xmap, ymap)[GRN] = 0; |
3302 |
+ |
pict_get_color(p, xmap, ymap)[BLU] = 0; |
3303 |
+ |
pict_get_gsn(p, xmap, ymap) = 0; |
3304 |
+ |
pict_get_pgs(p, xmap, ymap) = 0; |
3305 |
+ |
}} |
3306 |
+ |
igs=0; |
3307 |
+ |
|
3308 |
+ |
|
3309 |
+ |
|
3310 |
+ |
|
3311 |
+ |
|
3312 |
+ |
} |
3313 |
+ |
|
3314 |
+ |
} |
3315 |
+ |
|
3316 |
+ |
/* end multi-image-mode */ |
3317 |
|
|
3318 |
|
/*printf("lowlight=%f\n", low_light_corr); */ |
3319 |
|
|