How can I extract the slices of a 3D matrix in x-direction from a 3D matrix?
조회 수: 38 (최근 30일)
이전 댓글 표시
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
James Tursa
2018년 7월 6일
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 ...?
채택된 답변
Anton Semechko
2018년 7월 6일
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
Anton Semechko
2018년 7월 8일
편집: Anton Semechko
2018년 7월 8일
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.
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!