如何将3D矩阵转换为几个2D矩阵?

时间:2016-02-29 18:30:02

标签: matlab mat-file

垫文件是156 * 192 * 25 3D矩阵。数据是mat文件中的一系列n = 25个图像。如何将此3D矩阵转换为25个2D矩阵并独立显示?感谢〜

2 个答案:

答案 0 :(得分:5)

我建议您不要拆分图像堆栈,而只需使用I(:,:,3),例如需要第三张图像。

要显示您可以使用的图像:

montage(permute(I,[1,2,4,3]))

一起显示所有图像。需要置换,因为montage要求堆叠灰度图像156*192*1*25,第三维保留用于颜色通道。或者显示单个图像使用:

imshow(I(:,:,3));

要将每个图像保存到单个mat文件,请使用:

for ix=1:size(I,3)
   M=matfile(sprintf('image%03d',ix),'writable',true);
   M.image=I(:,:,ix);
end

答案 1 :(得分:1)

使用mat2cell命令,您可以将3D值矩阵转换为25个单元格的数组,其中每个单元格都包含156x192 2D值矩阵:

M = rand(156,192,25);   %// simulate your 3D data matrix

Mcell = mat2cell(M,156,192,ones(1,25));

或者,使用arrayfun命令:

Mcell = arrayfun(@(x) M(:,:,x), 1:25, 'UniformOutput', false)

您现在可以逐个访问25图片:

imageNum = 5;            %// example: access image num. 5
image = Mcell{imageNum}; %// image: 156x192 value matrix

将图像保存在单元格阵列中的一个好处是您可以轻松应用,例如对所有图像使用相同的过滤器,使用cellfun命令,例如:

h = fspecial('motion', 50, 45);
McellFiltered = cellfun(@(x) imfilter(x, h), Mcell, ...
  'UniformOutput', false);