Tesseract 3.02

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Hierarchy
- Class Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Attributes
IntegerMatcher Class Reference

`#include <intmatcher.h>`

List of all members.

## Public Member Functions

| IntegerMatcher ()
void | Init (tesseract::IntParam *classify_debug_level, int classify_integer_matcher_multiplier)
void | SetBaseLineMatch ()
void | SetCharNormMatch (int integer_matcher_multiplier)
void | Match (INT_CLASS ClassTemplate, BIT_VECTOR ProtoMask, BIT_VECTOR ConfigMask, inT16 NumFeatures, const INT_FEATURE_STRUCT *Features, INT_RESULT Result, int AdaptFeatureThreshold, int Debug, bool SeparateDebugWindows)
float | ApplyCNCorrection (float rating, int blob_length, int normalization_factor)
int | FindGoodProtos (INT_CLASS ClassTemplate, BIT_VECTOR ProtoMask, BIT_VECTOR ConfigMask, uinT16 BlobLength, inT16 NumFeatures, INT_FEATURE_ARRAY Features, PROTO_ID *ProtoArray, int AdaptProtoThreshold, int Debug)
int | FindBadFeatures (INT_CLASS ClassTemplate, BIT_VECTOR ProtoMask, BIT_VECTOR ConfigMask, uinT16 BlobLength, inT16 NumFeatures, INT_FEATURE_ARRAY Features, FEATURE_ID *FeatureArray, int AdaptFeatureThreshold, int Debug)

## Static Public Attributes

static const int | kIntThetaFudge = 128
static const int | kEvidenceTableBits = 9
static const int | kIntEvidenceTruncBits = 14
static const float | kSEExponentialMultiplier = 0.0
static const float | kSimilarityCenter = 0.0075

## Detailed Description

Definition at line 90 of file intmatcher.h.

## Constructor & Destructor Documentation

IntegerMatcher::IntegerMatcher | ( |  | ) |

inline

Definition at line 103 of file intmatcher.h.

: classify_debug_level_(0) {}

## Member Function Documentation

float IntegerMatcher::ApplyCNCorrection | ( | float | rating,
|  | int | blob_length,
|  | int | normalization_factor
| ) |  |

Definition at line 1285 of file intmatcher.cpp.

{
return (rating * blob_length +
local_matcher_multiplier_ * normalization_factor / 256.0) /
(blob_length + local_matcher_multiplier_);
}

int IntegerMatcher::FindBadFeatures | ( | INT_CLASS | ClassTemplate,
|  | BIT_VECTOR | ProtoMask,
|  | BIT_VECTOR | ConfigMask,
|  | uinT16 | BlobLength,
|  | inT16 | NumFeatures,
|  | INT_FEATURE_ARRAY | Features,
|  | FEATURE_ID * | FeatureArray,
|  | int | AdaptFeatureThreshold,
|  | int | Debug
| ) |  |

Definition at line 625 of file intmatcher.cpp.

{
/*
** Parameters:
** ClassTemplate Prototypes & tables for a class
** ProtoMask AND Mask for proto word
** ConfigMask AND Mask for config word
** BlobLength Length of unormalized blob
** NumFeatures Number of features in blob
** Features Array of features
** FeatureArray Array of bad features
** AdaptFeatureThreshold Threshold for bad features
** Debug Debugger flag: 1=debugger on
** Operation:
** FindBadFeatures finds all features with maximum feature-evidence <
** AdaptFeatureThresh. The list is ordered by increasing feature number.
** Return:
** Number of bad features in FeatureArray.
** History: Tue Mar 12 17:09:26 MST 1991, RWM, Created
*/
ScratchEvidence *tables = new ScratchEvidence();
int NumBadFeatures = 0;
/* DEBUG opening heading */
if (MatchDebuggingOn(Debug))
cprintf("Find Bad Features -------------------------------------------\n");
tables->Clear(ClassTemplate);
for (int Feature = 0; Feature < NumFeatures; Feature++) {
UpdateTablesForFeature(
ClassTemplate, ProtoMask, ConfigMask, Feature, &Features[Feature],
tables, Debug);
/* Find Best Evidence for Current Feature */
int best = 0;
for (int i = 0; i < ClassTemplate->NumConfigs; i++)
if (tables->feature_evidence_[i] > best)
best = tables->feature_evidence_[i];
/* Find Bad Features */
if (best < AdaptFeatureThreshold) {
*FeatureArray = Feature;
FeatureArray++;
NumBadFeatures++;
}
}
#ifndef GRAPHICS_DISABLED
if (PrintProtoMatchesOn(Debug) || PrintMatchSummaryOn(Debug))
DebugFeatureProtoError(ClassTemplate, ProtoMask, ConfigMask, *tables,
NumFeatures, Debug);
#endif
if (MatchDebuggingOn(Debug))
cprintf("Match Complete --------------------------------------------\n");
delete tables;
return NumBadFeatures;
}

