why my 3D image is not extruded in 3D software?
5 views (last 30 days)
Show older comments
Hello, i have 3D image but when I view the image in the 3D software to be printed, the image does not extrude. here i attached my code and images. can anyone check on my code. Many thanks.
a = imread ('stomachgray.tif');
mask = zeros(size(a));
mask(100:end-100,100:end-100) = 1;
bw = activecontour(a,mask,1000);
c = im2double(bw);
shading flat
d = imgaussfilt3 (c,4);
colormap(bone)
h = hgtransform;
mesh(d*100, 'Parent', h, 'FaceColor', 'r' )
view(3)
lighting gouraud
camlight right
% Make it taller
set (gca, 'units', 'cent')
set(h, 'Matrix', makehgtform('scale', [10 10 500]))
[X,Y] = meshgrid(1:length(h));
surf2stl('stomachSurf7.stl',X,Y,d);
end


12 Comments
KSSV
on 6 Dec 2016
Resizing will not help...I don't know about the software in which you are viewing.
Answers (1)
DGM
on 5 Apr 2025
Edited: DGM
on 5 Apr 2025
The object height is clearly unit-scale. It's never changed.
c = im2double(bw); % it's unit-scale.
d = imgaussfilt3(c,4); % it's still unit-scale
The mesh plot is drawn at 100x height, and then it's stretched by another factor of 5, but that's entirely just an ephemeral plot. None of that transformation applies to d.
X and Y are derived as so:
[X,Y] = meshgrid(1:length(h)); % h is a scalar hgtransform
So X and Y are both scalar 1. Surf2stl() will treat those as the sample spacing. You end up with an STL with the x,y dimensions of the original image (i.e. 640x480), and a height of 1. The plot can completely be ignored.
More importantly for the task, surf2stl() will not create a closed 2-manifold from a simple surface. It's anybody's guess what a slicer will do when you give it a zero-thickness single-sided thing which cannot physically exist -- especially slicers from 2016. You either have to do the lofting yourself before giving it to surf2stl(), or you could use surf2solid() (also on the FEX). ... but now I'm curious.
EDIT: As to what a slicer would do if you fed it an open surface, these are what I tested:
- Chitubox produces no warnings or errors on import or slicing. It just produces a bunch of garbage output (random floating layers that aren't connected to the object or other layers). Flying blind and getting getting junk results without explanation is part of the Chitubox experience.
- The old MakerBot Studio just crashed, but that's basically the only thing it's good for.
- IIRC, Cura produced a clear warning, but it also still let me slice it, generating different junk output (small random isolated curly paths floating in space).
- Prusa Slicer produced a descriptive warning, a count of all the geometry errors, and properly returned an empty object (nothing to slice). Guess Prusa wins again.
0 Comments
See Also
Categories
Find more on Image Processing Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!