/*---------------------------------------------------------------------------*/ CHAR_FEATURES BlobMicroFeatures(TBLOB *Blob, const DENORM& denorm) { /* ** Parameters: ** Blob blob to extract micro-features from ** denorm control parameter to feature extractor ** Operation: ** 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. ** Return: List of micro-features extracted from the blob. ** Exceptions: none ** History: 7/21/89, DSJ, Created. */ MICROFEATURES MicroFeatures = NIL_LIST; FLOAT32 XScale, YScale; LIST Outlines; LIST RemainingOutlines; MFOUTLINE Outline; INT_FEATURE_ARRAY blfeatures; INT_FEATURE_ARRAY cnfeatures; INT_FX_RESULT_STRUCT results; if (Blob != NULL) { Outlines = ConvertBlob (Blob); if (!ExtractIntFeat(Blob, denorm, blfeatures, cnfeatures, &results)) return NULL; XScale = 0.2f / results.Ry; YScale = 0.2f / results.Rx; RemainingOutlines = Outlines; iterate(RemainingOutlines) { Outline = (MFOUTLINE) first_node (RemainingOutlines); CharNormalizeOutline (Outline, results.Xmean, results.Ymean, XScale, YScale); } RemainingOutlines = Outlines; iterate(RemainingOutlines) { Outline = (MFOUTLINE) first_node (RemainingOutlines); FindDirectionChanges(Outline, classify_min_slope, classify_max_slope); MarkDirectionChanges(Outline); SmearExtremities(Outline, XScale, YScale); MicroFeatures = ConvertToMicroFeatures (Outline, MicroFeatures); } FreeOutlines(Outlines); }
/** * 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. * @param Blob blob to extract micro-features from * @param cn_denorm control parameter to feature extractor * @return List of micro-features extracted from the blob. * @note Exceptions: none * @note History: 7/21/89, DSJ, Created. */ MICROFEATURES BlobMicroFeatures(TBLOB* Blob, const DENORM& cn_denorm) { MICROFEATURES MicroFeatures = NIL_LIST; LIST Outlines; LIST RemainingOutlines; MFOUTLINE Outline; if (Blob != nullptr) { 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); }