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.

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, consult Grana et al's paper on Block Based Decision Trees. [5,7]

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.

Project details


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.26.1.tar.gz (78.4 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.26.1-cp314-cp314t-win_amd64.whl (568.7 kB view details)

Uploaded CPython 3.14tWindows x86-64

connected_components_3d-3.26.1-cp314-cp314t-win32.whl (605.0 kB view details)

Uploaded CPython 3.14tWindows x86

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

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

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

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

connected_components_3d-3.26.1-cp314-cp314t-macosx_11_0_arm64.whl (717.3 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

connected_components_3d-3.26.1-cp314-cp314t-macosx_10_13_x86_64.whl (806.9 kB view details)

Uploaded CPython 3.14tmacOS 10.13+ x86-64

connected_components_3d-3.26.1-cp314-cp314-win_amd64.whl (515.9 kB view details)

Uploaded CPython 3.14Windows x86-64

connected_components_3d-3.26.1-cp314-cp314-win32.whl (566.6 kB view details)

Uploaded CPython 3.14Windows x86

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

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

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

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

connected_components_3d-3.26.1-cp314-cp314-macosx_11_0_arm64.whl (692.7 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

connected_components_3d-3.26.1-cp314-cp314-macosx_10_13_x86_64.whl (784.2 kB view details)

Uploaded CPython 3.14macOS 10.13+ x86-64

connected_components_3d-3.26.1-cp313-cp313-win_amd64.whl (506.2 kB view details)

Uploaded CPython 3.13Windows x86-64

connected_components_3d-3.26.1-cp313-cp313-win32.whl (557.3 kB view details)

Uploaded CPython 3.13Windows x86

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

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

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

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

connected_components_3d-3.26.1-cp313-cp313-macosx_11_0_arm64.whl (687.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

connected_components_3d-3.26.1-cp313-cp313-macosx_10_13_x86_64.whl (784.0 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

connected_components_3d-3.26.1-cp312-cp312-win_amd64.whl (506.4 kB view details)

Uploaded CPython 3.12Windows x86-64

connected_components_3d-3.26.1-cp312-cp312-win32.whl (556.0 kB view details)

Uploaded CPython 3.12Windows x86

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

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

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

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

connected_components_3d-3.26.1-cp312-cp312-macosx_11_0_arm64.whl (689.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

connected_components_3d-3.26.1-cp312-cp312-macosx_10_13_x86_64.whl (784.9 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

connected_components_3d-3.26.1-cp311-cp311-win_amd64.whl (518.5 kB view details)

Uploaded CPython 3.11Windows x86-64

connected_components_3d-3.26.1-cp311-cp311-win32.whl (568.1 kB view details)

Uploaded CPython 3.11Windows x86

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

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

connected_components_3d-3.26.1-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.26.1-cp311-cp311-macosx_11_0_arm64.whl (690.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

connected_components_3d-3.26.1-cp311-cp311-macosx_10_9_x86_64.whl (789.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

connected_components_3d-3.26.1-cp310-cp310-win_amd64.whl (521.2 kB view details)

Uploaded CPython 3.10Windows x86-64

connected_components_3d-3.26.1-cp310-cp310-win32.whl (569.5 kB view details)

Uploaded CPython 3.10Windows x86

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

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

connected_components_3d-3.26.1-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.26.1-cp310-cp310-macosx_11_0_arm64.whl (688.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

connected_components_3d-3.26.1-cp310-cp310-macosx_10_9_x86_64.whl (791.8 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

connected_components_3d-3.26.1-cp39-cp39-win_amd64.whl (521.2 kB view details)

Uploaded CPython 3.9Windows x86-64

connected_components_3d-3.26.1-cp39-cp39-win32.whl (570.1 kB view details)

Uploaded CPython 3.9Windows x86

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

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

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

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

connected_components_3d-3.26.1-cp39-cp39-macosx_11_0_arm64.whl (688.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

connected_components_3d-3.26.1-cp39-cp39-macosx_10_9_x86_64.whl (792.3 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1.tar.gz
Algorithm Hash digest
SHA256 2f558954c3f732d404fc9b380a36a934ba9216c54e387e3d32439fd35ed48bbb
MD5 fa4902a5cf641d5cff34de98a0af04f0
BLAKE2b-256 dbf57d2f66ef47b8496460e0738fdb349c7daa88ea6d39047a840a57364f8bb3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 0fa737b147081200df93f90af7684435e699f97691fbb2b278e212223e4a7892
MD5 279c7edf8282fc9c77afda94a4ecc96d
BLAKE2b-256 8c81c358dc5ccb392c1eb25e4baced217cf53ed7971039a47bab2d441ffb24bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 6ee949e00d3768327f39d6d6f0c69b7535a160de625480705d9c061c559c05ea
MD5 c8ced6aad387029cc3fffd6adf17c936
BLAKE2b-256 28cc11f1485a13bfc9a3ed58375dd7eb76392aca09479c3589988c75e758c26d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 05c9a31c658cf1834d928f58887203447ba7390824238325ee533c93deb2f76b
MD5 7d9ecba7adf6f8f5d2469188ae74561b
BLAKE2b-256 4a2b4e6246cfec615185667c2f3174ce3cd7ff3f903f6fe62e008b5b74a24ef9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cef3969410133260923cd70a7f04f774b31d814cd2c3d8487184290b6fcd59f2
MD5 9db363fcbefdb90782a3545d03cfb332
BLAKE2b-256 fc8b55cdc7c5a3b2335b48115ece12d8a2c70f773872585fdba0964b9bccdeb7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 488b028a57dc9d9dc90b05b0d8c60f56f5050bb8467f1c140324c0f7fe3e0410
MD5 c4605dd4dd43c914747f5ac433b835e7
BLAKE2b-256 c99f85ca273e266d61732560661985b78330463f2f10a18bb3bcf02ea43babc5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314t-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2f86f5efc3de68bf0a7bb4af19ef04887390b78ca3415c1380878612040f9757
MD5 1362bd1de969b31bd72c51ea63716dd9
BLAKE2b-256 b12a90b5aa5a2705ea243fb4d4126b818e701406583640856d8aba2755460c6a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 bff4e40cd8f8f064f018fa0175b10c7bacb76f2b777f34f6385b84cdc3bfd6e1
MD5 43e7f4a8dc9fa606908dcce16a05e977
BLAKE2b-256 7fcb76ad906c2341a73ed761ee76af638b5f4beca48a244969ebad84b745f7b9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 593968c3fad3ffd562e425e8bc317aca2e354ddd76ca5294580fb5eefbfb1cca
MD5 119091e52a0b52e8777a18aa229ff46f
BLAKE2b-256 c346a059c8d003b426901fb659c53b3399630136a6de8a241a8e44aaf2e88316

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3e185ddcc9f1c2e3f1e5a87b49fa7cee45218009072920d6e2e533ab22830fc3
MD5 ae314276a1868416913baba42eced424
BLAKE2b-256 c769add0ee2b3e9beab866db66694492119d29ef2a4a49189bbb618e6fffef55

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b7fe75a7be6f7c61b697033eed6ad09b5d459f9173c2c8b21e4aed0610f53465
MD5 1292aff4c716d61a1fd9c45d166b5952
BLAKE2b-256 64eed3038d21ed2cdbbd62c89dc8ebdff47ee761f67c484ecaa6e9068da07b7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff2b1fa9ca9ea98befcdbc267f8aff31d48065044f0e0ecdd21e408f5d16dd5b
MD5 5240afb92c5cdb98c9ca8773dd2ab703
BLAKE2b-256 c3fb271046c3a9e6961965065c8dbbea1c8f42fd557808c59fc441e3bef6443c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp314-cp314-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e7583d0d7043be5aa247d49aedb24ee6f5d3d0804661b6bec1d916243fa5d3e1
MD5 50800d51486f29c5cfdd50ce9486fb2f
BLAKE2b-256 79a00845a78f197a791191cd6822c380016c530447ee79e2700c9e554bbef964

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 bbec98b651ec453be053b3d2b188cdb2e050e61e1d7f4cad6b221490d96ae9ce
MD5 1554958eb59b5ade99e09af0dc758ed5
BLAKE2b-256 bebf95b4e3fe0e79d08c4a41b6c203162bce8a2eed146a3b627ce9d142415fb6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 de38f0b09a17e37c9fb20311fcc5304a7c5b4945a895fba6577a174cc8725c89
MD5 8917293b30dc3a21cd9ea63bef6e4dc1
BLAKE2b-256 941c7a15d08a6086e807d7eeea7ad44d54e2a2947e3228d5157a3231f73f003c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 53e4d22e7305dc274091fa3297d5c1957a513be75cfe8bcd018fad1c7695b9e0
MD5 6dc2ea7b5d2e658c6565591710e210f1
BLAKE2b-256 da40528021d88e156c2139d6880274ebc82e8d43c2ce496f7a149b2d1a65aac1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a540449af682485182b50da50a98423e43468bc7142f0ad221d70399065be1f0
MD5 414971af839da5c73c85430387e8a343
BLAKE2b-256 10c30428e93f457cb4684235e36a49dc925761b3a653df419f025338bf92c4fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f3785336f2b902a05dd01fcfb8c91ff2f8a4667d4ffa47a74e668540d1abe902
MD5 b51e7bc58848c12882e7710b858dd25b
BLAKE2b-256 ce31ee3c1c6db9d10ae327eca541c0ac10be216dbc82d3784c52f11b313e509d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 9cb881c1f37eab5799d23cd0862e785bf6959faea3208db6ceb9fe27c45e7a6b
MD5 5d7934d97b3e205e9bf2dd3b62d2b0c6
BLAKE2b-256 0441ccccab8f6f05589b976949da7339cab50aae09c8811b4de58d3f1992e192

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7f43e869891c520feccec617b26655216a3acc1acd2db1b0e94022fcd19750d9
MD5 1b473a645c063c31db7db2610af8acbf
BLAKE2b-256 fa899a0ed460042c4ad3f3bc2ab2c047ecf70841cae20d97861af6713395a109

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 404394c08ff3bdfca24fb1ed104151ba849b595875505bda9e1459ec97804300
MD5 754bb657f980311da3b3682d5feb9299
BLAKE2b-256 e5da2e63bcc11fd8f852ec9b74c6fa6603e96f87c5f643c8a1d2bb394ba2ec08

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5351d52b3e0247b29c2aada10eddbf96dcd0b997640cd35db6c77e4bb5b79c06
MD5 6b1ec6709bb1976b16b69cd30c27ed88
BLAKE2b-256 db5785198a0581cd49d115adce771bd948a8279c9c04935f85a252c5b93014d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f17ed51e348012413da666d948e39c27e1d33a7080ee6024a70c2814673d319e
MD5 39e9376f3bf0781012d84e9099620727
BLAKE2b-256 1aa61f0121dbf45470a53ef38a4e09584febfc4145f752abc8dce1d6b9d86be9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 af13eb0bed323583dfdb67e8e2a5eded21974e5fc82f8a53a389ab6ffa978433
MD5 adf6fc2d80759137a71fd3804e61898b
BLAKE2b-256 9ba8d8e77ca1369fd83180da509cfd57811652595806719ae9abd1ee14fa2381

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 bbe80992b0c3f991888b378d19399d60c4eabc08995478ca40216993d8d234bf
MD5 983d5394ec8503f2f41b064e8a37d7b8
BLAKE2b-256 a966d6a66ae3407af69dcf1a6ecd94c333c14b15725850b565d3554332c99b86

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ae86c2e195836750facbbbe88414370e711cf17e68ae110f66b7bd98ea90611f
MD5 fc00864be0af27d8b5863b369333b2b6
BLAKE2b-256 bbd70335fc9e969091e8c3e38bad059b622b0009c779aca44faa29095b78bc0d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 497de338400befa1a60e4a27cca7cc1393a52140a4790aba248b5b21fbb1428d
MD5 9ce551dd212ca50617d9696ae945bdde
BLAKE2b-256 1f386042c6d8c0118c6a53c83434fc6804a2d2bcb18485854368bb971ee2b584

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cd0ffb1e5dd5f3a86f72241db45b670b3bbc7b06d1f1b3950e135091766d68be
MD5 a42e46a6d0fd93b861c29f63477c14ef
BLAKE2b-256 d0bd6266ce161a2030c0173cfa0da4d3efe7cd599cc70e3758167cb3b7947180

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 08c281f9eae37221ba8eeab4feb80aad8acd478461d104c7e052b21def7e4816
MD5 81e7e80f20078724e6dc8fb7bf050716
BLAKE2b-256 2e771f9528dc38cedcb1cd0036c8c2fc9ba951d8009c09fd0aa0738b3faa8075

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9127d142dd8d161612fb0ca899cfc19d83fb14c67596446428932f4dce178094
MD5 a74d9c7191044acc6f9de446fcf8c7f0
BLAKE2b-256 de68e8bd3a5434a6f2cec234446693e3f491c1cc6f704b2e76505c62f9a0fcd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a1819fbcd034f96a995066d5020a5a29b99fb5f3d9b373e3e4e52f9abb0e4808
MD5 7e8782d319ae69b5a8819b69de4e761c
BLAKE2b-256 d47fd832e2f0cfe8476cfadb3f9d0e2e152c35d21f7dd6e30a96d865ddfbc189

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f5ce2319b3d51eac11a6f430729935e01120dd281d0ef30269788d933fe1a0c4
MD5 407d011b337eb59b17e416f6060dba58
BLAKE2b-256 a8c507ccaf426210cbd4e9954b77ec827ee2472f858a18880f3d450592350bd6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 c385d6695f9995b4d126fd6c6e45eb30459630cdfe74e78f52fb44dbdb826df0
MD5 890888e6a9cb7c3ebb7ada8a0ede809f
BLAKE2b-256 837c04a41ee31d277383a254d86dcc07e243197163ac17a391e5da6b0809a87c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8e889d1786b1ff6957f5f49db8619ab8069f62aa3224aa64439fcb62d8d7f299
MD5 3e3bf71d0b93cdc00c497a548051b82c
BLAKE2b-256 2e66a7898038932d26bb117205fef090ad2c4d7eb9347bd6099df65e0e34941e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 50859da852a8539993aa72fa01876b49e19585e7a1855ac8561919f261c97be6
MD5 7d7c839dafa72a09792768f7761337fc
BLAKE2b-256 642f99ec0706d73f34d7d645de0539e6089081d36102d88cea4c0daf62c0e172

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f64e931a8e523814fd14609a4778ccbe027f39267852f76fc1419c2af655ac05
MD5 0d0142820181d2861e0dd17910d20a26
BLAKE2b-256 05e8a0fb6d241ef3cc6b51596af6052550f2704ee0ec7740615f55ab49f2379d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 291a060c484c0b8b72a17ac1c17fe87e4cf8ace09b72f92e78ad1f3b4485b1b0
MD5 ad11537e99e40089b2c76e082e7f3829
BLAKE2b-256 5fecad230171e96793b4a70696eef2c5d347029d3532cb443702fa087078b0cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 73cf17436ea8aa0dfa4fc6f2ed9444bf64a49de3ae9582b4373fcbd0345ad9cc
MD5 fbb6e51cd08acb8fe9fbe3bf41513806
BLAKE2b-256 af62e192a62a0faf638ecbeca236ca070bf7095ff2b850eb16d3fa79f77c34c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 22a28385ca24daa767d43dcb9f9b2f1710eed6b92a1d040115ac03e763cd446a
MD5 ed354d80ac5f3e18caed515017b09590
BLAKE2b-256 cabb80e2129bb8188b7d13c5cd021110e6e5019e64c84291990535a0f2cb21fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f3ba32d099cd7cc79303b543acb8ca1cef7a41712a1792892ee06e36b42265e7
MD5 333e59378a6cd4eeaee65f5ccae7e2f4
BLAKE2b-256 e4f3aa36bc9f568212f3d6b20fe84fdd6ee225d5de4e3ce2d92fd2bf67be0cb7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d80a7617c9cee624acd7c02aa4c7863a2e009df91b8260ed90159a2cbccdad09
MD5 5285edf9634e8b4e9b6b052cb34b7db2
BLAKE2b-256 6bc87d033b0e438b51d5da70a5cb49b7c5fd12d003a37d9e45e993e1e411af9a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d40e936daf39db41db090b2895301d7cb9b46dd359b8096b070193f08becc07
MD5 5758e128cb421c06fee15cd21858b067
BLAKE2b-256 2b39e43756493c30e398e8a591cf8bdecfc6c461bdb1bccf08f31f01202be12a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-3.26.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5738c780831ef46074df4eea00ef564e634f9a3b8120f6a4de952120201e4c14
MD5 9808aff80c91006efac3296d4c8402f1
BLAKE2b-256 2ae825c191efe2189585f852ddf332374c33f162584aad3cb9136789d190660f

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