/** * Convert each segment in the outline to a feature * and return the features. * @param Blob blob to extract pico-features from * @return Outline-features for Blob. * @note Globals: none * @note Exceptions: none * @note History: * - 11/13/90, DSJ, Created. * - 05/24/91, DSJ, Updated for either char or baseline normalize. */ FEATURE_SET Classify::ExtractOutlineFeatures(TBLOB *Blob) { LIST Outlines; LIST RemainingOutlines; MFOUTLINE Outline; FEATURE_SET FeatureSet; FLOAT32 XScale, YScale; FeatureSet = NewFeatureSet (MAX_OUTLINE_FEATURES); if (Blob == NULL) return (FeatureSet); Outlines = ConvertBlob (Blob); NormalizeOutlines(Outlines, &XScale, &YScale); RemainingOutlines = Outlines; iterate(RemainingOutlines) { Outline = (MFOUTLINE) first_node (RemainingOutlines); ConvertToOutlineFeatures(Outline, FeatureSet); } if (classify_norm_method == baseline) NormalizeOutlineX(FeatureSet); FreeOutlines(Outlines); return (FeatureSet); } /* ExtractOutlineFeatures */
FEATURE_SET Classify::ExtractOutlineFeatures(TBLOB *Blob) { /* ** Parameters: ** Blob blob to extract pico-features from ** LineStats statistics on text row blob is in ** Globals: none ** Operation: Convert each segment in the outline to a feature ** and return the features. ** Return: Outline-features for Blob. ** Exceptions: none ** History: 11/13/90, DSJ, Created. ** 05/24/91, DSJ, Updated for either char or baseline normalize. */ LIST Outlines; LIST RemainingOutlines; MFOUTLINE Outline; FEATURE_SET FeatureSet; FLOAT32 XScale, YScale; FeatureSet = NewFeatureSet (MAX_OUTLINE_FEATURES); if (Blob == NULL) return (FeatureSet); Outlines = ConvertBlob (Blob); NormalizeOutlines(Outlines, &XScale, &YScale); RemainingOutlines = Outlines; iterate(RemainingOutlines) { Outline = (MFOUTLINE) first_node (RemainingOutlines); ConvertToOutlineFeatures(Outline, FeatureSet); } if (classify_norm_method == baseline) NormalizeOutlineX(FeatureSet); FreeOutlines(Outlines); return (FeatureSet); } /* ExtractOutlineFeatures */