How to import STLs into MATLAB WHILE maintaining their coordinate system
11 views (last 30 days)
Show older comments
Hello, I have 3 STL files created through exporting different segmented areas as a surface mesh using ITK snap. I would like to import these into matlab so that they are aligned in the same way.
That way, when I convert into a binary map, I get a binary map with all 3 segmented areas aligned to each other
Thanks
1 Comment
DGM
on 13 Jul 2025
The object coordinates are exactly as the encoder writes them. If you want objects to be colocated, then your sofware should be exporting them consistently. If it's throwing away that information (e.g. by centering each object on its centroid instead of keeping it positioned in the source coordinate space), then you'll have to find some way around it. Either figure out how to disable that sort of behavior, or if nothing else, embed some sort of marker(s) into the exported geometry that can be used for alignment.
Answers (1)
Raghava S N
on 12 Mar 2024
Hi Andrew,
STL files can be imported and aligned in the following methods –
- Using “stlread” - https://in.mathworks.com/help/matlab/ref/stlread.html
- The “importGeometry” function will create a DiscreteGeometry object of the STL file. Then, the ‘rotate’ function can be used to help align the 3D geometry. Here are some documentation links which may be of help: https://www.mathworks.com/help/pde/ug/pde.pdemodel.importgeometry.html https://www.mathworks.com/help/pde/ug/pde.discretegeometry.rotate.html?s_tid=doc_ta
- “import_stl_file” is also a another option for a faster version of “stlread”. Please refer to this MATLAB File Exchange link: https://www.mathworks.com/matlabcentral/fileexchange/30923-fast-stl-import-function
Please refer to this MATLAB Answers post discussing alignment of STL Files - https://www.mathworks.com/matlabcentral/answers/1953324-how-to-aligning-stl-files-and-find-the-distance-between-them
Additional documentation that may be of use for alignment–
1 Comment
DGM
on 13 Jul 2025
Explain why using PDE toolbox tools solves any part of this problem beyond what stlread() does. Handwaving at webdocs index doesn't answer that question, nor does it answer OP's question. Bear in mind that importgeometry can only import a closed surface, so that's already a restriction, and we have no idea whether OP's segmentation surface is closed.
Use stlread(). Not #30923. Not #22409. They're not faster. They're incomplete and have compatibility problems. If you're running a version older than R2018b and need a third-party tool, use FEX #51200. It actually works. It actually checks encoding type. It actually works for both encodings. It actually prunes connectivity-breaking duplicate entries from the vertex list.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!