1 /**********************************************************************
2  * File:        pitsync1.h  (Formerly pitsync.h)
3  * Description: Code to find the optimum fixed pitch segmentation of some blobs.
4  * Author:    Ray Smith
5  * Created:   Thu Nov 19 11:48:05 GMT 1992
6  *
7  * (C) Copyright 1992, 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 PITSYNC1_H
21 #define PITSYNC1_H
22 
23 #include "blobbox.h"
24 #include "clst.h"
25 #include "elst.h"
26 #include "params.h"
27 #include "pithsync.h"
28 #include "statistc.h"
29 
30 namespace tesseract {
31 
32 class FPSEGPT_LIST;
33 
34 class FPSEGPT : public ELIST_LINK {
35 public:
36   FPSEGPT() = default;
37   FPSEGPT(                      // constructor
38       int16_t x);               // position
39   FPSEGPT(                      // constructor
40       int16_t x,                // position
41       bool faking,              // faking this one
42       int16_t offset,           // extra cost dist
43       int16_t region_index,     // segment number
44       int16_t pitch,            // proposed pitch
45       int16_t pitch_error,      // allowed tolerance
46       FPSEGPT_LIST *prev_list); // previous segment
47   FPSEGPT(FPCUTPT *cutpt);      // build from new type
48 
position()49   int32_t position() { // access func
50     return xpos;
51   }
cost_function()52   double cost_function() {
53     return cost;
54   }
squares()55   double squares() {
56     return sq_sum;
57   }
sum()58   double sum() {
59     return mean_sum;
60   }
previous()61   FPSEGPT *previous() {
62     return pred;
63   }
cheap_cuts()64   int16_t cheap_cuts() const { // no of cheap cuts
65     return mid_cuts;
66   }
67 
68   bool faked;         // faked split point
69   bool terminal;      // successful end
70   int16_t fake_count; // total fakes to here
71 
72 private:
73   int16_t mid_cuts; // no of cheap cuts
74   int32_t xpos;     // location
75   FPSEGPT *pred;    // optimal previous
76   double mean_sum;  // mean so far
77   double sq_sum;    // summed distsances
78   double cost;      // cost function
79 };
80 
81 ELISTIZEH(FPSEGPT)
82 CLISTIZEH(FPSEGPT_LIST)
83 extern INT_VAR_H(pitsync_linear_version);
84 extern double_VAR_H(pitsync_joined_edge);
85 extern double_VAR_H(pitsync_offset_freecut_fraction);
86 double check_pitch_sync(   // find segmentation
87     BLOBNBOX_IT *blob_it,  // blobs to do
88     int16_t blob_count,    // no of blobs
89     int16_t pitch,         // pitch estimate
90     int16_t pitch_error,   // tolerance
91     STATS *projection,     // vertical
92     FPSEGPT_LIST *seg_list // output list
93 );
94 void make_illegal_segment(   // find segmentation
95     FPSEGPT_LIST *prev_list, // previous segments
96     TBOX blob_box,           // bounding box
97     BLOBNBOX_IT blob_it,     // iterator
98     int16_t region_index,    // number of segment
99     int16_t pitch,           // pitch estimate
100     int16_t pitch_error,     // tolerance
101     FPSEGPT_LIST *seg_list   // output list
102 );
103 int16_t vertical_torow_projection( // project whole row
104     TO_ROW *row,                   // row to do
105     STATS *projection              // output
106 );
107 void vertical_cblob_projection( // project outlines
108     C_BLOB *blob,               // blob to project
109     STATS *stats                // output
110 );
111 void vertical_coutline_projection( // project outlines
112     C_OUTLINE *outline,            // outline to project
113     STATS *stats                   // output
114 );
115 
116 } // namespace tesseract
117 
118 #endif
119