00001 #define __cplusplus__ 00002 #ifndef __SEGALGO__ 00003 #define __SEGALGO__ 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_Model.hpp> 00014 00015 using namespace std; 00016 00017 #define ITER_CRIT (0) 00018 #define CL_CRIT (1) 00019 #define FUZZY_CRIT (2) 00020 #define HARD_CRIT (3) 00021 #define MAX_CRIT (4) 00022 00023 00033 class Seg_Algorithm{ 00034 00035 protected : 00036 00038 vector<double> fuzzy; 00039 00041 vector<double> Crit_Values; 00043 uint Criterion; 00045 double Tol; 00046 00048 double Old_CL; 00050 vector<double> old_fuzzy; 00052 vector<uint> old_map_labs; 00053 00054 public : 00056 virtual uint Get_N(); 00057 00058 virtual uint Get_K(); 00059 00060 virtual ~Seg_Algorithm(); 00061 00063 virtual void Init_Labels(vector<uint> const & labs); 00065 virtual void Init_Random(); 00066 00068 bool HasConverged(); 00069 00071 virtual void Compute_MAP_Labels(vector<uint> & Labels); 00072 00073 virtual void Compute_fuzzy(uint i,vector<double> &probs); 00074 00075 // Stopping criteria 00077 virtual void Compute_CLCrit(); 00079 virtual void Compute_FuzzyCrit(); 00081 virtual void Compute_HardCrit(); 00082 00084 void Display_Stopping_Rule(); 00085 00087 void Update_Stopping_Rules(); 00089 void Use_Default_Stopping_Rule(); 00091 void Set_Stopping_Rule(uint crit, double tol); 00092 00094 virtual void Info(); 00095 00097 virtual void Run(uint nbiter); 00099 void RunUntilConvergence(); 00101 virtual void M_Step(); 00103 virtual void E_Step(); 00104 00105 }; 00106 00107 00108 #endif