4 #include "itkSTMS_ArgumentsAnalysis_Spine.h"
5 #include "itkSTMS_ImageSequenceToTemporalSet_Spine.h"
6 #include "itkSTMS_TemporalSetToImageSequence_Spine.h"
7 #include "itkSTMS_BlurringSTMS_Spine.h"
10 typedef float PixelType;
14 struct timespec timestamp;
16 clock_gettime(CLOCK_REALTIME, ×tamp);
17 return timestamp.tv_sec * 1000.0 + timestamp.tv_nsec * 1.0e-6;
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
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
31 int main(int argc, char **argv){
34 itkSTMS_Spine::itkSTMS_ArgumentsAnalysis* argsAnalysis
35 = new itkSTMS_Spine::itkSTMS_ArgumentsAnalysis(argc, argv);
36 argsAnalysis->Update();
38 itkSTMS_Spine::ParamsAnalysisOutputType* params
39 = argsAnalysis->GetSTMSParams();
45 typedef itk::Image< PixelType, 2 > ImageType2D;
46 typedef itk::Image< unsigned int, 2 > MaskImageType2D;
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;
55 typedef itk::Image< IndexType, 2 > ClassImageType2D;
60 itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType2D, MaskImageType2D >* preProcess
61 = new itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType2D, MaskImageType2D > ( params );
62 preProcess->GenerateDataSets();
64 dtime = gettime_hp()-dtime;
65 std::cout<<std::endl<< std::setw(30) << std::left << "Characteristics extraction: " << dtime/1000 << " s" <<std::endl;
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();
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 );
80 stmsFilter->GenerateData();
82 dtime = gettime_hp()-dtime;
83 std::cout<<std::endl<< std::setw(30) << std::left << "STMS filtering: " << dtime/1000 << " s" <<std::endl;
89 itkSTMS_Spine::itkSTMS_TemporalSetToImageSequence< ImageType2D, ClassImageType2D >* postProcess
90 = new itkSTMS_Spine::itkSTMS_TemporalSetToImageSequence< ImageType2D, ClassImageType2D >(stmsFilter->GetClassMemory(),
91 stmsFilter->GetSpatialMemory(),
92 stmsFilter->GetRangeSet(),
95 postProcess->GenerateImageSequence();
97 dtime = gettime_hp()-dtime;
98 std::cout<<std::endl<< std::setw(30) << std::left << "Image sequence saving: " << dtime/1000 << " s" <<std::endl;
109 typedef itk::Image< PixelType, 3 > ImageType3D;
110 typedef itk::Image< unsigned int, 3 > MaskImageType3D;
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;
121 itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType3D, MaskImageType3D >* preProcess
122 = new itkSTMS_Spine::itkSTMS_ImageSequenceToTemporalSet< ImageType3D, MaskImageType3D > ( params );
123 preProcess->GenerateDataSets();
125 dtime = gettime_hp()-dtime;
126 std::cout<<std::endl<< std::setw(30) << std::left << "Characteristics extraction: " << dtime/1000 << " s" <<std::endl;
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();
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 );
143 stmsFilter->GenerateData();
145 dtime = gettime_hp()-dtime;
146 std::cout<<std::endl<< std::setw(30) << std::left << "STMS filtering: " << dtime/1000 << " s" <<std::endl;
151 itkSTMS_Spine::itkSTMS_TemporalSetToImageSequence< ImageType3D, MaskImageType3D >* postProcess
152 = new itkSTMS_Spine::itkSTMS_TemporalSetToImageSequence< ImageType3D, MaskImageType3D >(stmsFilter->GetClassMemory(),
153 stmsFilter->GetSpatialMemory(),
154 stmsFilter->GetRangeSet(),
157 postProcess->GenerateImageSequence();
159 dtime = gettime_hp()-dtime;
160 std::cout<<std::endl<< std::setw(30) << std::left << "Image sequence saving: " << dtime/1000 << " s" <<std::endl;
174 std::cout << std::endl << "Image dimensionality should be equal to 2 or 3.";
175 std::exit( EXIT_FAILURE );