⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mfx.cpp

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************** **      Filename:       mfx.c **      Purpose:        Micro feature extraction routines **      Author:         Dan Johnson **      History:        7/21/89, DSJ, Created. ** **      (c) Copyright Hewlett-Packard Company, 1988. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. ******************************************************************************//**----------------------------------------------------------------------------          Include Files and Type Defines----------------------------------------------------------------------------**/#include "mfdefs.h"#include "variables.h"#include "sigmenu.h"#include "mfoutline.h"#include "clusttool.h"           //NEEDED#include "const.h"#include "intfx.h"#include <math.h>/* default values for tunable knobs *//* old numbers corresponded to 10.0 degrees and 80.0 degrees */                                 /* PREV DEFAULT 0.176326981 approx. 10.0 degrees */#define MIN_SLOPE               0.414213562                                 /* PREV DEFAULT 5.671281820 approx. 80.0 degrees */#define MAX_SLOPE               2.414213562                                 /* no noise filtering */#define NOISE_SEGMENT_LENGTH    (0.00)                                 /* no feature splitting */#define MAX_FEATURE_LENGTH      (MAXFLOAT)/**----------------------------------------------------------------------------          Macros----------------------------------------------------------------------------**//* miscellaneous macros */#define NormalizeAngle(A)       ( (((A)<0)?((A)+2*PI):(A)) / (2*PI) )/*----------------------------------------------------------------------------          Private Function Prototypes-----------------------------------------------------------------------------*/void ComputeBulges(MFOUTLINE Start, MFOUTLINE End, MICROFEATURE MicroFeature);FLOAT32 ComputeOrientation(MFEDGEPT *Start, MFEDGEPT *End);MICROFEATURES ConvertToMicroFeatures(MFOUTLINE Outline,                                     MICROFEATURES MicroFeatures);MICROFEATURE ExtractMicroFeature(MFOUTLINE Start, MFOUTLINE End);void SmearBulges(MICROFEATURES MicroFeatures, FLOAT32 XScale, FLOAT32 YScale);/*#if defined(__STDC__) || defined(__cplusplus)# define _ARGS(s) s#else# define _ARGS(s) ()#endif*//* /users/danj/wiseowl/src/danj/microfeatures/mfx.cvoid ComputeBulges  _ARGS((MFOUTLINE Start,  MFOUTLINE End,  MICROFEATURE MicroFeature));FLOAT32 ComputeOrientation  _ARGS((MFEDGEPT *Start,  MFEDGEPT *End));MICROFEATURES ConvertToMicroFeatures  _ARGS((MFOUTLINE Outline,  MICROFEATURES MicroFeatures));MICROFEATURE ExtractMicroFeature  _ARGS((MFOUTLINE Start,  MFOUTLINE End));void SmearBulges  _ARGS((MICROFEATURES MicroFeatures,  FLOAT32 XScale,  FLOAT32 YScale));#undef _ARGS*//**----------------------------------------------------------------------------        Global Data Definitions and Declarations----------------------------------------------------------------------------**//* tuning knobs that can be adjusted without recompilation */static FLOAT32 MinSlope;static FLOAT32 MaxSlope;static FLOAT32 NoiseSegmentLength;/**----------------------------------------------------------------------------            Public Code----------------------------------------------------------------------------**//*---------------------------------------------------------------------------*/void InitMicroFxVars() {/* **      Parameters: none **      Globals: **              MinSlope        slope below which lines are called horizontal **              MaxSlope        slope above which lines are called vertical **              NoiseSegmentLength      length below which outline segments **                              are treated as noise **              MaxFeatureLength        length above which a feature will **                              be split into 2 equal pieces **              ExtremityMode   controls how extremities are defined **              XHeightAdjust   allows xheight of line to be adjusted **      Operation: Initialize the micro-feature extractor variables (knobs) **              that can be tuned without recompiling. **      Return: none **      Exceptions: none **      History: Mon May 14 11:24:40 1990, DSJ, Created. */  VALUE dummy;  float_variable (MinSlope, "MinSlope", MIN_SLOPE);  float_variable (MaxSlope, "MaxSlope", MAX_SLOPE);  float_variable (NoiseSegmentLength, "NoiseSegmentLength",    NOISE_SEGMENT_LENGTH);}                                /* InitMicroFxVars *//*---------------------------------------------------------------------------*/CHAR_FEATURES BlobMicroFeatures(TBLOB *Blob, LINE_STATS *LineStats) {/* **      Parameters: **              Blob            blob to extract micro-features from **              LineStats       statistics for text line normalization **      Globals: **              XHeightAdjust   used for manually adjusting xheight **      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;  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);//    NormalizeOutlines(Outlines, LineStats, &XScale, &YScale);     ExtractIntFeat(Blob, blfeatures, cnfeatures, &results);    XScale = 0.2f / results.Ry;    YScale = 0.2f / results.Rx;    RemainingOutlines = Outlines;    iterate(RemainingOutlines) {       Outline = (MFOUTLINE) first (RemainingOutlines);      CharNormalizeOutline (Outline,        results.Xmean, results.Ymean,        XScale, YScale);    }    RemainingOutlines = Outlines;    iterate(RemainingOutlines) {      Outline = (MFOUTLINE) first (RemainingOutlines);      FindDirectionChanges(Outline, MinSlope, MaxSlope);      FilterEdgeNoise(Outline, NoiseSegmentLength);      MarkDirectionChanges(Outline);      SmearExtremities(Outline, XScale, YScale);      MicroFeatures = ConvertToMicroFeatures (Outline, MicroFeatures);    }    SmearBulges(MicroFeatures, XScale, YScale);    FreeOutlines(Outlines);  }  return ((CHAR_FEATURES) MicroFeatures);}                                /* BlobMicroFeatures *//**----------------------------------------------------------------------------              Private Macros----------------------------------------------------------------------------**//********************************************************************** * angle_of * * Return the angle of the line between two points. **********************************************************************/#define angle_of(x1,y1,x2,y2)                   \((x2-x1) ?                                    \	(atan2 (y2-y1, x2-x1)) :                     \	((y2<y1) ? (- PI / 2.0) : (PI / 2.0)))   \/********************************************************************** * scale_angle * * Make sure that the angle is non-negative.  Scale it to the right * amount. **********************************************************************/#define scale_angle(x)                             \(((x<0) ? (2.0 * PI + x) : (x)) * 0.5 / PI)  \/*---------------------------------------------------------------------------            Private Code---------------------------------------------------------------------------*//*---------------------------------------------------------------------------*/void ComputeBulges(MFOUTLINE Start, MFOUTLINE End, MICROFEATURE MicroFeature) {/*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -