//------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ double STDEV(std::vector<double> DIAM) { double temp = 0; double mean = MEAN(DIAM); for (unsigned int i = 0; i < DIAM.size(); i++) { temp += (mean - DIAM[i])*(mean - DIAM[i]); } return sqrt( temp / (1.0 * DIAM.size()) ); }
// Computes the variance of char positioning (width + spacing) wrt norm_height FLOAT32 get_gap_variance(WIDTH_RECORD *wrec, float norm_height) { MEASUREMENT ws; new_measurement(ws); for (int x = 0; x < wrec->num_chars - 1; x++) { FLOAT32 gap_ratio = (wrec->widths[2 * x] + wrec->widths[ 2*x + 1]) * 1.0 / norm_height; ADD_SAMPLE(ws, gap_ratio); } if (segment_adjust_debug > 2) tprintf("Gap Mean=%g Var=%g\n", MEAN(ws), VARIANCE(ws)); return VARIANCE(ws); }
// Computes the variance of the char widths normalized to the given height // TODO(dsl): Do this in a later stage and use char choice info to skip // punctuations. FLOAT32 get_width_variance(WIDTH_RECORD *wrec, float norm_height) { MEASUREMENT ws; new_measurement(ws); for (int x = 0; x < wrec->num_chars; x++) { FLOAT32 wh_ratio = wrec->widths[2 * x] * 1.0f / norm_height; if (x == wrec->num_chars - 1 && wh_ratio > 0.3) continue; // exclude trailing punctuation from stats ADD_SAMPLE(ws, wh_ratio); } if (segment_adjust_debug > 2) tprintf("Width Mean=%g Var=%g\n", MEAN(ws), VARIANCE(ws)); return VARIANCE(ws); }