ccstruct/rejctmap.h

Go to the documentation of this file.
00001 
00020 #ifndef           REJCTMAP_H
00021 #define           REJCTMAP_H
00022 
00023 #ifdef __UNIX__
00024 #include          <assert.h>
00025 #endif
00026 #include          "memry.h"
00027 #include          "bits16.h"
00028 #include                   "varable.h"
00029 #include          "notdll.h"
00030 
00033 extern BOOL_VAR_H (rejword_only_set_if_accepted, TRUE,
00034 "Mimic old reject_word");
00035 extern BOOL_VAR_H (rejmap_allow_more_good_qual, FALSE,
00036 "Use initial good qual setting");
00037 extern BOOL_VAR_H (rej_use_1Il_rej, TRUE, "1Il rejection enabled");
00061 enum REJ_FLAGS
00062 {
00063   /* Reject modes which are NEVER overridden */
00064   R_TESS_FAILURE,                
00065   R_SMALL_XHT,                   
00066   R_EDGE_CHAR,                   
00067   R_1IL_CONFLICT,                
00068   R_POSTNN_1IL,                  
00069   R_REJ_CBLOB,                   
00070   R_MM_REJECT,                   
00071   R_BAD_REPETITION,              
00072 
00073   /* Initial reject modes (pre NN_ACCEPT) */
00074   R_POOR_MATCH,                  
00075   R_NOT_TESS_ACCEPTED,           
00076   R_CONTAINS_BLANKS,             
00077   R_BAD_PERMUTER,                
00078 
00079   /* Reject modes generated after NN_ACCEPT but before MM_ACCEPT */
00080   R_HYPHEN,                      
00081   R_DUBIOUS,                     
00082   R_NO_ALPHANUMS,                
00083   R_MOSTLY_REJ,                  
00084   R_XHT_FIXUP,                   
00085 
00086   /* Reject modes generated after MM_ACCEPT but before QUALITY_ACCEPT */
00087   R_BAD_QUALITY,                 
00088 
00089   /* Reject modes generated after QUALITY_ACCEPT but before MINIMAL_REJ accep*/
00090   R_DOC_REJ,                     
00091   R_BLOCK_REJ,                   
00092   R_ROW_REJ,                     
00093   R_UNLV_REJ,                    
00094 
00095   /* Accept modes which occur inbetween the above rejection groups */
00096   R_NN_ACCEPT,                   
00097   R_HYPHEN_ACCEPT,               
00098   R_MM_ACCEPT,                   
00099   R_QUALITY_ACCEPT,              
00100   R_MINIMAL_REJ_ACCEPT           
00101 };
00102 
00104 #define           MAP_ACCEPT '1'
00105 #define           MAP_REJECT_PERM '0'
00106 #define           MAP_REJECT_TEMP '2'
00107 #define           MAP_REJECT_POTENTIAL '3'
00108 
00124 class REJ
00125 {
00126   BITS16 flags1;
00127   BITS16 flags2;
00128 
00129   void set_flag(REJ_FLAGS rej_flag) { 
00130     if (rej_flag < 16)
00131       flags1.turn_on_bit (rej_flag);
00132     else
00133       flags2.turn_on_bit (rej_flag - 16);
00134   }
00135 
00136   BOOL8 rej_before_nn_accept(); 
00137   BOOL8 rej_between_nn_and_mm(); 
00138   BOOL8 rej_between_mm_and_quality_accept(); 
00139   BOOL8 rej_between_quality_and_minimal_rej_accept(); 
00140   BOOL8 rej_before_mm_accept(); 
00141   BOOL8 rej_before_quality_accept(); 
00142 
00143   public:
00144     REJ() {  //constructor
00145     }
00146 
00147     REJ(  //classwise copy
00148         const REJ &source) {
00149       flags1 = source.flags1;
00150       flags2 = source.flags2;
00151     }
00152 
00153     REJ & operator= (            //assign REJ
00154     const REJ & source) {        //from this
00155       flags1 = source.flags1;
00156       flags2 = source.flags2;
00157       return *this;
00158     }
00159 
00160     BOOL8 flag(REJ_FLAGS rej_flag) { 
00161       if (rej_flag < 16)
00162         return flags1.bit (rej_flag);
00163       else
00164         return flags2.bit (rej_flag - 16);
00165     }
00166 
00167     char display_char() { 
00168       if (perm_rejected ())
00169         return MAP_REJECT_PERM;
00170       else if (accept_if_good_quality ())
00171         return MAP_REJECT_POTENTIAL;
00172       else if (rejected ())
00173         return MAP_REJECT_TEMP;
00174       else
00175         return MAP_ACCEPT;
00176     }
00177 
00178     BOOL8 perm_rejected();  //Is char perm reject?
00179 
00180     BOOL8 rejected();  //Is char rejected?
00181 
00182     BOOL8 accepted() {  //Is char accepted?
00183       return !rejected ();
00184     }
00185 
00186                                  //potential rej?
00187     BOOL8 accept_if_good_quality(); 
00188 
00189     BOOL8 recoverable() { 
00190       return (rejected () && !perm_rejected ());
00191     }
00192 
00193     void setrej_tess_failure();  //Tess generated blank
00194     void setrej_small_xht();  //Small xht char/wd
00195     void setrej_edge_char();  //Close to image edge
00196     void setrej_1Il_conflict();  //Initial reject map
00197     void setrej_postNN_1Il();  //1Il after NN
00198     void setrej_rej_cblob();  //Insert duff blob
00199     void setrej_mm_reject();  //Matrix matcher
00200                                  //Odd repeated char
00201     void setrej_bad_repetition(); 
00202     void setrej_poor_match();  //Failed Rays heuristic
00203                                  //TEMP reject_word
00204     void setrej_not_tess_accepted(); 
00205                                  //TEMP reject_word
00206     void setrej_contains_blanks(); 
00207     void setrej_bad_permuter();  //POTENTIAL reject_word
00208     void setrej_hyphen();  //PostNN dubious hyph or .
00209     void setrej_dubious();  //PostNN dubious limit
00210     void setrej_no_alphanums();  //TEMP reject_word
00211     void setrej_mostly_rej();  //TEMP reject_word
00212     void setrej_xht_fixup();  //xht fixup
00213     void setrej_bad_quality();  //TEMP reject_word
00214     void setrej_doc_rej();  //TEMP reject_word
00215     void setrej_block_rej();  //TEMP reject_word
00216     void setrej_row_rej();  //TEMP reject_word
00217     void setrej_unlv_rej();  //TEMP reject_word
00218     void setrej_nn_accept();  //NN Flipped a char
00219     void setrej_hyphen_accept();  //Good aspect ratio
00220     void setrej_mm_accept();  //Matrix matcher
00221                                  //Quality flip a char
00222     void setrej_quality_accept(); 
00223                                  //Accept all except blank
00224     void setrej_minimal_rej_accept(); 
00225 
00226     void full_print(FILE *fp); 
00227 };
00228 
00244 class REJMAP
00245 {
00246   REJ *ptr;                      //ptr to the chars
00247   INT16 len;                     //Number of chars
00248 
00249   public:
00250     REJMAP() {  //constructor
00251       ptr = NULL;
00252       len = 0;
00253     }
00254 
00255     REJMAP(  //classwise copy
00256            const REJMAP &rejmap);
00257 
00258     REJMAP & operator= (         //assign REJMAP
00259       const REJMAP & source);    //from this
00260 
00261     ~REJMAP () {                 //destructor
00262       if (ptr != NULL)
00263         free_struct (ptr, len * sizeof (REJ), "REJ");
00264     }
00265 
00266     void initialise(  //Redefine map
00267                     INT16 length);
00268 
00269     REJ & operator[](            //access function
00270       INT16 index) const         //map index
00271     {
00272       ASSERT_HOST (index < len);
00273       return ptr[index];         //no bounds checks
00274     }
00275 
00276     INT32 length() const {  //map length
00277       return len;
00278     }
00279 
00280     INT16 accept_count();  //How many accepted?
00281 
00282     INT16 reject_count() {  //How many rejects?
00283       return len - accept_count ();
00284     }
00285 
00286     void remove_pos(             //Cut out an element
00287                     INT16 pos);  //element to remove
00288 
00289     void print(FILE *fp); 
00290 
00291     void full_print(FILE *fp); 
00292 
00293     BOOL8 recoverable_rejects();  //Any non perm rejs?
00294 
00295     BOOL8 quality_recoverable_rejects(); 
00296     //Any potential rejs?
00297 
00298     void rej_word_small_xht();  //Reject whole word
00299                                  //Reject whole word
00300     void rej_word_tess_failure(); 
00301     void rej_word_not_tess_accepted(); 
00302     //Reject whole word
00303                                  //Reject whole word
00304     void rej_word_contains_blanks(); 
00305                                  //Reject whole word
00306     void rej_word_bad_permuter(); 
00307     void rej_word_xht_fixup();  //Reject whole word
00308                                  //Reject whole word
00309     void rej_word_no_alphanums(); 
00310     void rej_word_mostly_rej();  //Reject whole word
00311     void rej_word_bad_quality();  //Reject whole word
00312     void rej_word_doc_rej();  //Reject whole word
00313     void rej_word_block_rej();  //Reject whole word
00314     void rej_word_row_rej();  //Reject whole word
00315 };
00316 #endif

Generated on Wed Feb 28 19:49:08 2007 for Tesseract by  doxygen 1.5.1