reference/ocr-simple/histogram.cc
author viric@llimona
Thu, 18 May 2006 23:12:51 +0200
changeset 0 6b8091ca909a
permissions -rw-r--r--
Init from working directory of svn repository.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     1
#include <math.h>
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     2
#include "histogram.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     3
#include "tcl_interface.h"
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     4
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     5
void Histogram::initialize_mean()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     6
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     7
  int total_weight = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     8
  int i;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
     9
  for(i = 0; i < num_rows; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    10
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    11
      total_weight = total_weight + row_weights[i];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    12
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    13
  mean = (double) total_weight / (double) num_rows;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    14
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    15
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    16
inline double sqr(double x) {return(x*x);}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    17
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    18
void Histogram::initialize_variance()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    19
{ 
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    20
  double sum = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    21
  for(int i = 0; i < num_rows; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    22
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    23
	sum += sqr(row_weights[i] - mean);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    24
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    25
  variance = (double) sum / (double) num_rows;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    26
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    27
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    28
void Histogram::initialize_standard_dev()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    29
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    30
  standard_dev = sqrt(variance);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    31
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    32
#define SKIP 5
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    33
/* should get this skip from project.cc (!!) */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    34
Histogram::display()
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    35
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    36
#if 0
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    37
  docommand(".histogram.c delete hist");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    38
  docommand(".histogram.c create text 275 300 -font -adobe-helvetica-medium-o-normal--34-240-100-100-p-176-iso8859-1 -text \"%.3lf degrees, SD = %.3lf\" -tags hist", cut_angle, standard_dev);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    39
  for(int i = 0; i < num_rows; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    40
      {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    41
	docommand(".histogram.c create line 0 %d %d %d -fill blue -tags {hist} -width %d", i*SKIP, row_weights[i], i*SKIP, SKIP);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    42
      }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    43
  docommand("update");
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    44
#endif
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    45
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    46
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    47
Histogram::Histogram(int n_rows, int* r_weights, double c_angle)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    48
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    49
  num_rows = n_rows;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    50
  row_weights = r_weights;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    51
  cut_angle = c_angle;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    52
  initialize_mean();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    53
  initialize_variance();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    54
  initialize_standard_dev();
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    55
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    56
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    57
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    58
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    59
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    60
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    61
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    62
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    63
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    64
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    65
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    66
double find_int_sd(int* values, int num_values)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    67
/* find the standard deviation of an array of ints */
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    68
{
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    69
  int total_weight = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    70
  int i;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    71
  for(i = 0; i < num_values; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    72
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    73
      total_weight = total_weight + values[i];
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    74
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    75
  double mean_weight = (double) total_weight / (double) num_values;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    76
  double standard_sum = 0;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    77
  for(i = 0; i < num_values; i++)
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    78
    {
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    79
      standard_sum += sqr(values[i] - mean_weight);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    80
    }
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    81
  standard_sum = standard_sum / (double) num_values;
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    82
  return sqrt(standard_sum);
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    83
}
6b8091ca909a Init from working directory of svn repository.
viric@llimona
parents:
diff changeset
    84