Plot 3D binary matrix as surface (or how to get 3D matrix coordinates)

4 views (last 30 days)
Hi! I got a binary 650x512x128 matrix (Let's say it's called A) that represents 128 images of a curve segmentation of size 650x512 that I want to plot as a continuous surface.
I tried using isosurface, but it seems like a scattered points that doesn't make contact between each other, so that ain't look like a surface.
I tried also to get coordinates of all points and then plot using plot3 and it works, but points are not conected, here is my code:
[x,y,z] = ndgrid(1:size(A, 1), 1:size(A, 2), 1:size(A, 3)); %get coordinates of all points
xx = x(A == 1); %keep only coordinates for A == 1
yy = y(A == 1); %these 3 lines also reshape the 3d array
zz = z(A == 1); %into column vectors
plot3(xx, yy, zz, '-');
Thanks in advance to everyone.
EDIT: I've attached the test.mat file that includes the 3D matrix.
  6 Comments
Oscar Ramos Soto
Oscar Ramos Soto on 1 Jul 2020
Maybe the answer provided by you guys wasn't the right one, but you helped me to clarify some things. I found the answer using the following code based no the one provided by Sargondjani.
[x,y,z] = ndgrid(1:size(V, 1), 1:size(V, 2), 1:size(V, 3)); %get coordinates of all points
xx = reshape(x(V == 1),[],1); %keep only coordinates for V == 1
yy = reshape(y(V == 1),[],1); %these 3 lines also reshape the 3d array
zz = reshape(z(V == 1),[],1); %into column vectors
T = table(xx,yy,zz);
f = fit([T.zz, T.yy],T.xx,'linearinterp');
plot(f)
Thanks a lot!

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!