freImageClassificationSOMetricController.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   F.R.E.E. - flexible registration evaluation engine
00004   Version:   v.1.0.0
00005   Date:      $Date: 2006/09/01 12:00:00 $
00006   Module:    $RCSfile: freImageClassificationSOMetricController.h,v $
00007   Language:  C++
00008 
00009 
00010 
00011   Copyright (c) 2007 Ralf o Floca (Department of Medical Informatics,
00012   Institute for Medical Biometry and Informatics, University of Heidelberg,
00013   Germany). All rights reserved.
00014   See FREECopyright.txt or http://www.mi.med.uni-hd.de/free/copyright.htm
00015   for details.
00016 
00017      This software is distributed WITHOUT ANY WARRANTY; without even 
00018      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00019      PURPOSE.  See the above copyright notices for more information.
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                 //Profile settings
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                 //Parameters
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) //Entry is not recorded yet, so do so.
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 } //end of namespace free
00227 
00228 #endif

Generated at Sat Oct 13 16:02:21 2007 for f.r.e.e. - Flexible Registration and Evaluation Engine by doxygen 1.5.3 written by Dimitri van Heesch, © 1997-2000