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

This version

4.0.0

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-4.0.0.tar.gz (84.2 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-4.0.0-cp314-cp314t-win_amd64.whl (606.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

connected_components_3d-4.0.0-cp314-cp314t-win32.whl (675.5 kB view details)

Uploaded CPython 3.14tWindows x86

connected_components_3d-4.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.7 MB view details)

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

connected_components_3d-4.0.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.5 MB view details)

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

connected_components_3d-4.0.0-cp314-cp314t-macosx_11_0_arm64.whl (748.3 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

connected_components_3d-4.0.0-cp314-cp314t-macosx_10_13_x86_64.whl (856.6 kB view details)

Uploaded CPython 3.14tmacOS 10.13+ x86-64

connected_components_3d-4.0.0-cp314-cp314-win_amd64.whl (554.6 kB view details)

Uploaded CPython 3.14Windows x86-64

connected_components_3d-4.0.0-cp314-cp314-win32.whl (638.4 kB view details)

Uploaded CPython 3.14Windows x86

connected_components_3d-4.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.8 MB view details)

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

connected_components_3d-4.0.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.4 MB view details)

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

connected_components_3d-4.0.0-cp314-cp314-macosx_11_0_arm64.whl (726.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

connected_components_3d-4.0.0-cp314-cp314-macosx_10_13_x86_64.whl (835.7 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

connected_components_3d-4.0.0-cp313-cp313-win_amd64.whl (547.1 kB view details)

Uploaded CPython 3.13Windows x86-64

connected_components_3d-4.0.0-cp313-cp313-win32.whl (627.3 kB view details)

Uploaded CPython 3.13Windows x86

connected_components_3d-4.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.8 MB view details)

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

connected_components_3d-4.0.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.4 MB view details)

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

connected_components_3d-4.0.0-cp313-cp313-macosx_11_0_arm64.whl (723.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

connected_components_3d-4.0.0-cp313-cp313-macosx_10_13_x86_64.whl (834.5 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

connected_components_3d-4.0.0-cp312-cp312-win_amd64.whl (548.6 kB view details)

Uploaded CPython 3.12Windows x86-64

connected_components_3d-4.0.0-cp312-cp312-win32.whl (628.7 kB view details)

Uploaded CPython 3.12Windows x86

connected_components_3d-4.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.8 MB view details)

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

connected_components_3d-4.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.4 MB view details)

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

connected_components_3d-4.0.0-cp312-cp312-macosx_11_0_arm64.whl (725.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

connected_components_3d-4.0.0-cp312-cp312-macosx_10_13_x86_64.whl (835.5 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

connected_components_3d-4.0.0-cp311-cp311-win_amd64.whl (562.1 kB view details)

Uploaded CPython 3.11Windows x86-64

connected_components_3d-4.0.0-cp311-cp311-win32.whl (637.7 kB view details)

Uploaded CPython 3.11Windows x86

connected_components_3d-4.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.8 MB view details)

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

connected_components_3d-4.0.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.5 MB view details)

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

connected_components_3d-4.0.0-cp311-cp311-macosx_11_0_arm64.whl (725.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

connected_components_3d-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl (840.3 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

connected_components_3d-4.0.0-cp310-cp310-win_amd64.whl (563.8 kB view details)

Uploaded CPython 3.10Windows x86-64

connected_components_3d-4.0.0-cp310-cp310-win32.whl (638.3 kB view details)

Uploaded CPython 3.10Windows x86

connected_components_3d-4.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.7 MB view details)

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

connected_components_3d-4.0.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.4 MB view details)

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

