X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=filters%2FclitkSplitImageGenericFilter.cxx;h=97480583d0b10283c98208481c4cf1a2024fe3fe;hb=7f78d7b6b6bca61ca0aae964a6747cd769c0ba94;hp=bb46dd971206a7324235a524e6126eddffa1ba9f;hpb=931a42358442f4ee4f314613c991c838d4b4e3b7;p=clitk.git diff --git a/filters/clitkSplitImageGenericFilter.cxx b/filters/clitkSplitImageGenericFilter.cxx index bb46dd9..9748058 100644 --- a/filters/clitkSplitImageGenericFilter.cxx +++ b/filters/clitkSplitImageGenericFilter.cxx @@ -23,27 +23,61 @@ #include "clitkSplitImageGenericFilter.txx" //-------------------------------------------------------------------- -clitk::SplitImageGenericFilter::SplitImageGenericFilter() { +clitk::SplitImageGenericFilter::SplitImageGenericFilter(): + clitk::ImageToImageGenericFilter("SplitImage") { mSplitDimension = 0; + InitializeImageType<3>(); + InitializeImageType<4>(); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +void clitk::SplitImageGenericFilter::InitializeImageType() { + ADD_IMAGE_TYPE(Dim, char); + ADD_IMAGE_TYPE(Dim, unsigned char); + ADD_IMAGE_TYPE(Dim, short); + ADD_IMAGE_TYPE(Dim, int); + ADD_IMAGE_TYPE(Dim, float); + typedef itk::Vector DVF; + ADD_IMAGE_TYPE(Dim, DVF); } //-------------------------------------------------------------------- //-------------------------------------------------------------------- -void clitk::SplitImageGenericFilter::Update () { - - // Read the Dimension and PixelType - int Dimension, Components; - std::string PixelType; - ReadImageDimensionAndPixelType(this->mInputFilenames[0], Dimension, PixelType, Components); - - - // Call UpdateWithDim - if(Dimension==3) UpdateWithDim<3>(PixelType, Components); - else if (Dimension==4)UpdateWithDim<4>(PixelType, Components); - else - { - std::cout<<"Error, Only for 3 or 4 Dimensions!!!"< +void clitk::SplitImageGenericFilter::UpdateWithInputImageType() { + + // Read input + typedef typename ImageType::PixelType PixelType; + typedef itk::Image OutputImageType; + typename ImageType::Pointer input = this->GetInput(0); + typedef itk::ExtractImageFilter FilterType; + typename FilterType::Pointer filter= FilterType::New(); + + filter->SetInput(input); + typename ImageType::SizeType size=input->GetLargestPossibleRegion().GetSize(); + size[mSplitDimension]=0; + typename ImageType::RegionType extracted_region; + extracted_region.SetSize(size); + filter->SetExtractionRegion(extracted_region); + filter->Update(); + + typename ImageType::IndexType index=input->GetLargestPossibleRegion().GetIndex(); + std::string base_filename=GetOutputFilename(); + unsigned int number_of_output_images=input->GetLargestPossibleRegion().GetSize()[mSplitDimension]; + for (unsigned int i=0;iSetExtractionRegion(extracted_region); + filter->Update(); + SetOutputFilename(base_filename+"_"+ss.str()+".mhd"); + typename OutputImageType::Pointer output=filter->GetOutput(); + SetNextOutput(output); + } } //--------------------------------------------------------------------