]> Creatis software - clitk.git/blob - filters/clitkSplitImageGenericFilter.cxx
- add CeCILL B licence
[clitk.git] / filters / clitkSplitImageGenericFilter.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
18 /**
19  -------------------------------------------------------------------
20  * @file   clitkSplitImageGenericFilter.cxx
21  * @author Joël Schaerer
22  * @date   20 April 2009
23
24  * @brief  
25  -------------------------------------------------------------------*/
26
27 #include "clitkSplitImageGenericFilter.h"
28
29 #include "clitkSplitImageGenericFilter.txx"
30 //--------------------------------------------------------------------
31 clitk::SplitImageGenericFilter::SplitImageGenericFilter():
32   clitk::ImageToImageGenericFilter<Self>("SplitImage") {
33   mSplitDimension = 0;
34   InitializeImageType<3>();
35   InitializeImageType<4>();
36 }
37 //--------------------------------------------------------------------
38
39
40 //--------------------------------------------------------------------
41 template<unsigned int Dim>
42 void clitk::SplitImageGenericFilter::InitializeImageType() {      
43   ADD_DEFAULT_IMAGE_TYPES(Dim);
44   ADD_VEC_IMAGE_TYPE(Dim, 3,float);
45 }
46 //--------------------------------------------------------------------
47
48 //--------------------------------------------------------------------
49 template<class ImageType>
50 void clitk::SplitImageGenericFilter::UpdateWithInputImageType() {
51
52   // Read input
53   typedef typename ImageType::PixelType PixelType;
54   typedef itk::Image<PixelType,ImageType::ImageDimension-1> OutputImageType;
55   typename ImageType::Pointer input = this->GetInput<ImageType>(0);
56   typedef itk::ExtractImageFilter<ImageType,OutputImageType> FilterType;
57   typename FilterType::Pointer filter= FilterType::New();
58
59   filter->SetInput(input);
60   typename ImageType::SizeType size=input->GetLargestPossibleRegion().GetSize();
61   size[mSplitDimension]=0;
62   typename ImageType::RegionType extracted_region;
63   extracted_region.SetSize(size);
64   filter->SetExtractionRegion(extracted_region);
65   filter->Update();
66
67   typename ImageType::IndexType index=input->GetLargestPossibleRegion().GetIndex();
68   std::string base_filename=GetOutputFilename();
69   unsigned int number_of_output_images=input->GetLargestPossibleRegion().GetSize()[mSplitDimension];
70   for (unsigned int i=0;i<number_of_output_images;i++)
71   {
72       std::ostringstream ss;
73       ss << i;
74       index[mSplitDimension]=i;
75       extracted_region.SetIndex(index);
76       filter->SetExtractionRegion(extracted_region);
77       filter->Update();
78       SetOutputFilename(base_filename+"_"+ss.str()+".mhd");
79       typename OutputImageType::Pointer output=filter->GetOutput();
80       SetNextOutput<OutputImageType>(output);
81   }
82 }
83 //--------------------------------------------------------------------