Skip to main content

Connected components on 2D and 3D images. Supports multiple labels.

Project description

Build Status PyPI version

Connected Components 3D

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 can be used with 2D or 3D images.

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. cc3d was compiled against numpy 1.16+ and unfortunately, there was a backwards incompatibilty between numpy 1.15 and 1.16. You can either try upgrading numpy or compiling from source in this case.

Python Manual Installation

Requires a C++ compiler.

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

Python Use

Important limitation: Only label values less than or equal to the size of the image in voxels (pixels) are supported currently. If you want to use larger values, consider using fastremap.renumber.

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 26, 18, and 6 are allowed
labels_out = cc3d.connected_components(labels_in, connectivity=connectivity)

# You can adjust the bit width of the output to accomodate
# different expected image statistics with memory usage tradeoffs.
# uint16, uint32 (default), and uint64 are supported.
labels_out = cc3d.connected_components(labels_in, out_dtype=np.uint16)

# You can extract individual components like so:
N = np.max(labels_out)
for segid in range(1, N+1):
  extracted_image = labels_out * (labels_out == segid)
  process(extracted_image)

# We also include a region adjacency graph function 
# that returns a set of undirected edges.
graph = cc3d.region_graph(labels_out, connectivity=connectivity) 

If you know approximately how many labels you are going to generate, you can save some memory by specifying a number a safety factor above that range. The max label ID in your input labels must be less than max_labels.

labels_out = connected_components(labels_in, max_labels=20000)

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
);

// 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
);

