File: sliceBySliceOperation.sh

package info (click to toggle)
ants 2.5.4%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 11,672 kB
  • sloc: cpp: 85,685; sh: 15,850; perl: 863; xml: 115; python: 111; makefile: 68
file content (183 lines) | stat: -rwxr-xr-x 4,549 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/bin/bash

VERSION="0.0.0 test"

# trap keyboard interrupt (control-c)
trap control_c SIGINT

PROGRAMS[0]=ExtractSliceFromImage
PROGRAMS[1]=PrintHeader
PROGRAMS[2]=TileImages
PROGRAMS[3]=DenoiseImage
PROGRAMS[4]=ImageMath
PROGRAMS[5]=N4BiasFieldCorrection

for (( i = 0; i < ${#PROGRAMS[@]}; i++ ))
  do
    if ! command -v "${PROGRAMS[$i]}" &> /dev/null
      then
        echo "The ${PROGRAMS[$i]} program can't be found. Please (re)define \$PATH in your environment."
        exit
      fi
  done

function Usage {
    cat <<USAGE

Usage:

`basename $0` outputImage operation whichDirection inputImage [optional parameters]

Operations:

     * ExtractAllSlices:

     * Convolve (ImageMath):

     * DenoiseImage:

     * N4BiasFieldCorrection:

     * RescaleImage (ImageMath):

     * TruncateImageIntensity (ImageMath):


Example:

`basename $0` output.nii.gz DenoiseImage 2 input.nii.gz

--------------------------------------------------------------------------------------
ANTs was created by:
--------------------------------------------------------------------------------------
Brian B. Avants, Nick Tustison and Gang Song
Penn Image Computing And Science Laboratory
University of Pennsylvania

script by Nick Tustison

--------------------------------------------------------------------------------------
Get the latest ANTs version at:
--------------------------------------------------------------------------------------
https://github.com/stnava/ANTs/

--------------------------------------------------------------------------------------
Read the ANTS documentation at:
--------------------------------------------------------------------------------------
http://stnava.github.io/ANTs/


USAGE
    exit 1
}

control_c()
# run if user hits control-c
{
  echo -en "\n*** User pressed CTRL + C ***\n"
  cleanup
  exit $?
  echo -en "\n*** Script cancelled by user ***\n"
}


# Provide output for Help
if [[ "$1" == "-h" || $# -eq 0 ]];
  then
    Usage >&2
  fi

if [ $# -lt 4 ];
  then
    echo "Illegal number of parameters ($#)"
    Usage >&2
fi

OUTPUT_IMAGE=$1
OPERATION=$2
WHICH_DIRECTION=$3
INPUT_IMAGE=$4

PARAMETERS[0]=$5
PARAMETERS[1]=$6
PARAMETERS[2]=$7
PARAMETERS[3]=$8
PARAMETERS[4]=$9
PARAMETERS[5]=$10
PARAMETERS[6]=$11

SIZE_STRING=$( PrintHeader $INPUT_IMAGE 2 )
SIZE=( ${SIZE_STRING//x/ } )

if [[ ${#SIZE[@]} -ne 3 ]];
  then
    echo "Error:  The input image, $INPUT_IMAGE, is not 3-D."
    exit
  fi

if [[ ${WHICH_DIRECTION} -gt 2 || ${WHICH_DIRECTION} -lt 0 ]];
  then
    echo "Error: Direction must be an integer in [0,2 ]"
    exit
  fi

NUMBER_OF_SLICES=${SIZE[$WHICH_DIRECTION]}
TMP_OUTPUT_DIR=$( mktemp -d )
TMP_OUTPUT_FILE=${TMP_OUTPUT_DIR}/tmp${RANDOM}.nii.gz

ALL_OUTPUT_SLICES=()
for (( i = 0; i < $NUMBER_OF_SLICES; i++ ))
  do
    echo "$OPERATION (direction $WHICH_DIRECTION, slice $i of $NUMBER_OF_SLICES)"

    OUTPUT_DIR=`dirname $OUTPUT_IMAGE`

    OUTPUT_SLICE=`basename $OUTPUT_IMAGE`
    OUTPUT_SLICE=${OUTPUT_SLICE/\.mha/}
    OUTPUT_SLICE=${OUTPUT_SLICE/\.nii\.gz/}
    OUTPUT_SLICE=${OUTPUT_SLICE/\.nii/}
    OUTPUT_SLICE=${OUTPUT_SLICE/\.nrrd/}

    OUTPUT_SLICE="${TMP_OUTPUT_DIR}/${OUTPUT_SLICE}Slice${i}.nii.gz"

    ExtractSliceFromImage 3 $INPUT_IMAGE $OUTPUT_SLICE $WHICH_DIRECTION $i

    ALL_OUTPUT_SLICES[$i]=$OUTPUT_SLICE

    case "$OPERATION" in
    "ExtractAllSlices")
      mv ${OUTPUT_SLICE} ${OUTPUT_DIR}
      ;;
    "Convolve")
      ImageMath 2 $OUTPUT_SLICE Convolve $OUTPUT_SLICE ${PARAMETERS[0]} ${PARAMETERS[1]}
      ;;
    "DenoiseImage")
      DenoiseImage -d 2 -i $OUTPUT_SLICE -o $OUTPUT_SLICE -v 0
      ;;
    "N4BiasFieldCorrection")
      N4BiasFieldCorrection -d 2 -i $OUTPUT_SLICE -o $OUTPUT_SLICE -v 0 -s 2
      ;;
    "RescaleImage")
      ImageMath 2 $OUTPUT_SLICE RescaleImage $OUTPUT_SLICE ${PARAMETERS[0]} ${PARAMETERS[1]}
      ;;
    "TruncateImageIntensity")
      ImageMath 2 $OUTPUT_SLICE TruncateImageIntensity $OUTPUT_SLICE ${PARAMETERS[0]} ${PARAMETERS[1]} ${PARAMETERS[2]} ${PARAMETERS[3]}
      ;;
    *)
      echo "The operation '$OPERATION' is not an option.  See usage: '$0 -h 1'"
      exit
      ;;
    esac

  done

PERMUTATION_ORDER[0]='2 0 1'
PERMUTATION_ORDER[1]='0 2 1'
PERMUTATION_ORDER[2]='0 1 2'

if [[ $OPERATION != "ExtractAllSlices" ]];
  then
    TileImages 3 $TMP_OUTPUT_FILE 1x1x0 ${ALL_OUTPUT_SLICES[@]}
    PermuteFlipImageOrientationAxes 3 $TMP_OUTPUT_FILE $TMP_OUTPUT_FILE ${PERMUTATION_ORDER[$WHICH_DIRECTION]} 0 0 0 0
    CopyImageHeaderInformation $INPUT_IMAGE $TMP_OUTPUT_FILE $OUTPUT_IMAGE 1 1 1
  fi