classify/intproto.h

Go to the documentation of this file.
00001 
00019 #ifndef INTPROTO_H
00020 #define INTPROTO_H
00021 
00022 /* =================
00023           Include Files and Type Defines
00024  ==================== */
00025 #include "matchdefs.h"
00026 #include "protos.h"
00027 #include "callcpp.h"
00028 
00030 #define PRUNER_X      0
00031 #define PRUNER_Y      1
00032 #define PRUNER_ANGLE    2
00033 
00035 #define ANGLE_SHIFT (0.0)
00036 #define X_SHIFT   (0.5)
00037 #define Y_SHIFT   (0.5)
00038 
00040 #define MAX_PROTO_INDEX   24
00041 #define BITS_PER_WERD   (8 * sizeof (UINT32))
00042 
00043 #define MAX_NUM_CONFIGS   32
00044 
00045 #define MAX_NUM_PROTOS    256
00046 
00047 #define PROTOS_PER_PROTO_SET  64
00048 #define MAX_NUM_PROTO_SETS  (MAX_NUM_PROTOS / PROTOS_PER_PROTO_SET)
00049 
00050 #define NUM_PP_PARAMS   3
00051 
00052 #define NUM_PP_BUCKETS    64
00053 
00054 #define NUM_CP_BUCKETS    24
00055 
00056 #define CLASSES_PER_CP    32
00057 #define NUM_BITS_PER_CLASS  2
00058 #define CLASSES_PER_CP_WERD (CLASSES_PER_CP / NUM_BITS_PER_CLASS)
00059 #define PROTOS_PER_PP_WERD  BITS_PER_WERD
00060 #define BITS_PER_CP_VECTOR  (CLASSES_PER_CP * NUM_BITS_PER_CLASS)
00061 #define MAX_NUM_CLASS_PRUNERS ((MAX_NUM_CLASSES + CLASSES_PER_CP - 1) /   \
00062             CLASSES_PER_CP)
00063 #define WERDS_PER_CP_VECTOR (BITS_PER_CP_VECTOR / BITS_PER_WERD)
00064 #define WERDS_PER_PP_VECTOR   ((PROTOS_PER_PROTO_SET+BITS_PER_WERD-1)/    \
00065             BITS_PER_WERD)
00066 #define WERDS_PER_PP    (NUM_PP_PARAMS * NUM_PP_BUCKETS *      \
00067             WERDS_PER_PP_VECTOR)
00068 #define WERDS_PER_CP    (NUM_CP_BUCKETS * NUM_CP_BUCKETS *     \
00069             NUM_CP_BUCKETS * WERDS_PER_CP_VECTOR)
00070 #define WERDS_PER_CONFIG_VEC  ((MAX_NUM_CONFIGS + BITS_PER_WERD - 1) /    \
00071             BITS_PER_WERD)
00072 
00079 typedef UINT32 CLASS_PRUNER_STRUCT
00080 [NUM_CP_BUCKETS][NUM_CP_BUCKETS][NUM_CP_BUCKETS][WERDS_PER_CP_VECTOR];
00081 
00082 typedef
00083 UINT32 (*CLASS_PRUNER)[NUM_CP_BUCKETS][NUM_CP_BUCKETS][WERDS_PER_CP_VECTOR];
00084 
00096 typedef struct
00097 {
00098   INT8 A;
00099   UINT8 B;
00100   INT8 C;
00101   UINT8 Angle;
00102   UINT32 Configs[WERDS_PER_CONFIG_VEC];
00103 } INT_PROTO_STRUCT, *INT_PROTO;
00104 
00115 typedef struct
00116 {
00117   UINT32 ProtoPruner[NUM_PP_PARAMS][NUM_PP_BUCKETS][WERDS_PER_PP_VECTOR];
00118   INT_PROTO_STRUCT Protos[PROTOS_PER_PROTO_SET];
00119 } PROTO_SET_STRUCT, *PROTO_SET;
00120 
00125 typedef UINT32 CONFIG_PRUNER[NUM_PP_PARAMS][NUM_PP_BUCKETS][4];
00126 
00136 typedef struct
00137 {
00138   UINT16 NumProtos;
00139   UINT8 NumProtoSets;
00140   UINT8 NumConfigs;
00141   PROTO_SET ProtoSets[MAX_NUM_PROTO_SETS];
00142   UINT8 *ProtoLengths;
00143   UINT16 ConfigLengths[MAX_NUM_CONFIGS];
00144 } INT_CLASS_STRUCT, *INT_CLASS;
00145 
00156 typedef struct
00157 {
00158   int NumClasses;
00159   int NumClassPruners;
00161   CLASS_TO_INDEX IndexFor;
00162   /* Defined by the ascii character set: unit8[100 */
00163   INDEX_TO_CLASS ClassIdFor;
00165   INT_CLASS Class[MAX_NUM_CLASSES];
00167   CLASS_PRUNER ClassPruner[MAX_NUM_CLASS_PRUNERS];
00168 } INT_TEMPLATES_STRUCT, *INT_TEMPLATES;
00169 
00171 #define MAX_NUM_INT_FEATURES 512
00172 
00173 #define INT_CHAR_NORM_RANGE  256
00174 
00179 typedef struct
00180 {
00181   UINT8 X;
00182   UINT8 Y;
00183   UINT8 Theta;
00184   INT8 CP_misses;
00185 } INT_FEATURE_STRUCT;
00186 
00191 typedef INT_FEATURE_STRUCT *INT_FEATURE;
00192 
00197 typedef INT_FEATURE_STRUCT INT_FEATURE_ARRAY[MAX_NUM_INT_FEATURES];
00198 
00199 /* =================
00200             Macros
00201  ==================== */
00203 #define ProtoPrunerFor(S) (S->ProtoPruner)
00204 
00205 /* INT_CLASS access macros*/
00206 #define NumIntProtosIn(C) ((C)->NumProtos)
00207 #define NumProtoSetsIn(C) ((C)->NumProtoSets)
00208 #define MaxNumIntProtosIn(C)  (NumProtoSetsIn (C) * PROTOS_PER_PROTO_SET)
00209 #define NumIntConfigsIn(C)  ((C)->NumConfigs)
00210 #define ProtoSetIn(C,I)   ((C)->ProtoSets[I])
00211 #define SetForProto(P)    (P / PROTOS_PER_PROTO_SET)
00212 #define IndexForProto(P)  (P % PROTOS_PER_PROTO_SET)
00213 //#define IllegalProto(C,P)     (P >= MaxNumIntProtosIn (C))
00214 #define ProtoForProtoId(C,P)  (&((ProtoSetIn (C, SetForProto (P)))-> \
00215                Protos [IndexForProto (P)]))
00216 #define LengthForProtoId(C,P) ((C)->ProtoLengths[P])
00217 #define LengthForConfigId(C,c)  ((C)->ConfigLengths[c])
00218 #define PPrunerWordIndexFor(I)   (((I) % PROTOS_PER_PROTO_SET) /     \
00219             PROTOS_PER_PP_WERD)
00220 #define PPrunerBitIndexFor(I) ((I) % PROTOS_PER_PP_WERD)
00221 #define PPrunerMaskFor(I) (1 << PPrunerBitIndexFor (I))
00222 
00223 /* INT_TEMPLATE access macros*/
00224 #define NumClassesIn(T)   ((T)->NumClasses)
00225 #define NumClassPrunersIn(T)  ((T)->NumClassPruners)
00226 #define MaxNumClassesIn(T)    (NumClassPrunersIn (T) * CLASSES_PER_CP)
00227 #define ClassIdForIndex(T,I)  ((T)->ClassIdFor[I])
00228 #define IndexForClassId(T,C)  ((T)->IndexFor[C])
00229 #define LegalClassId(C)   ((C) > 0 && (C) < MAX_CLASS_ID)
00230 #define UnusedClassIdIn(T,C)  (IndexForClassId (T,C) == ILLEGAL_CLASS)
00231 #define ClassForIndex(T,I)  ((T)->Class[I])
00232 #define ClassForClassId(T,C)  (ClassForIndex (T, IndexForClassId (T, C)))
00233 #define ClassPrunersFor(T)  ((T)->ClassPruner)
00234 #define CPrunerIdFor(I)   ((I) / CLASSES_PER_CP)
00235 #define CPrunerFor(T,I)   ((T)->ClassPruner [CPrunerIdFor (I)])
00236 #define CPrunerWordIndexFor(I)  (((I) % CLASSES_PER_CP) / CLASSES_PER_CP_WERD)
00237 #define CPrunerBitIndexFor(I) (((I) % CLASSES_PER_CP) % CLASSES_PER_CP_WERD)
00238 #define CPrunerMaskFor(L,I) (((L)+1) << CPrunerBitIndexFor (I) * NUM_BITS_PER_CLASS)
00239 
00240 /* DEBUG macros*/
00241 #define PRINT_MATCH_SUMMARY 0x001
00242 #define DISPLAY_FEATURE_MATCHES 0x002
00243 #define DISPLAY_PROTO_MATCHES 0x004
00244 #define PRINT_FEATURE_MATCHES 0x008
00245 #define PRINT_PROTO_MATCHES 0x010
00246 #define CLIP_MATCH_EVIDENCE 0x020
00247 
00248 #define MatchDebuggingOn(D)   (D)
00249 #define PrintMatchSummaryOn(D)    ((D) & PRINT_MATCH_SUMMARY)
00250 #define DisplayFeatureMatchesOn(D)  ((D) & DISPLAY_FEATURE_MATCHES)
00251 #define DisplayProtoMatchesOn(D)  ((D) & DISPLAY_PROTO_MATCHES)
00252 #define PrintFeatureMatchesOn(D)  ((D) & PRINT_FEATURE_MATCHES)
00253 #define PrintProtoMatchesOn(D)    ((D) & PRINT_PROTO_MATCHES)
00254 #define ClipMatchEvidenceOn(D)    ((D) & CLIP_MATCH_EVIDENCE)
00255 
00256 /* =================
00257           Public Function Prototypes
00258  ==================== */
00259 int AddIntClass(INT_TEMPLATES Templates, CLASS_ID ClassId, INT_CLASS Class); 
00260 
00261 int AddIntConfig(INT_CLASS Class); 
00262 
00263 int AddIntProto(INT_CLASS Class); 
00264 
00265 void AddProtoToClassPruner(PROTO Proto,
00266                            CLASS_ID ClassId,
00267                            INT_TEMPLATES Templates);
00268 
00269 void AddProtoToProtoPruner(PROTO Proto, int ProtoId, INT_CLASS Class); 
00270 
00271 int BucketFor(FLOAT32 Param, FLOAT32 Offset, int NumBuckets); 
00272 
00273 int CircBucketFor(FLOAT32 Param, FLOAT32 Offset, int NumBuckets); 
00274 
00275 void UpdateMatchDisplay(); 
00276 
00277 void ConvertConfig(BIT_VECTOR Config, int ConfigId, INT_CLASS Class); 
00278 
00279 void ConvertProto(PROTO Proto, int ProtoId, INT_CLASS Class); 
00280 
00281 INT_TEMPLATES CreateIntTemplates(CLASSES FloatProtos); 
00282 
00283 void DisplayIntFeature(INT_FEATURE Feature, FLOAT32 Evidence); 
00284 
00285 void DisplayIntProto(INT_CLASS Class, PROTO_ID ProtoId, FLOAT32 Evidence); 
00286 
00287 void InitIntProtoVars(); 
00288 
00289 INT_CLASS NewIntClass(int MaxNumProtos, int MaxNumConfigs); 
00290 
00291 void free_int_class(INT_CLASS int_class); 
00292 
00293 INT_TEMPLATES NewIntTemplates(); 
00294 
00295 void free_int_templates(INT_TEMPLATES templates); 
00296 
00297 INT_TEMPLATES ReadIntTemplates(FILE *File, BOOL8 swap); 
00298 
00299 void ShowMatchDisplay(); 
00300 
00301 CLASS_ID GetClassToDebug(const char *Prompt); 
00302 
00303 void WriteIntTemplates(FILE *File, INT_TEMPLATES Templates); 
00304 
00305 /*
00306 #if defined(__STDC__) || defined(__cplusplus)
00307 # define        _ARGS(s) s
00308 #else
00309 # define        _ARGS(s) ()
00310 #endif*/
00311 
00312 /* intproto.c
00313 int AddIntClass
00314     _ARGS((INT_TEMPLATES Templates,
00315   CLASS_ID ClassId,
00316   INT_CLASS Class));
00317 
00318 int AddIntConfig
00319     _ARGS((INT_CLASS Class));
00320 
00321 int AddIntProto
00322     _ARGS((INT_CLASS Class));
00323 
00324 void AddProtoToClassPruner
00325     _ARGS((PROTO Proto,
00326   CLASS_ID ClassId,
00327   INT_TEMPLATES Templates));
00328 
00329 void AddProtoToProtoPruner
00330     _ARGS((PROTO Proto,
00331   int ProtoId,
00332   INT_CLASS Class));
00333 
00334 int BucketFor
00335     _ARGS((FLOAT32 Param,
00336   FLOAT32 Offset,
00337   int NumBuckets));
00338 
00339 int CircBucketFor
00340     _ARGS((FLOAT32 Param,
00341   FLOAT32 Offset,
00342   int NumBuckets));
00343 
00344 void UpdateMatchDisplay
00345     _ARGS((void));
00346 
00347 void ConvertConfig
00348     _ARGS((BIT_VECTOR Config,
00349   int ConfigId,
00350   INT_CLASS Class));
00351 
00352 void ConvertProto
00353     _ARGS((PROTO Proto,
00354   int ProtoId,
00355   INT_CLASS Class));
00356 
00357 INT_TEMPLATES CreateIntTemplates
00358     _ARGS((CLASSES FloatProtos));
00359 
00360 void DisplayIntFeature
00361     _ARGS((INT_FEATURE Feature,
00362   FLOAT32 Evidence));
00363 
00364 void DisplayIntProto
00365     _ARGS((INT_CLASS Class,
00366   PROTO_ID ProtoId,
00367   FLOAT32 Evidence));
00368 
00369 void InitIntProtoVars
00370     _ARGS((void));
00371 
00372 INT_CLASS NewIntClass
00373     _ARGS((int MaxNumProtos,
00374   int MaxNumConfigs));
00375 
00376 INT_TEMPLATES NewIntTemplates
00377     _ARGS((void));
00378 
00379 INT_TEMPLATES ReadIntTemplates
00380     _ARGS((FILE *File));
00381 
00382 void ShowMatchDisplay
00383     _ARGS((void));
00384 
00385 void WriteIntTemplates
00386     _ARGS((FILE *File,
00387   INT_TEMPLATES Templates));
00388 
00389 CLASS_ID GetClassToDebug
00390     _ARGS((char *Prompt));
00391 
00392 C_COL GetMatchColorFor
00393     _ARGS((FLOAT32 Evidence));
00394 
00395 #undef _ARGS
00396 */
00397 #endif

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