X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkSplitImageGenericFilter.cxx;h=72f712c9be1614b6fca13ef35aa102f4119f9af9;hb=d4377ec80fd4e6f0156bb0673bb661acbf5b8cec;hp=5a5e246e8c6eb81d11bf3d872c1cf3ba64ff94cb;hpb=1b6c27b984f38e6a16edb99c78e513d85b53ea00;p=clitk.git diff --git a/tools/clitkSplitImageGenericFilter.cxx b/tools/clitkSplitImageGenericFilter.cxx index 5a5e246..72f712c 100644 --- a/tools/clitkSplitImageGenericFilter.cxx +++ b/tools/clitkSplitImageGenericFilter.cxx @@ -36,13 +36,55 @@ clitk::SplitImageGenericFilter::SplitImageGenericFilter(): } //-------------------------------------------------------------------- - //-------------------------------------------------------------------- template void clitk::SplitImageGenericFilter::InitializeImageType() { ADD_DEFAULT_IMAGE_TYPES(Dim); - //ADD_VEC_IMAGE_TYPE(Dim, 3,float); + ADD_VEC_IMAGE_TYPE(Dim, 3,float); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename clitk::SplitImageGenericFilter::PngConversion::OutputPngImagePointer +clitk::SplitImageGenericFilter::PngConversion::Do(double window, + double level, + ImagePointer input) +{ + static const unsigned int PixelDimension = itk::PixelTraits::Dimension; + return this->Do(window, level, input, static_cast< PixelDimType *>(NULL) ); +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +template +typename clitk::SplitImageGenericFilter::PngConversion::OutputPngImagePointer +clitk::SplitImageGenericFilter::PngConversion::Do(double window, + double level, + ImagePointer input, + PixelDimType *) +{ + clitkExceptionMacro("Png conversion is not implemented for vector fields"); + return NULL; +} +//-------------------------------------------------------------------- + +//-------------------------------------------------------------------- +template +typename clitk::SplitImageGenericFilter::PngConversion::OutputPngImagePointer +clitk::SplitImageGenericFilter::PngConversion::Do(double window, + double level, + ImagePointer input, + PixelDimType<1> *) +{ + typedef itk::IntensityWindowingImageFilter< ImageType, OutputPngImageType > CastFilterType; + typename CastFilterType::Pointer cast = CastFilterType::New(); + cast->SetWindowLevel(window, level); + cast->SetInput(input); + cast->Update(); + return cast->GetOutput(); } //-------------------------------------------------------------------- @@ -64,7 +106,7 @@ void clitk::SplitImageGenericFilter::UpdateWithInputImageType() typename ImageType::RegionType extracted_region; extracted_region.SetSize(size); #if ITK_VERSION_MAJOR >= 4 - filter->SetDirectionCollapseToSubmatrix(); + filter->SetDirectionCollapseToIdentity(); #endif filter->SetExtractionRegion(extracted_region); filter->Update(); @@ -80,13 +122,11 @@ void clitk::SplitImageGenericFilter::UpdateWithInputImageType() filter->SetExtractionRegion(extracted_region); filter->Update(); if(this->m_Png){ - typedef itk::Image< unsigned char, ImageType::ImageDimension-1 > OutputPngImageType; - typedef itk::IntensityWindowingImageFilter< OutputImageType, OutputPngImageType > CastFilterType; - typename CastFilterType::Pointer cast = CastFilterType::New(); - cast->SetWindowLevel(this->m_Window, this->m_Level); - cast->SetInput(filter->GetOutput()); + PngConversion png; SetOutputFilename(base_filename+"_"+ss.str()+".png"); - SetNextOutput(cast->GetOutput()); + 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");