tesseract 4.1.1
Loading...
Searching...
No Matches
mf.cpp
Go to the documentation of this file.
1/******************************************************************************
2 ** Filename: mf.c
3 ** Purpose: Micro-feature interface to flexible feature extractor.
4 ** Author: Dan Johnson
5 ** History: Thu May 24 09:08:38 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/*----------------------------------------------------------------------------
19 Include Files and Type Defines
20----------------------------------------------------------------------------*/
21#include "mf.h"
22
23#include "featdefs.h"
24#include "mfdefs.h"
25#include "mfx.h"
26
27#include <cmath>
28
29/*----------------------------------------------------------------------------
30 Global Data Definitions and Declarations
31----------------------------------------------------------------------------*/
32/*----------------------------------------------------------------------------
33 Private Code
34----------------------------------------------------------------------------*/
43FEATURE_SET ExtractMicros(TBLOB* Blob, const DENORM& cn_denorm) {
44 int NumFeatures;
45 MICROFEATURES Features, OldFeatures;
46 FEATURE_SET FeatureSet;
47 FEATURE Feature;
48 MICROFEATURE OldFeature;
49
50 OldFeatures = BlobMicroFeatures(Blob, cn_denorm);
51 if (OldFeatures == nullptr)
52 return nullptr;
53 NumFeatures = count (OldFeatures);
54 FeatureSet = NewFeatureSet (NumFeatures);
55
56 Features = OldFeatures;
57 iterate(Features) {
58 OldFeature = reinterpret_cast<MICROFEATURE>first_node (Features);
59 Feature = NewFeature (&MicroFeatureDesc);
60 Feature->Params[MFDirection] = OldFeature[ORIENTATION];
61 Feature->Params[MFXPosition] = OldFeature[XPOSITION];
62 Feature->Params[MFYPosition] = OldFeature[YPOSITION];
63 Feature->Params[MFLength] = OldFeature[MFLENGTH];
64
65 // Bulge features are deprecated and should not be used. Set to 0.
66 Feature->Params[MFBulge1] = 0.0f;
67 Feature->Params[MFBulge2] = 0.0f;
68
69#ifndef _WIN32
70 // Assert that feature parameters are well defined.
71 int i;
72 for (i = 0; i < Feature->Type->NumParams; i++) {
73 ASSERT_HOST(!std::isnan(Feature->Params[i]));
74 }
75#endif
76
77 AddFeature(FeatureSet, Feature);
78 }
79 FreeMicroFeatures(OldFeatures);
80 return FeatureSet;
81} /* ExtractMicros */
#define ASSERT_HOST(x)
Definition: errcode.h:88
const FEATURE_DESC_STRUCT MicroFeatureDesc
FEATURE_SET ExtractMicros(TBLOB *Blob, const DENORM &cn_denorm)
Definition: mf.cpp:43
@ MFBulge2
Definition: mf.h:29
@ MFLength
Definition: mf.h:29
@ MFDirection
Definition: mf.h:29
@ MFXPosition
Definition: mf.h:28
@ MFBulge1
Definition: mf.h:29
@ MFYPosition
Definition: mf.h:28
void FreeMicroFeatures(MICROFEATURES MicroFeatures)
Definition: mfdefs.cpp:42
float * MICROFEATURE
Definition: mfdefs.h:33
#define XPOSITION
Definition: mfdefs.h:36
#define MFLENGTH
Definition: mfdefs.h:38
#define YPOSITION
Definition: mfdefs.h:37
#define ORIENTATION
Definition: mfdefs.h:39
MICROFEATURES BlobMicroFeatures(TBLOB *Blob, const DENORM &cn_denorm)
Definition: mfx.cpp:61
FEATURE NewFeature(const FEATURE_DESC_STRUCT *FeatureDesc)
Definition: ocrfeatures.cpp:78
bool AddFeature(FEATURE_SET FeatureSet, FEATURE Feature)
Definition: ocrfeatures.cpp:40
FEATURE_SET NewFeatureSet(int NumFeatures)
Definition: ocrfeatures.cpp:94
int count(LIST var_list)
Definition: oldlist.cpp:95
#define iterate(l)
Definition: oldlist.h:101
#define first_node(l)
Definition: oldlist.h:92
Definition: blobs.h:284
const FEATURE_DESC_STRUCT * Type
Definition: ocrfeatures.h:60
float Params[1]
Definition: ocrfeatures.h:61