]> Creatis software - clitk.git/commitdiff
Merge branch 'master' of git.creatis.insa-lyon.fr:clitk
authorDavid Sarrut <david.sarrut@gmail.com>
Fri, 6 Jul 2012 06:40:00 +0000 (08:40 +0200)
committerDavid Sarrut <david.sarrut@gmail.com>
Fri, 6 Jul 2012 06:40:00 +0000 (08:40 +0200)
CMakeLists.txt
scripts/create_midP-2.0.sh
scripts/midp_common.sh
scripts/registration.sh
segmentation/clitkFilterWithAnatomicalFeatureDatabaseManagement.cxx
utilities/CxImage/ximacfg.h
vv/vvBlendImageActor.cxx
vv/vvBlendImageActor.h
vv/vvSlicer.cxx
vv/vvSlicerManager.cxx

index 0c65b285c2ad73dad25ea45ee59dd8b76fd00002..0d4027d154bea4d6121fee43fee3dcee6d15be58 100644 (file)
@@ -11,6 +11,8 @@ IF(NOT DEFINED CLITK_SOURCE_DIR)
 ENDIF(NOT DEFINED CLITK_SOURCE_DIR)
 #=========================================================
 
+SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+
 #=========================================================
 INCLUDE(${CLITK_SOURCE_DIR}/cmake/common.cmake)
 INCLUDE(${CLITK_SOURCE_DIR}/cmake/dependencies.cmake)
index 8830a1bc7dacf8cccc272103d4bddcd798b2caf6..4c2b41b23c5fd39d2d22673b54265a3cc75af2bc 100755 (executable)
@@ -81,8 +81,8 @@ registration()
         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
+        registration_elastix $reference_in $target_in $mask_ref_in $mask_targ_in $vf_in $result_in $params $log_in $coeff_in
+        registration_elastix $reference_out $target_out $mask_ref_out $mask_targ_out $vf_out $result_out $params $log_out $coeff_out
       fi
 
       motion_mask=$mask_dir/${mask_type}_$phase_nb.mhd
index a5d0bafecedab8873c7a1615729fa2ed9cac92be..e120168efae9737440dd41008e34c3d952693c6d 100755 (executable)
@@ -9,6 +9,9 @@
 #
 ###############################################################################
 
+bin=`dirname $0`
+source $bin/tools.sh
+
 #
 # check return value passed and abort if it represents an error (ie, ret != 0)
 # optionally, a function can be passed as a 3rd parameter, to be called just
@@ -219,7 +222,7 @@ select_contour_gui()
     if [ -z $roi ]
     then
       zenity --warning --text="You must choose one contour."
-      select_contour $roi_list
+      select_contour_gui $roi_list
     else
       rtstruct_roi_name=$roi
     fi;;
@@ -228,7 +231,7 @@ select_contour_gui()
     then
       exit
     else
-      select_contour $roi_list
+      select_contour_gui $roi_list
     fi;;
     -1)
       zenity --error --text="Unexpected error. Please relaunch the application."
