c_means.c 703 B

1234567891011121314151617181920212223242526272829
  1. #include <math.h>
  2. #include <grass/cluster.h>
  3. int I_cluster_means(struct Cluster *C)
  4. {
  5. int band;
  6. int class;
  7. double m, v; /* m=mean, v=variance then std dev */
  8. double s;
  9. /*
  10. fprintf(stderr,"I_cluster_means(nbands=%d,nclasses=%d)\n",C->nbands, C->nclasses);
  11. */
  12. for (band = 0; band < C->nbands; band++) {
  13. s = C->band_sum[band];
  14. m = s / C->npoints;
  15. v = C->band_sum2[band] - s * m;
  16. v = sqrt(v / (C->npoints - 1));
  17. for (class = 0; class < C->nclasses; class++)
  18. C->mean[band][class] = m;
  19. if (C->nclasses > 1)
  20. for (class = 0; class < C->nclasses; class++)
  21. C->mean[band][class] +=
  22. ((2.0 * class) / (C->nclasses - 1) - 1.0) * v;
  23. }
  24. return 0;
  25. }