Skip to main content

Connected components on discrete and continuous multilabel 3D and 2D images. Handles 26, 18, and 6 connected variants; periodic boundaries (4, 8, & 6).

Project description

PyPI version DOI

cc3d: Connected Components on Multilabel 3D Images

Binary and multilabel connected components. (a) A binary image (foreground white,  background black) (b) 4-connected CCL of binary image (c) 8-connected CCL of binary image (d) A multilabel image (e) 4-connected CCL of multilabel image (f) 8-connected CCL of multilabel image
Fig. 1. Binary and Multilabel Connected Components Labeling (CCL) 2D images are shown for simplicity. Black is the background color (zero). (a) A binary image (foreground white, background black) (b) 4-connected CCL of binary image (c) 8-connected CCL of binary image (d) A multilabel image (e) 4-connected CCL of multilabel image (f) 8-connected CCL of multilabel image.

Continuous value connected components (top) A three tone grayscale image with signed additive low magnitude noise (bottom) Extracted components using continuous value CCL with a delta value greater than the noise magnitude but smaller than the difference between tones
Fig. 2. Continuous Value Connected Components Labeling (CCL) (top) A three tone grayscale image with signed additive low magnitude noise (bottom) Extracted components using continuous value CCL with a delta value greater than the noise magnitude but smaller than the difference between tones

cc3d is an implementation of connected components in three dimensions using a 26, 18, or 6-connected neighborhood in 3D or 4 and 8-connected in 2D. This package uses a 3D variant of the two pass method by Rosenfeld and Pflatz augmented with Union-Find and a decision tree based on the 2D 8-connected work of Wu, Otoo, and Suzuki. This implementation is compatible with images containing many different labels, not just binary images. It also supports continuously valued images such as grayscale microscope images with an algorithm that joins together nearby values.

I wrote this package because I was working on densely labeled 3D biomedical images of brain tissue (e.g. 512x512x512 voxels). Other off the shelf implementations I reviewed were limited to binary images. This rendered these other packages too slow for my use case as it required masking each label and running the connected components algorithm once each time. For reference, there are often between hundreds to thousands of labels in a given volume. The benefit of this package is that it labels all connected components in one shot, improving performance by one or more orders of magnitude.

In general, binary images are much more common (usually resulting from image thresholding), but multi-label images crop up in instance segmentation and semantic labeling as a classifier may label touching clusters of adjacent pixels differently. If a gap between different labels is guaranteed, then the problem degenerates into the binary version.

Check out benchmarks to see a comparison with SciPy on a few different tasks.

Python pip Installaction

If compatible binaries are available for your platform, installation is particularly simple.

pip install connected-components-3d

If compatible binaries are not available, you can install from source as follows.

Requires a C++ compiler.

pip install numpy
pip install connected-components-3d --no-binary :all:

Occasionally, you may appear to successfully install cc3d, but on import you'll see an error that includes: numpy.ufunc size changed, may indicate binary incompatibility. You can either try upgrading numpy or compiling cc3d from source in this case.

Python Manual Installation

Requires a C++ compiler.

pip install -r requirements.txt
python setup.py develop

Python Use

For detailed documentation, see the API docs.

The following functions are available with examples below:

  • Connected Component Labeling (CCL)
  • Calculating centroids, bounding boxes, and voxel counts
  • Removal of small objects ("dust") (or large objects)
  • Extraction of k largest objects
  • Fast extraction of all objects one-by-one
  • Calculation of contact surface area and contact network
  • Extraction and coloring of a per voxel connectivity graph
import cc3d
import numpy as np

labels_in = np.ones((512, 512, 512), dtype=np.int32)
labels_out = cc3d.connected_components(labels_in) # 26-connected

connectivity = 6 # only 4,8 (2D) and 26, 18, and 6 (3D) are allowed
labels_out = cc3d.connected_components(labels_in, connectivity=connectivity)

# By default, cc3d works on multivalued labelings, but sometimes you want
# to treat a grayscale image as a binary image directly. It is also possible
# to process binary images more effectively. Binary image specific optimizations
# are not implemented yet though, but may be in the future.
labels_out = cc3d.connected_components(labels_in, binary_image=True)
# same as above, but less efficient
labels_out = cc3d.connected_components(labels_in > 0)

# If you need the borders to wrap around (e.g. for simulations, world maps)
# specify periodic_boundary=True, currently only supported for
# 4 and 8 (2d) and 6 (3d) connectivities.
labels_out = cc3d.connected_components(
  labels_in, connectivity=connectivity, periodic_boundary=True
)

# If you need a particular dtype you can specify np.uint16, np.uint32, or np.uint64
# You can go bigger, not smaller, than the default which is selected
# to be the smallest that can be safely used. This can save you the copy
# operation needed by labels_out.astype(...).
labels_out = cc3d.connected_components(labels_in, out_dtype=np.uint64)

# If you're working with continuously valued images like microscopy
# images you can use cc3d to perform a very rough segmentation.
# If delta = 0, standard high speed processing. If delta > 0, then
# neighbor voxel values <= delta are considered the same component.
# The algorithm can be 2-10x slower though. Zero is considered
# background and will not join to any other voxel.
labels_out = cc3d.connected_components(labels_in, delta=10)

# If you're working with an image that's larger than memory you can
# use mmapped files. The input and output files can be used independently.
# In this case an array labels.bin that is 5000x5000x2000 voxels and uint32_t
# in Fortran order is computed and the results are written to out.bin in Fortran
# order. You can find the properties of the file (shape, dtype, order) by inspecting
# labels_out.
labels_in = np.memmap("labels.bin", order="F", dtype=np.uint32, shape=(5000, 5000, 2000))
labels_out = cc3d.connected_components(labels_in, out_file="out.bin")

