]> Creatis software - clitk.git/blobdiff - tools/clitkCropImageGenericFilter.cxx
Change behavior of clitkCropImage with like option
[clitk.git] / tools / clitkCropImageGenericFilter.cxx
index ede400746d028373718d3f3d45444ab6865a3468..4f3bb231762ca6c6fe19fdc528a90a8c15b5456d 100644 (file)
@@ -69,7 +69,7 @@ typename clitk::CropImageGenericFilter::AutoCrop<ImageType>::ImagePointer
 clitk::CropImageGenericFilter::AutoCrop<ImageType>::Do(args_info_type &, ImagePointer, PixelDimType<Dim> *)
 {
   clitkExceptionMacro("Autocrop is not implemented for vector fields");
-  return NULL;
+  return ITK_NULLPTR;
 }
 //--------------------------------------------------------------------
 
@@ -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,11 +184,12 @@ void clitk::CropImageGenericFilter::UpdateWithInputImageType()
   typename ImageType::IndexType index = region.GetIndex();
   typename ImageType::PointType origin = output->GetOrigin();
   typename ImageType::SpacingType spacing = output->GetSpacing();
-  if (mArgsInfo.verbose_flag) std::cout << "origin before crop " << origin << std::endl;
-  for (unsigned int i = 0; i < output->GetImageDimension(); i++)
-    origin[i] += index[i]*spacing[i];
-  if (mArgsInfo.verbose_flag) std::cout << "origin after crop " << origin << std::endl;
-  output->SetOrigin(origin);
+  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;
+    output->SetOrigin(origin);
+  }
 
   index.Fill(itk::NumericTraits<double>::Zero);
   region.SetIndex(index);