00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __freImageClassificationSOMetricController_h
00023 #define __freImageClassificationSOMetricController_h
00024
00025 #include "freSetupOptimizationMultiThreadMetricControllerBase.h"
00026
00027 #include "freImageClassificationSOMetric.h"
00028
00029 namespace FREE
00030 {
00031
00040 freControllerIDMacro(ImageClassificationSOMetricControllerBase, "ImageClassificationSOMetricBase");
00041 template <class TControlledMetric>
00042 class ImageClassificationSOMetricControllerBase : public SetupOptimizationMultiThreadMetricControllerBase<TControlledMetric>
00043 {
00044 public:
00045 DeclareParameterMacro(ReferenceImage);
00046 DeclareParameterMacro(ResultImage);
00047 DeclareParameterMacro(LowerClassThreshold);
00048 DeclareParameterMacro(UpperClassThreshold);
00049 DeclareParameterMacro(FMeasureWeight);
00050
00051 typedef TControlledMetric ComponentType;
00052 typedef SetupOptimizationMultiThreadMetricControllerBase<ComponentType> Superclass;
00053
00054 itkTypeMacro(ImageClassificationSOMetricControllerBase, SetupOptimizationMultiThreadMetricControllerBase);
00055
00056 protected:
00057 ImageClassificationSOMetricControllerBase()
00058 {
00059
00060 this->UpdateControllerID(ControllerID::ImageClassificationSOMetricControllerBase);
00061 this->m_Description = "Base class for image classification metric.";
00062 };
00063
00064 virtual void GenerateProfile(CtrlProfile::ControllerProfile& profile,
00065 const SessionComponentCache* pComponentCache,
00066 bool bRegardOldSetup) const
00067 {
00068 Superclass::GenerateProfile(profile,pComponentCache,bRegardOldSetup);
00069
00070
00071 profile.Parameters().AddParameter(Superclass::cParam_MetricScales,CtrlProfile::Parameter::PVTDouble,Superclass::cParamDsc_MetricScales,9,"1.0");
00072 profile.Parameters().AddParameter(cParam_ReferenceImage,CtrlProfile::Parameter::PVTIDPath,cParamDsc_ReferenceImage,1,"");
00073 profile.Parameters().AddParameter(cParam_ResultImage,CtrlProfile::Parameter::PVTIDPath,cParamDsc_ResultImage,1,"");
00074 profile.Parameters().AddParameter(cParam_LowerClassThreshold,CtrlProfile::Parameter::PVTDouble,cParamDsc_LowerClassThreshold,1,"1.0");
00075 profile.Parameters().AddParameter(cParam_UpperClassThreshold,CtrlProfile::Parameter::PVTDouble,cParamDsc_UpperClassThreshold,1,"255.0");
00076 profile.Parameters().AddParameter(cParam_FMeasureWeight,CtrlProfile::Parameter::PVTDouble,cParamDsc_FMeasureWeight,1,"1.0");
00077 profile.Parameters().AddParameter(cParam_MetricMinimize,Parameter::PVTBool,cParamDsc_MetricMinimize,1,"false");
00078 };
00079
00080 virtual void ActualizeMainComponent(ComponentType* pMainComponent,
00081 SessionComponentCache* pComponentCache,
00082 SessionInfo* pSessionInfo,
00083 const unsigned int& iActLevel) const
00084 {
00085 Superclass::ActualizeMainComponent(pMainComponent, pComponentCache,
00086 pSessionInfo, iActLevel);
00087
00088 std::string sTempPath;
00089 IDPath referenceImagePath;
00090 IDPath resultImagePath;
00091 double dLower;
00092 double dUpper;
00093 double dFMWeight;
00094
00095 try
00096 {
00097 SessionAccessor::GetParameterValue(pComponentCache,cParam_ReferenceImage,sTempPath);
00098 referenceImagePath = sTempPath;
00099 SessionAccessor::GetParameterValue(pComponentCache,cParam_ResultImage,sTempPath);
00100 resultImagePath = sTempPath;
00101 SessionAccessor::GetParameterValue(pComponentCache,cParam_LowerClassThreshold,dLower);
00102 SessionAccessor::GetParameterValue(pComponentCache,cParam_UpperClassThreshold,dUpper);
00103 SessionAccessor::GetParameterValue(pComponentCache,cParam_FMeasureWeight,dFMWeight);
00104 }
00105 catchAllNPassMacro("Error while retrieving parameter values.");
00106
00107 pMainComponent->SetReferenceImagePath(referenceImagePath);
00108 pMainComponent->SetResultImagePath(resultImagePath);
00109 pMainComponent->SetLowerClassThreshold(dLower);
00110 pMainComponent->SetUpperClassThreshold(dUpper);
00111 pMainComponent->SetFMeasureWeight(dFMWeight);
00112 };
00113
00114 void
00115 SetStatisticEntryMainComponent(StatisticEntry& rStatisticEntry,
00116 ComponentType* pMainComponent,
00117 SessionComponentCache* pMainComponentCache,
00118 SessionInfo* pSessionInfo,
00119 StatisticDictionary& rDictionary) const
00120 {
00121 typename ComponentType::DecomposedMeasureType values = pMainComponent->GetCurrentDecomposedValue();
00122
00123 std::string sIDPath = pMainComponentCache->GetIDPath();
00124 StatisticValueDefinition* pEntry = rDictionary.GetValueDefinitionByName(sIDPath,"mean sensitivity");
00125
00126 if (!pEntry)
00127 {
00128 pEntry = rDictionary.AddValueDefinition(sIDPath,"mean sensitivity", "mean sensitivity");
00129 rDictionary.AddValueDefinition(sIDPath,"std sensitivity", "standard deviation of sensitivity.");
00130 rDictionary.AddValueDefinition(sIDPath,"min sensitivity", "minimum sensitivity");
00131 rDictionary.AddValueDefinition(sIDPath,"max sensitivity", "maximum sensitivity");
00132 rDictionary.AddValueDefinition(sIDPath,"mean specificity", "mean specificity");
00133 rDictionary.AddValueDefinition(sIDPath,"std specificity", "standard deviation of specificity.");
00134 rDictionary.AddValueDefinition(sIDPath,"min specificity", "minimum specificity");
00135 rDictionary.AddValueDefinition(sIDPath,"max specificity", "maximum specificity");
00136 rDictionary.AddValueDefinition(sIDPath,"mean ppv", "mean ppv (positive predictive value)");
00137 rDictionary.AddValueDefinition(sIDPath,"std ppv", "standard deviation of ppv.");
00138 rDictionary.AddValueDefinition(sIDPath,"min ppv", "minimum ppv");
00139 rDictionary.AddValueDefinition(sIDPath,"max ppv", "maximum ppv");
00140 rDictionary.AddValueDefinition(sIDPath,"mean npv", "mean npv (negative predictive value)");
00141 rDictionary.AddValueDefinition(sIDPath,"std npv", "standard deviation of npv.");
00142 rDictionary.AddValueDefinition(sIDPath,"min npv", "minimum npv");
00143 rDictionary.AddValueDefinition(sIDPath,"max npv", "maximum npv");
00144 rDictionary.AddValueDefinition(sIDPath,"mean fm", "mean f-measure (negative predictive value)");
00145 rDictionary.AddValueDefinition(sIDPath,"std fm", "standard deviation of fm.");
00146 rDictionary.AddValueDefinition(sIDPath,"min fm", "minimum fm");
00147 rDictionary.AddValueDefinition(sIDPath,"max fm", "maximum fm");
00148 rDictionary.AddValueDefinition(sIDPath,"failure", "number of failed evaluations");
00149 rDictionary.AddValueDefinition(sIDPath,"mean duration", "mean duration of an evaluation (tenth of a second).");
00150 rDictionary.AddValueDefinition(sIDPath,"std duration", "standard deviation of an evaluation (tenth of a second).");
00151 rDictionary.AddValueDefinition(sIDPath,"min duration", "minimum duration of an evaluation (tenth of a second).");
00152 rDictionary.AddValueDefinition(sIDPath,"max duration", "maximum duration of an evaluation (tenth of a second).");
00153 }
00154
00155 for (unsigned int i = 0; i<values.Size(); i++)
00156 {
00157 rStatisticEntry.AddValue(Convert::ToStr(values[i]),pEntry->GetRefID()+i);
00158 }
00159 };
00160
00161 };
00162
00163 template <class TControlledMetric>
00164 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParam_ReferenceImage = "ReferenceImage";
00165 template <class TControlledMetric>
00166 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParamDsc_ReferenceImage = "IDPath of the reference image within the session of the adapted setups used as test basis.";
00167 template <class TControlledMetric>
00168 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParam_ResultImage = "ResultImage";
00169 template <class TControlledMetric>
00170 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParamDsc_ResultImage = "IDPath of the result image of an adapted setup.";
00171 template <class TControlledMetric>
00172 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParam_LowerClassThreshold = "LowerClassThreshold";
00173 template <class TControlledMetric>
00174 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParamDsc_LowerClassThreshold = "Lower pixel value threshold indicating class members.";
00175 template <class TControlledMetric>
00176 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParam_UpperClassThreshold = "UpperClassThreshold";
00177 template <class TControlledMetric>
00178 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParamDsc_UpperClassThreshold = "Upper pixel value threshold indicating class members.";
00179 template <class TControlledMetric>
00180 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParam_FMeasureWeight = "FMeasureWeight";
00181 template <class TControlledMetric>
00182 const char* const ImageClassificationSOMetricControllerBase<TControlledMetric>::cParamDsc_FMeasureWeight = "Weight of positive predictive value and sensitivity in the f-measure.";
00183
00192 freControllerIDMacro(ImageClassification2DSOMetricController, "Image Classification 2D SO Metric");
00193 class ImageClassification2DSOMetricController : public ImageClassificationSOMetricControllerBase< ImageClassificationSOMetric<2> >
00194 {
00195 public:
00196 typedef ImageClassificationSOMetric<2> ComponentType;
00197 typedef ImageClassificationSOMetricControllerBase<ComponentType> Superclass;
00198
00199 itkTypeMacro(ImageClassification2DSOMetricController, ImageClassificationSOMetricControllerBase);
00200
00201 ImageClassification2DSOMetricController();
00202
00203 };
00204
00213 freControllerIDMacro(ImageClassification3DSOMetricController, "Image Classification 3D SO Metric");
00214 class ImageClassification3DSOMetricController : public ImageClassificationSOMetricControllerBase< ImageClassificationSOMetric<3> >
00215 {
00216 public:
00217 typedef ImageClassificationSOMetric<3> ComponentType;
00218 typedef ImageClassificationSOMetricControllerBase<ComponentType> Superclass;
00219
00220 itkTypeMacro(ImageClassification3DSOMetricController, ImageClassificationSOMetricControllerBase);
00221
00222 ImageClassification3DSOMetricController();
00223
00224 };
00225
00226 }
00227
00228 #endif