Leptonica 1.85.0
Image processing and image analysis suite
Loading...
Searching...
No Matches
fmorphauto.c File Reference
#include <string.h>
#include "allheaders.h"

Go to the source code of this file.

Macros

#define OUTROOT   "fmorphgen"
 
#define TEMPLATE1   "morphtemplate1.txt"
 
#define TEMPLATE2   "morphtemplate2.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)
 
static SARRAYsarrayMakeInnerLoopDWACode (SEL *sel, l_int32 index)
 
static SARRAYsarrayMakeWplsCode (SEL *sel)
 
l_ok fmorphautogen (SELA *sela, l_int32 fileindex, const char *filename)
 
l_ok fmorphautogen1 (SELA *sela, l_int32 fileindex, const char *filename)
 
l_int32 fmorphautogen2 (SELA *sela, l_int32 fileindex, const char *filename)
 

Variables

static char wpldecls [][53]
 
static char wplgendecls [][30]
 
static char wpldefs [][25]
 
static char wplstrp [][10]
 
static char wplstrm [][10]
 

Detailed Description


   Main function calls:
      l_int32             fmorphautogen()
      l_int32             fmorphautogen1()
      l_int32             fmorphautogen2()

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


   This automatically generates dwa code for erosion and dilation.
   Here's a road map for how it all works.

   (1) You generate an array (a SELA) of structuring elements (SELs).
       This can be done in several ways, including
          (a) calling the function selaAddBasic() 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 fmorphautogen() on this SELA.  This in turn calls
       fmorphautogen1() and fmorphautogen2(), which use the text
       files morphtemplate1.txt and morphtemplate2.txt, respectively,
       for building up the source code.  See the file
       prog/fmorphautogen.c for an example of how this is done.
       The output is written to files named fmorphgen.*.c
       and fmorphgenlow.*.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 fmorphautogen() 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 files back to your src
       directory for compilation.  Put their names in the
       Makefile, regenerate the allheaders.h prototype file,
       and recompile the library.  Look at the Makefile to see how
       morphgen.1.c and fmorphgenlow.1.c are included.  These files
       provide the single high-level interface for erosion, dilation,
       opening and closing, and the lower-level functions to
       do the actual work, for all 58 SELs in the SEL array.

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

           PIX   *pixMorphDwa_1(PIX *pixd, PIX, *pixs,
                                l_int32 operation, char *selname);

       where the operation is one of {L_MORPH_DILATE, L_MORPH_ERODE.
       L_MORPH_OPEN, L_MORPH_CLOSE}, and 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 fmorphgen.1.c.

       N.B. Although pixFMorphopGen_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.

       For examples of use, see the file prog/binmorph_reg1.c, which
       verifies the consistency of the various implementations by
       comparing the dwa result with that of full-image rasterops.

Definition in file fmorphauto.c.

Macro Definition Documentation

◆ L_BUF_SIZE

#define L_BUF_SIZE   512

Definition at line 112 of file fmorphauto.c.

◆ OUTROOT

#define OUTROOT   "fmorphgen"

Definition at line 106 of file fmorphauto.c.

◆ PROTOARGS

#define PROTOARGS   "(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32);"

Definition at line 110 of file fmorphauto.c.

◆ TEMPLATE1

#define TEMPLATE1   "morphtemplate1.txt"

Definition at line 107 of file fmorphauto.c.

◆ TEMPLATE2

#define TEMPLATE2   "morphtemplate2.txt"

Definition at line 108 of file fmorphauto.c.

Function Documentation

◆ fmorphautogen()

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

fmorphautogen()

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 fmorphautogen1() and fmorphautogen2() for details.

Definition at line 249 of file fmorphauto.c.

References fmorphautogen1().

◆ fmorphautogen1()

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

fmorphautogen1()

Parameters
[in]sela
[in]fileindex
[in]filename[optional]; can be null
Returns
0 if OK; 1 on error
Notes:
     (1) This function uses morphtemplate1.txt to create a
         top-level file that contains two functions.  These
         functions will carry out dilation, erosion,
         opening or closing 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 fmorphgen.[n].c,
         where [n] is equal to the fileindex parameter.
     (4) If filename != NULL, the output file is [filename].[n].c.

Definition at line 287 of file fmorphauto.c.

References L_BUF_SIZE, L_COPY, L_INSERT, and L_NOCOPY.

Referenced by fmorphautogen().

◆ fmorphautogen2()

l_int32 fmorphautogen2 ( SELA * sela,
l_int32 fileindex,
const char * filename )

Definition at line 492 of file fmorphauto.c.

◆ makeBarrelshiftString()

static char * makeBarrelshiftString ( l_int32 delx,
l_int32 dely )
static

makeBarrelshiftString()

Definition at line 828 of file fmorphauto.c.

References L_BUF_SIZE.

Referenced by sarrayMakeInnerLoopDWACode().

◆ sarrayMakeInnerLoopDWACode()

static SARRAY * sarrayMakeInnerLoopDWACode ( SEL * sel,
l_int32 index )
static

◆ sarrayMakeWplsCode()

static SARRAY * sarrayMakeWplsCode ( SEL * sel)
static

sarrayMakeWplsCode()

Definition at line 675 of file fmorphauto.c.

References Sel::cy, Sel::data, L_COPY, Sel::sx, and Sel::sy.

Variable Documentation

◆ wpldecls

char wpldecls[][53]
static

Definition at line 118 of file fmorphauto.c.

◆ wpldefs

char wpldefs[][25]
static

Definition at line 182 of file fmorphauto.c.

◆ wplgendecls

char wplgendecls[][30]
static

Definition at line 150 of file fmorphauto.c.

◆ 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 223 of file fmorphauto.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 214 of file fmorphauto.c.