tesseract  4.00.00dev
linlsq.h File Reference
#include "points.h"
#include "params.h"

Go to the source code of this file.

Classes

class  LLSQ
 

Functions

template<typename T >
MedianOfCircularValues (T modulus, GenericVector< T > *v)
 

Function Documentation

◆ MedianOfCircularValues()

template<typename T >
T MedianOfCircularValues ( modulus,
GenericVector< T > *  v 
)

Definition at line 111 of file linlsq.h.

111  {
112  LLSQ stats;
113  T halfrange = static_cast<T>(modulus / 2);
114  int num_elements = v->size();
115  for (int i = 0; i < num_elements; ++i) {
116  stats.add((*v)[i], (*v)[i] + halfrange);
117  }
118  bool offset_needed = stats.y_variance() < stats.x_variance();
119  if (offset_needed) {
120  for (int i = 0; i < num_elements; ++i) {
121  (*v)[i] += halfrange;
122  }
123  }
124  int median_index = v->choose_nth_item(num_elements / 2);
125  if (offset_needed) {
126  for (int i = 0; i < num_elements; ++i) {
127  (*v)[i] -= halfrange;
128  }
129  }
130  return (*v)[median_index];
131 }
double x_variance() const
Definition: linlsq.h:79
void add(double x, double y)
Definition: linlsq.cpp:49
int size() const
Definition: genericvector.h:72
Definition: linlsq.h:26
double y_variance() const
Definition: linlsq.h:85
int choose_nth_item(int target_index)