X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=scripts%2Fcreate_midP.sh;fp=scripts%2Fcreate_midP.sh;h=0000000000000000000000000000000000000000;hb=b0a5bad2f1ac4991b4d2bdb1c015275128441635;hp=7591efb8004e2c7ad51b384377f4e62893c6abb9;hpb=ee568ccc2ae2be4d9d60967e522e2d81cb148d95;p=clitk.git diff --git a/scripts/create_midP.sh b/scripts/create_midP.sh deleted file mode 100755 index 7591efb..0000000 --- a/scripts/create_midP.sh +++ /dev/null @@ -1,535 +0,0 @@ -#!/bin/sh -x - -################################################################# -# create_MidP arguments : CT_4D.mhd ref_phase spacing # -################################################################# -source `dirname $0`/midp_common.sh - -extract_patient() -{ - echo "$image_name -> Extracting patient..." - $CLITK/clitkExtractPatient -i $image_name -o MASK/patient_$image_name --noAutoCrop - $CLITK/clitkBinarizeImage -i MASK/patient_$image_name -o MASK/patient_$image_name -l 1 -u 1 --mode=BG - $CLITK/clitkSetBackground -i $image_name -o MASK/patient_only_$image_name --mask MASK/patient_$image_name --outsideValue -1000 -} - -extract_bones() -{ - echo "$image_name -> Extracting bones..." - $CLITK/clitkImageConvert -i $image_name -o MASK/float_$image_name -t float - $CLITK/clitkExtractBones -i MASK/float_$image_name -o MASK/bones_$image_name --lower1 120 --upper1 2000 --lower2 70 --upper2 2000 --smooth --time 0.0625 --noAutoCrop - $CLITK/clitkMorphoMath -i MASK/bones_$image_name -o MASK/bones_$image_name --type 2 --radius 4,4,2 -} - -resample() -{ - echo "$image_name -> Resampling..." - $CLITK/clitkResampleImage -i MASK/patient_$image_name -o MASK/patient_$image_name --spacing $spacing - $CLITK/clitkResampleImage -i MASK/patient_only_$image_name -o MASK/patient_only_$image_name --spacing $spacing - #$CLITK/clitkResampleImage -i MASK/bones_$image_name -o MASK/bones_$image_name --like MASK/patient_only_$image_name -} - -compute_motion_mask() -{ -# $CLITK/clitkMotionMask -i MASK/patient_only_$image_name -o MASK/mm_$image_name --featureBones=MASK/bones_$image_name --upperThresholdLungs -400 --fillingLevel 94 --offsetDetect 0,-5,0 --pad --writeFeature=MASK/feature_$image_name --writeEllips=MASK/inital_ellipse_$image_name --writeGrownEllips=MASK/growing_ellipse_$image_name; -$CLITK/clitkMotionMask -i MASK/patient_only_$image_name -o MASK/mm_$image_name --upperThresholdLungs -400 --fillingLevel 94 --offsetDetect 0,-5,0 --pad --writeFeature=MASK/feature_$image_name --writeEllips=MASK/inital_ellipse_$image_name --writeGrownEllips=MASK/growing_ellipse_$image_name; -} - -set_background() -{ - echo "$image_name -> Setting Background..." - $CLITK/clitkSetBackground -i MASK/patient_only_$image_name -o MASK/inside_$image_name --mask MASK/mm_$image_name --outsideValue -1200 - $CLITK/clitkSetBackground -i MASK/patient_only_$image_name -o MASK/outside_$image_name --mask MASK/mm_$image_name --outsideValue -1200 --fg -} - -create_registration_masks() -{ - echo "$image_name -> Creating registration masks..." - $CLITK/clitkMorphoMath -i MASK/mm_$image_name -o MASK/regmask_in_$image_name --type 1 --radius 8 - $CLITK/clitkExtractPatient -i MASK/outside_$image_name -o MASK/regmask_out_$image_name --noAutoCrop - $CLITK/clitkMorphoMath -i MASK/regmask_out_$image_name -o MASK/regmask_out_$image_name --type 1 --radius 8 -} - -remove_files() -{ - echo "Removing temporary files..." - image_name_base=`echo $image_name | sed 's/mhd//'` - case $1 in - 1) - rm MASK/float_$image_name_base*;; - 2) - rm MASK/bones_$image_name_base*;; - 3) - rm MASK/patient_only_$image_name_base*;; - 4) - #rm MASK/patient_$image_name_base* - #rm MASK/mm_$image_name_base* - rm -f $vf_dir/vf_tmp_in_${ref}_${phase}.* - rm -f $vf_dir/vf_tmp_out_${ref}_${phase}.* - #rm MASK/regmask_in_$image_name_base* - #rm MASK/regmask_out_$image_name_base* - ;; - 5) -# rm -f coeff_* - #rm $vf_dir/vf_in_* - #rm $vf_dir/vf_out_* -# rm MASK/regmask_* -# rm MASK/mm_* - ;; - 6) - ;; - #rm -f $vf_dir/_4D.* - #rm -f $vf_dir/vf_MIDP_${ref}.* - #rm -f $vf_dir/vf_${ref}_MIDP.*;; - 7) - ;; #rm $vf_dir/vf_MIDP_${phase}.*;; - 8) - rm $vf_dir/*.txt - rm $vf_dir/*.log - esac -} - -mm_preprocessing() -{ - extract_patient - #extract_bones - remove_files 1 - resample -} - -mm_postprocessing() -{ - remove_files 2 - set_background - remove_files 3 - create_registration_masks -} - -# mm_workflow() -# { -# extract_patient -# extract_bones -# remove_files 1 -# resample -# echo "$image_name -> Computing motion mask..." -# compute_motion_mask >> LOG/motion_mask_$image_name.log -# remove_files 2 -# set_background -# remove_files 3 -# create_registration_masks -# } - -motion_mask() -{ - echo - echo "------------ Motion mask ------------" - start=`date` - echo "start: $start" - echo - mkdir -p "MASK" - rm -f "LOG/motion_mask*.log" - regmask_in_list="" - regmask_out_list="" - reg_in_list="" - reg_out_list="" - - # multi-threaded pre-processing for motion mask calcs - for phase in $phase_list - do - image_name=`echo $phase | sed 's/raw/mhd/'` - check_threads $MAX_THREADS - #mm_preprocessing & - done - - # single-threaded motion mask calc - check_threads 1 - for phase in $phase_list - do - image_name=`echo $phase | sed 's/raw/mhd/'` - - echo "$image_name -> Computing motion mask..." - #compute_motion_mask >> LOG/motion_mask_$image_name.log - done - - # multi-threaded post-processing of motion mask calcs - for phase in $phase_list - do - image_name=`echo $phase | sed 's/raw/mhd/'` - check_threads $MAX_THREADS - #mm_postprocessing & - regmask_in_list="$regmask_in_list regmask_in_$image_name" - regmask_out_list="$regmask_out_list regmask_out_$image_name" - reg_in_list="$reg_in_list inside_$image_name" - reg_out_list="$reg_out_list outside_$image_name" - done - - wait - echo - echo "-------- Motion mask done ! ---------" - end=`date` - echo "start: $start" - echo "end: $end" - echo -} - -compute_BLUTDIR() -{ - ########## register in ########## - for reg_in in $reg_in_list - do - if [ ! -z `echo $reg_in | grep "$phase"` ] - then - target_in=$reg_in - fi - done - echo "Computing BLUTDIR $reference_in -> $target_in ..." - #$CLITK/clitkBLUTDIR --reference="MASK/$reference_in" --target="MASK/$target_in" --output="MASK/reg_$target_in" --referenceMask="MASK/$reference_mask_in" --vf="$vf_dir/vf_in_${ref}_${phase}.mhd" $coeff_in_ini --coeff="$coeff_dir/coeff_in_${ref}_${phase}.mhd" $registration_parameters_BLUTDIR >> LOG/registration_${ref}_${phase}.log - $CLITK/clitkBLUTDIR --reference="MASK/$reference_in" --target="MASK/$target_in" --output="MASK/reg_$target_in" --referenceMask="MASK/$reference_mask_in" --vf="$vf_dir/vf_in_${ref}_${phase}.mhd" --coeff="$coeff_dir/coeff_in_${ref}_${phase}.mhd" $registration_parameters_BLUTDIR >> LOG/registration_${ref}_${phase}.log - coeff_in_ini="--initCoeff=$coeff_dir/coeff_in_${ref}_${phase}.mhd" - ########## register out ########## - for reg_out in $reg_out_list - do - if [ ! -z `echo $reg_out | grep "$phase"` ] - then - target_out=$reg_out - fi - done - echo "Computing BLUTDIR $reference_out -> $target_out ..." - #$CLITK/clitkBLUTDIR --reference="MASK/$reference_out" --target="MASK/$target_out" --output="MASK/reg_$target_out" --referenceMask="MASK/$reference_mask_out" --vf="$vf_dir/vf_out_${ref}_${phase}.mhd" $coeff_out_ini --coeff="$coeff_dir/coeff_out_${ref}_${phase}.mhd" $registration_parameters_BLUTDIR >> LOG/registration_${ref}_${phase}.log - $CLITK/clitkBLUTDIR --reference="MASK/$reference_out" --target="MASK/$target_out" --output="MASK/reg_$target_out" --referenceMask="MASK/$reference_mask_out" --vf="$vf_dir/vf_out_${ref}_${phase}.mhd" --coeff="$coeff_dir/coeff_out_${ref}_${phase}.mhd" $registration_parameters_BLUTDIR >> LOG/registration_${ref}_${phase}.log - coeff_out_ini="--initCoeff=$coeff_dir/coeff_out_${ref}_${phase}.mhd" - ################################## - $CLITK/clitkCombineImage -i $vf_dir/vf_in_${ref}_${phase}.mhd -j $vf_dir/vf_out_${ref}_${phase}.mhd -m MASK/mm_$image_name -o $vf_dir/vf_${ref}_${phase}.mhd - $CLITK/clitkZeroVF -i $vf_dir/vf_${ref}_${phase}.mhd -o $vf_dir/vf_${ref}_${ref}.mhd - $CLITK/clitkCombineImage -i $vf_dir/vf_${ref}_${phase}.mhd -j $vf_dir/vf_${ref}_${ref}.mhd -m MASK/patient_$image_name -o $vf_dir/vf_${ref}_${phase}.mhd - remove_files 4 -} - -compute_DEMONSDIR() -{ - ########## register in ########## - for reg_in in $reg_in_list - do - if [ ! -z `echo $reg_in | grep "_$phase"` ] - then - target_in=$reg_in - fi - done - echo "Computing DEMONSDIR $reference_in -> $target_in ..." - $CLITK/clitkDemonsDeformableRegistration --reference="MASK/$reference_in" --target="MASK/$target_in" --output="MASK/reg_$target_in" --vf="$vf_dir/vf_in_${ref}_${phase}.mhd" $vf_in_ini $registration_parameters_DEMONSDIR #&>> LOG/registration_${ref}_${phase}.log - vf_in_ini="--init=$vf_dir/vf_in_${ref}_${phase}.mhd" - ########## register out ########## - for reg_out in $reg_out_list - do - if [ ! -z `echo $reg_out | grep "_$phase"` ] - then - target_out=$reg_out - fi - done - echo "Computing DEMONSDIR $reference_out -> $target_out ..." - $CLITK/clitkDemonsDeformableRegistration --reference="MASK/$reference_out" --target="MASK/$target_out" --output="MASK/reg_$target_out" --vf="$vf_dir/vf_out_${ref}_${phase}.mhd" $vf_out_ini $registration_parameters_DEMONSDIR #&>> LOG/registration_${ref}_${phase}.log - vf_out_ini="--init=$vf_dir/vf_out_${ref}_${phase}.mhd" - ################################## - $CLITK/clitkCombineImage -i $vf_dir/vf_in_${ref}_${phase}.mhd -j $vf_dir/vf_out_${ref}_${phase}.mhd -m MASK/mm_$image_name -o $vf_dir/vf_${ref}_${phase}.mhd - $CLITK/clitkZeroVF -i $vf_dir/vf_${ref}_${phase}.mhd -o $vf_dir/vf_${ref}_${ref}.mhd - $CLITK/clitkCombineImage -i $vf_dir/vf_${ref}_${phase}.mhd -j $vf_dir/vf_${ref}_${ref}.mhd -m MASK/patient_$image_name -o $vf_dir/vf_${ref}_${phase}.mhd - remove_files 4 -} - -compute_ELASTIX() -{ - ########## register in ########## - for reg_in in $reg_in_list - do - if [ ! -z `echo $reg_in | grep "_$phase"` ] - then - target_in=$reg_in - fi - done - echo "Computing ELASTIX $reference_in -> $target_in ..." - exec_dir=`which elastix` - exec_dir=`dirname $exec_dir` - cat $exec_dir/params_BSpline.txt | sed -e "s++500+" \ - -e "s+++" \ - -e "s++25+" \ - -e "s++3+" \ - -e "s++2000+" \ - -e "s++Random+" \ - -e "s++32+" > params_BSpline.txt - elastix -f "MASK/$reference_in" -m "MASK/$target_in" -fMask "MASK/$reference_mask_in" -out $vf_dir -p params_BSpline.txt > /dev/null - transformix -tp $vf_dir/TransformParameters.0.txt -out $vf_dir -def all > /dev/null - mv $vf_dir/deformationField.mhd $vf_dir/vf_in_${ref}_${phase}.mhd - mv $vf_dir/deformationField.raw $vf_dir/vf_in_${ref}_${phase}.raw - sed -i "s:deformationField:vf_in_${ref}_${phase}:" $vf_dir/vf_in_${ref}_${phase}.mhd - mv $vf_dir/result.0.mhd MASK/reg_$target_in - targetraw=`echo reg_$target_in | sed 's:mhd:raw:'` - sed -i "s:result.0.mhd:$targetraw" MASK/reg_$target_in - mv $vf_dir/result.0.raw MASK/$targetraw - remove_files 8 - - ########## register out ########## - for reg_out in $reg_out_list - do - if [ ! -z `echo $reg_out | grep "_$phase"` ] - then - target_out=$reg_out - fi - done - echo "Computing ELASTIX $reference_out -> $target_out ..." - elastix -f "MASK/$reference_out" -m "MASK/$target_out" -fMask "MASK/$reference_mask_out" -out $vf_dir -p params_BSpline.txt > /dev/null - transformix -tp $vf_dir/TransformParameters.0.txt -out $vf_dir -def all > /dev/null - mv $vf_dir/deformationField.mhd $vf_dir/vf_out_${ref}_${phase}.mhd - mv $vf_dir/deformationField.raw $vf_dir/vf_out_${ref}_${phase}.raw - sed -i "s:deformationField:vf_out_${ref}_${phase}:" $vf_dir/vf_out_${ref}_${phase}.mhd - mv $vf_dir/result.0.mhd MASK/reg_$target_out - targetraw=`echo reg_$target_out | sed 's:mhd:raw:'` - sed -i "s:result.0.mhd:$targetraw" MASK/reg_$target_out - mv $vf_dir/result.0.raw MASK/$targetraw - remove_files 8 - - ################################## - $CLITK/clitkCombineImage -i $vf_dir/vf_in_${ref}_${phase}.mhd -j $vf_dir/vf_out_${ref}_${phase}.mhd -m MASK/mm_$image_name -o $vf_dir/vf_${ref}_${phase}.mhd - $CLITK/clitkZeroVF -i $vf_dir/vf_${ref}_${phase}.mhd -o $vf_dir/vf_${ref}_${ref}.mhd - $CLITK/clitkCombineImage -i $vf_dir/vf_${ref}_${phase}.mhd -j $vf_dir/vf_${ref}_${ref}.mhd -m MASK/patient_$image_name -o $vf_dir/vf_${ref}_${phase}.mhd - remove_files 4 -} - -registration() -{ - echo - echo "----------- Registration ------------" - start=`date` - echo "start: $start" - echo - - rm -f "LOG/registration*.log" - - # wait any unfinished threads - check_threads 1 - - for reg_in in $reg_in_list - do - if [ ! -z `echo $reg_in | grep "$ref"` ] - then - reference_in=$reg_in - fi - done - for reg_out in $reg_out_list - do - if [ ! -z `echo $reg_out | grep "$ref"` ] - then - reference_out=$reg_out - fi - done - for regmask_in in $regmask_in_list - do - if [ ! -z `echo $regmask_in | grep "$ref"` ] - then - reference_mask_in=$regmask_in - fi - done - for regmask_out in $regmask_out_list - do - if [ ! -z `echo $regmask_out | grep "$ref"` ] - then - reference_mask_out=$regmask_out - fi - done - - registration_parameters_BLUTDIR="--spacing=32,32,32 --interp=2 --metric=11 --bins=25 --samples=1 --levels=3 --verbose " #--coeffEveryN 5" - registration_parameters_DEMONSDIR="--demons=3 --levels=1" - registration_parameters_ELASTIX="--demons=3 --levels=1" - - coeff_in_ini="" - coeff_out_ini="" - vf_in_ini="" - vf_out_ini="" - - for phase in $list_phases - do - for img in $phase_list - do - if [ ! -z `echo $img | grep "$phase" | grep -v "[0-9]$phase"` ] - then - image_name=`echo $img | sed 's/raw/mhd/'` - fi - done - if [ $method = 1 ] - then - compute_BLUTDIR - elif [ $method = 2 ] - then - compute_DEMONSDIR - elif [ $method = 3 ] - then - compute_ELASTIX - fi - done - remove_files 5 - - echo - echo "-------- Registration done ! --------" - end=`date` - echo "start: $start" - echo "end: $end" - echo -} - -calculate_vf_MIDP_REF() -{ - echo "Calculating vf_REF_MIDP.mhd..." - remove_files 6 - create_mhd_4D.sh $vf_dir #"vf_4D.mhd" - $CLITK/clitkAverageTemporalDimension -i $vf_dir/_4D.mhd -o $vf_dir/vf_${ref}_MIDP.mhd - $CLITK/clitkInvertVF -i $vf_dir/vf_${ref}_MIDP.mhd -o $vf_dir/vf_MIDP_${ref}.mhd -} - -calculate_CT_MIDP_REF() -{ - reference=`ls *.mhd | grep $ref #| grep -v "[0-9]$ref.mhd"` - echo "Calculating CT_MIDP_REF.mhd '$reference'..." - $CLITK/clitkWarpImage -i $reference -o CT_MIDP_REF.mhd --vf=$vf_dir/vf_MIDP_${ref}.mhd -s 1 -} - -calculate_CT_MIDP_PHASE() -{ - echo "Calculating CT_MIDP_${phase}.mhd..." - $CLITK/clitkComposeVF -i $vf_dir/vf_MIDP_${ref}.mhd -j $vf_dir/vf_${ref}_${phase}.mhd -o $vf_dir/vf_MIDP_${phase}.mhd - phase_img=`ls *.mhd | grep "${phase}" # | grep -v "[0-9]$ref.mhd"` - $CLITK/clitkWarpImage -i $phase_img -o MIDP/CT_MIDP_${phase}.mhd --vf=$vf_dir/vf_MIDP_${phase}.mhd -s 1 - $CLITK/clitkImageConvert -i MIDP/CT_MIDP_${phase}.mhd -o MIDP/CT_MIDP_${phase}.mhd -t float - remove_files 7 -} - -prepare_MIDP_images() -{ - echo "Preparing MIDP images..." - cp CT_MIDP_REF.mhd MIDP/CT_MIDP_${ref}.mhd - cp CT_MIDP_REF.raw MIDP/CT_MIDP_${ref}.raw - cat MIDP/CT_MIDP_${ref}.mhd | sed "s/ElementDataFile = .*/ElementDataFile = CT\_MIDP\_${ref}\.raw/" > MIDP/CT_MIDP_${ref}_tmp.mhd - rm MIDP/CT_MIDP_${ref}.mhd - mv MIDP/CT_MIDP_${ref}_tmp.mhd MIDP/CT_MIDP_${ref}.mhd - $CLITK/clitkImageConvert -i MIDP/CT_MIDP_${ref}.mhd -o MIDP/CT_MIDP_${ref}.mhd -t float - create_mhd_4D.sh MIDP #"CT_MIDP_4D.mhd" -} - -calculate_CT_MIDP_MOY() -{ - echo "Calculating CT_MIDP_MOY.mhd..." - $CLITK/clitkAverageTemporalDimension -i MIDP/_4D.mhd -o CT_MIDP_MOY.mhd -} - -calculate_CT_MIDP_MED() -{ - echo "Calculating CT_MIDP_MED.mhd..." - $CLITK/clitkMedianTemporalDimension -i MIDP/_4D.mhd -o CT_MIDP_MED.mhd -} - -calculate_CT_MIDP_MIP() -{ - echo "Calculating CT_MIDP_MIP.mhd..." - $CLITK/clitkMIP -i MIDP/_4D.mhd -o CT_MIDP_MIP.mhd -d 3 -} - -mid_position() -{ - echo - echo "----------- Mid-position ------------" - start=`date` - echo "start: $start" - echo - - mkdir -p "MIDP" - - calculate_vf_MIDP_REF - calculate_CT_MIDP_REF - for phase in $list_phases - do - check_threads $MAX_THREADS - calculate_CT_MIDP_PHASE & - done - wait - prepare_MIDP_images - calculate_CT_MIDP_MED & - calculate_CT_MIDP_MIP & - calculate_CT_MIDP_MOY & - wait - - echo - echo "-------- Mid-position done ! --------" - end=`date` - echo "start: $start" - echo "end: $end" - echo -} - -################# -# main # -################# - -if [ $# -lt 1 ] -then - echo "Usage: create_midP.sh CT_4D.mhd ref_phase computation_spacing(mm) method(1:BSPLINE, 2:DEMONS)" - exit 1 -fi -CLITK=~/creatis/clitk3/build/bin -CT_4D_path=$1 -CT_4D=`basename $CT_4D_path` -work_dir=`dirname $CT_4D_path` -cd $work_dir -ref=$2 -spacing=$3 -method=$4 - -vf_dir="VF" -coeff_dir="$vf_dir/coeff" - -mkdir -p $vf_dir -mkdir -p $coeff_dir - -echo -echo "--------------- START ---------------" -begining=`date` -echo "start: $begining" -echo - -mkdir -p "LOG" -phase_list=`grep ".raw" $CT_4D` -echo "phases -> " $phase_list -nb_phases=`grep ".raw" $CT_4D | wc -l` -gt_ref="" -lt_ref="" - -phase_files=( `cat $CT_4D | grep ".raw" | sed 's:.raw:.mhd:'` ) -echo "Phase files are ${phase_files[@]}" - -phase_nbs=( `echo ${phase_files[@]} | grep -o '[[:alpha:][:punct:]][0-9]\{1,2\}[[:punct:]]' | grep -o '[0-9]\{1,2\}'` ) -#phase_nbs=( `echo ${phase_files[@]} | grep -o '[0-9]\{1,2\}'` ) -echo "Phase numbers are ${phase_nbs[@]}" - - -for ph in $phase_list -do - #ph_nb=`echo $ph | grep -o "[0-9][0-9]*\.raw" | sed -e 's/\.raw//'` - ph_nb=`echo $ph | grep -o "[0-9][0-9]"` - if [ $ph_nb -gt $ref ] - then - gt_ref="$gt_ref $ph_nb" - elif [ $ph_nb -lt $ref ] - then - lt_ref="$lt_ref $ph_nb" - fi -done -list_phases="$gt_ref $lt_ref" -echo list_phases $list_phases - -motion_mask -registration -mid_position - -echo -echo "---------------- END ----------------" -terminating=`date` -echo "start: $begining" -echo "end: $terminating" -echo