Tesseract
3.02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
outfeat.cpp
Go to the documentation of this file.
1
/******************************************************************************
2
** Filename: outfeat.c
3
** Purpose: Definition of outline-features.
4
** Author: Dan Johnson
5
** History: 11/13/90, 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
******************************************************************************/
21
#include "
outfeat.h
"
22
23
#include "
classify.h
"
24
#include "
efio.h
"
25
#include "
featdefs.h
"
26
#include "
mfoutline.h
"
27
#include "
ocrfeatures.h
"
28
29
#include <stdio.h>
30
34
/*---------------------------------------------------------------------------*/
35
namespace
tesseract
{
36
FEATURE_SET
Classify::ExtractOutlineFeatures
(
TBLOB
*Blob) {
37
/*
38
** Parameters:
39
** Blob blob to extract pico-features from
40
** LineStats statistics on text row blob is in
41
** Globals: none
42
** Operation: Convert each segment in the outline to a feature
43
** and return the features.
44
** Return: Outline-features for Blob.
45
** Exceptions: none
46
** History: 11/13/90, DSJ, Created.
47
** 05/24/91, DSJ, Updated for either char or baseline normalize.
48
*/
49
LIST
Outlines;
50
LIST
RemainingOutlines;
51
MFOUTLINE
Outline;
52
FEATURE_SET
FeatureSet;
53
FLOAT32
XScale, YScale;
54
55
FeatureSet =
NewFeatureSet
(
MAX_OUTLINE_FEATURES
);
56
if
(Blob ==
NULL
)
57
return
(FeatureSet);
58
59
Outlines =
ConvertBlob
(Blob);
60
61
NormalizeOutlines
(Outlines, &XScale, &YScale);
62
RemainingOutlines = Outlines;
63
iterate
(RemainingOutlines) {
64
Outline = (
MFOUTLINE
)
first_node
(RemainingOutlines);
65
ConvertToOutlineFeatures
(Outline, FeatureSet);
66
}
67
if
(
classify_norm_method
==
baseline
)
68
NormalizeOutlineX
(FeatureSet);
69
FreeOutlines
(Outlines);
70
return
(FeatureSet);
71
}
/* ExtractOutlineFeatures */
72
}
// namespace tesseract
73
77
/*---------------------------------------------------------------------------*/
78
void
AddOutlineFeatureToSet
(
FPOINT
*Start,
79
FPOINT
*End,
80
FEATURE_SET
FeatureSet) {
81
/*
82
** Parameters:
83
** Start starting point of outline-feature
84
** End ending point of outline-feature
85
** FeatureSet set to add outline-feature to
86
** Globals: none
87
** Operation: This routine computes the midpoint between Start and
88
** End to obtain the x,y position of the outline-feature. It
89
** also computes the direction from Start to End as the
90
** direction of the outline-feature and the distance from
91
** Start to End as the length of the outline-feature.
92
** This feature is then
93
** inserted into the next feature slot in FeatureSet.
94
** Return: none (results are placed in FeatureSet)
95
** Exceptions: none
96
** History: 11/13/90, DSJ, Created.
97
*/
98
FEATURE
Feature;
99
100
Feature =
NewFeature
(&
OutlineFeatDesc
);
101
Feature->
Params
[
OutlineFeatDir
] =
NormalizedAngleFrom
(Start, End, 1.0);
102
Feature->
Params
[
OutlineFeatX
] =
AverageOf
(Start->
x
, End->
x
);
103
Feature->
Params
[
OutlineFeatY
] =
AverageOf
(Start->
y
, End->
y
);
104
Feature->
Params
[
OutlineFeatLength
] =
DistanceBetween
(*Start, *End);
105
AddFeature
(FeatureSet, Feature);
106
107
}
/* AddOutlineFeatureToSet */
108
109
110
/*---------------------------------------------------------------------------*/
111
void
ConvertToOutlineFeatures
(
MFOUTLINE
Outline,
FEATURE_SET
FeatureSet) {
112
/*
113
** Parameters:
114
** Outline outline to extract outline-features from
115
** FeatureSet set of features to add outline-features to
116
** Globals: none
117
** Operation:
118
** This routine steps converts each section in the specified
119
** outline to a feature described by its x,y position, length
120
** and angle.
121
** Return: none (results are returned in FeatureSet)
122
** Exceptions: none
123
** History: 11/13/90, DSJ, Created.
124
** 5/24/91, DSJ, Added hidden edge capability.
125
*/
126
MFOUTLINE
Next;
127
MFOUTLINE
First;
128
FPOINT
FeatureStart;
129
FPOINT
FeatureEnd;
130
131
if
(
DegenerateOutline
(Outline))
132
return
;
133
134
First = Outline;
135
Next = First;
136
do
{
137
FeatureStart =
PointAt
(Next)->Point;
138
Next =
NextPointAfter
(Next);
139
140
/* note that an edge is hidden if the ending point of the edge is
141
marked as hidden. This situation happens because the order of
142
the outlines is reversed when they are converted from the old
143
format. In the old format, a hidden edge is marked by the
144
starting point for that edge. */
145
if
(!
PointAt
(Next)->Hidden) {
146
FeatureEnd =
PointAt
(Next)->Point;
147
AddOutlineFeatureToSet
(&FeatureStart, &FeatureEnd, FeatureSet);
148
}
149
}
150
while
(Next != First);
151
}
/* ConvertToOutlineFeatures */
152
153
154
/*---------------------------------------------------------------------------*/
155
void
NormalizeOutlineX
(
FEATURE_SET
FeatureSet) {
156
/*
157
** Parameters:
158
** FeatureSet outline-features to be normalized
159
** Globals: none
160
** Operation: This routine computes the weighted average x position
161
** over all of the outline-features in FeatureSet and then
162
** renormalizes the outline-features to force this average
163
** to be the x origin (i.e. x=0).
164
** Return: none (FeatureSet is changed)
165
** Exceptions: none
166
** History: 11/13/90, DSJ, Created.
167
*/
168
int
i;
169
FEATURE
Feature;
170
FLOAT32
Length;
171
FLOAT32
TotalX = 0.0;
172
FLOAT32
TotalWeight = 0.0;
173
FLOAT32
Origin;
174
175
if
(FeatureSet->
NumFeatures
<= 0)
176
return
;
177
178
for
(i = 0; i < FeatureSet->
NumFeatures
; i++) {
179
Feature = FeatureSet->
Features
[i];
180
Length = Feature->
Params
[
OutlineFeatLength
];
181
TotalX += Feature->
Params
[
OutlineFeatX
] * Length;
182
TotalWeight += Length;
183
}
184
Origin = TotalX / TotalWeight;
185
186
for
(i = 0; i < FeatureSet->
NumFeatures
; i++) {
187
Feature = FeatureSet->
Features
[i];
188
Feature->
Params
[
OutlineFeatX
] -= Origin;
189
}
190
}
/* NormalizeOutlineX */
mnt
data
src
tesseract-ocr
classify
outfeat.cpp
Generated on Thu Nov 1 2012 20:19:47 for Tesseract by
1.8.1