]> Creatis software - clitk.git/blobdiff - itk/clitkCropLikeImageFilter.txx
Debug RTStruct conversion with empty struc
[clitk.git] / itk / clitkCropLikeImageFilter.txx
index 5a9696e8b935434ed969194e89c1e7dd4236c09d..e7e342fce498464947a9dd841aad4cb54da0cf29 100644 (file)
@@ -30,7 +30,7 @@ CropLikeImageFilter():itk::ImageToImageFilter<ImageType, ImageType>() {
   this->SetNumberOfRequiredInputs(1);
   m_LikeImage = NULL;
   m_LikeFilenameIsGiven = false;
-  this->SetBackgroundValue(0);
+  this->SetBackgroundValue(typename PixelTraits<typename ImageType::PixelType>::ValueType(0));
   m_CropAlongThisDimension.resize(ImageType::ImageDimension);
   for(uint i=0; i<ImageType::ImageDimension; i++)
     m_CropAlongThisDimension[i] = true;
@@ -103,12 +103,17 @@ GenerateOutputInformation() {
   typename ImageType::IndexType likeStart;
   typename ImageType::PointType likeOrigin;  
   typename ImageType::SpacingType likeSpacing;  
+  typename ImageType::DirectionType likeDirection;
+  typename ImageType::DirectionType like_invDirection;
   if (m_LikeImage) {   
     likeSize = m_LikeImage->GetLargestPossibleRegion().GetSize();
     likeStart = m_LikeImage->GetLargestPossibleRegion().GetIndex();
     likeOrigin = m_LikeImage->GetOrigin();
     likeSpacing = m_LikeImage->GetSpacing();
-    output->CopyInformation(m_LikeImage);
+    likeDirection = m_LikeImage->GetDirection();
+    //I don't know really why I need the inverse...
+    like_invDirection = likeDirection.GetInverse();
+    //output->CopyInformation(m_LikeImage);
   }
   else {
     // Only load the header (allows to use 'like' with any image type)
@@ -119,8 +124,12 @@ GenerateOutputInformation() {
         likeStart[i] = 0;//header->GetIORegion().GetIndex()[i];
         likeOrigin[i] = header->GetOrigin(i);
         likeSpacing[i] = header->GetSpacing(i);
+        for(unsigned int j=0; j<ImageType::ImageDimension; j++)
+            likeDirection[i][j] = header->GetDirection(i)[j];
+       }
+      //I don't know really why I need the inverse...
+      like_invDirection = likeDirection.GetInverse();
       }
-    }
     else {
       clitkExceptionMacro("You should provide SetCropLikeFilename or SetCropLike to CropLikeImageFilter");
     }
@@ -152,6 +161,7 @@ GenerateOutputInformation() {
   output->SetBufferedRegion(m_OutputRegion);
   output->SetSpacing(likeSpacing);  
   output->SetOrigin(likeOrigin);
+  output->SetDirection(like_invDirection);
   output->Allocate(); // Needed ?
 
   // get startpoint source/dest
@@ -259,5 +269,41 @@ clitk::ResizeImageLike(const ImageType * input,
 }
 //--------------------------------------------------------------------
 
+
+//--------------------------------------------------------------------
+template<class ImageType>
+typename ImageType::Pointer
+clitk::ResizeImageLike(const ImageType * input,                       
+                       typename itk::ImageBase<ImageType::ImageDimension>::RegionType * region, 
+                       typename ImageType::PixelType backgroundValue) 
+{
+  typename ImageType::Pointer output = ImageType::New();
+  output->CopyInformation(input);
+  typename ImageType::RegionType reg;
+  reg.SetIndex(region->GetIndex());
+  reg.SetSize(region->GetSize());
+  output->SetRegions(reg);
+  output->Allocate();
+  return clitk::ResizeImageLike<ImageType>(input, output, backgroundValue);
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+template<class ImageType>
+typename ImageType::Pointer
+clitk::ResizeImageLike(const ImageType * input, 
+                       typename itk::BoundingBox<unsigned long, ImageType::ImageDimension>::Pointer bb, 
+                       typename ImageType::PixelType BG)
+{
+  typename ImageType::RegionType region;
+  clitk::ComputeRegionFromBB<ImageType>(input, bb, region);
+  typename ImageType::Pointer output = ImageType::New();
+  output->CopyInformation(input);
+  output->SetRegions(region);
+  output->Allocate();
+  return clitk::ResizeImageLike<ImageType>(input, output, BG);   
+}
+//--------------------------------------------------------------------
+
 #endif //#define CLITKCROPLIKEIMAGEFILTER_TXX