Tesseract  3.02
tesseract-ocr/classify/ocrfeatures.h File Reference
#include "blobs.h"
#include <stdio.h>

Go to the source code of this file.

Classes

struct  PARAM_DESC
struct  FEATURE_DESC_STRUCT
struct  FEATURE_STRUCT
struct  FEATURE_SET_STRUCT
struct  FEATURE_EXT_STRUCT

Defines

#define FEAT_NAME_SIZE   80
#define ILLEGAL_FEATURE_PARAM   1000
#define ILLEGAL_NUM_FEATURES   1001
#define StartParamDesc(Name)   const PARAM_DESC Name[] = {
#define DefineParam(Circular, NonEssential, Min, Max)
#define EndParamDesc   };
#define DefineFeature(Name, NL, NC, SN, PN)

Typedefs

typedef FEATURE_DESC_STRUCTFEATURE_DESC
typedef FEATURE_STRUCTFEATURE
typedef FEATURE_SET_STRUCTFEATURE_SET
typedef char * CHAR_FEATURES
typedef FEATURE_SET(* FX_FUNC )(TBLOB *, const DENORM &)

Functions

BOOL8 AddFeature (FEATURE_SET FeatureSet, FEATURE Feature)
void FreeFeature (FEATURE Feature)
void FreeFeatureSet (FEATURE_SET FeatureSet)
FEATURE NewFeature (const FEATURE_DESC_STRUCT *FeatureDesc)
FEATURE_SET NewFeatureSet (int NumFeatures)
FEATURE ReadFeature (FILE *File, const FEATURE_DESC_STRUCT *FeatureDesc)
FEATURE_SET ReadFeatureSet (FILE *File, const FEATURE_DESC_STRUCT *FeatureDesc)
void WriteFeature (FILE *File, FEATURE Feature)
void WriteFeatureSet (FILE *File, FEATURE_SET FeatureSet)
void WriteOldParamDesc (FILE *File, const FEATURE_DESC_STRUCT *FeatureDesc)

Define Documentation

#define DefineFeature (   Name,
  NL,
  NC,
  SN,
  PN 
)
Value:
const FEATURE_DESC_STRUCT Name = {                              \
        ((NL) + (NC)), SN, PN};

Definition at line 105 of file ocrfeatures.h.

#define DefineParam (   Circular,
  NonEssential,
  Min,
  Max 
)
Value:
{Circular, NonEssential, Min, Max,                      \
        (Max) - (Min), (((Max) - (Min))/2.0), (((Max) + (Min))/2.0)},

Definition at line 93 of file ocrfeatures.h.

#define EndParamDesc   };

Definition at line 97 of file ocrfeatures.h.

#define FEAT_NAME_SIZE   80

Definition at line 32 of file ocrfeatures.h.

#define ILLEGAL_FEATURE_PARAM   1000

Definition at line 35 of file ocrfeatures.h.

#define ILLEGAL_NUM_FEATURES   1001

Definition at line 36 of file ocrfeatures.h.

#define StartParamDesc (   Name)    const PARAM_DESC Name[] = {

Definition at line 90 of file ocrfeatures.h.


Typedef Documentation

typedef char* CHAR_FEATURES

Definition at line 79 of file ocrfeatures.h.

Definition at line 66 of file ocrfeatures.h.

Definition at line 60 of file ocrfeatures.h.

Definition at line 73 of file ocrfeatures.h.

typedef FEATURE_SET(* FX_FUNC)(TBLOB *, const DENORM &)

Definition at line 81 of file ocrfeatures.h.


Function Documentation

BOOL8 AddFeature ( FEATURE_SET  FeatureSet,
FEATURE  Feature 
)

---------------------------------------------------------------------------- Include Files and Type Defines ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Public Code ----------------------------------------------------------------------------

Definition at line 35 of file ocrfeatures.cpp.

                                                          {
/*
 **     Parameters:
 **             FeatureSet      set of features to add Feature to
 **             Feature         feature to be added to FeatureSet
 **     Globals: none
 **     Operation: Add a feature to a feature set.  If the feature set is
 **             already full, FALSE is returned to indicate that the
 **             feature could not be added to the set; otherwise, TRUE is
 **             returned.
 **     Return: TRUE if feature added to set, FALSE if set is already full.
 **     Exceptions: none
 **     History: Tue May 22 17:22:23 1990, DSJ, Created.
 */
  if (FeatureSet->NumFeatures >= FeatureSet->MaxNumFeatures) {
    FreeFeature(Feature);
    return FALSE;
  }

  FeatureSet->Features[FeatureSet->NumFeatures++] = Feature;
  return TRUE;
}                                /* AddFeature */
void FreeFeature ( FEATURE  Feature)

