]> Creatis software - clitk.git/blob - scripts/registration.sh
new midP related scripts
[clitk.git] / scripts / registration.sh
1 #! /bin/sh
2
3 ###############################################################################
4 #
5 # FILE: registration.sh
6 # AUTHOR: RĂ´mulo Pinho 05/08/2011
7 #
8 # Helper file with registration functions using different methods.
9 # Each function receives a set of parameters that overall apply to any
10 # registration algorithm, as follows:
11
12 # reference=$1 : reference (fixed) image
13 # target=$2 : target (moving) image
14 # mask_ref=$3 : mask for the reference image
15 # mask_targ=$4 : mask for the moving image
16 # vf=$5 : output vector field representing the registration
17 # result=$6 : result image after applying the vector field
18 # nb_iter=$7 : maximum number of iterations
19 # nb_samples=$8 : number of image samples used in the metric calulcation
20 # sampling_algo=$9 : algorithm used in the selection of image samples
21 # hist_bins=${10} : number of histogram bins used in the metric calculation
22 # nb_levels=${11} : number of image resolutions
23 # spacing=${12} : spacing of the b-spline grid of the fines resolution
24 # metric=${13} : metric algorithm
25 # optimizer=${14} : optimizer
26 # interpolator=${15} : image interpolator 
27 # log=${16} : log file
28 #
29 # New registration functions may be added to this file at any moment, 
30 # respecting the interface defined above.
31 #
32 ###############################################################################
33
34
35 ################# BLUTDIR #####################
36 registration_blutdir()
37 {
38   reference=$1
39   target=$2
40   mask_ref=$3
41   mask_targ=$4
42   vf=$5
43   result=$6
44   nb_iter=$7
45   nb_samples=$8
46   sampling_algo=$9
47   hist_bins=${10}
48   nb_levels=${11}
49   spacing=${12}
50   metric=${13}
51   optimizer=${14}
52   interpolator=${15}
53   log=${16}
54
55   echo "Computing BLUTDIR $reference -> $target ..."
56   blutdir_params="--levels $nb_levels  --metric $metric --optimizer $optimizer --samples $nb_samples --spacing $spacing,$spacing,$spacing --bins $hist_bins --maxIt $nb_iter --interp $interpolator --verbose"
57   cmd="clitkBLUTDIR -r $reference -t $target -m $mask_ref --targetMask $mask_targ --vf $vf -o $result $blutdir_params"
58   $cmd > $log
59 }
60
61 ################# ELASTIX #####################
62 registration_elastix()
63 {
64   reference=$1
65   target=$2
66   mask_ref=$3
67   mask_targ=$4
68   vf=$5
69   result=$6
70   nb_iter=$7
71   nb_samples=$8
72   sampling_algo=$9
73   hist_bins=${10}
74   nb_levels=${11}
75   spacing=${12}
76   metric=${13}
77   optimizer=${14}
78   interpolator=${15}
79   
80   ########## register in ##########
81   for reg_in in $reg_in_list
82   do
83     if [ ! -z `echo $reg_in | grep "_$phase"` ]
84     then
85       target_in=$reg_in
86     fi
87   done
88   echo "Computing ELASTIX $reference -> $target ..."
89   exec_dir=`which elastix`
90   exec_dir=`dirname $exec_dir`
91   cat $exec_dir/params_BSpline.txt | sed -e "s+<NbIterations>+$nb_iter+" \
92                               -e "s+<LabelsFile>++" \
93                               -e "s+<HistBins>+$hist_bins+" \
94                               -e "s+<Levels>+$nb_levels+" \
95                               -e "s+<NbSamples>+$nb_samples+" \
96                               -e "s+<SamplerType>+$sampling_algo+" \
97                               -e "s+<Spacing>+$spacing+" > params_BSpline.txt 
98
99   vf_dir=`dirname $vf`
100   vf_base=`basename $vf .mhd`
101   result_dir=`dirname $result`
102   result_base=`basename $result .mhd`
103
104   # image registration
105   cmd="elastix -f $reference -m $target -fMask $mask_ref -mMask $mask_targ -out $result_dir -p params_BSpline.txt"
106   $cmd  > /dev/null
107
108   # generate vector field
109   cmd="transformix -tp $result_dir/TransformParameters.0.txt -out $vf_dir -def all"
110   $cmd  > /dev/null
111
112   # post-processing
113   mv $vf_dir/deformationField.mhd $vf
114   mv $vf_dir/deformationField.raw `echo $vf | sed 's/mhd/raw/'`
115   sed -i "s+deformationField+$vf_base+" $vf
116
117   mv $result_dir/result.0.mhd $result
118   mv $result_dir/result.0.raw `echo $result | sed 's/mhd/raw/'`
119   sed -i "s+result.0+$result_base+" $result
120
121   mv $result_dir/elasitx.log $log
122   mv $result_dir/TransformParameters.0.txt $result_dir/${result_base}_TransformParameters.0.txt
123 }