Polygon mesh voxelisation
=========================
Adam H. Aitkenhead
adam.aitkenhead@christie.nhs.uk
The Christie NHS Foundation Trust
Voxelize a closed (ie. watertight) triangular-polygon mesh. The mesh can be in one of several formats: in an STL file; in a structure containing the faces and vertices data; in three 3xN arrays containing the x,y,z coordinates; or in a single Nx3x3 array defining the vertex coordinates for each of the N facets.
USAGE:
======
[gridOUTPUT,gridCOx,gridCOy,gridCOz] = VOXELISE(gridX,gridY,gridZ,STLin,raydirection)
...or...
[gridOUTPUT,gridCOx,gridCOy,gridCOz] = VOXELISE(gridX,gridY,gridZ,meshFV,raydirection)
...or...
[gridOUTPUT,gridCOx,gridCOy,gridCOz] = VOXELISE(gridX,gridY,gridZ,meshX,meshY,meshZ,raydirection)
...or...
[gridOUTPUT,gridCOx,gridCOy,gridCOz] = VOXELISE(gridX,gridY,gridZ,meshXYZ,raydirection)
INPUT PARAMETERS
================
gridX - Mandatory - 1xP array - List of the grid X coordinates.
OR an integer - Number of voxels in the grid in the X direction.
gridY - Mandatory - 1xQ array - List of the grid Y coordinates.
OR an integer - Number of voxels in the grid in the Y direction.
gridZ - Mandatory - 1xR array - List of the grid Z coordinates.
OR an integer - Number of voxels in the grid in the Z direction.
STLin - Optional - string - Filename of the STL file.
meshFV - Optional - structure - Structure containing the faces and vertices of the mesh, in the same format as that produced by the isosurface command.
meshX - Optional - 3xN array - List of the mesh X coordinates for the 3 vertices of each of the N facets
meshY - Optional - 3xN array - List of the mesh Y coordinates for the 3 vertices of each of the N facets
meshZ - Optional - 3xN array - List of the mesh Z coordinates for the 3 vertices of each of the N facets
meshXYZ - Optional - Nx3x3 array - The vertex positions for each facet, with:
1 row for each facet
3 columns for the x,y,z coordinates
3 pages for the three vertices
raydirection - Optional - String - Defines in which directions the ray-tracing is performed. The default is 'xyz', which traces in the x,y,z directions and combines the results.
OUTPUT PARAMETERS
=================
gridOUTPUT - Mandatory - PxQxR logical array - Voxelised data (1=>Inside the mesh, 0=>Outside the mesh)
gridCOx - Optional - 1xP array - List of the grid X coordinates.
gridCOy - Optional - 1xQ array - List of the grid Y coordinates.
gridCOz - Optional - 1xR array - List of the grid Z coordinates.
EXAMPLES
========
To voxelise an STL file:
>> [gridOUTPUT] = VOXELISE(gridX,gridY,gridZ,STLin)
To voxelise a mesh defined by a structure containing the faces and vertices:
>> [gridOUTPUT] = VOXELISE(gridX,gridY,gridZ,meshFV)
To voxelise a mesh where the x,y,z coordinates are defined by three 3xN arrays:
>> [gridOUTPUT] = VOXELISE(gridX,gridY,gridZ,meshX,meshY,meshZ)
To voxelise a mesh defined by a single Nx3x3 array:
>> [gridOUTPUT] = VOXELISE(gridX,gridY,gridZ,meshXYZ)
To also output the lists of X,Y,Z coordinates:
>> [gridOUTPUT,gridCOx,gridCOy,gridCOz] = VOXELISE(gridX,gridY,gridZ,STLin)
To use ray-tracing in only the z-direction:
>> [gridOUTPUT] = VOXELISE(gridX,gridY,gridZ,STLin,'z')
NOTES
=====
- Defining raydirection='xyz' means that the mesh is ray-traced in each of the x,y,z directions, with the overall result being a combination of the result from each direction. This gives the most reliable result at the expense of computation time.
- Tracing in only one direction (eg. raydirection='z') is faster, but can potentially lead to artefacts if rays exactly cross a facet edge.
REFERENCES
==========
- This code uses a ray intersection method similar to that described by:
Patil S and Ravi B. Voxel-based representation, display and thickness analysis of intricate shapes. Ninth International Conference on Computer Aided Design and Computer Graphics (CAD/CG 2005)
Citar como
Adam A (2024). Mesh voxelisation (https://www.mathworks.com/matlabcentral/fileexchange/27390-mesh-voxelisation), MATLAB Central File Exchange. Recuperado .
Compatibilidad con la versión de MATLAB
Compatibilidad con las plataformas
Windows macOS LinuxCategorías
- Physical Modeling > Simscape Multibody > Model Import >
- MATLAB > Mathematics > Computational Geometry > Triangulation Representation >
Etiquetas
Agradecimientos
Inspiración para: stlTools, intriangulation(vertices,faces,testp,heavytest), scafSLICR
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Descubra Live Editor
Cree scripts con código, salida y texto formateado en un documento ejecutable.
Mesh_voxelisation/
Versión | Publicado | Notas de la versión | |
---|---|---|---|
1.20.0.0 | Added a missing sub-function |
||
1.19.0.0 | Added checking of ray/vertex intersections, which reduces artefacts in situations where the mesh vertices are located directly on ray paths in the voxelisation grid. |
||
1.18.0.0 | Minor edits to the documentation |
||
1.17.0.0 | Improved method of finding which mesh facets can possibly be crossed by each ray. Up to 80% reduction in run-time. |
||
1.16.0.0 | Include the utility CONVERT_meshformat.m, which enables the vertex coordinates to be converted from an Nx3x3 array to faces,vertices info. Ie.
|
||
1.15.0.0 | Fixed bug in automatic grid generation. |
||
1.14.0.0 | Changed handling of automatic grid generation to reduce chance of artefacts. |
||
1.12.0.0 | The grid no longer has to entirely enclose the mesh. |
||
1.11.0.0 | Allow input to be a structure containing [faces,vertices] data, similar to the type of structure output by isosurface. |
||
1.10.0.0 | And another minor bug fix. |
||
1.9.0.0 | Bug fix. |
||
1.8.0.0 | Enable ray-tracing in any combination of the x,y,z directions. |
||
1.7.0.0 | Improved the automatic detection of binary and ascii STL files. |
||
1.6.0.0 | Fixed a bug introduced by the change to a logical output array. |
||
1.5.0.0 | Output is now a logical array, improving the meory efficiency. |
||
1.4.0.0 | Provided a clearer example of how to use the code. |
||
1.3.0.0 | Now optionally output the grid x,y,z coordinates. Robustness also improved. |
||
1.2.0.0 | Now also works with non-STL input. Changes also provide a significant speed improvement. |
||
1.1.0.0 | Fixed a bug which caused artifacts to appear for some STLs. |
||
1.0.0.0 |