Definition at line 59 of file ocrfeatures.cpp.

                                  {
/*
 **     Parameters:
 **             Feature         feature to be deallocated.
 **     Globals: none
 **     Operation: Release the memory consumed by the specified feature.
 **     Return: none
 **     Exceptions: none
 **     History: Mon May 21 13:33:27 1990, DSJ, Created.
 */
  if (Feature) {
    free_struct (Feature, sizeof (FEATURE_STRUCT)
      + sizeof (FLOAT32) * (Feature->Type->NumParams - 1),
      "sizeof(FEATURE_STRUCT)+sizeof(FLOAT32)*(NumParamsIn(Feature)-1)");
  }

}                                /* FreeFeature */
void FreeFeatureSet ( FEATURE_SET  FeatureSet)

Definition at line 79 of file ocrfeatures.cpp.

                                            {
/*
 **     Parameters:
 **             FeatureSet      set of features to be freed
 **     Globals: none
 **     Operation: Release the memory consumed by the specified feature
 **             set.  This routine also frees the memory consumed by the
 **             features contained in the set.
 **     Return: none
 **     Exceptions: none
 **     History: Mon May 21 13:59:46 1990, DSJ, Created.
 */
  int i;

  if (FeatureSet) {
    for (i = 0; i < FeatureSet->NumFeatures; i++)
      FreeFeature(FeatureSet->Features[i]);
    memfree(FeatureSet);
  }
}                                /* FreeFeatureSet */
FEATURE NewFeature ( const FEATURE_DESC_STRUCT FeatureDesc)

Definition at line 102 of file ocrfeatures.cpp.

                                                           {
/*
 **     Parameters:
 **             FeatureDesc     description of feature to be created.
 **     Globals: none
 **     Operation: Allocate and return a new feature of the specified
 **             type.
 **     Return: New feature.
 **     Exceptions: none
 **     History: Mon May 21 14:06:42 1990, DSJ, Created.
 */
  FEATURE Feature;

  Feature = (FEATURE) alloc_struct (sizeof (FEATURE_STRUCT) +
    (FeatureDesc->NumParams - 1) *
    sizeof (FLOAT32),
    "sizeof(FEATURE_STRUCT)+sizeof(FLOAT32)*(NumParamsIn(Feature)-1)");
  Feature->Type = FeatureDesc;
  return (Feature);

}                                /* NewFeature */
FEATURE_SET NewFeatureSet ( int  NumFeatures)

Definition at line 126 of file ocrfeatures.cpp.

                                           {
/*
 **     Parameters:
 **             NumFeatures     maximum # of features to be put in feature set
 **     Globals: none
 **     Operation: Allocate and return a new feature set large enough to
 **             hold the specified number of features.
 **     Return: New feature set.
 **     Exceptions: none
 **     History: Mon May 21 14:22:40 1990, DSJ, Created.
 */
  FEATURE_SET FeatureSet;

  FeatureSet = (FEATURE_SET) Emalloc (sizeof (FEATURE_SET_STRUCT) +
    (NumFeatures - 1) * sizeof (FEATURE));
  FeatureSet->MaxNumFeatures = NumFeatures;
  FeatureSet->NumFeatures = 0;
  return (FeatureSet);

}                                /* NewFeatureSet */
FEATURE ReadFeature ( FILE *  File,
const FEATURE_DESC_STRUCT FeatureDesc 
)

Definition at line 149 of file ocrfeatures.cpp.

                                                                        {
/*
 **     Parameters:
 **             File            open text file to read feature from
 **             FeatureDesc     specifies type of feature to read from File
 **     Globals: none
 **     Operation: Create a new feature of the specified type and read in
 **             the value of its parameters from File.  The extra penalty
 **             for the feature is also computed by calling the appropriate
 **             function for the specified feature type.  The correct text
 **             representation for a feature is a list of N floats where
 **             N is the number of parameters in the feature.
 **     Return: New feature read from File.
 **     Exceptions: ILLEGAL_FEATURE_PARAM if text file doesn't match expected format
 **     History: Wed May 23 08:53:16 1990, DSJ, Created.
 */
  FEATURE Feature;
  int i;

  Feature = NewFeature (FeatureDesc);
  for (i = 0; i < Feature->Type->NumParams; i++) {
    if (fscanf (File, "%f", &(Feature->Params[i])) != 1)
      DoError (ILLEGAL_FEATURE_PARAM, "Illegal feature parameter spec");
#ifndef _WIN32
    assert (!isnan(Feature->Params[i]));
#endif
  }
  return (Feature);

}                                /* ReadFeature */
FEATURE_SET ReadFeatureSet ( FILE *  File,
const FEATURE_DESC_STRUCT FeatureDesc 
)

