]> Creatis software - clitk.git/commitdiff
Change behavior of clitkCropImage with like option
authortbaudier <thomas.baudier@creatis.insa-lyon.fr>
Thu, 15 Nov 2018 15:24:18 +0000 (16:24 +0100)
committertbaudier <thomas.baudier@creatis.insa-lyon.fr>
Thu, 15 Nov 2018 15:24:18 +0000 (16:24 +0100)
Before, if we cropped an image like another, the output's origin was set at the origin of the input.
But we prefer to keep the registration correctly, so we prefer to have an output's origin defined to still have the registration between the output and the input.
This is the normal behavior of the itk::PasteImageFilter.

I removed the SetNumberOfRequiredInputs to avoid this error: PasteImageFilter(0x1927770): At least 2 of the first 2 indexed inputs are required but only 1 are specified. The required inputs are expected to be the first inputs.

I add the updateOrigin flag to keep the previous behavior. If the flag is set to On (default is off), the origin of the output is set to the same origin than the input.

I update the description of the filte about this origin managment

itk/clitkPasteImageFilter.hxx
tools/clitkCropImage.ggo
tools/clitkCropImageGenericFilter.cxx

index 348d85898035db8dedf310c8a078293dedeb76c9..2a3f99d05ae182ac4c2361fd71cb3c9fb4360aa6 100644 (file)
@@ -15,7 +15,7 @@ namespace clitk
   PasteImageFilter< TInputImage, TSourceImage, TOutputImage >
   ::PasteImageFilter()
   {
-    this->ProcessObject::SetNumberOfRequiredInputs(2);
+    //this->ProcessObject::SetNumberOfRequiredInputs(2);
 
     this->InPlaceOff();
     this->m_DestinationIndex.Fill(0);
index a674f8bbef5b5450493a3c0eae14ccde4acb0579..a70452dda7c8d650770c799f66d15124905c27a1 100644 (file)
@@ -1,7 +1,8 @@
 #File clitkCropImage.ggo
 package "clitkCropImage"
 version "1.0"
-purpose "Crop an image according to a given extends or AutoCrop with a background value or like another image"
+purpose "Crop an image according to a given extends or AutoCrop with a background value or like another image.
+In all cases, by default, the output origin is set to be able to overlay input and output without registration."
 
 option "config"                   -  "Config file"                 string  no
 option "imagetypes"        -  "Display allowed image types" flag    off
@@ -25,6 +26,7 @@ option "BG"           -       "Background value in input."      double default="0" no
 
 section "Crop like another image"
 option "like"          -       "Crop like this image (must have the same spacing"   string no
+option "updateOrigin"          -       "By default, with like image, the output origin is the same than the like image. Set to on the flag to keep the origin."          flag  off
 option "BGLike"                -       "Background value in output (if like larger)"        double default="0" no
 
 
index 4adcb9bfadbae4ea0f1b5bc7fa6b9a385990f42e..4f3bb231762ca6c6fe19fdc528a90a8c15b5456d 100644 (file)
@@ -106,6 +106,8 @@ void clitk::CropImageGenericFilter::UpdateWithInputImageType()
   // Check options
   if (mArgsInfo.BG_given && mArgsInfo.like_given)
     clitkExceptionMacro("Do not use --BG and --like at the same time");
+  if (mArgsInfo.updateOrigin_flag && !mArgsInfo.like_given)
+    clitkExceptionMacro("Use --updateOrigin with --like");
 
   // Prepare output
   typename ImageType::Pointer output;
@@ -182,7 +184,7 @@ void clitk::CropImageGenericFilter::UpdateWithInputImageType()
   typename ImageType::IndexType index = region.GetIndex();
   typename ImageType::PointType origin = output->GetOrigin();
   typename ImageType::SpacingType spacing = output->GetSpacing();
-  if (!mArgsInfo.BG_given) {
+  if (!mArgsInfo.BG_given && (!mArgsInfo.like_given || mArgsInfo.updateOrigin_flag)) {
     if (mArgsInfo.verbose_flag) std::cout << "origin before crop " << origin << std::endl;
     input->TransformIndexToPhysicalPoint(index,origin);
     if (mArgsInfo.verbose_flag) std::cout << "origin after crop " << origin << std::endl;