# Here's another strategy that you can use for huge files that won't even
# take up any disk space. Provide any iterator to this function that produces
# thick z sections of the input array that are in sequential order.
# The output is a highly compressed CrackleArray that is still random access.
# See: https://github.com/seung-lab/crackle
# You need to pip install connected-components-3d[stack] to get the extra modules.
def sections(labels_in):
  """
  A generator that produces thick Z slices
  of an image
  """
  for z in range(0, labels_in.shape[2], 100):
    yield labels_in[:,:,z:z+100]

# You can access compressed_labels_out using array notation
compressed_labels_out = cc3d.connected_components_stack(sections(labels))
# convert to numpy array, probably a big mistake since
# you probably expected it was going to blow up RAM
cc_labels = compressed_labels_out.numpy()
# if you don't like hanging onto this exotic format, you
# can write it as a numpy array to disk in a memory efficient way.
compressed_labels_out.save("example.npy.gz")
# or hang onto it
compressed_labels_out.save("example.ckl")


# You can extract the number of labels (which is also the maximum
# label value) like so:
labels_out, N = cc3d.connected_components(labels_in, return_N=True) # free
# -- OR --
labels_out = cc3d.connected_components(labels_in)
N = np.max(labels_out) # costs a full read

# You can extract individual components using numpy operators
# This approach is slow, but makes a mutable copy.
for segid in range(1, N+1):
  extracted_image = labels_out * (labels_out == segid)
  process(extracted_image) # stand in for whatever you'd like to do

# If a read-only image is ok, this approach is MUCH faster
# if the image has many contiguous regions. A random image
# can be slower. binary=True yields binary images instead
# of numbered images.
for label, image in cc3d.each(labels_out, binary=False, in_place=True):
  process(image) # stand in for whatever you'd like to do

# Image statistics like voxel counts, bounding boxes, and centroids.
stats = cc3d.statistics(labels_out)

# Remove dust from the input image. Removes objects with
# fewer than `threshold` voxels.
labels_out = cc3d.dust(
  labels_in, threshold=100,
  connectivity=26, in_place=False
)
# Removes objects with >= `threshold` voxels.
labels_out = cc3d.dust(labels_in, threshold=100, invert=True)
# Removes objects with < `threshold[0]` voxels and >= threshold[1]
labels_out = cc3d.dust(labels_in, threshold=[50,100])
# Removes objects with >= `threshold[0]` voxels and < threshold[1]
labels_out = cc3d.dust(labels_in, threshold=[50,100], invert=True)

# Get a labeling of the k largest objects in the image.
# The output will be relabeled from 1 to N.
labels_out, N = cc3d.largest_k(
  labels_in, k=10,
  connectivity=26, delta=0,
  return_N=True,
)
labels_in *= (labels_out > 0) # to get original labels

# Compute the contact surface area between all labels.
# Only face contacts are counted as edges and corners
# have zero area. To get a simple count of all contacting
# voxels, set `surface_area=False`.
# { (1,2): 16 } aka { (label_1, label_2): contact surface area }
surface_per_contact = cc3d.contacts(
  labels_out, connectivity=connectivity,
  surface_area=True, anisotropy=(4,4,40)
)
# same as set(surface_per_contact.keys())
edges = cc3d.region_graph(labels_out, connectivity=connectivity)

# You can also generate a voxel connectivty graph that encodes
# which directions are passable from a given voxel as a bitfield.
# This could also be seen as a method of eroding voxels fractionally
# based on their label adjacencies.
# See help(cc3d.voxel_connectivity_graph) for details.
graph = cc3d.voxel_connectivity_graph(labels, connectivity=connectivity)

# ...and turn it back into labeled values (probably
# not exactly the same ones). Note: this function currently
# assumes an undirected graph, so single voxel alterations are
# likely to go awry.
new_labels = cc3d.color_connectivity_graph(graph, connectivity=connectivity)

Note: C and Fortran order arrays will be processed in row major and column major order respectively, so the numbering of labels will be "transposed". The scare quotes are there because the dimensions of the array will not change.

C++ Use

#include "cc3d.hpp"

// 3d array represented as 1d array
int* labels = new int[512*512*512]();

uint32_t* cc_labels = cc3d::connected_components3d<int>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512
);

// The default template parameter for output type is uint32_t
uint64_t* cc_labels = cc3d::connected_components3d<int, uint64_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512
);

uint16_t* cc_labels = cc3d::connected_components3d<int, uint16_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512,
  /*connectivity=*/18 // default is 26 connected
);

size_t N = 0;
uint16_t* cc_labels = cc3d::connected_components3d<int, uint16_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512,
  /*connectivity=*/26, /*N=*/N // writes number of labels to N
);

#include "cc3d_continuous.hpp"

// For handling grayscale images. Note that the difference
// is the addition of the "delta" argument.
uint16_t* cc_labels = cc3d::connected_components3d<int, uint16_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512,
  /*delta=*/10, /*connectivity=*/6 // default is 26 connected
);

#include "cc3d_graphs.hpp"

// edges is [ e11, e12, e21, e22, ... ]
std::vector<uint64_t> edges = cc3d::extract_region_graph<uint64_t>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512,
  /*connectivity=*/18 // default is 26 connected
);

