How to display smooth 3D surface from 3D binary matrix from 2D slices ?

Hello,
I extracted a contour of a vessel on successive 2D images acquired along z-axis.
I get a 202x194x1494 binary matrix of the contour of the vessel and would like to display it (see attached).
I tried this based on isosurface function.
[lmax,cmax,nbframe] = size(maskcontour);
xb = linspace(xstart,xend,cmax);yb = linspace(ystart,yend,lmax);
v= smoothdata(maskcontour,3);
fv = isosurface(xb,yb,vz*(1:nbframe),maskcontour,0);
p = patch(fv,'FaceColor','red','Linestyle','none');
view(3);
axis equal
camlight
lighting gouraud
Resulting in this image.
Vesselcontour.jpg
I would like a smooth surface with no holes on it. Can you help me ?

Answers (1)

Try with increasing cmax & lmax?
xb = linspace(xstart,xend,cmax);
yb = linspace(ystart,yend,lmax);

5 Comments

Thanks for answering KALYAN ACHARJYA. Actually cmax and lmax are the x and y dimensions of my extracted mask. I can enlarge my matrix but I might be out of memory.
If you mean enlarging the 2D contour of each x-y slices it could be the problem because actually my contour are 1 pixel large (from segmentation).
I don't have access to matlab for the moment but do you think enlarging the contour can help ?
Try to interpolate in cylindrical system of coordinates
I don't know how to interpolate in cylindrical system of coordinates. Can you elaborate ?
Also my data are not supposed to have exact rotational symmetry.
Maybe griddata is not the better way
n = 50;
r = rand(1,n)+5;
t = linspace(0,2*pi,n);
[x,y] = pol2cart(t,r);
z = rand(1,n)*20;
zz = linspace(min(z),max(z),20);
tt = linspace(0,2*pi,50);
[Z,T] = meshgrid(zz,tt);
R = griddata(t,z,r,T,Z);
[X,Y] = pol2cart(T,R);
plot3(x,y,z,'.r')
hold on
surf(X,Y,Z)
hold off
axis equal
What about alphaShape?
I didn't get what you mean by interpolate cylindrical.
But I tried alphaShape and it works fine. I eroded along 3 rd dimension to filter some contours. Then I used alphaShape playing with alpha radius (didn't understand what it is exactly but it worked) input argument to get a smooth shape.
Thank you darova.

Sign in to comment.

Asked:

on 7 Jan 2020

Commented:

on 8 Jan 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!