From d91a03193e84e5a74aeeb8bda9686c48108890c6 Mon Sep 17 00:00:00 2001 From: Simon Rit Date: Mon, 27 Jun 2011 10:00:25 +0200 Subject: [PATCH] Added HaveSameSize --- common/clitkImageCommon.h | 164 +++++++++++++++++++----------------- common/clitkImageCommon.txx | 48 +++++++---- 2 files changed, 120 insertions(+), 92 deletions(-) diff --git a/common/clitkImageCommon.h b/common/clitkImageCommon.h index 3cd8ae5..fbddb20 100644 --- a/common/clitkImageCommon.h +++ b/common/clitkImageCommon.h @@ -1,7 +1,7 @@ /*========================================================================= Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Authors belong to: + Authors belong to: - University of LYON http://www.universite-lyon.fr/ - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr @@ -27,83 +27,93 @@ #include "itkImageSeriesReader.h" #include "itkImageFileWriter.h" -namespace clitk { - - //-------------------------------------------------------------------- - // New Image creation (no allocation) - template - typename itk::Image::Pointer NewImage1D(int size, double spacing=1.0); - template - typename itk::Image::Pointer NewImage2D(int sx, int sy, double dx=1.0, double dy=1.0); - template - typename itk::Image::Pointer NewImage3D(int sx, int sy, int sz, double dx=1.0, double dy=1.0, double dz=1.0); - template - typename itk::Image::Pointer NewImage4D(int sx, int sy, int sz, int st, double dx=1.0, double dy=1.0, double dz=1.0, double dt=1.0); - - template - typename ImageType::Pointer NewImageLike(const typename ImageType::Pointer input, bool allocate=true); - - template - void CopyValues(const typename ImageType::Pointer input, typename ImageType::Pointer output); - //-------------------------------------------------------------------- - // New Image creation (with allocation) - - //-------------------------------------------------------------------- - // Read an Write image - // template - // typename ImageType::Pointer ReadImage(const std::string & filename, const bool verbose=false); - template - typename ImageType::Pointer readImage(const std::string & filename, const bool verbose=false); - template - typename ImageType::Pointer readImage(const std::vector & filenames, const bool verbose=false); - template - void writeImage(const typename ImageType::Pointer image, const std::string & filename, const bool verbose=false); -// template +namespace clitk +{ + +//-------------------------------------------------------------------- +// New Image creation (no allocation) +template +typename itk::Image::Pointer NewImage1D(int size, double spacing=1.0); +template +typename itk::Image::Pointer NewImage2D(int sx, int sy, double dx=1.0, double dy=1.0); +template +typename itk::Image::Pointer NewImage3D(int sx, int sy, int sz, double dx=1.0, double dy=1.0, double dz=1.0); +template +typename itk::Image::Pointer NewImage4D(int sx, int sy, int sz, int st, double dx=1.0, double dy=1.0, double dz=1.0, double dt=1.0); + +template +typename ImageType::Pointer NewImageLike(const typename ImageType::Pointer input, bool allocate=true); + +template +void CopyValues(const typename ImageType::Pointer input, typename ImageType::Pointer output); +//-------------------------------------------------------------------- +// New Image creation (with allocation) + +//-------------------------------------------------------------------- +// Read an Write image +// template +// typename ImageType::Pointer ReadImage(const std::string & filename, const bool verbose=false); +template +typename ImageType::Pointer readImage(const std::string & filename, const bool verbose=false); +template +typename ImageType::Pointer readImage(const std::vector & filenames, const bool verbose=false); +template +void writeImage(const typename ImageType::Pointer image, const std::string & filename, const bool verbose=false); +// template // void writeConstImage(const typename ImageType::ConstPointer image, const std::string & filename, const bool verbose=false); - template - void writeImage(const ImageType* image, const std::string & filename, const bool verbose=false); - - //-------------------------------------------------------------------- - // Read/print image header - itk::ImageIOBase::Pointer readImageHeader(const std::string & filename,bool exit_on_error=true); - void printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level=0); - - //-------------------------------------------------------------------- - // Determine pixetype and dimension of an image file - void ReadImageDimensionAndPixelType(const std::string & filename, int & dimension, std::string & pixeType); - - //-------------------------------------------------------------------- - // Determine pixetype, dimension and number of pixel components of an image file - void ReadImageDimensionAndPixelType(const std::string & filename, int & dimension, std::string & pixeType, int & components); - - //-------------------------------------------------------------------- - template - int ComputeHowManyDifferentIntensity(const typename ImageType::Pointer & image, - std::vector & listOfIntensities); - template - void ComputeWeightsOfEachClasses(const typename InputImageType::Pointer & input, - const typename MaskImageType::Pointer & mask, - const std::vector & listOfIntensities, - std::map > & mapOfLabelsAndWeights); - - //-------------------------------------------------------------------- - template - bool HaveSameSizeAndSpacing(typename ImageType1::ConstPointer A, - typename ImageType2::ConstPointer B); - - template - bool HaveSameSizeAndSpacing(typename ImageType1::Pointer A, - typename ImageType2::Pointer B); - - //-------------------------------------------------------------------- - template - bool HaveSameSpacing(typename ImageType1::ConstPointer A, - typename ImageType2::ConstPointer B); - - template - bool HaveSameSpacing(typename ImageType1::Pointer A, - typename ImageType2::Pointer B); +template +void writeImage(const ImageType* image, const std::string & filename, const bool verbose=false); + +//-------------------------------------------------------------------- +// Read/print image header +itk::ImageIOBase::Pointer readImageHeader(const std::string & filename,bool exit_on_error=true); +void printImageHeader(itk::ImageIOBase::Pointer header, std::ostream & os, const int level=0); + +//-------------------------------------------------------------------- +// Determine pixetype and dimension of an image file +void ReadImageDimensionAndPixelType(const std::string & filename, int & dimension, std::string & pixeType); + +//-------------------------------------------------------------------- +// Determine pixetype, dimension and number of pixel components of an image file +void ReadImageDimensionAndPixelType(const std::string & filename, int & dimension, std::string & pixeType, int & components); + +//-------------------------------------------------------------------- +template +int ComputeHowManyDifferentIntensity(const typename ImageType::Pointer & image, + std::vector & listOfIntensities); +template +void ComputeWeightsOfEachClasses(const typename InputImageType::Pointer & input, + const typename MaskImageType::Pointer & mask, + const std::vector & listOfIntensities, + std::map > & mapOfLabelsAndWeights); + +//-------------------------------------------------------------------- +template +bool HaveSameSpacing(typename ImageType1::ConstPointer A, + typename ImageType2::ConstPointer B); + +template +bool HaveSameSpacing(typename ImageType1::Pointer A, + typename ImageType2::Pointer B); + +//-------------------------------------------------------------------- +template +bool HaveSameSize(typename ImageType1::ConstPointer A, + typename ImageType2::ConstPointer B); + +template +bool HaveSameSize(typename ImageType1::Pointer A, + typename ImageType2::Pointer B); + +//-------------------------------------------------------------------- +template +bool HaveSameSizeAndSpacing(typename ImageType1::ConstPointer A, + typename ImageType2::ConstPointer B); + +template +bool HaveSameSizeAndSpacing(typename ImageType1::Pointer A, + typename ImageType2::Pointer B); #include "clitkImageCommon.txx" diff --git a/common/clitkImageCommon.txx b/common/clitkImageCommon.txx index 9d8d6e1..5aa3b2e 100644 --- a/common/clitkImageCommon.txx +++ b/common/clitkImageCommon.txx @@ -21,7 +21,7 @@ //-------------------------------------------------------------------- template -typename itk::Image::Pointer +typename itk::Image::Pointer NewImage1D(int vsize, double vspacing) { typedef itk::Image ImageType; @@ -40,7 +40,7 @@ NewImage1D(int vsize, double vspacing) //-------------------------------------------------------------------- template -typename itk::Image::Pointer +typename itk::Image::Pointer NewImage2D(int sx, int sy, double dx, double dy) { typedef itk::Image ImageType; @@ -62,7 +62,7 @@ NewImage2D(int sx, int sy, double dx, double dy) //-------------------------------------------------------------------- template -typename itk::Image::Pointer +typename itk::Image::Pointer NewImage3D(int sx, int sy, int sz, double dx, double dy, double dz) { typedef itk::Image ImageType; @@ -323,13 +323,12 @@ void ComputeWeightsOfEachClasses(const typename InputImageType::Pointer & input, //-------------------------------------------------------------------- template -bool HaveSameSizeAndSpacing(typename ImageType1::ConstPointer A, - typename ImageType2::ConstPointer B) +bool HaveSameSpacing(typename ImageType1::ConstPointer A, + typename ImageType2::ConstPointer B) { if (A->GetImageDimension() != B->GetImageDimension()) return false; for(unsigned int i=0; iGetImageDimension(); i++) { if (A->GetSpacing()[i] != B->GetSpacing()[i]) return false; - if (A->GetLargestPossibleRegion().GetSize()[i] != B->GetLargestPossibleRegion().GetSize()[i]) return false; } return true; } @@ -337,13 +336,12 @@ bool HaveSameSizeAndSpacing(typename ImageType1::ConstPointer A, //-------------------------------------------------------------------- template -bool HaveSameSizeAndSpacing(typename ImageType1::Pointer A, - typename ImageType2::Pointer B) +bool HaveSameSpacing(typename ImageType1::Pointer A, + typename ImageType2::Pointer B) { if (A->GetImageDimension() != B->GetImageDimension()) return false; for(unsigned int i=0; iGetImageDimension(); i++) { if (A->GetSpacing()[i] != B->GetSpacing()[i]) return false; - if (A->GetLargestPossibleRegion().GetSize()[i] != B->GetLargestPossibleRegion().GetSize()[i]) return false; } return true; } @@ -351,12 +349,12 @@ bool HaveSameSizeAndSpacing(typename ImageType1::Pointer A, //-------------------------------------------------------------------- template -bool HaveSameSpacing(typename ImageType1::ConstPointer A, - typename ImageType2::ConstPointer B) +bool HaveSameSize(typename ImageType1::ConstPointer A, + typename ImageType2::ConstPointer B) { if (A->GetImageDimension() != B->GetImageDimension()) return false; for(unsigned int i=0; iGetImageDimension(); i++) { - if (A->GetSpacing()[i] != B->GetSpacing()[i]) return false; + if (A->GetLargestPossibleRegion().GetSize()[i] != B->GetLargestPossibleRegion().GetSize()[i]) return false; } return true; } @@ -364,16 +362,36 @@ bool HaveSameSpacing(typename ImageType1::ConstPointer A, //-------------------------------------------------------------------- template -bool HaveSameSpacing(typename ImageType1::Pointer A, - typename ImageType2::Pointer B) +bool HaveSameSize(typename ImageType1::Pointer A, + typename ImageType2::Pointer B) { if (A->GetImageDimension() != B->GetImageDimension()) return false; for(unsigned int i=0; iGetImageDimension(); i++) { - if (A->GetSpacing()[i] != B->GetSpacing()[i]) return false; + if (A->GetLargestPossibleRegion().GetSize()[i] != B->GetLargestPossibleRegion().GetSize()[i]) return false; } return true; } //-------------------------------------------------------------------- +//-------------------------------------------------------------------- +template +bool HaveSameSizeAndSpacing(typename ImageType1::ConstPointer A, + typename ImageType2::ConstPointer B) +{ + return ( HaveSameSize(A, B) && + HaveSameSpacing(A, B) ); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +bool HaveSameSizeAndSpacing(typename ImageType1::Pointer A, + typename ImageType2::Pointer B) +{ + return ( HaveSameSize(A, B) && + HaveSameSpacing(A, B) ); +} +//-------------------------------------------------------------------- + #endif /* end #define CLITKIMAGECOMMON_TXX */ -- 2.45.1