// graph is a series of bitfields that describe inter-voxel
// connectivity based on adjacent labels. See "cc3d_graphs.hpp"
// for details on the bitfield.
uint32_t* graph = extract_voxel_connectivity_graph<T>(
  labels, /*sx=*/512, /*sy=*/512, /*sz=*/512,
  /*connectivity=*/6 // default is 26 connected
);

26-Connected CCL Algorithm

The algorithm contained in this package is an elaboration into 3D images of the 2D image connected components algorithm described by Rosenfeld and Pflatz (RP) in 1968 [1] (which is well illustrated by this youtube video) using an equivalency list implemented as Tarjan's Union-Find disjoint set with path compression and balancing [2] and augmented with a decision tree based on work by Wu, Otoo, and Suzuki (WOS), an approach commonly known as Scan plus Array-based Union-Find (SAUF). [3] The description below describes the 26-connected algorithm, but once you understand it, deriving 18 and 6 are simple. However, we recently made some changes that warrant further discursion on 6-connected.

First Principles in 2D

In RP's 4-connected two-pass method for binary 2D images, the algorithm raster scans and every time it first encounters a foreground pixel (the pixels to its top and left are background), it marks it with a new label. If there is a preexisting label in its neighborhood, it uses that label instead. Whenever two labels are adjacent, it records they are equivalent so that they can be relabeled consistently in the second pass. This equivalency table can be constructed in several ways, but some popular approaches are Union-Find with path compression with balancing by rank and Selkow's algorithm (which can avoid pipeline stalls). [4] However, Selkow's algorithm is designed for two trees of depth two, appropriate for binary images. We would like to process multiple labels at the same time, making Union-Find preferable.

In the second pass, the pixels are relabeled using the equivalency table. Union-Find establishes one label as the root label of a tree, and the root is considered the representative label. Each pixel is then labeled with the representative label. Union-Find is therefore appropriate for representing disjoint sets. Path compression with balancing radically reduces the height of the tree, which accelerates the second pass.

WOS approached the problem of accelerating 8-connected 2D connected components on binary images. 8-connected labeling is achieved by extending RP's forward pass mask to the top left and top right corner pixels. In Union-Find based connected components algorithms, the unify step in the first pass is the most expensive step. WOS showed how to optimize away a large fraction of these calls using a decision tree that takes advantage of local topology. For example, since the top-center neighbor of the current pixel is also adjacent to the other mask elements, all of which have already been processed by virtue of the raster scan direction, if it is present it is sufficient to copy its value and move on. If it is absent, pick one of the remaining foreground pixels, copy their value, and use unify for the mask element on the right as it is now known to be non-neighboring with the left hand side. WOS's algorithm continues in this fashion until a match is found or all mask elements are processed at which point a new label is created.

For several years, this algorithm was the world's fastest, though it has been superceded by a newer work that exchanges the static decision tree for a dynamic one or precalculated generated one amongst other improvements. However, WOS's work is significant for both its simplicity and speed and thus serves as the inspiration for this library. For 2D 8-connected images, we provide a specialization using Wu et al's original decision tree for a slight performance boost.

We're interested in exploring the block based approaches of Grana, Borghesani, and Cucchiara ([5],[7]), however their approach appears to critically rely on binary images. We'll continue to think about ways to incorporate it. We also considered the approach of He et al [8] which is also supposed to modestly faster than than WOS. However, it substitutes the Union-Find data structure (one array) with three arrays, which imposes a memory requirement that is at odds with our goal of processing large images.

In April 2026, we've added the 2009 algorithm for 8-connected binary images by Grana et al. [9] This gives a slight speed boost. The Spaghetti Labeling work by Bolelli et al. is more powerful but the decision trees are so large they can only be written by a machine. [10]

Extending to 3D

The approach presented below is very similar to that of Sutheebanjard [6]. To move to a 3D 26-connected neighborhood, the mask must be extended into three dimensions in order to connect neighboring planes. Observe that the 8-connected mask covers the trailing half of the neighborhood (the part that will have been already processed) such that the current pixel can rely on those labels. Thus the mask for the 26-connected neighborhood covers only two out of three potential planes: the entire lower plane (nine voxels), and a mask identical to WOS's (four voxels) on the current plane. While some further optimizations are possible, to begin, the problem can be conceptually decomposed into two parts: establishing a 9-connected link to the bottom plane and then an 8-connected link to the current plane. This works because the current pixel functions as a hub that transmits the connection information from the 9-connected step to the 8-connected step.

Fig. 1: Mask for an 8-connected plane. If J,K,L, and M are all eliminated, only N remains and a new label is assigned.

j k l
m n .
. . .

The very first Z plane (Z=0) the algorithm runs against is special: the edge effect omits the bottom plane of the mask. Therefore, as the remaining mask is only comprosed of the 8-connected 2D mask, after this pass, the bottom of the image is 8-connected. At Z=1, the 9-connected part of the mask kicks in, forming connections to Z=0, making the current plane now (8 + 9) 17-connected. At Z=2, the 9-connected bottom mask now forms connections from Z=1 to Z=2 on the top, making Z=1 (17 + 9) 26-connected. By induction, when this process proceeds to completion it results in a 26-connected labeling of the volume.

Following inspiration from WOS, we construct a decision tree on the densely labeled bottom plane that minimizes the number of unifications we need to perform.

Fig 2. The mask for the lower plane in 3D.

a b c
d e f
g h i

