1 /*====================================================================*
2  -  Copyright (C) 2001 Leptonica.  All rights reserved.
3  -
4  -  Redistribution and use in source and binary forms, with or without
5  -  modification, are permitted provided that the following conditions
6  -  are met:
7  -  1. Redistributions of source code must retain the above copyright
8  -     notice, this list of conditions and the following disclaimer.
9  -  2. Redistributions in binary form must reproduce the above
10  -     copyright notice, this list of conditions and the following
11  -     disclaimer in the documentation and/or other materials
12  -     provided with the distribution.
13  -
14  -  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
15  -  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
16  -  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
17  -  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ANY
18  -  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  -  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  -  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  -  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  -  OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
23  -  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  -  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *====================================================================*/
26 
27 #ifndef  LEPTONICA_WATERSHED_H
28 #define  LEPTONICA_WATERSHED_H
29 
30 /*!
31  * \file watershed.h
32  *
33  *     Simple data structure to hold watershed data.
34  *     All data here is owned by the L_WShed and must be freed.
35  */
36 
37 /*! Simple data structure to hold watershed data. */
38 struct L_WShed
39 {
40     struct Pix    *pixs;      /*!< clone of input 8 bpp pixs                */
41     struct Pix    *pixm;      /*!< clone of input 1 bpp seed (marker) pixm  */
42     l_int32        mindepth;  /*!< minimum depth allowed for a watershed    */
43     struct Pix    *pixlab;    /*!< 16 bpp label pix                         */
44     struct Pix    *pixt;      /*!< scratch pix for computing wshed regions  */
45     void         **lines8;    /*!< line ptrs for pixs                       */
46     void         **linem1;    /*!< line ptrs for pixm                       */
47     void         **linelab32; /*!< line ptrs for pixlab                     */
48     void         **linet1;    /*!< line ptrs for pixt                       */
49     struct Pixa   *pixad;     /*!< result: 1 bpp pixa of watersheds         */
50     struct Pta    *ptas;      /*!< pta of initial seed pixels               */
51     struct Numa   *nasi;      /*!< numa of seed indicators; 0 if completed  */
52     struct Numa   *nash;      /*!< numa of initial seed heights             */
53     struct Numa   *namh;      /*!< numa of initial minima heights           */
54     struct Numa   *nalevels;  /*!< result: numa of watershed levels         */
55     l_int32        nseeds;    /*!< number of seeds (markers)                */
56     l_int32        nother;    /*!< number of minima different from seeds    */
57     l_int32       *lut;       /*!< lut for pixel indices                    */
58     struct Numa  **links;     /*!< back-links into lut, for updates         */
59     l_int32        arraysize; /*!< size of links array                      */
60     l_int32        debug;     /*!< set to 1 for debug output                */
61 };
62 typedef struct L_WShed L_WSHED;
63 
64 #endif  /* LEPTONICA_WATERSHED_H */
65