📄 clust_util.cpp
字号:
#include "clust_defs.h"#include "alloc_util.h"#include "clust_util.h"intI_SigSetNClasses(SigSet *S){ int i, count; for (i = 0, count = 0; i < S->nclasses; i++) if (S->classSig[i].used) count++; return count;}ClassData *I_AllocClassData(SigSet *S, ClassSig *C, int npixels){ ClassData *Data; Data = &(C->classData); Data->npixels = npixels; Data->x = G_alloc_matrix (npixels, S->nbands); Data->p = G_alloc_matrix (npixels, C->nsubclasses); Data->w = G_alloc_vector (npixels*sizeof(double)); return Data;}voidI_InitSigSet(SigSet *S){ S->nbands = 0; S->nclasses = 0; S->classSig = NULL; S->title = NULL;}voidI_SigSetNBands(SigSet *S, int nbands){ S->nbands = nbands;}ClassSig *I_NewClassSig(SigSet *S){ ClassSig *Sp; if (S->nclasses == 0) S->classSig = (ClassSig *) G_malloc (sizeof(ClassSig)); else S->classSig = (ClassSig *) G_realloc((char *)S->classSig, sizeof(ClassSig)*(S->nclasses+1)); Sp = &S->classSig[S->nclasses++]; Sp->classnum = 0; Sp->nsubclasses = 0; Sp->used = 1; Sp->type = SIGNATURE_TYPE_MIXED; Sp->title = NULL; Sp->classData.npixels = 0; Sp->classData.SummedWeights = 0.0; Sp->classData.x = NULL; Sp->classData.p = NULL; Sp->classData.w = NULL; return Sp;}SubSig *I_NewSubSig(SigSet *S, ClassSig *C){ SubSig *Sp; int i; if (C->nsubclasses == 0) C->subSig = (SubSig *) G_malloc (sizeof(SubSig)); else C->subSig = (SubSig *) G_realloc ((char *)C->subSig, sizeof(SubSig) * (C->nsubclasses+1)); Sp = &C->subSig[C->nsubclasses++]; Sp->used = 1; Sp->R = (double **) G_calloc (S->nbands, sizeof(double *)); Sp->R[0] = (double *) G_calloc (S->nbands * S->nbands, sizeof(double)); for (i = 1; i < S->nbands; i++) Sp->R[i] = Sp->R[i-1] + S->nbands; Sp->Rinv = (double **) G_calloc (S->nbands, sizeof(double *)); Sp->Rinv[0] = (double *) G_calloc (S->nbands * S->nbands, sizeof(double)); for (i = 1; i < S->nbands; i++) Sp->Rinv[i] = Sp->Rinv[i-1] + S->nbands; Sp->means = (double *) G_calloc (S->nbands, sizeof(double)); Sp->N = 0; Sp->pi = 0; Sp->cnst = 0; return Sp;}voidI_SetSigTitle(SigSet *S, char *title){ if (title == NULL) title = ""; if (S->title) free (S->title); S->title = G_malloc (strlen (title)+1); strcpy(S->title, title);}char *I_GetSigTitle(SigSet *S){ if (S->title) return S->title; else return "";}voidI_SetClassTitle(ClassSig *C, char *title){ if (title == NULL) title = ""; if (C->title) free (C->title); C->title = G_malloc (strlen (title)+1); strcpy(C->title, title);}char *I_GetClassTitle(ClassSig *C){ if (C->title) return C->title; else return "";}/* Deallocators */voidI_DeallocClassData(SigSet *S, ClassSig *C){ ClassData * Data; Data = &(C->classData); G_free_matrix(Data->x); Data->x = NULL; G_free_matrix(Data->p); Data->p = NULL; G_free_vector(Data->w); Data->w = NULL; Data->npixels = 0; Data->SummedWeights = 0.0;} voidI_DeallocSubSig(ClassSig *C){ SubSig *Sp; Sp = &C->subSig[--C->nsubclasses]; G_dealloc( (char *) Sp->R[0] ); G_dealloc( (char *) Sp->R ); G_dealloc( (char *) Sp->Rinv[0] ); G_dealloc( (char *) Sp->Rinv ); G_dealloc( (char *) Sp->means ); C->subSig = (SubSig *) G_realloc((char *)C->subSig, sizeof(SubSig) * (C->nsubclasses));}voidI_DeallocClassSig(SigSet *S){ ClassSig *Sp; Sp = &(S->classSig[--S->nclasses]); I_DeallocClassData( S, Sp ); while(Sp->nsubclasses>0) { I_DeallocSubSig(Sp); } S->classSig = (ClassSig *) G_realloc ((char *)S->classSig, sizeof(ClassSig) * (S->nclasses));} voidI_DeallocSigSet(SigSet *S){ while(S->nclasses>0) { I_DeallocClassSig( S ); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -