X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=tools%2FclitkSplitImageGenericFilter.cxx;h=4eb00b9bac7d4b880e0ac77f7883e3ab6f9a8346;hb=b63909ee93d14fb6161180c2b4e63bf35d4112a8;hp=4fd6eac9e0de58fb4d879f729767180a2e52f25e;hpb=a26cd8a19e1b9ad8344ab501436045f171a73713;p=clitk.git diff --git a/tools/clitkSplitImageGenericFilter.cxx b/tools/clitkSplitImageGenericFilter.cxx old mode 100755 new mode 100644 index 4fd6eac..4eb00b9 --- a/tools/clitkSplitImageGenericFilter.cxx +++ b/tools/clitkSplitImageGenericFilter.cxx @@ -3,7 +3,7 @@ Authors belong to: - University of LYON http://www.universite-lyon.fr/ - - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even @@ -14,7 +14,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html -======================================================================-====*/ +===========================================================================**/ /** ------------------------------------------------------------------- * @file clitkSplitImageGenericFilter.cxx @@ -25,7 +25,6 @@ -------------------------------------------------------------------*/ #include "clitkSplitImageGenericFilter.h" -#include "clitkSplitImageGenericFilter.txx" #include //-------------------------------------------------------------------- clitk::SplitImageGenericFilter::SplitImageGenericFilter(): @@ -37,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,6 +105,7 @@ void clitk::SplitImageGenericFilter::UpdateWithInputImageType() size[mSplitDimension]=0; typename ImageType::RegionType extracted_region; extracted_region.SetSize(size); + filter->SetDirectionCollapseToIdentity(); filter->SetExtractionRegion(extracted_region); filter->Update(); @@ -78,13 +120,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");