]> Creatis software - clitk.git/blob - segmentation/clitkTestFilter.cxx
Change preset 3 to 400/20 (like in [Chapet et al])
[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 #include "clitkTestStation7.h"
34
35 // ITK ENST
36 #include "RelativePositionPropImageFilter.h"
37
38 //--------------------------------------------------------------------
39 int main(int argc, char * argv[]) {
40
41   // Init command line
42   GGO(clitkTestFilter, args_info);
43
44   // Image types
45   //typedef unsigned char PixelType;
46   typedef short PixelType;
47   static const int Dim=3;
48   typedef itk::Image<PixelType, Dim> InputImageType;
49
50   // Read inputs
51   InputImageType::Pointer input1;
52   InputImageType::Pointer input2;
53   InputImageType::Pointer input3;
54   if (args_info.input1_given) input1 = clitk::readImage<InputImageType>(args_info.input1_arg, true);
55   if (args_info.input2_given) input2 = clitk::readImage<InputImageType>(args_info.input2_arg, true);
56   if (args_info.input3_given) input3 = clitk::readImage<InputImageType>(args_info.input3_arg, true);
57   
58   // Declare output
59   InputImageType::Pointer output;
60
61   //--------------------------------------------------------------------
62   // Filter test BooleanOperatorLabelImageFilter
63   if (0) {
64     typedef clitk::BooleanOperatorLabelImageFilter<InputImageType> FilterType;
65     FilterType::Pointer filter = FilterType::New();
66     filter->SetInput1(input1);
67     filter->SetInput2(input2);
68     output = clitk::NewImageLike<InputImageType>(input1);
69     filter->GraftOutput(output);  /// TO VERIFY !!!
70     filter->Update();  
71     filter->SetInput2(input3);
72     filter->Update();    
73     output = filter->GetOutput();
74     clitk::writeImage<InputImageType>(output, args_info.output_arg);
75   }
76   
77   //--------------------------------------------------------------------
78   // Filter test AutoCropLabelImageFilter
79   if (0) {
80     typedef clitk::AutoCropFilter<InputImageType> FilterType;
81     FilterType::Pointer filter = FilterType::New();
82     filter->SetInput(input1);
83     filter->Update();    
84     output = filter->GetOutput();
85     clitk::writeImage<InputImageType>(output, args_info.output_arg);
86   }
87
88   //--------------------------------------------------------------------
89   // Filter test RelativePositionPropImageFilter
90   if (0) {
91     typedef itk::Image<float, Dim> OutputImageType;
92     OutputImageType::Pointer outputf;
93     typedef itk::RelativePositionPropImageFilter<InputImageType, OutputImageType> FilterType;
94     FilterType::Pointer filter = FilterType::New();
95     filter->SetInput(input1);
96
97     filter->SetAlpha1(clitk::deg2rad(args_info.angle1_arg)); // xy plane
98     filter->SetAlpha2(clitk::deg2rad(args_info.angle2_arg));
99     filter->SetK1(M_PI/2.0); // Opening parameter, default = pi/2
100     filter->SetFast(true);
101     filter->SetRadius(2);
102     filter->SetVerboseProgress(true);
103     
104     /*         A1   A2
105                Left      0    0
106                Right   180    0
107                Ant      90    0
108                Post    -90    0
109                Inf       0   90
110                Sup       0  -90
111     */
112
113     filter->Update();    
114     clitk::writeImage<OutputImageType>(filter->GetOutput(), args_info.output_arg);
115   }
116
117   //--------------------------------------------------------------------
118   // Filter test 
119   if (0) {
120     typedef itk::Image<short, Dim> OutputImageType;
121     typedef clitk::ResampleImageWithOptionsFilter<InputImageType, OutputImageType> FilterType;
122     FilterType::Pointer filter = FilterType::New();
123     filter->SetInput(input1); 
124     filter->SetOutputIsoSpacing(1);
125     //filter->SetNumberOfThreads(4); // auto
126     filter->SetGaussianFilteringEnabled(false);
127     filter->Update();    
128     clitk::writeImage<OutputImageType>(filter->GetOutput(), args_info.output_arg);
129   }
130
131   //--------------------------------------------------------------------
132   // Filter AddRelativePositionConstraintToLabelImageFilter test 
133   if (0) {
134     /*
135     typedef clitk::AddRelativePositionConstraintToLabelImageFilter<InputImageType> FilterType;
136     FilterType::Pointer filter = FilterType::New();
137     filter->SetInput(input1); 
138     filter->SetInputObject(input2); 
139     filter->SetOrientationType(FilterType::LeftTo);
140     filter->SetIntermediateSpacing(5);
141     filter->SetFuzzyThreshold(0.5);
142     filter->VerboseStepOn();
143     filter->WriteStepOff();
144     filter->Update();
145
146     filter->SetInput(filter->GetOutput()); 
147     filter->SetInputObject(input2); 
148     filter->SetOrientationType(FilterType::RightTo);
149     filter->SetIntermediateSpacing(5);
150     filter->SetFuzzyThreshold(0.5);
151     filter->Update();   
152
153     clitk::writeImage<InputImageType>(filter->GetOutput(), args_info.output_arg);
154     */
155   }
156
157   //--------------------------------------------------------------------
158   // Filter test ExtractPatientFilter
159   if (0) {
160     /*
161     typedef itk::Image<char, Dim> OutputImageType;
162     typedef clitk::ExtractPatientFilter<InputImageType, OutputImageType> FilterType;
163     FilterType::Pointer filter = FilterType::New();
164     filter->SetInput(input1);
165     filter->VerboseStepOn();
166     filter->WriteStepOn();    
167     // options (default)
168     filter->SetUpperThreshold(-300);
169     filter->FinalOpenCloseOff(); // default=on (not rezally needed ?)
170     filter->Update();    
171     OutputImageType::Pointer output = filter->GetOutput();
172     clitk::writeImage<OutputImageType>(output, args_info.output_arg);
173     */
174   }
175
176   //--------------------------------------------------------------------
177   // Filter test ExtractLungsFilter
178   if (0) {
179     /*
180     typedef itk::Image<PixelType, Dim> OutputImageType; // to change into char
181     typedef clitk::ExtractLungFilter<InputImageType, OutputImageType> FilterType;
182     FilterType::Pointer filter = FilterType::New();
183     // DD(filter->GetNumberOfSteps());
184     filter->SetInput(input1); // CT
185     filter->SetInputPatientMask(input2, 0); // Patient mask and BG value
186     filter->VerboseStepOn();
187     filter->WriteStepOn();    
188     // options (default)
189     //filter->SetBackgroundValue(0);
190     filter->SetUpperThreshold(-300);
191     // filter->SetMinimumComponentSize(100);
192
193     filter->Update();    
194     OutputImageType::Pointer output = filter->GetOutput();
195     clitk::writeImage<OutputImageType>(output, args_info.output_arg);
196     */
197   }
198
199   //--------------------------------------------------------------------
200   // Filter test ExtractMediastinumFilter
201   if (0) {
202     /*
203     typedef clitk::ExtractMediastinumFilter<InputImageType> FilterType;
204     FilterType::Pointer filter = FilterType::New();
205     filter->SetInputPatientLabelImage(input1);
206     filter->SetInputLungLabelImage(input2, 0, 1, 2); // BG, FG Left Lung, FG Right Lung
207     filter->SetInputBonesLabelImage(input3);
208     filter->VerboseStepOn();
209     filter->WriteStepOn();    
210     filter->Update();    
211     output = filter->GetOutput();
212     clitk::writeImage<InputImageType>(output, args_info.output_arg);
213     */
214   }
215
216   //--------------------------------------------------------------------
217   // Test for auto register sub-task in a segmentation process
218   if (1) {
219     ExtractLymphStation_7 * s7 = new ExtractLymphStation_7;
220     //    s7->SetArgsInfo<args_info_clitkTestFilter>(args_info);
221     // GetParent->SetArgsInfo<>
222     s7->StartSegmentation();
223   }
224
225   // This is the end my friend
226   return EXIT_SUCCESS;
227 }// end main
228 //--------------------------------------------------------------------