Nanomesh is a Python workflow tool for generating meshes from 2D and 3D image data. It has an easy-to-use API that can help process and segment image data, generate quality meshes (triangle / tetrahedra), and write the data to many mesh formats. Nanomesh also contains tools to inspect the meshes, visualize them, and generate cell quality metrics.
- Easy-to-use Python API
- Segment and mesh 2D or 3D image data
- Mesh visualization
- Calculate and plot cell metrics
- Export to many mesh formats
Documentation: https://nanomesh.readthedocs.io/en/latest/
Check out the paper on Nanomesh in JOSS: https://doi.org/10.21105/joss.04654
Generate a 2D mesh | Calculate mesh metrics |
This example shows the workflow for generating a mesh from segmented data, and demonstrates a few of the features of Nanomesh. It uses a synthetic binary image with several rounded blob-like objects generated by skimage.
>>> from skimage.data import binary_blobs
>>> from nanomesh import Image
>>>
>>> blobs = binary_blobs(length=100, volume_fraction=0.25, seed=2102)
>>> plane = Image(blobs)
>>>
>>> print(plane)
Plane(shape=(100, 100), range=(False,True), dtype=bool)
Image
is essentially a container for a numpy
array with some methods for image segmentation and visualization.
>>> plane.show()
<AxesSubplot:xlabel='x', ylabel='y'>
Generating a mesh from image data is simple in Nanomesh using Plane.generate_mesh()
. The options opts
are passed to the triangulation function (nanomesh.triangulate
). In this example, we use q30
to generate a quality mesh with minimum angles of 30°, and a50
to limit the triangle size to 50 pixels.
The returned mesh
is a MeshContainer
that contains the generated triangles and line segments.
>>> mesh = plane.generate_mesh(opts='q30a10')
>>> mesh
<MeshContainer>
Number of points: 932
Number of cells:
triangle: 1754
line: 2685
Point data: physical
Cell data: physical
Field data: feature, background
In the next cell, we plot the triangles.
>>> mesh.plot('triangle')
<AxesSubplot:title={'center':'triangle mesh'}>
With the metrics submodule, Nanomesh can also calculate cell quality metrics and show them as a colored triangle or histogram plot.
>>> from nanomesh import metrics
>>> triangle_mesh = mesh.get('triangle')
>>> metrics.histogram(triangle_mesh, metric='radius_ratio')
<AxesSubplot:title={'center':'Histogram of radius ratio'}, xlabel='Radius ratio', ylabel='frequency'>
Nanomesh uses meshio to write data to most meshing formats.
>>> mesh.write('mesh.vtk')
Warning: VTK requires 3D points, but 2D points given. Appending 0 third component.
That's it! There is a lot more that Nanomesh can do, check out the examples for an overview.
One of the goals for Nanomesh is that it is easy to install. This means that all dependencies are available from PyPi.
If you use conda, it is advised to create a new environment:
conda create -n nanomesh python=3.9
conda activate nanomesh
Install nanomesh:
pip install nanomesh
For the full installation instructions, see the installation guidelines.
Check out our Contributing Guidelines to get started with development.