| 1 |
greg |
3.1 |
#!/bin/csh -f
|
| 2 |
greg |
3.5 |
# RCSid: $Id: pacuity.csh,v 3.4 2003/02/22 02:07:27 greg Exp $
|
| 3 |
greg |
3.1 |
#
|
| 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 |
greg |
3.5 |
set td=/tmp
|
| 11 |
greg |
3.1 |
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 |
greg |
3.2 |
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 |
greg |
3.3 |
( rcalc -e "$vp" -e "A:3438*sqrt(Vhn/$pres[1]*Vvn/$pres[2])" \
|
| 42 |
greg |
3.1 |
-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 |
greg |
3.2 |
max(a,b) : if(a-b, a, b);
|
| 54 |
|
|
target_acuity = acuity(log10(max(WE/le(1)*li(1),1e-4)));
|
| 55 |
greg |
3.1 |
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
|