+++ /dev/null
-#!/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+<NbIterations>+500+" \
- -e "s+<LabelsFile>++" \
- -e "s+<HistBins>+25+" \
- -e "s+<Levels>+3+" \
- -e "s+<NbSamples>+2000+" \
- -e "s+<SamplerType>+Random+" \
- -e "s+<Spacing>+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