X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=scripts%2Fcreate_midP-2.0.sh;h=7af8b09d0ab45fc08fcf42d3961697dff4f29e48;hb=a3b837ce11b76111761bd519d48bce7881b630c3;hp=239745f5348c9daade6feefb3108ace546fea60a;hpb=4f4d79533d2bdd0c13d90cde6bbb67e5f313b638;p=clitk.git diff --git a/scripts/create_midP-2.0.sh b/scripts/create_midP-2.0.sh index 239745f..7af8b09 100755 --- a/scripts/create_midP-2.0.sh +++ b/scripts/create_midP-2.0.sh @@ -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