/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - This software is distributed in the hope that it will be - useful, but with NO WARRANTY OF ANY KIND. - No author or distributor accepts responsibility to anyone for the - consequences of using this software, or for whether it serves any - particular purpose or works at all, unless he or she says so in - writing. Everyone is granted permission to copy, modify and - redistribute this source code, for commercial or non-commercial - purposes, with the following restrictions: (1) the origin of this - source code must not be misrepresented; (2) modified versions must - be plainly marked as such; and (3) this notice may not be removed - or altered from any source or modified source distribution. *====================================================================*/ #ifndef LEPTONICA_JBCLASS_H #define LEPTONICA_JBCLASS_H /* * jbclass.h * * JbClasser * JbData */ /* The JbClasser struct holds all the data accumulated during the * classification process that can be used for a compressed * jbig2-type representation of a set of images. This is created * in an initialization process and added to as the selected components * on each successive page are analyzed. */ struct JbClasser { struct Sarray *safiles; /* input page image file names */ l_int32 method; /* JB_RANKHAUS, JB_CORRELATION */ l_int32 components; /* JB_CONN_COMPS, JB_CHARACTERS or */ /* JB_WORDS */ l_int32 maxwidth; /* max component width allowed */ l_int32 maxheight; /* max component height allowed */ l_int32 npages; /* number of pages already processed */ l_int32 baseindex; /* number of components already processed */ /* on fully processed pages */ struct Numa *nacomps; /* number of components on each page */ l_int32 sizehaus; /* size of square struct element for haus */ l_float32 rankhaus; /* rank val of haus match, each way */ l_float32 thresh; /* thresh value for correlation score */ l_float32 weightfactor; /* corrects thresh value for heaver */ /* components; use 0 for no correction */ struct Numa *naarea; /* w * h of each template, without extra */ /* border pixels */ l_int32 w; /* max width of original src images */ l_int32 h; /* max height of original src images */ l_int32 nclass; /* current number of classes */ l_int32 keep_pixaa; /* If zero, pixaa isn't filled */ struct Pixaa *pixaa; /* instances for each class; unbordered */ struct Pixa *pixat; /* templates for each class; bordered */ /* and not dilated */ struct Pixa *pixatd; /* templates for each class; bordered */ /* and dilated */ struct NumaHash *nahash; /* Hash table to find templates by size */ struct Numa *nafgt; /* fg areas of undilated templates; */ /* only used for rank < 1.0 */ struct Pta *ptac; /* centroids of all bordered cc */ struct Pta *ptact; /* centroids of all bordered template cc */ struct Numa *naclass; /* array of class ids for each component */ struct Numa *napage; /* array of page nums for each component */ struct Pta *ptaul; /* array of UL corners at which the */ /* template is to be placed for each */ /* component */ struct Pta *ptall; /* similar to ptaul, but for LL corners */ }; typedef struct JbClasser JBCLASSER; /* The JbData struct holds all the data required for * the compressed jbig-type representation of a set of images. * The data can be written to file, read back, and used * to regenerate an approximate version of the original, * which differs in two ways from the original: * (1) It uses a template image for each c.c. instead of the * original instance, for each occurrence on each page. * (2) It discards components with either a height or width larger * than the maximuma, given here by the lattice dimensions * used for storing the templates. */ struct JbData { struct Pix *pix; /* template composite for all classes */ l_int32 npages; /* number of pages */ l_int32 w; /* max width of original page images */ l_int32 h; /* max height of original page images */ l_int32 nclass; /* number of classes */ l_int32 latticew; /* lattice width for template composite */ l_int32 latticeh; /* lattice height for template composite */ struct Numa *naclass; /* array of class ids for each component */ struct Numa *napage; /* array of page nums for each component */ struct Pta *ptaul; /* array of UL corners at which the */ /* template is to be placed for each */ /* component */ }; typedef struct JbData JBDATA; /* Classifier methods */ enum { JB_RANKHAUS = 0, JB_CORRELATION = 1 }; /* For jbGetComponents(): type of component to extract from images */ enum { JB_CONN_COMPS = 0, JB_CHARACTERS = 1, JB_WORDS = 2 }; /* These parameters are used for naming the two files * in which the jbig2-like compressed data is stored. */ #define JB_TEMPLATE_EXT ".templates.png" #define JB_DATA_EXT ".data" #endif /* LEPTONICA_JBCLASS_H */