| 1 | #!/bin/csh -f | 
| 2 | # RCSid: $Id: pacuity.csh,v 3.4 2003/02/22 02:07:27 greg Exp $ | 
| 3 | # | 
| 4 | # Adjust picture acuity according to human visual abilities | 
| 5 | # | 
| 6 | if ($#argv != 1) then | 
| 7 | echo "Usage: $0 input.pic > output.pic" | 
| 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$$.pic $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'$$.pic \ | 
| 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$$.pic) | 
| 67 | foreach i (2 4 8 16 32) | 
| 68 | if ( -f $td/c${i}d$$.pic ) then | 
| 69 | set pf=( $pf $td/c${i}d$$.pic ) | 
| 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 |