As e is connected to all other voxels, if present, it can simply be copied. If e is absent, b and h fully cover the mask. If b is absent, h, a, c comprise a covering. If h is absent, b, g, i are one. Below is a list of coverings such that each proceeding entry in the list assumes the first letters in the entries above are background.

  1. e
  2. k, (h | g, i)
  3. b, (h | g, i)
  4. h, a, c
  5. m, (f | c, i)
  6. d, (f | c, i)
  7. f, g, a
  8. a, c, g, i
  9. c, g, i
  10. g, i
  11. i

The decision tree is then constructed such that each of these coverings will be evaluated using the fewest unifications possible. It's possible to further optimize this by noting that e and b are both fully connected to the upper 2D mask. Therefore, if either of them are present, we can skip the 8-connected unification step. It's also possible to try the DF covering first if B is background, which would save one unification versus HAC given even statistics, but it seems to be slightly slower on the dataset I attempted. To move from binary data to multilabel data, I simply replaced tests for foreground and background with tests for matching labels.

In order to make a reasonably fast implementation, I implemented union-find with path compression. I conservatively used an IDs array qual to the size of the image for the union-find data structure instead of a sparse map. The union-find data structure plus the output labels means the memory consumption will be input + output + rank + equivalences. If your input labels are 32-bit, the memory usage will be 4x the input size. This becomes more problematic when 64-bit labels are used, but if you know something about your data, you can decrease the size of the union-find data structure. I previously used union-by-size but for some reason it merely reduced performance and increased memory usage so it was removed.

For more information on the history of connected components algorithms, and an even faster approach for 2D 8-connected components on binary images, consult Grana et al's paper on Block Based Decision Trees. [5,7,9]

Phantom Labels

In the course of thinking of improvements to several algorithms, we developed a technique we term "Phantom Labeling" for improving the SAUF method directly.

Definition: Phantom Labels are elements of a CCL mask that
transmit connectivity information between other elements of the
mask but cannot directly pass their value to the current pixel
during the first pass of a SAUF derived algorithm.

Reproducing Fig. 1 again, but with new letters for the more limited problem, the standard SAUF mask appears like so:

Fig. 3: Mask for an 8-connected plane.

a b c
d x .
. . .

This results in a decision tree like so assuming x is a foreground pixel.

if b:
    x := b
elif a:
    x := a
    if c:
        unify(a,c)
elif d:
    x := d
    if c:
        unify(c,d)
elif c:
    x := c
else:
    x := new label

There is an opportunity here for eliminating up to half of the unify calls, one of the more expensive operations in modern CCL by slightly modifying the mask:

Fig. 4: 8-connected mask modified to include phantom label P.

. P .
a b c
d x .
. . .

This results in a modified decision tree.

if b:
    x := b
elif a:
    x := a
    if c and not P: <--- change here
        unify(a,c)
elif d:
    x := d
    if c:
        unify(c,d)
elif c:
    x := c
else:
    x := new label

The novelty of this technique is unclear, but it is very simple to apply and results in substantial speed ups for the 4 and 6 connected problems, a minor improvement for 8-connected, and is readily compatible with the multi-label approach unlike block based approaches.

4 and 6-Connected CCL Algorithm

Here is where the phantom label technique shines. It's a bit harder to find 4 and 6 connected algorithms in the literature, I assume because many of the techniques invented for the 8-way problem, such as the Union-Find data structure for the equivalency table and run-based approaches, are applicable to the simpler problem. However, the SAUF decision tree approach was lacking as every pixel required a unify call in the 4-way problem and two in the 6-way problem.

Fig. 5: 4-connected mask modified to include phantom label P.

P b .
a x .
if a:
    x := a
    if b and not P:
        unify(a,b)
elif b:
    x := b
else:
    x := new label

This gives a decent improvement on the order of 10-20%. If you're lucky, you might not incur even a single label merge operation. In the 6-way problem, there are three phantom labels that can be exploited and the improvement is closer to 50% on our data, a fairly substantial amount. Again, with luck you might avoid any unify operations at all.

Fig. 6: Mask for the 6-way problem with phantom labels P, Q, and R added.

P b
a x
. Q
R c

You can even use multiple routes to propagate information if a label is missing. For example, if path (a,P,b) is unavailable due to a missing P, you could potentially transmit information using path (a,R,c,Q,b).

Four Pass Algorithm

We introduce two additional passes over the image label prior to running the two-pass SAUF algorithm. These additional passes are used to collect statistcs for optimizing the SAUF passes.

Estimating Provisional Labels

The first additional pass is used to over-estimate the number of provisional labels generated by the first SAUF pass. A better estimation allows a smaller allocation for the Union-Find datastructure. For some operating systems, the reduced size of the allocation and improved caching recovers more time than is spent collecting statistics.

This can be computed by counting the number of transitions between labels along each row of the image. This scan is easily written such that the instructions can be vectorized to minimize the cost of the scan. The number of transitions is guaranteed to be larger than or equal to the number of provisional labels as all provisional labels are generated in this fashion and then reduced by stealing a label from a neighboring voxel.

A hierarchy of estimators can be written as:

0 <= provisional labels <= X transitions <= static estimate <= voxels

Binary images can also be estimated statically as voxels / 2 for 4 and 6-way, voxels / 4 for 8 and 18 way, and voxels / 8 for 26 connected. For multi-label images, the best static estimate is voxels as no assumptions can be made about how labels connect to each other (in the worst case all eight voxels in a cube have different labels).

It is also possible to check XY and XYZ transitions to get a tighter bound, but in experiments, the amount of time spent checking those directions exceeded the benefit obtained by checking the X pass. Often the X pass alone results in factors as high as voxels / 100.

Estimation of the number of labels also allows aborting processing before the first SAUF pass in the case of an all background cube.

Estimating Foreground Location

