![]() |
Leptonica 1.85.0
Image processing and image analysis suite
|
Go to the source code of this file.
Functions | |
| PIX * | pixConnCompTransform (PIX *pixs, l_int32 connect, l_int32 depth) |
| PIX * | pixConnCompAreaTransform (PIX *pixs, l_int32 connect) |
| l_ok | pixConnCompIncrInit (PIX *pixs, l_int32 conn, PIX **ppixd, PTAA **pptaa, l_int32 *pncc) |
| l_int32 | pixConnCompIncrAdd (PIX *pixs, PTAA *ptaa, l_int32 *pncc, l_float32 x, l_float32 y, l_int32 debug) |
| l_ok | pixGetSortedNeighborValues (PIX *pixs, l_int32 x, l_int32 y, l_int32 conn, l_int32 **pneigh, l_int32 *pnvals) |
| PIX * | pixLocToColorTransform (PIX *pixs) |
Label pixels by an index for connected component membership
PIX *pixConnCompTransform()
Label pixels by the area of their connected component
PIX *pixConnCompAreaTransform()
Label pixels to allow incremental computation of connected components
l_int32 pixConnCompIncrInit()
l_int32 pixConnCompIncrAdd()
l_int32 pixGetSortedNeighborValues()
Label pixels with spatially-dependent color coding
PIX *pixLocToColorTransform()
Pixels get labelled in various ways throughout the leptonica library,
but most of the labelling is implicit, where the new value isn't
even considered to be a label -- it is just a transformed pixel value
that may be transformed again by another operation. Quantization
by thresholding, and dilation by a structuring element, are examples
of these typical image processing operations.
However, there are some explicit labelling procedures that are useful
as end-points of analysis, where it typically would not make sense
to do further image processing on the result. Assigning false color
based on pixel properties is an example of such labelling operations.
Such operations typically have 1 bpp input images, and result
in grayscale or color images.
The procedures in this file are concerned with such explicit labelling.
Some of these labelling procedures are also in other places in leptonica:
runlength.c:
This file has two labelling transforms based on runlengths:
pixStrokeWidthTransform() and pixvRunlengthTransform().
The pixels are labelled based on the width of the "stroke" to
which they belong, or on the length of the horizontal or
vertical run in which they are a member. Runlengths can easily
be filtered using a threshold.
pixafunc2.c:
This file has an operation, pixaDisplayRandomCmap(), that
randomly labels pix in a pixa (that are typically found using
pixConnComp) with up to 256 values, and assigns each value to
a random colormap color.
seedfill.c:
This file has pixDistanceFunction(), that labels each pixel with
its distance from either the foreground or the background.
Definition in file pixlabel.c.
| [in] | pixs | 1 bpp |
| [in] | connect | connectivity: 4 or 8 |
Notes:
(1) The pixel values in pixd label the area of the fg component
to which the pixel belongs. Pixels in the bg are labelled 0.
(2) For purposes of visualization, the output can be converted
to 8 bpp, using pixConvert32To8() or pixMaxDynamicRange().
Definition at line 195 of file pixlabel.c.
References L_CLONE, and PIX_PAINT.
Referenced by pixLocToColorTransform().
| l_int32 pixConnCompIncrAdd | ( | PIX * | pixs, |
| PTAA * | ptaa, | ||
| l_int32 * | pncc, | ||
| l_float32 | x, | ||
| l_float32 | y, | ||
| l_int32 | debug ) |
| [in] | pixs | 32 bpp, with pixels labeled by c.c. |
| [in] | ptaa | with each pta of pixel locations indexed by c.c. |
| [out] | pncc | number of c.c |
| [in] | x,y | location of added pixel |
| [in] | debug | 0 for no output; otherwise output whenever debug <= nvals, up to debug == 3 |
Notes:
(1) This adds a pixel and updates the labeled connected components.
Before calling this function, initialize the process using
pixConnCompIncrInit().
(2) As a result of adding a pixel, one of the following can happen,
depending on the number of neighbors with non-zero value:
(a) nothing: the pixel is already a member of a c.c.
(b) no neighbors: a new component is added, increasing the
number of c.c.
(c) one neighbor: the pixel is added to an existing c.c.
(d) more than one neighbor: the added pixel causes joining of
two or more c.c., reducing the number of c.c. A maximum
of 4 c.c. can be joined.
(3) When two c.c. are joined, the pixels in the larger index are
relabeled to those of the smaller in pixs, and their locations
are transferred to the pta with the smaller index in the ptaa.
The pta corresponding to the larger index is then deleted.
(4) This is an efficient implementation of a "union-find" operation,
which supports the generation and merging of disjoint sets
of pixels. This function can be called about 1.3 million times
per second.
Definition at line 348 of file pixlabel.c.
References L_CLONE, L_INSERT, pixGetSortedNeighborValues(), Ptaa::pta, and Pix::special.
| [in] | pixs | 1 bpp |
| [in] | conn | connectivity: 4 or 8 |
| [out] | ppixd | 32 bpp, with c.c. labelled |
| [out] | pptaa | with pixel locations indexed by c.c. |
| [out] | pncc | initial number of c.c. |
Notes:
(1) This labels the connected components in a 1 bpp pix, and
additionally sets up a ptaa that lists the locations of pixels
in each of the components.
(2) It can be used to initialize the output image and arrays for
an application that maintains information about connected
components incrementally as pixels are added.
(3) pixs can be empty or have some foreground pixels.
(4) The connectivity is stored in pixd->special.
(5) Always initialize with the first pta in ptaa being empty
and representing the background value (index 0) in the pix.
Definition at line 266 of file pixlabel.c.
References L_INSERT, and pixConnCompTransform().
| [in] | pixs | 1 bpp |
| [in] | connect | connectivity: 4 or 8 |
| [in] | depth | of pixd: 8 or 16 bpp; use 0 for auto determination |
Notes:
(1) pixd is 8, 16 or 32 bpp, and the pixel values label the
fg component, starting with 1. Pixels in the bg are labelled 0.
(2) If depth = 0, the depth of pixd is 8 if the number of c.c.
is less than 254, 16 if the number of c.c is less than 0xfffe,
and 32 otherwise.
(3) If depth = 8, the assigned label for the n-th component is
1 + n % 254. We use mod 254 because 0 is uniquely assigned
to black: e.g., see pixcmapCreateRandom(). Likewise,
if depth = 16, the assigned label uses mod(2^16 - 2), and
if depth = 32, no mod is taken.
Definition at line 117 of file pixlabel.c.
References L_CLONE, and PIX_PAINT.
Referenced by pixConnCompIncrInit().
| l_ok pixGetSortedNeighborValues | ( | PIX * | pixs, |
| l_int32 | x, | ||
| l_int32 | y, | ||
| l_int32 | conn, | ||
| l_int32 ** | pneigh, | ||
| l_int32 * | pnvals ) |
| [in] | pixs | 8, 16 or 32 bpp, with pixels labeled by c.c. |
| [in] | x,y | location of pixel |
| [in] | conn | 4 or 8 connected neighbors |
| [out] | pneigh | array of integers, to be filled with the values of the neighbors, if any |
| [out] | pnvals | the number of unique neighbor values found |
Notes:
(1) The returned neigh array is the unique set of neighboring
pixel values, of size nvals, sorted from smallest to largest.
The value 0, which represents background pixels that do
not belong to any set of connected components, is discarded.
(2) If there are no neighbors, this returns neigh = NULL; otherwise,
the caller must free the array.
(3) For either 4 or 8 connectivity, the maximum number of unique
neighbor values is 4.
Definition at line 476 of file pixlabel.c.
Referenced by pixConnCompIncrAdd().
| [in] | pixs | 1 bpp |
Notes:
(1) This generates an RGB image where each component value
is coded depending on the (x.y) location and the size
of the fg connected component that the pixel in pixs belongs to.
It is independent of the 4-fold orthogonal orientation, and
only weakly depends on translations and small angle rotations.
Background pixels are black.
(2) Such encodings can be compared between two 1 bpp images
by performing this transform and calculating the
"earth-mover" distance on the resulting R,G,B histograms.
Definition at line 560 of file pixlabel.c.
References GET_DATA_BIT, GET_DATA_BYTE, L_CLIP_TO_FF, L_LS_TWO_BYTES, pixConnCompAreaTransform(), and SET_DATA_BYTE.