]> Creatis software - clitk.git/blobdiff - scripts/create_midP-2.0.sh
replaced deprecated clitk tools in midP creation
[clitk.git] / scripts / create_midP-2.0.sh
index 239745f5348c9daade6feefb3108ace546fea60a..7af8b09d0ab45fc08fcf42d3961697dff4f29e48 100755 (executable)
@@ -38,9 +38,10 @@ registration()
   # with the specified preffix, which is interesting for debugging. 
   # if blank, it means that the original images (those without bands) 
   # will be used (see create_midP_masks-2.0.sh for details).
-  banded="banded_"
+  banded=""
 
   # params read from conf file
+  use_coeffs=1
   params="$nb_iter $nb_samples $sampling_algo $nb_hist_bins $nb_levels $bspline_spacing $metric $optimizer $interpolator"
 
   # register all phases to the reference
@@ -57,6 +58,10 @@ registration()
       vf_in=$vf_dir/vf_inside_${ref_phase_nb}_$phase_nb.mhd
       result_in=$output_dir/result_inside_${ref_phase_nb}_$phase_nb.mhd
       log_in=$log_dir/log_inside_${ref_phase_nb}_$phase_nb.log
+      if [ $use_coeffs = 1 ]; then
+        init_coeff_in=$coeff_in # empty at first iteration
+        coeff_in=$vf_dir/coeff_inside_${ref_phase_nb}_$phase_nb.mhd
+      fi
 
       # outside params
       reference_out=$mask_dir/${banded}outside_$ref_phase_nb.mhd
@@ -66,27 +71,40 @@ registration()
       vf_out=$vf_dir/vf_outside_$ref_phase_nb\_$phase_nb.mhd
       result_out=$output_dir/result_outside_$ref_phase_nb\_$phase_nb.mhd
       log_out=$log_dir/log_outside_${ref_phase_nb}_$phase_nb.log
+      if [ $use_coeffs = 1 ]; then
+        init_coeff_out=$coeff_out # empty at first iteration
+        coeff_out=$vf_dir/coeff_outside_${ref_phase_nb}_$phase_nb.mhd
+      fi
 
       # registration
       if [ "$method" == "blutdir" ]; then
-        registration_blutdir $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in
-        registration_blutdir $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out
+        registration_blutdir $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in $coeff_in 
+        registration_blutdir $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out $coeff_out 
       elif [ "$method" == "elastix" ]; then
         registration_elastix $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in
         registration_elastix $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out
       fi
 
-      # combine in and out vf
       motion_mask=$mask_dir/mm_$phase_nb.mhd
+
+      # combine in and out results
+      out_result=$output_dir/result_${ref_phase_nb}_$phase_nb.mhd
+      # clitkCombineImage -i $result_in -j $result_out -m $motion_mask -o $out_result
+      combine_image $result_in $result_out $out_result $motion_mask 
+      abort_on_error registration $? clean_up_registration
+
+      # combine in and out vf
       vf_result=$vf_dir/vf_${ref_phase_nb}_$phase_nb.mhd
-      clitkCombineImage -i $vf_in -j $vf_out -m $motion_mask -o $vf_result
+      #clitkCombineImage -i $vf_in -j $vf_out -m $motion_mask -o $vf_result
+      combine_image $vf_in $vf_out $vf_result $motion_mask 
       abort_on_error registration $? clean_up_registration
 
       clitkZeroVF -i $vf_in -o vf_zero.mhd
       abort_on_error registration $? clean_up_registration
 
       patient_mask=$mask_dir/patient_mask_$phase_nb.mhd
-      clitkCombineImage -i $vf_result -j vf_zero.mhd -m $patient_mask -o $vf_result
+      #clitkCombineImage -i $vf_result -j vf_zero.mhd -m $patient_mask -o $vf_result
+      combine_image $vf_result vf_zero.mhd $vf_result $patient_mask 
       abort_on_error registration $? clean_up_registration
 
       rm vf_zero.*
@@ -96,12 +114,35 @@ registration()
     fi
   done
 
