]> Creatis software - clitk.git/commitdiff
Check if mask and input have the same spacing to compute SUVPeak
authortbaudier <thomas.baudier@creatis.insa-lyon.fr>
Thu, 15 Nov 2018 15:50:13 +0000 (16:50 +0100)
committertbaudier <thomas.baudier@creatis.insa-lyon.fr>
Thu, 15 Nov 2018 15:50:13 +0000 (16:50 +0100)
Before, the output of the SUVPeak was unrealistic with a mask with a spacing different from the input.
Now, check if they have the same spacing. If not, the script raises an error.

I add an option (--allow_resize) to automatically resize the mask according to the input like in the clitkImageStatistics script

tools/clitkSUVPeak.ggo
tools/clitkSUVPeakGenericFilter.txx

index 3aac2ae187b3a70f35fb5d60c819b047d25ad7e6..860fae3f5f3331516be4fdcab993b51efac4f7dd 100644 (file)
@@ -11,3 +11,4 @@ option "verbose"  v "Verbose"                     flag    off
 
 option "input"    i "Input first image filename"  string  yes
 option "mask"     m "Mask image filename (uchar)" string  no
+option "allow_resize" r "Resize mask if different from input" flag    off
index 498b09b6ae786836e47d7597b05c57b34357759d..8bf1f00f224e043d72535186f448d470b1d7fcd6 100644 (file)
@@ -19,6 +19,9 @@
 #define CLITKSUVPEAKGENERICFILTER_TXX
 
 #include "clitkImageCommon.h"
+#include "clitkCropLikeImageFilter.h"
+#include "clitkResampleImageWithOptionsFilter.h"
+
 #include <itkConvolutionImageFilter.h>
 
 namespace clitk
@@ -75,6 +78,34 @@ void SUVPeakGenericFilter<args_info_type>::UpdateWithInputImageType()
   typename MaskImageType::Pointer mask;
   if(mArgsInfo.mask_given) {
       mask = this->template GetInput<MaskImageType>(1);
+      // Check mask sampling/size
+      if (!HaveSameSizeAndSpacing<MaskImageType, ImageType>(mask, input)) {
+        if (mArgsInfo.allow_resize_flag) {
+          if (mArgsInfo.verbose_flag) {
+            std::cout << "Resize mask image like input" << std::endl;
+          }
+          typedef clitk::ResampleImageWithOptionsFilter<MaskImageType> ResamplerType;
+          typename ResamplerType::Pointer resampler = ResamplerType::New();
+          resampler->SetInput(mask); //By default the interpolation in NN, Ok for mask
+          resampler->SetOutputSpacing(input->GetSpacing());
+          resampler->SetOutputOrigin(mask->GetOrigin());
+          resampler->SetGaussianFilteringEnabled(false);
+          resampler->Update();
+          mask = resampler->GetOutput();
+
+          typedef clitk::CropLikeImageFilter<MaskImageType> FilterType;
+          typename FilterType::Pointer crop = FilterType::New();
+          crop->SetInput(mask);
+          crop->SetCropLikeImage(input);
+          crop->Update();
+          mask = crop->GetOutput();
+
+        }
+        else {
+          std::cerr << "Mask image has a different size/spacing than input. Abort. (Use option --allow_resize)" << std::endl;
+          exit(-1);
+        }
+      }
   }
   else {
       mask = MaskImageType::New();