/src/tesseract/src/ccstruct/quspline.h
Line | Count | Source |
1 | | /********************************************************************** |
2 | | * File: quspline.h (Formerly qspline.h) |
3 | | * Description: Code for the QSPLINE class. |
4 | | * Author: Ray Smith |
5 | | * Created: Tue Oct 08 17:16:12 BST 1991 |
6 | | * |
7 | | * (C) Copyright 1991, Hewlett-Packard Ltd. |
8 | | ** Licensed under the Apache License, Version 2.0 (the "License"); |
9 | | ** you may not use this file except in compliance with the License. |
10 | | ** You may obtain a copy of the License at |
11 | | ** http://www.apache.org/licenses/LICENSE-2.0 |
12 | | ** Unless required by applicable law or agreed to in writing, software |
13 | | ** distributed under the License is distributed on an "AS IS" BASIS, |
14 | | ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
15 | | ** See the License for the specific language governing permissions and |
16 | | ** limitations under the License. |
17 | | * |
18 | | **********************************************************************/ |
19 | | |
20 | | #ifndef QUSPLINE_H |
21 | | #define QUSPLINE_H |
22 | | |
23 | | #include "scrollview.h" // for ScrollView, ScrollView::Color |
24 | | |
25 | | #include <cstdint> // for int32_t |
26 | | |
27 | | struct Pix; |
28 | | |
29 | | namespace tesseract { |
30 | | |
31 | | class ICOORD; |
32 | | class QUAD_COEFFS; |
33 | | class ROW; |
34 | | class TBOX; |
35 | | |
36 | | class TESS_API QSPLINE { |
37 | | friend void make_first_baseline(TBOX *, int, int *, int *, QSPLINE *, QSPLINE *, float); |
38 | | friend void make_holed_baseline(TBOX *, int, QSPLINE *, QSPLINE *, float); |
39 | | friend void tweak_row_baseline(ROW *, double, double); |
40 | | |
41 | | public: |
42 | 457k | QSPLINE() { // empty constructor |
43 | 457k | segments = 0; |
44 | 457k | xcoords = nullptr; // everything empty |
45 | 457k | quadratics = nullptr; |
46 | 457k | } |
47 | | QSPLINE( // copy constructor |
48 | | const QSPLINE &src); |
49 | | QSPLINE( // constructor |
50 | | int32_t count, // number of segments |
51 | | int32_t *xstarts, // segment starts |
52 | | double *coeffs); // coefficients |
53 | | ~QSPLINE(); // destructor |
54 | | QSPLINE( // least squares fit |
55 | | int xstarts[], // spline boundaries |
56 | | int segcount, // no of segments |
57 | | int xcoords[], // points to fit |
58 | | int ycoords[], int blobcount, // no of coords |
59 | | int degree); // function |
60 | | |
61 | | double step( // step change |
62 | | double x1, // between coords |
63 | | double x2); |
64 | | double y( // evaluate |
65 | | double x) const; // at x |
66 | | |
67 | | void move( // reposition spline |
68 | | ICOORD vec); // by vector |
69 | | bool overlap( // test overlap |
70 | | QSPLINE *spline2, // 2 cannot be smaller |
71 | | double fraction); // by more than this |
72 | | void extrapolate( // linear extrapolation |
73 | | double gradient, // gradient to use |
74 | | int left, // new left edge |
75 | | int right); // new right edge |
76 | | |
77 | | #ifndef GRAPHICS_DISABLED |
78 | | void plot( // draw it |
79 | | ScrollView *window, // in window |
80 | | ScrollView::Color colour) const; // in colour |
81 | | #endif |
82 | | |
83 | | // Paint the baseline over pix. If pix has depth of 32, then the line will |
84 | | // be painted in red. Otherwise it will be painted in black. |
85 | | void plot(Image pix) const; |
86 | | |
87 | | QSPLINE &operator=(const QSPLINE &source); // from this |
88 | | |
89 | | private: |
90 | | int32_t spline_index( // binary search |
91 | | double x) const; // for x |
92 | | int32_t segments; // no of segments |
93 | | int32_t *xcoords; // no of coords |
94 | | QUAD_COEFFS *quadratics; // spline pieces |
95 | | }; |
96 | | |
97 | | } // namespace tesseract |
98 | | |
99 | | #endif |