X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkSplitImageGenericFilter.cxx;h=58732ab27af434a5f5e2a4b9996bc173347953b4;hb=342abd5c807dab47a30d8369aca8f7e5c9242b2b;hp=4eb00b9bac7d4b880e0ac77f7883e3ab6f9a8346;hpb=aa66e8e3252e2d42c7a1fd8b21336a5a0a65835d;p=clitk.git diff --git a/tools/clitkSplitImageGenericFilter.cxx b/tools/clitkSplitImageGenericFilter.cxx index 4eb00b9..58732ab 100644 --- a/tools/clitkSplitImageGenericFilter.cxx +++ b/tools/clitkSplitImageGenericFilter.cxx @@ -25,6 +25,7 @@ -------------------------------------------------------------------*/ #include "clitkSplitImageGenericFilter.h" +#include "itkChangeInformationImageFilter.h" #include //-------------------------------------------------------------------- clitk::SplitImageGenericFilter::SplitImageGenericFilter(): @@ -53,7 +54,7 @@ clitk::SplitImageGenericFilter::PngConversion::Do(double window, ImagePointer input) { static const unsigned int PixelDimension = itk::PixelTraits::Dimension; - return this->Do(window, level, input, static_cast< PixelDimType *>(NULL) ); + return this->Do(window, level, input, static_cast< PixelDimType *>(ITK_NULLPTR) ); } //-------------------------------------------------------------------- @@ -67,7 +68,7 @@ clitk::SplitImageGenericFilter::PngConversion::Do(double window, PixelDimType *) { clitkExceptionMacro("Png conversion is not implemented for vector fields"); - return NULL; + return ITK_NULLPTR; } //-------------------------------------------------------------------- @@ -109,6 +110,8 @@ void clitk::SplitImageGenericFilter::UpdateWithInputImageType() filter->SetExtractionRegion(extracted_region); filter->Update(); + typedef itk::ChangeInformationImageFilter< OutputImageType > InformationFilterType; + typename ImageType::IndexType index=input->GetLargestPossibleRegion().GetIndex(); std::string base_filename=GetOutputFilename(); unsigned int number_of_output_images=input->GetLargestPossibleRegion().GetSize()[mSplitDimension]; @@ -119,16 +122,44 @@ void clitk::SplitImageGenericFilter::UpdateWithInputImageType() extracted_region.SetIndex(index); filter->SetExtractionRegion(extracted_region); filter->Update(); - if(this->m_Png){ - PngConversion png; - SetOutputFilename(base_filename+"_"+ss.str()+".png"); - typename PngConversion::OutputPngImagePointer output; - output = png.Do(this->m_Window, this->m_Level, filter->GetOutput()); - this->template SetNextOutput::OutputPngImageType>(output); + + if (ImageType::ImageDimension == 4 && mSplitDimension == 3) //Copy the transformation matrix if the original image is a 4D image splitted along the time dimension + { + typename InformationFilterType::Pointer informationFilter = InformationFilterType::New(); + informationFilter->SetInput( filter->GetOutput() ); + typename OutputImageType::DirectionType directionOutput; + for (unsigned j=0; j<3; ++j) + for (unsigned k=0; k<3; ++k) + directionOutput[j][k] = input->GetDirection()[j][k]; + informationFilter->SetOutputDirection( directionOutput ); + informationFilter->ChangeDirectionOn(); + informationFilter->UpdateOutputInformation(); + + if(this->m_Png){ + PngConversion png; + SetOutputFilename(base_filename+"_"+ss.str()+".png"); + typename PngConversion::OutputPngImagePointer output; + output = png.Do(this->m_Window, this->m_Level, informationFilter->GetOutput()); + this->template SetNextOutput::OutputPngImageType>(output); + } + else { + SetOutputFilename(base_filename+"_"+ss.str()+".mhd"); + SetNextOutput(informationFilter->GetOutput()); + } } - else { - SetOutputFilename(base_filename+"_"+ss.str()+".mhd"); - SetNextOutput(filter->GetOutput()); + else + { + if(this->m_Png){ + PngConversion png; + SetOutputFilename(base_filename+"_"+ss.str()+".png"); + typename PngConversion::OutputPngImagePointer output; + output = png.Do(this->m_Window, this->m_Level, filter->GetOutput()); + this->template SetNextOutput::OutputPngImageType>(output); + } + else { + SetOutputFilename(base_filename+"_"+ss.str()+".mhd"); + SetNextOutput(filter->GetOutput()); + } } } }