#include "clitkCommon.h"
#include "clitkPasteImageFilter.h"
-// itk
-//#include "itkPasteImageFilter.h"
-
//--------------------------------------------------------------------
template <class ImageType>
clitk::CropLikeImageFilter<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;
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)
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");
}
output->SetBufferedRegion(m_OutputRegion);
output->SetSpacing(likeSpacing);
output->SetOrigin(likeOrigin);
+ output->SetDirection(like_invDirection);
output->Allocate(); // Needed ?
// get startpoint source/dest
}
//--------------------------------------------------------------------
-
-#endif //#define CLITKAUTOCROPFILTER
+
+//--------------------------------------------------------------------
+template<class ImageType>
+typename ImageType::Pointer
+clitk::ResizeImageLike(const ImageType * input,
+ const itk::ImageBase<ImageType::ImageDimension> * like,
+ typename ImageType::PixelType backgroundValue)
+{
+ typedef clitk::CropLikeImageFilter<ImageType> CropFilterType;
+ typename CropFilterType::Pointer cropFilter = CropFilterType::New();
+ cropFilter->SetInput(input);
+ cropFilter->SetCropLikeImage(like);
+ cropFilter->SetBackgroundValue(backgroundValue);
+ cropFilter->Update();
+ return cropFilter->GetOutput();
+}
+//--------------------------------------------------------------------
+
+
+//--------------------------------------------------------------------
+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