00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkExpectationMaximizationMixtureModelEstimator_h
00018 #define __itkExpectationMaximizationMixtureModelEstimator_h
00019
00020 #include "itkMembershipFunctionBase.h"
00021 #include "itkMixtureModelComponentBase.h"
00022
00023 namespace itk{
00024 namespace Statistics{
00025
00052 template< class TSample >
00053 class ITK_EXPORT ExpectationMaximizationMixtureModelEstimator : public Object
00054 {
00055 public:
00057 typedef ExpectationMaximizationMixtureModelEstimator Self;
00058 typedef Object Superclass;
00059 typedef SmartPointer< Self > Pointer;
00060 typedef SmartPointer<const Self> ConstPointer;
00061
00063 itkTypeMacro(ExpectationMaximizationMixtureModelEstimator,
00064 Object);
00065 itkNewMacro(Self) ;
00067
00069 typedef typename TSample::MeasurementType MeasurementType ;
00070 typedef typename TSample::MeasurementVectorType MeasurementVectorType ;
00071
00073 typedef MixtureModelComponentBase< TSample > ComponentType ;
00074
00076 typedef std::vector< ComponentType* > ComponentVectorType ;
00077
00079 typedef MembershipFunctionBase< MeasurementVectorType >
00080 ComponentMembershipFunctionType ;
00081
00083 typedef Array< double > ProportionVectorType ;
00084
00086 void SetSample(const TSample* sample) ;
00087
00089 const TSample* GetSample() const;
00090
00093 void SetInitialProportions(ProportionVectorType &propotion) ;
00094 ProportionVectorType* GetInitialProportions() ;
00096
00098 ProportionVectorType* GetProportions() ;
00099
00104 void SetMaximumIteration(int numberOfIterations) ;
00105 int GetMaximumIteration() ;
00107
00109 int GetCurrentIteration()
00110 { return m_CurrentIteration ; }
00111
00113 int AddComponent(ComponentType* component) ;
00114
00116 unsigned int GetNumberOfComponents() ;
00117
00119 void Update() ;
00120
00122 enum TERMINATION_CODE { CONVERGED = 0, NOT_CONVERGED = 1 } ;
00123
00125 TERMINATION_CODE GetTerminationCode() ;
00126
00129 ComponentMembershipFunctionType* GetComponentMembershipFunction(int componentIndex) ;
00130
00131 protected:
00132 ExpectationMaximizationMixtureModelEstimator() ;
00133 virtual ~ExpectationMaximizationMixtureModelEstimator() {}
00134 void PrintSelf(std::ostream& os, Indent indent) const ;
00135
00136 bool CalculateDensities() ;
00137 double CalculateExpectation() ;
00138 bool UpdateComponentParameters() ;
00139 bool UpdateProportions() ;
00140
00142 void GenerateData() ;
00143
00144 private:
00146 const TSample* m_Sample ;
00147
00148 int m_MaxIteration ;
00149 int m_CurrentIteration ;
00150 TERMINATION_CODE m_TerminationCode ;
00151 ComponentVectorType m_ComponentVector ;
00152 ProportionVectorType m_InitialProportions ;
00153 ProportionVectorType m_Proportions ;
00154 } ;
00155
00156
00157 }
00158 }
00159
00160
00161 #ifndef ITK_MANUAL_INSTANTIATION
00162 #include "itkExpectationMaximizationMixtureModelEstimator.txx"
00163 #endif
00164
00165 #endif
00166
00167
00168
00169
00170
00171
00172
00173