Matlab 如何将一个3D矩阵转换为多个2D矩阵?
mat文件是一个156*192*25的3D矩阵。数据是mat文件中的一系列n=25个图像。如何将此3D矩阵转换为25个2D矩阵并独立显示?感谢~使用该命令,您可以将3D值矩阵转换为Matlab 如何将一个3D矩阵转换为多个2D矩阵?,matlab,mat-file,Matlab,Mat File,mat文件是一个156*192*25的3D矩阵。数据是mat文件中的一系列n=25个图像。如何将此3D矩阵转换为25个2D矩阵并独立显示?感谢~使用该命令,您可以将3D值矩阵转换为25个单元格的数组,其中每个单元格包含一个156x1922D值矩阵: M = rand(156,192,25); %// simulate your 3D data matrix Mcell = mat2cell(M,156,192,ones(1,25)); 或者,使用以下命令: 您现在可以通过以下方式逐个访
25个
单元格的数组,其中每个单元格包含一个156x192
2D值矩阵:
M = rand(156,192,25); %// simulate your 3D data matrix
Mcell = mat2cell(M,156,192,ones(1,25));
或者,使用以下命令:
您现在可以通过以下方式逐个访问
25
图像:
imageNum = 5; %// example: access image num. 5
image = Mcell{imageNum}; %// image: 156x192 value matrix
将图像保留在单元格数组中的一个好处是,您可以轻松地将相同的过滤器应用于所有图像,使用命令,例如:
h = fspecial('motion', 50, 45);
McellFiltered = cellfun(@(x) imfilter(x, h), Mcell, ...
'UniformOutput', false);
使用该命令,您可以将3D值矩阵转换为25
单元格的数组,其中每个单元格包含一个156x192
2D值矩阵:
M = rand(156,192,25); %// simulate your 3D data matrix
Mcell = mat2cell(M,156,192,ones(1,25));
或者,使用以下命令:
您现在可以通过以下方式逐个访问
25
图像:
imageNum = 5; %// example: access image num. 5
image = Mcell{imageNum}; %// image: 156x192 value matrix
将图像保留在单元格数组中的一个好处是,您可以轻松地将相同的过滤器应用于所有图像,使用命令,例如:
h = fspecial('motion', 50, 45);
McellFiltered = cellfun(@(x) imfilter(x, h), Mcell, ...
'UniformOutput', false);
我建议不要分割图像堆栈,如果您需要第三个图像,只需使用
I(:,:,3)
要显示可以使用的图像,请执行以下操作:
montage(permute(I,[1,2,4,3]))
将所有图像显示在一起。之所以需要排列,是因为蒙太奇
需要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
我建议不要分割图像堆栈,如果您需要第三个图像,只需使用
I(:,:,3)
要显示可以使用的图像,请执行以下操作:
montage(permute(I,[1,2,4,3]))
将所有图像显示在一起。之所以需要排列,是因为蒙太奇
需要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
你已经有25个2D矩阵了!您可以使用
varname(:,:,n)
调用第n个变量。。。对细胞阵列等进行施法是没有用的!如果其中一个答案已经解决了你的问题,请通过点击复选标记来考虑。这表明您已经找到了解决方案,这不再是一个悬而未决的问题。如果您的问题没有得到回答,请解释缺少的内容。您已经有25个2D矩阵了!您可以使用varname(:,:,n)
调用第n个变量。。。对细胞阵列等进行施法是没有用的!如果其中一个答案已经解决了你的问题,请通过点击复选标记来考虑。这表明您已经找到了解决方案,这不再是一个悬而未决的问题。如果您的问题没有得到回答,请解释缺失的内容。非常感谢~我可以使用I(:,:,t)获取当前的x-y 2D数据~此外,我想在for循环期间将这些2D数据保存在不同的独立mat文件中(用于不同的堆栈)。那么,您能否就如何在for循环期间将当前2D数据保存在mat文件中提出一些建议?我更新了我的答案,但在使用它之前,您真的需要分割数据集吗?使用matfile
还可以将所有数据保存在一个文件中,只加载相关部分。非常感谢~我可以使用I(:,:,t)获取当前的x-y 2D数据~此外,我想在for循环期间将这些2D数据保存在不同的独立mat文件中(用于不同的堆栈)。那么,您能否就如何在for循环期间将当前2D数据保存在mat文件中提出一些建议?我更新了我的答案,但在使用它之前,您真的需要分割数据集吗?使用matfile
还可以将所有数据保存在一个文件中,并仅加载相关部分。