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

📄 makerow.h

📁 一OCR的相关资料。.希望对研究OCR的朋友有所帮助.
💻 H
字号:
/********************************************************************** * File:        makerow.h  (Formerly makerows.h) * Description: Code to arrange blobs into rows of text. * Author:		Ray Smith * Created:		Mon Sep 21 14:34:48 BST 1992 * * (C) Copyright 1992, Hewlett-Packard Ltd. ** 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           MAKEROW_H#define           MAKEROW_H#include          "varable.h"#include          "ocrblock.h"#include          "tessclas.h"#include          "blobbox.h"#include          "statistc.h"#include          "notdll.h"enum OVERLAP_STATE{  ASSIGN,                        //assign it to row  REJECT,                        //reject it - dual overlap  NEW_ROW};extern BOOL_VAR_H (textord_show_initial_rows, FALSE,"Display row accumulation");extern BOOL_VAR_H (textord_show_parallel_rows, FALSE,"Display page correlated rows");extern BOOL_VAR_H (textord_show_expanded_rows, FALSE,"Display rows after expanding");extern BOOL_VAR_H (textord_show_final_rows, FALSE,"Display rows after final fittin");extern BOOL_VAR_H (textord_show_final_blobs, FALSE,"Display blob bounds after pre-ass");extern BOOL_VAR_H (textord_test_landscape, FALSE, "Tests refer to land/port");extern BOOL_VAR_H (textord_parallel_baselines, TRUE,"Force parallel baselines");extern BOOL_VAR_H (textord_straight_baselines, FALSE,"Force straight baselines");extern BOOL_VAR_H (textord_quadratic_baselines, FALSE,"Use quadratic splines");extern BOOL_VAR_H (textord_old_baselines, TRUE, "Use old baseline algorithm");extern BOOL_VAR_H (textord_old_xheight, TRUE, "Use old xheight algorithm");extern BOOL_VAR_H (textord_fix_xheight_bug, TRUE, "Use spline baseline");extern BOOL_VAR_H (textord_fix_makerow_bug, TRUE,"Prevent multiple baselines");extern BOOL_VAR_H (textord_row_xheights, FALSE, "Use row height policy");extern BOOL_VAR_H (textord_block_xheights, TRUE, "Use block height policy");extern BOOL_VAR_H (textord_xheight_tweak, FALSE,"New min condition on height");extern BOOL_VAR_H (textord_cblob_blockocc, TRUE,"Use new projection for underlines");extern BOOL_VAR_H (textord_debug_xheights, FALSE, "Test xheight algorithms");extern INT_VAR_H (textord_test_x, 0, "coord of test pt");extern INT_VAR_H (textord_test_y, 0, "coord of test pt");extern INT_VAR_H (textord_min_blobs_in_row, 4,"Min blobs before gradient counted");extern INT_VAR_H (textord_spline_minblobs, 8,"Min blobs in each spline segment");extern INT_VAR_H (textord_spline_medianwin, 6,"Size of window for spline segmentation");extern INT_VAR_H (textord_min_xheight, 10, "Min credible pixel xheight");extern double_VAR_H (textord_spline_shift_fraction, 0.02,"Fraction of line spacing for quad");extern double_VAR_H (textord_spline_outlier_fraction, 0.1,"Fraction of line spacing for outlier");extern double_VAR_H (textord_skew_ile, 0.5, "Ile of gradients for page skew");extern double_VAR_H (textord_skew_lag, 0.75,"Lag for skew on row accumulation");extern double_VAR_H (textord_linespace_iqrlimit, 0.2,"Max iqr/median for linespace");extern double_VAR_H (textord_width_limit, 8,"Max width of blobs to make rows");extern double_VAR_H (textord_chop_width, 1.5, "Max width before chopping");extern double_VAR_H (textord_merge_desc, 0.25,"Fraction of linespace for desc drop");extern double_VAR_H (textord_merge_x, 0.5,"Fraction of linespace for x height");extern double_VAR_H (textord_merge_asc, 0.25,"Fraction of linespace for asc height");extern double_VAR_H (textord_minxh, 0.25,"fraction of linesize for min xheight");extern double_VAR_H (textord_min_linesize, 1.25,"* blob height for initial linesize");extern double_VAR_H (textord_excess_blobsize, 1.3,"New row made if blob makes row this big");extern double_VAR_H (textord_occupancy_threshold, 0.4,"Fraction of neighbourhood");extern double_VAR_H (textord_underline_width, 2.0,"Multiple of line_size for underline");extern double_VAR_H (textord_xheight_mode_fraction, 0.4,"Min pile height to make xheight");extern double_VAR_H (textord_ascheight_mode_fraction, 0.15,"Min pile height to make ascheight");extern double_VAR_H (textord_ascx_ratio_min, 1.2, "Min cap/xheight");extern double_VAR_H (textord_ascx_ratio_max, 1.7, "Max cap/xheight");extern double_VAR_H (textord_descx_ratio_min, 0.15, "Min desc/xheight");extern double_VAR_H (textord_descx_ratio_max, 0.6, "Max desc/xheight");extern double_VAR_H (textord_xheight_error_margin, 0.1, "Accepted variation");float make_rows(                             //make rows                ICOORD page_tr,              //top right                BLOCK_LIST *blocks,          //block list                TO_BLOCK_LIST *land_blocks,  //rotated for landscape                TO_BLOCK_LIST *port_blocks   //output list               );void make_initial_textrows(                  //find lines                           ICOORD page_tr,                           TO_BLOCK *block,  //block to do                           FCOORD rotation,  //for drawing                           BOOL8 testing_on  //correct orientation                          );void fit_lms_line(             //sort function                  TO_ROW *row  //row to fit                 );void compute_page_skew(                        //get average gradient                       TO_BLOCK_LIST *blocks,  //list of blocks                       float &page_m,          //average gradient                       float &page_err         //average error                      );void cleanup_rows(                   //find lines                  ICOORD page_tr,    //top right                  TO_BLOCK *block,   //block to do                  float gradient,    //gradient to fit                  FCOORD rotation,   //for drawing                  INT32 block_edge,  //edge of block                  BOOL8 testing_on   //correct orientation                 );void delete_non_dropout_rows(                   //find lines                             TO_BLOCK *block,   //block to do                             float gradient,    //global skew                             FCOORD rotation,   //deskew vector                             INT32 block_edge,  //left edge                             BOOL8 testing_on   //correct orientation                            );BOOL8 find_best_dropout_row(                    //find neighbours                            TO_ROW *row,        //row to test                            INT32 distance,     //dropout dist                            float dist_limit,   //threshold distance                            INT32 line_index,   //index of row                            TO_ROW_IT *row_it,  //current position                            BOOL8 testing_on    //correct orientation                           );BOX deskew_block_coords(                  //block box                        TO_BLOCK *block,  //block to do                        float gradient    //global skew                       );void compute_line_occupation(                    //project blobs                             TO_BLOCK *block,    //block to do                             float gradient,     //global skew                             INT32 min_y,        //min coord in block                             INT32 max_y,        //in block                             INT32 *occupation,  //output projection                             INT32 *deltas       //derivative                            );void compute_occupation_threshold(                    //project blobs                                  INT32 low_window,   //below result point                                  INT32 high_window,  //above result point                                  INT32 line_count,   //array sizes                                  INT32 *occupation,  //input projection                                  INT32 *thresholds   //output thresholds                                 );void compute_dropout_distances(                    //project blobs                               INT32 *occupation,  //input projection                               INT32 *thresholds,  //output thresholds                               INT32 line_count    //array sizes                              );void expand_rows(                   //find lines                 ICOORD page_tr,    //top right                 TO_BLOCK *block,   //block to do                 float gradient,    //gradient to fit                 FCOORD rotation,   //for drawing                 INT32 block_edge,  //edge of block                 BOOL8 testing_on   //correct orientation                );void adjust_row_limits(                 //tidy limits                       TO_BLOCK *block  //block to do                      );void compute_row_stats(                  //find lines                       TO_BLOCK *block,  //block to do                       BOOL8 testing_on  //correct orientation                      );void compute_block_xheight(                  //find lines                           TO_BLOCK *block,  //block to do                           float gradient    //global skew                          );float median_block_xheight(                  //find lines                           TO_BLOCK *block,  //block to do                           float gradient    //global skew                          );INT32 compute_row_xheight(                   //find lines                          TO_ROW *row,       //row to do                          INT32 min_height,  //min xheight                          INT32 max_height,  //max xheight                          float gradient     //global skew                         );INT32 compute_row_descdrop(                //find lines                           TO_ROW *row,    //row to do                           float gradient  //global skew                          );INT32 compute_height_modes(                   //find lines                           STATS *heights,    //stats to search                           INT32 min_height,  //bottom of range                           INT32 max_height,  //top of range                           INT32 *modes,      //output array                           INT32 maxmodes     //size of modes                          );void correct_row_xheight(                //fix bad values                         TO_ROW *row,    //row to fix                         float xheight,  //average values                         float ascrise,                         float descdrop);void separate_underlines(                  //make rough chars                         TO_BLOCK *block,  //block to do                         float gradient,   //skew angle                         FCOORD rotation,  //inverse landscape                         BOOL8 testing_on  //correct orientation                        );void pre_associate_blobs(                  //make rough chars                         ICOORD page_tr,   //top right                         TO_BLOCK *block,  //block to do                         FCOORD rotation,  //inverse landscape                         BOOL8 testing_on  //correct orientation                        );void fit_parallel_rows(                   //find lines                       TO_BLOCK *block,   //block to do                       float gradient,    //gradient to fit                       FCOORD rotation,   //for drawing                       INT32 block_edge,  //edge of block                       BOOL8 testing_on   //correct orientation                      );void fit_parallel_lms(                 //sort function                      float gradient,  //forced gradient                      TO_ROW *row      //row to fit                     );void make_spline_rows(                   //find lines                      TO_BLOCK *block,   //block to do                      float gradient,    //gradient to fit                      FCOORD rotation,   //for drawing                      INT32 block_edge,  //edge of block                      BOOL8 testing_on   //correct orientation                     );void make_baseline_spline(                 //sort function                          TO_ROW *row,     //row to fit                          TO_BLOCK *block  //block it came from                         );BOOL8 segment_baseline (         //split baselineTO_ROW * row,                    //row to fitTO_BLOCK * block,                //block it came fromINT32 & segments,                //no fo segmentsINT32 xstarts[]                  //coords of segments);double *linear_spline_baseline ( //split baselineTO_ROW * row,                    //row to fitTO_BLOCK * block,                //block it came fromINT32 & segments,                //no fo segmentsINT32 xstarts[]                  //coords of segments);void assign_blobs_to_rows(                      //find lines                          TO_BLOCK *block,      //block to do                          float *gradient,      //block skew                          int pass,             //identification                          BOOL8 reject_misses,  //chuck big ones out                          BOOL8 make_new_rows,  //add rows for unmatched                          BOOL8 drawing_skew    //draw smoothed skew                         );                                 //find best rowOVERLAP_STATE most_overlapping_row(TO_ROW_IT *row_it,  //iterator                                   TO_ROW *&best_row,  //output row                                   float top,          //top of blob                                   float bottom,       //bottom of blob                                   float rowsize,      //max row size                                   BOOL8 testing_blob  //test stuff                                  );int blob_x_order(                    //sort function                 const void *item1,  //items to compare                 const void *item2);int row_y_order(                    //sort function                const void *item1,  //items to compare                const void *item2);int row_spacing_order(                    //sort function                      const void *item1,  //items to compare                      const void *item2);#endif

⌨️ 快捷键说明

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