2 /*=========================================================================
3 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
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
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.
14 It is distributed under dual licence
16 - BSD See included LICENSE.txt file
17 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
18 ======================================================================-====*/
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"
29 #include "clitkExtractLungFilter.h"
30 #include "clitkExtractPatientFilter.h"
31 #include "clitkExtractMediastinumFilter.h"
33 #include "clitkTestStation7.h"
36 #include "RelativePositionPropImageFilter.h"
38 //--------------------------------------------------------------------
39 int main(int argc, char * argv[]) {
42 GGO(clitkTestFilter, args_info);
45 //typedef unsigned char PixelType;
46 typedef short PixelType;
47 static const int Dim=3;
48 typedef itk::Image<PixelType, Dim> InputImageType;
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);
59 InputImageType::Pointer output;
61 //--------------------------------------------------------------------
62 // Filter test BooleanOperatorLabelImageFilter
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 !!!
71 filter->SetInput2(input3);
73 output = filter->GetOutput();
74 clitk::writeImage<InputImageType>(output, args_info.output_arg);
77 //--------------------------------------------------------------------
78 // Filter test AutoCropLabelImageFilter
80 typedef clitk::AutoCropFilter<InputImageType> FilterType;
81 FilterType::Pointer filter = FilterType::New();
82 filter->SetInput(input1);
84 output = filter->GetOutput();
85 clitk::writeImage<InputImageType>(output, args_info.output_arg);
88 //--------------------------------------------------------------------
89 // Filter test RelativePositionPropImageFilter
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);
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);
114 clitk::writeImage<OutputImageType>(filter->GetOutput(), args_info.output_arg);
117 //--------------------------------------------------------------------
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);
128 clitk::writeImage<OutputImageType>(filter->GetOutput(), args_info.output_arg);
131 //--------------------------------------------------------------------
132 // Filter AddRelativePositionConstraintToLabelImageFilter test
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();
146 filter->SetInput(filter->GetOutput());
147 filter->SetInputObject(input2);
148 filter->SetOrientationType(FilterType::RightTo);
149 filter->SetIntermediateSpacing(5);
150 filter->SetFuzzyThreshold(0.5);
153 clitk::writeImage<InputImageType>(filter->GetOutput(), args_info.output_arg);
157 //--------------------------------------------------------------------
158 // Filter test ExtractPatientFilter
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();
168 filter->SetUpperThreshold(-300);
169 filter->FinalOpenCloseOff(); // default=on (not rezally needed ?)
171 OutputImageType::Pointer output = filter->GetOutput();
172 clitk::writeImage<OutputImageType>(output, args_info.output_arg);
176 //--------------------------------------------------------------------
177 // Filter test ExtractLungsFilter
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();
189 //filter->SetBackgroundValue(0);
190 filter->SetUpperThreshold(-300);
191 // filter->SetMinimumComponentSize(100);
194 OutputImageType::Pointer output = filter->GetOutput();
195 clitk::writeImage<OutputImageType>(output, args_info.output_arg);
199 //--------------------------------------------------------------------
200 // Filter test ExtractMediastinumFilter
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();
211 output = filter->GetOutput();
212 clitk::writeImage<InputImageType>(output, args_info.output_arg);
216 //--------------------------------------------------------------------
217 // Test for auto register sub-task in a segmentation process
219 ExtractLymphStation_7 * s7 = new ExtractLymphStation_7;
220 // s7->SetArgsInfo<args_info_clitkTestFilter>(args_info);
221 // GetParent->SetArgsInfo<>
222 s7->StartSegmentation();
225 // This is the end my friend
228 //--------------------------------------------------------------------