-  # create (zero) vf from reference to reference
+  # create (zero) vf from reference to reference and associated images
+  vf_in=$vf_dir/vf_inside_${ref_phase_nb}_${ref_phase_nb}.mhd
+  vf_out=$vf_dir/vf_outside_${ref_phase_nb}_${ref_phase_nb}.mhd
   clitkZeroVF -i $vf_ref -o $vf_dir/vf_${ref_phase_nb}_${ref_phase_nb}.mhd
+  clitkZeroVF -i $vf_ref -o $vf_in
+  clitkZeroVF -i $vf_ref -o $vf_out
+  abort_on_error registration $? clean_up_registration
+
+  motion_mask=$mask_dir/mm_${ref_phase_nb}.mhd
+  reference_in=$mask_dir/${banded}inside_${ref_phase_nb}.mhd
+  reference_out=$mask_dir/${banded}outside_$ref_phase_nb.mhd
+  out_result=$output_dir/result_${ref_phase_nb}_${ref_phase_nb}.mhd
+  #clitkCombineImage -i $reference_in -j $reference_out -m $motion_mask -o $out_result
+  combine_image $reference_in $reference_out $out_result $motion_mask 
   abort_on_error registration $? clean_up_registration
 
   # create 4D vf
   create_mhd_4D_pattern.sh $vf_dir/vf_${ref_phase_nb}_
+  create_mhd_4D_pattern.sh $vf_dir/vf_inside_${ref_phase_nb}_
+  create_mhd_4D_pattern.sh $vf_dir/vf_outside_${ref_phase_nb}_
+
+  # create 4D coeffs
+  create_mhd_4D_pattern.sh $vf_dir/coeff_inside_${ref_phase_nb}_ _0
+  create_mhd_4D_pattern.sh $vf_dir/coeff_outside_${ref_phase_nb}_ _0
+
+  # create 4D result image
+  create_mhd_4D_pattern.sh $output_dir/result_inside_${ref_phase_nb}_
+  create_mhd_4D_pattern.sh $output_dir/result_outside_${ref_phase_nb}_
+  create_mhd_4D_pattern.sh $output_dir/result_${ref_phase_nb}_
 
   echo
   echo "-------- Registration done ! --------"
@@ -124,10 +165,11 @@ midp()
   ########### calculate the midp wrt the reference phase
   phase_nb=$ref_phase_nb
   echo "Calculating midp_$phase_nb.mhd..."
-  vf_midp=$midp_dir/vf_$phase_nb\_midp.mhd
+  vf_midp=$midp_dir/vf_midp_$phase_nb.mhd
   midp=$midp_dir/midp_$phase_nb.mhd
   # average the vf's from reference phase to phase
-  clitkAverageTemporalDimension -i $vf_dir/vf_${ref_phase_nb}_4D.mhd -o $vf_midp
+  #clitkAverageTemporalDimension -i $vf_dir/vf_${ref_phase_nb}_4D.mhd -o $vf_midp
+  average_temporal_dimension $vf_dir/vf_${ref_phase_nb}_4D.mhd $vf_midp
   abort_on_error midp $? clean_up_midp
 
   # invert the vf (why?)
