X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkSplitImageGenericFilter.cxx;h=58732ab27af434a5f5e2a4b9996bc173347953b4;hb=d9c8c6e6c759655fc24d05d47b962d2ba574b95d;hp=55bf7a80716517e18324637901f70eee5be1bc10;hpb=cd812e081da4c491c5a4d0a7a41ce198e226b75c;p=clitk.git diff --git a/tools/clitkSplitImageGenericFilter.cxx b/tools/clitkSplitImageGenericFilter.cxx index 55bf7a8..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; } //-------------------------------------------------------------------- @@ -83,6 +84,7 @@ clitk::SplitImageGenericFilter::PngConversion::Do(double window, typename CastFilterType::Pointer cast = CastFilterType::New(); cast->SetWindowLevel(window, level); cast->SetInput(input); + cast->Update(); return cast->GetOutput(); } //-------------------------------------------------------------------- @@ -104,12 +106,12 @@ void clitk::SplitImageGenericFilter::UpdateWithInputImageType() size[mSplitDimension]=0; typename ImageType::RegionType extracted_region; extracted_region.SetSize(size); -#if ITK_VERSION_MAJOR >= 4 - filter->SetDirectionCollapseToSubmatrix(); -#endif + filter->SetDirectionCollapseToIdentity(); 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]; @@ -120,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()); + } } } }