File Exchange

image thumbnail

Export Voxel Data

version (2.05 MB) by Cyprian Lewandowski
Export objects described in a logical matrix, label matrix or voxel list to STL and PovRay mesh2.


Updated 27 Oct 2017

View License

Export Voxel Data
This submission allows to export multiple objects described in logical matrix, label matrix or voxel list data to STL and PovRay mesh2 format.
Mesh can be determined from the data using convhull, isosurface or geometric method.
Extracted mesh can be smoothed, resampled and translated as required.
Package provides a script, which allows to generate a simple PovRay scene, where exported objects are included with a given colour, transparency and texture. Objects can be coloured using some array of scalars as a key.
Similar script is written to export a Blender "configuration" file, which can be opened with a Blender add-on (also attached) that imports STL files and assigns each object a colour specified in the "configuration" file.
A manual describing every option is provided. Further examples that use real data are available to download (links are included in the manual).
External scripts used/included within the upload (that are not present on MathWorks):
- resampling script from "iso2mesh" package by Qianqian Fang (Available at:
- a stereoscopic camera add-on to Blender by Sebastian Schneider (Available at:
License crash difficulties
The resampling part of the package could not be included in the submission itself, but on first required use of the resampling part it will be downloaded from my Google Drive and added to the package. This is because it uses some functions from iso2mesh package, which is distributed under GNU license and does not support it.
Similar situation applies to Blender Addons. Both are distributed under GPL license, hence are not included in the package, but there is a hotlink present in the package to download them.
I am sorry for additional problems, but this was the easiest way I could think of to overcome the problem of licensing.
This package is a by-product of my main internship project, which was analysis of random rod packing. Further examples mentioned above use some of the data collected.
I did my best to make the package up to MathWorks standard, but it is my first submission, so I would appreciate all comments and suggestions on what to change.

Comments and Ratings (19)

For anyone having out of memory errors in the smooth_curvature_patch_double file please do the following (seem to happen on Macs):
- delete all mex files from the bin folder
- open file "smoothpatch_inversedistance_double.c", replace (lines 177-179):
plhs[0] = mxCreateNumericArray(1, VertexNA, mxDOUBLE_CLASS, mxREAL);
plhs[0] = mxCreateDoubleMatrix(1, VertexN, mxREAL);

Do similar changes for the
plhs[1] = mxCreateDoubleMatrix(1, VertexN, mxREAL);
plhs[2] = mxCreateDoubleMatrix(1, VertexN, mxREAL);
- open "smoothpatch_curvature_double.c". Replace lines 197-199 accordingly.
- open "N_SmoothMesh.m". Change line 125 from:
vertices = [ Vx Vy Vz ];
vertices = [ Vx' Vy' Vz' ];

All credit goes to Philip Marlow, see discussion in .


You are right. Thank you for pointing it out. The link is down. I updated (should be up shortly) the code to include a new link (or you can get it here:


Hey Cyprian,

first let me thank you for this contribution. It looks like it is exactly what I'm looking for!

Unfortunately the mesh resampling data is not available anymore on your googledrive. Is it possible to make it available again?



Apologies for the delay in replying. Have you had a look at the included manual? If that is unhelpful, please send me an e-mail.

There are a list of .m files in the zip folder. Can anyone help me figure which files to use?

Thank you!


Thank you. This submission is basically a wrapper, which combines all the different packages that I acknowledged into a single script. My hope was that it would make the process of exporting, smoothing, resampling etc. easier.

I am not sure what the details of the voxel => mesh algorithm are, but I am using the package CONVERT_voxels_to_stl by Adam H. Aitkenhead , so you might want to check it out.

Kapil Dev

Thanks very much for this. Is this based on Marching Cubes algorithm?

Chao Xu

Very nice and thorough work!

Thai V. Hoang,

Thank you. I will look into incorporating anisotropic voxels into the package.

A very nice package although anisotropic voxel is not yet handled. Could you add this feature to the export function?


My first guess, as I don't know how it failed, would be that the matrix size is too large for your computer to handle. That has happened to me on few occasions and usually decreasing resolution solves it.

Could you try rescaling your matrix? I would go for the imresize function.

As to what size should you rescale: that depends on the memory you have available :)


I tried this on a matrix that is 2500 x 2500 x 2400, and it failed. any ideas?

Overall, this is a very useful package, which an exceptionally good documentation (See PDF file!) Its main advantage are generic, well accessible interface and the modular, integrated workflow (see the Fig.2 in the manual).

For me (MATLAB 2012b, ubuntu64bit), it works out of the box, and automatically compiled the missing mex files for your platform.

However, I encountered a few Out-Of-Memory issues with the "smoothing" option. If you set the default value,
p.smoothing.smooth = false; (ExportVoxelData.m, line 137) then it works. The "geometric" option took very long, I suppose it got stuck in CONVERT_meshformat.

I think, if you have 3D-data e.g. from X-Ray-Tomography or confocal microscopy, and are looking for nice visualization -even with stereoscopic images- of segmented objects in Povray or with your favourite STL program, this might be the right tool.

Keep up the good work!


Removed the License Files folder.

Updated download path for the Mesh Resampling code. (Thanks Chacoon)

MATLAB Release Compatibility
Created with R2013a
Compatible with any release
Platform Compatibility
Windows macOS Linux