Medical Imaging Interaction Toolkit  2016.11.0
Medical Imaging Interaction Toolkit
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
mitkRigidRegistrationPreset.cpp
Go to the documentation of this file.
1 /*===================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center,
6 Division of Medical and Biological Informatics.
7 All rights reserved.
8 
9 This software is distributed WITHOUT ANY WARRANTY; without
10 even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 A PARTICULAR PURPOSE.
12 
13 See LICENSE.txt or http://www.mitk.org for details.
14 
15 ===================================================================*/
16 
18 #include "mitkMetricParameters.h"
21 
22 #include "usGetModuleContext.h"
23 #include "usModule.h"
24 #include "usModuleContext.h"
25 #include "usModuleResource.h"
26 #include "usModuleResourceStream.h"
27 
28 namespace mitk
29 {
31  {
32  m_Name = "";
33  m_XmlFileName = "mitkRigidRegistrationPresets.xml";
34  }
35 
37  bool RigidRegistrationPreset::LoadPreset() { return LoadPreset("mitkRigidRegistrationPresets.xml"); }
38  bool RigidRegistrationPreset::LoadPreset(std::string fileName)
39  {
40  if (fileName.empty())
41  return false;
42 
43  us::ModuleResource presetResource = us::GetModuleContext()->GetModule()->GetResource(fileName);
44  if (!presetResource)
45  return false;
46 
47  us::ModuleResourceStream presetStream(presetResource);
48 
49  vtkXMLParser::SetStream(&presetStream);
50 
51  if (!vtkXMLParser::Parse())
52  {
53 #ifdef INTERDEBUG
54  MITK_INFO << "RigidRegistrationPreset::LoadPreset xml file cannot parse!" << std::endl;
55 #endif
56  }
57 
58  return true;
59  }
60 
61  bool RigidRegistrationPreset::newPresets(std::map<std::string, itk::Array<double>> newTransformValues,
62  std::map<std::string, itk::Array<double>> newMetricValues,
63  std::map<std::string, itk::Array<double>> newOptimizerValues,
64  std::map<std::string, itk::Array<double>> newInterpolatorValues,
65  std::string fileName)
66  {
67  if (!fileName.empty())
68  {
69  m_XmlFileName = fileName;
70  }
71  m_TransformValues = newTransformValues;
72  m_MetricValues = newMetricValues;
73  m_OptimizerValues = newOptimizerValues;
74  m_InterpolatorValues = newInterpolatorValues;
75  return save();
76  }
77 
78  void RigidRegistrationPreset::StartElement(const char *elementName, const char **atts)
79  {
80  std::string elementNameString = elementName;
81  if (elementNameString == "preset")
82  {
83  m_Name = ReadXMLStringAttribut("NAME", atts);
84  }
85  else if (elementNameString == "transform")
86  {
87  itk::Array<double> transformValues;
88  transformValues.SetSize(25);
89  transformValues.fill(0);
90  std::string transform = ReadXMLStringAttribut("TRANSFORM", atts);
91  double trans = atof(transform.c_str());
92  transformValues[0] = trans;
93  MITK_DEBUG("RigidRegistration.Preset.StartElement ") << "Name tag: " << m_Name;
94  transformValues = this->loadTransformValues(transformValues, trans, atts);
95  m_TransformValues[m_Name] = transformValues;
96  }
97  else if (elementNameString == "metric")
98  {
99  itk::Array<double> metricValues;
100  metricValues.SetSize(25);
101  metricValues.fill(0);
102  std::string metric = ReadXMLStringAttribut("METRIC", atts);
103  double met = atof(metric.c_str());
104  metricValues[0] = met;
105  metricValues = this->loadMetricValues(metricValues, met, atts);
106  m_MetricValues[m_Name] = metricValues;
107  }
108  else if (elementNameString == "optimizer")
109  {
110  itk::Array<double> optimizerValues;
111  optimizerValues.SetSize(25);
112  optimizerValues.fill(0);
113  std::string optimizer = ReadXMLStringAttribut("OPTIMIZER", atts);
114  double opt = atof(optimizer.c_str());
115  optimizerValues[0] = opt;
116  optimizerValues = this->loadOptimizerValues(optimizerValues, opt, atts);
117  m_OptimizerValues[m_Name] = optimizerValues;
118  }
119  else if (elementNameString == "interpolator")
120  {
121  itk::Array<double> interpolatorValues;
122  interpolatorValues.SetSize(25);
123  interpolatorValues.fill(0);
124  std::string interpolator = ReadXMLStringAttribut("INTERPOLATOR", atts);
125  double inter = atof(interpolator.c_str());
126  interpolatorValues[0] = inter;
127  interpolatorValues = this->loadInterpolatorValues(interpolatorValues /*, inter, atts*/);
128  m_InterpolatorValues[m_Name] = interpolatorValues;
129  }
130  }
131 
132  std::string RigidRegistrationPreset::ReadXMLStringAttribut(std::string name, const char **atts)
133  {
134  if (atts)
135  {
136  const char **attsIter = atts;
137 
138  while (*attsIter)
139  {
140  if (name == *attsIter)
141  {
142  attsIter++;
143  return *attsIter;
144  }
145  attsIter++;
146  attsIter++;
147  }
148  }
149 
150  return std::string();
151  }
152 
153  itk::Array<double> RigidRegistrationPreset::getTransformValues(std::string name) { return m_TransformValues[name]; }
154  itk::Array<double> RigidRegistrationPreset::getMetricValues(std::string name) { return m_MetricValues[name]; }
155  itk::Array<double> RigidRegistrationPreset::getOptimizerValues(std::string name) { return m_OptimizerValues[name]; }
156  itk::Array<double> RigidRegistrationPreset::getInterpolatorValues(std::string name)
157  {
158  return m_InterpolatorValues[name];
159  }
160 
162  {
163  // use the loaded transoform values to access the names
164 
165  for (auto preset : m_TransformValues)
166  {
167  m_LoadedPresets.push_back(preset.first);
168  }
169 
170  return m_LoadedPresets;
171  }
172 
173  std::map<std::string, itk::Array<double>> &RigidRegistrationPreset::getTransformValuesPresets()
174  {
175  return m_TransformValues;
176  }
177 
178  std::map<std::string, itk::Array<double>> &RigidRegistrationPreset::getMetricValuesPresets()
179  {
180  return m_MetricValues;
181  }
182 
183  std::map<std::string, itk::Array<double>> &RigidRegistrationPreset::getOptimizerValuesPresets()
184  {
185  return m_OptimizerValues;
186  }
187 
188  std::map<std::string, itk::Array<double>> &RigidRegistrationPreset::getInterpolatorValuesPresets()
189  {
190  return m_InterpolatorValues;
191  }
192 
193  bool RigidRegistrationPreset::save()
194  {
195  // falsely removed return value, the previous implementation was also empty (and only returning false)
196  return false;
197  }
198 
199  itk::Array<double> RigidRegistrationPreset::loadTransformValues(itk::Array<double> transformValues,
200  double transform,
201  const char **atts)
202  {
209  {
210  std::string useScales = ReadXMLStringAttribut("USESCALES", atts);
211  double useSca = atof(useScales.c_str());
212  transformValues[1] = useSca;
213  std::string scale1 = ReadXMLStringAttribut("SCALE1", atts);
214  double sca1 = atof(scale1.c_str());
215  transformValues[2] = sca1;
216  std::string scale2 = ReadXMLStringAttribut("SCALE2", atts);
217  double sca2 = atof(scale2.c_str());
218  transformValues[3] = sca2;
219  std::string scale3 = ReadXMLStringAttribut("SCALE3", atts);
220  double sca3 = atof(scale3.c_str());
221  transformValues[4] = sca3;
222  }
223  else if (transform == mitk::TransformParameters::AFFINETRANSFORM ||
225  {
226  std::string useScales = ReadXMLStringAttribut("USESCALES", atts);
227  double useSca = atof(useScales.c_str());
228  transformValues[1] = useSca;
229  std::string scale1 = ReadXMLStringAttribut("SCALE1", atts);
230  double sca1 = atof(scale1.c_str());
231  transformValues[2] = sca1;
232  std::string scale2 = ReadXMLStringAttribut("SCALE2", atts);
233  double sca2 = atof(scale2.c_str());
234  transformValues[3] = sca2;
235  std::string scale3 = ReadXMLStringAttribut("SCALE3", atts);
236  double sca3 = atof(scale3.c_str());
237  transformValues[4] = sca3;
238  std::string scale4 = ReadXMLStringAttribut("SCALE4", atts);
239  double sca4 = atof(scale4.c_str());
240  transformValues[5] = sca4;
241  std::string scale5 = ReadXMLStringAttribut("SCALE5", atts);
242  double sca5 = atof(scale5.c_str());
243  transformValues[6] = sca5;
244  std::string scale6 = ReadXMLStringAttribut("SCALE6", atts);
245  double sca6 = atof(scale6.c_str());
246  transformValues[7] = sca6;
247  std::string scale7 = ReadXMLStringAttribut("SCALE7", atts);
248  double sca7 = atof(scale7.c_str());
249  transformValues[8] = sca7;
250  std::string scale8 = ReadXMLStringAttribut("SCALE8", atts);
251  double sca8 = atof(scale8.c_str());
252  transformValues[9] = sca8;
253  std::string scale9 = ReadXMLStringAttribut("SCALE9", atts);
254  double sca9 = atof(scale9.c_str());
255  transformValues[10] = sca9;
256  std::string scale10 = ReadXMLStringAttribut("SCALE10", atts);
257  double sca10 = atof(scale10.c_str());
258  transformValues[11] = sca10;
259  std::string scale11 = ReadXMLStringAttribut("SCALE11", atts);
260  double sca11 = atof(scale11.c_str());
261  transformValues[12] = sca11;
262  std::string scale12 = ReadXMLStringAttribut("SCALE12", atts);
263  double sca12 = atof(scale12.c_str());
264  transformValues[13] = sca12;
265 
266  std::string useInitializer = ReadXMLStringAttribut("USEINITIALIZER", atts);
267  double useIni = atof(useInitializer.c_str());
268  transformValues[14] = useIni;
269  std::string useMoments = ReadXMLStringAttribut("USEMOMENTS", atts);
270  double useMo = atof(useMoments.c_str());
271  transformValues[15] = useMo;
272  }
273 
274  else if (transform == mitk::TransformParameters::EULER3DTRANSFORM ||
277  {
278  std::string useScales = ReadXMLStringAttribut("USESCALES", atts);
279  double useSca = atof(useScales.c_str());
280  transformValues[1] = useSca;
281  std::string scale1 = ReadXMLStringAttribut("SCALE1", atts);
282  double sca1 = atof(scale1.c_str());
283  transformValues[2] = sca1;
284  std::string scale2 = ReadXMLStringAttribut("SCALE2", atts);
285  double sca2 = atof(scale2.c_str());
286  transformValues[3] = sca2;
287  std::string scale3 = ReadXMLStringAttribut("SCALE3", atts);
288  double sca3 = atof(scale3.c_str());
289  transformValues[4] = sca3;
290  std::string scale4 = ReadXMLStringAttribut("SCALE4", atts);
291  double sca4 = atof(scale4.c_str());
292  transformValues[5] = sca4;
293  std::string scale5 = ReadXMLStringAttribut("SCALE5", atts);
294  double sca5 = atof(scale5.c_str());
295  transformValues[6] = sca5;
296  std::string scale6 = ReadXMLStringAttribut("SCALE6", atts);
297  double sca6 = atof(scale6.c_str());
298  transformValues[7] = sca6;
299  std::string useInitializer = ReadXMLStringAttribut("USEINITIALIZER", atts);
300  double useIni = atof(useInitializer.c_str());
301  transformValues[8] = useIni;
302  std::string useMoments = ReadXMLStringAttribut("USEMOMENTS", atts);
303  double useMo = atof(useMoments.c_str());
304  transformValues[9] = useMo;
305  }
308  {
309  std::string useScales = ReadXMLStringAttribut("USESCALES", atts);
310  double useSca = atof(useScales.c_str());
311  transformValues[1] = useSca;
312  std::string scale1 = ReadXMLStringAttribut("SCALE1", atts);
313  double sca1 = atof(scale1.c_str());
314  transformValues[2] = sca1;
315  std::string scale2 = ReadXMLStringAttribut("SCALE2", atts);
316  double sca2 = atof(scale2.c_str());
317  transformValues[3] = sca2;
318  std::string scale3 = ReadXMLStringAttribut("SCALE3", atts);
319  double sca3 = atof(scale3.c_str());
320  transformValues[4] = sca3;
321  std::string scale4 = ReadXMLStringAttribut("SCALE4", atts);
322  double sca4 = atof(scale4.c_str());
323  transformValues[5] = sca4;
324  std::string scale5 = ReadXMLStringAttribut("SCALE5", atts);
325  double sca5 = atof(scale5.c_str());
326  transformValues[6] = sca5;
327  std::string scale6 = ReadXMLStringAttribut("SCALE6", atts);
328  double sca6 = atof(scale6.c_str());
329  transformValues[7] = sca6;
330  std::string scale7 = ReadXMLStringAttribut("SCALE7", atts);
331  double sca7 = atof(scale7.c_str());
332  transformValues[8] = sca7;
333  std::string useInitializer = ReadXMLStringAttribut("USEINITIALIZER", atts);
334  double useIni = atof(useInitializer.c_str());
335  transformValues[9] = useIni;
336  std::string useMoments = ReadXMLStringAttribut("USEMOMENTS", atts);
337  double useMo = atof(useMoments.c_str());
338  transformValues[10] = useMo;
339  }
341  {
342  std::string useScales = ReadXMLStringAttribut("USESCALES", atts);
343  double useSca = atof(useScales.c_str());
344  transformValues[1] = useSca;
345  std::string scale1 = ReadXMLStringAttribut("SCALE1", atts);
346  double sca1 = atof(scale1.c_str());
347  transformValues[2] = sca1;
348  std::string scale2 = ReadXMLStringAttribut("SCALE2", atts);
349  double sca2 = atof(scale2.c_str());
350  transformValues[3] = sca2;
351  std::string scale3 = ReadXMLStringAttribut("SCALE3", atts);
352  double sca3 = atof(scale3.c_str());
353  transformValues[4] = sca3;
354  std::string scale4 = ReadXMLStringAttribut("SCALE4", atts);
355  double sca4 = atof(scale4.c_str());
356  transformValues[5] = sca4;
357  std::string scale5 = ReadXMLStringAttribut("SCALE5", atts);
358  double sca5 = atof(scale5.c_str());
359  transformValues[6] = sca5;
360  std::string scale6 = ReadXMLStringAttribut("SCALE6", atts);
361  double sca6 = atof(scale6.c_str());
362  transformValues[7] = sca6;
363  std::string scale7 = ReadXMLStringAttribut("SCALE7", atts);
364  double sca7 = atof(scale7.c_str());
365  transformValues[8] = sca7;
366  std::string scale8 = ReadXMLStringAttribut("SCALE8", atts);
367  double sca8 = atof(scale8.c_str());
368  transformValues[9] = sca8;
369  std::string scale9 = ReadXMLStringAttribut("SCALE9", atts);
370  double sca9 = atof(scale9.c_str());
371  transformValues[10] = sca9;
372  std::string scale10 = ReadXMLStringAttribut("SCALE10", atts);
373  double sca10 = atof(scale10.c_str());
374  transformValues[11] = sca10;
375  std::string scale11 = ReadXMLStringAttribut("SCALE11", atts);
376  double sca11 = atof(scale11.c_str());
377  transformValues[12] = sca11;
378  std::string scale12 = ReadXMLStringAttribut("SCALE12", atts);
379  double sca12 = atof(scale12.c_str());
380  transformValues[13] = sca12;
381  std::string scale13 = ReadXMLStringAttribut("SCALE13", atts);
382  double sca13 = atof(scale13.c_str());
383  transformValues[14] = sca13;
384  std::string scale14 = ReadXMLStringAttribut("SCALE14", atts);
385  double sca14 = atof(scale14.c_str());
386  transformValues[15] = sca14;
387  std::string scale15 = ReadXMLStringAttribut("SCALE15", atts);
388  double sca15 = atof(scale15.c_str());
389  transformValues[16] = sca15;
390  std::string useInitializer = ReadXMLStringAttribut("USEINITIALIZER", atts);
391  double useIni = atof(useInitializer.c_str());
392  transformValues[17] = useIni;
393  std::string useMoments = ReadXMLStringAttribut("USEMOMENTS", atts);
394  double useMo = atof(useMoments.c_str());
395  transformValues[18] = useMo;
396  }
398  {
399  std::string useScales = ReadXMLStringAttribut("USESCALES", atts);
400  double useSca = atof(useScales.c_str());
401  transformValues[1] = useSca;
402  std::string scale1 = ReadXMLStringAttribut("SCALE1", atts);
403  double sca1 = atof(scale1.c_str());
404  transformValues[2] = sca1;
405  std::string scale2 = ReadXMLStringAttribut("SCALE2", atts);
406  double sca2 = atof(scale2.c_str());
407  transformValues[3] = sca2;
408  std::string scale3 = ReadXMLStringAttribut("SCALE3", atts);
409  double sca3 = atof(scale3.c_str());
410  transformValues[4] = sca3;
411  std::string scale4 = ReadXMLStringAttribut("SCALE4", atts);
412  double sca4 = atof(scale4.c_str());
413  transformValues[5] = sca4;
414  std::string scale5 = ReadXMLStringAttribut("SCALE5", atts);
415  double sca5 = atof(scale5.c_str());
416  transformValues[6] = sca5;
417  std::string angle = ReadXMLStringAttribut("ANGLE", atts);
418  double ang = atof(angle.c_str());
419  transformValues[7] = ang;
420  std::string useInitializer = ReadXMLStringAttribut("USEINITIALIZER", atts);
421  double useIni = atof(useInitializer.c_str());
422  transformValues[8] = useIni;
423  std::string useMoments = ReadXMLStringAttribut("USEMOMENTS", atts);
424  double useMo = atof(useMoments.c_str());
425  transformValues[9] = useMo;
426  }
428  {
429  std::string useScales = ReadXMLStringAttribut("USESCALES", atts);
430  double useSca = atof(useScales.c_str());
431  transformValues[1] = useSca;
432  std::string scale1 = ReadXMLStringAttribut("SCALE1", atts);
433  double sca1 = atof(scale1.c_str());
434  transformValues[2] = sca1;
435  std::string scale2 = ReadXMLStringAttribut("SCALE2", atts);
436  double sca2 = atof(scale2.c_str());
437  transformValues[3] = sca2;
438  std::string scale3 = ReadXMLStringAttribut("SCALE3", atts);
439  double sca3 = atof(scale3.c_str());
440  transformValues[4] = sca3;
441  std::string scale4 = ReadXMLStringAttribut("SCALE4", atts);
442  double sca4 = atof(scale4.c_str());
443  transformValues[5] = sca4;
444  std::string scale = ReadXMLStringAttribut("SCALE", atts);
445  double sca = atof(scale.c_str());
446  transformValues[6] = sca;
447  std::string angle = ReadXMLStringAttribut("ANGLE", atts);
448  double ang = atof(angle.c_str());
449  transformValues[7] = ang;
450  std::string useInitializer = ReadXMLStringAttribut("USEINITIALIZER", atts);
451  double useIni = atof(useInitializer.c_str());
452  transformValues[8] = useIni;
453  std::string useMoments = ReadXMLStringAttribut("USEMOMENTS", atts);
454  double useMo = atof(useMoments.c_str());
455  transformValues[9] = useMo;
456  }
458  {
459  std::string useScales = ReadXMLStringAttribut("USESCALES", atts);
460  double useSca = atof(useScales.c_str());
461  transformValues[1] = useSca;
462  std::string scale1 = ReadXMLStringAttribut("SCALE1", atts);
463  double sca1 = atof(scale1.c_str());
464  transformValues[2] = sca1;
465  std::string scale2 = ReadXMLStringAttribut("SCALE2", atts);
466  double sca2 = atof(scale2.c_str());
467  transformValues[3] = sca2;
468  std::string scale3 = ReadXMLStringAttribut("SCALE3", atts);
469  double sca3 = atof(scale3.c_str());
470  transformValues[4] = sca3;
471  std::string scale4 = ReadXMLStringAttribut("SCALE4", atts);
472  double sca4 = atof(scale4.c_str());
473  transformValues[5] = sca4;
474  std::string scale5 = ReadXMLStringAttribut("SCALE5", atts);
475  double sca5 = atof(scale5.c_str());
476  transformValues[6] = sca5;
477  std::string scale6 = ReadXMLStringAttribut("SCALE6", atts);
478  double sca6 = atof(scale6.c_str());
479  transformValues[7] = sca6;
480  std::string scale = ReadXMLStringAttribut("SCALE", atts);
481  double sca = atof(scale.c_str());
482  transformValues[8] = sca;
483  std::string angle = ReadXMLStringAttribut("ANGLE", atts);
484  double ang = atof(angle.c_str());
485  transformValues[9] = ang;
486  std::string useInitializer = ReadXMLStringAttribut("USEINITIALIZER", atts);
487  double useIni = atof(useInitializer.c_str());
488  transformValues[10] = useIni;
489  std::string useMoments = ReadXMLStringAttribut("USEMOMENTS", atts);
490  double useMo = atof(useMoments.c_str());
491  transformValues[11] = useMo;
492  }
493 
494  MITK_DEBUG("RigidRegistration.Preset.LoadValue ") << transformValues;
495  return transformValues;
496  }
497 
498  itk::Array<double> RigidRegistrationPreset::loadMetricValues(itk::Array<double> metricValues,
499  double metric,
500  const char **atts)
501  {
502  std::string computeGradient = ReadXMLStringAttribut("COMPUTEGRADIENT", atts);
503  double compGra = atof(computeGradient.c_str());
504  metricValues[1] = compGra;
510  {
511  }
517  {
518  std::string histogramBins = ReadXMLStringAttribut("HISTOGRAMBINS", atts);
519  double histBins = atof(histogramBins.c_str());
520  metricValues[2] = histBins;
521  }
523  {
524  std::string useSampling = ReadXMLStringAttribut("USESAMPLING", atts);
525  double useSamp = atof(useSampling.c_str());
526  metricValues[2] = useSamp;
527  std::string spatialSamples = ReadXMLStringAttribut("SPATIALSAMPLES", atts);
528  double spatSamp = atof(spatialSamples.c_str());
529  metricValues[3] = spatSamp;
530  std::string histogramBins = ReadXMLStringAttribut("HISTOGRAMBINS", atts);
531  double histBins = atof(histogramBins.c_str());
532  metricValues[4] = histBins;
533  }
535  {
536  std::string lambda = ReadXMLStringAttribut("LAMBDA", atts);
537  double lamb = atof(lambda.c_str());
538  metricValues[2] = lamb;
539  }
541  {
542  std::string spatialSamples = ReadXMLStringAttribut("SPATIALSAMPLES", atts);
543  double spatSamp = atof(spatialSamples.c_str());
544  metricValues[2] = spatSamp;
545  std::string fixedStandardDeviation = ReadXMLStringAttribut("FIXEDSTANDARDDEVIATION", atts);
546  double fiStaDev = atof(fixedStandardDeviation.c_str());
547  metricValues[3] = fiStaDev;
548  std::string movingStandardDeviation = ReadXMLStringAttribut("MOVINGSTANDARDDEVIATION", atts);
549  double moStaDev = atof(movingStandardDeviation.c_str());
550  metricValues[4] = moStaDev;
551  std::string useNormalizer = ReadXMLStringAttribut("USENORMALIZERANDSMOOTHER", atts);
552  double useNormal = atof(useNormalizer.c_str());
553  metricValues[5] = useNormal;
554  std::string fixedSmootherVariance = ReadXMLStringAttribut("FIXEDSMOOTHERVARIANCE", atts);
555  double fiSmoVa = atof(fixedSmootherVariance.c_str());
556  metricValues[6] = fiSmoVa;
557  std::string movingSmootherVariance = ReadXMLStringAttribut("MOVINGSMOOTHERVARIANCE", atts);
558  double moSmoVa = atof(movingSmootherVariance.c_str());
559  metricValues[7] = moSmoVa;
560  }
561  return metricValues;
562  }
563 
564  itk::Array<double> RigidRegistrationPreset::loadOptimizerValues(itk::Array<double> optimizerValues,
565  double optimizer,
566  const char **atts)
567  {
568  std::string maximize = ReadXMLStringAttribut("MAXIMIZE", atts);
569  double max = atof(maximize.c_str());
570  optimizerValues[1] = max;
572  {
573  std::string stepLength = ReadXMLStringAttribut("STEPLENGTH", atts);
574  double stepLe = atof(stepLength.c_str());
575  optimizerValues[2] = stepLe;
576  std::string numberOfSteps = ReadXMLStringAttribut("NUMBEROFSTEPS", atts);
577  double numSteps = atof(numberOfSteps.c_str());
578  optimizerValues[3] = numSteps;
579  }
582  {
583  std::string learningRate = ReadXMLStringAttribut("LEARNINGRATE", atts);
584  double learn = atof(learningRate.c_str());
585  optimizerValues[2] = learn;
586  std::string numberIterations = ReadXMLStringAttribut("NUMBERITERATIONS", atts);
587  double numIt = atof(numberIterations.c_str());
588  optimizerValues[3] = numIt;
589  }
590  else if (optimizer == mitk::OptimizerParameters::LBFGSBOPTIMIZER)
591  {
592  }
594  {
595  std::string shrinkFactor = ReadXMLStringAttribut("SHRINKFACTOR", atts);
596  double shrink = atof(shrinkFactor.c_str());
597  optimizerValues[2] = shrink;
598  std::string growthFactor = ReadXMLStringAttribut("GROWTHFACTOR", atts);
599  double growth = atof(growthFactor.c_str());
600  optimizerValues[3] = growth;
601  std::string epsilon = ReadXMLStringAttribut("EPSILON", atts);
602  double eps = atof(epsilon.c_str());
603  optimizerValues[4] = eps;
604  std::string initialRadius = ReadXMLStringAttribut("INITIALRADIUS", atts);
605  double initRad = atof(initialRadius.c_str());
606  optimizerValues[5] = initRad;
607  std::string numberIterations = ReadXMLStringAttribut("NUMBERITERATIONS", atts);
608  double numIt = atof(numberIterations.c_str());
609  optimizerValues[6] = numIt;
610  }
611  else if (optimizer == mitk::OptimizerParameters::POWELLOPTIMIZER)
612  {
613  std::string stepLength = ReadXMLStringAttribut("STEPLENGTH", atts);
614  double stepLe = atof(stepLength.c_str());
615  optimizerValues[2] = stepLe;
616  std::string stepTolerance = ReadXMLStringAttribut("STEPTOLERANCE", atts);
617  double stepTo = atof(stepTolerance.c_str());
618  optimizerValues[3] = stepTo;
619  std::string valueTolerance = ReadXMLStringAttribut("VALUETOLERANCE", atts);
620  double valTo = atof(valueTolerance.c_str());
621  optimizerValues[4] = valTo;
622  std::string numberIterations = ReadXMLStringAttribut("NUMBERITERATIONS", atts);
623  double numIt = atof(numberIterations.c_str());
624  optimizerValues[5] = numIt;
625  }
626  else if (optimizer == mitk::OptimizerParameters::FRPROPTIMIZER)
627  {
628  std::string useFletchReeves = ReadXMLStringAttribut("USEFLETCHREEVES", atts);
629  double useFleRe = atof(useFletchReeves.c_str());
630  optimizerValues[2] = useFleRe;
631  std::string stepLength = ReadXMLStringAttribut("STEPLENGTH", atts);
632  double stepLe = atof(stepLength.c_str());
633  optimizerValues[3] = stepLe;
634  std::string numberIterations = ReadXMLStringAttribut("NUMBERITERATIONS", atts);
635  double numIt = atof(numberIterations.c_str());
636  optimizerValues[4] = numIt;
637  }
639  {
640  std::string gradientMagnitudeTolerance = ReadXMLStringAttribut("GRADIENTMAGNITUDETOLERANCE", atts);
641  double graMagTo = atof(gradientMagnitudeTolerance.c_str());
642  optimizerValues[2] = graMagTo;
643  std::string minStepLength = ReadXMLStringAttribut("MINSTEPLENGTH", atts);
644  double minStep = atof(minStepLength.c_str());
645  optimizerValues[3] = minStep;
646  std::string maxStepLength = ReadXMLStringAttribut("MAXSTEPLENGTH", atts);
647  double maxStep = atof(maxStepLength.c_str());
648  optimizerValues[4] = maxStep;
649  std::string relaxationFactor = ReadXMLStringAttribut("RELAXATIONFACTOR", atts);
650  double relFac = atof(relaxationFactor.c_str());
651  optimizerValues[5] = relFac;
652  std::string numberIterations = ReadXMLStringAttribut("NUMBERITERATIONS", atts);
653  double numIt = atof(numberIterations.c_str());
654  optimizerValues[6] = numIt;
655  }
658  {
659  std::string gradientMagnitudeTolerance = ReadXMLStringAttribut("GRADIENTMAGNITUDETOLERANCE", atts);
660  double graMagTo = atof(gradientMagnitudeTolerance.c_str());
661  optimizerValues[2] = graMagTo;
662  std::string minStepLength = ReadXMLStringAttribut("MINSTEPLENGTH", atts);
663  double minStep = atof(minStepLength.c_str());
664  optimizerValues[3] = minStep;
665  std::string maxStepLength = ReadXMLStringAttribut("MAXSTEPLENGTH", atts);
666  double maxStep = atof(maxStepLength.c_str());
667  optimizerValues[4] = maxStep;
668  std::string numberIterations = ReadXMLStringAttribut("NUMBERITERATIONS", atts);
669  double numIt = atof(numberIterations.c_str());
670  optimizerValues[5] = numIt;
671  }
672  else if (optimizer == mitk::OptimizerParameters::AMOEBAOPTIMIZER)
673  {
674  std::string simplexDelta1 = ReadXMLStringAttribut("SIMPLEXDELTA1", atts);
675  double simpDel1 = atof(simplexDelta1.c_str());
676  optimizerValues[2] = simpDel1;
677  std::string simplexDelta2 = ReadXMLStringAttribut("SIMPLEXDELTA2", atts);
678  double simpDel2 = atof(simplexDelta2.c_str());
679  optimizerValues[3] = simpDel2;
680  std::string simplexDelta3 = ReadXMLStringAttribut("SIMPLEXDELTA3", atts);
681  double simpDel3 = atof(simplexDelta3.c_str());
682  optimizerValues[4] = simpDel3;
683  std::string simplexDelta4 = ReadXMLStringAttribut("SIMPLEXDELTA4", atts);
684  double simpDel4 = atof(simplexDelta4.c_str());
685  optimizerValues[5] = simpDel4;
686  std::string simplexDelta5 = ReadXMLStringAttribut("SIMPLEXDELTA5", atts);
687  double simpDel5 = atof(simplexDelta5.c_str());
688  optimizerValues[6] = simpDel5;
689  std::string simplexDelta6 = ReadXMLStringAttribut("SIMPLEXDELTA6", atts);
690  double simpDel6 = atof(simplexDelta6.c_str());
691  optimizerValues[7] = simpDel6;
692  std::string simplexDelta7 = ReadXMLStringAttribut("SIMPLEXDELTA7", atts);
693  double simpDel7 = atof(simplexDelta7.c_str());
694  optimizerValues[8] = simpDel7;
695  std::string simplexDelta8 = ReadXMLStringAttribut("SIMPLEXDELTA8", atts);
696  double simpDel8 = atof(simplexDelta8.c_str());
697  optimizerValues[9] = simpDel8;
698  std::string simplexDelta9 = ReadXMLStringAttribut("SIMPLEXDELTA9", atts);
699  double simpDel9 = atof(simplexDelta9.c_str());
700  optimizerValues[10] = simpDel9;
701  std::string simplexDelta10 = ReadXMLStringAttribut("SIMPLEXDELTA10", atts);
702  double simpDel10 = atof(simplexDelta10.c_str());
703  optimizerValues[11] = simpDel10;
704  std::string simplexDelta11 = ReadXMLStringAttribut("SIMPLEXDELTA11", atts);
705  double simpDel11 = atof(simplexDelta11.c_str());
706  optimizerValues[12] = simpDel11;
707  std::string simplexDelta12 = ReadXMLStringAttribut("SIMPLEXDELTA12", atts);
708  double simpDel12 = atof(simplexDelta12.c_str());
709  optimizerValues[13] = simpDel12;
710  std::string simplexDelta13 = ReadXMLStringAttribut("SIMPLEXDELTA13", atts);
711  double simpDel13 = atof(simplexDelta13.c_str());
712  optimizerValues[14] = simpDel13;
713  std::string simplexDelta14 = ReadXMLStringAttribut("SIMPLEXDELTA14", atts);
714  double simpDel14 = atof(simplexDelta14.c_str());
715  optimizerValues[15] = simpDel14;
716  std::string simplexDelta15 = ReadXMLStringAttribut("SIMPLEXDELTA15", atts);
717  double simpDel15 = atof(simplexDelta15.c_str());
718  optimizerValues[16] = simpDel15;
719  std::string simplexDelta16 = ReadXMLStringAttribut("SIMPLEXDELTA16", atts);
720  double simpDel16 = atof(simplexDelta16.c_str());
721  optimizerValues[17] = simpDel16;
722  std::string parametersConvergenceTolerance = ReadXMLStringAttribut("PARAMETERSCONVERGENCETOLERANCE", atts);
723  double paramConv = atof(parametersConvergenceTolerance.c_str());
724  optimizerValues[18] = paramConv;
725  std::string functionConvergenceTolerance = ReadXMLStringAttribut("FUNCTIONCONVERGENCETOLERANCE", atts);
726  double funcConv = atof(functionConvergenceTolerance.c_str());
727  optimizerValues[19] = funcConv;
728  std::string numberIterations = ReadXMLStringAttribut("NUMBERITERATIONS", atts);
729  double numIt = atof(numberIterations.c_str());
730  optimizerValues[20] = numIt;
731  }
733  {
734  }
735  else if (optimizer == mitk::OptimizerParameters::LBFGSOPTIMIZER)
736  {
737  std::string GradientConvergenceTolerance = ReadXMLStringAttribut("GRADIENTCONVERGENCETOLERANCE", atts);
738  double graConTo = atof(GradientConvergenceTolerance.c_str());
739  optimizerValues[2] = graConTo;
740  std::string lineSearchAccuracy = ReadXMLStringAttribut("LINESEARCHACCURACY", atts);
741  double lineSearch = atof(lineSearchAccuracy.c_str());
742  optimizerValues[3] = lineSearch;
743  std::string defaultStepLength = ReadXMLStringAttribut("DEFAULTSTEPLENGTH", atts);
744  double defStep = atof(defaultStepLength.c_str());
745  optimizerValues[4] = defStep;
746  std::string numberIterations = ReadXMLStringAttribut("NUMBERITERATIONS", atts);
747  double numIt = atof(numberIterations.c_str());
748  optimizerValues[5] = numIt;
749  std::string useTrace = ReadXMLStringAttribut("USETRACE", atts);
750  double useTr = atof(useTrace.c_str());
751  optimizerValues[6] = useTr;
752  }
753  else if (optimizer == mitk::OptimizerParameters::SPSAOPTIMIZER)
754  {
755  std::string a = ReadXMLStringAttribut("a", atts);
756  double a1 = atof(a.c_str());
757  optimizerValues[2] = a1;
758  std::string a2 = ReadXMLStringAttribut("A", atts);
759  double a3 = atof(a2.c_str());
760  optimizerValues[3] = a3;
761  std::string alpha = ReadXMLStringAttribut("ALPHA", atts);
762  double alp = atof(alpha.c_str());
763  optimizerValues[4] = alp;
764  std::string c = ReadXMLStringAttribut("c", atts);
765  double c1 = atof(c.c_str());
766  optimizerValues[5] = c1;
767  std::string gamma = ReadXMLStringAttribut("GAMMA", atts);
768  double gam = atof(gamma.c_str());
769  optimizerValues[6] = gam;
770  std::string tolerance = ReadXMLStringAttribut("TOLERANCE", atts);
771  double tol = atof(tolerance.c_str());
772  optimizerValues[7] = tol;
773  std::string stateOfConvergenceDecayRate = ReadXMLStringAttribut("STATEOFCONVERGENCEDECAYRATE", atts);
774  double stateOfConvergence = atof(stateOfConvergenceDecayRate.c_str());
775  optimizerValues[8] = stateOfConvergence;
776  std::string minNumberIterations = ReadXMLStringAttribut("MINNUMBERITERATIONS", atts);
777  double minNumIt = atof(minNumberIterations.c_str());
778  optimizerValues[9] = minNumIt;
779  std::string numberPerturbations = ReadXMLStringAttribut("NUMBERPERTURBATIONS", atts);
780  double numPer = atof(numberPerturbations.c_str());
781  optimizerValues[10] = numPer;
782  std::string numberIterations = ReadXMLStringAttribut("NUMBERITERATIONS", atts);
783  double numIt = atof(numberIterations.c_str());
784  optimizerValues[11] = numIt;
785  }
786  return optimizerValues;
787  }
788 
789  itk::Array<double> RigidRegistrationPreset::loadInterpolatorValues(
790  itk::Array<double> interpolatorValues /*, double interpolator, const char **atts*/)
791  {
792  return interpolatorValues;
793  }
794 }
bool newPresets(std::map< std::string, itk::Array< double >> newTransformValues, std::map< std::string, itk::Array< double >> newMetricValues, std::map< std::string, itk::Array< double >> newOptimizerValues, std::map< std::string, itk::Array< double >> newInterpolatorValues, std::string fileName="")
Saves new presets in the previous opened xml file or in the new fileName location.
bool LoadPreset()
Tries to find mitkRigidRegistrationPresets.xml in /mitk/Config and loads all presets stored in this f...
#define MITK_INFO
Definition: mitkLogMacros.h:22
std::map< std::string, itk::Array< double > > & getInterpolatorValuesPresets()
Returns a map with all preset names and their according interpolator values as an array...
std::map< std::string, itk::Array< double > > & getMetricValuesPresets()
Returns a map with all preset names and their according metric values as an array.
#define MITK_DEBUG
Definition: mitkLogMacros.h:26
DataCollection - Class to facilitate loading/accessing structured data.
std::list< std::string > & getAvailablePresets()
Module * GetModule() const
std::map< std::string, itk::Array< double > > & getOptimizerValuesPresets()
Returns a map with all preset names and their according optimizer values as an array.
itk::Array< double > getInterpolatorValues(std::string name)
Returns an array including all interpolator values belonging to preset name.
static T max(T x, T y)
Definition: svm.cpp:70
MITKCORE_EXPORT const ScalarType eps
MITKMATCHPOINTREGISTRATION_EXPORT ResultImageType::Pointer map(const InputImageType *input, const RegistrationType *registration, bool throwOnOutOfInputAreaError=false, const double &paddingValue=0, const ResultImageGeometryType *resultGeometry=NULL, bool throwOnMappingError=true, const double &errorValue=0, mitk::ImageMappingInterpolator::Type interpolatorType=mitk::ImageMappingInterpolator::Linear)
itk::Array< double > getMetricValues(std::string name)
Returns an array including all all metric values belonging to preset name.
std::map< std::string, itk::Array< double > > & getTransformValuesPresets()
Returns a map with all preset names and their according transform values as an array.
itk::Array< double > getTransformValues(std::string name)
Returns an array including all all transform values belonging to preset name.
static ModuleContext * GetModuleContext()
Returns the module context of the calling module.
itk::Array< double > getOptimizerValues(std::string name)
Returns an array including all all optimizer values belonging to preset name.