tesseract 3.04.01

classify/ocrfeatures.cpp File Reference

#include "ocrfeatures.h"
#include "emalloc.h"
#include "callcpp.h"
#include "danerror.h"
#include "freelist.h"
#include "scanutils.h"
#include <assert.h>
#include <math.h>

Go to the source code of this file.

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 (FEATURE Feature, STRING *str)
void WriteFeatureSet (FEATURE_SET FeatureSet, STRING *str)
void WriteOldParamDesc (FILE *File, const FEATURE_DESC_STRUCT *FeatureDesc)

Function Documentation

BOOL8 AddFeature ( FEATURE_SET  FeatureSet,
FEATURE  Feature 
)

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.

Parameters:
FeatureSetset of features to add Feature to
Featurefeature to be added to FeatureSet
Returns:
TRUE if feature added to set, FALSE if set is already full.
Note:
History: Tue May 22 17:22:23 1990, DSJ, Created.

Definition at line 44 of file ocrfeatures.cpp.

                                                          {
  if (FeatureSet->NumFeatures >= FeatureSet->MaxNumFeatures) {
    FreeFeature(Feature);
    return FALSE;
  }

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

Release the memory consumed by the specified feature.

Parameters:
Featurefeature to be deallocated.
Returns:
none
Note:
History: Mon May 21 13:33:27 1990, DSJ, Created.

Definition at line 60 of file ocrfeatures.cpp.

                                  {
  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)

Release the memory consumed by the specified feature set. This routine also frees the memory consumed by the features contained in the set.

Parameters:
FeatureSetset of features to be freed
Returns:
none
Note:
History: Mon May 21 13:59:46 1990, DSJ, Created.

Definition at line 78 of file ocrfeatures.cpp.

                                            {
  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)

Allocate and return a new feature of the specified type.

Parameters:
FeatureDescdescription of feature to be created.
Returns:
New FEATURE.
Note:
History: Mon May 21 14:06:42 1990, DSJ, Created.

Definition at line 96 of file ocrfeatures.cpp.

                                                           {
  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)

Allocate and return a new feature set large enough to hold the specified number of features.

Parameters:
NumFeaturesmaximum # of features to be put in feature set
Returns:
New FEATURE_SET.
Note:
History: Mon May 21 14:22:40 1990, DSJ, Created.

Definition at line 116 of file ocrfeatures.cpp.

                                           {
  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 
)

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.

Parameters:
Fileopen text file to read feature from
FeatureDescspecifies type of feature to read from File
Returns:
New FEATURE read from File.
Note:
Exceptions: ILLEGAL_FEATURE_PARAM if text file doesn't match expected format
History: Wed May 23 08:53:16 1990, DSJ, Created.

Definition at line 141 of file ocrfeatures.cpp.

                                                                        {
  FEATURE Feature;
  int i;

  Feature = NewFeature (FeatureDesc);
  for (i = 0; i < Feature->Type->NumParams; i++) {
    if (tfscanf(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 
)

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.

Parameters:
Fileopen text file to read new feature set from
FeatureDescspecifies type of feature to read from File
Returns:
New feature set read from File.
Note:
History: Wed May 23 09:17:31 1990, DSJ, Created.

Definition at line 168 of file ocrfeatures.cpp.

                                                                               {
  FEATURE_SET FeatureSet;
  int NumFeatures;
  int i;

  if (tfscanf(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 ( FEATURE  Feature,
STRING str 
)

Appends a textual representation of Feature to str. 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.

Parameters:
Featurefeature to write out to str
strstring to write Feature to
Returns:
none
Note:
History: Wed May 23 09:28:18 1990, DSJ, Created.

Definition at line 196 of file ocrfeatures.cpp.

                                                {
  for (int i = 0; i < Feature->Type->NumParams; i++) {
#ifndef WIN32
    assert(!isnan(Feature->Params[i]));
#endif
    str->add_str_double(" ", Feature->Params[i]);
  }
  *str += "\n";
}                                /* WriteFeature */
void WriteFeatureSet ( FEATURE_SET  FeatureSet,
STRING str 
)

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.

Parameters:
FeatureSetfeature set to write to File
strstring to write Feature to
Returns:
none
Note:
History: Wed May 23 10:06:03 1990, DSJ, Created.

Definition at line 217 of file ocrfeatures.cpp.

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

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
 *  ...
 * 
Parameters:
Fileopen text file to write FeatureDesc to
FeatureDescfeature descriptor to write to File
Returns:
none
Note:
History: Fri May 25 15:27:18 1990, DSJ, Created.

Definition at line 243 of file ocrfeatures.cpp.

                                                                           {
  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 */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines