⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clust_util.cpp

📁 混合高斯模型的C++程序
💻 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 + -