00001 00003 #include <iostream> 00004 #include <fstream> 00005 #include <string> 00006 #include <vector> 00007 00008 #include <cstdio> 00009 #include <cstdlib> 00010 #include <cmath> 00011 #include <cassert> 00013 class DynaClass 00014 { 00015 public: 00016 00017 // Attributes 00020 vector<int> *AssignedTimelessClass; 00022 vector<float> *DivergenceValue; 00024 vector<float*> *Centroids; 00026 vector<float**> *Covariances; 00028 vector<unsigned long int> *Weight; 00030 vector<float*> *MTCentroids; 00032 vector<float**> *MTCovariances; 00035 vector<unsigned long int> *MTWeight; 00036 00037 //Joint Distribution for 2 consecutive times; 00041 vector<float*> *JointCentroids; 00045 vector<float**> *JointCovariances; 00050 vector<unsigned long int> *JointWeight; 00052 float *MutualInfo; 00053 00054 //trajectory attributes between 2 consecutive times 00056 float ***flow; 00058 float ***div; 00059 00060 // Operations 00061 DynaClass(){} 00062 virtual~DynaClass(){} 00068 void Allocate(int size, int nb_bands) 00069 { 00070 00071 int k,j; 00072 nb_TemporalSample=size; 00073 nb_dim=nb_bands; 00074 AssignedTimelessClass=new vector<int>[nb_TemporalSample]; 00075 Weight=new vector<unsigned long int>[nb_TemporalSample]; 00076 DivergenceValue=new vector<float>[nb_TemporalSample]; 00077 Centroids=new vector<float*>[nb_TemporalSample]; 00078 Covariances=new vector<float**>[nb_TemporalSample]; 00079 00080 MTWeight=new vector<unsigned long int>[nb_TemporalSample]; 00081 MTCentroids=new vector<float*>[nb_TemporalSample]; 00082 MTCovariances=new vector<float**>[nb_TemporalSample]; 00083 00084 JointCentroids=new vector<float*>[nb_TemporalSample-1]; 00085 JointCovariances=new vector<float**>[nb_TemporalSample-1]; 00086 JointWeight=new vector<unsigned long int>[nb_TemporalSample-1]; 00087 00088 int *AuxAssignedTimelessClass=new int[nb_TemporalSample]; 00089 unsigned long int *AuxWeight=new unsigned long int[nb_TemporalSample]; 00090 float *AuxDivergenceValue=new float[nb_TemporalSample]; 00091 float **AuxCentroids=new float*[nb_TemporalSample]; 00092 float ***AuxCovariances=new float**[nb_TemporalSample]; 00093 unsigned long int *AuxMTWeight=new unsigned long int[nb_TemporalSample]; 00094 float **AuxMTCentroids=new float*[nb_TemporalSample]; 00095 float ***AuxMTCovariances=new float**[nb_TemporalSample]; 00096 float **AuxJointCentroids=new float*[nb_TemporalSample-1]; 00097 float ***AuxJointCovariances=new float**[nb_TemporalSample-1]; 00098 unsigned long int *AuxJointWeight=new unsigned long int[nb_TemporalSample-1]; 00099 00100 00101 for (k=0;k<nb_TemporalSample;k++) 00102 { 00103 AuxCentroids[k]=new float[nb_dim]; 00104 AuxCovariances[k]=new float*[ nb_dim]; 00105 AuxMTCentroids[k]=new float[nb_dim]; 00106 AuxMTCovariances[k]=new float*[ nb_dim]; 00107 for (j=0;j<nb_dim;j++) 00108 { 00109 AuxCovariances[k][j]=new float[nb_dim]; 00110 AuxMTCovariances[k][j]=new float[nb_dim]; 00111 } 00112 if (k<nb_TemporalSample-1){ 00113 AuxJointCentroids[k]=new float[nb_dim*2]; 00114 AuxJointCovariances[k]=new float*[nb_dim*2]; 00115 for (j=0;j<nb_dim*2;j++){ 00116 AuxJointCovariances[k][j]=new float[nb_dim*2]; 00117 } 00118 JointCentroids[k].push_back(AuxJointCentroids[k]); 00119 JointCovariances[k].push_back(AuxJointCovariances[k]); 00120 JointWeight[k].push_back(AuxJointWeight[k]); 00121 } 00122 Weight[k].push_back(AuxWeight[k]); 00123 AssignedTimelessClass[k].push_back(AuxAssignedTimelessClass[k]); 00124 DivergenceValue[k].push_back(AuxDivergenceValue[k]); 00125 Centroids[k].push_back(AuxCentroids[k]); 00126 Covariances[k].push_back(AuxCovariances[k]); 00127 MTWeight[k].push_back(AuxMTWeight[k]); 00128 MTCentroids[k].push_back(AuxMTCentroids[k]); 00129 MTCovariances[k].push_back(AuxMTCovariances[k]); 00130 00131 } 00132 for (k=0;k<nb_TemporalSample;k++){AssignedTimelessClass[k][0]=-1;} 00133 MutualInfo=new float[nb_TemporalSample-1]; 00134 for (k=0;k<nb_TemporalSample-1;k++){MutualInfo[k]=-1;} 00135 } 00139 void InitRead(int size, int nb_bands){ 00140 00141 nb_TemporalSample=size; 00142 nb_dim=nb_bands; 00143 AssignedTimelessClass=new vector<int>[nb_TemporalSample]; 00144 Weight=new vector<unsigned long int>[nb_TemporalSample]; 00145 DivergenceValue=new vector<float>[nb_TemporalSample]; 00146 Centroids=new vector<float*>[nb_TemporalSample]; 00147 Covariances=new vector<float**>[nb_TemporalSample]; 00148 00149 MTWeight=new vector<unsigned long int>[nb_TemporalSample]; 00150 MTCentroids=new vector<float*>[nb_TemporalSample]; 00151 MTCovariances=new vector<float**>[nb_TemporalSample]; 00152 00153 MutualInfo=new float[nb_TemporalSample-1]; 00154 flow= new float**[nb_TemporalSample]; 00155 div= new float**[nb_TemporalSample]; 00156 } 00159 void MTAlloc(int t){ 00160 00161 float *AuxMTCentroids=new float[nb_dim]; 00162 float **AuxMTCovariances=new float*[nb_dim]; 00163 for (int j=0;j<nb_dim;j++){ AuxMTCovariances[j]=new float[nb_dim];} 00164 unsigned long int *AuxMTWeight=new unsigned long int[1]; 00165 00166 MTCentroids[t].push_back(AuxMTCentroids); 00167 MTCovariances[t].push_back(AuxMTCovariances); 00168 MTWeight[t].push_back(AuxMTWeight[0]); 00169 00170 00171 } 00177 void TLAlloc(int t, int length){ 00178 00179 for (int k=0;k<length;k++){ 00180 00181 unsigned long int *AuxWeight=new unsigned long int[1]; 00182 int *AuxAssignedTimelessClass=new int[1]; 00183 float *AuxDivergenceValue=new float[1]; 00184 float *AuxCentroids=new float[nb_dim]; 00185 float **AuxCovariances=new float*[ nb_dim]; 00186 for (int j=0;j<nb_dim;j++) 00187 { 00188 AuxCovariances[j]=new float[nb_dim]; 00189 AuxCovariances[j]=new float[nb_dim]; 00190 } 00191 Weight[t].push_back(AuxWeight[0]); 00192 AssignedTimelessClass[t].push_back(AuxAssignedTimelessClass[0]); 00193 DivergenceValue[t].push_back(AuxDivergenceValue[0]); 00194 Centroids[t].push_back(AuxCentroids); 00195 Covariances[t].push_back(AuxCovariances); 00196 } 00197 } 00203 void TLAlloc2(int t, int length){ 00204 00205 for (int k=0;k<length;k++){ 00206 00207 unsigned long int *AuxWeight=new unsigned long int[1]; 00208 int *AuxAssignedTimelessClass=new int[1]; 00209 float *AuxDivergenceValue=new float[1]; 00210 Weight[t].push_back(AuxWeight[0]); 00211 AssignedTimelessClass[t].push_back(AuxAssignedTimelessClass[0]); 00212 DivergenceValue[t].push_back(AuxDivergenceValue[0]); 00213 } 00214 } 00220 void TLAllocCenterCov(int t, int length){ 00221 00222 for (int k=0;k<length;k++){ 00223 00224 float *AuxCentroids=new float[nb_dim]; 00225 float **AuxCovariances=new float*[ nb_dim]; 00226 for (int j=0;j<nb_dim;j++) 00227 { 00228 AuxCovariances[j]=new float[nb_dim]; 00229 AuxCovariances[j]=new float[nb_dim]; 00230 } 00231 Centroids[t].push_back(AuxCentroids); 00232 Covariances[t].push_back(AuxCovariances); 00233 } 00234 } 00235 00242 void flowDivAlloc(int t, int length1, int length2){ 00243 00244 flow[t]=new float*[length1];div[t]=new float*[length1]; 00245 for (int k=0;k<length1;k++){flow[t][k]=new float[length2];div[t][k]=new float[length2];} 00246 } 00247 00248 00249 private: 00250 00252 int nb_TemporalSample; 00254 int nb_dim; 00255 };