• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*====================================================================*
2  -  Copyright (C) 2001 Leptonica.  All rights reserved.
3  -  This software is distributed in the hope that it will be
4  -  useful, but with NO WARRANTY OF ANY KIND.
5  -  No author or distributor accepts responsibility to anyone for the
6  -  consequences of using this software, or for whether it serves any
7  -  particular purpose or works at all, unless he or she says so in
8  -  writing.  Everyone is granted permission to copy, modify and
9  -  redistribute this source code, for commercial or non-commercial
10  -  purposes, with the following restrictions: (1) the origin of this
11  -  source code must not be misrepresented; (2) modified versions must
12  -  be plainly marked as such; and (3) this notice may not be removed
13  -  or altered from any source or modified source distribution.
14  *====================================================================*/
15 
16 #ifndef  LEPTONICA_MORPH_H
17 #define  LEPTONICA_MORPH_H
18 
19 /*
20  *  morph.h
21  *
22  *  Contains the following structs:
23  *      struct Sel
24  *      struct Sela
25  *      struct Kernel
26  *
27  *  Contains definitions for:
28  *      morphological b.c. flags
29  *      structuring element types
30  *      runlength flags for granulometry
31  *      direction flags for grayscale morphology
32  *      morphological operation flags
33  *      standard border size
34  *      grayscale intensity scaling flags
35  *      morphological tophat flags
36  *      arithmetic and logical operator flags
37  *      grayscale morphology selection flags
38  *      distance function b.c. flags
39  *      image comparison flags
40  *      color content flags
41  */
42 
43 /*-------------------------------------------------------------------------*
44  *                             Sel and Sel array                           *
45  *-------------------------------------------------------------------------*/
46 #define  SEL_VERSION_NUMBER    1
47 
48 struct Sel
49 {
50     l_int32       sy;          /* sel height                               */
51     l_int32       sx;          /* sel width                                */
52     l_int32       cy;          /* y location of sel origin                 */
53     l_int32       cx;          /* x location of sel origin                 */
54     l_int32     **data;        /* {0,1,2}; data[i][j] in [row][col] order  */
55     char         *name;        /* used to find sel by name                 */
56 };
57 typedef struct Sel SEL;
58 
59 struct Sela
60 {
61     l_int32          n;         /* number of sel actually stored           */
62     l_int32          nalloc;    /* size of allocated ptr array             */
63     struct Sel     **sel;       /* sel ptr array                           */
64 };
65 typedef struct Sela SELA;
66 
67 
68 /*-------------------------------------------------------------------------*
69  *                                 Kernel                                  *
70  *-------------------------------------------------------------------------*/
71 #define  KERNEL_VERSION_NUMBER    2
72 
73 struct L_Kernel
74 {
75     l_int32       sy;          /* kernel height                            */
76     l_int32       sx;          /* kernel width                             */
77     l_int32       cy;          /* y location of kernel origin              */
78     l_int32       cx;          /* x location of kernel origin              */
79     l_float32   **data;        /* data[i][j] in [row][col] order           */
80 };
81 typedef struct L_Kernel  L_KERNEL;
82 
83 
84 /*-------------------------------------------------------------------------*
85  *                 Morphological boundary condition flags                  *
86  *
87  *  Two types of boundary condition for erosion.
88  *  The global variable MORPH_BC takes on one of these two values.
89  *  See notes in morph.c for usage.
90  *-------------------------------------------------------------------------*/
91 enum {
92     SYMMETRIC_MORPH_BC = 0,
93     ASYMMETRIC_MORPH_BC = 1
94 };
95 
96 
97 /*-------------------------------------------------------------------------*
98  *                        Structuring element types                        *
99  *-------------------------------------------------------------------------*/
100 enum {
101     SEL_DONT_CARE  = 0,
102     SEL_HIT        = 1,
103     SEL_MISS       = 2
104 };
105 
106 
107 /*-------------------------------------------------------------------------*
108  *                  Runlength flags for granulometry                       *
109  *-------------------------------------------------------------------------*/
110 enum {
111     L_RUN_OFF = 0,
112     L_RUN_ON  = 1
113 };
114 
115 
116 /*-------------------------------------------------------------------------*
117  *         Direction flags for grayscale morphology, granulometry,         *
118  *                   composable Sels, and convolution                      *
119  *-------------------------------------------------------------------------*/
120 enum {
121     L_HORIZ            = 1,
122     L_VERT             = 2,
123     L_BOTH_DIRECTIONS  = 3
124 };
125 
126 
127 /*-------------------------------------------------------------------------*
128  *                   Morphological operation flags                         *
129  *-------------------------------------------------------------------------*/
130 enum {
131     L_MORPH_DILATE    = 1,
132     L_MORPH_ERODE     = 2,
133     L_MORPH_OPEN      = 3,
134     L_MORPH_CLOSE     = 4,
135     L_MORPH_HMT       = 5
136 };
137 
138 
139 /*-------------------------------------------------------------------------*
140  *                    Grayscale intensity scaling flags                    *
141  *-------------------------------------------------------------------------*/
142 enum {
143     L_LINEAR_SCALE  = 1,
144     L_LOG_SCALE     = 2
145 };
146 
147 
148 /*-------------------------------------------------------------------------*
149  *                      Morphological tophat flags                         *
150  *-------------------------------------------------------------------------*/
151 enum {
152     L_TOPHAT_WHITE = 0,
153     L_TOPHAT_BLACK = 1
154 };
155 
156 
157 /*-------------------------------------------------------------------------*
158  *                Arithmetic and logical operator flags                    *
159  *                 (use on grayscale images and Numas)                     *
160  *-------------------------------------------------------------------------*/
161 enum {
162     L_ARITH_ADD       = 1,
163     L_ARITH_SUBTRACT  = 2,
164     L_ARITH_MULTIPLY  = 3,   /* on numas only */
165     L_ARITH_DIVIDE    = 4,   /* on numas only */
166     L_UNION           = 5,   /* on numas only */
167     L_INTERSECTION    = 6,   /* on numas only */
168     L_SUBTRACTION     = 7,   /* on numas only */
169     L_EXCLUSIVE_OR    = 8    /* on numas only */
170 };
171 
172 
173 /*-------------------------------------------------------------------------*
174  *                        Min/max selection flags                          *
175  *-------------------------------------------------------------------------*/
176 enum {
177     L_CHOOSE_MIN = 1,           /* useful in a downscaling "erosion"  */
178     L_CHOOSE_MAX = 2,           /* useful in a downscaling "dilation" */
179     L_CHOOSE_MAX_MIN_DIFF = 3   /* useful in a downscaling contrast   */
180 };
181 
182 
183 /*-------------------------------------------------------------------------*
184  *                    Distance function b.c. flags                         *
185  *-------------------------------------------------------------------------*/
186 enum {
187     L_BOUNDARY_BG = 1,  /* assume bg outside image */
188     L_BOUNDARY_FG = 2   /* assume fg outside image */
189 };
190 
191 
192 /*-------------------------------------------------------------------------*
193  *                         Image comparison flags                          *
194  *-------------------------------------------------------------------------*/
195 enum {
196     L_COMPARE_XOR = 1,
197     L_COMPARE_SUBTRACT = 2,
198     L_COMPARE_ABS_DIFF = 3
199 };
200 
201 
202 /*-------------------------------------------------------------------------*
203  *                          Color content flags                            *
204  *-------------------------------------------------------------------------*/
205 enum {
206     L_MAX_DIFF_FROM_AVERAGE_2 = 1,
207     L_MAX_MIN_DIFF_FROM_2 = 2
208 };
209 
210 
211 /*-------------------------------------------------------------------------*
212  *    Standard size of border added around images for special processing   *
213  *-------------------------------------------------------------------------*/
214 static const l_int32  ADDED_BORDER = 32;   /* pixels, not bits */
215 
216 
217 #endif  /* LEPTONICA_MORPH_H */
218