X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkAverageTemporalDimensionGenericFilter.txx;h=acfb2383bc0d3085e76bcaf49b0360ad20589396;hb=8053f213b244363b3c07a27008081dc88dd1f200;hp=473e36fee73ab9fdcb66a38205f71b2740be4cb0;hpb=0b7c9b1e1215634b02cbd38d4e4ba101d6111ba8;p=clitk.git diff --git a/tools/clitkAverageTemporalDimensionGenericFilter.txx b/tools/clitkAverageTemporalDimensionGenericFilter.txx index 473e36f..acfb238 100644 --- a/tools/clitkAverageTemporalDimensionGenericFilter.txx +++ b/tools/clitkAverageTemporalDimensionGenericFilter.txx @@ -1,9 +1,9 @@ /*========================================================================= 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://oncora1.lyon.fnclcc.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 @@ -14,231 +14,221 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html -======================================================================-====*/ +===========================================================================**/ #ifndef clitkAverageTemporalDimensionGenericFilter_txx #define clitkAverageTemporalDimensionGenericFilter_txx /* ================================================= * @file clitkAverageTemporalDimensionGenericFilter.txx - * @author - * @date - * - * @brief - * + * @author + * @date + * + * @brief + * ===================================================*/ namespace clitk { - //----------------------------------------------------------- - // Constructor - //----------------------------------------------------------- - template - AverageTemporalDimensionGenericFilter::AverageTemporalDimensionGenericFilter() - { - m_Verbose=false; - m_InputFileName=""; +//----------------------------------------------------------- +// Constructor +//----------------------------------------------------------- +template +AverageTemporalDimensionGenericFilter::AverageTemporalDimensionGenericFilter() +{ + m_Verbose=false; + m_InputFileName=""; +} + + +//----------------------------------------------------------- +// Update +//----------------------------------------------------------- +template +void AverageTemporalDimensionGenericFilter::Update() +{ + // Read the Dimension and PixelType + int Dimension, Components; + std::string PixelType; + ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType, Components); + + + // Call UpdateWithDim + if (m_ArgsInfo.input_given>1) Dimension+=1; + if(Dimension==2) UpdateWithDim<2>(PixelType, Components); + else if(Dimension==3)UpdateWithDim<3>(PixelType, Components); + else if (Dimension==4)UpdateWithDim<4>(PixelType, Components); + else { + std::cout<<"Error, Only for 2, 3 or 4D!!!"< +template +void +AverageTemporalDimensionGenericFilter::UpdateWithDim(const std::string PixelType, const int Components) +{ + if (m_Verbose) std::cout << "Image was detected to be "<(); + } + // else if(PixelType == "unsigned_short"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + + else if (PixelType == "unsigned_char") { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; + UpdateWithDimAndPixelType(); + } + + // else if (PixelType == "char"){ + // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; + // UpdateWithDimAndPixelType(); + // } + else { + if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; + UpdateWithDimAndPixelType(); + } } + // else if (Components==2) + // { + // if (m_Verbose) std::cout << "Launching transform in "<< Dimension <<"D and 3D float (DVF)" << std::endl; + // UpdateWithDimAndPixelType >(); + // } - //----------------------------------------------------------- - // Update - //----------------------------------------------------------- - template - void AverageTemporalDimensionGenericFilter::Update() - { - // Read the Dimension and PixelType - int Dimension, Components; - std::string PixelType; - ReadImageDimensionAndPixelType(m_InputFileName, Dimension, PixelType, Components); - - - // Call UpdateWithDim - if (m_ArgsInfo.input_given>1) Dimension+=1; - if(Dimension==2) UpdateWithDim<2>(PixelType, Components); - else if(Dimension==3)UpdateWithDim<3>(PixelType, Components); - else if (Dimension==4)UpdateWithDim<4>(PixelType, Components); - else - { - std::cout<<"Error, Only for 2, 3 or 4D!!!"< >(); } - //------------------------------------------------------------------- - // Update with the number of dimensions - //------------------------------------------------------------------- - template - template - void - AverageTemporalDimensionGenericFilter::UpdateWithDim(const std::string PixelType, const int Components) - { - if (m_Verbose) std::cout << "Image was detected to be "<(); - } - // else if(PixelType == "unsigned_short"){ - // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; - // UpdateWithDimAndPixelType(); - // } - - else if (PixelType == "unsigned_char"){ - if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; - UpdateWithDimAndPixelType(); - } - - // else if (PixelType == "char"){ - // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; - // UpdateWithDimAndPixelType(); - // } - else { - if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; - UpdateWithDimAndPixelType(); - } - } - - // else if (Components==2) - // { - // if (m_Verbose) std::cout << "Launching transform in "<< Dimension <<"D and 3D float (DVF)" << std::endl; - // UpdateWithDimAndPixelType >(); - // } - - else if (Components==3) - { - if (m_Verbose) std::cout << "Launching transform in "<< Dimension <<"D and 3D float (DVF)" << std::endl; - UpdateWithDimAndPixelType >(); - } - - // else if (Components==4) - // { - // if (m_Verbose) std::cout << "Launching transform in "<< Dimension <<"D and 3D float (DVF)" << std::endl; - // UpdateWithDimAndPixelType >(); - // } - else std::cerr<<"Number of components is "< >(); + // } + else std::cerr<<"Number of components is "< +template +void +AverageTemporalDimensionGenericFilter::UpdateWithDimAndPixelType() +{ + + // ImageTypes + typedef itk::Image InputImageType; + typedef itk::Image OutputImageType; + typename InputImageType::Pointer input; + + if (m_ArgsInfo.input_given ==1 ) { + // Read the input + typedef itk::ImageFileReader InputReaderType; + typename InputReaderType::Pointer reader = InputReaderType::New(); + reader->SetFileName( m_InputFileName); + reader->Update(); + input= reader->GetOutput(); + } + + else { + // Read and join multiple inputs + if (m_Verbose) std::cout< filenames; + for(unsigned int i=0; i ImageReaderType; + typename ImageReaderType::Pointer reader= ImageReaderType::New(); + reader->SetFileNames(filenames); + reader->Update(); + input =reader->GetOutput(); } - //------------------------------------------------------------------- - // Update with the number of dimensions and the pixeltype - //------------------------------------------------------------------- - template - template - void - AverageTemporalDimensionGenericFilter::UpdateWithDimAndPixelType() - { - - // ImageTypes - typedef itk::Image InputImageType; - typedef itk::Image OutputImageType; - typename InputImageType::Pointer input; - - if (m_ArgsInfo.input_given ==1 ) - { - // Read the input - typedef itk::ImageFileReader InputReaderType; - typename InputReaderType::Pointer reader = InputReaderType::New(); - reader->SetFileName( m_InputFileName); - reader->Update(); - input= reader->GetOutput(); - } - - else - { - // Read and join multiple inputs - if (m_Verbose) std::cout< filenames; - for(unsigned int i=0; i ImageReaderType; - typename ImageReaderType::Pointer reader= ImageReaderType::New(); - reader->SetFileNames(filenames); - reader->Update(); - input =reader->GetOutput(); - } - - - // Output properties - typename OutputImageType::RegionType region; - typename OutputImageType::RegionType::SizeType size; - typename OutputImageType::IndexType index; - typename OutputImageType::SpacingType spacing; - typename OutputImageType::PointType origin; - typename InputImageType::RegionType region4D=input->GetLargestPossibleRegion(); - typename InputImageType::RegionType::SizeType size4D=region4D.GetSize(); - typename InputImageType::IndexType index4D=region4D.GetIndex(); - typename InputImageType::SpacingType spacing4D=input->GetSpacing(); - typename InputImageType::PointType origin4D=input->GetOrigin(); - - for (unsigned int i=0; i< Dimension-1; i++) - { - size[i]=size4D[i]; - index[i]=index4D[i]; - spacing[i]=spacing4D[i]; - origin[i]=origin4D[i]; - } - region.SetSize(size); - region.SetIndex(index); - typename OutputImageType::Pointer output= OutputImageType::New(); - output->SetRegions(region); - output->SetSpacing(spacing); - output->SetOrigin(origin); - output->Allocate(); - - - // Region iterators - typedef itk::ImageRegionIterator IteratorType; - std::vector iterators(size4D[Dimension-1]); - for (unsigned int i=0; i< size4D[Dimension-1]; i++) - { - typename InputImageType::RegionType regionIt=region4D; - typename InputImageType::RegionType::SizeType sizeIt=regionIt.GetSize(); - sizeIt[Dimension-1]=1; - regionIt.SetSize(sizeIt); - typename InputImageType::IndexType indexIt=regionIt.GetIndex(); - indexIt[Dimension-1]=i; - regionIt.SetIndex(indexIt); - iterators[i]=IteratorType(input, regionIt); - } - - typedef itk::ImageRegionIterator OutputIteratorType; - OutputIteratorType avIt(output, output->GetLargestPossibleRegion()); - - // Average - PixelType vector; - PixelType zeroVector=itk::NumericTraits::Zero; - //zeroVector.Fill(0.0); - while (!(iterators[0]).IsAtEnd()) - { - vector=zeroVector; - for (unsigned int i=0; i WriterType; - typename WriterType::Pointer writer = WriterType::New(); - writer->SetFileName(m_ArgsInfo.output_arg); - writer->SetInput(output); - writer->Update(); + // Output properties + typename OutputImageType::RegionType region; + typename OutputImageType::RegionType::SizeType size; + typename OutputImageType::IndexType index; + typename OutputImageType::SpacingType spacing; + typename OutputImageType::PointType origin; + typename InputImageType::RegionType region4D=input->GetLargestPossibleRegion(); + typename InputImageType::RegionType::SizeType size4D=region4D.GetSize(); + typename InputImageType::IndexType index4D=region4D.GetIndex(); + typename InputImageType::SpacingType spacing4D=input->GetSpacing(); + typename InputImageType::PointType origin4D=input->GetOrigin(); + + for (unsigned int i=0; i< Dimension-1; i++) { + size[i]=size4D[i]; + index[i]=index4D[i]; + spacing[i]=spacing4D[i]; + origin[i]=origin4D[i]; + } + region.SetSize(size); + region.SetIndex(index); + typename OutputImageType::Pointer output= OutputImageType::New(); + output->SetRegions(region); + output->SetSpacing(spacing); + output->SetOrigin(origin); + output->Allocate(); + + + // Region iterators + typedef itk::ImageRegionIterator IteratorType; + std::vector iterators(size4D[Dimension-1]); + for (unsigned int i=0; i< size4D[Dimension-1]; i++) { + typename InputImageType::RegionType regionIt=region4D; + typename InputImageType::RegionType::SizeType sizeIt=regionIt.GetSize(); + sizeIt[Dimension-1]=1; + regionIt.SetSize(sizeIt); + typename InputImageType::IndexType indexIt=regionIt.GetIndex(); + indexIt[Dimension-1]=i; + regionIt.SetIndex(indexIt); + iterators[i]=IteratorType(input, regionIt); + } + typedef itk::ImageRegionIterator OutputIteratorType; + OutputIteratorType avIt(output, output->GetLargestPossibleRegion()); + + // Average + PixelType vector; + PixelType zeroVector=itk::NumericTraits::Zero; + //zeroVector.Fill(0.0); + while (!(iterators[0]).IsAtEnd()) { + vector=zeroVector; + for (unsigned int i=0; i WriterType; + typename WriterType::Pointer writer = WriterType::New(); + writer->SetFileName(m_ArgsInfo.output_arg); + writer->SetInput(output); + writer->Update(); + +} + }//end clitk - + #endif //#define clitkAverageTemporalDimensionGenericFilter_txx