]> Creatis software - STMS.git/blob - Src/STMS_GrayLevelFiltering_Spine.cxx
V 1.5
[STMS.git] / Src / STMS_GrayLevelFiltering_Spine.cxx
1 #include <iomanip>
2 #include <ctime>
3 #include "itkImage.h"
4 #include "itkSTMS_ArgumentsAnalysis_Spine.h"
5 #include "itkSTMS_ImageSequenceToTemporalSet_Spine.h"
6 #include "itkSTMS_TemporalSetToImageSequence_Spine.h"
7 #include "itkSTMS_BlurringSTMS_Spine.h"
8
9
10 typedef float PixelType;
11
12 double gettime_hp()
13 {
14     struct timespec timestamp;
15
16     clock_gettime(CLOCK_REALTIME, &timestamp);
17     return timestamp.tv_sec * 1000.0 + timestamp.tv_nsec * 1.0e-6;
18 }
19
20 // Only --expDescription and --outFolder parameters are compulsory.
21 /* --image ../../itkSTMS/Data/Images/Simu/Simu1.nii --image ../../itkSTMS/Data/Images/Simu/Simu2.nii --image ../../itkSTMS/Data/Images/Simu/Simu3.nii
22 --image ../../itkSTMS/Data/Images/Simu/Simu4.nii --image ../../itkSTMS/Data/Images/Simu/Simu5.nii --image ../../itkSTMS/Data/Images/Simu/Simu6.nii
23 --image ../../itkSTMS/Data/Images/Simu/Simu7.nii --image ../../itkSTMS/Data/Images/Simu/Simu8.nii --outFolder ../../itkSTMS/Data/Images/Simu_Outputs-Spine/
24 --imageDimension 2 --xScale 1000 --yScale 1000 --rScale 0.5 --mask ../../itkSTMS/Data/Images/Simu/Mask.nii --imageExtension .nii
25
26 --image ../../itkSTMS/Data/Images/Simu/Simu1.nii --image ../../itkSTMS/Data/Images/Simu/Simu2.nii --image ../../itkSTMS/Data/Images/Simu/Simu3.nii
27 --image ../../itkSTMS/Data/Images/Simu/Simu4.nii --image ../../itkSTMS/Data/Images/Simu/Simu5.nii --image ../../itkSTMS/Data/Images/Simu/Simu6.nii
28 --image ../../itkSTMS/Data/Images/Simu/Simu7.nii --image ../../itkSTMS/Data/Images/Simu/Simu8.nii --outFolder ../../itkSTMS/Data/Images/Simu_Outputs-Spine/
29 --imageDimension 2 --xScale 1000 --yScale 1000 --rScale 0.5 --imageExtension .nii
30 */
31 int main(int argc, char **argv){
32     double dtime;
33
34     itkSTMS_Spine::itkSTMS_ArgumentsAnalysis* argsAnalysis
35             = new itkSTMS_Spine::itkSTMS_ArgumentsAnalysis(argc, argv);
36     argsAnalysis->Update();
37
38     itkSTMS_Spine::ParamsAnalysisOutputType* params
39             = argsAnalysis->GetSTMSParams();
40
41
42     switch(params->dim){
43         case 2:
44         {
45             typedef itk::Image< PixelType, 2 >     ImageType2D;
46             typedef itk::Image< unsigned int, 2 > MaskImageType2D;
47
48
49             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType2D, MaskImageType2D >::IndexType            IndexType;
50             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType2D, MaskImageType2D >::SpatialType          SpatialType;
51             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType2D, MaskImageType2D >::IndexSampleSetType   IndexSampleSetType;
52             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType2D, MaskImageType2D >::SpatialSampleSetType SpatialSampleSetType;
53             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType2D, MaskImageType2D >::RangeSampleSetType   RangeSampleSetType;
54
55             typedef itk::Image< IndexType, 2 >  ClassImageType2D;
56
57
58             dtime=gettime_hp();
59
60             itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType2D, MaskImageType2D >* preProcess
61                     = new itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType2D, MaskImageType2D > ( params );
62             preProcess->GenerateDataSets();
63
64             dtime = gettime_hp()-dtime;
65             std::cout<<std::endl<< std::setw(30) << std::left << "Characteristics extraction: " << dtime/1000 << " s" <<std::endl;
66
67             IndexSampleSetType*   indexSet   = preProcess->GetIndexSet();
68             IndexSampleSetType*   classSet   = preProcess->GetClassSet();
69             IndexSampleSetType*   weightsSet = preProcess->GetWeightsSet();
70             SpatialSampleSetType* spatialSet = preProcess->GetSpatialSet();
71             RangeSampleSetType*   rangeSet   = preProcess->GetRangeSet();
72
73
74             dtime=gettime_hp();
75
76             itkSTMS_Spine::itkSTMS_BlurringSTMS< IndexType, SpatialType, PixelType, ImageType2D >* stmsFilter
77                     = new itkSTMS_Spine::itkSTMS_BlurringSTMS< IndexType, SpatialType, PixelType, ImageType2D >
78                     (indexSet, classSet, weightsSet, spatialSet, rangeSet,  params );
79
80             stmsFilter->GenerateData();
81
82             dtime = gettime_hp()-dtime;
83             std::cout<<std::endl<< std::setw(30) << std::left << "STMS filtering: " << dtime/1000 << " s" <<std::endl;
84
85
86
87             dtime=gettime_hp();
88
89             itkSTMS_Spine::itkSTMS_TemporalSetToImageSequence< ImageType2D, ClassImageType2D >* postProcess
90                     = new itkSTMS_Spine::itkSTMS_TemporalSetToImageSequence< ImageType2D, ClassImageType2D >(stmsFilter->GetClassMemory(),
91                                                                                                        stmsFilter->GetSpatialMemory(),
92                                                                                                        stmsFilter->GetRangeSet(),
93                                                                                                        params );
94
95             postProcess->GenerateImageSequence();
96
97             dtime = gettime_hp()-dtime;
98             std::cout<<std::endl<< std::setw(30) << std::left << "Image sequence saving: " << dtime/1000 << " s" <<std::endl;
99
100             delete argsAnalysis;
101             delete preProcess;
102             delete stmsFilter;
103             delete postProcess;
104             break;
105         }
106
107         case 3:
108         {
109             typedef itk::Image< PixelType, 3 >     ImageType3D;
110             typedef itk::Image< unsigned int, 3 > MaskImageType3D;
111
112             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType3D, MaskImageType3D >::IndexType            IndexType;
113             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType3D, MaskImageType3D >::SpatialType          SpatialType;
114             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType3D, MaskImageType3D >::IndexSampleSetType   IndexSampleSetType;
115             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType3D, MaskImageType3D >::SpatialSampleSetType SpatialSampleSetType;
116             typedef itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType3D, MaskImageType3D >::RangeSampleSetType   RangeSampleSetType;
117
118
119             dtime=gettime_hp();
120
121             itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType3D, MaskImageType3D >* preProcess
122                     = new itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType3D, MaskImageType3D > ( params );
123             preProcess->GenerateDataSets();
124
125             dtime = gettime_hp()-dtime;
126             std::cout<<std::endl<< std::setw(30) << std::left << "Characteristics extraction: " << dtime/1000 << " s" <<std::endl;
127
128             IndexSampleSetType*   indexSet   = preProcess->GetIndexSet();
129             IndexSampleSetType*   classSet   = preProcess->GetClassSet();
130             IndexSampleSetType*   weightsSet = preProcess->GetWeightsSet();
131             SpatialSampleSetType* spatialSet = preProcess->GetSpatialSet();
132             RangeSampleSetType*   rangeSet   = preProcess->GetRangeSet();
133
134
135
136
137             dtime=gettime_hp();
138
139             itkSTMS_Spine::itkSTMS_BlurringSTMS< IndexType, SpatialType, PixelType, ImageType3D >* stmsFilter
140                     = new itkSTMS_Spine::itkSTMS_BlurringSTMS< IndexType, SpatialType, PixelType, ImageType3D >
141                     (indexSet, classSet, weightsSet, spatialSet, rangeSet,  params );
142
143             stmsFilter->GenerateData();
144
145             dtime = gettime_hp()-dtime;
146             std::cout<<std::endl<< std::setw(30) << std::left << "STMS filtering: " << dtime/1000 << " s" <<std::endl;
147
148
149             dtime=gettime_hp();
150
151             itkSTMS_Spine::itkSTMS_TemporalSetToImageSequence< ImageType3D, MaskImageType3D >* postProcess
152                     = new itkSTMS_Spine::itkSTMS_TemporalSetToImageSequence< ImageType3D, MaskImageType3D >(stmsFilter->GetClassMemory(),
153                                                                                                       stmsFilter->GetSpatialMemory(),
154                                                                                                       stmsFilter->GetRangeSet(),
155                                                                                                       params );
156
157             postProcess->GenerateImageSequence();
158
159             dtime = gettime_hp()-dtime;
160             std::cout<<std::endl<< std::setw(30) << std::left << "Image sequence saving: " << dtime/1000 << " s" <<std::endl;
161
162
163             delete argsAnalysis;
164             delete preProcess;
165             delete stmsFilter;
166             delete postProcess;
167             break;
168         }
169
170         default:
171         {
172             delete argsAnalysis;
173
174             std::cout << std::endl << "Image dimensionality should be equal to 2 or 3.";
175             std::exit( EXIT_FAILURE );
176             break;
177         }
178     }
179
180     return EXIT_SUCCESS;
181 }