Skip to main content

Multilabel marching cubes and simplification of volumetric data.

Project description

zmesh: Multi-Label Marching Cubes & Mesh Simplification

Build Status PyPI version

from zmesh import Mesher

labels = ... # some dense volumetric labeled image
mesher = Mesher( (4,4,40) ) # anisotropy of image
mesher.mesh(labels) # initial marching cubes pass

meshes = []
for obj_id in mesher.ids():
  meshes.append(
    mesher.get_mesh(
      obj_id, 
      normals=False, # whether to calculate normals or not

      # tries to reduce triangles by this factor
      # 0 disables simplification
      simplification_factor=100, 

      # Max tolerable error in physical distance
      max_simplification_error=8
    )
  )
  mesher.erase(obj_id) # delete high res mesh

mesher.clear() # clear memory retained by mesher

mesh = meshes[0]
mesh = mesher.simplify(
  mesh, 
  # same as simplification_factor in get_mesh
  reduction_factor=100, 
  # same as max_simplification_error in get_mesh
  max_error=40, 
  compute_normals=False, # whether to also compute face normals
) # apply simplifier to a pre-existing mesh

# compute normals without simplifying
mesh = mesher.compute_normals(mesh) 

mesh.vertices
mesh.faces 
mesh.normals
mesh.triangles() # compute triangles from vertices and faces

# Extremely common obj format
with open('iconic_doge.obj', 'wb') as f:
  f.write(mesh.to_obj())

# Common binary format
with open('iconic_doge.ply', 'wb') as f:
  f.write(mesh.to_ply())

# Neuroglancer Precomputed format
with open('10001001:0', 'wb') as f:
  f.write(mesh.to_precomputed())

Installation

If binaries are available for your system:

pip install zmesh

Requires a C++ compiler and boost

Note that you may need to set the environment variable BOOST_ROOT.

sudo apt-get install python3-dev libboost-all-dev
pip install zmesh --no-binary :all:

Performance Tuning

  • The mesher will consume about double memory in 64 bit mode if the size of the object exceeds <511, 1023, 511> on the x, y, or z axes. This is due to a limitation of the 32-bit format. It might be possible to get x to 1023 as well.
  • Input labels are converted to uint32 or uint64. Use one of these data types to avoid a copy.
  • The mesher processes in C order.

Related Projects

  • zi_lib - zmesh makes heavy use of Aleks' C++ library.
  • Igneous - Visualization of connectomics data using cloud computing.

Credits

Thanks to Aleks Zlateski for creating and sharing this beautiful mesher.

Later changes by Will Silversmith, Nico Kemnitz, and Jingpeng Wu.

References

  1. W. Lorensen and H. Cline. "Marching Cubes: A High Resolution 3D Surface Construction Algorithm". pp 163-169. Computer Graphics, Volume 21, Number 4, July 1987. (link)
  2. M. Garland and P. Heckbert. "Surface simplification using quadric error metrics". SIGGRAPH '97: Proceedings of the 24th annual conference on Computer graphics and interactive techniques. Pages 209–216. August 1997. doi: 10.1145/258734.258849 (link)
  3. H. Hoppe. "New Quadric Metric for Simplifying Meshes with Appearance Attributes". IEEE Visualization 1999 Conference. pp. 59-66. doi: 10.1109/VISUAL.1999.809869 (link)

Download files

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

Files for zmesh, version 0.5.0
Filename, size File type Python version Upload date Hashes
Filename, size zmesh-0.5.0-cp36-cp36m-manylinux1_x86_64.whl (925.8 kB) File type Wheel Python version cp36 Upload date Hashes View
Filename, size zmesh-0.5.0-cp36-cp36m-manylinux2010_x86_64.whl (1.2 MB) File type Wheel Python version cp36 Upload date Hashes View
Filename, size zmesh-0.5.0-cp36-cp36m-win_amd64.whl (199.1 kB) File type Wheel Python version cp36 Upload date Hashes View
Filename, size zmesh-0.5.0-cp37-cp37m-manylinux1_x86_64.whl (924.4 kB) File type Wheel Python version cp37 Upload date Hashes View
Filename, size zmesh-0.5.0-cp37-cp37m-manylinux2010_x86_64.whl (1.2 MB) File type Wheel Python version cp37 Upload date Hashes View
Filename, size zmesh-0.5.0-cp37-cp37m-win_amd64.whl (199.0 kB) File type Wheel Python version cp37 Upload date Hashes View
Filename, size zmesh-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl (245.0 kB) File type Wheel Python version cp38 Upload date Hashes View
Filename, size zmesh-0.5.0-cp38-cp38-manylinux2010_x86_64.whl (1.2 MB) File type Wheel Python version cp38 Upload date Hashes View
Filename, size zmesh-0.5.0-cp38-cp38-win_amd64.whl (200.7 kB) File type Wheel Python version cp38 Upload date Hashes View
Filename, size zmesh-0.5.0-cp39-cp39-macosx_10_9_universal2.whl (371.4 kB) File type Wheel Python version cp39 Upload date Hashes View
Filename, size zmesh-0.5.0-cp39-cp39-manylinux2010_x86_64.whl (1.2 MB) File type Wheel Python version cp39 Upload date Hashes View
Filename, size zmesh-0.5.0-cp39-cp39-win_amd64.whl (200.3 kB) File type Wheel Python version cp39 Upload date Hashes View
Filename, size zmesh-0.5.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl (215.3 kB) File type Wheel Python version pp36 Upload date Hashes View
Filename, size zmesh-0.5.0-pp37-pypy37_pp73-manylinux2010_x86_64.whl (215.3 kB) File type Wheel Python version pp37 Upload date Hashes View
Filename, size zmesh-0.5.0.tar.gz (285.7 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page