How can I extract the slices of a 3D matrix in x-direction from a 3D matrix?
68 views (last 30 days)
Show older comments
I have a 3D matrix, which is a model of the porous media of a rock. I want to extract three 3D matrices from it so that each contains the 2D slices in a specific direction, for example x. To be clear, the matrix x contains the 2D slices in x direction, y in y-direction and z in the z-direction. I appreciate any hint or help to solve my issue.
Regards
2 Comments
James Tursa
on 6 Jul 2018
It is unclear what you want. The original 3D matrix already has 2D slices in each direction that you can get at with indexing. E.g.,
xyz = original 3D matrix
k = whatever
xyz(k,:,:) --> k'th slice along x direction
xyz(:,k,:) --> k'th slice along y direction
xyz(:,:,k) --> k'th slice along z direction
Do you mean you want to permute the data so the slices are always in the first two dimensions? Or ...?
Accepted Answer
Anton Semechko
on 6 Jul 2018
Suppose you have G, which is a Y-by-X-by-Z 3D array, then
i-th xy slice:
G_yx=G(:,:,i); % Y-by-X array
i-th xz slice:
G_xz=permute(G(i,:,:),[2 3 1]); % X-by-Z array
i-th yz slice:
G_yz=permute(G(:,i,:),[1 3 2]); % Y-by-Z array
5 Comments
Anton Semechko
on 8 Jul 2018
Edited: Anton Semechko
on 8 Jul 2018
I see. Let's say G is your Ny-by-Nx-by-Nz 3D image and [dx,dy,dz] are dimensions of a single voxel. To get get (x,y,z) coordinates of the voxels do:
[Ny,Nx,Nz]=size(G);
[x,y,z]=meshgrid((1:Nx)*dx,(1:Ny)*dy,(1:Nz)*dz);
The variables 'x', 'y', and 'z' have the same dimensions as G, and can be used as input to the 'isosurface' function along with G to extract a triangular mesh of the level-set surface G==1.
More Answers (0)
See Also
Categories
Find more on Volume Visualization 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!