00001
00005
00006 #include <iostream>
00007 #include <fstream>
00008 #include <string>
00009 #include <vector>
00010
00011 #include <cstdio>
00012 #include <cstdlib>
00013 #include <cmath>
00014 #include <cassert>
00015
00016
00017
00018
00019
00023 class SuperposeClass
00024 {
00025 public:
00026
00027
00028
00029 SuperposeClass(){}
00030 virtual ~SuperposeClass(){}
00031
00033 void AcquirePara(int t,int nb_dimension,int nb_im,int nb_Class, Image<unsigned char> *classfiles, Image<unsigned char> *Timeless_classfile)
00034 {
00035 TimeLocation=t;
00036 nb_dim=nb_dimension;
00037 nb_images=nb_im;
00038 nb_TimelessClass=nb_Class;
00039 TempClassfiles=classfiles;
00040 TimelessClassfile=Timeless_classfile;
00041
00042 }
00043
00045 float DivWeight(int classIndex,int Index_TimelessClass)
00046 {
00047 float ClassPopulation;
00048 ClassPopulation=(float)SuperposedPopulation(classIndex,TimeLocation,Index_TimelessClass);
00049 return ClassPopulation;
00050 }
00051
00053 float FlowWeight(int classIndex,int preClassIndex,int Index_TimelessClass)
00054 {
00055 float ClassPopulation;
00056 unsigned long int res=0;
00057 int j1,j2;
00058 int aux;
00059 int aux1;
00060 int aux2;
00061 unsigned long int nxny=TempClassfiles->nx*TempClassfiles->ny;
00062 int sideX;
00063 int timeXNxny=TimeLocation*nxny;
00064 int preTimeXNxny=(TimeLocation-1)*nxny;
00065 for (j1=0;j1<TempClassfiles->nx;j1++)
00066 {
00067 sideX=j1*TempClassfiles->ny;
00068 for (j2=0;j2<TempClassfiles->ny;j2++)
00069 {
00070 aux2=*((*TimelessClassfile).position+sideX+j2);
00071 if (aux2==(Index_TimelessClass)){
00072 aux=*((*TempClassfiles).position+timeXNxny+sideX+j2);
00073 aux1=*((*TempClassfiles).position+preTimeXNxny+sideX+j2);
00074 if ((aux==classIndex)&&(aux1==preClassIndex)){res++;}
00075 }
00076 }
00077 }
00078 ClassPopulation=(float)res;
00079 return ClassPopulation;
00080 }
00081
00082
00084 float MTPopulation(int kMT){
00085 float res=0;
00086 int aux;
00087 for (int j1=0;j1<TimelessClassfile->nx;j1++)
00088 {
00089 for (int j2=0;j2<TimelessClassfile->ny;j2++)
00090 {
00091 aux=*((*TimelessClassfile).position+j1*TimelessClassfile->ny+j2);
00092 if (aux==kMT){res++;}
00093 }
00094 }
00095 return res;
00096 }
00097 private:
00098
00099
00101 int TimeLocation;
00103 int nb_dim;
00105 int nb_images;
00107 int nb_TimelessClass;
00109 Image<unsigned char>* TempClassfiles;
00111 Image<unsigned char> * TimelessClassfile;
00112
00113
00114
00116 unsigned long int Population(int class_index, int time)
00117 {
00118 unsigned long int res=0;
00119 int j1,j2;
00120 int aux;
00121 unsigned long int nxny=TempClassfiles->nx*TempClassfiles->ny;
00122 for (j1=0;j1<TempClassfiles->nx;j1++)
00123 {
00124 for (j2=0;j2<TempClassfiles->ny;j2++)
00125 {
00126 aux=*((*TempClassfiles).position+time*nxny+j1*TempClassfiles->ny+j2);
00127 if (aux==class_index){res++;}
00128 }
00129 }
00130 return res;
00131 }
00132
00138 unsigned long int SuperposedPopulation(int class_index,int time,int Index_TimelessClass)
00139 {
00140 unsigned long int res=0;
00141 int j1,j2;
00142 int aux;
00143 int aux2;
00144 unsigned long int nxny=TempClassfiles->nx*TempClassfiles->ny;
00145 for (j1=0;j1<TempClassfiles->nx;j1++)
00146 {
00147 for (j2=0;j2<TempClassfiles->ny;j2++)
00148 {
00149 aux=*((*TempClassfiles).position+time*nxny+j1*TempClassfiles->ny+j2);
00150 aux2=*((*TimelessClassfile).position+j1*(*TimelessClassfile).ny+j2);
00151 if ((aux==class_index)&&(aux2==(Index_TimelessClass))){res++;}
00152 }
00153 }
00154 return res;
00155 }
00156
00157
00165 unsigned long int FlowPopulation(int class_index,int time,int preClassIndex,int preTimeLocation,int Index_TimelessClass)
00166 {
00167 unsigned long int res=0;
00168 int j1,j2;
00169 int aux;
00170 int aux1;
00171 int aux2;
00172 unsigned long int nxny=TempClassfiles->nx*TempClassfiles->ny;
00173 int sideX;
00174 int timeXNxny=time*nxny;
00175 int preTimeXNxny=preTimeLocation*nxny;
00176 for (j1=0;j1<TempClassfiles->nx;j1++)
00177 {
00178 sideX=j1*TempClassfiles->ny;
00179 for (j2=0;j2<TempClassfiles->ny;j2++)
00180 {
00181 aux=*((*TempClassfiles).position+timeXNxny+sideX+j2);
00182 aux1=*((*TempClassfiles).position+preTimeXNxny+sideX+j2);
00183 aux2=*((*TimelessClassfile).position+sideX+j2);
00184 if ((aux==class_index)&&(aux2==(Index_TimelessClass))&&(aux1==preClassIndex)){res++;}
00185 }
00186 }
00187 return res;
00188 }
00189
00191 int SUM(int * aux,int size)
00192 {
00193 int res=0;
00194 for (int j=0;j<size;j++)
00195 {
00196 res +=aux[j];
00197 }
00198 return res;
00199 }
00200
00201
00202 };