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

📄 blkocc.h

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 H
字号:
/****************************************************************************** * * File:        blkocc.h  (Formerly blockocc.h) * Description:  Block Occupancy routines * Author:       Chris Newton * Created:      Fri Nov 8 * Modified: * Language:     C++ * Package:      N/A * Status:       Experimental (Do Not Distribute) * * (c) Copyright 1991, Hewlett-Packard Company. ** 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. * ******************************************************************************/#ifndef           BLKOCC_H#define           BLKOCC_H#include                   "varable.h"#include                   "polyblob.h"#include          "elst.h"#include          "notdll.h"#include          "notdll.h"/***************************************************************************CLASS REGION_OCC  The class REGION_OCC defines a section of outline which exists entirely  within a single region. The only data held is the min and max x limits of  the outline within the region.  REGION_OCCs are held on lists, one list for each region.  The lists are  built in sorted order of min x. Overlapping REGION_OCCs are not permitted on  a single list. An overlapping region to be added causes the existing region  to be extended. This extension may result in the following REGION_OCC on the  list overlapping the ammended one. In this case the ammended REGION_OCC is  further extended to include the range of the following one, so that the  following one can be deleted.****************************************************************************/class REGION_OCC:public ELIST_LINK{  public:    float min_x;                 //Lowest x in region    float max_x;                 //Highest x in region    INT16 region_type;           //Type of crossing    REGION_OCC() {     };                           //constructor used    //only in COPIER etc    REGION_OCC(  //constructor               float min,               float max,               INT16 region) {      min_x = min;      max_x = max;      region_type = region;    }};ELISTIZEH (REGION_OCC)#define RANGE_IN_BAND( band_max, band_min, range_max, range_min ) \( ((range_min) >= (band_min)) && ((range_max) < (band_max)) ) ? TRUE : FALSE/************************************************************************Adapted from the following procedure so that it can be used in the bandsclass in an include file...BOOL8						range_in_band[              range within band?INT16						band_max,INT16						band_min,INT16						range_max,INT16						range_min]{  if ( (range_min >= band_min) && (range_max < band_max) )    return TRUE;  else    return FALSE;}***********************************************************************/#define RANGE_OVERLAPS_BAND( band_max, band_min, range_max, range_min ) \( ((range_max) >= (band_min)) && ((range_min) < (band_max)) ) ? TRUE : FALSE/************************************************************************Adapted from the following procedure so that it can be used in the bandsclass in an include file...BOOL8						range_overlaps_band[              range crosses band?INT16						band_max,INT16						band_min,INT16						range_max,INT16						range_min]{  if ( (range_max >= band_min) && (range_min < band_max) )    return TRUE;  else    return FALSE;}***********************************************************************//**********************************************************************  Bands  -----  BAND 4--------------------------------  BAND 3--------------------------------  BAND 2--------------------------------  BAND 1Band 0 is the dot bandEach band has an error margin above and below. An outline is not considered tohave significantly changed bands until it has moved out of the error margin.*************************************************************************/class BAND{  public:    INT16 max_max;               //upper max    INT16 max;                   //nominal max    INT16 min_max;               //lower max    INT16 max_min;               //upper min    INT16 min;                   //nominal min    INT16 min_min;               //lower min    BAND() {     }                            // constructor    void set(                      // initialise a band             INT16 new_max_max,    // upper max             INT16 new_max,        // new nominal max             INT16 new_min_max,    // new lower max             INT16 new_max_min,    // new upper min             INT16 new_min,        // new nominal min             INT16 new_min_min) {  // new lower min      max_max = new_max_max;      max = new_max;      min_max = new_min_max;      max_min = new_max_min;      min = new_min;      min_min = new_min_min;    }    BOOL8 in_minimal(            //in minimal limits?                     float y) {  //y value      if ((y >= max_min) && (y < min_max))        return TRUE;      else        return FALSE;    }    BOOL8 in_nominal(            //in nominal limits?                     float y) {  //y value      if ((y >= min) && (y < max))        return TRUE;      else        return FALSE;    }    BOOL8 in_maximal(            //in maximal limits?                     float y) {  //y value      if ((y >= min_min) && (y < max_max))        return TRUE;      else        return FALSE;    }                                 //overlaps min limits?    BOOL8 range_overlaps_minimal(float y1,    //one range limit                                 float y2) {  //other range limit      if (y1 > y2)        return RANGE_OVERLAPS_BAND (min_max, max_min, y1, y2);      else        return RANGE_OVERLAPS_BAND (min_max, max_min, y2, y1);    }                                 //overlaps nom limits?    BOOL8 range_overlaps_nominal(float y1,    //one range limit                                 float y2) {  //other range limit      if (y1 > y2)        return RANGE_OVERLAPS_BAND (max, min, y1, y2);      else        return RANGE_OVERLAPS_BAND (max, min, y2, y1);    }                                 //overlaps max limits?    BOOL8 range_overlaps_maximal(float y1,    //one range limit                                 float y2) {  //other range limit      if (y1 > y2)        return RANGE_OVERLAPS_BAND (max_max, min_min, y1, y2);      else        return RANGE_OVERLAPS_BAND (max_max, min_min, y2, y1);    }    BOOL8 range_in_minimal(             //within min limits?                           float y1,    //one range limit                           float y2) {  //other range limit      if (y1 > y2)        return RANGE_IN_BAND (min_max, max_min, y1, y2);      else        return RANGE_IN_BAND (min_max, max_min, y2, y1);    }    BOOL8 range_in_nominal(             //within nom limits?                           float y1,    //one range limit                           float y2) {  //other range limit      if (y1 > y2)        return RANGE_IN_BAND (max, min, y1, y2);      else        return RANGE_IN_BAND (max, min, y2, y1);    }    BOOL8 range_in_maximal(             //within max limits?                           float y1,    //one range limit                           float y2) {  //other range limit      if (y1 > y2)        return RANGE_IN_BAND (max_max, min_min, y1, y2);      else        return RANGE_IN_BAND (max_max, min_min, y2, y1);    }};/* Standard positions */#define MAX_NUM_BANDS 5#define UNDEFINED_BAND 99#define NO_LOWER_LIMIT -9999#define NO_UPPER_LIMIT 9999#define DOT_BAND 0/* Special occupancy code emitted for the 0 region at the end of a word */#define END_OF_WERD_CODE 255extern BOOL_VAR_H (blockocc_show_result, FALSE, "Show intermediate results");extern INT_VAR_H (blockocc_desc_height, 0,"Descender height after normalisation");extern INT_VAR_H (blockocc_asc_height, 255,"Ascender height after normalisation");extern INT_VAR_H (blockocc_band_count, 4, "Number of bands used");extern double_VAR_H (textord_underline_threshold, 0.9,"Fraction of width occupied");BOOL8 test_underline(                   //look for underlines                     BOOL8 testing_on,  //drawing blob                     PBLOB *blob,       //blob to test                     float baseline,    //coords of baseline                     float xheight      //height of line                    );BOOL8 test_underline(                   //look for underlines                     BOOL8 testing_on,  //drawing blob                     C_BLOB *blob,      //blob to test                     INT16 baseline,    //coords of baseline                     INT16 xheight      //height of line                    );                                 //project outlinesvoid horizontal_cblob_projection(C_BLOB *blob,  //blob to project                                 STATS *stats   //output                                );void horizontal_coutline_projection(                     //project outlines                                    C_OUTLINE *outline,  //outline to project                                    STATS *stats         //output                                   );void set_bands(                 //init from varibles               float baseline,  //top of bottom band               float xheight    //height of split band              );void block_occ (PBLOB * blob,    //blob to dofloat occs[]                     //output histogram);                                 //blob to dovoid find_transitions(PBLOB *blob, REGION_OCC_LIST *region_occ_list); void record_region(  //add region on list                   INT16 band,                   float new_min,                   float new_max,                   INT16 region_type,                   REGION_OCC_LIST *region_occ_list);INT16 find_containing_maximal_band(  //find range's band                                   float y1,                                   float y2,                                   BOOL8 *doubly_contained);void find_significant_line(POLYPT_IT it, INT16 *band); INT16 find_overlapping_minimal_band(  //find range's band                                    float y1,                                    float y2);INT16 find_region_type(INT16 entry_band,                       INT16 current_band,                       INT16 exit_band,                       float entry_x,                       float exit_x);void find_trans_point(POLYPT_IT *pt_it,                      INT16 current_band,                      INT16 next_band,                      FCOORD *transition_pt);void next_region(POLYPT_IT *start_pt_it,                 INT16 start_band,                 INT16 *to_band,                 float *min_x,                 float *max_x,                 INT16 *increment,                 FCOORD *exit_pt);INT16 find_band(  // find POINT's band                float y);void compress_region_list(  // join open regions                          REGION_OCC_LIST *region_occ_list);void find_fbox(OUTLINE_IT *out_it,               float *min_x,               float *min_y,               float *max_x,               float *max_y);void maintain_limits(float *min_x, float *max_x, float x); #endif

⌨️ 快捷键说明

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