-
-
Notifications
You must be signed in to change notification settings - Fork 387
/
Copy pathsliceBySliceOperation.sh
executable file
·183 lines (140 loc) · 4.44 KB
/
sliceBySliceOperation.sh
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