From 42dea64a22a37e7c4518b8879575707e9a508f9f Mon Sep 17 00:00:00 2001 From: Simon Rit Date: Fri, 7 Jun 2013 17:00:48 +0200 Subject: [PATCH] Added new tool to change image information. Replaces deprecated tools clitkSetOrigin and clitkSetSpacing + new Direction functionality --- tools/CMakeLists.txt | 7 + tools/clitkChangeImageInfo.cxx | 40 ++++++ tools/clitkChangeImageInfo.ggo | 14 ++ tools/clitkChangeImageInfoGenericFilter.cxx | 134 ++++++++++++++++++++ tools/clitkChangeImageInfoGenericFilter.h | 62 +++++++++ 5 files changed, 257 insertions(+) create mode 100644 tools/clitkChangeImageInfo.cxx create mode 100644 tools/clitkChangeImageInfo.ggo create mode 100644 tools/clitkChangeImageInfoGenericFilter.cxx create mode 100644 tools/clitkChangeImageInfoGenericFilter.h diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index d357611..319908b 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -261,6 +261,13 @@ IF (CLITK_BUILD_TOOLS) TARGET_LINK_LIBRARIES(clitkAnisotropicDiffusion clitkCommon) SET(TOOLS_INSTALL ${TOOLS_INSTALL} clitkAnisotropicDiffusion) + WRAP_GGO(clitkChangeImageInfo_GGO_C clitkChangeImageInfo.ggo) + ADD_EXECUTABLE(clitkChangeImageInfo clitkChangeImageInfo.cxx + clitkChangeImageInfoGenericFilter.cxx + ${clitkChangeImageInfo_GGO_C}) + TARGET_LINK_LIBRARIES(clitkChangeImageInfo clitkCommon) + SET(TOOLS_INSTALL ${TOOLS_INSTALL} clitkChangeImageInfo) + IF(CLITK_EXPERIMENTAL) WRAP_GGO(clitkBinaryImageToMesh_GGO_C clitkBinaryImageToMesh.ggo) ADD_EXECUTABLE(clitkBinaryImageToMesh clitkBinaryImageToMesh.cxx ${clitkBinaryImageToMesh_GGO_C}) diff --git a/tools/clitkChangeImageInfo.cxx b/tools/clitkChangeImageInfo.cxx new file mode 100644 index 0000000..1bc9b13 --- /dev/null +++ b/tools/clitkChangeImageInfo.cxx @@ -0,0 +1,40 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + 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 + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +===========================================================================**/ + +// clitk +#include "clitkChangeImageInfo_ggo.h" +#include "clitkChangeImageInfoGenericFilter.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) +{ + // Init command line + GGO(clitkChangeImageInfo, args_info); + CLITK_INIT; + + // Filter + typedef clitk::ChangeImageInfoGenericFilter FilterType; + FilterType::Pointer filter = FilterType::New(); + + filter->SetArgsInfo(args_info); + + CLITK_TRY_CATCH_EXIT(filter->Update()); + + return EXIT_SUCCESS; +} // This is the end, my friend +//-------------------------------------------------------------------- diff --git a/tools/clitkChangeImageInfo.ggo b/tools/clitkChangeImageInfo.ggo new file mode 100644 index 0000000..4199957 --- /dev/null +++ b/tools/clitkChangeImageInfo.ggo @@ -0,0 +1,14 @@ +#File clitkChangeImageInfo.ggo +package "clitkChangeImageInfo" +version "1.0" +purpose "Change the information (spacing, origin, direction...) of an image" + +option "config" - "Config file" string no +option "verbose" v "Verbose" flag off +option "imagetypes" - "Display allowed image types" flag off + +option "input" i "Input image filename" string yes +option "output" o "Output image filename" string yes +option "spacing" s "Spacing" double multiple no +option "origin" - "Origin" double multiple no +option "direction" d "Direction" double multiple no diff --git a/tools/clitkChangeImageInfoGenericFilter.cxx b/tools/clitkChangeImageInfoGenericFilter.cxx new file mode 100644 index 0000000..7559f64 --- /dev/null +++ b/tools/clitkChangeImageInfoGenericFilter.cxx @@ -0,0 +1,134 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + 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 + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +===========================================================================**/ +#ifndef clitkChangeImageInfoGenericFilter_cxx +#define clitkChangeImageInfoGenericFilter_cxx + +#include "clitkChangeImageInfoGenericFilter.h" + +// itk include +#include + +namespace clitk +{ + +//-------------------------------------------------------------------- +ChangeImageInfoGenericFilter::ChangeImageInfoGenericFilter(): + ImageToImageGenericFilter("ChangeImageInfo") +{ + InitializeImageType<2>(); + InitializeImageType<3>(); + InitializeImageType<4>(); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +void ChangeImageInfoGenericFilter::InitializeImageType() +{ + ADD_DEFAULT_IMAGE_TYPES(Dim); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +void ChangeImageInfoGenericFilter::SetArgsInfo(const args_info_type & a) +{ + mArgsInfo=a; + if (mArgsInfo.verbose_given) + SetIOVerbose(mArgsInfo.verbose_flag); + if (mArgsInfo.imagetypes_given && mArgsInfo.imagetypes_flag) + this->PrintAvailableImageTypes(); + + if (mArgsInfo.input_given) { + SetInputFilename(mArgsInfo.input_arg); + } + if (mArgsInfo.output_given) { + SetOutputFilename(mArgsInfo.output_arg); + } +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +// Update with the number of dimensions and the pixeltype +//-------------------------------------------------------------------- +template +void +ChangeImageInfoGenericFilter::UpdateWithInputImageType() +{ + // Reading input + typename InputImageType::Pointer input = this->template GetInput(0); + + // Main filter + typedef typename itk::ChangeInformationImageFilter CIIFType; + typename CIIFType::Pointer ciif = CIIFType::New(); + const unsigned int Dimension = InputImageType::ImageDimension; + ciif->SetInput(input); + + // Direction + ciif->SetChangeDirection(mArgsInfo.direction_given); + if( ciif->GetChangeDirection() ) { + if(mArgsInfo.direction_given != Dimension*Dimension) { + std::cerr << "You must provide " << Dimension*Dimension + << " values for --direction." + << std::endl; + exit(1); + } + typename InputImageType::DirectionType dir; + for(unsigned int i=0; iSetOutputDirection(dir); + } + + // Spacing + ciif->SetChangeSpacing(mArgsInfo.spacing_given); + if( ciif->GetChangeSpacing() ) { + if(mArgsInfo.spacing_given != Dimension) { + std::cerr << "You must provide " << Dimension + << " values for --spacing." + << std::endl; + exit(1); + } + typename InputImageType::SpacingType spacing; + for(unsigned int i=0; iSetOutputSpacing(spacing); + } + + // Origin + ciif->SetChangeOrigin(mArgsInfo.origin_given); + if( ciif->GetChangeOrigin() ) { + if(mArgsInfo.origin_given != Dimension) { + std::cerr << "You must provide " << Dimension + << " values for --origin." + << std::endl; + exit(1); + } + typename InputImageType::PointType origin; + for(unsigned int i=0; iSetOutputOrigin(origin); + } + + ciif->Update(); + this->template SetNextOutput(ciif->GetOutput()); +} +//-------------------------------------------------------------------- + +}//end clitk + +#endif //#define clitkChangeImageInfoGenericFilter_cxx diff --git a/tools/clitkChangeImageInfoGenericFilter.h b/tools/clitkChangeImageInfoGenericFilter.h new file mode 100644 index 0000000..a603e5b --- /dev/null +++ b/tools/clitkChangeImageInfoGenericFilter.h @@ -0,0 +1,62 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + 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 + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +===========================================================================**/ + +#ifndef clitkChangeImageInfoGenericFilter_h +#define clitkChangeImageInfoGenericFilter_h + +#include "clitkIO.h" +#include "clitkImageToImageGenericFilter.h" +#include "clitkChangeImageInfo_ggo.h" + +//-------------------------------------------------------------------- +namespace clitk +{ + class ITK_EXPORT ChangeImageInfoGenericFilter: + public ImageToImageGenericFilter + { + public: + //-------------------------------------------------------------------- + typedef ChangeImageInfoGenericFilter Self; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + typedef args_info_clitkChangeImageInfo args_info_type; + + //-------------------------------------------------------------------- + // Method for creation through the object factory + // and Run-time type information (and related methods) + itkNewMacro(Self); + itkTypeMacro(ChangeImageInfoGenericFilter, LightObject); + + //-------------------------------------------------------------------- + void SetArgsInfo(const args_info_type & a); + + //-------------------------------------------------------------------- + // Main function called each time the filter is updated + template + void UpdateWithInputImageType(); + + protected: + ChangeImageInfoGenericFilter(); + template void InitializeImageType(); + args_info_type mArgsInfo; + }; // end class + //-------------------------------------------------------------------- +} // end namespace clitk +//-------------------------------------------------------------------- + +#endif // #define clitkChangeImageInfoGenericFilter_h -- 2.47.1