00001 #define __cplusplus__ 00002 #ifndef __DSEGALGO__ 00003 #define __DSEGALGO__ 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 Double_Seg_Algorithm{ 00034 00035 protected : 00037 vector<double> Crit_Values; 00039 uint Criterion; 00041 double Tol; 00042 00044 double Old_CL; 00046 vector<double> old_fuzzy; 00048 vector<uint> old_map_labs; 00049 00050 public : 00051 00052 virtual ~Double_Seg_Algorithm(); 00053 00055 bool HasConverged(); 00056 00058 virtual void Compute_MAP_Labels(vector<uint> & Labels); 00059 00061 virtual void Init_Labels(vector<uint> const & labsY,vector<uint> const & labsZ ); 00063 virtual void Init_Random(); 00065 virtual void Init_Density(); 00066 00067 00068 // Stopping criteria 00070 virtual void Compute_CLCrit(); 00072 virtual void Compute_FuzzyCrit(); 00074 virtual void Compute_HardCrit(); 00075 00077 void Display_Stopping_Rule(); 00078 00080 void Update_Stopping_Rules(); 00082 void Use_Default_Stopping_Rule(); 00084 void Set_Stopping_Rule(uint crit, double tol); 00085 00087 virtual void Info(); 00088 00089 00091 virtual void Run(uint nbiter); 00093 void RunUntilConvergence(); 00094 00095 }; 00096 00097 00098 #endif