tesseract 4.1.1
Loading...
Searching...
No Matches
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
24#include "blobs.h"
25#include "fpoint.h"
26#include "oldlist.h"
27#include "params.h"
28
30
31enum DIRECTION : uint8_t {
40};
41
42struct MFEDGEPT {
43 // Inline functions for manipulating micro-feature outline edge points.
44
45 void ClearMark() {
46 ExtremityMark = false;
47 }
48
49 void MarkPoint() {
50 ExtremityMark = true;
51 }
52
54 float Slope;
55 bool Hidden;
59};
60
62
64
68#define AverageOf(A, B) (((A) + (B)) / 2)
69
70// Constant for computing the scale factor to use to normalize characters.
71const float MF_SCALE_FACTOR = 0.5f / kBlnXHeight;
72
73// Inline functions for manipulating micro-feature outlines.
74
75static inline bool DegenerateOutline(MFOUTLINE Outline) {
76 return (Outline == NIL_LIST) || (Outline == list_rest(Outline));
77}
78
79static inline MFEDGEPT* PointAt(MFOUTLINE Outline) {
80 return reinterpret_cast<MFEDGEPT*>first_node(Outline);
81}
82
83static inline MFOUTLINE NextPointAfter(MFOUTLINE Outline) {
84 return list_rest(Outline);
85}
86
87static inline void MakeOutlineCircular(MFOUTLINE Outline) {
88 set_rest(last(Outline), Outline);
89}
90
94void ComputeBlobCenter(TBLOB* Blob, TPOINT* BlobCenter);
95
97
99
100LIST ConvertOutlines(TESSLINE* Outline, LIST ConvertedOutlines,
101 OUTLINETYPE OutlineType);
102
103void FilterEdgeNoise(MFOUTLINE Outline, float NoiseSegmentLength);
104
105void FindDirectionChanges(MFOUTLINE Outline, float MinSlope, float MaxSlope);
106
107void FreeMFOutline(void* agr); // MFOUTLINE Outline);
108
109void FreeOutlines(LIST Outlines);
110
111void MarkDirectionChanges(MFOUTLINE Outline);
112
114
116
117void NormalizeOutline(MFOUTLINE Outline, float XOrigin);
118
119/*----------------------------------------------------------------------------
120 Private Function Prototypes
121-----------------------------------------------------------------------------*/
122void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction);
123
124// Normalizes the Outline in-place using cn_denorm's local transformation,
125// then converts from the integer feature range [0,255] to the clusterer
126// feature range of [-0.5, 0.5].
127void CharNormalizeOutline(MFOUTLINE Outline, const DENORM& cn_denorm);
128
129void ComputeDirection(MFEDGEPT* Start, MFEDGEPT* Finish, float MinSlope,
130 float MaxSlope);
131
133
134#endif
const int kBlnXHeight
Definition: normalis.h:24
MFEDGEPT * NewEdgePoint()
Definition: mfoutline.cpp:205
MFOUTLINE NextDirectionChange(MFOUTLINE EdgePoint)
Definition: mfoutline.cpp:435
NORM_METHOD
Definition: mfoutline.h:63
@ baseline
Definition: mfoutline.h:63
@ character
Definition: mfoutline.h:63
const float MF_SCALE_FACTOR
Definition: mfoutline.h:71
LIST ConvertBlob(TBLOB *Blob)
Definition: mfoutline.cpp:37
void FilterEdgeNoise(MFOUTLINE Outline, float NoiseSegmentLength)
void FreeOutlines(LIST Outlines)
Definition: mfoutline.cpp:167
MFOUTLINE ConvertOutline(TESSLINE *Outline)
Definition: mfoutline.cpp:47
void NormalizeOutline(MFOUTLINE Outline, float XOrigin)
Definition: mfoutline.cpp:242
void ComputeDirection(MFEDGEPT *Start, MFEDGEPT *Finish, float MinSlope, float MaxSlope)
Definition: mfoutline.cpp:364
DIRECTION
Definition: mfoutline.h:31
@ south
Definition: mfoutline.h:33
@ southwest
Definition: mfoutline.h:39
@ east
Definition: mfoutline.h:34
@ north
Definition: mfoutline.h:32
@ northwest
Definition: mfoutline.h:37
@ west
Definition: mfoutline.h:35
@ southeast
Definition: mfoutline.h:38
@ northeast
Definition: mfoutline.h:36
void FreeMFOutline(void *agr)
Definition: mfoutline.cpp:146
void FindDirectionChanges(MFOUTLINE Outline, float MinSlope, float MaxSlope)
Definition: mfoutline.cpp:115
LIST ConvertOutlines(TESSLINE *Outline, LIST ConvertedOutlines, OUTLINETYPE OutlineType)
Definition: mfoutline.cpp:89
OUTLINETYPE
Definition: mfoutline.h:61
@ outer
Definition: mfoutline.h:61
@ hole
Definition: mfoutline.h:61
void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction)
Definition: mfoutline.cpp:310
void ComputeBlobCenter(TBLOB *Blob, TPOINT *BlobCenter)
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)
Definition: mfoutline.cpp:220
void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm)
Definition: mfoutline.cpp:327
void MarkDirectionChanges(MFOUTLINE Outline)
Definition: mfoutline.cpp:183
LIST last(LIST var_list)
Definition: oldlist.cpp:190
#define set_rest(l, cell)
Definition: oldlist.h:111
list_rec * LIST
Definition: oldlist.h:85
#define first_node(l)
Definition: oldlist.h:92
#define list_rest(l)
Definition: oldlist.h:91
#define NIL_LIST
Definition: oldlist.h:76
Definition: blobs.h:51
Definition: blobs.h:284
Definition: fpoint.h:29
FPOINT Point
Definition: mfoutline.h:53
DIRECTION Direction
Definition: mfoutline.h:57
DIRECTION PreviousDirection
Definition: mfoutline.h:58
float Slope
Definition: mfoutline.h:54
void ClearMark()
Definition: mfoutline.h:45
bool ExtremityMark
Definition: mfoutline.h:56
void MarkPoint()
Definition: mfoutline.h:49
bool Hidden
Definition: mfoutline.h:55