2 -------------------------------------------------------------------
3 * @file clitkSplitImageGenericFilter.cxx
4 * @author Joël Schaerer
8 -------------------------------------------------------------------*/
10 #include "clitkSplitImageGenericFilter.h"
12 #include "clitkSplitImageGenericFilter.txx"
13 //--------------------------------------------------------------------
14 clitk::SplitImageGenericFilter::SplitImageGenericFilter():
15 clitk::ImageToImageGenericFilter<Self>("SplitImage") {
17 InitializeImageType<3>();
18 InitializeImageType<4>();
20 //--------------------------------------------------------------------
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);
33 //--------------------------------------------------------------------
35 //--------------------------------------------------------------------
36 template<class ImageType>
37 void clitk::SplitImageGenericFilter::UpdateWithInputImageType() {
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();
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);
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++)
59 std::ostringstream ss;
61 index[mSplitDimension]=i;
62 extracted_region.SetIndex(index);
63 filter->SetExtractionRegion(extracted_region);
65 SetOutputFilename(base_filename+"_"+ss.str()+".mhd");
66 typename OutputImageType::Pointer output=filter->GetOutput();
67 SetNextOutput<OutputImageType>(output);
70 //--------------------------------------------------------------------