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.9.0.tar.gz (358.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.9.0-cp38-cp38-win_amd64.whl (170.5 kB view details)

Uploaded CPython 3.8Windows x86-64

connected_components_3d-1.9.0-cp38-cp38-win32.whl (155.9 kB view details)

Uploaded CPython 3.8Windows x86

connected_components_3d-1.9.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.9.0-cp38-cp38-macosx_10_9_x86_64.whl (208.2 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

connected_components_3d-1.9.0-cp37-cp37m-win_amd64.whl (167.4 kB view details)

Uploaded CPython 3.7mWindows x86-64

connected_components_3d-1.9.0-cp37-cp37m-win32.whl (153.4 kB view details)

Uploaded CPython 3.7mWindows x86

connected_components_3d-1.9.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.9.0-cp37-cp37m-macosx_10_9_x86_64.whl (205.6 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

connected_components_3d-1.9.0-cp36-cp36m-win_amd64.whl (167.4 kB view details)

Uploaded CPython 3.6mWindows x86-64

connected_components_3d-1.9.0-cp36-cp36m-win32.whl (153.4 kB view details)

Uploaded CPython 3.6mWindows x86

connected_components_3d-1.9.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.9.0-cp36-cp36m-macosx_10_9_x86_64.whl (205.6 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

connected_components_3d-1.9.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.9.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.9.0-cp27-cp27m-macosx_10_15_x86_64.whl (208.5 kB view details)

Uploaded CPython 2.7mmacOS 10.15+ x86-64

File details

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

File metadata

  • Download URL: connected-components-3d-1.9.0.tar.gz
  • Upload date:
  • Size: 358.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.9.0.tar.gz
Algorithm Hash digest
SHA256 c875b452c09333a4c88c5e2fa7d20c95cdc9e099d9263beae0fb6310c5939328
MD5 73e4d03d9fa5f4986ebcfc82a9922998
BLAKE2b-256 ab3649bdebf22655d101871343d10b5bd7866d91c84c7c92afd1e4626916afb3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 170.5 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.9.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 55a896c3b3880d281aa23103fcfbf6f574c759486ccf879b0fc42d0327226a07
MD5 b1bb6adba97c95916294b8fb60f8e7a2
BLAKE2b-256 e81ba5b8784b0599e5331b4ca7122ecd3809f06e96c9893fc9fb3c9a878425c6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 155.9 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.9.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 dc5e01211127b39e330a7f000a88260545509d763a7f86c0ae6fd3a11dddadd6
MD5 5c59cc8ad9e3192e9d415be1f261b155
BLAKE2b-256 c8f1d5f1039157c7f0f42fb6ed4ce2ac0677e7c26ad26a045d9ad2e8e2362b78

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.9.0-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bb509cf56fa80efc25c8d2ef3458fcef8480bf52bc8824b52e2f87729384f4f7
MD5 e6e6531bd816f31f1e570e9a5f36d739
BLAKE2b-256 b5959406cf921ca644fe0c7005000462e8f20936228b0a8cc91001fc2e2daee8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.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.9.0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 32ae107dd815322755fd87f32afada6a3c61d1ec4fc3d7bd24096c4c1c2a529f
MD5 bcda3541563b179a013cafc3c421454c
BLAKE2b-256 a928f0ea38afd83d915c0a118e565b8224fa0a540e19364125c5a8fb1e8d526d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.9.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 c28586964f5cea2952a09844ded43d966c2ee0fa202a04b32919ded6485d7c2f
MD5 4a4fea233aaba61045440a3c5abd2e78
BLAKE2b-256 2f0cf2a92af4df8a8fab542413e3d4941c56af167d23f66baa051b9355a629e5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 208.2 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.9.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f6bbae5588a6e8016b9ad69b88f5f8d5af847df84ba48cc37a293dbd79312923
MD5 01a9e80017eea435f6319883a4447b81
BLAKE2b-256 d3e8a6a91a1425d760dd173284082da91b3635e7ce92eedecf9b3647844a3da0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 167.4 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.9.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 7f2760a552a8a36df483de6063cd31c98b39eaa3f7ce57862d836b0c16f2a19b
MD5 0f2fa7e65dfbe5c4c394ab9fdbc795da
BLAKE2b-256 4ff73d1cd9a6cc7d82c7917557991c015125689e1d86f4d4f42f55b0d8f637cf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 153.4 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.9.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 e59c2dee84ddb39bba74a409a3ca3e515661f5abb662fb93451efdd1831c475d
MD5 a08483d7067e9e6b26fc290bfd313da2
BLAKE2b-256 925741f2e85b64a6e596fe46c5b7f9e1ea2501e41c93356cc4fa214237f2675b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.9.0-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 177bb01e7c1d59e2b472dcee214379639552c486cd2bc98f51de585f1a25d003
MD5 a4e0291605ff812dab05df90bc514877
BLAKE2b-256 69c8ea0850b36e6572ba7b1e7d48f030cbd696a8699c8c61388232bfff2233ea

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.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.9.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5e63232032f7d212a910c16f1bcbc87fd63ccf80683bcca9c7e401a9c96a46dc
MD5 b83c1daa8067d1fe15a8d25f652f1885
BLAKE2b-256 ec69636f452d4d8f4a85dddcb6f218da11802fa85718b9606dff3d50b52fdd0a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.9.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 4712df066b913d29502add4f2c627336f4953eaa098ccfa3c6d183ae39fd0c3e
MD5 edd60a4c6772d5dcccf249f83b4166ab
BLAKE2b-256 298548d41db7ffe5a15935ae31c3ed6d04a562f071163626415db636bc65cad9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 205.6 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.9.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b54a4f2ce9a166756abd337a4e74af7515f77e8c5372d702d10baa35003f1aed
MD5 b664cb87cd302f81c08657882c4f2188
BLAKE2b-256 248a43902933cca62d65825a4900f1b28b18549aa5dc5a4092083f246aa1a221

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 167.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.9.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 776a0c9671e6e56576cc9f3f4f666296651478a412f7b124366aecbf067230be
MD5 d7baeb406016508fbe08506d10d3cede
BLAKE2b-256 0f2b020e771ece64bc010c5f2f56d9107623fc2aa9b80495274838b2b5ad378f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 153.4 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.9.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 97cc69252bf620eb4f9e491282731010ad4d1c80b8d65bd1b554d8cc67790cca
MD5 2ce0782566463fef65ea4826f1dc2aa4
BLAKE2b-256 341d7cce757e8bae921118cf9d4c54e5e09725be2258b2be8685c0fcf32304b8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.9.0-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8767e0995390a2be1ed04b1f944581fe61a55679b90a3f7ff2544f99842641b
MD5 21eae0169f5aa9b6930e41b745ab6fcb
BLAKE2b-256 04885aea59ac41ff91cd409e7069870bac7e9698f256ceb8e1d0eb3a5e4fea96

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.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.9.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 97565db2b6a3c8c30d76d0641a770f2a8f38e065f298b0cfb5c1cf08d322dcea
MD5 3237b23f0332ac8c409c78958d0c44cf
BLAKE2b-256 4eb615e0a20d06661c8f71547b07958af93bb03417a1f3dd648ebc6e1edcabd9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.9.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 fbeda8fa44718ed584bdb4951c262bebb423addcb816e119f8507411311b9c06
MD5 74c82767f409d406b1e93e9e9c74c7a9
BLAKE2b-256 0d61b4dbec83a8317d4a2c308895cd304312b4b9d9c41920009106ed463b837e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 205.6 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.9.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8112284011b3a2798806874ac97b5bfb7508d0d71a39794b99c5acd0fce3c3f8
MD5 d5c9d8187d582ad2b576dd741472c3f4
BLAKE2b-256 fecef2406745ba6decc2d4ac028b0fa5ea19055ac449161368491c7fdc36e269

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.9.0-cp35-cp35m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e0279e982c2984f4cd2a3919aba792f75dc605f17ece2d11bc7e37f79197b430
MD5 ec67082b94331fc3dde35d83f05b721e
BLAKE2b-256 b4615673d64558996f125e30aca047298030e19b7ddce1a629fe4bd0040bf027

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.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.9.0-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ab72cb03aac0f802fb0903cb841db23f1b16516567a96b80a3ce43964cc3c857
MD5 993afa4617dbcaf2088d57c95850cb14
BLAKE2b-256 d67d894a5b834f607ca4753f3611f76c0ec3b718a5351174ef4c4675a1e84412

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.9.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 65e804daa0c67d2febb8ceb3904ef2bdc5a04244fd6ff2bb198022d28119e526
MD5 4348636a38a8320ef814653ebca68ac7
BLAKE2b-256 f5f8db54a038772f1709654c004f84f7ba6a8f43895356d4cb1e45609cf038ae

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.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.9.0-cp27-cp27m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 9fe5469e16f60439747d20645893af67c978840a306f196b3fc0f9af7ab89f82
MD5 5c09ea1e3fd4de9be20c29d5515d6615
BLAKE2b-256 821d1aaccecc7cd0a2788705f5151bb72729ea72363c3bc1be5cf5fc9486fdfa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for connected_components_3d-1.9.0-cp27-cp27m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 89c822841d300d8c88a10a97deb2bd0e631632af3592a1814cbe8f3e8e2f47fd
MD5 de4c82436a382a4ac8fc5759e983b477
BLAKE2b-256 bf43fc63128d9afa576032c83d40256acad767d6f1c14728ad6468d1c4d1fc1f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: connected_components_3d-1.9.0-cp27-cp27m-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 208.5 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.9.0-cp27-cp27m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 ae856537cbc83b9268ca4ab8ded2c7de3f0d8aefd997ee6fc8cbaee5c34ea3d0
MD5 b1dde6fd22247c9ae5faba254f8f3243
BLAKE2b-256 adfa0e18a32934ca49dfcadb82b3497f12387bcb1f5b5de4608ac0f2a352bd25

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