垫文件是156 * 192 * 25 3D矩阵。数据是mat文件中的一系列n = 25个图像。如何将此3D矩阵转换为25个2D矩阵并独立显示?感谢〜
答案 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);