37 "Slope below which lines are called horizontal");
39 "Slope above which lines are called vertical");
45 #define NormalizeAngle(A) ( (((A)<0)?((A)+2*PI):(A)) / (2*PI) )
79 LIST RemainingOutlines;
87 if (!
ExtractIntFeat(Blob, denorm, blfeatures, cnfeatures, &results))
89 XScale = 0.2f / results.
Ry;
90 YScale = 0.2f / results.
Rx;
92 RemainingOutlines = Outlines;
100 RemainingOutlines = Outlines;
142 if ((Orientation < 0) || (Orientation >= 1))
144 return (Orientation);
168 return (MicroFeatures);
174 if (!
PointAt(Current)->Hidden) {
176 if (NewFeature !=
NULL)
177 MicroFeatures =
push (MicroFeatures, NewFeature);
181 while (Last != First);
183 return (MicroFeatures);
CHAR_FEATURES BlobMicroFeatures(TBLOB *Blob, const DENORM &denorm)
void FindDirectionChanges(MFOUTLINE Outline, FLOAT32 MinSlope, FLOAT32 MaxSlope)
void CharNormalizeOutline(MFOUTLINE Outline, FLOAT32 XCenter, FLOAT32 YCenter, FLOAT32 XScale, FLOAT32 YScale)
#define NormalizeAngle(A)
LIST push(LIST list, void *element)
void MarkDirectionChanges(MFOUTLINE Outline)
FLOAT32 NormalizedAngleFrom(FPOINT *Point1, FPOINT *Point2, FLOAT32 FullScale)
FEATURE NewFeature(const FEATURE_DESC_STRUCT *FeatureDesc)
FLOAT32 DistanceBetween(FPOINT A, FPOINT B)
#define DegenerateOutline(O)
MICROFEATURE ExtractMicroFeature(MFOUTLINE Start, MFOUTLINE End)
#define double_VAR(name, val, comment)
void FreeOutlines(LIST Outlines)
double classify_max_slope
FLOAT32 ComputeOrientation(MFEDGEPT *Start, MFEDGEPT *End)
LIST ConvertBlob(TBLOB *blob)
INT_FEATURE_STRUCT INT_FEATURE_ARRAY[MAX_NUM_INT_FEATURES]
MICROFEATURE NewMicroFeature()
int ExtractIntFeat(TBLOB *Blob, const DENORM &denorm, INT_FEATURE_ARRAY BLFeat, INT_FEATURE_ARRAY CNFeat, INT_FX_RESULT_STRUCT *Results, inT32 *FeatureOutlineArray)
MICROFEATURES ConvertToMicroFeatures(MFOUTLINE Outline, MICROFEATURES MicroFeatures)
double classify_min_slope
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)