home *** CD-ROM | disk | FTP | other *** search
/ Practical Algorithms for Image Analysis / Practical Algorithms for Image Analysis.iso / CH_6.2 / XVORA / HIST.C < prev    next >
Encoding:
C/C++ Source or Header  |  1999-09-11  |  1.5 KB  |  96 lines

  1. /*
  2.  * HIST(ogram evaluation)
  3.  *
  4.  * routines to evaluate statistics and histogram of input data set
  5.  *
  6.  */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <math.h>
  10. #include <string.h>
  11. #include "vora.h"
  12.  
  13.  
  14. /*
  15.  * determine mean of input data set
  16.  */
  17. double
  18. find_mean (data, n)
  19.      float *data;
  20.      int n;
  21. {
  22.   int i;
  23.   double mean = 0.0;
  24.  
  25.   for (i = 0; i < n; i++)
  26.     mean += *(data + i);
  27.  
  28.   return (mean / (double) n);
  29. }
  30.  
  31. /*
  32.  * determine standard deviation of input data set
  33.  */
  34. double
  35. find_sigma (data, n, mean)
  36.      float *data;
  37.      int n;
  38.      double mean;
  39. {
  40.   int i;
  41.   double xi, sigma = 0.0;
  42.  
  43.   for (i = 0; i < n; i++) {
  44.     xi = (double) (*(data + i));
  45.     sigma += (xi - mean) * (xi - mean);
  46.   }
  47.   sigma /= (double) (n - 1);
  48.  
  49.   return (sqrt (sigma));
  50. }
  51.  
  52.  
  53.  
  54. /*
  55.  * construct histogram of input data
  56.  */
  57. void
  58. construct_hist (n, data, hist, bw, data_base)
  59.      int n;
  60.      float *data, *hist;
  61.      double bw, data_base;
  62. {
  63.   int i, ibin;
  64.  
  65.   for (i = 0; i < n; i++) {
  66.     if (*(data + i) != 0) {
  67.       ibin = 0;
  68.       while (*(data + i) >= data_base + ibin * bw)
  69.         ibin++;
  70.       *(hist + ibin - 1) += 1;
  71.     }
  72.   }
  73. }
  74.  
  75.  
  76. /*
  77.  * construct histogram of sorted(!) input data
  78.  */
  79. void
  80. construct_shist (n, data, hist, bw, data_base)
  81.      int n;
  82.      float *data, *hist;
  83.      double bw, data_base;
  84. {
  85.   int i, ibin;
  86.  
  87.   ibin = 0;
  88.   for (i = 0; i < n; i++) {
  89.     if (*(data + i) != 0) {
  90.       while (*(data + i) >= data_base + ibin * bw)
  91.         ibin++;
  92.       *(hist + ibin - 1) += 1;
  93.     }
  94.   }
  95. }
  96.