c_reclass.c 811 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include <grass/cluster.h>
  2. int I_cluster_reclass(struct Cluster *C, int minsize)
  3. {
  4. int band, c, hole, move, p;
  5. for (c = 0; c < C->nclasses; c++)
  6. C->reclass[c] = c;
  7. /* find first `empty' class */
  8. for (hole = 0; hole < C->nclasses; hole++)
  9. if (C->count[hole] < minsize)
  10. break;
  11. /* if none, just return */
  12. if (hole >= C->nclasses)
  13. return 1;
  14. for (move = hole; move < C->nclasses; move++)
  15. if (C->count[move] >= minsize) {
  16. C->reclass[move] = hole;
  17. C->count[hole] = C->count[move];
  18. for (band = 0; band < C->nbands; band++)
  19. C->sum[band][hole] = C->sum[band][move];
  20. hole++;
  21. }
  22. else
  23. C->reclass[move] = -1; /* eliminate this class */
  24. for (p = 0; p < C->npoints; p++)
  25. C->class[p] = C->reclass[C->class[p]];
  26. C->nclasses = hole;
  27. return 0;
  28. }