]> Creatis software - clitk.git/blob - segmentation/clitkTestFilter.cxx
comment binarizeimage because already exist in tools
[clitk.git] / segmentation / clitkTestFilter.cxx
1
2 /*=========================================================================
3   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
4
5   Authors belong to: 
6   - University of LYON              http://www.universite-lyon.fr/
7   - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
8   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
9
10   This software is distributed WITHOUT ANY WARRANTY; without even
11   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12   PURPOSE.  See the copyright notices for more information.
13
14   It is distributed under dual licence
15
16   - BSD        See included LICENSE.txt file
17   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
18   ======================================================================-====*/
19
20 // clitk
21 #include "clitkTestFilter_ggo.h"
22 #include "clitkImageCommon.h"
23 #include "clitkBooleanOperatorLabelImageFilter.h"
24 #include "clitkAutoCropFilter.h"
25 //#include "clitkRelativePositionConstraintLabelImageFilter.h"
26 #include "clitkResampleImageWithOptionsFilter.h"
27 #include "clitkAddRelativePositionConstraintToLabelImageFilter.h"
28
29 #include "clitkExtractLungFilter.h"
30 #include "clitkExtractPatientFilter.h"
31 #include "clitkExtractMediastinumFilter.h"
32
33 // ITK ENST
34 #include "RelativePositionPropImageFilter.h"
35
36 //--------------------------------------------------------------------
37 int main(int argc, char * argv[]) {
38
39   // Init command line
40   GGO(clitkTestFilter, args_info);
41
42   // Image types
43   //typedef unsigned char PixelType;
44   typedef short PixelType;
45   static const int Dim=3;
46   typedef itk::Image<PixelType, Dim> InputImageType;
47
48   // Read inputs
49   InputImageType::Pointer input1;
50   InputImageType::Pointer input2;
51   InputImageType::Pointer input3;
52   input1 = clitk::readImage<InputImageType>(args_info.input1_arg, true);
53   if (args_info.input2_given) input2 = clitk::readImage<InputImageType>(args_info.input2_arg, true);
54   if (args_info.input3_given) input3 = clitk::readImage<InputImageType>(args_info.input3_arg, true);
55   
56   // Declare output
57   InputImageType::Pointer output;
58
59   //--------------------------------------------------------------------
60   // Filter test BooleanOperatorLabelImageFilter
61   if (0) {
62     typedef clitk::BooleanOperatorLabelImageFilter<InputImageType> FilterType;
63     FilterType::Pointer filter = FilterType::New();
64     filter->SetInput1(input1);
65     filter->SetInput2(input2);
66     output = clitk::NewImageLike<InputImageType>(input1);
67     filter->GraftOutput(output);  /// TO VERIFY !!!
68     filter->Update();  
69     filter->SetInput2(input3);
70     filter->Update();    
71     output = filter->GetOutput();
72     clitk::writeImage<InputImageType>(output, args_info.output_arg);
73   }
74   
75   //--------------------------------------------------------------------
76   // Filter test AutoCropLabelImageFilter
77   if (1) {
78     typedef clitk::AutoCropFilter<InputImageType> FilterType;
79     FilterType::Pointer filter = FilterType::New();
80     filter->SetInput(input1);
81     filter->Update();    
82     output = filter->GetOutput();
83     clitk::writeImage<InputImageType>(output, args_info.output_arg);
84   }
85
86   //--------------------------------------------------------------------
87   // Filter test RelativePositionPropImageFilter
88   if (0) {
89     typedef itk::Image<float, Dim> OutputImageType;
90     OutputImageType::Pointer outputf;
91     typedef itk::RelativePositionPropImageFilter<InputImageType, OutputImageType> FilterType;
92     FilterType::Pointer filter = FilterType::New();
93     filter->SetInput(input1);
94
95     filter->SetAlpha1(clitk::deg2rad(args_info.angle1_arg)); // xy plane
96     filter->SetAlpha2(clitk::deg2rad(args_info.angle2_arg));
97     filter->SetK1(M_PI/2.0); // Opening parameter, default = pi/2
98     filter->SetFast(true);
99     filter->SetRadius(2);
100     filter->SetVerboseProgress(true);
101     
102     /*         A1   A2
103                Left      0    0
104                Right   180    0
105                Ant      90    0
106                Post    -90    0
107                Inf       0   90
108                Sup       0  -90
109     */
110
111     filter->Update();    
112     clitk::writeImage<OutputImageType>(filter->GetOutput(), args_info.output_arg);
113   }
114
115   //--------------------------------------------------------------------
116   // Filter test 
117   if (0) {
118     typedef itk::Image<short, Dim> OutputImageType;
119     typedef clitk::ResampleImageWithOptionsFilter<InputImageType, OutputImageType> FilterType;
120     FilterType::Pointer filter = FilterType::New();
121     filter->SetInput(input1); 
122     filter->SetOutputIsoSpacing(1);
123     //filter->SetNumberOfThreads(4); // auto
124     filter->SetGaussianFilteringEnabled(false);
125     filter->Update();    
126     clitk::writeImage<OutputImageType>(filter->GetOutput(), args_info.output_arg);
127   }
128
129   //--------------------------------------------------------------------
130   // Filter AddRelativePositionConstraintToLabelImageFilter test 
131   if (0) {
132     /*
133     typedef clitk::AddRelativePositionConstraintToLabelImageFilter<InputImageType> FilterType;
134     FilterType::Pointer filter = FilterType::New();
135     filter->SetInput(input1); 
136     filter->SetInputObject(input2); 
137     filter->SetOrientationType(FilterType::LeftTo);
138     filter->SetIntermediateSpacing(5);
139     filter->SetFuzzyThreshold(0.5);
140     filter->VerboseStepOn();
141     filter->WriteStepOff();
142     filter->Update();
143
144     filter->SetInput(filter->GetOutput()); 
145     filter->SetInputObject(input2); 
146     filter->SetOrientationType(FilterType::RightTo);
147     filter->SetIntermediateSpacing(5);
148     filter->SetFuzzyThreshold(0.5);
149     filter->Update();   
150
151     clitk::writeImage<InputImageType>(filter->GetOutput(), args_info.output_arg);
152     */
153   }
154
155   //--------------------------------------------------------------------
156   // Filter test ExtractPatientFilter
157   if (0) {
158     typedef itk::Image<char, Dim> OutputImageType;
159     typedef clitk::ExtractPatientFilter<InputImageType, OutputImageType> FilterType;
160     FilterType::Pointer filter = FilterType::New();
161     filter->SetInput(input1);
162     filter->VerboseStepOn();
163     filter->WriteStepOn();    
164     // options (default)
165     filter->SetUpperThreshold(-300);
166     filter->FinalOpenCloseOff(); // default=on (not rezally needed ?)
167     filter->Update();    
168     OutputImageType::Pointer output = filter->GetOutput();
169     clitk::writeImage<OutputImageType>(output, args_info.output_arg);
170   }
171
172   //--------------------------------------------------------------------
173   // Filter test ExtractLungsFilter
174   if (0) {
175     typedef itk::Image<PixelType, Dim> OutputImageType; // to change into char
176     typedef clitk::ExtractLungFilter<InputImageType, OutputImageType> FilterType;
177     FilterType::Pointer filter = FilterType::New();
178     // DD(filter->GetNumberOfSteps());
179     filter->SetInput(input1); // CT
180     filter->SetInputPatientMask(input2, 0); // Patient mask and BG value
181     filter->VerboseStepOn();
182     filter->WriteStepOn();    
183     // options (default)
184     //filter->SetBackgroundValue(0);
185     filter->SetUpperThreshold(-300);
186     // filter->SetMinimumComponentSize(100);
187
188     filter->Update();    
189     OutputImageType::Pointer output = filter->GetOutput();
190     clitk::writeImage<OutputImageType>(output, args_info.output_arg);
191   }
192
193   //--------------------------------------------------------------------
194   // Filter test ExtractMediastinumFilter
195   if (0) {
196     typedef clitk::ExtractMediastinumFilter<InputImageType> FilterType;
197     FilterType::Pointer filter = FilterType::New();
198     filter->SetInputPatientLabelImage(input1);
199     filter->SetInputLungLabelImage(input2, 0, 1, 2); // BG, FG Left Lung, FG Right Lung
200     filter->SetInputBonesLabelImage(input3);
201     filter->VerboseStepOn();
202     filter->WriteStepOn();    
203     filter->Update();    
204     output = filter->GetOutput();
205     clitk::writeImage<InputImageType>(output, args_info.output_arg);
206   }
207
208   // This is the end my friend
209   return EXIT_SUCCESS;
210 }// end main
211 //--------------------------------------------------------------------