connected_components_3d-4.0.0-cp310-cp310-macosx_11_0_arm64.whl (728.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

connected_components_3d-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl (842.1 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

connected_components_3d-4.0.0-cp39-cp39-win_amd64.whl (562.2 kB view details)

Uploaded CPython 3.9Windows x86-64

connected_components_3d-4.0.0-cp39-cp39-win32.whl (639.7 kB view details)

Uploaded CPython 3.9Windows x86

connected_components_3d-4.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (4.7 MB view details)

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

connected_components_3d-4.0.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (4.3 MB view details)

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

connected_components_3d-4.0.0-cp39-cp39-macosx_11_0_arm64.whl (728.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

connected_components_3d-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl (842.7 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: connected_components_3d-4.0.0.tar.gz
  • Upload date:
  • Size: 84.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for connected_components_3d-4.0.0.tar.gz
Algorithm Hash digest
SHA256 24b32585920631dd9e16c9d763c4ed1505e84290e4cd6ea78256e14930a7d205
MD5 39723999686cadec2864d1407ceff531
BLAKE2b-256 b316466a84b4bd168e3975301c4626d19618e1a8bf0035efe2720c1e836b19f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 63ca844d46a596f276940bffd86ea57bd3d8ca0cc9d87cbf9c2882a68ee3b6e5
MD5 7801f8d16544d4aa2f7d60417e56177d
BLAKE2b-256 e33f9028116e3cca898b6ab43f67b53e8834575c5d34bf32b69f54d4114339c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 0b55791dc9833c84a448f2d662f552307115aaf1064b459add7de4a4ff8f93a4
MD5 dbdd69900f1820b619f723f9f469ac37
BLAKE2b-256 607153596a6b729fa96696690be1d7e7084e82500bb83fa1432f5c85661b4024

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 81c454f3e68062936f7550e2646f090c18dc5318da951416d329e120ff87167f
MD5 b7f6a9c9ecf32be19756d68f6276caf6
BLAKE2b-256 805f71ded47af01007ef2fdf8527031caa254ef5f9329dadd59ae74bc12905de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d5b941faf50292e3f471eb465c199a6f39ff8b06ff08b029105bc055893ef9fe
MD5 2f2e0a5c8c8d59f84cf489f23b86ac87
BLAKE2b-256 4f475acc8f3e69df38d80baa6df1c53dbef60c50557274896e9f1c0910d86ff9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fc5b345cfd1c1d7976fc161ae99fd439a49f4f97677efec7eec0fd9325e0a319
MD5 c7455b5cf9efa94421ad88c4eb1b036e
BLAKE2b-256 1e939968c767e8f5914c8bb82dbcc5b334eeb64e144765fe9ae6a7501cc9ebba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 d4ad59eb8e030a2d71a0f83cef532f93c96731a15591065386f1529a71a42584
MD5 114614d64eeea93aaeeaf11302547a20
BLAKE2b-256 43acaf079ca9dcb7714de1444f466f5c8550d091e9e31d516d68f370aec5efd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ee2528e6633ff9fd50546482c353fd85d9e241f9d5491a8ff746a9f584d0265a
MD5 6a6df1bd98fe19dbc6488dd6e51d8e56
BLAKE2b-256 5913b0eac907888a8afb98bd8aed08d83d050242c8a419f6fd4cc5a97859711a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 8e9a5b3fb69d04a441bd241b7bb522c04de1a31ed1429164f49efd796547a641
MD5 56dd6de1201e24188e521c754227d17b
BLAKE2b-256 fbfd668f236f8fe1cab5e6bc884240dbf63a9a820de2f7a62180c30b3a5918d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bf3d25e7f0ee9a9479fe6d3f544ad2d48deedd15ae48ccaba5c03ce8512585c6
MD5 240f7338e8f6e01ad8d37be30303477e
BLAKE2b-256 43aa18aea7d249e824686a935513f07bd845a019197dc49969d9799b92ab5cc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 db4be645fc001b00524ca9cbf86620cfbe25b5b9a1a926ba95117dcdce109d33
MD5 313d8d375b3e09f25cd6f4897e05505d
BLAKE2b-256 4fa0ae88fa47f331a56204aecb836257aeaebad3e4bfd5122e9e0824c43a8b6f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cd20e397f41b9087ce2ed745ac35e1ac38b226122a443f6d2a9e51fbc5388af1
MD5 59376f9f1a4ef88e4680942713ef1d21
BLAKE2b-256 915c663d6c03e9f5ed8e1d851b787d8d96a3b7d9b9b1a7933ef6be0a2bb24ac9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a1befcc33e221e212b02348549f5b322872fef040d508da32c9f92882daaa060
MD5 75354c0ba09c2356923b013363a99b56
BLAKE2b-256 245e9cedc72b9579de6b9bbba5f5004e9af68b0d650d06a808ea830ba44c7e87

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 c46376cc417b14fc30c31c3962338c8cf5d11bbee5abf26f7d1303afbfc30d2e
MD5 115542965d09599bf1f1484f99855218
BLAKE2b-256 92186b703e81886cf29e909ade2d8788045b6f4b4553a2625345dd5afb221f51

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 d3d7086a87f79f9cf2ea1d9bbd190b19e5ac72a328512da53ea229774611f719
MD5 4958f5b91021cf65a5377a0d1b04718c
BLAKE2b-256 8fa1b4c905688ff49a824f31376e5d750fc7a28df4f7b78734260e9bbc1257fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6f20499cafd3ac0f40b0e2020a4b195bc21ebe0c92035c227c7014b197eb0ba2
MD5 4743f2960f27b51342a3550e6e0aec8b
BLAKE2b-256 70bd0a0b67ff5894f543fb7df0e793da252d8dd0a606c77f20947f1c75ec2374

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 aed25df3d287e2a28d7f099ce6012e420097d7be69a49f99373bd52a7179ca8c
MD5 dfc89b103b77ea82bc1a24b6f8118a4d
BLAKE2b-256 31ad71481b0e014c14bb40ff636384a630c55ad513c98b49280e6542e14993c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eeaf28a6996c716420a759e4e980a7e33887fc8153c0fee908420d45281d20e1
MD5 c7a2509922ae535f9f2201bd5669fa50
BLAKE2b-256 2b95d8c8a64fd78f2404e711dd21c574aca42965ab9f3d48277ea6531e2dce4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c59615828ffe543e3419562e4817650c614362559760c430a0e2974445adf524
MD5 bd5f3c8d3d3d286a6750e46218dc124a
BLAKE2b-256 ace91f5ff603f0a0b9e3389ff8e753cf3861c54779b28bf278478f783b3f4e3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b3c58944626ad1162756ebdfec9fc37059ac2e354994e57963152d158160e228
MD5 478247994fbfc6f94823902a28e89bea
BLAKE2b-256 676aaa3cb82902ab6d9274284d9e3367b42e2bd40b5981895392f5f6886c5fdb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 047922c92ec7f2c6398ee0fda5d8e573e3ea1f6d57d56af866546eed126fcd5d
MD5 8fdc4df0073036cc122b5dff4284bafb
BLAKE2b-256 3c9a96b11744e39ddd4da265757e8cb5474252849dcc902fb9fd2d2bc7c69f66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7f7fc0e965bd656f8e8d48370372f38c1fb7065c63792632e26b372b4440896a
MD5 4f21e39f49bd9c712db54204bdc7fd94
BLAKE2b-256 16a7c4cd9d2d65bb3dd3b95a756a59042360f1b05f0f653334dcb3b4210919fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c6562f4313ec37bb52ac4a119e083acf4476e48a1fb07865ca1586f07d4a8df2
MD5 e12d1b726c6ad47c84438148ae56c91a
BLAKE2b-256 21f6572233a80b04ffa71d50170d07054ae75daf61e111d1a10e12d94ee9bb2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4a5b0da91bd64c8fb71edacca3f225a0c93d2159844ac9c0af8ba9e9d0945367
MD5 5c7cff735ffc68505fa4880245cbebb5
BLAKE2b-256 1bc09dc5242d1136f01b94c572fd108f924d943e5f84abf4034e7d5ec17efdb3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 3e8e260d4ed0d60573491911fd8a5f6ca209720173e90ca3a456bf7e600da3e5
MD5 ca6557caad024ba7ec9e17592eb06a1a
BLAKE2b-256 efb4bf37bedf6f7632c9bc75bbf497456e3528e83f8bd82f0986f7b7b68da688

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c8ca92d76a82d97829ce9dda8403d190ede43434b831ca09a95651e4ab2e53b8
MD5 fc7b6716323f3170682fdcb428caddac
BLAKE2b-256 a3e191cc396a213b5eabec71ddd8e265dcc2bcd7e9deee13efc4b8d4ca174fa3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 085eb5e58dcc6d3473d5fcd82332140bb005058491e7e68db48799522f0bd032
MD5 a7383802b78aff04172f13c49a31501a
BLAKE2b-256 c7ab4d569cbb0482b62911bfa08725ab0c1585c558bd693fc54877c1aa5c27a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8b845f0b018b70032154628a8e42dc0d114aa3737c537eccfe687b73a1635089
MD5 5c7fe19036796070615d5f3fc053a40a
BLAKE2b-256 b88e5982be8b0d315cd52eb7821ed606a0338a349ff3efdb2c7c64f2cc154cc8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cc547be4ffaec776e8b56d11cd8ac4e78189e18d875af523fd6791fefb2b22dd
MD5 69f66783906d9598eef87b95ad0bc996
BLAKE2b-256 c92cb7184bb9a9d20d6005beb73e776559070f2d90ce03c72e7a1aba6cd9a37b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1a5ac5b2cdc87ed8ff4d3c2d5231cff03188df72165e6a334044da3572e6091
MD5 4788bb2d33731c2a99deca86687e9c8d
BLAKE2b-256 b3dc97d6b5e7fb2be7515f7172d9825e96b4d1d15a2e77b7628fd8b69b3819c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 edf2995eefe479996e2637cff8c80d6fd2e98e17d4b2405c6efab96f4f570484
MD5 2219142ee1247e908a70ba62338933fc
BLAKE2b-256 9964600259b131e1e3b0c67b726dc8c57d7fe75b317f67a5b6d7ff1d2b041123

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9ee5d82717b451846efde7d7f1f4c1443f1b1615177c02335efa7010254cf868
MD5 ee2c05ce95cc581f718c136b0373419b
BLAKE2b-256 136308ed95b1492ad69c861dbd9df598e0f04f3cd41a1f8bfa6994a77ae29c4c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 c01f9d376acfaa24dcf29f7c6e0139cde3a9aa92fe76f4599fc6f4bb3d943226
MD5 50ba708286dd385cf60d2ed8a9814492
BLAKE2b-256 05ceee98dd84e1108e54ca07151ce5b31e5ed3e8dbd159b07401356ac7173669

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2e157796dbe51f85fbe130e008a0e37df5e423dff6c8dad3d29065f74ae8bc0a
MD5 fd7833ff3427f755780eecb84f122565
BLAKE2b-256 02e66a9c6ea3edb9499688edfa1a11d9af954fc7d00bd7e28efda7fa06d04385

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c1afb486a298b503887424d5cc4e9e11be310af8d3c83d264c4d2312d2357cdd
MD5 8ca110195e0fdd0af1ac70edc6046511
BLAKE2b-256 d24a11c312324f7a4c9e741f6a224aa1d5d6e878ab7976a4717391856b9da5dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b21d8d1fdf6c9490ccce09c4d3f2ccc8f13ab54d31296287ddfcf6b77130a01
MD5 003ba9731d92138968a8dd6d56987741
BLAKE2b-256 2ac7db1a3a6818c594f1470ef3154d85cec261d08f417a63940bfcd82ce78512

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 897188bd4f2cf61b4f0796c10afe35dff81909ec23c9250014aea981f77830c4
MD5 5a648af5fd9a01845c2e6e50ea94b583
BLAKE2b-256 9b9a1c30476ef77f7d16fe4219754e7c23283ea05ae6b84e8e1070d91d008893

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 024d8f558cbd6352767c1636dc153fd43969e2160b3277d38ede3cfc15ea2533
MD5 3a7d6f2cf1e8b98a2b65ca5172b85bfe
BLAKE2b-256 e26aa17ab0f6cf584356cccca2899dcdeb653fd440f71c225431123fa9f5f5bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 6e0e4d3eeed05b78a2823718bd1f09f1df42e1ca7258dfa50db5ebdf241a30fa
MD5 45b834c76907c72b6f0a10ed3f825de4
BLAKE2b-256 1b6daf08dd2d6e6a8f06050f19c271698c13afc192e76a4f772015faac63c0ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cccc449ea9ab9ec26e3d72a6dbd70af2561058b24f9d352569cf5cb2f1f2f192
MD5 047c06456e0f1a04eb144b0df4a2df67
BLAKE2b-256 dbacec2f03cc52ac57770538d2b086d97e4d626c34e8d91bb6328d9c53522b33

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 83d7b76a3813ed473c5a1f8196efed155cf76d758e47e48b253a53e68ea7a8e0
MD5 ee1127cb863c56916f409152143d38a3
BLAKE2b-256 bb4376377932346ecc6c8fa947332e58b7d078b41484dcb699becb82b3699ca2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 590118da9d105eaba6da0bbe484d96f4d540b54e75209d193ddc3435341f8612
MD5 b63c0cd5c1e3fa56a0b84c2efa68f596
BLAKE2b-256 37bb1ed8823a05f87a723a8c613030337b637b7a81406db2ae2c8eb7a0bc4782

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8a4a9ff43352371e5e1307588ddae4d7de30937acfd3698157135b248f040ed4
MD5 37b45058c37832c6cebeca984bcc7c5b
BLAKE2b-256 8b9a1e9d4992974413f8cd73adee444a3d590d4072e48b8c09dca23858f273dc

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