00001 #define __cplusplus__ 00002 #ifndef __MIXALGO__ 00003 #define __MIXALGO__ 00004 00005 #include<iostream> 00006 #include<istream> 00007 #include<fstream> 00008 #include<string> 00009 #include<vector> 00010 #include<sstream> 00011 #include <cmath> 00012 00013 #include <Seg_Algorithm.hpp> 00014 #include <IID_Mixture.hpp> 00015 00016 using namespace std; 00017 00018 00027 class Mixture_Algorithm : public Seg_Algorithm{ 00028 00029 protected : 00031 Spatial_Data *SpatData; 00032 00034 IID_Mixture *Model; 00035 00037 void Update_Density(); 00038 00040 vector<double> logdens; 00041 00042 public : 00044 virtual ~Mixture_Algorithm(); 00045 00047 uint Get_N(); 00048 00050 uint Get_K(); 00051 00053 void Info(); 00055 void Run(uint nbiter); 00057 void E_Step(); 00059 void M_Step(); 00061 void Compute_MAP_Labels(vector<uint> & Labels); 00063 void Init_Labels(vector<uint> labs); 00065 void Init_KMeans(); 00066 00068 void Init_Random(); 00069 00071 void Write_fuzzy(string filename); 00073 virtual void Compute_fuzzy(uint i,vector<double> &probs); 00074 00075 // Stopping criteria 00077 void Compute_CLCrit(); 00079 void Compute_FuzzyCrit(); 00081 void Compute_HardCrit(); 00082 00083 }; 00084 00085 00086 #endif