Leptonica  1.82.0
Image processing and image analysis suite
fhmtauto.c File Reference
#include <string.h>
#include "allheaders.h"

Go to the source code of this file.

Macros

#define OUTROOT   "fhmtgen"
 
#define TEMPLATE1   "hmttemplate1.txt"
 
#define TEMPLATE2   "hmttemplate2.txt"
 
#define PROTOARGS   "(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32);"
 
#define L_BUF_SIZE   512
 

Functions

static char * makeBarrelshiftString (l_int32 delx, l_int32 dely, l_int32 type)
 
static SARRAYsarrayMakeInnerLoopDWACode (SEL *sel, l_int32 nhits, l_int32 nmisses)
 
static SARRAYsarrayMakeWplsCode (SEL *sel)
 
l_ok fhmtautogen (SELA *sela, l_int32 fileindex, const char *filename)
 
l_ok fhmtautogen1 (SELA *sela, l_int32 fileindex, const char *filename)
 
l_ok fhmtautogen2 (SELA *sela, l_int32 fileindex, const char *filename)
 

Variables

static char wpldecls [][60]
 
static char wpldefs [][24]
 
static char wplstrp [][10]
 
static char wplstrm [][10]
 

Detailed Description


   Main function calls:
      l_int32             fhmtautogen()
      l_int32             fhmtautogen1()
      l_int32             fhmtautogen2()

   Static helpers:
      static SARRAY      *sarrayMakeWplsCode()
      static SARRAY      *sarrayMakeInnerLoopDWACode()
      static char        *makeBarrelshiftString()

   This automatically generates dwa code for the hit-miss transform.
   Here's a road map for how it all works.

   (1) You generate an array (a SELA) of hit-miss transform SELs.
       This can be done in several ways, including
          (a) calling the function selaAddHitMiss() for
              pre-compiled SELs
          (b) generating the SELA in code in line
          (c) reading in a SELA from file, using selaRead()
              or various other formats.

   (2) You call fhmtautogen1() and fhmtautogen2() on this SELA.
       This uses the text files hmttemplate1.txt and
       hmttemplate2.txt for building up the source code.  See the file
       prog/fhmtautogen.c for an example of how this is done.
       The output is written to files named fhmtgen.*.c
       and fhmtgenlow.*.c, where "*" is an integer that you
       input to this function.  That integer labels both
       the output files, as well as all the functions that
       are generated.  That way, using different integers,
       you can invoke fhmtautogen() any number of times
       to get functions that all have different names so that
       they can be linked into one program.

   (3) You copy the generated source code back to your src
       directory for compilation.  Put their names in the
       Makefile, regnerate the prototypes, and recompile
       the libraries.  Look at the Makefile to see how I've
       included fhmtgen.1.c and fhmtgenlow.1.c.  These files
       provide the single high-level interface for the hmt, and
       the lower-level functions to do the actual work.

   (4) In an application, you now use this interface.  Again
       for the example files generated, using integer "1":

          PIX   *pixHMTDwa_1(PIX *pixd, PIX *pixs, const char *selname);

       where the selname is one of the set that were defined
       as the name field of sels.  This set is listed at the
       beginning of the file fhmtgen.1.c.

       N.B. Although pixFHMTGen_1() is global, you must NOT
       use it, because it assumes that 32 or 64 border pixels
       have been added to each side, and it will crash without those
       added pixels.

       As an example, see the file prog/fhmtauto_reg.c, which
       verifies the correctness of the implementation by
       comparing the dwa result with that of full-image
       rasterops.

Definition in file fhmtauto.c.

Function Documentation

◆ fhmtautogen()

l_ok fhmtautogen ( SELA sela,
l_int32  fileindex,
const char *  filename 
)

fhmtautogen()

Parameters
[in]sela
[in]fileindex
[in]filename[optional]; can be null
Returns
0 if OK; 1 on error
Notes:
     (1) This function generates all the code for implementing
         dwa morphological operations using all the sels in the sela.
     (2) See fhmtautogen1() and fhmtautogen2() for details.

Definition at line 213 of file fhmtauto.c.

References fhmtautogen1(), and fhmtautogen2().

◆ fhmtautogen1()

l_ok fhmtautogen1 ( SELA sela,
l_int32  fileindex,
const char *  filename 
)

fhmtautogen1()

Parameters
[in]selaarray
[in]fileindex
[in]filename[optional]; can be null
Returns
0 if OK; 1 on error
Notes:
     (1) This function uses hmttemplate1.txt to create a
         top-level file that contains two functions that carry
         out the hit-miss transform for any of the sels in
         the input sela.
     (2) The fileindex parameter is inserted into the output
         filename, as described below.
     (3) If filename == NULL, the output file is fhmtgen.[n].c,
         where [n] is equal to the 'fileindex' parameter.
     (4) If filename != NULL, the output file is [filename].[n].c.
     (5) Each sel must have at least one hit.  A sel with only misses
         generates code that will abort the operation if it is called.

Definition at line 255 of file fhmtauto.c.

References l_binaryRead(), L_BUF_SIZE, and selaGetCount().

Referenced by fhmtautogen().

◆ fhmtautogen2()

l_ok fhmtautogen2 ( SELA sela,
l_int32  fileindex,
const char *  filename 
)

fhmtautogen2()

Parameters
[in]selaarray
[in]fileindex
[in]filename[optional]; can be null
Returns
0 if OK; 1 on error
Notes:
     (1) This function uses hmttemplate2.txt to create a
         low-level file that contains the low-level functions for
         implementing the hit-miss transform for every sel
         in the input sela.
     (2) The fileindex parameter is inserted into the output
         filename, as described below.
     (3) If filename == NULL, the output file is fhmtgenlow.[n].c,
         where [n] is equal to the fileindex parameter.
     (4) If filename != NULL, the output file is [filename]low.[n].c.

Definition at line 437 of file fhmtauto.c.

References l_binaryRead(), L_BUF_SIZE, and selaGetCount().

Referenced by fhmtautogen().

Variable Documentation

◆ wplstrm

char wplstrm[][10]
static
Initial value:
= {"- wpls", "- wpls2", "- wpls3", "- wpls4",
"- wpls5", "- wpls6", "- wpls7", "- wpls8",
"- wpls9", "- wpls10", "- wpls11", "- wpls12",
"- wpls13", "- wpls14", "- wpls15", "- wpls16",
"- wpls17", "- wpls18", "- wpls19", "- wpls20",
"- wpls21", "- wpls22", "- wpls23", "- wpls24",
"- wpls25", "- wpls26", "- wpls27", "- wpls28",
"- wpls29", "- wpls30", "- wpls31"}

Definition at line 187 of file fhmtauto.c.

◆ wplstrp

char wplstrp[][10]
static
Initial value:
= {"+ wpls", "+ wpls2", "+ wpls3", "+ wpls4",
"+ wpls5", "+ wpls6", "+ wpls7", "+ wpls8",
"+ wpls9", "+ wpls10", "+ wpls11", "+ wpls12",
"+ wpls13", "+ wpls14", "+ wpls15", "+ wpls16",
"+ wpls17", "+ wpls18", "+ wpls19", "+ wpls20",
"+ wpls21", "+ wpls22", "+ wpls23", "+ wpls24",
"+ wpls25", "+ wpls26", "+ wpls27", "+ wpls28",
"+ wpls29", "+ wpls30", "+ wpls31"}

Definition at line 178 of file fhmtauto.c.