|
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 |