Plot 3D binary matrix as surface (or how to get 3D matrix coordinates)
古いコメントを表示
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 件のコメント
Sargondjani
2020 年 6 月 30 日
try function 'surf'. You seems to plot each column seperatly, with surf you can plot one surface.
Oscar Ramos Soto
2020 年 6 月 30 日
Sargondjani
2020 年 6 月 30 日
Ok, i get it now. One solution (which might not be very efficient) would be to use interpolation of the zz values, using scattered interpolation.
something like the example "seamount" here:
Sargondjani
2020 年 7 月 1 日
Actually xx, yy and zz are not column vectors, but arrays of the same size as A.
Following code will at least get you closer. I thought about getting you further, but this is all i got so far:
[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
figure
plot3(xx,yy,zz,'.','markersize',1)
KSSV
2020 年 7 月 1 日
Are you looking for slice?
Oscar Ramos Soto
2020 年 7 月 1 日
回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Surface and Mesh Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!