The second additional pass is estimating the location of the foreground. In the literature, this strategy is sometimes referred to as a "one-and-a-half pass" where the foreground location is computed during the first SAUF pass and then used to skip processing of background voxels during the relabeling pass.

Here we perform this check up front so that it can be performed minimally. Instead of integrating the calculation into the first pass which could force some computation on every voxel, we scan each row from the left to find the first foreground voxel and then scan from the right to the find the foreground voxel at the end. The results are tabulated in a uint32 table of starts and ends to each row of size 2 * sy * sz. This ensures that the volume is scanned at most once, and most likely much less if the shapes fill the space reasonably well. Then, both passes of the SAUF method scan only the part of each row indicated by this table.

Certain shapes and distributions defeat the efficiency of scanning only the starts and ends of the row (such as random images or an image with foreground on the start and end of each row and nowhere else). However, for a great many shapes, this provides substantial efficiencies and minimal downside for a dense multi-label image as only two YZ slices of the images are scanned before the table is completed.

Early Abortion Points

There are three locations in the algorithm at which further processing can be aborted early without changing the result.

  1. After estimating provisional labels if zero transitions are detected (an all zeros volume). A black image is returned.
  2. After the first SAUF pass if the number of provisional labels is zero or one. In this case, the provisional labels are guaranteed to be identical to final labels.
  3. After assigning final labels to each provisional label in a translation array. If the number of final labels equals the number of provisional labels, the provisional labels were accurately assigned and the relabeling scan can be skipped.

Papers Using cc3d

