00001 #define __cplusplus__ 00002 #ifndef __DHMRF__ 00003 #define __DHMRF__ 00004 00005 #include<iostream> 00006 #include<istream> 00007 #include<fstream> 00008 #include<string> 00009 #include<vector> 00010 #include<sstream> 00011 #include <cmath> 00012 00013 00014 #include <Seg_Model.hpp> 00015 #include <Spatial_Data.hpp> 00016 #include <Neighborhood_System.hpp> 00017 #include <MRF.hpp> 00018 00019 using namespace std; 00020 00021 00031 class DHMRF : public Seg_Model{ 00032 00033 protected : 00034 00036 MRF *RF; 00037 00038 00039 public : 00040 00042 virtual ~DHMRF(); 00043 00045 uint Get_K(); 00047 uint Get_N(); 00048 00049 00051 virtual double Density(vector<double> const & X, uint k); 00052 00054 double Likelihood(Spatial_Data *spatd); 00056 double BIC(Spatial_Data *spatd ); 00058 double ICL(Spatial_Data *spatd ); 00059 00061 double H(uint i, uint k, vector<uint> const & z); 00063 double Hmf(uint i, uint k); 00064 00066 void Compute_P_ICM(vector<uint> const & z , uint i, Spatial_Data *spatd, vector<double> & P_G); 00068 void Compute_P_Z_X(uint i, Spatial_Data *spatd, vector<double> & P ); 00070 void Compute_PGmf(vector<double> & P_G); 00072 void Compute_tik(Spatial_Data *spatd, vector<double> & tik); 00073 00075 void Set_Zmf( vector<double> const & z ); 00077 void Set_Zmf( vector<double> const & z , uint i); 00079 void Get_Zmf( vector<double> & z ); 00080 00082 void SetGradient(double step, double tol, uint maxiter); 00083 00084 00086 void Estimate_MRF(Spatial_Data *spatd, vector<double> const & tik); 00087 00089 virtual void NREM_E(Spatial_Data *spatd, vector<double> & tik); 00091 virtual void NREM_M(Spatial_Data *spatd, vector<double> const & tik); 00092 00093 00095 void ICM(Spatial_Data *spatd, vector<uint> & Z_ICM); 00096 00098 double Completed_Likelihood(Spatial_Data *spatd, vector<double> const & tik); 00099 00101 double PLIC(Spatial_Data *spatd, vector<uint> const & Z_ICM); 00102 00103 }; 00104 00105 00106 #endif