1 #ifndef clitkBinarizeImageGenericFilter_txx
2 #define clitkBinarizeImageGenericFilter_txx
4 /* =================================================
5 * @file clitkBinarizeImageGenericFilter.txx
6 * @author Jef Vandemeulebroucke <jef@creatis.insa-lyon.fr>
11 ===================================================*/
13 #include "itkMaskImageFilter.h"
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>();
26 //--------------------------------------------------------------------
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);
38 //--------------------------------------------------------------------
41 //--------------------------------------------------------------------
42 template<class args_info_type>
43 void BinarizeImageGenericFilter<args_info_type>::SetArgsInfo(const args_info_type & a) {
45 SetIOVerbose(mArgsInfo.verbose_flag);
47 if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes();
49 if (mArgsInfo.input_given) {
50 SetInputFilename(mArgsInfo.input_arg);
52 if (mArgsInfo.output_given) {
53 SetOutputFilename(mArgsInfo.output_arg);
56 //--------------------------------------------------------------------
58 //--------------------------------------------------------------------
59 // Update with the number of dimensions and the pixeltype
60 //--------------------------------------------------------------------
61 template<class args_info_type>
62 template<class InputImageType>
64 BinarizeImageGenericFilter<args_info_type>::UpdateWithInputImageType()
68 typename InputImageType::Pointer input = this->template GetInput<InputImageType>(0);
71 typedef typename InputImageType::PixelType PixelType;
72 typedef itk::Image<int, InputImageType::ImageDimension> OutputImageType;
75 typedef itk::BinaryThresholdImageFilter<InputImageType, OutputImageType> BinaryThresholdImageFilterType;
76 typename BinaryThresholdImageFilterType::Pointer thresholdFilter=BinaryThresholdImageFilterType::New();
77 thresholdFilter->SetInput(input);
79 if (mArgsInfo.setFG_flag) {
80 double fg = mArgsInfo.fg_arg;
81 mArgsInfo.fg_arg = mArgsInfo.bg_arg;
82 mArgsInfo.bg_arg = fg;
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));
88 DD(mArgsInfo.lower_given);
89 DD(mArgsInfo.upper_given);
90 DD(mArgsInfo.lower_arg);
91 DD(mArgsInfo.upper_arg);
95 DD(mArgsInfo.fg_given);
96 DD(mArgsInfo.bg_given);
98 thresholdFilter->SetInsideValue(mArgsInfo.fg_arg);
99 thresholdFilter->SetOutsideValue(mArgsInfo.bg_arg);
101 thresholdFilter->Update();
103 // If no BG or no FG : new image, copy input with MaskImageFilter
104 // If setFG -> FG BG have been changed
106 if (mArgsInfo.setBG_flag || mArgsInfo.setFG_flag) {
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);
120 typename OutputImageType::Pointer outputImage = thresholdFilter->GetOutput();
121 // Write/Save results
122 this->template SetNextOutput<OutputImageType>(outputImage);
125 //--------------------------------------------------------------------
130 #endif //#define clitkBinarizeImageGenericFilter_txx