"Fossies" - the Fresh Open Source Software Archive

Member "tesseract-ocr/doc/html/blkocc_8h_source.html" (26 Oct 2012, 58136 Bytes) of package /linux/misc/old/tesseract-ocr-3.02.02-doc-html.tar.gz:


Caution: In this restricted "Fossies" environment the current HTML page may not be correctly presentated and may have some non-functional links. You can here alternatively try to browse the pure source code or just view or download the uninterpreted raw source code. If the rendering is insufficient you may try to find and view the page on the tesseract-ocr-3.02.02-doc-html.tar.gz project site itself.

Tesseract  3.02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
blkocc.h
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * File: blkocc.h (Formerly blockocc.h)
4  * Description: Block Occupancy routines
5  * Author: Chris Newton
6  * Created: Fri Nov 8
7  * Modified:
8  * Language: C++
9  * Package: N/A
10  * Status: Experimental (Do Not Distribute)
11  *
12  * (c) Copyright 1991, Hewlett-Packard Company.
13  ** Licensed under the Apache License, Version 2.0 (the "License");
14  ** you may not use this file except in compliance with the License.
15  ** You may obtain a copy of the License at
16  ** http://www.apache.org/licenses/LICENSE-2.0
17  ** Unless required by applicable law or agreed to in writing, software
18  ** distributed under the License is distributed on an "AS IS" BASIS,
19  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  ** See the License for the specific language governing permissions and
21  ** limitations under the License.
22  *
23  ******************************************************************************/
24 
25 #ifndef BLKOCC_H
26 #define BLKOCC_H
27 
28 #include "params.h"
29 #include "elst.h"
30 #include "notdll.h"
31 #include "notdll.h"
32 
33 /***************************************************************************
34 CLASS REGION_OCC
35 
36  The class REGION_OCC defines a section of outline which exists entirely
37  within a single region. The only data held is the min and max x limits of
38  the outline within the region.
39 
40  REGION_OCCs are held on lists, one list for each region. The lists are
41  built in sorted order of min x. Overlapping REGION_OCCs are not permitted on
42  a single list. An overlapping region to be added causes the existing region
43  to be extended. This extension may result in the following REGION_OCC on the
44  list overlapping the ammended one. In this case the ammended REGION_OCC is
45  further extended to include the range of the following one, so that the
46  following one can be deleted.
47 
48 ****************************************************************************/
49 
50 class REGION_OCC:public ELIST_LINK
51 {
52  public:
53  float min_x; //Lowest x in region
54  float max_x; //Highest x in region
55  inT16 region_type; //Type of crossing
56 
58  }; //constructor used
59  //only in COPIER etc
60  REGION_OCC( //constructor
61  float min,
62  float max,
63  inT16 region) {
64  min_x = min;
65  max_x = max;
66  region_type = region;
67  }
68 };
69 
71 #define RANGE_IN_BAND( band_max, band_min, range_max, range_min ) \
72 ( ((range_min) >= (band_min)) && ((range_max) < (band_max)) ) ? TRUE : FALSE
73 /************************************************************************
74 Adapted from the following procedure so that it can be used in the bands
75 class in an include file...
76 
77 BOOL8 range_in_band[
78  range within band?
79 inT16 band_max,
80 inT16 band_min,
81 inT16 range_max,
82 inT16 range_min]
83 {
84  if ( (range_min >= band_min) && (range_max < band_max) )
85  return TRUE;
86  else
87  return FALSE;
88 }
89 ***********************************************************************/
90 #define RANGE_OVERLAPS_BAND( band_max, band_min, range_max, range_min ) \
91 ( ((range_max) >= (band_min)) && ((range_min) < (band_max)) ) ? TRUE : FALSE
92 /************************************************************************
93 Adapted from the following procedure so that it can be used in the bands
94 class in an include file...
95 
96 BOOL8 range_overlaps_band[
97  range crosses band?
98 inT16 band_max,
99 inT16 band_min,
100 inT16 range_max,
101 inT16 range_min]
102 {
103  if ( (range_max >= band_min) && (range_min < band_max) )
104  return TRUE;
105  else
106  return FALSE;
107 }
108 ***********************************************************************/
109 /**********************************************************************
110  Bands
111  -----
112 
113  BAND 4
114 --------------------------------
115  BAND 3
116 --------------------------------
117 
118  BAND 2
119 
120 --------------------------------
121 
122  BAND 1
123 
124 Band 0 is the dot band
125 
126 Each band has an error margin above and below. An outline is not considered to
127 have significantly changed bands until it has moved out of the error margin.
128 *************************************************************************/
129 class BAND
130 {
131  public:
132  inT16 max_max; //upper max
133  inT16 max; //nominal max
134  inT16 min_max; //lower max
135  inT16 max_min; //upper min
136  inT16 min; //nominal min
137  inT16 min_min; //lower min
138 
139  BAND() {
140  } // constructor
141 
142  void set( // initialise a band
143  inT16 new_max_max, // upper max
144  inT16 new_max, // new nominal max
145  inT16 new_min_max, // new lower max
146  inT16 new_max_min, // new upper min
147  inT16 new_min, // new nominal min
148  inT16 new_min_min) { // new lower min
149  max_max = new_max_max;
150  max = new_max;
151  min_max = new_min_max;
152  max_min = new_max_min;
153  min = new_min;
154  min_min = new_min_min;
155  }
156 
157  BOOL8 in_minimal( //in minimal limits?
158  float y) { //y value
159  if ((y >= max_min) && (y < min_max))
160  return TRUE;
161  else
162  return FALSE;
163  }
164 
165  BOOL8 in_nominal( //in nominal limits?
166  float y) { //y value
167  if ((y >= min) && (y < max))
168  return TRUE;
169  else
170  return FALSE;
171  }
172 
173  BOOL8 in_maximal( //in maximal limits?
174  float y) { //y value
175  if ((y >= min_min) && (y < max_max))
176  return TRUE;
177  else
178  return FALSE;
179  }
180 
181  //overlaps min limits?
182  BOOL8 range_overlaps_minimal(float y1, //one range limit
183  float y2) { //other range limit
184  if (y1 > y2)
185  return RANGE_OVERLAPS_BAND (min_max, max_min, y1, y2);
186  else
187  return RANGE_OVERLAPS_BAND (min_max, max_min, y2, y1);
188  }
189 
190  //overlaps nom limits?
191  BOOL8 range_overlaps_nominal(float y1, //one range limit
192  float y2) { //other range limit
193  if (y1 > y2)
194  return RANGE_OVERLAPS_BAND (max, min, y1, y2);
195  else
196  return RANGE_OVERLAPS_BAND (max, min, y2, y1);
197  }
198 
199  //overlaps max limits?
200  BOOL8 range_overlaps_maximal(float y1, //one range limit
201  float y2) { //other range limit
202  if (y1 > y2)
203  return RANGE_OVERLAPS_BAND (max_max, min_min, y1, y2);
204  else
205  return RANGE_OVERLAPS_BAND (max_max, min_min, y2, y1);
206  }
207 
208  BOOL8 range_in_minimal( //within min limits?
209  float y1, //one range limit
210  float y2) { //other range limit
211  if (y1 > y2)
212  return RANGE_IN_BAND (min_max, max_min, y1, y2);
213  else
214  return RANGE_IN_BAND (min_max, max_min, y2, y1);
215  }
216 
217  BOOL8 range_in_nominal( //within nom limits?
218  float y1, //one range limit
219  float y2) { //other range limit
220  if (y1 > y2)
221  return RANGE_IN_BAND (max, min, y1, y2);
222  else
223  return RANGE_IN_BAND (max, min, y2, y1);
224  }
225 
226  BOOL8 range_in_maximal( //within max limits?
227  float y1, //one range limit
228  float y2) { //other range limit
229  if (y1 > y2)
230  return RANGE_IN_BAND (max_max, min_min, y1, y2);
231  else
232  return RANGE_IN_BAND (max_max, min_min, y2, y1);
233  }
234 };
235 
236 /* Standard positions */
237 
238 #define MAX_NUM_BANDS 5
239 #define UNDEFINED_BAND 99
240 #define NO_LOWER_LIMIT -9999
241 #define NO_UPPER_LIMIT 9999
242 
243 #define DOT_BAND 0
244 
245 /* Special occupancy code emitted for the 0 region at the end of a word */
246 
247 #define END_OF_WERD_CODE 255
248 
249 extern BOOL_VAR_H (blockocc_show_result, FALSE, "Show intermediate results");
250 extern INT_VAR_H (blockocc_desc_height, 0,
251 "Descender height after normalisation");
252 extern INT_VAR_H (blockocc_asc_height, 255,
253 "Ascender height after normalisation");
254 extern INT_VAR_H (blockocc_band_count, 4, "Number of bands used");
256 "Fraction of width occupied");
257 
258 BOOL8 test_underline( //look for underlines
259  BOOL8 testing_on, //drawing blob
260  C_BLOB *blob, //blob to test
261  inT16 baseline, //coords of baseline
262  inT16 xheight //height of line
263  );
264 
265 #endif