tesseract v5.3.3.20231005
mfoutline.h
Go to the documentation of this file.
1/******************************************************************************
2 ** Filename: mfoutline.h
3 ** Purpose: Interface spec for fx outline structures
4 ** Author: Dan Johnson
5 **
6 ** (c) Copyright Hewlett-Packard Company, 1988.
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#ifndef MFOUTLINE_H
19#define MFOUTLINE_H
20
21#include "blobs.h"
22#include "fpoint.h"
23#include "oldlist.h"
24#include "params.h"
25
26namespace tesseract {
27
29
31
32struct MFEDGEPT {
33 // Inline functions for manipulating micro-feature outline edge points.
34
35 void ClearMark() {
36 ExtremityMark = false;
37 }
38
39 void MarkPoint() {
40 ExtremityMark = true;
41 }
42
44 float Slope;
45 bool Hidden;
49};
50
52
54
58#define AverageOf(A, B) (((A) + (B)) / 2)
59
60// Constant for computing the scale factor to use to normalize characters.
61const float MF_SCALE_FACTOR = 0.5f / kBlnXHeight;
62
63// Inline functions for manipulating micro-feature outlines.
64
65static inline bool DegenerateOutline(MFOUTLINE Outline) {
66 return (Outline == NIL_LIST) || (Outline == Outline->list_rest());
67}
68
69static inline MFEDGEPT *PointAt(MFOUTLINE Outline) {
70 return reinterpret_cast<MFEDGEPT *>(Outline->first_node());
71}
72
73static inline MFOUTLINE NextPointAfter(MFOUTLINE Outline) {
74 return Outline->list_rest();
75}
76
77static inline void MakeOutlineCircular(MFOUTLINE Outline) {
78 set_rest(last(Outline), Outline);
79}
80
84void ComputeBlobCenter(TBLOB *Blob, TPOINT *BlobCenter);
85
87
89
90LIST ConvertOutlines(TESSLINE *Outline, LIST ConvertedOutlines, OUTLINETYPE OutlineType);
91
92void FilterEdgeNoise(MFOUTLINE Outline, float NoiseSegmentLength);
93
94void FindDirectionChanges(MFOUTLINE Outline, float MinSlope, float MaxSlope);
95
96void FreeMFOutline(void *agr); // MFOUTLINE Outline);
97
98void FreeOutlines(LIST Outlines);
99
100void MarkDirectionChanges(MFOUTLINE Outline);
101
103
104void NormalizeOutline(MFOUTLINE Outline, float XOrigin);
105
106/*----------------------------------------------------------------------------
107 Private Function Prototypes
108-----------------------------------------------------------------------------*/
109void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction);
110
111// Normalizes the Outline in-place using cn_denorm's local transformation,
112// then converts from the integer feature range [0,255] to the clusterer
113// feature range of [-0.5, 0.5].
114void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm);
115
116void ComputeDirection(MFEDGEPT *Start, MFEDGEPT *Finish, float MinSlope, float MaxSlope);
117
119
120} // namespace tesseract
121
122#endif
#define set_rest(l, cell)
Definition: oldlist.h:101
#define NIL_LIST
Definition: oldlist.h:75
void ComputeBlobCenter(TBLOB *Blob, TPOINT *BlobCenter)
LIST MFOUTLINE
Definition: mfoutline.h:28
LIST last(LIST var_list)
Definition: oldlist.cpp:153
void FreeOutlines(LIST Outlines)
Definition: mfoutline.cpp:151
void MarkDirectionChanges(MFOUTLINE Outline)
Definition: mfoutline.cpp:166
list_rec * LIST
Definition: oldlist.h:125
@ northeast
Definition: mfoutline.h:30
@ southeast
Definition: mfoutline.h:30
@ northwest
Definition: mfoutline.h:30
@ southwest
Definition: mfoutline.h:30
@ character
Definition: mfoutline.h:53
@ baseline
Definition: mfoutline.h:53
const int kBlnXHeight
Definition: normalis.h:33
LIST ConvertBlob(TBLOB *blob)
Definition: mfoutline.cpp:34
void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm)
Definition: mfoutline.cpp:298
const float MF_SCALE_FACTOR
Definition: mfoutline.h:61
MFOUTLINE ConvertOutline(TESSLINE *outline)
Definition: mfoutline.cpp:41
void FilterEdgeNoise(MFOUTLINE Outline, float NoiseSegmentLength)
void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction)
Definition: mfoutline.cpp:280
void FreeMFOutline(void *arg)
Definition: mfoutline.cpp:132
LIST ConvertOutlines(TESSLINE *outline, LIST mf_outlines, OUTLINETYPE outline_type)
Definition: mfoutline.cpp:79
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)
Definition: mfoutline.cpp:196
void ComputeDirection(MFEDGEPT *Start, MFEDGEPT *Finish, float MinSlope, float MaxSlope)
Definition: mfoutline.cpp:335
void FindDirectionChanges(MFOUTLINE Outline, float MinSlope, float MaxSlope)
Definition: mfoutline.cpp:104
void NormalizeOutline(MFOUTLINE Outline, float XOrigin)
Definition: mfoutline.cpp:218
MFOUTLINE NextDirectionChange(MFOUTLINE EdgePoint)
Definition: mfoutline.cpp:402
Definition: fpoint.h:29
DIRECTION Direction
Definition: mfoutline.h:47
DIRECTION PreviousDirection
Definition: mfoutline.h:48
list_rec * list_rest()
Definition: oldlist.h:111