Skip to main content

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

Project description

PyPI version DOI

cc3d: Connected Components on Multilabel 3D Images

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

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

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

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

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

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

Python pip Installaction

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

pip install connected-components-3d

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

Requires a C++ compiler.

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

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

Python Manual Installation

Requires a C++ compiler.

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

Python Use

For detailed documentation, see the API docs.

The following functions are available with examples below:

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

C++ Use

#include "cc3d.hpp"

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

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

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

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

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

#include "cc3d_continuous.hpp"

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

#include "cc3d_graphs.hpp"

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

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

26-Connected CCL Algorithm

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

First Principles in 2D

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

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

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

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

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

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

Extending to 3D

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

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

j k l
m n .
. . .

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

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

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

a b c
d e f
g h i

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

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

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

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

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

Phantom Labels

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

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

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

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

a b c
d x .
. . .

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

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

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

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

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

This results in a modified decision tree.

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

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

4 and 6-Connected CCL Algorithm

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

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

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

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

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

P b
a x
. Q
R c

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

Four Pass Algorithm

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

Estimating Provisional Labels

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

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

A hierarchy of estimators can be written as:

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

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

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

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

Estimating Foreground Location

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

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

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

Early Abortion Points

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

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

Papers Using cc3d

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

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

References

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

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

connected_components_3d-3.29.0.tar.gz (83.0 kB view details)

Uploaded Source

Built Distributions

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

connected_components_3d-3.29.0-cp314-cp314t-win_amd64.whl (600.3 kB view details)

Uploaded CPython 3.14tWindows x86-64

connected_components_3d-3.29.0-cp314-cp314t-win32.whl (671.2 kB view details)

Uploaded CPython 3.14tWindows x86

