Skip to main content

Connected components on 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.

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.8.0.tar.gz (356.5 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.8.0-cp38-cp38-win_amd64.whl (169.8 kB view details)

Uploaded CPython 3.8Windows x86-64

connected_components_3d-1.8.0-cp38-cp38-win32.whl (155.3 kB view details)

Uploaded CPython 3.8Windows x86

connected_components_3d-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl (206.7 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

connected_components_3d-1.8.0-cp37-cp37m-win_amd64.whl (167.2 kB view details)

Uploaded CPython 3.7mWindows x86-64

connected_components_3d-1.8.0-cp37-cp37m-win32.whl (152.7 kB view details)

Uploaded CPython 3.7mWindows x86

connected_components_3d-1.8.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.8.0-cp37-cp37m-macosx_10_9_x86_64.whl (205.3 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

connected_components_3d-1.8.0-cp36-cp36m-win_amd64.whl (167.3 kB view details)

Uploaded CPython 3.6mWindows x86-64

connected_components_3d-1.8.0-cp36-cp36m-win32.whl (152.7 kB view details)

Uploaded CPython 3.6mWindows x86

connected_components_3d-1.8.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.8.0-cp36-cp36m-macosx_10_9_x86_64.whl (205.1 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

connected_components_3d-1.8.0-cp35-cp35m-manylinux2010_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.5mmanylinux: glibc 2.12+ x86-64

connected_components_3d-1.8.0-cp34-cp34m-manylinux2010_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.4mmanylinux: glibc 2.12+ x86-64

connected_components_3d-1.8.0-cp27-cp27m-manylinux2010_x86_64.whl (1.0 MB view details)

Uploaded CPython 2.7mmanylinux: glibc 2.12+ x86-64

connected_components_3d-1.8.0-cp27-cp27m-macosx_10_15_x86_64.whl (206.9 kB view details)

Uploaded CPython 2.7mmacOS 10.15+ x86-64

File details

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

File metadata

  • Download URL: connected-components-3d-1.8.0.tar.gz
  • Upload date:
  • Size: 356.5 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.8.0.tar.gz
Algorithm Hash digest
SHA256 66017a5d9ab09b3957beff7b5456cbb2ef05030f55dff62916681781eee5a2d3
MD5 68ae2632e165f236d065ac4c66cdf8b5
BLAKE2b-256 acf7cc570ee65bf23ed7ab5133f5553b238cf67244538fb787d3f93ec6f67cb8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 169.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.8.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 65d4cd2298e6a0c15ac3e5f80cdaf6fce105cd701cb0ba9d383b14d65ac56311
MD5 56ea2ea12733c1bf106444a76092ae52
BLAKE2b-256 80c2b6c8539f0f65794eaf144213a8be256e30d4a8af21ba5749a9e0f529f248

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 155.3 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.8.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 5bd7a95b1fa71a93ab10521a1c2ba1284cc7b94cc8ddeae2c406c9882c28a7ec
MD5 d03cd0d44c477e99bc857c6ab4ddef0b
BLAKE2b-256 960d2bc9f9d199f8e846be15b2e74fd5bfee34540eb0a616947345959575d3e7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cbf45d5ed26a27461d7d40ca11366d36d127518c313c0b6bf2bb9439a55e7bb7
MD5 11fb880302e96fa97e10b737e282f2bc
BLAKE2b-256 b8ddab31a288d93f007278b357f9e171e4905d73d9394d4542408a71eedaf9a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 9f55afe7c36a69018370417ad4028f4cdd5cd39d07daed0f971005f14f678660
MD5 2561a487f3ce5eec9b69faa55d6e7d39
BLAKE2b-256 e2a504b93c49198844c9d7af57ad8771291cc05da552723d7c5113ca7235dd7b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 206.7 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.8.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 571be09434142a33c3fc204def41516f8ba372b59f138f43d95479cd1d8c9ddc
MD5 e3a8395c4732c03c93be4214494d0886
BLAKE2b-256 259c327502df13726e69707970c552a8510bbbb0c37a025e9ab781bdb15bc9f4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 167.2 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.8.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 a8f9ef753ac6396c118894e106ae7761e67e6b03d69a6d21994f4fcf028e9368
MD5 24e7a0d132cca79b9c010056d9f30cb1
BLAKE2b-256 dd13851db180686f40a923c84a0dac5ed063d63abb69adf119e8215da743111f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 152.7 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.8.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 6526987a7f371ee6f212b00d696dde956b5eb7accd02f8acf2cd8d2388637470
MD5 863c5a010829b09c2b97bb6bfd919756
BLAKE2b-256 05aea4b34a9874f3c4491150528c8bb8bbd699be6d6076181ab65193863f6c94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 01c697e95f90f5e4b3af578cac40def1e5be83ba8d2e1a649893d37fb5377978
MD5 7f1e932c13fa0a48d09666eee0f12db6
BLAKE2b-256 8642cd552f1955d41f6e76d911085a451fb15c25452cf09debb8a36631b753ae

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.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.8.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 7e3491da6688a01b6b64b3076c26560e2bf5bd40bf3e5a16d3177d98d5cffa67
MD5 e9185919fa04d5f61d02f5b6d6afc109
BLAKE2b-256 333daed3f1391d4d11743a199f72d78948cb1bf3698e76362c65a8b6ec749251

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 45974bcb433302cd5f273b1dd9b8ec6132f5cc2731b10fae54cf7d956aabbfd5
MD5 ede9613e24a568f491861bdbd522c2d3
BLAKE2b-256 cdb84d5542604a7609892d8579e975ee1a93043ef2152542da6c8664a1db42f3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 205.3 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.8.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 94a5e04f432e3369ea242e96fca93f3e5e36aeadf482b119e599e7c7d3769c1c
MD5 34f905364f64ed72f7ff5224f60568ae
BLAKE2b-256 8bae4095b1d8de8d1285e7a1d2622666c6349f2e223fabaad57512da3fedf9a5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 167.3 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.8.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 7725787fd4bf31f22a0604a5c659c24d6a06213164595c1a081f881d48f0cd31
MD5 02dc95b730e43909d021d8ba5ff61a01
BLAKE2b-256 115e38c9b621b3b2e197d7fb2a16935cf71a82816ce04fbd437396812f838059

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 152.7 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.8.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 5a90b75b616df62d019b4c0f7592b782cecde7ecec6c02108a95a6ed120d6d06
MD5 4052b87bcc51bce61482a086cd17fa5b
BLAKE2b-256 529c3e56fe7fc9c688cd0fba4b896f487f9062d82c536ceea7919248af309217

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 28e8f21d428d205863569f76e81e4a9844e762dab54a565cb164544ba2b5ae2e
MD5 6d1603a2f45e9a54b769b5f03084bab8
BLAKE2b-256 40659e4e0a4463890123ad5b56b8ef164ab7e7fac3e56eb876ab1d66449a9804

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.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.8.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 0f25e94907f9281815a7c93ab841bffbb1816b7807749da4b4e8812346818ec3
MD5 beff5a3af606fa08c05190ff6f5e9f71
BLAKE2b-256 10518d99ca29eeaea37d7ea5a0d8bc74f6816f9dab0f3d3b91d0fec7610fca4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a42a399bcd0c4d297ff83b9f0e701202bef858825cb6bde88dfb45d936037503
MD5 dd12ee620550ddb3cbd212753619f1ea
BLAKE2b-256 e57c31a585eee61bb5bc20e95f4f1c3217be5e92cdc6f1cb1919a02c24fc55b8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 205.1 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.8.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d92bb4f76766b92ed31ee742e9aa8b8ef52a90c198f8fcc9e63d94c0ddadfa72
MD5 1c61fcb88ed51cf578ed0ad8ce998d99
BLAKE2b-256 c9e7641314bebf84fcbe93053c47c0dc9028004ba679fb4e7739cba09f8cc8ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp35-cp35m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1fb1735341aa5c898f23cf2fd917912a848d20e39b1a1c13e9d14f1f8f46231a
MD5 663b449c515451df43cf0b40d3283239
BLAKE2b-256 7a48ae590dd2b7a29177f32864a015a706cb0c03245c41adb70c32866daacb16

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.0 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.8.0-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 a8aa6aaf917511928b881d965ee40a62e14039de4f35278c468128c5761be8dd
MD5 7124ac90525b387c45e2d4a5c91c791e
BLAKE2b-256 81032b2364fc0d44965e67d4527e7db011b06185d9a950784dea8edafb1e0779

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 0618b18f92f7822bddba48dfd91971e706f90a509098e4152b40aea8fdde6992
MD5 c3deb371066ac2e0b01f94fa47b6ec82
BLAKE2b-256 bf2ce04a1d9c638c64062a385eb7adfbf096e94f4491fa5123727b2b8052a229

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.8.0-cp34-cp34m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: connected_components_3d-1.8.0-cp34-cp34m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: CPython 3.4m, 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.8.0-cp34-cp34m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 a0ea50bb89314223a4be08d22b0d6017b624c72590503723056a83430d61d07c
MD5 e508218146822dd6b666c07568feb493
BLAKE2b-256 e1ab0c4d83cdd9dc2cdd37287e716d77a25e454279cfe2d000dea43bca9cd000

See more details on using hashes here.

File details

Details for the file connected_components_3d-1.8.0-cp34-cp34m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f7ef8b446a2bc0f68902c63fffa3d2bea02c79a656fe8464268f0fda2f17c977
MD5 69b2ad9597cc323355b5068347f16bb4
BLAKE2b-256 c4ad8c24fb7ccc19a8722fb026c2a62eb1d5ffb4144a7ace42baeb034dbe14fc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp27-cp27m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.0 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.8.0-cp27-cp27m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 2dc01e716f83669fdc972b92bc5960f6f00a58db399e7e9eb93aa5c0f75149d7
MD5 86298bc9f1d70a7d090e1f1fe426aa5c
BLAKE2b-256 fa288d6a70e29d2a247b12d341bf5ecaad0cb18f6a127ffb8f58d6444ded2fcf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.8.0-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 fefd7a7f630e3fd76cdf414dd3452b615ce2f2477108a31e7c68dba3fd6796dc
MD5 549399ca6f8c99567413e9be18433877
BLAKE2b-256 cbb3154bf4d21aa4376f91b0966d71692693eb17d070c8cfb0b59c28e1b5b809

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.8.0-cp27-cp27m-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 206.9 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.8.0-cp27-cp27m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 a691defd03fedb55505cae2bea1d624a91af52bd60f37259f6d889e90f722a36
MD5 88c2e8af26fad9e64696e12a2db8c2b9
BLAKE2b-256 e134d6c204f6a28d0977c2e7fae0affeddcafaa134bccbee43ac368bbb6f0308

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