@@ -259,8 +262,8 @@ select_contour()
 
 select_roi()
 {
-  rtstruct_roi_name_list=( `clitkDicomInfo ${rtstruct_file} | grep "3006|0026" | cut -d '[' -f 4 | sed 's/| V 3006|0026[LO] [ROI Name] \|]//'` )
-  rtstruct_roi_number_list=( `clitkDicomInfo ${rtstruct_file} | grep "3006|0022" | cut -d '[' -f 4 | sed 's/| V 3006|0026[LO] [ROI Number] \|]//'` )
+  rtstruct_roi_name_list=( `get_dicom_field_value "3006|0026" ${rtstruct_file} all | sed 's/ /_/g'` )
+  rtstruct_roi_number_list=( `get_dicom_field_value "3006|0022" ${rtstruct_file} all | sed 's/ //g'` )
   rtstruct_roi_list=( )
   for i in $(seq 0 1 $(( ${#rtstruct_roi_name_list[@]} - 1 ))); do
     rtstruct_roi_list[$i]=${rtstruct_roi_number_list[$i]}:${rtstruct_roi_name_list[$i]}
@@ -275,4 +278,4 @@ select_roi()
     rtstruct_roi=${rtstruct_roi_number_list[$(( $rtstruct_roi_index ))]}
     rtstruct_roi_name=${rtstruct_roi_name_list[$(( $rtstruct_roi_index ))]}
   fi
-}
\ No newline at end of file
+}
index 62ebb7d8ac90828641a7b1b455522c5700cc0493..8f6a5f29af3d465cfea649aeb0f56d8eb68b69e7 100755 (executable)
@@ -76,21 +76,29 @@ registration_blutdir()
 ################# ELASTIX #####################
 registration_elastix()
 {
-  reference=$1
-  target=$2
-  mask_ref=$3
-  mask_targ=$4
-  vf=$5
-  result=$6
-  nb_iter=$7
-  nb_samples=$8
-  sampling_algo=$9
-  hist_bins=${10}
-  nb_levels=${11}
-  spacing=${12}
-  metric=${13}
-  optimizer=${14}
-  interpolator=${15}
+  local reference=$1
+  local target=$2
+  local mask_ref=$3
+  local mask_targ=$4
+  local vf=$5
+  local result=$6
+  local nb_iter=$7
+  local nb_samples=$8
+  local sampling_algo=$9
+  local hist_bins=${10}
+  local nb_levels=${11}
+  local spacing=${12}
+  local metric=${13}
+  local optimizer=${14}
+  local interpolator=${15}
+  local log=${16}
+  local coeff=${17}
+  local init_coeff=${18}
+
+# RP 25/06/2012: unused variables (for now at elast)  
+#   local log=${16}
+#   local coeff=${17}
+#   local init_coeff=${18}
   
   ########## register in ##########
   for reg_in in $reg_in_list
@@ -104,38 +112,51 @@ registration_elastix()
   exec_dir=`which elastix`
   exec_dir=`dirname $exec_dir`
   suffix=${nb_samples}_${nb_iter}_${nb_levels}
-  cat $exec_dir/params_BSpline.txt | sed -e "s+<NbIterations>+$nb_iter+" \
-                              -e "s+<LabelsFile>++" \
+  cat $exec_dir/params_elastix_template.txt | sed -e "s+<NbIterations>+$nb_iter+" \
                               -e "s+<HistBins>+$hist_bins+" \
                               -e "s+<Levels>+$nb_levels+" \
-                              -e "s+<NbSamples>+$nb_samples+" \
+                              -e "s+<PctSamples>+$nb_samples+" \
                               -e "s+<SamplerType>+$sampling_algo+" \
-                              -e "s+<Spacing>+$spacing+" > params_BSpline_${suffix}.txt 
+                              -e "s+<Metric>+$metric+" \
+                              -e "s+<Optimizer>+$optimizer+" \
+                              -e "s+<Interpolator>+$interpolator+" \
+                              -e "s+<Spacing>+$spacing+" > params_elastix_${suffix}.txt 
+
+  # set elastix to write out the coefficient images and corresponding DVFs
+  echo "(WriteCoefficientImage \"true\")" >> params_elastix_${suffix}.txt 
+  echo "(WriteDVFFromCoeff \"true\")" >> params_elastix_${suffix}.txt 
 
   vf_dir=`dirname $vf`
   vf_base=`basename $vf .mhd`
+  coeff_dir=`dirname $coeff`
+  coeff_base=`basename $coeff .mhd`
   result_dir=`dirname $result`
   result_base=`basename $result .mhd`
 
   # image registration
-  cmd="elastix -f $reference -m $target -fMask $mask_ref -mMask $mask_targ -out $result_dir -p params_BSpline_${suffix}.txt"
+  cmd="elastix -f $reference -m $target -fMask $mask_ref -mMask $mask_targ -out $result_dir -p params_elastix_${suffix}.txt"
   $cmd  > /dev/null
   abort_on_error registration_elastix $? clean_up_registration
 
   # generate vector field
-  cmd="transformix -tp $result_dir/TransformParameters.0.txt -out $vf_dir -def all"
-  $cmd  > /dev/null
-  abort_on_error registration_elastix $? clean_up_registration
+  cmd="transformix -tp $result_dir/TransformParameters.0.txt -out $vf_dir -def all"
+  $cmd  > /dev/null
+  abort_on_error registration_elastix $? clean_up_registration
 
   # post-processing
-  mv $vf_dir/deformationField.mhd $vf
-  mv $vf_dir/deformationField.raw `echo $vf | sed 's/mhd/raw/'`
-  sed -i "s+deformationField+$vf_base+" $vf
+  local level=$(($nb_levels - 1))
+  mv $result_dir/dvf.0.R$level.mhd $vf
+  mv $result_dir/dvf.0.R$level.raw `echo $vf | sed 's/mhd/raw/'`
+  sed -i "s+dvf.0.R$level+$vf_base+" $vf
+
+  mv $result_dir/coeff.0.R$level.mhd $coeff_dir/${coeff_base}_0.mhd
+  mv $result_dir/coeff.0.R$level.raw $coeff_dir/${coeff_base}_0.raw
+  sed -i "s+coeff.0.R$level+$coeff_base+" $coeff_dir/${coeff_base}_0.mhd
 
   mv $result_dir/result.0.mhd $result
   mv $result_dir/result.0.raw `echo $result | sed 's/mhd/raw/'`
   sed -i "s+result.0+$result_base+" $result
 
-  mv $result_dir/elasitx.log $log
+  mv $result_dir/elastix.log $log
   mv $result_dir/TransformParameters.0.txt $result_dir/${result_base}_TransformParameters.0.txt
 }
\ No newline at end of file
index 9732057817f0dab2de41c59a2a49c96810c62c8d..4d96ba3a7e3cbcd2ba19167715105a184f98137a 100644 (file)
@@ -75,7 +75,7 @@ AddUsedStructures(std::string station, std::string structure)
   bool founded = true;
   bool tag = GetAFDB()->TagExist(structure);
   if (tag) {
-    typedef typename itk::Image<uchar, 3> ImageType;
+    typedef itk::Image<uchar, 3> ImageType;
     founded = GetAFDB()->CheckImage<ImageType>(structure);
     if (!founded) { 
       std::cout << " \t Image not exist in DB ";
index e745e91db273bd7436e08acb75d8878f388724c4..ef89b227098bbc846a0ec98cf7d57e7390780987 100644 (file)
@@ -3,6 +3,12 @@
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 // Protability issues\r
+#ifdef ntohs\r
+#  undef ntohs\r
+#endif\r
+#ifdef ntohl\r
+#  undef ntohl\r
+#endif\r
 #ifndef _tfopen\r
 #  define _tfopen fopen\r
 #endif\r
index 466083ae010278c55cf6c905577396d9bdb9def9..2093c7d7e0721c21330520c976261269f7b0651b 100644 (file)
@@ -47,7 +47,7 @@ void vvBlendImageActor::Render(vtkRenderer *ren)
   }
 
   //Call normal render
-  vtkImageActor::Render(ren);
+  VTK_IMAGE_ACTOR::Render(ren);
 
   //Move back blending to weighted sum
   if (vtkgl::BlendEquationEXT!=0) {
index 0abe616de6c4560719d1754012dc6fdf708756a5..a0e954915927355831c715212654b0b598e64833 100644 (file)
 
 #include <vtkActor.h>
 #include <vtkSmartPointer.h>
+
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+#define VTK_IMAGE_ACTOR vtkImageActor
 #include <vtkImageActor.h>
+#else
+#define VTK_IMAGE_ACTOR vtkOpenGLImageActor
+#include <vtkOpenGLImageActor.h>
+#endif
 
-class vvBlendImageActor : public vtkImageActor
+class vvBlendImageActor : public VTK_IMAGE_ACTOR
 {
 public:
   static vvBlendImageActor *New();
-  vtkTypeMacro(vvBlendImageActor, vtkImageActor);
+  vtkTypeMacro(vvBlendImageActor, VTK_IMAGE_ACTOR);
   virtual void PrintSelf(ostream& os, vtkIndent indent);
 
   // Description:
index 2224a9ac9748dd6abb32b09a79185048f93137fc..1e133d6f863cfd8dcad8ec52fa6c02a01cbe8296 100644 (file)
@@ -66,6 +66,9 @@
 #include <vtkAssignAttribute.h>
 #include <vtkImageAccumulate.h>
 #include <vtkImageReslice.h>
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+#  include <vtkImageMapper3D.h>
+#endif
 
 vtkCxxRevisionMacro(vvSlicer, "DummyRevision");
 vtkStandardNewMacro(vvSlicer);
@@ -138,6 +141,10 @@ vvSlicer::vvSlicer()
   this->InstallPipeline();
 
   mLinkOverlayWindowLevel = true;
+
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+  this->GetImageActor()->GetMapper()->BorderOn();
+#endif
 }
 //------------------------------------------------------------------------------
 
@@ -361,7 +368,10 @@ void vvSlicer::SetOverlay(vvImage::Pointer overlay)
       mOverlayActor->SetPickable(0);
       mOverlayActor->SetVisibility(true);
       mOverlayActor->SetOpacity(0.5);
-    }
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+      mOverlayActor->GetMapper()->BorderOn();
+#endif
+      }
 
     //stupid but necessary : the Overlay need to be rendered before fusion
     if (mFusionActor) {
@@ -397,7 +407,7 @@ void vvSlicer::SetFusion(vvImage::Pointer fusion)
 
     if (!mFusionMapper)
       mFusionMapper = vtkSmartPointer<vtkImageMapToColors>::New();
-    
+
     vtkSmartPointer<vtkLookupTable> lut = vtkLookupTable::New();
     lut->SetRange(0, 1);
     lut->SetValueRange(0, 1);
@@ -412,6 +422,9 @@ void vvSlicer::SetFusion(vvImage::Pointer fusion)
       mFusionActor->SetPickable(0);
       mFusionActor->SetVisibility(true);
       mFusionActor->SetOpacity(0.7);
+#if VTK_MAJOR_VERSION >= 6 || (VTK_MAJOR_VERSION >= 5 && VTK_MINOR_VERSION >= 10)
+      mFusionActor->GetMapper()->BorderOn();
+#endif
       this->GetRenderer()->AddActor(mFusionActor);
     }
 
@@ -671,8 +684,6 @@ void vvSlicer::SetTSlice(int t)
   else if ((unsigned int)t >= mImage->GetVTKImages().size())
     t = mImage->GetVTKImages().size() -1;
 
-  if (mCurrentTSlice == t) return;
-
   mCurrentTSlice = t;
   mImageReslice->SetInput( mImage->GetVTKImages()[mCurrentTSlice] );
   if (mVF && mVFActor->GetVisibility()) {
@@ -1177,6 +1188,7 @@ void vvSlicer::GetExtremasAroundMousePointer(double & min, double & max, vtkImag
     corner1[i] = mCurrent[i];
     corner2[i] = mCurrent[i];
   }
+
   this->Renderer->WorldToView(corner1[0], corner1[1], corner1[2]);
   this->Renderer->WorldToView(corner2[0], corner2[1], corner2[2]);
 
index 3f6f9139fc2e1bec9540eb3480dc49c52b2fdc34..c86928f96825f8bc50d4b7778394ed786ccbeefa 100644 (file)
@@ -846,7 +846,8 @@ void vvSlicerManager::Reload()
 //----------------------------------------------------------------------------
 void vvSlicerManager::ReloadFusion()
 {
-  mFusionReader->Update();
+  mFusionReader->Update(mImage->GetNumberOfDimensions(),mFusionComponent.c_str(),mType);
+
   for ( unsigned int i = 0; i < mSlicers.size(); i++) {
     mSlicers[i]->SetFusion(mFusionReader->GetOutput());
     mSlicers[i]->Render();
@@ -858,7 +859,7 @@ void vvSlicerManager::ReloadFusion()
 //----------------------------------------------------------------------------
 void vvSlicerManager::ReloadOverlay()
 {
-  mOverlayReader->Update();
+  mOverlayReader->Update(mImage->GetNumberOfDimensions(),mOverlayComponent.c_str(),mType);
   for ( unsigned int i = 0; i < mSlicers.size(); i++) {
     mSlicers[i]->SetOverlay(mOverlayReader->GetOutput());
     mSlicers[i]->Render();