Definition at line 182 of file ocrfeatures.cpp.

                                                                               {
/*
 **     Parameters:
 **             File            open text file to read new feature set from
 **             FeatureDesc     specifies type of feature to read from File
 **     Globals: none
 **     Operation: Create a new feature set of the specified type and read in
 **             the features from File.  The correct text representation
 **             for a feature set is an integer which specifies the number (N)
 **             of features in a set followed by a list of N feature
 **             descriptions.
 **     Return: New feature set read from File.
 **     Exceptions: none
 **     History: Wed May 23 09:17:31 1990, DSJ, Created.
 */
  FEATURE_SET FeatureSet;
  int NumFeatures;
  int i;

  if (fscanf (File, "%d", &NumFeatures) != 1 || NumFeatures < 0)
    DoError (ILLEGAL_NUM_FEATURES, "Illegal number of features in set");

  FeatureSet = NewFeatureSet (NumFeatures);
  for (i = 0; i < NumFeatures; i++)
    AddFeature (FeatureSet, ReadFeature (File, FeatureDesc));

  return (FeatureSet);

}                                /* ReadFeatureSet */
void WriteFeature ( FILE *  File,
FEATURE  Feature 
)

Definition at line 214 of file ocrfeatures.cpp.

                                               {
/*
 **     Parameters:
 **             File            open text file to write Feature to
 **             Feature         feature to write out to File
 **     Globals: none
 **     Operation: Write a textual representation of Feature to File.
 **             This representation is simply a list of the N parameters
 **             of the feature, terminated with a newline.  It is assumed
 **             that the ExtraPenalty field can be reconstructed from the
 **             parameters of the feature.  It is also assumed that the
 **             feature type information is specified or assumed elsewhere.
 **     Return: none
 **     Exceptions: none
 **     History: Wed May 23 09:28:18 1990, DSJ, Created.
 */
  int i;

  for (i = 0; i < Feature->Type->NumParams; i++) {
#ifndef _WIN32
    assert(!isnan(Feature->Params[i]));
#endif
    fprintf(File, " %g", Feature->Params[i]);
  }
  fprintf(File, "\n");
}                                /* WriteFeature */
void WriteFeatureSet ( FILE *  File,
FEATURE_SET  FeatureSet 
)

Definition at line 243 of file ocrfeatures.cpp.

                                                         {
/*
 **     Parameters:
 **             File            open text file to write FeatureSet to
 **             FeatureSet      feature set to write to File
 **     Globals: none
 **     Operation: Write a textual representation of FeatureSet to File.
 **             This representation is an integer specifying the number of
 **             features in the set, followed by a newline, followed by
 **             text representations for each feature in the set.
 **     Return: none
 **     Exceptions: none
 **     History: Wed May 23 10:06:03 1990, DSJ, Created.
 */
  int i;

  if (FeatureSet) {
    fprintf (File, "%d\n", FeatureSet->NumFeatures);
    for (i = 0; i < FeatureSet->NumFeatures; i++)
      WriteFeature (File, FeatureSet->Features[i]);
  }
}                                /* WriteFeatureSet */
void WriteOldParamDesc ( FILE *  File,
const FEATURE_DESC_STRUCT FeatureDesc 
)

Definition at line 268 of file ocrfeatures.cpp.

                                                                           {
/*
 **     Parameters:
 **             File            open text file to write FeatureDesc to
 **             FeatureDesc     feature descriptor to write to File
 **     Globals: none
 **     Operation: Write a textual representation of FeatureDesc to File
 **             in the old format (i.e. the format used by the clusterer).
 **             This format is:
 **                     Number of Params
 **                     Description of Param 1
 **                     ...
 **     Return: none
 **     Exceptions: none
 **     History: Fri May 25 15:27:18 1990, DSJ, Created.
 */
  int i;

  fprintf (File, "%d\n", FeatureDesc->NumParams);
  for (i = 0; i < FeatureDesc->NumParams; i++) {
    if (FeatureDesc->ParamDesc[i].Circular)
      fprintf (File, "circular ");
    else
      fprintf (File, "linear   ");

    if (FeatureDesc->ParamDesc[i].NonEssential)
      fprintf (File, "non-essential  ");
    else
      fprintf (File, "essential      ");

    fprintf (File, "%f  %f\n",
      FeatureDesc->ParamDesc[i].Min, FeatureDesc->ParamDesc[i].Max);
  }
}                                /* WriteOldParamDesc */