int IntegerMatcher::FindGoodProtos | ( | INT_CLASS | ClassTemplate,
|  | BIT_VECTOR | ProtoMask,
|  | BIT_VECTOR | ConfigMask,
|  | uinT16 | BlobLength,
|  | inT16 | NumFeatures,
|  | INT_FEATURE_ARRAY | Features,
|  | PROTO_ID * | ProtoArray,
|  | int | AdaptProtoThreshold,
|  | int | Debug
| ) |  |

Definition at line 546 of file intmatcher.cpp.

{
/*
** Parameters:
** ClassTemplate Prototypes & tables for a class
** ProtoMask AND Mask for proto word
** ConfigMask AND Mask for config word
** BlobLength Length of unormalized blob
** NumFeatures Number of features in blob
** Features Array of features
** ProtoArray Array of good protos
** AdaptProtoThreshold Threshold for good protos
** Debug Debugger flag: 1=debugger on
** Globals:
** local_matcher_multiplier_ Normalization factor multiplier
** Operation:
** FindGoodProtos finds all protos whose normalized proto-evidence
** exceed classify_adapt_proto_thresh. The list is ordered by increasing
** proto id number.
** Return:
** Number of good protos in ProtoArray.
** Exceptions: none
** History: Tue Mar 12 17:09:26 MST 1991, RWM, Created
*/
ScratchEvidence *tables = new ScratchEvidence();
int NumGoodProtos = 0;
/* DEBUG opening heading */
if (MatchDebuggingOn (Debug))
cprintf
("Find Good Protos -------------------------------------------\n");
tables->Clear(ClassTemplate);
for (int Feature = 0; Feature < NumFeatures; Feature++)
UpdateTablesForFeature(
ClassTemplate, ProtoMask, ConfigMask, Feature, &(Features[Feature]),
tables, Debug);
#ifndef GRAPHICS_DISABLED
if (PrintProtoMatchesOn (Debug) || PrintMatchSummaryOn (Debug))
DebugFeatureProtoError(ClassTemplate, ProtoMask, ConfigMask, *tables,
NumFeatures, Debug);
#endif
/* Average Proto Evidences & Find Good Protos */
for (int proto = 0; proto < ClassTemplate->NumProtos; proto++) {
/* Compute Average for Actual Proto */
int Temp = 0;
for (int i = 0; i < ClassTemplate->ProtoLengths[proto]; i++)
Temp += tables->proto_evidence_[proto][i];
Temp /= ClassTemplate->ProtoLengths[proto];
/* Find Good Protos */
if (Temp >= AdaptProtoThreshold) {
*ProtoArray = proto;
ProtoArray++;
NumGoodProtos++;
}
}
if (MatchDebuggingOn (Debug))
cprintf ("Match Complete --------------------------------------------\n");
delete tables;
return NumGoodProtos;
}

void IntegerMatcher::Init | ( | tesseract::IntParam * | classify_debug_level,
|  | int | classify_integer_matcher_multiplier
| ) |  |

Definition at line 696 of file intmatcher.cpp.

{
classify_debug_level_ = classify_debug_level;
/* Set default mode of operation of IntegerMatcher */
SetCharNormMatch(classify_integer_matcher_multiplier);
/* Initialize table for evidence to similarity lookup */
for (int i = 0; i < SE_TABLE_SIZE; i++) {
uinT32 IntSimilarity = i << (27 - SE_TABLE_BITS);
double Similarity = ((double) IntSimilarity) / 65536.0 / 65536.0;
double evidence = Similarity / kSimilarityCenter;
evidence = 255.0 / (evidence * evidence + 1.0);
if (kSEExponentialMultiplier > 0.0) {
double scale = 1.0 - exp(-kSEExponentialMultiplier) *
exp(kSEExponentialMultiplier * ((double) i / SE_TABLE_SIZE));
evidence *= ClipToRange(scale, 0.0, 1.0);
}
similarity_evidence_table_[i] = (uinT8) (evidence + 0.5);
}
/* Initialize evidence computation variables */
evidence_table_mask_ =
((1 << kEvidenceTableBits) - 1) << (9 - kEvidenceTableBits);
mult_trunc_shift_bits_ = (14 - kIntEvidenceTruncBits);
table_trunc_shift_bits_ = (27 - SE_TABLE_BITS - (mult_trunc_shift_bits_ << 1));
evidence_mult_mask_ = ((1 << kIntEvidenceTruncBits) - 1);
}

