tesseract  4.00.00dev
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  ** History: Thu May 17 08:55:32 1990, DSJ, Created.
6  **
7  ** (c) Copyright Hewlett-Packard Company, 1988.
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 #ifndef MFOUTLINE_H
19 #define MFOUTLINE_H
20 
24 #include "blobs.h"
25 #include "host.h"
26 #include "oldlist.h"
27 #include "fpoint.h"
28 #include "params.h"
29 
30 #define NORMAL_X_HEIGHT (0.5)
31 #define NORMAL_BASELINE (0.0)
32 
33 typedef LIST MFOUTLINE;
34 
35 typedef enum {
37 } DIRECTION;
38 
39 typedef struct {
42  unsigned Padding:20;
47 } MFEDGEPT;
48 
49 typedef enum {
51 } OUTLINETYPE;
52 
53 typedef enum {
55 } NORM_METHOD;
56 
60 #define AverageOf(A,B) (((A) + (B)) / 2)
61 
62 /* macro for computing the scale factor to use to normalize characters */
63 #define MF_SCALE_FACTOR (NORMAL_X_HEIGHT / kBlnXHeight)
64 
65 /* macros for manipulating micro-feature outlines */
66 #define DegenerateOutline(O) (((O) == NIL_LIST) || ((O) == list_rest(O)))
67 #define PointAt(O) ((MFEDGEPT *) first_node (O))
68 #define NextPointAfter(E) (list_rest (E))
69 #define MakeOutlineCircular(O) (set_rest (last (O), (O)))
70 
71 /* macros for manipulating micro-feature outline edge points */
72 #define ClearMark(P) ((P)->ExtremityMark = FALSE)
73 #define MarkPoint(P) ((P)->ExtremityMark = TRUE)
74 
78 void ComputeBlobCenter(TBLOB *Blob, TPOINT *BlobCenter);
79 
80 LIST ConvertBlob(TBLOB *Blob);
81 
83 
85  LIST ConvertedOutlines,
86  OUTLINETYPE OutlineType);
87 
88 void FilterEdgeNoise(MFOUTLINE Outline, FLOAT32 NoiseSegmentLength);
89 
90 void FindDirectionChanges(MFOUTLINE Outline,
91  FLOAT32 MinSlope,
92  FLOAT32 MaxSlope);
93 
94 void FreeMFOutline(void *agr); //MFOUTLINE Outline);
95 
96 void FreeOutlines(LIST Outlines);
97 
98 void MarkDirectionChanges(MFOUTLINE Outline);
99 
101 
103 
104 void NormalizeOutline(MFOUTLINE Outline,
105  FLOAT32 XOrigin);
106 
107 /*----------------------------------------------------------------------------
108  Private Function Prototypes
109 -----------------------------------------------------------------------------*/
110 void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction);
111 
112 // Normalizes the Outline in-place using cn_denorm's local transformation,
113 // then converts from the integer feature range [0,255] to the clusterer
114 // feature range of [-0.5, 0.5].
115 void CharNormalizeOutline(MFOUTLINE Outline, const DENORM& cn_denorm);
116 
117 void ComputeDirection(MFEDGEPT *Start,
118  MFEDGEPT *Finish,
119  FLOAT32 MinSlope,
120  FLOAT32 MaxSlope);
121 
123 
124 #endif
void FreeOutlines(LIST Outlines)
Definition: mfoutline.cpp:179
void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm)
Definition: mfoutline.cpp:359
void FilterEdgeNoise(MFOUTLINE Outline, FLOAT32 NoiseSegmentLength)
Definition: fpoint.h:29
MFOUTLINE NextDirectionChange(MFOUTLINE EdgePoint)
Definition: mfoutline.cpp:465
DIRECTION PreviousDirection
Definition: mfoutline.h:46
#define TRUE
Definition: capi.h:45
void MarkDirectionChanges(MFOUTLINE Outline)
Definition: mfoutline.cpp:199
Definition: mfoutline.h:50
LIST MFOUTLINE
Definition: mfoutline.h:33
unsigned char BOOL8
Definition: host.h:44
BOOL8 Hidden
Definition: mfoutline.h:43
unsigned Padding
Definition: mfoutline.h:42
Definition: mfoutline.h:36
DIRECTION Direction
Definition: mfoutline.h:45
float FLOAT32
Definition: host.h:42
MFOUTLINE ConvertOutline(TESSLINE *Outline)
Definition: mfoutline.cpp:50
Definition: blobs.h:261
void ComputeBlobCenter(TBLOB *Blob, TPOINT *BlobCenter)
FPOINT Point
Definition: mfoutline.h:40
void ComputeDirection(MFEDGEPT *Start, MFEDGEPT *Finish, FLOAT32 MinSlope, FLOAT32 MaxSlope)
Definition: mfoutline.cpp:400
Definition: blobs.h:50
OUTLINETYPE
Definition: mfoutline.h:49
NORM_METHOD
Definition: mfoutline.h:53
MFEDGEPT * NewEdgePoint()
Definition: mfoutline.cpp:221
void FindDirectionChanges(MFOUTLINE Outline, FLOAT32 MinSlope, FLOAT32 MaxSlope)
Definition: mfoutline.cpp:121
LIST ConvertOutlines(TESSLINE *Outline, LIST ConvertedOutlines, OUTLINETYPE OutlineType)
Definition: mfoutline.cpp:92
LIST ConvertBlob(TBLOB *Blob)
Definition: mfoutline.cpp:40
void FreeMFOutline(void *agr)
Definition: mfoutline.cpp:155
BOOL8 ExtremityMark
Definition: mfoutline.h:44
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)
Definition: mfoutline.cpp:239
Definition: mfoutline.h:36
void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction)
Definition: mfoutline.cpp:338
void NormalizeOutline(MFOUTLINE Outline, FLOAT32 XOrigin)
Definition: mfoutline.cpp:265
DIRECTION
Definition: mfoutline.h:35
FLOAT32 Slope
Definition: mfoutline.h:41