Algorithm Description

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). [3] The description below describes the 26-connected algorithm, but once you understand it, deriving 18 and 6 are simple.

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. b, (h | g, i)
  3. h, a, c
  4. d, (f | c, i)
  5. f, g, a
  6. a, c, g, i
  7. c, g, i
  8. g, i
  9. 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]

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 Berkely 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 Porcessing. 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 EEducation. 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-1.13.0.tar.gz (360.6 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-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl (225.2 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

connected_components_3d-1.13.0-cp38-cp38-win_amd64.whl (175.8 kB view details)

Uploaded CPython 3.8Windows x86-64

connected_components_3d-1.13.0-cp38-cp38-win32.whl (162.2 kB view details)

Uploaded CPython 3.8Windows x86

connected_components_3d-1.13.0-cp38-cp38-manylinux2010_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

connected_components_3d-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl (223.6 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

connected_components_3d-1.13.0-cp37-cp37m-win_amd64.whl (172.3 kB view details)

Uploaded CPython 3.7mWindows x86-64

connected_components_3d-1.13.0-cp37-cp37m-win32.whl (159.2 kB view details)

Uploaded CPython 3.7mWindows x86

connected_components_3d-1.13.0-cp37-cp37m-manylinux2010_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

connected_components_3d-1.13.0-cp37-cp37m-macosx_10_9_x86_64.whl (221.8 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

connected_components_3d-1.13.0-cp36-cp36m-win_amd64.whl (172.4 kB view details)

Uploaded CPython 3.6mWindows x86-64

connected_components_3d-1.13.0-cp36-cp36m-win32.whl (159.3 kB view details)

Uploaded CPython 3.6mWindows x86

connected_components_3d-1.13.0-cp36-cp36m-manylinux2010_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

connected_components_3d-1.13.0-cp36-cp36m-macosx_10_9_x86_64.whl (221.7 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

connected_components_3d-1.13.0-cp35-cp35m-manylinux2010_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.5mmanylinux: glibc 2.12+ x86-64

connected_components_3d-1.13.0-cp27-cp27m-manylinux2010_x86_64.whl (1.1 MB view details)

Uploaded CPython 2.7mmanylinux: glibc 2.12+ x86-64

connected_components_3d-1.13.0-cp27-cp27m-macosx_10_15_x86_64.whl (224.3 kB view details)

Uploaded CPython 2.7mmacOS 10.15+ x86-64

File details

Details for the file connected-components-3d-1.13.0.tar.gz.

File metadata

  • Download URL: connected-components-3d-1.13.0.tar.gz
  • Upload date:
  • Size: 360.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected-components-3d-1.13.0.tar.gz
Algorithm Hash digest
SHA256 10566dea74808df3c6db4379d92f8d9eea226a7e6049750bb491be67444a2d5d
MD5 8d76d9369484c8646595129a3ec11226
BLAKE2b-256 ae417ecb955993c5c1cd5ef2c1da6be8f5bb7e2b7686931df4c97ab49592afa4

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fa6f82d6668ef31df596b284bd1ca4deeb621c4a5ee9d298118836a8ab8bd63c
MD5 76e1b4479751d658dd93d47935595b13
BLAKE2b-256 af05b4314870a2a9f00577d1b8210eefa8d3160b14c901b3b119ee27e61484d4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 225.2 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5c1da65418a7796ba2b801d3a4504f9c61c7e8590f2edc89772a431f2545ab9c
MD5 21ac6d659e1096a2fe3db97e4c8a746f
BLAKE2b-256 2baeaa7977b1ca904af55b573079b9c6ae26a4a8ea6674ad6d6705040897713b

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 175.8 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2d86219ffd7536291ac9e69fd0c53077149db405e17bee676e10ac68c8883493
MD5 cb973095e835475ed978c3239c9bbdf1
BLAKE2b-256 68344e73930914416368cb0dd2e4e89c06162444fa63bf248befb1b52137baee

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 162.2 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 737806f3a7e0a6b5b41348f0535682412a582d4e0c8e80e6c06add1a61a11aea
MD5 6b9964fe9edeaa485c4a1556a5bd59b9
BLAKE2b-256 35f0125d8e93b60dc3a853b5b0ef620a36cafa8b8cd7fd97655bf951429551b0

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dfd069feb3bf577344eb43e2e813f899373ff613132377cb5a268bc154e6c604
MD5 4a18a85544bb49d1c19be9222010266b
BLAKE2b-256 151642f474c68c9fe56a23a8db1cbd695decff28f5e84e0d4253d2817b70a719

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3a40ebce57764acc5ac7757ddabfc5028e1ac6b9eb2e2e633c7f4c651d7180d2
MD5 688bd2e916c757e1570c93efc3462f7b
BLAKE2b-256 40dc5315ce5ea5222c70ac148d361b3b50b7cc4edda215d0f47302baeef36c01

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp38-cp38-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 1eaf2aa94620f4d4f90d68de43c34ba7adf903e7342945c5767590095124a112
MD5 01cb74eb81e49571fdc87c61bbdcc297
BLAKE2b-256 43b9cf7f96cb3080d6f71cf3824256e0c18e312039c79fcb5fd52ef25e930676

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 223.6 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3371a34d8a409802dcae482016b4c27f7ea6184ffe39c6c1a8e297cc62bae827
MD5 a0e379656740413365f5e2a322c03353
BLAKE2b-256 7e427bba9c7a8cf2f8bf1916e26f553381456e9cf596c6f52d60ba472448014d

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 172.3 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 789c7e2c41dd4ea30baa4ba5ab00db9d37c3c14366b930b8eb030c08ea643ce9
MD5 05acd02548c8371cf946c889f93e8ae6
BLAKE2b-256 dbd5b523d925ca0cc735a79680e3e180f3e8eac5c27d77cfe14ab545b25723c0

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp37-cp37m-win32.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 159.2 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 15d2969f6c06251a949c1cfde9b069cc8682c80325fa747d25cb40828c6022b7
MD5 0e8ddb338395808ddc765926a4003b28
BLAKE2b-256 4a3bc42165d0f59a5eb29a1af8a0fa0cc7e59ae7796060835528a941ad802090

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a1941ce90e197cbea9dfdded3a8c2672e22ab103773ef9fee6505b8320e2810c
MD5 712affc8b8ef695f57e31eeb9c16179a
BLAKE2b-256 3b12b08d7d7e247b4749d76de9fea41f11b1a1e8fd0290f369a4c228dec8b02b

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 2fba00c14cb019412ff44c409f5ef9b2d1ef84377080db0c3df0104824d4c12e
MD5 64725edfc62d0fad810058b279646ba5
BLAKE2b-256 d3d05403f707ee413f5f4f3fed40d5720aedeb91164b67d7a3496bf1c335caee

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 66b5ba0592a157e22c9a2554337e933c65c8999d378fbaa99f2813251a378f87
MD5 6d56f54ac4949b23d31d97347c910146
BLAKE2b-256 f42c04ce7e4cfe1af906072f5246de905e24ee929823eddde8528fd09f1704d5

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 221.8 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1ae9e1c4d05d4f268a4bcd3b6751843041c67dcf66e337e81ebd2298a8c2feda
MD5 4890bb0eb3c4e2baeba98c3bbcf98274
BLAKE2b-256 b9585a640ffe03bca2746e782250b2b8d79e923bdcdecd66b1587d92074634c7

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 172.4 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 0c100759333837d01c3cc1491abde642489819d6929d0604813367bb2ce9390d
MD5 654ba2a10edc57b2f60dd48090f5f98b
BLAKE2b-256 c35f4fe62303f85bcbdb0a62d941a5498caef46002f7b15c68940a58c1359c53

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp36-cp36m-win32.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 159.3 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 b1d5dd2a2fff24b0c97b25a379f5f6c6013fa5532c4ba6b03673b07d9535269f
MD5 5c7b42674768431511ec391b937e7e5b
BLAKE2b-256 ffef67f4c2246f68a60762acc17a477f3cc553bd05f0bc94027bc6fd1eb90738

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp36-cp36m-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 75a91dae66f135aba4db5ee73e516aa444122c3585d924e97cf0b127b1990436
MD5 f449ca5d24c87e5e1dbd80672f2df692
BLAKE2b-256 9a1dff81d0624a0ecccf1177a4813643a6b1df64277a0323778d16ab8650809b

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3920ccf21fcf467cf5304bdb3cfc6556ca8a62aa62bc6f4c633f5a4ad98f4d02
MD5 a10d1e040f1ef18e3d0b4f0b17ad392f
BLAKE2b-256 c7ddf0f2b4c8fbd2aa28590042c15ddf66a54b1930b30ae7f864446f8404381e

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a6fb9128468f69f24c85d5d30e375dc8a5779eab4958b2c8e6993a5961c216c0
MD5 4a5236edfa19c5bceea213886f3b8d52
BLAKE2b-256 13cae6009a0c6f8073689d91e6ef12632649ecb0b94ae5177cc5394d215410d0

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 221.7 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3e9748dd5b42395682a9e917403f0ede5d07b4019a7fb91326d64c2fb36006be
MD5 971f506662abfd63f973a3be101a087b
BLAKE2b-256 028a0877041071e653cd8ea47cf4f8f4da3c55df6d1f2eb497498dc723dbd5eb

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp35-cp35m-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp35-cp35m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87da54d76310b6803b42396a3bca3ae62b6ea14f78f678c805fbb0884cb232d2
MD5 8a0dd67b3d145cf1898161929e1b64be
BLAKE2b-256 544e234cd38fc5655d671b8561c11ecdacec19957ce6698eaab3280049cd74a4

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp35-cp35m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 141589e798abf38973b4d13932091567556e7112d3ababe4cc7e2e1c7aaa2ebb
MD5 0b2cc152584307dab30d67c4776e9329
BLAKE2b-256 3b08ef3ba8587a7bec6e23a77720ed2cd86c56f32f1051c57d6eead50cc61689

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b2e268fa70d3c1ed6336d4f7ea7b55d9267beae18dfa26bc82f3b4408e8b525b
MD5 757f8a4863f1be8eff88b72654fc616e
BLAKE2b-256 9ccb31f5950b973d88ecab71939b8cc0075c36169911def2d2a337144ed354a2

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp27-cp27m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp27-cp27m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 2.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp27-cp27m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 26e043be0d3090d65c8002dabdc7b08d95c66114ffa81dbbfd2d2992cfd8bde5
MD5 cd63dcb3ae9ea9397fb71055b5502b39
BLAKE2b-256 50ff25646b24d0c5919ac627fc273049bd3bcc9456cb161f298705565f78696a

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp27-cp27m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.13.0-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ab1e9380b0b269c08476639ca51e330003ba85781a1c6deaddcd11b86c064561
MD5 912d2b97471f7acde0e72d312ce76e38
BLAKE2b-256 1d9969eb6df7b7317cec2d4585b3644af9a5cdcb63319066429c6b26a42e5a9f

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.13.0-cp27-cp27m-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.13.0-cp27-cp27m-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 224.3 kB
  • Tags: CPython 2.7m, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.2

File hashes

Hashes for connected_components_3d-1.13.0-cp27-cp27m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 6a50fbccb7df435e7b5fc40174ca49637b960d6318fa133cfe9ea7803ab710db
MD5 44bd050c6036abf7c0d9047d2a2137a4
BLAKE2b-256 1045be8019a33729b3128ea83071df91c910c7ec58fd848f00a06fec1c55cfa7

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