void IntegerMatcher::Match | ( | INT_CLASS | ClassTemplate,
|  | BIT_VECTOR | ProtoMask,
|  | BIT_VECTOR | ConfigMask,
|  | inT16 | NumFeatures,
|  | const INT_FEATURE_STRUCT * | Features,
|  | INT_RESULT | Result,
|  | int | AdaptFeatureThreshold,
|  | int | Debug,
|  | bool | SeparateDebugWindows
| ) |  |

Definition at line 460 of file intmatcher.cpp.

{
/*
** Parameters:
** ClassTemplate Prototypes & tables for a class
** BlobLength Length of unormalized blob
** NumFeatures Number of features in blob
** Features Array of features
** NormalizationFactor Fudge factor from blob
** normalization process
** Result Class rating & configuration:
** (0.0 -> 1.0), 0=good, 1=bad
** Debug Debugger flag: 1=debugger on
** Globals:
** local_matcher_multiplier_ Normalization factor multiplier
** Operation:
** IntegerMatcher returns the best configuration and rating
** for a single class. The class matched against is determined
** by the uniqueness of the ClassTemplate parameter. The
** best rating and its associated configuration are returned.
** Return:
** Exceptions: none
** History: Tue Feb 19 16:36:23 MST 1991, RWM, Created.
*/
ScratchEvidence *tables = new ScratchEvidence();
int Feature;
int BestMatch;
if (MatchDebuggingOn (Debug))
cprintf ("Integer Matcher -------------------------------------------\n");
tables->Clear(ClassTemplate);
Result->FeatureMisses = 0;
for (Feature = 0; Feature < NumFeatures; Feature++) {
int csum = UpdateTablesForFeature(ClassTemplate, ProtoMask, ConfigMask,
Feature, &Features[Feature],
tables, Debug);
// Count features that were missed over all configs.
if (csum == 0)
Result->FeatureMisses++;
}
#ifndef GRAPHICS_DISABLED
if (PrintProtoMatchesOn(Debug) || PrintMatchSummaryOn(Debug)) {
DebugFeatureProtoError(ClassTemplate, ProtoMask, ConfigMask, *tables,
NumFeatures, Debug);
}
if (DisplayProtoMatchesOn(Debug)) {
DisplayProtoDebugInfo(ClassTemplate, ProtoMask, ConfigMask,
*tables, SeparateDebugWindows);
}
if (DisplayFeatureMatchesOn(Debug)) {
DisplayFeatureDebugInfo(ClassTemplate, ProtoMask, ConfigMask, NumFeatures,
Features, AdaptFeatureThreshold, Debug,
SeparateDebugWindows);
}
#endif
tables->UpdateSumOfProtoEvidences(ClassTemplate, ConfigMask, NumFeatures);
tables->NormalizeSums(ClassTemplate, NumFeatures, NumFeatures);
BestMatch = FindBestMatch(ClassTemplate, *tables, Result);
#ifndef GRAPHICS_DISABLED
if (PrintMatchSummaryOn(Debug))
DebugBestMatch(BestMatch, Result);
if (MatchDebuggingOn(Debug))
cprintf("Match Complete --------------------------------------------\n");
#endif
delete tables;
}

void IntegerMatcher::SetBaseLineMatch | ( |  | ) |

Definition at line 728 of file intmatcher.cpp.

{
local_matcher_multiplier_ = 0;
}

void IntegerMatcher::SetCharNormMatch | ( | int | integer_matcher_multiplier | ) |

Definition at line 734 of file intmatcher.cpp.

{
local_matcher_multiplier_ = integer_matcher_multiplier;
}

## Member Data Documentation

const int IntegerMatcher::kEvidenceTableBits = 9

static

Definition at line 95 of file intmatcher.h.

const int IntegerMatcher::kIntEvidenceTruncBits = 14

static

Definition at line 97 of file intmatcher.h.

const int IntegerMatcher::kIntThetaFudge = 128

static

Definition at line 93 of file intmatcher.h.

const float IntegerMatcher::kSEExponentialMultiplier = 0.0

static

Definition at line 99 of file intmatcher.h.

const float IntegerMatcher::kSimilarityCenter = 0.0075

static

Definition at line 101 of file intmatcher.h.

The documentation for this class was generated from the following files:

- /mnt/data/src/tesseract-ocr/classify/intmatcher.h
- /mnt/data/src/tesseract-ocr/classify/intmatcher.cpp