]> Creatis software - clitk.git/blobdiff - tools/clitkSUVPeakGenericFilter.txx
Add option to define the volume of the filter in clitkSUVPeak in cc
[clitk.git] / tools / clitkSUVPeakGenericFilter.txx
index 498b09b6ae786836e47d7597b05c57b34357759d..893750dd3961b0d888ad4327346d7abfc66cccbe 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();
@@ -86,6 +117,8 @@ void SUVPeakGenericFilter<args_info_type>::UpdateWithInputImageType()
   }
 
   double volume = 1000; //1 cc into mc
+  if (mArgsInfo.volume_given)
+    volume *= mArgsInfo.volume_arg;
   const double PI = 3.141592653589793238463;
   double radius = std::pow(3*volume/(4*PI),1./3);