@@ -147,7 +189,7 @@ midp()
   for i in $( seq 0 $((${#phase_files[@]} - 1))); do
     phase_file=${phase_files[$i]}
     phase_nb=${phase_nbs[$i]}
-    vf_midp=$midp_dir/vf_$phase_nb\_midp.mhd
+    vf_midp=$midp_dir/vf_midp_$phase_nb.mhd
     midp=$midp_dir/midp_$phase_nb.mhd
 
     if [ "$phase_nb" != "$ref_phase_nb" ]; then
@@ -165,10 +207,13 @@ midp()
     fi
   done
 
+  # create 4D midp
   create_mhd_4D_pattern.sh $midp_dir/midp_
+  create_mhd_4D_pattern.sh $midp_dir/vf_midp_
 
   echo "Calculating midp_avg.mhd..."
-  clitkAverageTemporalDimension -i $midp_dir/midp_4D.mhd -o $midp_dir/midp_avg.mhd
+  #clitkAverageTemporalDimension -i $midp_dir/midp_4D.mhd -o $midp_dir/midp_avg.mhd
+  average_temporal_dimension $midp_dir/midp_4D.mhd $midp_dir/midp_avg.mhd
   abort_on_error midp $? clean_up_midp
 
   echo "Calculating midp_med.mhd..."
@@ -176,7 +221,7 @@ midp()
   abort_on_error midp $? clean_up_midp
 
   # clean-up
-  rm $midp_dir/vf_*
+  #rm $midp_dir/vf_*
       
   echo
   echo "-------- Mid-position done ! --------"
@@ -186,6 +231,120 @@ midp()
   echo
 }
 
+midp_in_out()
+{
+  echo
+  echo "----------- Mid-position ------------"
+  start=`date`
+  echo "start: $start"
+  echo
+
+  mkdir -p $midp_dir
+
+  ########### calculate the midp wrt the reference phase
+  phase_nb=$ref_phase_nb
+  phase_file=$ref_phase_file
+  echo "Calculating midp_$phase_nb.mhd..."
+  vf_midp_in=$midp_dir/vf_inside_midp_$phase_nb.mhd
+  vf_midp_out=$midp_dir/vf_outside_midp_$phase_nb.mhd
+  coeff_midp_in=$midp_dir/coeff_inside_midp_$phase_nb.mhd
+  coeff_midp_out=$midp_dir/coeff_outside_midp_$phase_nb.mhd
+  # average the vf's from reference phase to phase
+  # clitkAverageTemporalDimension -i $vf_dir/vf_inside_${ref_phase_nb}_4D.mhd -o $vf_midp_in
+  #clitkAverageTemporalDimension -i $vf_dir/coeff_inside_${ref_phase_nb}_4D_0.mhd -o $coeff_midp_in
+  average_temporal_dimension $vf_dir/coeff_inside_${ref_phase_nb}_4D_0.mhd $coeff_midp_in
+  abort_on_error midp $? clean_up_midp
+  # clitkAverageTemporalDimension -i $vf_dir/vf_outside_${ref_phase_nb}_4D.mhd -o $vf_midp_out
+  #clitkAverageTemporalDimension -i $vf_dir/coeff_outside_${ref_phase_nb}_4D_0.mhd -o $coeff_midp_out
+  average_temporal_dimension $vf_dir/coeff_outside_${ref_phase_nb}_4D_0.mhd $coeff_midp_out
+  abort_on_error midp $? clean_up_midp
+
+  # invert the vf 
+  # clitkInvertVF -i $vf_midp_in -o $vf_midp_in
+  clitkInvertVF -i $coeff_midp_in -o $vf_midp_in --type 1 --like $ref_phase_file
+  abort_on_error midp $? clean_up_midp
+  # clitkInvertVF -i $vf_midp_out -o $vf_midp_out
+  clitkInvertVF -i $coeff_midp_out -o $vf_midp_out --type 1 --like $ref_phase_file
+  abort_on_error midp $? clean_up_midp
+
+  # combine in and out VF's
+  ref_vf_midp_in=$vf_midp_in
+  ref_vf_midp_out=$vf_midp_out
+  vf_midp=$midp_dir/vf_midp_$phase_nb.mhd
+  #clitkCombineImage -i $vf_midp_in -j $vf_midp_out -o $vf_midp -m $mask_dir/mm_$phase_nb.mhd
+  combine_image $vf_midp_in $vf_midp_out $vf_midp $mask_dir/mm_$phase_nb.mhd
+  clitkZeroVF -i $vf_midp -o vf_zero.mhd
+  #clitkCombineImage -i $vf_midp -j vf_zero.mhd -o $vf_midp -m $mask_dir/patient_mask_$phase_nb.mhd
+  combine_image $vf_midp vf_zero.mhd $vf_midp $mask_dir/patient_mask_$phase_nb.mhd
+
+  # create the midp by warping the reference phase with the reference vf
+  midp=$midp_dir/midp_$phase_nb.mhd
+  clitkWarpImage -i $phase_file -o $midp --vf=$vf_midp -s 1
+  abort_on_error midp $? clean_up_midp
+
+  clitkImageConvert -i $midp -o $midp -t float
+  abort_on_error midp $? clean_up_midp
+
+  ########### calculate the midp wrt the other phases
+  for i in $( seq 0 $((${#phase_files[@]} - 1))); do
+    phase_file=${phase_files[$i]}
+    phase_nb=${phase_nbs[$i]}
+    vf_midp_in=$midp_dir/vf_inside_midp_$phase_nb.mhd
+    vf_midp_out=$midp_dir/vf_outside_midp_$phase_nb.mhd
+
+    if [ "$phase_nb" != "$ref_phase_nb" ]; then
+      echo "Calculating midp_$phase_nb.mhd..."
+      # calculate vf from phase to midp, using the vf from reference phase to midp (-i)
+      # and the vf from reference phase to phase (-j)
+      clitkComposeVF -i $ref_vf_midp_in -j $vf_dir/vf_inside_$ref_phase_nb\_$phase_nb.mhd -o $vf_midp_in
+      abort_on_error midp $? clean_up_midp
+      clitkComposeVF -i $ref_vf_midp_out -j $vf_dir/vf_outside_$ref_phase_nb\_$phase_nb.mhd -o $vf_midp_out
+      abort_on_error midp $? clean_up_midp
+
+      # combine in and out VF's
+      vf_midp=$midp_dir/vf_midp_$phase_nb.mhd
+      #clitkCombineImage -i $vf_midp_in -j $vf_midp_out -o $vf_midp -m $mask_dir/mm_$phase_nb.mhd
+      combine_image $vf_midp_in $vf_midp_out $vf_midp $mask_dir/mm_$phase_nb.mhd
+      clitkZeroVF -i $vf_midp -o vf_zero.mhd
+      #clitkCombineImage -i $vf_midp -j vf_zero.mhd -o $vf_midp -m $mask_dir/patient_mask_$phase_nb.mhd
+      combine_image $vf_midp vf_zero.mhd $vf_midp $mask_dir/patient_mask_$phase_nb.mhd
+      
+      midp=$midp_dir/midp_$phase_nb.mhd
+      clitkWarpImage -i $phase_file -o $midp --vf=$vf_midp -s 1
+      abort_on_error midp $? clean_up_midp
+      
+      clitkImageConvert -i $midp -o $midp -t float
+      abort_on_error midp $? clean_up_midp
+    fi
+  done
+
+  rm vf_zero.*
+
+  # create 4D midp
+  create_mhd_4D_pattern.sh $midp_dir/midp_
+  create_mhd_4D_pattern.sh $midp_dir/vf_midp_
+  create_mhd_4D_pattern.sh $midp_dir/vf_inside_midp_
+  create_mhd_4D_pattern.sh $midp_dir/vf_outside_midp_
+
+  echo "Calculating midp_avg.mhd..."
+  #clitkAverageTemporalDimension -i $midp_dir/midp_4D.mhd -o $midp_dir/midp_avg.mhd
+  average_temporal_dimension $midp_dir/midp_4D.mhd $midp_dir/midp_avg.mhd
+  abort_on_error midp $? clean_up_midp
+
+  echo "Calculating midp_med.mhd..."
+  clitkMedianTemporalDimension -i $midp_dir/midp_4D.mhd -o $midp_dir/midp_med.mhd
+  abort_on_error midp $? clean_up_midp
+
+  # clean-up
+  #rm $midp_dir/vf_*
+      
+  echo
+  echo "-------- Mid-position done ! --------"
+  end=`date`
+  echo "start: $start"
+  echo "end: $end"
+  echo
+}
 
 
 ######################### main
@@ -222,8 +381,13 @@ if [ "$step" == "registration" -o "$step" == "all" ]; then
   registration
 fi 
 
+midp_combined_vf=0
 if [ "$step" == "midp" -o "$step" == "all" ]; then
-  midp
+  if [ $midp_combined_vf = 0 ]; then
+    midp_in_out
+  else
+    midp
+  fi
 fi 
 
 echo