57 LIST RemainingOutlines;
59 if (Blob !=
nullptr) {
62 RemainingOutlines = Outlines;
68 RemainingOutlines = Outlines;
96 if (DegenerateOutline(Outline)) {
97 return (MicroFeatures);
104 if (!PointAt(Current)->Hidden) {
106 MicroFeatures.push_front(NewFeature);
109 }
while (Last != First);
111 return MicroFeatures;
#define double_VAR(name, val, comment)
float DistanceBetween(FPOINT A, FPOINT B)
float NormalizedAngleFrom(FPOINT *Point1, FPOINT *Point2, float FullScale)
MicroFeature ExtractMicroFeature(MFOUTLINE Start, MFOUTLINE End)
MICROFEATURES BlobMicroFeatures(TBLOB *Blob, const DENORM &cn_denorm)
void FreeOutlines(LIST Outlines)
void MarkDirectionChanges(MFOUTLINE Outline)
double classify_max_slope
LIST ConvertBlob(TBLOB *blob)
void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm)
std::array< float,(int) MicroFeatureParameter::MFCount > MicroFeature
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)
MICROFEATURES ConvertToMicroFeatures(MFOUTLINE Outline, MICROFEATURES MicroFeatures)
double classify_min_slope
std::forward_list< MicroFeature > MICROFEATURES
void FindDirectionChanges(MFOUTLINE Outline, float MinSlope, float MaxSlope)