]> Creatis software - clitk.git/commitdiff
corrections in padding tool
authorRomulo Pinho <pinho@lyon.fnclcc.fr>
Mon, 18 Jul 2011 11:41:15 +0000 (13:41 +0200)
committerRomulo Pinho <pinho@lyon.fnclcc.fr>
Mon, 18 Jul 2011 11:41:15 +0000 (13:41 +0200)
tools/clitkPadImage.cxx
tools/clitkPadImage.ggo

index 8b6570bfcda4a64d0453dc946fe5b92a84f797be..188442e6e812072717d30a2ff55883547042ad6e 100644 (file)
@@ -16,13 +16,14 @@ enum
 typedef unsigned int DimType;
 
 template <class ImageType, class PadBoundType, DimType dim>
-int pad_like(typename ImageType::Pointer input, const std::string& likeFile, PadBoundType* pad_lower, PadBoundType* pad_upper)
+int pad_like(typename ImageType::Pointer input, const std::string& likeFile, PadBoundType* padLower, PadBoundType* padUpper)
 {
   typedef typename ImageType::SpacingType SpacingType;
   typedef typename ImageType::RegionType RegionType;
   typedef typename ImageType::SizeType SizeType;
   typedef typename ImageType::IndexType IndexType;
   typedef typename ImageType::PointType PointType;
+  typedef typename ImageType::PointValueType PointValueType;
 
   typedef itk::ImageFileReader<ImageType> ImageReaderType;
   typename ImageReaderType::Pointer reader = ImageReaderType::New();
@@ -33,27 +34,33 @@ int pad_like(typename ImageType::Pointer input, const std::string& likeFile, Pad
 
   SpacingType spacing = input->GetSpacing(), like_spacing = like_image->GetSpacing(); 
   if (spacing != like_spacing) {
-    std::cerr << spacing << " " << like_spacing << std::endl;
+    std::cerr << "Like-image must have same spacing as input: " << spacing << " " << like_spacing << std::endl;
     return ERR_NOT_SAME_SPACING;
   }
   
   SizeType size = input->GetLargestPossibleRegion().GetSize(), like_size = like_image->GetLargestPossibleRegion().GetSize();
   PointType origin = input->GetOrigin(), like_origin = like_image->GetOrigin();
-  IndexType lower_bound, like_lower_bound;
-  SizeType upper_bound, like_upper_bound;
+  PointType lower_bound, like_lower_bound;
+  PointType upper_bound, like_upper_bound;
+  PointValueType auxl = 0, auxu = 0;
   for (DimType i = 0; i < dim; i++) {
     lower_bound[i] = origin[i];
     like_lower_bound[i] = like_origin[i];
-    pad_lower[i] = (PadBoundType)(abs(like_lower_bound[i] - lower_bound[i])/spacing[i]);
+    auxl = round(((lower_bound[i] - like_lower_bound[i])/spacing[i]));
     
     upper_bound[i] = (lower_bound[i] + size[i]*spacing[i]);
     like_upper_bound[i] = (like_lower_bound[i] + like_size[i]*spacing[i]);
-    pad_upper[i] = (PadBoundType)((like_upper_bound[i] - upper_bound[i])/spacing[i]);
-    if (pad_upper[i] < 0)
-      pad_upper[i] = 0;
-  }
+    auxu = round(((like_upper_bound[i] - upper_bound[i])/spacing[i]));
+
+    if (auxl < 0 || auxu < 0) {
+      std::cerr << "Like-image's bounding box must be larger than input's" << std::endl;
+      return ERR_NOT_LIKE_LARGER;
+    }
 
-   
+    padLower[i] = (PadBoundType)auxl;
+    padUpper[i] = (PadBoundType)auxu;
+  }
+  
   return ERR_SUCCESS;
 }
 
index 59c1f98744464cbe7c27ab4d428d0eb5b688a859..6f21563a4e98c59ec5a7a6b2cd04091178f64929 100644 (file)
@@ -1,7 +1,7 @@
 #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 "Pad an image according to a given extends or like another image"
 
 option "config"                   -  "Config file"                 string  no
 option "verbose"           v  "Verbose"                            flag    off
@@ -11,15 +11,15 @@ section "I/O"
 option "input"         i       "Input image filename"            string        yes
 option "output"        o       "Output image filename"           string        yes
 
-section "Used determined crop"
+section "Used determined padding"
 option "lower"         l       "Size of the lower crop region (multiple values)"         int   no  multiple
 option "upper"         u       "Size of the upper crop region (multiple values)"         int   no  multiple
 
-section "Crop like another image"
-option "like"          -       "Crop like this image (must have the same spacing"   string no
+section "Pad like another image"
+option "like"          -       "Pad like this image (must have the same spacing and bounding box must be larger)"   string no
 
 section "Extra parameters"
-option "value"    - "Value to be set in padded aread" float default="0" no  
+option "value"    - "Value to be set in padded area" float default="0" no