]> Creatis software - clitk.git/blob - scripts/create_midP-2.0.sh
use of coefficient images in mid-P creation
[clitk.git] / scripts / create_midP-2.0.sh
1 #!/bin/sh -x
2
3 ###############################################################################
4 #
5 # FILE: create_midP-2.0.sh
6 # AUTHOR: RĂ´mulo Pinho 05/08/2011
7 #
8 # Version 2.0 of the create_midP.sh script. The most relevant changes are:
9 #   * receives a .conf file as input, with variables related to the registration
10 #   parameters and to paramters of the script itself (see accompanying midp_template.conf)
11 #   for details.
12 #   * separates execution steps: it's now possible to choose which operation to execute
13 #   (mask, registration, midp, or all).
14 #   * some steps are now in different modules, to facilitate re-use (see "includes" section).
15 #   * minor modifications on output file names.
16 #   * attempt to simplify the code a bit.
17 #
18 ###############################################################################
19
20 ######################### includes
21
22 source `dirname $0`/create_midP_masks-2.0.sh using-as-lib 2 nn
23 source `dirname $0`/registration.sh
24 source `dirname $0`/midp_common.sh
25
26 registration()
27 {
28   echo
29   echo "----------- Registration ------------"
30   start=`date`
31   echo "start: $start"
32   echo
33
34   mkdir -p $vf_dir
35   mkdir -p $output_dir
36
37   # banded images may be created as separate files,
38   # with the specified preffix, which is interesting for debugging. 
39   # if blank, it means that the original images (those without bands) 
40   # will be used (see create_midP_masks-2.0.sh for details).
41   banded=""
42
43   # params read from conf file
44   use_coeffs=1
45   params="$nb_iter $nb_samples $sampling_algo $nb_hist_bins $nb_levels $bspline_spacing $metric $optimizer $interpolator"
46
47   # register all phases to the reference
48   for i in $( seq 0 $((${#phase_files[@]} - 1))); do
49     phase_file=${phase_files[$i]}
50     phase_nb=${phase_nbs[$i]}
51     
52     if [ "$phase_nb" != "$ref_phase_nb" ]; then
53       # inside params
54       reference_in=$mask_dir/${banded}inside_$ref_phase_nb.mhd
55       target_in=$mask_dir/${banded}inside_$phase_nb.mhd
56       mask_ref_in=$mask_dir/mask_inside_$ref_phase_nb.mhd
57       mask_targ_in=$mask_dir/mask_inside_$phase_nb.mhd
58       vf_in=$vf_dir/vf_inside_${ref_phase_nb}_$phase_nb.mhd
59       result_in=$output_dir/result_inside_${ref_phase_nb}_$phase_nb.mhd
60       log_in=$log_dir/log_inside_${ref_phase_nb}_$phase_nb.log
61       if [ $use_coeffs = 1 ]; then
62         init_coeff_in=$coeff_in # empty at first iteration
63         coeff_in=$vf_dir/coeff_inside_${ref_phase_nb}_$phase_nb.mhd
64       fi
65
66       # outside params
67       reference_out=$mask_dir/${banded}outside_$ref_phase_nb.mhd
68       target_out=$mask_dir/${banded}outside_$phase_nb.mhd
69       mask_ref_out=$mask_dir/mask_outside_$ref_phase_nb.mhd
70       mask_targ_out=$mask_dir/mask_outside_$phase_nb.mhd
71       vf_out=$vf_dir/vf_outside_$ref_phase_nb\_$phase_nb.mhd
72       result_out=$output_dir/result_outside_$ref_phase_nb\_$phase_nb.mhd
73       log_out=$log_dir/log_outside_${ref_phase_nb}_$phase_nb.log
74       if [ $use_coeffs = 1 ]; then
75         init_coeff_out=$coeff_out # empty at first iteration
76         coeff_out=$vf_dir/coeff_outside_${ref_phase_nb}_$phase_nb.mhd
77       fi
78
79       # registration
80       if [ "$method" == "blutdir" ]; then
81         registration_blutdir $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in $coeff_in $init_coeff_in
82         registration_blutdir $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out $coeff_out $init_coeff_out
83       elif [ "$method" == "elastix" ]; then
84         registration_elastix $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in
85         registration_elastix $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out
86       fi
87
88       motion_mask=$mask_dir/mm_$phase_nb.mhd
89
90       # combine in and out results
91       out_result=$output_dir/result_${ref_phase_nb}_$phase_nb.mhd
92       clitkCombineImage -i $result_in -j $result_out -m $motion_mask -o $out_result
93       abort_on_error registration $? clean_up_registration
94
95       # combine in and out vf
96       vf_result=$vf_dir/vf_${ref_phase_nb}_$phase_nb.mhd
97       clitkCombineImage -i $vf_in -j $vf_out -m $motion_mask -o $vf_result
98       abort_on_error registration $? clean_up_registration
99
100       clitkZeroVF -i $vf_in -o vf_zero.mhd
101       abort_on_error registration $? clean_up_registration
102
103       patient_mask=$mask_dir/patient_mask_$phase_nb.mhd
104       clitkCombineImage -i $vf_result -j vf_zero.mhd -m $patient_mask -o $vf_result
105       abort_on_error registration $? clean_up_registration
106
107       rm vf_zero.*
108
109       # save for later...
110       vf_ref=$vf_in
111     fi
112   done
113
114   # create (zero) vf from reference to reference and associated images
115   vf_in=$vf_dir/vf_inside_${ref_phase_nb}_${ref_phase_nb}.mhd
116   vf_out=$vf_dir/vf_outside_${ref_phase_nb}_${ref_phase_nb}.mhd
117   clitkZeroVF -i $vf_ref -o $vf_dir/vf_${ref_phase_nb}_${ref_phase_nb}.mhd
118   clitkZeroVF -i $vf_ref -o $vf_in
119   clitkZeroVF -i $vf_ref -o $vf_out
120   abort_on_error registration $? clean_up_registration
121
122   motion_mask=$mask_dir/mm_${ref_phase_nb}.mhd
123   reference_in=$mask_dir/${banded}inside_${ref_phase_nb}.mhd
124   reference_out=$mask_dir/${banded}outside_$ref_phase_nb.mhd
125   out_result=$output_dir/result_${ref_phase_nb}_${ref_phase_nb}.mhd
126   clitkCombineImage -i $reference_in -j $reference_out -m $motion_mask -o $out_result
127   abort_on_error registration $? clean_up_registration
128
129   # create 4D vf
130   create_mhd_4D_pattern.sh $vf_dir/vf_${ref_phase_nb}_
131   create_mhd_4D_pattern.sh $vf_dir/vf_inside_${ref_phase_nb}_
132   create_mhd_4D_pattern.sh $vf_dir/vf_outside_${ref_phase_nb}_
133
134   # create 4D result image
135   create_mhd_4D_pattern.sh $output_dir/result_inside_${ref_phase_nb}_
136   create_mhd_4D_pattern.sh $output_dir/result_outside_${ref_phase_nb}_
137   create_mhd_4D_pattern.sh $output_dir/result_${ref_phase_nb}_
138
139   echo
140   echo "-------- Registration done ! --------"
141   end=`date`
142   echo "start: $start"
143   echo "end: $end"
144   echo
145 }
146
147 midp()
148 {
149   echo
150   echo "----------- Mid-position ------------"
151   start=`date`
152   echo "start: $start"
153   echo
154
155   mkdir -p $midp_dir
156
157   ########### calculate the midp wrt the reference phase
158   phase_nb=$ref_phase_nb
159   echo "Calculating midp_$phase_nb.mhd..."
160   vf_midp=$midp_dir/vf_midp_$phase_nb.mhd
161   midp=$midp_dir/midp_$phase_nb.mhd
162   # average the vf's from reference phase to phase
163   clitkAverageTemporalDimension -i $vf_dir/vf_${ref_phase_nb}_4D.mhd -o $vf_midp
164   abort_on_error midp $? clean_up_midp
165
166   # invert the vf (why?)
167   clitkInvertVF -i $vf_midp -o $vf_midp
168   abort_on_error midp $? clean_up_midp
169
170   # create the midp by warping the reference phase with the reference vf
171   clitkWarpImage -i $ref_phase_file -o $midp --vf=$vf_midp -s 1
172   abort_on_error midp $? clean_up_midp
173
174   ref_vf_midp=$vf_midp
175   ref_midp=$midp
176   clitkImageConvert -i $ref_midp -o $ref_midp -t float
177   abort_on_error midp $? clean_up_midp
178
179   ########### calculate the midp wrt the other phases
180   for i in $( seq 0 $((${#phase_files[@]} - 1))); do
181     phase_file=${phase_files[$i]}
182     phase_nb=${phase_nbs[$i]}
183     vf_midp=$midp_dir/vf_midp_$phase_nb.mhd
184     midp=$midp_dir/midp_$phase_nb.mhd
185
186     if [ "$phase_nb" != "$ref_phase_nb" ]; then
187       echo "Calculating midp_$phase_nb.mhd..."
188       # calculate vf from phase to midp, using the vf from reference phase to midp (-i)
189       # and the vf from reference phase to phase (-j)
190       clitkComposeVF -i $ref_vf_midp -j $vf_dir/vf_$ref_phase_nb\_$phase_nb.mhd -o $vf_midp
191       abort_on_error midp $? clean_up_midp
192       
193       clitkWarpImage -i $phase_file -o $midp --vf=$vf_midp -s 1
194       abort_on_error midp $? clean_up_midp
195       
196       clitkImageConvert -i $midp -o $midp -t float
197       abort_on_error midp $? clean_up_midp
198     fi
199   done
200
201   # create 4D midp
202   create_mhd_4D_pattern.sh $midp_dir/midp_
203   create_mhd_4D_pattern.sh $midp_dir/vf_midp_
204
205   echo "Calculating midp_avg.mhd..."
206   clitkAverageTemporalDimension -i $midp_dir/midp_4D.mhd -o $midp_dir/midp_avg.mhd
207   abort_on_error midp $? clean_up_midp
208
209   echo "Calculating midp_med.mhd..."
210   clitkMedianTemporalDimension -i $midp_dir/midp_4D.mhd -o $midp_dir/midp_med.mhd
211   abort_on_error midp $? clean_up_midp
212
213   # clean-up
214   #rm $midp_dir/vf_*
215       
216   echo
217   echo "-------- Mid-position done ! --------"
218   end=`date`
219   echo "start: $start"
220   echo "end: $end"
221   echo
222 }
223
224
225
226 ######################### main
227
228 if [ $# != 3 ]; then
229   echo "Usage: create_midP-2.0.sh CT_4D REF_PHASE CONF_FILE"
230   exit -1
231 fi
232
233 echo
234 echo "--------------- START ---------------"
235 begining=`date --rfc-3339=seconds`
236 # echo "beginning: $begining"
237 echo
238
239 # variable declarations
240 mhd4d=$1
241 ref_phase=$2
242 conf=$3
243 source $conf
244
245 cd `dirname $mhd4d`
246
247 mkdir -p $log_dir
248 mask_dir="MASK-${mask_interpolation_spacing}mm-$mask_interpolation_algorithm"
249
250 extract_4d_phases_ref $mhd4d $ref_phase
251
252 if [ "$step" == "mask" -o "$step" == "all" ]; then
253   motion_mask $mhd4d $mask_interpolation_spacing $mask_interpolation_algorithm 
254 fi 
255
256 if [ "$step" == "registration" -o "$step" == "all" ]; then
257   registration
258 fi 
259
260 if [ "$step" == "midp" -o "$step" == "all" ]; then
261   midp
262 fi 
263
264 echo
265 echo "---------------- END ----------------"
266 terminating=`date --rfc-3339=seconds`
267 echo "beginning: $begining"
268 echo "terminating: $terminating"
269 echo