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"
34 #include "RelativePositionPropImageFilter.h"
36 //--------------------------------------------------------------------
37 int main(int argc, char * argv[]) {
40 GGO(clitkTestFilter, args_info);
43 //typedef unsigned char PixelType;
44 typedef short PixelType;
45 static const int Dim=3;
46 typedef itk::Image<PixelType, Dim> InputImageType;
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);
57 InputImageType::Pointer output;
59 //--------------------------------------------------------------------
60 // Filter test BooleanOperatorLabelImageFilter
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 !!!
69 filter->SetInput2(input3);
71 output = filter->GetOutput();
72 clitk::writeImage<InputImageType>(output, args_info.output_arg);
75 //--------------------------------------------------------------------
76 // Filter test AutoCropLabelImageFilter
78 typedef clitk::AutoCropFilter<InputImageType> FilterType;
79 FilterType::Pointer filter = FilterType::New();
80 filter->SetInput(input1);
82 output = filter->GetOutput();
83 clitk::writeImage<InputImageType>(output, args_info.output_arg);
86 //--------------------------------------------------------------------
87 // Filter test RelativePositionPropImageFilter
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);
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);
100 filter->SetVerboseProgress(true);
112 clitk::writeImage<OutputImageType>(filter->GetOutput(), args_info.output_arg);
115 //--------------------------------------------------------------------
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);
126 clitk::writeImage<OutputImageType>(filter->GetOutput(), args_info.output_arg);
129 //--------------------------------------------------------------------
130 // Filter AddRelativePositionConstraintToLabelImageFilter test
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();
144 filter->SetInput(filter->GetOutput());
145 filter->SetInputObject(input2);
146 filter->SetOrientationType(FilterType::RightTo);
147 filter->SetIntermediateSpacing(5);
148 filter->SetFuzzyThreshold(0.5);
151 clitk::writeImage<InputImageType>(filter->GetOutput(), args_info.output_arg);
155 //--------------------------------------------------------------------
156 // Filter test ExtractPatientFilter
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();
165 filter->SetUpperThreshold(-300);
166 filter->FinalOpenCloseOff(); // default=on (not rezally needed ?)
168 OutputImageType::Pointer output = filter->GetOutput();
169 clitk::writeImage<OutputImageType>(output, args_info.output_arg);
172 //--------------------------------------------------------------------
173 // Filter test ExtractLungsFilter
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();
184 //filter->SetBackgroundValue(0);
185 filter->SetUpperThreshold(-300);
186 // filter->SetMinimumComponentSize(100);
189 OutputImageType::Pointer output = filter->GetOutput();
190 clitk::writeImage<OutputImageType>(output, args_info.output_arg);
193 //--------------------------------------------------------------------
194 // Filter test ExtractMediastinumFilter
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();
204 output = filter->GetOutput();
205 clitk::writeImage<InputImageType>(output, args_info.output_arg);
208 // This is the end my friend
211 //--------------------------------------------------------------------