orig/pacuity.csh
changeset 0 0aa115157c9c
equal deleted inserted replaced
-1:000000000000 0:0aa115157c9c
       
     1 #!/bin/csh -f
       
     2 # RCSid: $Id: pacuity.csh,v 3.6 2008/11/10 19:08:19 greg Exp $
       
     3 #
       
     4 # Adjust picture acuity according to human visual abilities
       
     5 #
       
     6 if ($#argv != 1) then
       
     7 	echo "Usage: $0 input.hdr > output.hdr"
       
     8 	exit 1
       
     9 endif
       
    10 set td=/tmp
       
    11 set tfc1=$td/ac$$.cal
       
    12 set tf=($td/c{1,2,4,8,16,32}d$$.hdr $tfc1)
       
    13 set ifile=$1
       
    14 onintr quit
       
    15 tabfunc -i acuity > $tfc1 << EOF
       
    16 # Log10 luminance vs. visual acuity in cycles/degree
       
    17 -2.804	2.09
       
    18 -2.363	3.28
       
    19 -2.076	3.79
       
    20 -1.792	4.39
       
    21 -1.343	6.11
       
    22 -1.057	8.83
       
    23 -0.773	10.94
       
    24 -0.371	18.66
       
    25 -0.084	23.88
       
    26 0.2	31.05
       
    27 0.595	37.42
       
    28 0.882	37.68
       
    29 1.166	41.60
       
    30 1.558	43.16
       
    31 1.845	45.30
       
    32 2.129	47.00
       
    33 2.577	48.43
       
    34 2.864	48.32
       
    35 3.148	51.06
       
    36 3.550	51.09
       
    37 EOF
       
    38 set pres=(`getinfo -d < $ifile | sed 's/^-Y \([1-9][0-9]*\) +X \([1-9][0-9]*\)$/\2 \1/'`)
       
    39 set vp=`vwright V < $ifile`
       
    40 set aext=(`pextrem -o $ifile | rcalc -f $tfc1 -e 'max(a,b):if(a-b,a,b);$1=acuity(log10(max(179*(.265*$3+.67*$4+.065*$5),1e-4)))'`)
       
    41 ( rcalc -e "$vp" -e "A:3438*sqrt(Vhn/$pres[1]*Vvn/$pres[2])" \
       
    42 	-e 'f=60/A/2/$1;cond=if(1.5-$1,1,if(1-f,-1,if($1-'"$aext[2]"',-1,$1-'"$aext[1])))" \
       
    43 	-o 'pfilt -1 -r 2 -x /${f} -y /${f} '"$ifile | pfilt -1 -r 1 -x $pres[1] -y $pres[2] > $td/"'c${$1}d'$$.hdr \
       
    44 	| csh -f ) << EOF
       
    45 1
       
    46 2
       
    47 4
       
    48 8
       
    49 16
       
    50 32
       
    51 EOF
       
    52 cat >> $tfc1 << _EOF_
       
    53 max(a,b) : if(a-b, a, b);
       
    54 target_acuity = acuity(log10(max(WE/le(1)*li(1),1e-4)));
       
    55 findfuzzy(i) = if(target_acuity-picture_acuity(i),i,if(i-1.5,findfuzzy(i-1),1));
       
    56 fuzzy_picture = findfuzzy(nfiles-1);
       
    57 clear_picture = fuzzy_picture + 1;
       
    58 clarity_ex = (target_acuity-picture_acuity(fuzzy_picture)) /
       
    59 		(picture_acuity(clear_picture)-picture_acuity(fuzzy_picture));
       
    60 clarity = if(clarity_ex-1, 1, if(-clarity_ex, 0, clarity_ex));
       
    61 ro = clarity*ri(clear_picture) + (1-clarity)*ri(fuzzy_picture);
       
    62 go = clarity*gi(clear_picture) + (1-clarity)*gi(fuzzy_picture);
       
    63 bo = clarity*bi(clear_picture) + (1-clarity)*bi(fuzzy_picture);
       
    64 picture_acuity(n) : select(n,1,
       
    65 _EOF_
       
    66 set pf=($td/c1d$$.hdr)
       
    67 foreach i (2 4 8 16 32)
       
    68 	if ( -f $td/c${i}d$$.hdr ) then
       
    69 		set pf=( $pf $td/c${i}d$$.hdr )
       
    70 		echo -n "$i," >> $tfc1
       
    71 	endif
       
    72 end
       
    73 set pf=( $pf $ifile )
       
    74 rcalc -n -e "$vp" -e "A:3879*sqrt(Vhn/$pres[1]*Vvn/$pres[2])" \
       
    75 	-o '${60/A});' >> $tfc1
       
    76 getinfo < $ifile | egrep '^((VIEW|EXPOSURE|PIXASPECT|PRIMARIES|COLORCORR)=|[^ ]*(rpict|rview|pinterp) )'
       
    77 pcomb -f $tfc1 $pf
       
    78 quit:
       
    79 rm -f $tf