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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

connected_components_3d-3.28.0-cp314-cp314t-win_amd64.whl (579.9 kB view details)

Uploaded CPython 3.14tWindows x86-64

connected_components_3d-3.28.0-cp314-cp314t-win32.whl (653.4 kB view details)

Uploaded CPython 3.14tWindows x86

connected_components_3d-3.28.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.28.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.28.0-cp314-cp314t-macosx_11_0_arm64.whl (734.1 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

connected_components_3d-3.28.0-cp314-cp314t-macosx_10_13_x86_64.whl (834.3 kB view details)

Uploaded CPython 3.14tmacOS 10.13+ x86-64

connected_components_3d-3.28.0-cp314-cp314-win_amd64.whl (528.0 kB view details)

Uploaded CPython 3.14Windows x86-64

connected_components_3d-3.28.0-cp314-cp314-win32.whl (615.4 kB view details)

Uploaded CPython 3.14Windows x86

connected_components_3d-3.28.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.28.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.3 MB view details)

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

connected_components_3d-3.28.0-cp314-cp314-macosx_11_0_arm64.whl (711.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

connected_components_3d-3.28.0-cp314-cp314-macosx_10_13_x86_64.whl (814.0 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

connected_components_3d-3.28.0-cp313-cp313-win_amd64.whl (519.8 kB view details)

Uploaded CPython 3.13Windows x86-64

connected_components_3d-3.28.0-cp313-cp313-win32.whl (606.5 kB view details)

Uploaded CPython 3.13Windows x86

connected_components_3d-3.28.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.7 MB view details)

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

connected_components_3d-3.28.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.28.0-cp313-cp313-macosx_11_0_arm64.whl (706.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

connected_components_3d-3.28.0-cp313-cp313-macosx_10_13_x86_64.whl (809.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

connected_components_3d-3.28.0-cp312-cp312-win_amd64.whl (520.0 kB view details)

Uploaded CPython 3.12Windows x86-64

connected_components_3d-3.28.0-cp312-cp312-win32.whl (606.6 kB view details)

Uploaded CPython 3.12Windows x86

connected_components_3d-3.28.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.28.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.28.0-cp312-cp312-macosx_11_0_arm64.whl (707.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

connected_components_3d-3.28.0-cp312-cp312-macosx_10_13_x86_64.whl (810.9 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

connected_components_3d-3.28.0-cp311-cp311-win_amd64.whl (534.8 kB view details)

Uploaded CPython 3.11Windows x86-64

connected_components_3d-3.28.0-cp311-cp311-win32.whl (615.7 kB view details)

Uploaded CPython 3.11Windows x86

connected_components_3d-3.28.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.28.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.4 MB view details)

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

connected_components_3d-3.28.0-cp311-cp311-macosx_11_0_arm64.whl (709.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

connected_components_3d-3.28.0-cp311-cp311-macosx_10_9_x86_64.whl (817.4 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

connected_components_3d-3.28.0-cp310-cp310-win_amd64.whl (534.0 kB view details)

Uploaded CPython 3.10Windows x86-64

connected_components_3d-3.28.0-cp310-cp310-win32.whl (616.2 kB view details)

Uploaded CPython 3.10Windows x86

connected_components_3d-3.28.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.28.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.3 MB view details)

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

connected_components_3d-3.28.0-cp310-cp310-macosx_11_0_arm64.whl (711.8 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

connected_components_3d-3.28.0-cp310-cp310-macosx_10_9_x86_64.whl (821.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

connected_components_3d-3.28.0-cp39-cp39-win_amd64.whl (535.2 kB view details)

Uploaded CPython 3.9Windows x86-64

connected_components_3d-3.28.0-cp39-cp39-win32.whl (616.7 kB view details)

Uploaded CPython 3.9Windows x86

connected_components_3d-3.28.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.28.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.28.0-cp39-cp39-macosx_11_0_arm64.whl (712.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

connected_components_3d-3.28.0-cp39-cp39-macosx_10_9_x86_64.whl (822.0 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 a3fd1490388a9b09c7283a52f9e321ce8962d8a8f6d396a3d48e15ced7aafcf2
MD5 96b945a0f2fe4a9b7f7d83dd98a14c05
BLAKE2b-256 4a7e852b8e363d3d75ffdc32c60096ee7d98401154d5a4dbb5e83f1cb6e67c32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 ff6a02f9df509bd392064ddb0d3155084b34d028c5b2d3e1e31ecfa80dc7758c
MD5 fa1d9ed1ebe18a228f21ea935fbb1ac6
BLAKE2b-256 10f3fe7b3bd4f210d560be4241995f0cfa0ca5868673e82d7586d025d9f1affc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2e863d942e262273b42848d7582fd9c763aa040aa0824e085adc5aa00bbed176
MD5 1cae6636d8f1f7f6e194b45c91361746
BLAKE2b-256 f11fa2689133e8bf0888a950700f63908394bd01081eeaec790161120a1caeaf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f69681203be1d78e95419a628e49c0ed21b25e856670dfca1e601c977d4737f1
MD5 018b0071d0d086404da229d652158c51
BLAKE2b-256 def77cbddecefaf6660b4b710f12afdd62d58d6d72d0cf87667541a2011a67e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d656c07af7949c1794cfd6f4bf97705688b648e762c5d94b6e8947d95fb231e
MD5 83e6238e6c716b0674c6b0d51dfd6897
BLAKE2b-256 d5b3f76e8c1debbbb7c60fb8b37378fa0d605793d86881eeac3aea0549d8d2a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 79918ce3d34f81c37d1a66853aef69411ad61649149f6e698c1f1e765d5affc9
MD5 638812a07a7d601f0fc4f03e82b251a4
BLAKE2b-256 a5f49f1fb4e9ef4b4605d5887fe2837633406ea504a635ccca61e47eaaec5618

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 67be893926df66a75d7476aab8825330483f08673ec1d0bc50775e72f36d1c3b
MD5 8d5f7a9a33f41a55a2d0faba574f7769
BLAKE2b-256 4083334b27b59e4d289e5b045b7494e2708efec41cc06b56415f2926d76c31c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 a2b3444fb0480030598acf195f82a101807e95e51a10594723205b1998a0b07e
MD5 f0d22818df4cd03b9328e2235c0ecadc
BLAKE2b-256 1ddf3a7e6b70cde79cecb3218f6a1f02fda69b41b56510396f728a16c8668f5e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ef766190ca548938a815e772d78bc2bda4356ce39d0d885f6d05868168bcfc7f
MD5 e1833e40dc78abc9b421dad52c8c8c6a
BLAKE2b-256 2c2a889a7e74ceef69ff9ddfda52779a4a379b9e3b141641ddb10a4003f01128

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 35e1b137c0783521457ddd8637bf0b0a7e7840eedbe5507ae68aa85fa34f7b35
MD5 f9c951dcc5c5dd9d57b69f8449dda0e1
BLAKE2b-256 c98254518ff6f247116c1f3240275def170fefeccf7f302d831dd5106deb0b7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d51b4b40a54a70c89a07f9acc3029233702e06ffd8c4ed4acf020040622e276
MD5 bd1f57bcfab97e8f035dc264a517fcc3
BLAKE2b-256 fa41e13ec357c68d94fad25431d35ed48511922b7c5aea322a945d99005e1fd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 dd317321412652a0cea661ffb75624b1a3b76220a89911e4976a781adec396a8
MD5 87c89ab432660cc93ade486c713af483
BLAKE2b-256 e56b7be5531ff5a6c0dd5303287487114ab0e4d0983b82cde91ae45cc6d918aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 25ead6ff687cf465357014a0e034b4a96d7839afe6b7a80753e617f4923184ad
MD5 223850ffcf74b819e32aa0b530fe0d68
BLAKE2b-256 0791530cfa92b56287ac5e08d8d4e0db5be24f3ec2a05e67bb281bc0c69de37f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 960e9579c325e30fae145c8a2cccdbc57a104e3540b9002c874aa574d549bec8
MD5 2aa78b1064b8f9a9e0921d41d18dd31d
BLAKE2b-256 e157336c65f1409acd3ffd4cc15f2fcd8ed96f530f7a5775830fda03230498d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 be127b1d3401f66202c053ab491cacc555f81bfac1df7632eda6a7844398a705
MD5 f01a8790ae79ed9e88ab4d73fce2c61d
BLAKE2b-256 ada4ff7ede7091d1c58316a789842861ceb7ad61110589688f8017f2d5f6aa73

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 60defae033f025c07f4c1fb183ebbed0097af50926f984eb3df4da884ba8a190
MD5 413643520a0c1fdc72967b88d5a37e4f
BLAKE2b-256 72e3030d2014b6644232a4964a61c0a56fb98f6b58f20c979f9f9434eabaef9f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 698940875236dc9ab52c5147c431098d2eb0f968c027fe907a4ae5579f33a4d3
MD5 50a9cfa887e8ca681b05fd2be2e7e167
BLAKE2b-256 1bdc900d5762fc39a8efb663228cdc918d536527c19a3ab276751be2453543f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2e8885357391d17084de2f91602bd1dc35c5b7a54407d7ca8fcc6454e309f69c
MD5 7edadebc10c54bf0a51f1317cb3e0e06
BLAKE2b-256 a727f4bf63cff905c0d098dc8e9b1c6fadb0a894f65a6459c553673509e73e02

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 229bf246414940bac91735d3070abb30e6c85f6bff5f1feab579b2fcd1657dd0
MD5 6456d2d6a8048bf28d36e0753bf6bde0
BLAKE2b-256 0c95ed3ada4bbe1a0fa511993df74443d5f6a1b0d50abf44c808fc7f26c20745

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 b1fbe034305a6a7b5793c07fe349be2c10a407b6763c7914ff76041d08750609
MD5 0fe867be3f79ed2cad6fce8bab41b476
BLAKE2b-256 75d346f6319c687351f35d3c9968fc9b07287945146ef57ffcbfc3d92a287261

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 53351a24ea2c62a03cb1a079e47dfb1a2f65d66be47a96d3fba61b34ab16231f
MD5 06f5c423dc776897da67b73300d4d1b3
BLAKE2b-256 b5ac39aa8756ed7cb93bb302a1cc83915754d506a453cfc00c2308678ad39c43

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8feecc6d25aaedf91f7ab360b128c064ba4042aa074aa4d448b416fecc5a59d1
MD5 4bc0a44b304ffe98bb8697260a8d1cab
BLAKE2b-256 df1959e861733b05ea5a840985fe4e56e9f46b5139d5c35a034340fd9f73680e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5dcfb534ccd716b7cc13052d62abb85ea3fb5cf6785cfc387e02620ab96e4b6f
MD5 8df4b904e9617d19b4295e3b0774da8c
BLAKE2b-256 2533db1914168d5104fbd646990353c8e46750c63795da35914862e48537bbb6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ea651d309f6961987fe569cc11cd8f94ba6922cc2cd25b731d9a6b466bdfd00c
MD5 4b38f36b84eacf75a0fd933d92b2851c
BLAKE2b-256 0668971a9c04c49da5b17ed1b789467cb2c5450511cda18ef528b00314f1257e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3ad6d00a0f2948b99e0f253543ef1e9e634b6a55aaddbe7ee9f11d53d7c768fa
MD5 2ab3b2596a81ad436a1398d150eeb24e
BLAKE2b-256 0758ce641a94549c28b262fd9c6eba6b8e27f143a558e087f703538bc1052fa4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 da573e2ec2a40f15538d346b2f0dea9e9bb55f3e9ce36541f5f5e724f242b4ae
MD5 3bd6dff4b00d26d603a3aa2ef40a8327
BLAKE2b-256 67b6ef52cbb9ce8898ab918d6af2d6e3ac4f0ae83d14e1dccf19ce052133b74e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4c839aeb3aabbd954f801950aad8b21b5610ed48b6798fa457b7359610690df7
MD5 47b7015ea20df9e858381dc97afb0de3
BLAKE2b-256 67d69e17d145e281d6bbc4d8d0abb05a29fc8a14237379795630420f0b1d0e42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5eec0e4586814aed8f82784d68a92daa8ac6752116af8a085da1a15837519618
MD5 8420ab488b2775d4bef4fa63256b76e7
BLAKE2b-256 34ad53ad6a416dde111cfbf81cc71b3d90d5bb5809dea14fed5d619c64ae1af0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 516c5f5b101894733f0e580f03e5c08f2752b2d966be8347463b3d1b8342926f
MD5 d38a68a9d59b1ebc5f19d8f7498a5646
BLAKE2b-256 0dfa7b5916acca950ccbd36a0cb3978cae56b33b7c165aa3c7128b192907ee28

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8a6a172edd0c0a2346344e659d986c91ebfaa4707d9d6c6bdc9b194f4d7dc300
MD5 3685e3b59edbd7bcb55ab6e27dbcc9d1
BLAKE2b-256 4ac6e5351e79dcec53b0e39f0e82653ab1d36254dd165adba265c72694c15349

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d1f2ab6f8ccbfec8591f4a284650d6b7247e87ba7b90638ada11f3c9e3e67a46
MD5 43d3a6fa3ff726ef18f59d6e77156fa0
BLAKE2b-256 410c6089fb74621abad4bdf0f1bf187b6bf41f16cf32b522004a1009e26019b0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 282555c0116db526b40ca5ffed03524efdcb70782b775bb9949f9e5abc15ec2b
MD5 584906224d9f2cbd75aed8aa35385282
BLAKE2b-256 1fa3f320632d78cc907534309d5e153aba5131eed713bd88f4b00d751f86aa5e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 20a6b50ffaf390b0af5cebbc5aeb2f25d21e93e62d03ef43031f6c63f659c7cf
MD5 cd2f05ff4593451e5ac50c94d8d15914
BLAKE2b-256 2e0ec1a9168f4e6a9065c675bec2a85563f61d890bed5fdb1bec944f893201c9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7cc37b3991fa9ab509d525cd903932af7ca5c818c439c278431e83720ddc68a0
MD5 295a9cbc25f72dac777a54e62e7cc67f
BLAKE2b-256 23a4e25343e142e770c97ea8c56ed8ff1f33b986e887ba2797772d31f8a5454d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 58f20380d1f5416b992274f6ae01db1e3c6ca07920fc15bb331f77ca999ea583
MD5 42b64550571cbd2853692274923b4656
BLAKE2b-256 82b26397a0c86771f8bda44fda387c794b9f91655e42512ecdbfe234c6ea72bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 69dd7f5699780da05964bd95abb9ca03cc604fbc1fb8f27249211b2840bdd816
MD5 39cc2fe276101f8002c93411bffe5c5a
BLAKE2b-256 1fac54abd8f67a917acb5a8869eb7e619f51e53cf0f08fc23e6113eaf3ee2dae

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4d2860ad2d30c351df56e50abece5734155294ab6be955515a9dd34d6484760b
MD5 2715e96cc1593a0c2ed9eff4c043900f
BLAKE2b-256 690bb52d57ecd006efab581719c5cfea4e480b526d3579c8bafed70bd1ccb84d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 af47d031044f470ff2065e04fded039ee9312ecdde9d55f6b322d9a48c9b038f
MD5 a6891c4968c384df747ec5973ae3b475
BLAKE2b-256 d59bc250198f9159c550da651fa1b3a782424c00c1c06696818cb78a015872e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d050609d654ccb966a663cc0ea253de50d4650469d41372b36cfb90355dfa4af
MD5 6efb059a297cfa1433d478cb117180ca
BLAKE2b-256 27f040f466faca91e80566bd9021d823e84f2601e62333b7b07cfeede8e5a714

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 17f5e48b3755d6e681d3a7196507268cfb96d82045d104fa77523b5df13d5ea6
MD5 3d122742567bb658c7ccddb2920631a9
BLAKE2b-256 96ade854c1d0f38654d776147177e797b0aeff23f3c60444eb0804813c460929

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3db5d8e9a2d1188135b64627465c45959042661e754316cf2e91b01d24ab51bc
MD5 a212faeaf02cf5f3cf28e553b86f2503
BLAKE2b-256 18d61581a6b7043032095a1ea2f92de918bb55dad312eb9faffd6b4756a330bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.28.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 dccb359d0a76fef92adbf6562a924a65ca5ded09a2fd6eb1fafc22e9e80dd3ae
MD5 bcd632cb700363c5d6b220d092f54f08
BLAKE2b-256 101b111777696c638b856ce9c6b7b7134c39bd3cc0d32984220ee38fbb2c38c0

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