如何将一个3D矩阵转换成多个2D矩阵?

How to convert a 3D matrix into several 2D matrix?

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

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

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);

我建议不要拆分图像堆栈,如果您需要第三张图像,则只需使用 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