GRASS Programmer's Manual
6.4.2(2012)
|
00001 #include <math.h> 00002 #include <grass/cluster.h> 00003 00004 int I_cluster_means(struct Cluster *C) 00005 { 00006 int band; 00007 int class; 00008 double m, v; /* m=mean, v=variance then std dev */ 00009 double s; 00010 00011 /* 00012 fprintf(stderr,"I_cluster_means(nbands=%d,nclasses=%d)\n",C->nbands, C->nclasses); 00013 */ 00014 for (band = 0; band < C->nbands; band++) { 00015 s = C->band_sum[band]; 00016 m = s / C->npoints; 00017 v = C->band_sum2[band] - s * m; 00018 v = sqrt(v / (C->npoints - 1)); 00019 for (class = 0; class < C->nclasses; class++) 00020 C->mean[band][class] = m; 00021 if (C->nclasses > 1) 00022 for (class = 0; class < C->nclasses; class++) 00023 C->mean[band][class] += 00024 ((2.0 * class) / (C->nclasses - 1) - 1.0) * v; 00025 } 00026 00027 return 0; 00028 }