]> Creatis software - clitk.git/blob - filters/clitkSplitImageGenericFilter.cxx
removed headers
[clitk.git] / filters / clitkSplitImageGenericFilter.cxx
1 /**
2  -------------------------------------------------------------------
3  * @file   clitkSplitImageGenericFilter.cxx
4  * @author Joël Schaerer
5  * @date   20 April 2009
6
7  * @brief  
8  -------------------------------------------------------------------*/
9
10 #include "clitkSplitImageGenericFilter.h"
11
12 #include "clitkSplitImageGenericFilter.txx"
13 //--------------------------------------------------------------------
14 clitk::SplitImageGenericFilter::SplitImageGenericFilter():
15   clitk::ImageToImageGenericFilter<Self>("SplitImage") {
16   mSplitDimension = 0;
17   InitializeImageType<3>();
18   InitializeImageType<4>();
19 }
20 //--------------------------------------------------------------------
21
22
23 //--------------------------------------------------------------------
24 template<unsigned int Dim>
25 void clitk::SplitImageGenericFilter::InitializeImageType() {      
26   ADD_IMAGE_TYPE(Dim, char);
27   ADD_IMAGE_TYPE(Dim, unsigned char);
28   ADD_IMAGE_TYPE(Dim, short);
29   ADD_IMAGE_TYPE(Dim, int);
30   ADD_IMAGE_TYPE(Dim, float);
31   ADD_VEC_IMAGE_TYPE(Dim, 3,float);
32 }
33 //--------------------------------------------------------------------
34
35 //--------------------------------------------------------------------
36 template<class ImageType>
37 void clitk::SplitImageGenericFilter::UpdateWithInputImageType() {
38
39   // Read input
40   typedef typename ImageType::PixelType PixelType;
41   typedef itk::Image<PixelType,ImageType::ImageDimension-1> OutputImageType;
42   typename ImageType::Pointer input = this->GetInput<ImageType>(0);
43   typedef itk::ExtractImageFilter<ImageType,OutputImageType> FilterType;
44   typename FilterType::Pointer filter= FilterType::New();
45
46   filter->SetInput(input);
47   typename ImageType::SizeType size=input->GetLargestPossibleRegion().GetSize();
48   size[mSplitDimension]=0;
49   typename ImageType::RegionType extracted_region;
50   extracted_region.SetSize(size);
51   filter->SetExtractionRegion(extracted_region);
52   filter->Update();
53
54   typename ImageType::IndexType index=input->GetLargestPossibleRegion().GetIndex();
55   std::string base_filename=GetOutputFilename();
56   unsigned int number_of_output_images=input->GetLargestPossibleRegion().GetSize()[mSplitDimension];
57   for (unsigned int i=0;i<number_of_output_images;i++)
58   {
59       std::ostringstream ss;
60       ss << i;
61       index[mSplitDimension]=i;
62       extracted_region.SetIndex(index);
63       filter->SetExtractionRegion(extracted_region);
64       filter->Update();
65       SetOutputFilename(base_filename+"_"+ss.str()+".mhd");
66       typename OutputImageType::Pointer output=filter->GetOutput();
67       SetNextOutput<OutputImageType>(output);
68   }
69 }
70 //--------------------------------------------------------------------