From 7a313c2f28bb5e764dd2df97dbce9dae8ca9885a Mon Sep 17 00:00:00 2001 From: Simon Rit Date: Thu, 10 Nov 2011 18:01:53 +0100 Subject: [PATCH] Cat image tool --- tools/CMakeLists.txt | 5 ++ tools/clitkCatImage.cxx | 42 ++++++++++ tools/clitkCatImage.ggo | 14 ++++ tools/clitkCatImageGenericFilter.h | 69 +++++++++++++++ tools/clitkCatImageGenericFilter.txx | 121 +++++++++++++++++++++++++++ 5 files changed, 251 insertions(+) create mode 100644 tools/clitkCatImage.cxx create mode 100644 tools/clitkCatImage.ggo create mode 100644 tools/clitkCatImageGenericFilter.h create mode 100644 tools/clitkCatImageGenericFilter.txx diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 2484c48..e71e782 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -359,6 +359,11 @@ IF (CLITK_BUILD_TOOLS) TARGET_LINK_LIBRARIES(clitkPadImage clitkCommon ${ITK_LIBRARIES}) SET(TOOLS_INSTALL ${TOOLS_INSTALL} clitkPadImage) + WRAP_GGO(clitkCatImage_GGO_C clitkCatImage.ggo) + ADD_EXECUTABLE(clitkCatImage clitkCatImage.cxx ${clitkCatImage_GGO_C}) + TARGET_LINK_LIBRARIES(clitkCatImage clitkCommon ${ITK_LIBRARIES}) + SET(TOOLS_INSTALL ${TOOLS_INSTALL} clitkCatImage) + IF(CLITK_EXPERIMENTAL) WRAP_GGO(clitkBinaryImageToMesh_GGO_C clitkBinaryImageToMesh.ggo) diff --git a/tools/clitkCatImage.cxx b/tools/clitkCatImage.cxx new file mode 100644 index 0000000..e16e61b --- /dev/null +++ b/tools/clitkCatImage.cxx @@ -0,0 +1,42 @@ +/*========================================================================= + 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 "clitkCatImage_ggo.h" +#include "clitkCatImageGenericFilter.h" + +//-------------------------------------------------------------------- +int main(int argc, char * argv[]) +{ + + // Init command line + GGO(clitkCatImage, args_info); + CLITK_INIT; + + // Filter + typedef clitk::CatImageGenericFilter FilterType; + FilterType::Pointer filter = FilterType::New(); + + filter->SetArgsInfo(args_info); + CLITK_TRY_CATCH_EXIT(filter->Update()); + + + return EXIT_SUCCESS; +}// end main + +//-------------------------------------------------------------------- diff --git a/tools/clitkCatImage.ggo b/tools/clitkCatImage.ggo new file mode 100644 index 0000000..deb0058 --- /dev/null +++ b/tools/clitkCatImage.ggo @@ -0,0 +1,14 @@ +#File clitkCatImage.ggo +package "clitkCatImage" +version "1.0" +purpose "Concatenate two images along chosen direction" + +option "config" - "Config file" string optional +option "verbose" v "Verbose" flag off + +option "imagetypes" - "Display allowed image types" flag off + +option "input1" i "First input image filename" string required +option "input2" j "Second input image filename" string required +option "output" o "Output image filename" string required +option "dimension" d "Dimension on which to concatenate" int required diff --git a/tools/clitkCatImageGenericFilter.h b/tools/clitkCatImageGenericFilter.h new file mode 100644 index 0000000..bee6ebc --- /dev/null +++ b/tools/clitkCatImageGenericFilter.h @@ -0,0 +1,69 @@ +/*========================================================================= + 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 CLITKCatImageGENERICFILTER_H +#define CLITKCatImageGENERICFILTER_H +#include "clitkIO.h" +#include "clitkImageToImageGenericFilter.h" + +//-------------------------------------------------------------------- +namespace clitk +{ + +template +class ITK_EXPORT CatImageGenericFilter: + public ImageToImageGenericFilter > +{ + +public: + + //-------------------------------------------------------------------- + CatImageGenericFilter(); + + //-------------------------------------------------------------------- + typedef CatImageGenericFilter Self; + typedef itk::SmartPointer Pointer; + typedef itk::SmartPointer ConstPointer; + + //-------------------------------------------------------------------- + // Method for creation through the object factory + // and Run-time type information (and related methods) + itkNewMacro(Self); + itkTypeMacro(CatImageGenericFilter, LightObject); + + //-------------------------------------------------------------------- + void SetArgsInfo(const args_info_type & a); + + //-------------------------------------------------------------------- + // Main function called each time the filter is updated + template + void UpdateWithInputImageType(); + +protected: + template void InitializeImageType(); + args_info_type mArgsInfo; + +}; // end class +//-------------------------------------------------------------------- + +} // end namespace clitk + +#ifndef ITK_MANUAL_INSTANTIATION +#include "clitkCatImageGenericFilter.txx" +#endif + +#endif // #define clitkCatImageGenericFilter_h diff --git a/tools/clitkCatImageGenericFilter.txx b/tools/clitkCatImageGenericFilter.txx new file mode 100644 index 0000000..0355bff --- /dev/null +++ b/tools/clitkCatImageGenericFilter.txx @@ -0,0 +1,121 @@ +/*========================================================================= + 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 clitkCatImageGenericFilter_txx +#define clitkCatImageGenericFilter_txx + +#include +#include +#include + +namespace clitk +{ + +//-------------------------------------------------------------------- +template +CatImageGenericFilter::CatImageGenericFilter(): + ImageToImageGenericFilter("CatImage") +{ + InitializeImageType<2>(); + InitializeImageType<3>(); + InitializeImageType<4>(); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +template +void CatImageGenericFilter::InitializeImageType() +{ + ADD_DEFAULT_IMAGE_TYPES(Dim); + ADD_VEC_IMAGE_TYPE(2,2,float); + ADD_VEC_IMAGE_TYPE(2,3,float); + ADD_VEC_IMAGE_TYPE(3,3,float); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +void CatImageGenericFilter::SetArgsInfo(const args_info_type & a) +{ + mArgsInfo=a; + SetIOVerbose(mArgsInfo.verbose_flag); + if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes(); + + if (mArgsInfo.input1_given) + AddInputFilename(mArgsInfo.input1_arg); + if (mArgsInfo.input2_given) + AddInputFilename(mArgsInfo.input2_arg); + if (mArgsInfo.output_given) + SetOutputFilename(mArgsInfo.output_arg); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +// Update with the number of dimensions and the pixeltype +//-------------------------------------------------------------------- +template +template +void +CatImageGenericFilter::UpdateWithInputImageType() +{ + + // Reading input 1 + typename InputImageType::Pointer input1 = this->template GetInput(0); + typename InputImageType::Pointer input2 = this->template GetInput(1); + + // Main filter + typedef typename InputImageType::PixelType PixelType; + typedef itk::Image OutputImageType; + + typename InputImageType::RegionType region; + region = input2->GetLargestPossibleRegion(); + + // Filter + typename InputImageType::SizeType upperBound; + upperBound.Fill(0); + upperBound[mArgsInfo.dimension_arg] = region.GetSize()[mArgsInfo.dimension_arg]; + typedef itk::ConstantPadImageFilter PadImageFilterType; + typename PadImageFilterType::Pointer pad= PadImageFilterType::New(); + pad->SetInput(input1); + pad->SetPadUpperBound(upperBound); + + typename InputImageType::IndexType index; + index.Fill(0); + index[mArgsInfo.dimension_arg] = input1->GetLargestPossibleRegion().GetSize(mArgsInfo.dimension_arg); + + typedef itk::PasteImageFilter PasteImageFilterType; + typename PasteImageFilterType::Pointer pasteFilter=PasteImageFilterType::New(); + pasteFilter->SetSourceImage(input2); + pasteFilter->SetDestinationImage(pad->GetOutput()); + pasteFilter->SetDestinationIndex(index); + pasteFilter->SetSourceRegion(region); + pasteFilter->InPlaceOn(); + pasteFilter->Update(); + + typename InputImageType::Pointer output = pasteFilter->GetOutput(); + + this->template SetNextOutput(output); +} +//-------------------------------------------------------------------- + + +}//end clitk + +#endif //#define clitkCatImageGenericFilter_txx -- 2.47.1