# 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
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
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
- clitkCombineImage -i $vf_result -j vf_zero.mhd -m $patient_mask -o $vf_result
+ 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
+ combine_image $vf_result vf_zero.mhd $vf_result $patient_mask
+ abort_on_error registration $? clean_up_registration
+
rm vf_zero.*
# save for later...
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 ! --------"
########### 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?)
clitkInvertVF -i $vf_midp -o $vf_midp
+ abort_on_error midp $? clean_up_midp
+
# create the midp by warping the reference phase with the reference vf
clitkWarpImage -i $ref_phase_file -o $midp --vf=$vf_midp -s 1
+ abort_on_error midp $? clean_up_midp
ref_vf_midp=$vf_midp
ref_midp=$midp
clitkImageConvert -i $ref_midp -o $ref_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=$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
# 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 -j $vf_dir/vf_$ref_phase_nb\_$phase_nb.mhd -o $vf_midp
+ abort_on_error midp $? clean_up_midp
+
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
+ # 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..."
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_*
+ #rm $midp_dir/vf_*
echo
echo "-------- Mid-position done ! --------"
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
conf=$3
source $conf
+cd `dirname $mhd4d`
+
mkdir -p $log_dir
mask_dir="MASK-${mask_interpolation_spacing}mm-$mask_interpolation_algorithm"
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