X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkSplitImageGenericFilter.cxx;h=a73d3080e359d06eb462b26b589d32974b789334;hb=996c472dd4315215c25890d6b8a9b565413352f7;hp=55bf7a80716517e18324637901f70eee5be1bc10;hpb=4ba4be439271a74fbc864a2c615a35b72a9d0d26;p=clitk.git diff --git a/tools/clitkSplitImageGenericFilter.cxx b/tools/clitkSplitImageGenericFilter.cxx index 55bf7a8..a73d308 100644 --- a/tools/clitkSplitImageGenericFilter.cxx +++ b/tools/clitkSplitImageGenericFilter.cxx @@ -25,6 +25,7 @@ -------------------------------------------------------------------*/ #include "clitkSplitImageGenericFilter.h" +#include "itkChangeInformationImageFilter.h" #include //-------------------------------------------------------------------- clitk::SplitImageGenericFilter::SplitImageGenericFilter(): @@ -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()); + } } } }