connected_components_3d-3.29.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-3.29.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-3.29.0-cp314-cp314t-macosx_11_0_arm64.whl (746.8 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

connected_components_3d-3.29.0-cp314-cp314t-macosx_10_13_x86_64.whl (851.0 kB view details)

Uploaded CPython 3.14tmacOS 10.13+ x86-64

connected_components_3d-3.29.0-cp314-cp314-win_amd64.whl (549.9 kB view details)

Uploaded CPython 3.14Windows x86-64

connected_components_3d-3.29.0-cp314-cp314-win32.whl (632.8 kB view details)

Uploaded CPython 3.14Windows x86

connected_components_3d-3.29.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-3.29.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-3.29.0-cp314-cp314-macosx_11_0_arm64.whl (724.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

connected_components_3d-3.29.0-cp314-cp314-macosx_10_13_x86_64.whl (828.6 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

connected_components_3d-3.29.0-cp313-cp313-win_amd64.whl (541.5 kB view details)

Uploaded CPython 3.13Windows x86-64

connected_components_3d-3.29.0-cp313-cp313-win32.whl (623.5 kB view details)

Uploaded CPython 3.13Windows x86

connected_components_3d-3.29.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-3.29.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-3.29.0-cp313-cp313-macosx_11_0_arm64.whl (721.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

connected_components_3d-3.29.0-cp313-cp313-macosx_10_13_x86_64.whl (827.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

connected_components_3d-3.29.0-cp312-cp312-win_amd64.whl (541.8 kB view details)

Uploaded CPython 3.12Windows x86-64

connected_components_3d-3.29.0-cp312-cp312-win32.whl (623.7 kB view details)

Uploaded CPython 3.12Windows x86

connected_components_3d-3.29.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-3.29.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-3.29.0-cp312-cp312-macosx_11_0_arm64.whl (722.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

connected_components_3d-3.29.0-cp312-cp312-macosx_10_13_x86_64.whl (829.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

connected_components_3d-3.29.0-cp311-cp311-win_amd64.whl (555.7 kB view details)

Uploaded CPython 3.11Windows x86-64

connected_components_3d-3.29.0-cp311-cp311-win32.whl (633.2 kB view details)

Uploaded CPython 3.11Windows x86

connected_components_3d-3.29.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-3.29.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.29.0-cp311-cp311-macosx_11_0_arm64.whl (722.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

connected_components_3d-3.29.0-cp311-cp311-macosx_10_9_x86_64.whl (835.3 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

connected_components_3d-3.29.0-cp310-cp310-win_amd64.whl (555.0 kB view details)

Uploaded CPython 3.10Windows x86-64

connected_components_3d-3.29.0-cp310-cp310-win32.whl (633.8 kB view details)

Uploaded CPython 3.10Windows x86

connected_components_3d-3.29.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-3.29.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.29.0-cp310-cp310-macosx_11_0_arm64.whl (727.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

connected_components_3d-3.29.0-cp310-cp310-macosx_10_9_x86_64.whl (836.7 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

connected_components_3d-3.29.0-cp39-cp39-win_amd64.whl (555.9 kB view details)

Uploaded CPython 3.9Windows x86-64

connected_components_3d-3.29.0-cp39-cp39-win32.whl (634.0 kB view details)

Uploaded CPython 3.9Windows x86

connected_components_3d-3.29.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-3.29.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-3.29.0-cp39-cp39-macosx_11_0_arm64.whl (727.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

connected_components_3d-3.29.0-cp39-cp39-macosx_10_9_x86_64.whl (837.3 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: connected_components_3d-3.29.0.tar.gz
  • Upload date:
  • Size: 83.0 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-3.29.0.tar.gz
Algorithm Hash digest
SHA256 6f39c3679dc52ce5afd9c838b7573fc281f7ccfa583c9e42fac449c24ad9f30b
MD5 3db0f6ad024856204c1eee24b200df3a
BLAKE2b-256 9e0113575a6df84b2de4b7fd1ff4d63d97be81ee8f3014fbadf660bc879f755f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 28ebfca9ce7d9e22329e156384ac2c9d167c929706ab2b12a817acc815c05255
MD5 245cef5112a1e3613ede8fff0b201a2f
BLAKE2b-256 2029d7dda3728f32f43c3097882b2c3844db3bf2aee154071811d9b090109397

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 d62de9a9e89016c353c7caa28633945370fd133847c49e579cf9d8262f677acc
MD5 38f58d43596c75166e02adc7063ebb60
BLAKE2b-256 22a263b9ddb182d75a97bf96f63b2826d05b8c720393359ae671193c13a80c67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 836cd51a95ecc98e40796370ce9aa4c2ab16383d66949574858200d5fc6ec3ad
MD5 b09e3fabd746ef7e0d9de77f8f220126
BLAKE2b-256 6eefc33b358bc30dff169f22a783058c60afd9748f06d82eedb500bfc69e47c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7aa49e4de5af305b420a937907f266b6c797d6bbe1c6eb447c645ae5599baa09
MD5 e94cd19e74c9d3473b861d66235d8b61
BLAKE2b-256 c8b676ad00a9ffdaf0ad198cd8fc3cb00cb94030ad79cef6f779c8e66242695c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 955be1186091ff75a499575eb99466546a96ebbc239c8e502f9c81a9925774ec
MD5 bccd34adcafada335aeb8b7a024c3606
BLAKE2b-256 9a7fbdb81ae257aff149e58dca0cf73ad99fd4e6551b8e2a46c45e49cd45b15e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 a483b3a2ec96feccfd74da613af95e5c19057cdba07d81398be81a2e42307b4d
MD5 16c09c63d82b2fbcbd0e735ecc383935
BLAKE2b-256 2bfd58c76c2ebc97a5731e178a979c4416371b72bdd913ac0ff3e7a242936b01

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 97c6976fee8dab13e1cb3f7eff1c3ca816e18bc83d223c1998140a238db84bee
MD5 84bfe4c4c66bf3ea41228ea92a1fc519
BLAKE2b-256 8b7cd46cbe04f41d6ac0a65470561c93b7271681ef3ace629fdc9761d6873a27

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 dfff1cb56ae9a40f011ee6b8781ffff92bc7da094b92260ca8c016a9335c0b54
MD5 f9d114b03f4c815ab4d2159e6389d4b4
BLAKE2b-256 10410f1f03c159fd59a7aef96c16e612c1abd31ca51810c93273a694c7615ccd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bd98e9429fd640eb6249e7ff43a816757300a07bf1093f20f3975719d5005a0d
MD5 e3cb351058094fbd6a668e9f150b60cb
BLAKE2b-256 dc382e187a95c8486ce2bd6235d666012e01c27b5da0058c7d711b9f1c05b4c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2eed13d1f03c0a7d1b8bf02f2c163acd6042af816e6ba4d3e7d3b6806c55bcd1
MD5 c31d3032a9ab84dad99be9650050e563
BLAKE2b-256 84faead3f4b22cce73c48636dedb7bb9af35c4b819dac2efc1109e98899566a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e31ba64a5dc0a809cf5ad24dfe37de7eb0567e480c3e39acd5da655c4bc82757
MD5 a5bf02936b65ca67ca291189cd83b173
BLAKE2b-256 c8e5fabef5bb01b2ecc7b267c8505f6ede1f391a0752fb24fe5bfb4fb7fb1ce6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0707cc720d69f9cae2cea31aa51fe3654c43533429b6ffe1fd4e05a2858f8d10
MD5 abe746d364f571715b87d71c4fb16bbd
BLAKE2b-256 dc567f1770c6a794463b5074b690374f4e81eaa45cba7449ceddb072a8205154

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9feb8f8225ab927187b51daf306751ac3384a6aa2c1db2d8e4acf6acbe14e371
MD5 847bbc6454246ab8695ee819259c06aa
BLAKE2b-256 d1d929632184ba5aa1e7d765d5af866db1b5cce6285842aa5157199ecddca5df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 188dd687e12f591719dfd7c58f90c1b783872f72a617961f13753b8c222b507c
MD5 48c2dbf576c8f71cf8f6179866643353
BLAKE2b-256 b830b271806b70041799f01baf254044a8c21a320a058d27dc5bba8324d45566

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e3fd367292b9b16f4bd2dcf3bcddaa7c51695dbe46e6396774d348ecb9aeb1a
MD5 087db0847151fc6503067753219ccab3
BLAKE2b-256 210d8256a27a2f507f3213a871a5cd852a0220c786ef39dd648c686f0e885c64

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 773f4dec9f6e89f7c691609f57545e3232191e062c96eb27bb8db8ae67e5a8e8
MD5 4d1319c18e2f793bce8f4cbe46118a1a
BLAKE2b-256 0b0328961667e75e87c0b152cf559090d218cca56316ab07085f27eb2796aa12

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9821c91c58e61c2f2388a159a7469afdc865e48f77a7b149aaf26a0935354bc0
MD5 f94108f2c4a1c519a43acc69518f884f
BLAKE2b-256 07a3e23334fe7d61a054b49ae54dabb2e3e73287cc302396bda82db06a40c709

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 12120ee6538a90f9009f446eb0a49c80f1d5c291e6ae5b21082a0e5c20899411
MD5 a6896338ed5c3f0d3a534f9eb2e0bf39
BLAKE2b-256 4439e0add12ec94e64a5acd5980c74b6b4e2572200f282bc1e11e9dc323f7223

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a75bb4195f183389eed89c66afb1e51ab9a5438404e277d1f147bc1f0f2c467c
MD5 24a7cbc5d1ac4bf4d6723ca9bef5ad44
BLAKE2b-256 f13cf14c89b3a6b28fa9bea3e5af587efabe82bf8b2abf9a21be6436880985e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 bc2d0c47cb1cbd72a6e90aaaa69e0d696089e8f1758647d38ba2cec9f3ddba5c
MD5 8c4b008454772a1bf3e486cfa5214e02
BLAKE2b-256 56567aed450ffed15189e052f19f54dc2fb372a5409120722a0539db5af7f6e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 32901210e7ae1c39cbb0380763c41abf9102d16d1cefb298f9b44e7d7c630807
MD5 a014f7c965077e836169d4eb4900f0c2
BLAKE2b-256 9690c9eaf31123bff5766628605f5897a2b8051cea0f5b4aa3b3b7581a378f1b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d5d789ce0a9f83ab8d0b0a54594440becbaa7be7e5174199974e3993da3747ff
MD5 a4f991665d29ce7b58952f34e248e2dd
BLAKE2b-256 a4e91eb2f723f085703b60281397e966ff178fa902da589ea999f86a58f7bb03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 97a2956e68f14d7924bcd33a979eb5f6085e4ef98ba103b9beefb18cac2a7f0c
MD5 b4937370c648e0a09836075be0900427
BLAKE2b-256 c3d207f06b8ca76c44353a435a95f439abc9a2f90bc195e920d74ec1e2a9422c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 688d40b70f5d9f6fad8f0d3fd6a483619a2cc2e6e8204efc81d30a1801765e34
MD5 7513646d03530ba9b0aa38710f831b27
BLAKE2b-256 887d74140443e9021ed2a70695ed0b7b4b35f11f4c7735a2637a20e3a8a33c95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4f127be25f8c89d5b7867aa62ff2c3e1ea041853293c5a5feef9b770bf265eea
MD5 5a6732d126781f50849827fcc646becf
BLAKE2b-256 eb84935ae2acfa478b3220f52b30f5ff63ce1e4a5778c23a179f8f68ac00d7ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 512497034f2f9459848e5828cefd9a5b1ffd35d25b457ec3e7c116f0f1643ff5
MD5 e573102c1e6f65048315edc2c997219c
BLAKE2b-256 658a100bed3f80173574504e91dd3a82f81cadea2fc980eb49e90dfdab6245a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 086f9060d78e451138b6c240aa8c44c86504c60c0e3454c355411da9c526f7d0
MD5 e980ea9b2269e93388afbcf6b51aa639
BLAKE2b-256 1ce10e91bb8d4768b6751156373677feb2634eeaaa9d64bd48b10ac539b98eb0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4f1e377f8abad6a05395485afa4fd8ae9da2c8c88e85fc3e00c7ad32eea1f0da
MD5 64d1c354dd8d82c1afd58db59cd709c6
BLAKE2b-256 6abc347b010d16944c1d4ebee1b371983445e5b10c66b2f93beee97592bc9570

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f89a6cafaa90967cebc399c9c4e71f7b00ed8dc6021682d99085bff1e7bcf5c
MD5 7e5a58a3e9b6bd0e0f038b05e434dbc6
BLAKE2b-256 9dc3946e7f2da29ce3f420e816c6ea56d343ba5f2757ad3657c00962b4147501

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f6477d2673a98b62e72f173237c7433a503b847ea1e860c4459bbd256c4c4183
MD5 6da8f3c5558dc6a52123ae4e7fde789d
BLAKE2b-256 7092accf33ece16209613b77493296d987572f6dc3b9d718b7baadc5e90e5529

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 58e337263b1e14b92dc0ffdded4c13248ef5bd639144d86cef3a474c6034639a
MD5 4817f3d5d4dd0240ac15f54a771a748c
BLAKE2b-256 d5499d1d514db41087f7090a9f65cbb53d98e4a4fd4d4644a37adfad1c3f74de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 b8ddd292dccc9587f71585501ab50f878f722881285bdff37340443cd229ae48
MD5 6b39db849a85e3901334eb31869ac319
BLAKE2b-256 ebea5ee547ca1f3f26ef9f9d582631f2ca3013e142658b21107772edaf838161

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 db33f383672ab23c8768cffebb3639e00fbff261e623180e91ac084f651bda98
MD5 3d5ed94e7595442fd4d14afeb660b035
BLAKE2b-256 dca94753c29aefde1f179d8a9a262e9e32b68fde84d6ef5a402e3223bc516314

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6a8488a14f9e9b1f05049486b449fa30887789f3da91c0a02224aecc12319d87
MD5 042a047734cc6e0bad9e2f832a7ce93c
BLAKE2b-256 ed4a79d12298f24f829a3e6ad558903e0a1a3d44680a5d52ab6df2bc2ef6e223

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 49b4910634509033dd49a3143df9000f3d55933e0929337316c8c2a997fc48e3
MD5 bdb588c4b34f2620322e0e40ff502456
BLAKE2b-256 997465825aa7d7de84c24d0bab396e1be95315d28e3986ac1828359cfed735e1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cf92220ac564ca63a7c52c548b9df16d3804e31d8ae62483d4781ccd63400f7d
MD5 8cff0bdba1326299945a09517c98d14a
BLAKE2b-256 d61c0627049a346aa15869f09613863c24e066191f7d88e561a2b144a0d32465

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 11d819550963cc03b971bdfb8463a887155e7739c489c9763a4ab9654c255604
MD5 402789ae32fe9c67932bd8e7ab769d7c
BLAKE2b-256 199f94d56cb91f564b14a20488bcfbbc33b1855f8d6887c2861748176be4f839

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 af1c8da387dfb1002a762412cdd092572e30cdb145e02fab6ca1198ec3cae1d9
MD5 1299400c328e8fd034d4b1a965557dfa
BLAKE2b-256 d0d129ea4f6350c3e6aa363106019e85d3af224432e1c3758c1e2530deb64645

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e9a65ce8fffb0736655bcd1215be4279fdddbb8a38d711b61681b1a618f7a1e0
MD5 e06e2277f8750e4ee81ac5de3e9eb64f
BLAKE2b-256 0d3d7966ca080b91b4bb10c92a5f1c04f1480a8e1b0007f577859b2a81f3632a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7b5c66f766e2deb5cedc5f2ea4d9336b7430c2ab32721f5045e9b27bcac3862a
MD5 749075f9a0059fc1a6cfaaedb44733b6
BLAKE2b-256 a74b7d1c261408316eabe73613197ddef490997fac9c2fbec6b55d52e8afa0d5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0f382c2d2a2d8358f521892e07e6c4f5b01b31d178c393165700ab6e9128f4e
MD5 278c29c7162e5bdbb46edd92cf72b03c
BLAKE2b-256 f761b10d592519f4c8ba990a242cca0b8693ff3cfdaf9b2c88240584d14646a0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.29.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2b446fb9fc29ee01e5f3576372f39ce353f007b466c25bffc10d3b66dcc52718
MD5 e976e04ceb5e545dd39381b6c25b47bf
BLAKE2b-256 885fdcde3a06ef34e8867ce874005afba28f367058ac995735279617a8b5a468

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