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!