summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tesseract/src/textord/oldbasel.h')
-rw-r--r--tesseract/src/textord/oldbasel.h164
1 files changed, 164 insertions, 0 deletions
diff --git a/tesseract/src/textord/oldbasel.h b/tesseract/src/textord/oldbasel.h
new file mode 100644
index 00000000..0e25df0d
--- /dev/null
+++ b/tesseract/src/textord/oldbasel.h
@@ -0,0 +1,164 @@
+/**********************************************************************
+ * File: oldbasel.h (Formerly oldbl.h)
+ * Description: A re-implementation of the old baseline algorithm.
+ * Author: Ray Smith
+ *
+ * (C) Copyright 1993, Hewlett-Packard Ltd.
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ ** http://www.apache.org/licenses/LICENSE-2.0
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ *
+ **********************************************************************/
+
+#ifndef OLDBASEL_H
+#define OLDBASEL_H
+
+#include "params.h"
+#include "blobbox.h"
+
+namespace tesseract {
+
+extern BOOL_VAR_H (textord_oldbl_debug, false,
+"Debug old baseline generation");
+
+int get_blob_coords( //get boxes
+ TO_ROW* row, //row to use
+ int32_t lineheight, //block level
+ TBOX* blobcoords, //output boxes
+ bool& holed_line, //lost a lot of blobs
+ int& outcount //no of real blobs
+);
+void make_first_baseline ( //initial approximation
+TBOX blobcoords[], /*blob bounding boxes */
+int blobcount, /*no of blobcoords */
+int xcoords[], /*coords for spline */
+int ycoords[], /*approximator */
+QSPLINE * spline, /*initial spline */
+QSPLINE * baseline, /*output spline */
+float jumplimit /*guess half descenders */
+);
+void make_holed_baseline ( //initial approximation
+TBOX blobcoords[], /*blob bounding boxes */
+int blobcount, /*no of blobcoords */
+QSPLINE * spline, /*initial spline */
+QSPLINE * baseline, /*output spline */
+float gradient //of line
+);
+int partition_line ( //partition blobs
+TBOX blobcoords[], //bounding boxes
+int blobcount, /*no of blobs on row */
+int *numparts, /*number of partitions */
+char partids[], /*partition no of each blob */
+int partsizes[], /*no in each partition */
+QSPLINE * spline, /*curve to fit to */
+float jumplimit, /*allowed delta change */
+float ydiffs[] /*diff from spline */
+);
+void merge_oldbl_parts ( //partition blobs
+TBOX blobcoords[], //bounding boxes
+int blobcount, /*no of blobs on row */
+char partids[], /*partition no of each blob */
+int partsizes[], /*no in each partition */
+int biggestpart, //major partition
+float jumplimit /*allowed delta change */
+);
+int get_ydiffs ( //evaluate differences
+TBOX blobcoords[], //bounding boxes
+int blobcount, /*no of blobs */
+QSPLINE * spline, /*approximating spline */
+float ydiffs[] /*output */
+);
+int choose_partition ( //select partition
+float diff, /*diff from spline */
+float partdiffs[], /*diff on all parts */
+int lastpart, /*last assigned partition */
+float jumplimit, /*new part threshold */
+float* drift,
+float* last_delta,
+int *partcount /*no of partitions */
+);
+int partition_coords ( //find relevant coords
+TBOX blobcoords[], //bounding boxes
+int blobcount, /*no of blobs in row */
+char partids[], /*partition no of each blob */
+int bestpart, /*best new partition */
+int xcoords[], /*points to work on */
+int ycoords[] /*points to work on */
+);
+int segment_spline ( //make xstarts
+TBOX blobcoords[], //boundign boxes
+int blobcount, /*no of blobs in row */
+int xcoords[], /*points to work on */
+int ycoords[], /*points to work on */
+int degree, int pointcount, /*no of points */
+int xstarts[] //result
+);
+bool split_stepped_spline( //make xstarts
+ QSPLINE* baseline, //current shot
+ float jumplimit, //max step function
+ int* xcoords, /*points to work on */
+ int* xstarts, //result
+ int& segments //no of segments
+);
+void insert_spline_point ( //get descenders
+int xstarts[], //starts to shuffle
+int segment, //insertion pt
+int coord1, //coords to add
+int coord2, int &segments //total segments
+);
+void find_lesser_parts ( //get descenders
+TO_ROW * row, //row to process
+TBOX blobcoords[], //bounding boxes
+int blobcount, /*no of blobs */
+char partids[], /*partition of each blob */
+int partsizes[], /*size of each part */
+int partcount, /*no of partitions */
+int bestpart /*biggest partition */
+);
+
+void old_first_xheight ( //the wiseowl way
+TO_ROW * row, /*current row */
+TBOX blobcoords[], /*blob bounding boxes */
+int initialheight, //initial guess
+int blobcount, /*blobs in blobcoords */
+QSPLINE * baseline, /*established */
+float jumplimit /*min ascender height */
+);
+
+void make_first_xheight ( //find xheight
+TO_ROW * row, /*current row */
+TBOX blobcoords[], /*blob bounding boxes */
+int lineheight, //initial guess
+int init_lineheight, //block level guess
+int blobcount, /*blobs in blobcoords */
+QSPLINE * baseline, /*established */
+float jumplimit /*min ascender height */
+);
+
+int *make_height_array ( //get array of heights
+TBOX blobcoords[], /*blob bounding boxes */
+int blobcount, /*blobs in blobcoords */
+QSPLINE * baseline /*established */
+);
+
+void find_top_modes ( //get modes
+STATS * stats, //stats to hack
+int statnum, //no of piles
+int modelist[], int modenum //no of modes to get
+);
+
+void pick_x_height(TO_ROW * row, //row to do
+int modelist[],
+int lefts[], int rights[],
+STATS * heightstat,
+int mode_threshold);
+
+} // namespace tesseract
+
+#endif