]> Creatis software - clitk.git/blob - filters/clitkBinarizeImageGenericFilter.txx
6b993e56ae97e7f73656a29e615823013150d847
[clitk.git] / filters / clitkBinarizeImageGenericFilter.txx
1 #ifndef clitkBinarizeImageGenericFilter_txx
2 #define clitkBinarizeImageGenericFilter_txx
3
4 /* =================================================
5  * @file   clitkBinarizeImageGenericFilter.txx
6  * @author Jef Vandemeulebroucke <jef@creatis.insa-lyon.fr>
7  * @date   29 june 2009
8  * 
9  * @brief 
10  * 
11  ===================================================*/
12
13 #include "itkMaskImageFilter.h"
14
15 namespace clitk
16 {
17   
18   //--------------------------------------------------------------------
19   template<class args_info_type>
20   BinarizeImageGenericFilter<args_info_type>::BinarizeImageGenericFilter():
21     ImageToImageGenericFilter<Self>("Binarize") {
22     //    InitializeImageType<2>();
23     InitializeImageType<3>();
24     //InitializeImageType<4>();
25   }
26   //--------------------------------------------------------------------
27
28
29   //--------------------------------------------------------------------
30   template<class args_info_type>
31   template<unsigned int Dim>
32   void BinarizeImageGenericFilter<args_info_type>::InitializeImageType() {      
33     //ADD_IMAGE_TYPE(Dim, char);
34     ADD_IMAGE_TYPE(Dim, short);
35     //ADD_IMAGE_TYPE(Dim, int);
36     //ADD_IMAGE_TYPE(Dim, float);
37   }
38   //--------------------------------------------------------------------
39   
40
41   //--------------------------------------------------------------------
42   template<class args_info_type>
43   void BinarizeImageGenericFilter<args_info_type>::SetArgsInfo(const args_info_type & a) {
44     mArgsInfo=a;
45     SetIOVerbose(mArgsInfo.verbose_flag);
46
47     if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes();
48
49     if (mArgsInfo.input_given) {
50       SetInputFilename(mArgsInfo.input_arg);
51     }
52     if (mArgsInfo.output_given) {
53       SetOutputFilename(mArgsInfo.output_arg);
54     }
55   }
56   //--------------------------------------------------------------------
57
58   //--------------------------------------------------------------------
59   // Update with the number of dimensions and the pixeltype
60   //--------------------------------------------------------------------
61   template<class args_info_type>
62   template<class InputImageType>
63   void 
64   BinarizeImageGenericFilter<args_info_type>::UpdateWithInputImageType()
65   {
66
67     // Reading input
68     typename InputImageType::Pointer input = this->template GetInput<InputImageType>(0);
69     
70     // Main filter
71     typedef typename InputImageType::PixelType PixelType;
72     typedef itk::Image<int, InputImageType::ImageDimension> OutputImageType;
73
74     // Filter
75     typedef itk::BinaryThresholdImageFilter<InputImageType, OutputImageType> BinaryThresholdImageFilterType;
76     typename BinaryThresholdImageFilterType::Pointer thresholdFilter=BinaryThresholdImageFilterType::New();
77     thresholdFilter->SetInput(input);
78
79     if (mArgsInfo.setFG_flag) {
80       double fg = mArgsInfo.fg_arg;
81       mArgsInfo.fg_arg = mArgsInfo.bg_arg;
82       mArgsInfo.bg_arg = fg;
83     }
84
85     if(mArgsInfo.lower_given) thresholdFilter->SetLowerThreshold(static_cast<PixelType>(mArgsInfo.lower_arg));
86     if(mArgsInfo.upper_given) thresholdFilter->SetUpperThreshold(static_cast<PixelType>(mArgsInfo.upper_arg));
87
88     DD(mArgsInfo.lower_given);
89     DD(mArgsInfo.upper_given);
90     DD(mArgsInfo.lower_arg);
91     DD(mArgsInfo.upper_arg);
92
93     DD(mArgsInfo.fg_arg);
94     DD(mArgsInfo.bg_arg);
95     DD(mArgsInfo.fg_given);
96     DD(mArgsInfo.bg_given);
97
98     thresholdFilter->SetInsideValue(mArgsInfo.fg_arg);
99     thresholdFilter->SetOutsideValue(mArgsInfo.bg_arg);
100
101     thresholdFilter->Update();
102
103     // If no BG or no FG : new image, copy input with MaskImageFilter
104     // If setFG -> FG BG have been changed
105     if (0) {
106       if (mArgsInfo.setBG_flag || mArgsInfo.setFG_flag) {
107         DD("set BG!!!!");
108         //if ()
109         typedef itk::MaskImageFilter<InputImageType,OutputImageType> maskFilterType;
110         typename maskFilterType::Pointer maskFilter = maskFilterType::New();
111         maskFilter->SetInput1(input);
112         maskFilter->SetInput2(thresholdFilter->GetOutput());
113         maskFilter->Update();
114         typename InputImageType::Pointer outputImage = maskFilter->GetOutput();
115         // Write/Save results
116         this->template SetNextOutput<InputImageType>(outputImage);
117       }
118     }
119     else {
120       typename OutputImageType::Pointer outputImage = thresholdFilter->GetOutput();
121       // Write/Save results
122       this->template SetNextOutput<OutputImageType>(outputImage);
123     }
124   }
125   //--------------------------------------------------------------------
126
127
128 }//end clitk
129  
130 #endif //#define clitkBinarizeImageGenericFilter_txx