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);
00080
00081
void SetDataArray(
MeasureType * dataArray);
00082
00084
void StartOptimization();
00085
00087
void PrintArray(
MeasureType * array);
00088
00089
protected:
00090 CumulativeGaussianOptimizer();
00091
virtual ~CumulativeGaussianOptimizer();
00092
void PrintSelf(std::ostream &os,
Indent indent)
const;
00093
00094
private:
00095
00097
double m_DifferenceTolerance;
00098
00100
double m_ComputedMean;
00101
00103
double m_ComputedStandardDeviation;
00104
00106
double m_ComputedAmplitude;
00107
00109
double m_ComputedTransitionHeight;
00110
00112
double m_UpperAsymptote;
00113
00115
double m_LowerAsymptote;
00116
00118
double m_OffsetForMean;
00119
00121
bool m_Verbose;
00122
00124
double m_FitError;
00125
00127
MeasureType * m_FinalSampledArray;
00128
00130
MeasureType * m_CumulativeGaussianArray;
00131
00133
MeasureType * ExtendGaussian(
MeasureType * originalArray,
MeasureType * extendedArray,
int startingPointForInsertion);
00134
00136
MeasureType * RecalculateExtendedArrayFromGaussianParameters(
MeasureType * originalArray,
00137
MeasureType * extendedArray,
00138
int startingPointForInsertion);
00139
00141
double FindAverageSumOfSquaredDifferences(
MeasureType * array1,
MeasureType * array2);
00142
00144
void FindParametersOfGaussian(
MeasureType * sampledGaussianArray);
00145
00147
void MeasureGaussianParameters(
MeasureType * array);
00148
00150
void PrintComputedParameterHeader();
00151
00153
void PrintComputedParameters();
00154
00156
double VerticalBestShift(
MeasureType * originalArray,
MeasureType * newArray);
00157 };
00158
00159 }
00160
00161
#endif
00162
00163
00164