#! /bin/csh -f # set path = ( ~jamesh/imagemath/kuim/bin $path ) set reso = 704x480 #set reso = 352x240 # move sample around and take pictures to get "mm/fov" calibration set camera = `stage.com | awk '{print 1+($(NF-1)<-10)}'` set xsize = `echo $reso | awk -F "x" '{print $1}'` set ysize = `echo $reso | awk -F "x" '{print $2}'` set fftsize = `echo $reso | awk '{fft=1; while($1>2) {$1/=2;fft*=2} print fft}'` set tempfile = tempfile #foreach delta ( 0.10 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 ) #foreach delta ( 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 ) foreach delta ( 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 0.90 1.00 1.10 ) #foreach delta ( 0.1 ) snap.com snap_v1.jpg -nodisplay $reso >& /dev/null sample.com 0 -$delta 0 > /dev/null snap.com snap_v2.jpg -nodisplay $reso >& /dev/null sample.com 0 $delta 0 > /dev/null snap.com snap_h1.jpg -nodisplay $reso >& /dev/null sample.com 0 0 $delta > /dev/null snap.com snap_h2.jpg -nodisplay $reso >& /dev/null sample.com 0 0 -$delta > /dev/null rm -f out.im echo -n "step: $delta fov: " align_x -d -n 200 snap_h1.jpg snap_h2.jpg out.im |&\ awk '/^dx dy/{print $4, $NF}' >! scores.log rm -f out.jpg ; type -j out.im out.jpg > /dev/null set best = `sort -n +1 scores.log | awk '{print $1;exit}'` # try to increase precision with a curve fit set plotit = "#" if( $?debug ) set plotit = "" set c = `sort -n +1 scores.log | awk '{print $2;exit}'` set cutoff = `sort -nr +1 scores.log | tail -11 | awk '{print $NF;exit}'` cat << EOF | gnuplot -persist >&! ${tempfile}fit.log a=100 b=$best c=$c fit a*(x-b)**2+c 'scores.log' using 1:(\$2<=$cutoff ? \$2:1/0) via a fit a*(x-b)**2+c 'scores.log' using 1:(\$2<=$cutoff ? \$2:1/0) via a,b,c set yrange [*:$cutoff] set xrange [(b-10):(b+10)] ${plotit}plot 'scores.log', a*(x-b)**2+c EOF #echo "plot 'scores.log'" | gnuplot -persist set fit_best = `awk '$1=="b" && $2=="="{print $3}' ${tempfile}fit.log | tail -1` rm -f ${tempfile}fit.log fit.log set toofar = `echo $best $fit_best | awk '{print (sqrt(($1-$2)^2)>2)}'` if( ! $toofar ) set best = $fit_best echo $best $delta $xsize | awk '{printf "%.4f ", $2*$3/$1}' rm -f out.im align_y -d -n 200 snap_v1.jpg snap_v2.jpg out.im |&\ awk '/^dx dy/{print $5, $NF}' >! scores.log rm -f out.jpg ; type -j out.im out.jpg > /dev/null set best = `sort -n +1 scores.log | awk '{print $1;exit}'` # try to increase precision with a curve fit set plotit = "#" if( $?debug ) set plotit = "" set c = `sort -n +1 scores.log | awk '{print $2;exit}'` set cutoff = `sort -nr +1 scores.log | tail -11 | awk '{print $NF;exit}'` cat << EOF | gnuplot -persist >&! ${tempfile}fit.log a=100 b=$best c=$c fit a*(x-b)**2+c 'scores.log' using 1:(\$2<=$cutoff ? \$2:1/0) via a fit a*(x-b)**2+c 'scores.log' using 1:(\$2<=$cutoff ? \$2:1/0) via a,b,c set yrange [*:$cutoff] set xrange [(b-10):(b+10)] ${plotit}plot 'scores.log', a*(x-b)**2+c EOF #echo "plot 'scores.log'" | gnuplot -persist set fit_best = `awk '$1=="b" && $2=="="{print $3}' ${tempfile}fit.log | tail -1` rm -f ${tempfile}fit.log fit.log set toofar = `echo $best $fit_best | awk '{print (sqrt(($1-$2)^2)>2)}'` if( ! $toofar ) set best = $fit_best echo $best $delta $ysize | awk '{printf "%.4f ", $2*$3/$1}' echo "" rm -f out.jpg ; type -j out.im out.jpg > /dev/null #display out.jpg end exit # appears to be: # camera1 pixel is -0.83 x -0.96 micron # camera2 pixel is -6.3 x 7.0 microns # # camera2 pixel is -8.5 x 9.4 microns # # # camera1 pixel is 1.25 x 1.1 micron # camera2 pixel is # # camera1 FOV is 0.5665 x -0.428 mm # camera2 FOV is 4.365 x 3.285 mm # ##