00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _itkCumulativeGaussianOptimizer_h
00019 #define _itkCumulativeGaussianOptimizer_h
00020
00021 #include "itkMultipleValuedNonLinearOptimizer.h"
00022 #include "itkCumulativeGaussianCostFunction.h"
00023
00024 namespace itk
00025 {
00026
00047 class ITK_EXPORT CumulativeGaussianOptimizer :
00048 public MultipleValuedNonLinearOptimizer
00049 {
00050
00051 public:
00052
00054 typedef CumulativeGaussianOptimizer Self;
00055 typedef MultipleValuedNonLinearOptimizer Superclass;
00056 typedef SmartPointer<Self> Pointer;
00057 typedef SmartPointer<const Self> ConstPointer;
00058
00060 typedef CumulativeGaussianCostFunction CostFunctionType;
00061
00063 typedef CostFunctionType::MeasureType MeasureType;
00064
00066 itkNewMacro(Self);
00067
00069 itkTypeMacro(CumulativeGaussianOptimizer, MultipleValuedNonLinearOptimizer);
00070
00072 itkSetMacro(DifferenceTolerance, double);
00073 itkSetMacro(Verbose, bool);
00074 itkGetMacro(ComputedMean, double);
00075 itkGetMacro(ComputedStandardDeviation, double);
00076 itkGetMacro(UpperAsymptote, double);
00077 itkGetMacro(LowerAsymptote, double);
00078 itkGetMacro(FinalSampledArray, MeasureType*);
00079 itkGetMacro(FitError, double);
00081
00082 void SetDataArray(MeasureType * dataArray);
00083
00085 void StartOptimization();
00086
00088 void PrintArray(MeasureType * array);
00089
00090 protected:
00091 CumulativeGaussianOptimizer();
00092 virtual ~CumulativeGaussianOptimizer();
00093 void PrintSelf(std::ostream &os, Indent indent) const;
00094
00095 private:
00096
00098 double m_DifferenceTolerance;
00099
00101 double m_ComputedMean;
00102
00104 double m_ComputedStandardDeviation;
00105
00107 double m_ComputedAmplitude;
00108
00110 double m_ComputedTransitionHeight;
00111
00113 double m_UpperAsymptote;
00114
00116 double m_LowerAsymptote;
00117
00119 double m_OffsetForMean;
00120
00122 bool m_Verbose;
00123
00125 double m_FitError;
00126
00128 MeasureType * m_FinalSampledArray;
00129
00131 MeasureType * m_CumulativeGaussianArray;
00132
00134 MeasureType * ExtendGaussian(MeasureType * originalArray, MeasureType * extendedArray, int startingPointForInsertion);
00135
00137 MeasureType * RecalculateExtendedArrayFromGaussianParameters(MeasureType * originalArray,
00138 MeasureType * extendedArray,
00139 int startingPointForInsertion);
00140
00142 double FindAverageSumOfSquaredDifferences(MeasureType * array1, MeasureType * array2);
00143
00145 void FindParametersOfGaussian(MeasureType * sampledGaussianArray);
00146
00148 void MeasureGaussianParameters(MeasureType * array);
00149
00151 void PrintComputedParameterHeader();
00152
00154 void PrintComputedParameters();
00155
00157 double VerticalBestShift(MeasureType * originalArray, MeasureType * newArray);
00158 };
00159
00160 }
00161
00162 #endif
00163
00164
00165
00166