Matlab 获取三维矩阵Y-Z维度的数据

Matlab 获取三维矩阵Y-Z维度的数据,matlab,Matlab,我有一个大小为120x256x256的3D矩阵,其中120是切片数,256x256是每个图像切片的大小。我想将3D矩阵提取为2D图像(256x256)。如何获取三维矩阵的数据。我尝试使用matlab代码: Img_3D=zeros(120,256,256); for numSlice=1:120 Img2D=Img_3D(numSlice,:,:); end 但它不起作用。它返回一个大小为1x25x256的矩阵,而不是256x256矩阵。如何解决我的问题。非常感谢您只需要您的结果矩阵就可

我有一个大小为120x256x256的3D矩阵,其中120是切片数,256x256是每个图像切片的大小。我想将3D矩阵提取为2D图像(256x256)。如何获取三维矩阵的数据。我尝试使用matlab代码:

Img_3D=zeros(120,256,256);
for numSlice=1:120
   Img2D=Img_3D(numSlice,:,:);
end
但它不起作用。它返回一个大小为
1x25x256
的矩阵,而不是
256x256
矩阵。如何解决我的问题。非常感谢您

只需要您的结果矩阵就可以得到您想要的

Img_3D=zeros(120,256,256);

for numSlice = 120:-1:1   %// backwards for preallocation
   slices{numSlice } = squeeze( Img_3D(numSlice,:,:) );
end
按照您的建议,使用
permute
可以实现基本相同的效果

for numSlice = 120:-1:1   %// backwards for preallocation
   slices{numSlice } = permute( Img_3D(numSlice,:,:),[2 3 1] );
end
在性能方面,我们是平等的

经过一段时间的计时后,您是否提前排列似乎并不重要:

Img_3D = permute(Img_3D,[2 3 1]);
for numSlice = 120:-1:1   %// backwards for preallocation
   slices{numSlice } = Img_3D(numSlice,:,:);
end

您当然可以使用squesh()解决此问题,这是删除单个维度最简单的方法。挤压()检测单个维度并通过相应地调用重塑()将其删除。如果速度是个问题,您可以自己使用Reforme()来加快速度,从而节省一些计算:

Img_3D=reshape(1:120*256*256, [120,256,256]);

t0 = tic;
for j = 1:100
    for numSlice = 120:-1:1   %// backwards for preallocation
       slices_squeeze{numSlice } = squeeze( Img_3D(numSlice,:,:) );
    end
end
t_squeeze = toc(t0);

t0 = tic;
for j = 1:100
    for numSlice = 120:-1:1   %// backwards for preallocation
       slices_reshape{numSlice } = reshape(Img_3D(numSlice,:,:),[256, 256]);
    end
end
t_reshape = toc(t0);

fprintf('squeeze-solution: %5.3f seconds\n', t_squeeze);
fprintf('reshape-solution: %5.3f seconds\n', t_reshape);
不过,加速并不太快

squeeze-solution: 5.654 seconds
reshape-solution: 4.790 seconds

最好的,Nras。

Img_3D=permute(Img_3D[2 3 1])怎么样;之后我将使用Img2D=Img_3D(:,:,numSlice)@用户3051460您也可以这样做,应该以几乎相同的性能提供相同的结果。