Mercurial > hg > minc-tools
changeset 2524:60bf927c5ce3
* converted from csh/xv to bash/display
author | rotor <rotor> |
---|---|
date | Mon, 14 Feb 2011 07:12:36 +0000 |
parents | 0436274b41b6 |
children | 74c63336faa9 |
files | ChangeLog progs/mincview/mincview |
diffstat | 2 files changed, 109 insertions(+), 115 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ + + +2011-02-14 Andrew L Janke <a.janke@gmail.com> + * progs/mincview/mincview: converted from csh to bash and changed + from xv to display 2011-02-09 Andrew L Janke <a.janke@gmail.com> * libsrc/minc_compat.h: Added cplusplus extern to header
--- a/progs/mincview/mincview +++ b/progs/mincview/mincview @@ -1,147 +1,136 @@ -#! /bin/csh -f +#! /bin/bash +# # Script for viewing a minc file. -# Requires a pnm file viewer such as xv or display from ImageMagick, -# as wells as the filter invert_raw_image. +# Requires a pnm file viewer. (display from ImageMagick) # # Displays images with patient left on left side of the screen. -# Constants -set xv_visual = `xdpyinfo | awk '($1=="class:"){visual=$2};(($1=="depth:") && (visual=="TrueColor") && ($2==24)) {found=1}; END {if (found) print "-visual TrueColor"}'` -set VIEWER = "xv" # Any pnm display program that handles a list of files -set VIEWER_OPTIONS = "-geometry 512x512 -fixed -cmap -raw $xv_visual" -set PGM_CODE = "P5" -set PPM_CODE = "P6" -set usage = "Usage: $0 <filename.mnc> [<slice number>]" -set exit_status = 0 + +PGM_CODE="P5" +PPM_CODE="P6" +usage="Usage: $0 <infile.mnc> [<slice number>]" # Check arguments -if (($#argv < 1) || ($#argv > 2) || ("$1" == "-help") || ("$1" == "-h")) then +if [ $# -lt "1" ] || \ + [ $# -gt "2" ] || \ + [ "$1" = "-help" ] || \ + [ "$1" = "-h" ] +then echo "$usage" + echo "" exit -1 -endif -set filename = "$1" -set slice = `awk "BEGIN{print $2+0}" < /dev/null` -@ slice_specified = ( $#argv >= 2 ) +fi + +infile="$1" # Create temporary directory -if (! $?TMPDIR) then - if (-d /var/tmp) then - set TMPDIR = /var/tmp - else if (-d /usr/tmp) then - set TMPDIR = /usr/tmp - else - set TMPDIR = /tmp - endif -endif -if (! -d $TMPDIR) then - echo "Working directory $TMPDIR does not exist." - exit 1 -endif -set workingdir = $TMPDIR +tmpdir="/tmp/mincview-$$" -set workingparent = $workingdir/mincview-$$ -set childdir = $filename:t -set workingdir = $workingparent/$childdir -onintr cleanup -mkdir $workingparent -mkdir $workingdir +# cleanup nicely +trap "rm -rf $tmpdir" 0 1 2 3 13 15 -# Expand the file if needed -set newfilename = $filename:t -set newfilename = $workingdir/temp_$newfilename:r -set filename = `mincexpand $filename $newfilename -name_only` +mkdir -p $tmpdir # Get dimension names -set dims = `mincinfo $filename -vardims image` +dims=( $(mincinfo -vardims image $infile ) ) + +echo " + Dimensions: ${dims[*]}" # Check for vector dimension -set pnm_code = $PGM_CODE -set bytes_per_pixel = 1 -if ("$dims[$#dims]" == "vector_dimension") then - @ ndims = $#dims - 1 - set nvec = `mincinfo $filename -dimlength $dims[$#dims]` - set start_suffix = ",0" - if ($nvec != 3) then - set count_suffix = ",1" +pnm_code=$PGM_CODE +if [ "${dims[${#dims[*]} - 1]}" = "vector_dimension" ] +then + ndims=$(( ${#dims[*]} - 1 )) + nvec=$(mincinfo $infile -dimlength $dims[$#dims]) + start_suffix=",0" + if [ $nvec != 3 ] + then + count_suffix=",1" else - set count_suffix = ",3" - set pnm_code = $PPM_CODE - set bytes_per_pixel = 3 - endif + count_suffix=",3" + pnm_code=$PPM_CODE + fi else - set ndims = $#dims - set start_suffix = "" - set count_suffix = "" -endif + ndims="${#dims[*]}" + start_suffix="" + count_suffix="" +fi + +echo " + ndims: $ndims" -if ($ndims > 3) then - @ nprefix = $ndims - 3 - set start_prefix = \ - "`awk 'BEGIN{for (i=0;i<$nprefix;i++) print "'"'"0,"'"'"}' < /dev/null`" - set count_prefix = \ - "`awk 'BEGIN{for (i=0;i<$nprefix;i++) print "'"'"1,"'"'"}' < /dev/null`" -else if ($ndims < 2) then - echo "No image found in file $filename" - set exit_status = -1 - goto cleanup +if [ $ndims -gt 3 ] +then + nprefix=$(( $ndims - 3 )) + start_prefix=$(awk 'BEGIN{for (i=0;i<$nprefix;i++) print "0,"}' < /dev/null) + count_prefix=$(awk 'BEGIN{for (i=0;i<$nprefix;i++) print "1,"}' < /dev/null) +elif [ $ndims -lt "2" ] +then + echo "No image found in file $infile" + exit -1 else - set start_prefix = "" - set count_prefix = "" -endif + start_prefix="" + count_prefix="" +fi # Get number of slices and image dimensions -@ ind1 = $ndims - 2 -@ ind2 = $ndims - 1 -@ ind3 = $ndims -if ($ind1 > 0) then - set nslices = `mincinfo $filename -dimlength $dims[$ind1]` +ind1=$(( $ndims - 3 )) +ind2=$(( $ndims - 2 )) +ind3=$(( $ndims - 1 )) +if [ $ind1 -gt "-1" ] +then + nslices=$(mincinfo $infile -dimlength ${dims[$ind1]}) else - set nslices = 1 -endif -set imgsize = `mincinfo $filename -dimlength $dims[$ind2] -dimlength $dims[$ind3]` -if ($slice_specified) then - if (($slice >= $nslices) || ($slice < 0)) then + nslices=1 +fi + +# figure out which slices to get +allslices=$(seq 0 $(($nslices - 1))) +slices_to_get=${2:-"$allslices"} + +if [ $slice_specified ] +then + if [ $slice -ge $nslices ] || [ $slice -lt "0" ] + then echo "Slice number out of range" - set exit_status = -1 - goto cleanup - endif - @ nslices = $slice + 1 -endif + exit -1 + fi + nslices=$(($slice + 1)) +fi # Check for inverting images to get standard orientation -set rows = -$imgsize[1] -set cols = $imgsize[2] +imgsize=( $(mincinfo -dimlength ${dims[$ind2]} -dimlength ${dims[$ind3]} $infile) ) +rows="-${imgsize[0]}" +cols="${imgsize[1]}" + +echo " + ROWS: $rows COLS: $cols" +echo " + nslices $nslices" # Loop through slices, if needed -echo -n Loading slices -while ($slice < $nslices) - echo -n . - if ($ndims > 2) then - set start = "$start_prefix $slice,0,0 $start_suffix" - set count = "$count_prefix 1,$imgsize[1],$imgsize[2] $count_suffix" +echo -n "Loading slices" +for slice in $slices_to_get +do + echo -n "." + if [ $ndims -gt 2 ] + then + start="${start_prefix}$slice,0,0${start_suffix}" + count="${count_prefix}1,${imgsize[0]},${imgsize[1]}${count_suffix}" else - set start = "0,0 $start_suffix" - set count = "$imgsize[1],$imgsize[2] $count_suffix" - endif - set output_file = $workingdir/$slice - echo "$pnm_code" >! $output_file - echo "$imgsize[2] $imgsize[1]" >> $output_file + start="0,0$start_suffix" + count="${imgsize[0]},${imgsize[1]}$count_suffix" + fi + output_file=$(printf "$tmpdir/slice-%04d.pgm" $slice) + echo "$pnm_code" > $output_file + echo "${imgsize[1]} ${imgsize[0]}" >> $output_file echo "255" >> $output_file - mincextract $filename -byte -start "$start" -count "$count" \ - -positive_direction |\ - invert_raw_image $cols $rows $bytes_per_pixel >> $output_file - @ slice++ -end -echo Done - -# Remove the temporary file -rm -f $newfilename + mincextract -byte \ + -start $start \ + -count $count \ + -positive_direction \ + $infile >> $output_file + + slice=$(($slice + 1)) +done +echo "Done" # Display the images -cd $workingparent -$VIEWER $VIEWER_OPTIONS $childdir/{?,??,???,????} - -cleanup: - cd / - rm -rf $workingparent - exit $exit_status +display -geometry 512x512 -flip $tmpdir/slice-*.pgm