7 #ifndef TOMATO_TOMATO_EXPORTT2_HXX 8 #define TOMATO_TOMATO_EXPORTT2_HXX 10 #include "CmakeConfigForTomato.h" 13 #include "gdcmUIDGenerator.h" 14 #include "itkGDCMImageIO.h" 15 #include "itkGDCMSeriesFileNames.h" 16 #include "itkMultiplyImageFilter.h" 17 #include "itkImageFileWriter.h" 18 #include "itkFileTools.h" 19 #include "itkAdaptImageFilter.h" 20 #include "itkThresholdImageFilter.h" 24 template<
typename MeasureType >
29 if (_opts->dir_output_map.empty()){
30 printf(
"No DICOM export, dir_output_map not given.\n");
35 typedef itk::Colorbar2DImageFilter< ImageType2D > OxColorbarImageFilterType;
36 typedef itk::AdaptImageFilter < ImageType2D, OutputImageType, CastPixelAccessor< InputPixelType, OutputPixelType > > ImageAdaptorType;
37 typedef itk::ImageFileWriter<OutputImageType> WriterType;
38 typedef itk::MultiplyImageFilter< ImageType2D, ImageType2D, ImageType2D > MultiplyImageFilterType;
39 typedef itk::ThresholdImageFilter<ImageType2D> ThresholdImageFilterType;
43 typename OxColorbarImageFilterType::Pointer OxColorbarFilter = OxColorbarImageFilterType::New();
44 OxColorbarFilter->SetInput(_imageCalculatorItk->GetT2Image());
45 OxColorbarFilter->SetAddColorbar(_opts->use_colorbar);
48 itk::EncapsulateMetaData<std::string>( _dictionaryInput, std::string(
"0028|1052"),
"0");
49 itk::EncapsulateMetaData<std::string>( _dictionaryInput, std::string(
"0028|1053"),
"1");
52 DictionaryType dictionaryOutput_T2(_dictionaryInput);
55 gdcm::UIDGenerator sopuid;
56 gdcm::UIDGenerator suid;
57 std::string sopInstanceUID_T2 = sopuid.Generate();
58 std::string seriesUID_T2;
59 if (_opts->output_map_series_instance_uid.empty()){
60 seriesUID_T2 = suid.Generate();
62 seriesUID_T2 = _opts->output_map_series_instance_uid;
66 std::string seriesNumber;
67 itk::ExposeMetaData<std::string>(_dictionaryInput,
"0020|0011", seriesNumber);
68 if (_opts->output_map_series_number == 0) {
69 _opts->output_map_series_number = KWUtil::StringToNumber<int>(seriesNumber) + 10002;
71 std::string newSeriesNumber_T2 = KWUtil::NumberToString(_opts->output_map_series_number);
73 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0008|0018"), sopInstanceUID_T2);
74 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0002|0003"), sopInstanceUID_T2);
75 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0020|000e"), seriesUID_T2);
77 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0020|0011"), newSeriesNumber_T2);
81 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0020|4000"),
"T2*10 map");
82 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2, std::string(
"0020|0013"), std::string(
"1"));
85 DictionaryType dictionaryOutput_R2(_dictionaryInput);
87 std::string sopInstanceUID_R2 = sopuid.Generate();
88 std::string seriesUID_R2;
89 if (_opts->output_fitparams_series_instance_uid.empty()){
90 seriesUID_R2 = suid.Generate();
92 seriesUID_R2 = _opts->output_map_series_instance_uid;
95 itk::ExposeMetaData<std::string>(_dictionaryInput,
"0020|0011", seriesNumber);
96 if (_opts->output_fitparams_series_number == 0) {
97 _opts->output_fitparams_series_number = KWUtil::StringToNumber<int>(seriesNumber) + 10003;
99 std::string newSeriesNumber_R2 = KWUtil::NumberToString(_opts->output_fitparams_series_number);
102 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0008|0018"), sopInstanceUID_R2);
103 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0002|0003"), sopInstanceUID_R2);
104 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0020|000e"), seriesUID_R2);
106 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0020|0011"), newSeriesNumber_R2);
108 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0020|4000"), std::string(
"Rsquare*4000 Map"));
109 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0020|0013"), std::string(
"3"));
110 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0028|0106"), std::string(
"0"));
111 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0028|0107"), std::string(
"4096"));
112 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0028|1050"), std::string(
"3900"));
113 itk::EncapsulateMetaData<std::string>( dictionaryOutput_R2, std::string(
"0028|1051"), std::string(
"200"));
116 DictionaryType dictionaryOutput_A(_dictionaryInput);
118 std::string sopInstanceUID_A = sopuid.Generate();
120 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0008|0018"), sopInstanceUID_A);
121 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0002|0003"), sopInstanceUID_A);
122 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0020|000e"), seriesUID_R2);
124 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0020|0011"), newSeriesNumber_R2);
127 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0020|4000"), std::string(
"A"));
128 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0020|0013"), std::string(
"4"));
129 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0028|0106"), std::string(
"0"));
130 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0028|0107"), std::string(
"4096"));
131 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0028|1050"), std::string(
"2000"));
132 itk::EncapsulateMetaData<std::string>( dictionaryOutput_A, std::string(
"0028|1051"), std::string(
"4000"));
135 DictionaryType dictionaryOutput_B(_dictionaryInput);
137 std::string sopInstanceUID_B = sopuid.Generate();
139 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0008|0018"), sopInstanceUID_B);
140 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0002|0003"), sopInstanceUID_B);
141 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0020|000e"), seriesUID_R2);
143 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0020|0011"), newSeriesNumber_R2);
146 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0020|4000"), std::string(
"B"));
147 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0020|0013"), std::string(
"5"));
148 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0028|0106"), std::string(
"0"));
149 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0028|0107"), std::string(
"4096"));
150 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0028|1050"), std::string(
"2000"));
151 itk::EncapsulateMetaData<std::string>( dictionaryOutput_B, std::string(
"0028|1051"), std::string(
"4000"));
154 DictionaryType dictionaryOutput_T2star(_dictionaryInput);
156 std::string sopInstanceUID_T2star = sopuid.Generate();
158 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0008|0018"), sopInstanceUID_T2star);
159 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0002|0003"), sopInstanceUID_T2star);
160 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0020|000e"), seriesUID_R2);
162 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0020|0011"), newSeriesNumber_R2);
165 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0020|0013"), std::string(
"6"));
166 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0028|0106"), std::string(
"0"));
167 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0028|0107"), std::string(
"4096"));
168 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0028|1050"), std::string(
"2000"));
169 itk::EncapsulateMetaData<std::string>( dictionaryOutput_T2star, std::string(
"0028|1051"), std::string(
"4000"));
172 DictionaryType dictionaryOutput_RelSNRFinal(_dictionaryInput);
174 std::string sopInstanceUID_RelSNRFinal = sopuid.Generate();
176 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0008|0018"), sopInstanceUID_RelSNRFinal);
177 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0002|0003"), sopInstanceUID_RelSNRFinal);
178 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0020|000e"), seriesUID_R2);
180 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0020|0011"), newSeriesNumber_R2);
182 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0020|4000"), std::string(
"_RelSNRFinal"));
183 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0020|0013"), std::string(
"9"));
184 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0028|0106"), std::string(
"0"));
185 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0028|0107"), std::string(
"4096"));
186 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0028|1050"), std::string(
"2000"));
187 itk::EncapsulateMetaData<std::string>( dictionaryOutput_RelSNRFinal, std::string(
"0028|1051"), std::string(
"4000"));
190 typedef itk::GDCMImageIO ImageIOType;
191 ImageIOType::Pointer gdcmImageIO = ImageIOType::New();
192 gdcmImageIO->KeepOriginalUIDOn();
195 typename ImageAdaptorType::Pointer adaptor = ImageAdaptorType::New();
198 typename WriterType::Pointer writer = WriterType::New();
199 writer->SetUseInputMetaDataDictionary(
false);
202 if (!_opts->dir_output_map.empty()) {
204 printf(
"Saving to: %s ", _opts->dir_output_map.c_str());
207 itk::FileTools::CreateDirectory(_opts->dir_output_map);
210 typename MultiplyImageFilterType::Pointer multiplyT2Filter = MultiplyImageFilterType::New();
211 multiplyT2Filter->SetInput(OxColorbarFilter->GetOutput() );
212 multiplyT2Filter->SetConstant( 10. );
214 typename ThresholdImageFilterType::Pointer thresholdFilter = ThresholdImageFilterType::New();
215 thresholdFilter->SetInput(multiplyT2Filter->GetOutput());
217 thresholdFilter->SetUpper(powl(2, 12) - 1);
218 thresholdFilter->SetOutsideValue(thresholdFilter->GetUpper());
221 gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_T2);
224 adaptor->SetInput(thresholdFilter->GetOutput());
225 writer->SetFileName(_opts->dir_output_map + KWUtil::PathSeparator() + newSeriesNumber_T2 +
"_T2.dcm");
226 writer->SetInput(adaptor->GetOutput());
227 writer->SetImageIO(gdcmImageIO);
230 }
catch (itk::ExceptionObject &e) {
231 std::cerr <<
"Exception in file writer " << std::endl;
232 std::cerr << e << std::endl;
235 std::cout <<
" Saved!" << std::endl;
238 if (!_opts->dir_output_fitparams.empty()) {
240 printf(
"Saving to: %s ", _opts->dir_output_fitparams.c_str());
244 typename MultiplyImageFilterType::Pointer multiplyR2Filter = MultiplyImageFilterType::New();
245 multiplyR2Filter->SetInput(_imageCalculatorItk->GetR2Image() );
246 multiplyR2Filter->SetConstant(4000 );
248 OxColorbarFilter->SetInput(multiplyR2Filter->GetOutput());
249 OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
252 itk::FileTools::CreateDirectory(_opts->dir_output_fitparams);
255 gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_R2);
258 adaptor->SetInput(OxColorbarFilter->GetOutput());
259 writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 +
"_R2.dcm");
260 writer->SetInput(adaptor->GetOutput());
261 writer->SetImageIO(gdcmImageIO);
264 }
catch (itk::ExceptionObject &e) {
265 std::cerr <<
"Exception in file writer " << std::endl;
266 std::cerr << e << std::endl;
270 gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_A);
272 OxColorbarFilter->SetInput(_imageCalculatorItk->GetAImage());
273 OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
276 adaptor->SetInput(OxColorbarFilter->GetOutput());
277 writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 +
"_A.dcm");
278 writer->SetInput(adaptor->GetOutput());
279 writer->SetImageIO(gdcmImageIO);
282 }
catch (itk::ExceptionObject &e) {
283 std::cerr <<
"Exception in file writer " << std::endl;
284 std::cerr << e << std::endl;
288 gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_B);
290 OxColorbarFilter->SetInput(_imageCalculatorItk->GetBImage());
291 OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
294 adaptor->SetInput(OxColorbarFilter->GetOutput());
295 writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 +
"_B.dcm");
296 writer->SetInput(adaptor->GetOutput());
297 writer->SetImageIO(gdcmImageIO);
300 }
catch (itk::ExceptionObject &e) {
301 std::cerr <<
"Exception in file writer " << std::endl;
302 std::cerr << e << std::endl;
306 gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_T2star);
308 OxColorbarFilter->SetInput(_imageCalculatorItk->GetT1starImage());
309 OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
312 adaptor->SetInput(OxColorbarFilter->GetOutput());
313 writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 +
"_T2star.dcm");
314 writer->SetInput(adaptor->GetOutput());
315 writer->SetImageIO(gdcmImageIO);
318 }
catch (itk::ExceptionObject &e) {
319 std::cerr <<
"Exception in file writer " << std::endl;
320 std::cerr << e << std::endl;
325 gdcmImageIO->SetMetaDataDictionary(dictionaryOutput_RelSNRFinal);
327 OxColorbarFilter->SetInput(_imageCalculatorItk->GetSNRImage());
328 OxColorbarFilter->SetZerosInsteadOfColorbar(
true);
331 adaptor->SetInput(OxColorbarFilter->GetOutput());
332 writer->SetFileName(_opts->dir_output_fitparams + KWUtil::PathSeparator() + newSeriesNumber_R2 +
"_RelSNRFinal.dcm");
333 writer->SetInput(adaptor->GetOutput());
334 writer->SetImageIO(gdcmImageIO);
337 }
catch (itk::ExceptionObject &e) {
338 std::cerr <<
"Exception in file writer " << std::endl;
339 std::cerr << e << std::endl;
341 std::cout <<
" Saved!" << std::endl;
351 #endif //TOMATO_TOMATO_EXPORTT2_HXX Definition: OxCalculator.h:19