tesseract 3.04.01

classify/mfx.cpp File Reference

#include "mfdefs.h"
#include "mfoutline.h"
#include "clusttool.h"
#include "const.h"
#include "intfx.h"
#include "normalis.h"
#include "params.h"
#include <math.h>

Go to the source code of this file.

Defines

#define NormalizeAngle(A)   ( (((A)<0)?((A)+2*PI):(A)) / (2*PI) )

Functions

FLOAT32 ComputeOrientation (MFEDGEPT *Start, MFEDGEPT *End)
MICROFEATURES ConvertToMicroFeatures (MFOUTLINE Outline, MICROFEATURES MicroFeatures)
MICROFEATURE ExtractMicroFeature (MFOUTLINE Start, MFOUTLINE End)
MICROFEATURES BlobMicroFeatures (TBLOB *Blob, const DENORM &cn_denorm)

Variables

double classify_min_slope = 0.414213562
double classify_max_slope = 2.414213562

Define Documentation

#define NormalizeAngle (   A)    ( (((A)<0)?((A)+2*PI):(A)) / (2*PI) )

Definition at line 45 of file mfx.cpp.


Function Documentation

MICROFEATURES BlobMicroFeatures ( TBLOB Blob,
const DENORM cn_denorm 
)

This routine extracts micro-features from the specified blob and returns a list of the micro-features. All micro-features are normalized according to the specified line statistics.

Parameters:
Blobblob to extract micro-features from
cn_denormcontrol parameter to feature extractor
Returns:
List of micro-features extracted from the blob.
Note:
Exceptions: none
History: 7/21/89, DSJ, Created.

Definition at line 72 of file mfx.cpp.

                                                                      {
  MICROFEATURES MicroFeatures = NIL_LIST;
  LIST Outlines;
  LIST RemainingOutlines;
  MFOUTLINE Outline;

  if (Blob != NULL) {
    Outlines = ConvertBlob(Blob);

    RemainingOutlines = Outlines;
    iterate(RemainingOutlines) {
      Outline = (MFOUTLINE) first_node (RemainingOutlines);
      CharNormalizeOutline(Outline, cn_denorm);
    }

    RemainingOutlines = Outlines;
    iterate(RemainingOutlines) {
      Outline = (MFOUTLINE) first_node(RemainingOutlines);
      FindDirectionChanges(Outline, classify_min_slope, classify_max_slope);
      MarkDirectionChanges(Outline);
      MicroFeatures = ConvertToMicroFeatures(Outline, MicroFeatures);
    }
    FreeOutlines(Outlines);
  }
  return MicroFeatures;
}                                /* BlobMicroFeatures */
FLOAT32 ComputeOrientation ( MFEDGEPT Start,
MFEDGEPT End 
)

This routine computes the orientation parameter of the specified micro-feature. The orientation is the angle of the vector from Start to End. It is normalized to a number between 0 and 1 where 0 corresponds to 0 degrees and 1 corresponds to 360 degrees. The actual range is [0,1), i.e. 1 is excluded from the range (since it is actual the same orientation as 0). This routine assumes that Start and End are not the same point.

Parameters:
Startstarting edge point of micro-feature
Endending edge point of micro-feature
Note:
Globals: none
Returns:
Orientation parameter for the specified micro-feature.
Note:
Exceptions: none
History: 7/27/89, DSJ, Created.

Definition at line 120 of file mfx.cpp.

                                                           {
  FLOAT32 Orientation;

  Orientation = NormalizeAngle (AngleFrom (Start->Point, End->Point));

  /* ensure that round-off errors do not put circular param out of range */
  if ((Orientation < 0) || (Orientation >= 1))
    Orientation = 0;
  return (Orientation);
}                                /* ComputeOrientation */
MICROFEATURES ConvertToMicroFeatures ( MFOUTLINE  Outline,
MICROFEATURES  MicroFeatures 
)

Convert Outline to MicroFeatures

Parameters:
Outlineoutline to extract micro-features from
MicroFeatureslist of micro-features to add to
Returns:
List of micro-features with new features added to front.
Note:
Globals: none
Exceptions: none
History: 7/26/89, DSJ, Created.

Definition at line 141 of file mfx.cpp.

                                                                  {
  MFOUTLINE Current;
  MFOUTLINE Last;
  MFOUTLINE First;
  MICROFEATURE NewFeature;

  if (DegenerateOutline (Outline))
    return (MicroFeatures);

  First = NextExtremity (Outline);
  Last = First;
  do {
    Current = NextExtremity (Last);
    if (!PointAt(Current)->Hidden) {
      NewFeature = ExtractMicroFeature (Last, Current);
      if (NewFeature != NULL)
        MicroFeatures = push (MicroFeatures, NewFeature);
    }
    Last = Current;
  }
  while (Last != First);

  return (MicroFeatures);
}                                /* ConvertToMicroFeatures */
MICROFEATURE ExtractMicroFeature ( MFOUTLINE  Start,
MFOUTLINE  End 
)

This routine computes the feature parameters which describe the micro-feature that starts and Start and ends at End. A new micro-feature is allocated, filled with the feature parameters, and returned. The routine assumes that Start and End are not the same point. If they are the same point, NULL is returned, a warning message is printed, and the current outline is dumped to stdout.

Parameters:
Startstarting point of micro-feature
Endending point of micro-feature
Returns:
New micro-feature or NULL if the feature was rejected.
Note:
Globals: none
Exceptions: none
History:
  • 7/26/89, DSJ, Created.
  • 11/17/89, DSJ, Added handling for Start and End same point.

Definition at line 185 of file mfx.cpp.

                                                                 {
  MICROFEATURE NewFeature;
  MFEDGEPT *P1, *P2;

  P1 = PointAt(Start);
  P2 = PointAt(End);

  NewFeature = NewMicroFeature ();
  NewFeature[XPOSITION] = AverageOf(P1->Point.x, P2->Point.x);
  NewFeature[YPOSITION] = AverageOf(P1->Point.y, P2->Point.y);
  NewFeature[MFLENGTH] = DistanceBetween(P1->Point, P2->Point);
  NewFeature[ORIENTATION] = NormalizedAngleFrom(&P1->Point, &P2->Point, 1.0);
  NewFeature[FIRSTBULGE] = 0.0f;  // deprecated
  NewFeature[SECONDBULGE] = 0.0f;  // deprecated

  return NewFeature;
}                                /* ExtractMicroFeature */

Variable Documentation

double classify_max_slope = 2.414213562

"Slope above which lines are called vertical"

Definition at line 39 of file mfx.cpp.

double classify_min_slope = 0.414213562

"Slope below which lines are called horizontal"

Definition at line 37 of file mfx.cpp.

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines