comparison mupdf-source/thirdparty/tesseract/src/textord/pithsync.h @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 /**********************************************************************
2 * File: pithsync.h (Formerly pitsync2.h)
3 * Description: Code to find the optimum fixed pitch segmentation of some blobs.
4 * Author: Ray Smith
5 *
6 * (C) Copyright 1992, Hewlett-Packard Ltd.
7 ** Licensed under the Apache License, Version 2.0 (the "License");
8 ** you may not use this file except in compliance with the License.
9 ** You may obtain a copy of the License at
10 ** http://www.apache.org/licenses/LICENSE-2.0
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 *
17 **********************************************************************/
18
19 #ifndef PITHSYNC_H
20 #define PITHSYNC_H
21
22 #include "blobbox.h"
23 #include "params.h"
24 #include "statistc.h"
25
26 namespace tesseract {
27
28 class FPSEGPT_LIST;
29
30 class FPCUTPT {
31 public:
32 FPCUTPT() = default;
33 void setup( // start of cut
34 FPCUTPT cutpts[], // predecessors
35 int16_t array_origin, // start coord
36 STATS *projection, // occupation
37 int16_t zero_count, // official zero
38 int16_t pitch, // proposed pitch
39 int16_t x, // position
40 int16_t offset); // dist to gap
41
42 void assign( // evaluate cut
43 FPCUTPT cutpts[], // predecessors
44 int16_t array_origin, // start coord
45 int16_t x, // position
46 bool faking, // faking this one
47 bool mid_cut, // doing free cut
48 int16_t offset, // extra cost dist
49 STATS *projection, // occupation
50 float projection_scale, // scaling
51 int16_t zero_count, // official zero
52 int16_t pitch, // proposed pitch
53 int16_t pitch_error); // allowed tolerance
54
55 void assign_cheap( // evaluate cut
56 FPCUTPT cutpts[], // predecessors
57 int16_t array_origin, // start coord
58 int16_t x, // position
59 bool faking, // faking this one
60 bool mid_cut, // doing free cut
61 int16_t offset, // extra cost dist
62 STATS *projection, // occupation
63 float projection_scale, // scaling
64 int16_t zero_count, // official zero
65 int16_t pitch, // proposed pitch
66 int16_t pitch_error); // allowed tolerance
67
68 int32_t position() { // access func
69 return xpos;
70 }
71 double cost_function() {
72 return cost;
73 }
74 double squares() {
75 return sq_sum;
76 }
77 double sum() {
78 return mean_sum;
79 }
80 FPCUTPT *previous() {
81 return pred;
82 }
83 int16_t cheap_cuts() const { // no of mi cuts
84 return mid_cuts;
85 }
86 int16_t index() const {
87 return region_index;
88 }
89
90 bool faked; // faked split point
91 bool terminal; // successful end
92 int16_t fake_count; // total fakes to here
93
94 private:
95 int16_t region_index; // cut serial number
96 int16_t mid_cuts; // no of cheap cuts
97 int32_t xpos; // location
98 uint32_t back_balance; // proj backwards
99 uint32_t fwd_balance; // proj forwards
100 FPCUTPT *pred; // optimal previous
101 double mean_sum; // mean so far
102 double sq_sum; // summed distsances
103 double cost; // cost function
104 };
105 double check_pitch_sync2( // find segmentation
106 BLOBNBOX_IT *blob_it, // blobs to do
107 int16_t blob_count, // no of blobs
108 int16_t pitch, // pitch estimate
109 int16_t pitch_error, // tolerance
110 STATS *projection, // vertical
111 int16_t projection_left, // edges //scale factor
112 int16_t projection_right, float projection_scale,
113 int16_t &occupation_count, // no of occupied cells
114 FPSEGPT_LIST *seg_list, // output list
115 int16_t start, // start of good range
116 int16_t end // end of good range
117 );
118 double check_pitch_sync3( // find segmentation
119 int16_t projection_left, // edges //to be considered 0
120 int16_t projection_right, int16_t zero_count,
121 int16_t pitch, // pitch estimate
122 int16_t pitch_error, // tolerance
123 STATS *projection, // vertical
124 float projection_scale, // scale factor
125 int16_t &occupation_count, // no of occupied cells
126 FPSEGPT_LIST *seg_list, // output list
127 int16_t start, // start of good range
128 int16_t end // end of good range
129 );
130
131 } // namespace tesseract
132
133 #endif