00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "freAccuracySOMetricMonitor.h"
00024
00025 #include "itkNumericTraits.h"
00026
00027 namespace FREE
00028 {
00029
00033 AccuracySOMetricResult::
00034 AccuracySOMetricResult()
00035 {
00036 this->Reset();
00037 };
00038
00039 void
00040 AccuracySOMetricResult::
00041 Reset()
00042 {
00043 m_MinError = itk::NumericTraits< double >::max();
00044 m_MaxError = 0.0;
00045 m_Error = 0.0;
00046 m_Var = 0.0;
00047
00048 m_UnevaluatedPoints = 0;
00049
00050 m_Duration = 0;
00051 m_Samplesize = 0;
00052
00053 m_PointErrors.clear();
00054 };
00055
00059 AccuracySOMetricMonitor::
00060 AccuracySOMetricMonitor()
00061 {};
00062
00063 AccuracySOMetricMonitor::
00064 ~AccuracySOMetricMonitor()
00065 {
00066 };
00067
00068 void
00069 AccuracySOMetricMonitor::
00070 InsertEvaluationResults(const ResultType& results)
00071 {
00072 m_Errors.push_back(results.GetError());
00073 m_Vars.push_back(results.GetVariance());
00074 m_MinErrors.push_back(results.GetMinError());
00075 m_MaxErrors.push_back(results.GetMaxError());
00076 m_PointErrors.push_back(results.GetPointErrors());
00077 m_Samplesize.push_back(results.GetSamplesize());
00078 m_Durations.push_back(results.GetDuration());
00079 m_UnevaluatedPoints.push_back(results.GetUnevaluatedPoints());
00080 };
00081
00082 void
00083 AccuracySOMetricMonitor::
00084 CopyAdaptationResults(const ResultIndexType& index, ResultType& results) const
00085 {
00086 results.SetError(m_Errors[index]);
00087 results.SetVariance(m_Vars[index]);
00088 results.SetMinError(m_MinErrors[index]);
00089 results.SetMaxError(m_MaxErrors[index]);
00090 results.SetPointErrors(m_PointErrors[index]);
00091 results.SetSamplesize(m_Samplesize[index]);
00092 results.SetDuration(m_Durations[index]);
00093 results.SetUnevaluatedPoints(m_UnevaluatedPoints[index]);
00094 };
00095
00096 void
00097 AccuracySOMetricMonitor::
00098 EnlistResultsToStatistic(const ResultType& results, StatisticEntry& entry)
00099 {
00100 entry.AddValue(Convert::ToStr(results.GetError()),2);
00101 entry.AddValue(Convert::ToStr(sqrt(results.GetVariance())),3);
00102 entry.AddValue(Convert::ToStr(results.GetMinError()),4);
00103 entry.AddValue(Convert::ToStr(results.GetMaxError()),5);
00104
00105 std::string sPointErrors ="";
00106 for (AccuracySOMetricResult::PointErrorListType::const_iterator pos = results.GetPointErrors().begin(); pos!=results.GetPointErrors().end(); pos++)
00107 {
00108 sPointErrors += Convert::ToStr(*pos) + "; ";
00109 }
00110 entry.AddValue(sPointErrors,6);
00111
00112 entry.AddValue(Convert::ToStr(results.GetDuration()),7);
00113 entry.AddValue(Convert::ToStr(results.GetUnevaluatedPoints()),8);
00114 };
00115
00116 void
00117 AccuracySOMetricMonitor::
00118 EnlistDictionaryEntries(StatisticDictionary& dictionary)
00119 {
00120 dictionary.AddValueDefinition(this->GetNameOfClass(),"Error", "Mean error; deviation in real world spacing");
00121 dictionary.AddValueDefinition(this->GetNameOfClass(),"Std dev", "Standard deviation of the error");
00122 dictionary.AddValueDefinition(this->GetNameOfClass(),"Minimum", "Minimum error");
00123 dictionary.AddValueDefinition(this->GetNameOfClass(),"Maximum", "Maximum error");
00124 dictionary.AddValueDefinition(this->GetNameOfClass(),"Point error", "Absolut error of each reference point. Only valid if metric uses points to evaluate accuracy.");
00125 dictionary.AddValueDefinition(this->GetNameOfClass(),"Duration", "Duration of the registration in 1/10 sec");
00126 dictionary.AddValueDefinition(this->GetNameOfClass(),"Unevaluated points", "Number of points that were not evaluated. Only valid if accuracy is estimated via point references.");
00127 };
00128
00129
00130 }