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
00111 double m_ComputedTransitionHeight;
00112
00114 double m_UpperAsymptote;
00115
00117 double m_LowerAsymptote;
00118
00120 double m_OffsetForMean;
00121
00123 bool m_Verbose;
00124
00126 double m_FitError;
00127
00130 MeasureType * m_FinalSampledArray;
00131
00133 MeasureType * m_CumulativeGaussianArray;
00134
00136 MeasureType * ExtendGaussian(MeasureType * originalArray, MeasureType * extendedArray, int startingPointForInsertion);
00137
00139 MeasureType * RecalculateExtendedArrayFromGaussianParameters(MeasureType * originalArray,
00140 MeasureType * extendedArray,
00141 int startingPointForInsertion);
00142
00145 double FindAverageSumOfSquaredDifferences(MeasureType * array1, MeasureType * array2);
00146
00148 void FindParametersOfGaussian(MeasureType * sampledGaussianArray);
00149
00151 void MeasureGaussianParameters(MeasureType * array);
00152
00154 void PrintComputedParameterHeader();
00155
00157 void PrintComputedParameters();
00158
00160 double VerticalBestShift(MeasureType * originalArray, MeasureType * newArray);
00161 };
00162
00163 }
00164
00165 #endif
00166