A number of papers are using cc3d now. Many of them seem to be deep learning applications as instance segmentation is liable to generate touching non-binary labels. Some are in geoscience, neuroscience, and medical fields. If cc3d is helpful to you, please feel free to email us and let us know. We might be able to offer some tips if its performance critical (though we can't guarantee timeliness of response). There are so many variations of the CCL problem, you might be surprised at what you can do.

https://scholar.google.com/scholar?as_ylo=2019&q=connected-components-3d&hl=en&as_sdt=0,31

References

  1. A. Rosenfeld and J. Pfaltz. "Sequential Operations in Digital Picture Processing". Journal of the ACM. Vol. 13, Issue 4, Oct. 1966, Pg. 471-494. doi: 10.1145/321356.321357 (link)
  2. R. E. Tarjan. "Efficiency of a good but not linear set union algorithm". Journal of the ACM, 22:215-225, 1975. (link)
  3. K. Wu, E. Otoo, K. Suzuki. "Two Strategies to Speed up Connected Component Labeling Algorithms". Lawrence Berkeley National Laboratory. LBNL-29102, 2005. (link)
  4. S. Selkow. "The Tree-to-Tree Editing Problem". Information Processing Letters. Vol. 6, No. 6. June 1977. doi: 10.1016/0020-0190(77)90064-3 (link)
  5. C. Grana, D. Borghesani, R. Cucchiara. "Optimized Block-based Connected Components Labeling with Decision Trees". IEEE Transactions on Image Processing. Vol. 19, Iss. 6. June 2010. doi: 10.1109/TIP.2010.2044963 (link)
  6. P. Sutheebanjard. "Decision Tree for 3-D Connected Components Labeling". Proc. 2012 International Symposium on Information Technology in Medicine and Education. doi: 10.1109/ITiME.2012.6291402 (link)
  7. C. Grana, D. Borghesani, R. Cucchiara. "Fast Block Based Connected Components Labeling". Proc. 16th IEEE Intl. Conf. on Image Processing. 2009. doi: 10.1109/ICIP.2009.5413731 (link)
  8. L. He, Y. Chao and K. Suzuki, "A Linear-Time Two-Scan Labeling Algorithm", IEEE International Conference on Image Processing, vol. 5, pp. 241-244, 2007.
  9. C. Grana, D. Borghesani, and R. Cucchiara, "Fast block based connected components labeling," in 2009 16th IEEE International Conference on Image Processing (ICIP), Nov. 2009, pp. 4061–4064. doi: 10.1109/ICIP.2009.5413731.
  10. F. Bolelli, S. Allegretti, L. Baraldi, and C. Grana, "Spaghetti Labeling: Directed Acyclic Graphs for Block-Based Connected Components Labeling," IEEE Transactions on Image Processing, vol. 29, pp. 1999–2012, 2020, doi: 10.1109/TIP.2019.2946979.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

connected_components_3d-3.27.0.tar.gz (81.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

connected_components_3d-3.27.0-cp314-cp314t-win_amd64.whl (569.1 kB view details)

Uploaded CPython 3.14tWindows x86-64

connected_components_3d-3.27.0-cp314-cp314t-win32.whl (639.6 kB view details)

Uploaded CPython 3.14tWindows x86

connected_components_3d-3.27.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

connected_components_3d-3.27.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.3 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

connected_components_3d-3.27.0-cp314-cp314t-macosx_11_0_arm64.whl (719.2 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

connected_components_3d-3.27.0-cp314-cp314t-macosx_10_13_x86_64.whl (818.6 kB view details)

Uploaded CPython 3.14tmacOS 10.13+ x86-64

connected_components_3d-3.27.0-cp314-cp314-win_amd64.whl (517.4 kB view details)

Uploaded CPython 3.14Windows x86-64

connected_components_3d-3.27.0-cp314-cp314-win32.whl (601.8 kB view details)

Uploaded CPython 3.14Windows x86

connected_components_3d-3.27.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

connected_components_3d-3.27.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

connected_components_3d-3.27.0-cp314-cp314-macosx_11_0_arm64.whl (695.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

connected_components_3d-3.27.0-cp314-cp314-macosx_10_13_x86_64.whl (797.7 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

connected_components_3d-3.27.0-cp313-cp313-win_amd64.whl (510.0 kB view details)

Uploaded CPython 3.13Windows x86-64

connected_components_3d-3.27.0-cp313-cp313-win32.whl (593.0 kB view details)

Uploaded CPython 3.13Windows x86

connected_components_3d-3.27.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

connected_components_3d-3.27.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

connected_components_3d-3.27.0-cp313-cp313-macosx_11_0_arm64.whl (692.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

connected_components_3d-3.27.0-cp313-cp313-macosx_10_13_x86_64.whl (794.3 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

connected_components_3d-3.27.0-cp312-cp312-win_amd64.whl (510.3 kB view details)

Uploaded CPython 3.12Windows x86-64

connected_components_3d-3.27.0-cp312-cp312-win32.whl (593.2 kB view details)

Uploaded CPython 3.12Windows x86

connected_components_3d-3.27.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

connected_components_3d-3.27.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

connected_components_3d-3.27.0-cp312-cp312-macosx_11_0_arm64.whl (692.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

connected_components_3d-3.27.0-cp312-cp312-macosx_10_13_x86_64.whl (794.9 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

connected_components_3d-3.27.0-cp311-cp311-win_amd64.whl (523.8 kB view details)

Uploaded CPython 3.11Windows x86-64

connected_components_3d-3.27.0-cp311-cp311-win32.whl (602.2 kB view details)

Uploaded CPython 3.11Windows x86

connected_components_3d-3.27.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

connected_components_3d-3.27.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

connected_components_3d-3.27.0-cp311-cp311-macosx_11_0_arm64.whl (694.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

connected_components_3d-3.27.0-cp311-cp311-macosx_10_9_x86_64.whl (800.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

connected_components_3d-3.27.0-cp310-cp310-win_amd64.whl (523.2 kB view details)

Uploaded CPython 3.10Windows x86-64

connected_components_3d-3.27.0-cp310-cp310-win32.whl (602.9 kB view details)

Uploaded CPython 3.10Windows x86

connected_components_3d-3.27.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

connected_components_3d-3.27.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

connected_components_3d-3.27.0-cp310-cp310-macosx_11_0_arm64.whl (697.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

connected_components_3d-3.27.0-cp310-cp310-macosx_10_9_x86_64.whl (804.9 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

connected_components_3d-3.27.0-cp39-cp39-win_amd64.whl (524.2 kB view details)

Uploaded CPython 3.9Windows x86-64

connected_components_3d-3.27.0-cp39-cp39-win32.whl (603.4 kB view details)

Uploaded CPython 3.9Windows x86

connected_components_3d-3.27.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

connected_components_3d-3.27.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

connected_components_3d-3.27.0-cp39-cp39-macosx_11_0_arm64.whl (697.7 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

connected_components_3d-3.27.0-cp39-cp39-macosx_10_9_x86_64.whl (805.6 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file connected_components_3d-3.27.0.tar.gz.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0.tar.gz
Algorithm Hash digest
SHA256 c479949d3f22daf64ed8be6435d2db0e9195c0a22c48139706e4c41cb1905e6f
MD5 0d67cdea3caf8ec7e0fdcfc19de88524
BLAKE2b-256 a0bd1931ca75e2711159743e8db75cf00e77fca50d9158b23ec916c45f74a0a8

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 494e569b4108224914f2d1652d05a21041a7edd5ee0c6f8ef6e8d13c6e525700
MD5 acda31d4791751d88046a5f47f93790a
BLAKE2b-256 09e3346020d222d22ca452108a919ef114668456fbaab8df097835b3e50a9408

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314t-win32.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 480b0efbb475368e67c16cfd57db101cc92e958ac6c63de59f713d22a5e58cc5
MD5 4296beccb0ef2c40fe79f1b4f98df063
BLAKE2b-256 d6cab02e8a2b6014fde01186182682263a25fc747cb94dbb89fe97557ccedc31

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 04f444cbc611c0b83c19e1a40656b02574c2852dc29bc1bd9129b12a68592dcc
MD5 ce53a680f9f2b964f80366cea5664d23
BLAKE2b-256 6cf304b3be1fe3a82583d60bcc3845c15377bdfeaaa6066bab16bb5a318c0910

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5af0fd2166bf04f1700d67007d13475b1720f086ca06f558dccd713bf9fbebcd
MD5 21d0ffdbf421790e291956c32abeb52c
BLAKE2b-256 489ebca754eaeffd534fe08a83a7aee44b8d26600b6c546548401502426f3741

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d9e5f617421d56596d7fa7308ec34d0266da7ddcc802aad868eebe4529d15ec6
MD5 cc92fdb3472007d58fe283d75ff2cddd
BLAKE2b-256 fb055f1e286dc0c8fde801962493e5c5f1d717d1add04722749eb9cb6f1fcb7c

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314t-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 5ba0684b8ba4d71ca6a6bca6c77a89362e673144e0b3d93c02e82bd9bccbcb77
MD5 378d74959d095cf5ba71b3bf11cd3b70
BLAKE2b-256 9dcc2e8930b9ae1af524854da32e0f4ce87a2a2d2e27dc6dc510437f6e981480

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d70d8b5d1cee53273d6d8a9db83df83325f4596c464f5c389f17d12603fb86fa
MD5 3eb2e9922bc1868b2f0aae8b9ea7163e
BLAKE2b-256 2ed90d005254f9705cbd1480a0cd1dccb86e0e780e6a61e837d9e7706a901114

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314-win32.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 b6a725442ede87e002abf47fe94d0985088a81700aeccc5e764e8e643a2a87ca
MD5 7832a300be08b5ac7a2cb5a343e410fb
BLAKE2b-256 e8a29bf08b07aa171aec012e49605c5b2f184edab2ebccafda090359a6e378b9

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 32e98234c68c6273553d562630da45f91e102df98d6a6ebb0679643369302ee1
MD5 5534910e63417463a05ac8b0b175e78f
BLAKE2b-256 df2f92fa8ea25c66a4409479f7f37795ab0419d3cdf366da25a51580de1a7dd3

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1f3ef8a9b690a7b5a654a6b4bc52af50e9f9e7ab4bc82b2d27a0de2ef9f8d480
MD5 7295902ff1897998a90e8661dfa90416
BLAKE2b-256 be97132af4475b24f3a68fc9d017b5a319f0743039649bebc47d29a1e468f2a1

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 84e0238719084f78620b653b603226eb82ab07cdb091e71d7fa6f8210a563592
MD5 1c12e16e461c69aa3b881d2bac765d02
BLAKE2b-256 006312004d175b48d0257a21502a16d8432adabc748636c8bd958c39c56b5b01

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp314-cp314-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 72c98e91d2a11b1b885dd44d7ba96340a96f4759c80a5853c261f64e5a869757
MD5 75ba6f32e6a9fedf84e2c0472bf9dca4
BLAKE2b-256 cd0f0cddc2449be201450b0fa2def13614f8125e0e80baf8606d7a0de91daf9d

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f8a960a11a40cd6be34a9f16180f8a7979313213b164d228a3d0d629486f1eb7
MD5 fd4e9275bf7bd3b851e2d0fc53de42b1
BLAKE2b-256 4beea26fc1e190de0c01b6d9e4b8a753f0d96cad4ec330d1482a2b16caf7dca0

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp313-cp313-win32.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 e7e27710416f554d0201588269e907b4a57549055f7d332d82d147e0dfb19cf1
MD5 79f6f7c0eadc6b68a43c2219a9db0fa7
BLAKE2b-256 e5bf8e1a6cf4c08e5ab171e0c452acaf458e701298f3627d074a9728e1b4123b

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 418359ab4b4680ead4e6de63f653b158c855e0c87c7a94a9099a59aac402ada1
MD5 4bfd4ff04af1b6bf8b3028cb9401c807
BLAKE2b-256 552ed2c62ed4139b4d3ca99fc66f06eea2e056257389bf07014a2114bb23ca8b

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 81d6f992d0023e9ef8c2c02467d5296c1be26bc00d907a7743c7ce849ec2a779
MD5 c4a1386f5f14db01d1d149c443c51998
BLAKE2b-256 29596399d34415af078ebbce741d024aa1740ebad7d54773b5ffc806c8e22de8

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2da1186b1594e2c14664b9a4a1e9c79e5f591aac9d4c9f722d2d10228708919e
MD5 3c5121b0b7d41047030122eafbb88fb4
BLAKE2b-256 819ec0254c6f5e9b3f575aba19815b8fb85640d6583ed75811593d39707e66e6

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0873a36baf180f5dd4927e026b44ef01bffc2594b9df531e4a834a6814ae455a
MD5 cb05292f4fef48758f55251ec5e5cc5b
BLAKE2b-256 df2fdded7f2cc9675dab1cc84437b12e21a0a962bf2b1c39914411e699e7392b

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 737b331df2db385c49cc0c643a5ea5209dbff453bb8deb8b81b5733a795e3132
MD5 e033fc276212de065d8cdfd050cfc535
BLAKE2b-256 ba8d09640a49f5b5466105a48a54174658100827e294080a0cecdfe3c347d568

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 6fca5146d9cdf6080e3e776021b9620c30a8d246165c3d204eecd957597941d0
MD5 c23850e45345058daf37622085bb845d
BLAKE2b-256 246179c952da21349899e9654960d21bec80d3797a8f2823162085da453cdaa8

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0b6e2475f32173a669ed7ca1298ef6cbad8d6c00ca8503d1f6e9023452ac3228
MD5 b53e1bc73d4504afd33197375e1e9f0b
BLAKE2b-256 2a55c9f8dc858454c4174870d5cdc5a2aa8e76d5d575a12420bb478083609316

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6929276db231e4fed1b7f88dcf29ece4edd18c6952c68f628c4d54ca7005c1d1
MD5 5fd663a1a26c6c95ec98b5814ef13225
BLAKE2b-256 5b7c5c61e0c178a8008e8b94ced19bbc20e68bd5c294ec5374e511023dc60413

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 55f9f7eeed553513397e75c5d55360a1069afee2a6f7d7a39de2a43a4521fa21
MD5 b1a4ebf346627c6cdd76e89ca128cbab
BLAKE2b-256 0ca9e918daf4dffbfc63827d01dc7e2ee18be09e4f3969eb961c9a111913cd97

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 1e09585d1112464b7709e1a1d8c66f88f5927989b02c1b620b9d740a8f3fe3ac
MD5 53f7533f489d722aaf8269391ab9c637
BLAKE2b-256 a389a34a1c521e254f26a16023e9c54125e2670c41ed651dc6b320435c255856

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 024fa16c9521fad7ad24319436cd2fb8dad87293c930b1f1a7244ea8ebf1ec05
MD5 01a61331f6467352a9f848e3df17efbe
BLAKE2b-256 f1fc8f7e10505c8c57d835d99033f98ebbe40bbf1c83d25f898dfb78480015f8

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 41efd6cc5b1996d2fb5d1d75cc5d7c42d8d9143783040686645ecaa14f19d72a
MD5 13618c66e95e0688d9fb2a62d47f5291
BLAKE2b-256 f4ab52100f9a29f9ef09d81db75bf9c9bfee7e6df64afea16e48cb7da50ec6b8

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d7422347b63796785b6ffde16baf1244a355f1a32655344c5aeaa0577104fc46
MD5 fdd99ff9f7d87a77025e4674b358860b
BLAKE2b-256 18d5970cc7bdb3572e2ace29c99c5c191975edff8aeadb693286b506d6420028

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a1081adc86bc07bef12a8ad50a93e679ce0eeb2582d52161a9ea78cff6024933
MD5 700db4871258917b723b7c4ccacabd41
BLAKE2b-256 7a51b7db081ddde8c130f3b163b73b7508601aba1c0aede9809909fc44734763

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f857a782082bc64d1c7d3020877178d761b9d2b79f419d2cf4e0502c680da30
MD5 d96680357fd580efd35e90efd2659b22
BLAKE2b-256 468d99f58c9a5786c78dc21d958dbf3a707bb0bba2cd6f9b924e6ac36968035a

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b8eedbc26d4c56e8fd98f45975ea04aa4d5be85e33030c3d5ca424f800c03a7d
MD5 7c4a48e1a287a73b603d6ed2bcb626ab
BLAKE2b-256 5e9a853cf4622e68c5554976b44be0de12e8359840b62a4adfecec3a659f00c8

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c9226bfc75e99410763a14038e1b5384b0cb9adb31eaec3085f6370bddea6fa5
MD5 7bc43cbac946b3d7eb07c7b6584b5b55
BLAKE2b-256 1b3c595ac91199b93b0568064a80d8170628746b8b58d42ea40d4b0b269b04fc

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 bcb07af6a95ff1aa161359b1fa4c8cae93874e05515cfd841eb5559e0b608665
MD5 f0692ef54203ad15f034ef4bd58288e7
BLAKE2b-256 fba347af5ccb36f7c1c8a9a127b27f50e22dfb2f830aba088730493b6ab4685c

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 59a520f15ca7cb7d9b8587fceef8bb727ba7e182559a17b2f8c061fbf8782b21
MD5 ef50d75391c7e22d26178ca540a01212
BLAKE2b-256 f7dd1e9ca50384693432916aafccd4cb841d4b7ffa65c80f1ff2d2b5aa019975

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 530e49d4d377cbebaaa79116c8d10abebe99076ec14cb862f6093347ca3c66de
MD5 639fc478eb639c386a8da037b2407c8c
BLAKE2b-256 3aa70c76c3f1bc4cc4a49741ebba9b43f92a52f6a4f33d0e94f2708bd7da311e

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 05335c5a8d31bd47c293649f2502ed95a83a2212ff6202febfa0a8c8ea48c687
MD5 b70f24f2f523ba21537fdaa509265c98
BLAKE2b-256 d3abbc6ce7815d0ed8d2b5d55737dae976ccb09c3ad8de9740aafc035cc12e47

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 41d6bd838d7a0fd4c34a1505bcde96cce11a4f36e9edd199b936edad842a537e
MD5 c3ef2087e5057a242a07fd16e2199e1d
BLAKE2b-256 158a0b3ba2dd6f03ef5ae6a2fc6796da00c8933afcce40ea0c04b200b8298fde

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 156464734ac4d7e6159b90a1eee310410c799aa0e9074513c4fc92a15ba239bb
MD5 d560681ca087c50feeabb664b98e7249
BLAKE2b-256 bc67dc6efaa2315ad0a0422cddf7d261bc929ff92fbe5587233ff54f9cdc953e

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp39-cp39-win32.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 4b2ef0e1db67e733fb322f69555491a713a4e1f08299c172b2d3edd7f3980297
MD5 acbb2329ca0231f641a23d0a12b5f5ab
BLAKE2b-256 a8e5aa306668c0bb43dd3e6102119e8d5e9a92f3c69bf7025f4347046a64392e

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 313967e3aff7755d936bca36c7f3590cd17561937ca4b0f282adca549398496c
MD5 5781b9a0b6c92e097b684b5e4ab542ad
BLAKE2b-256 a51b3aafb8a8a35a85bbc9ec8f27111e8b58476303dbfd20e1e16a0a7aff7f39

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6c35c895b5eea205059c5b2430834f6c48573770cfa61c2731c2dbc41587f516
MD5 eba8c9ad384ddce25a9d00b3b2e3c9f2
BLAKE2b-256 d18c9c580cbdd227e200fdf820f705ee2111d7f73eaa97d6db48170935cc8d9b

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e807ba094cf9d9027ba641118e0ef60c30b8cc3ee9194ec8eca0b2f9ced31d96
MD5 6c7fefb2525315288f7ceda494b38372
BLAKE2b-256 439c2ba63e5423b6359c181d61057c598756503a5b1bde33096f2c5af647382c

See more details on using hashes here.

File details

Details for the file connected_components_3d-3.27.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-3.27.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 be963d57c0d1b815eb69c90a279146311c1372c68152468bc01001f788f6bf07
MD5 82c0a943efb5baff841ec679aeea44f7
BLAKE2b-256 ca78af5afdc7d1db76240400bb566f2fa80b7c7f44d531587bdccd6e77c23bc0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page