一种方法是将 2D 图像堆叠成 3D 图像立方体。
解决方案 1.
以下解决方案基于以下假设:
1)所有二维图像的大小相同:n1 by n2
2)您知道图像(切片)的数量:n3
3) 图片是uint8
您可以预先创建一个 3D 立方体:
allImgs = uint8(zeros(n1, n2, n3));
然后用aSlice 图像填充第一个切片,执行:
allImgs(:, :, 1) = aSlice;
第二个,做:
allImgs(:, :, 2) = anotherSlice;
等等。
如果您有一个为您获取切片的函数(如 getMeASlice()),您可以从 for 循环中有效地调用它并填充它:
for k = 1:n3
allImgs(:, :, k) = getMeASlice(your_params);
end
解决方案 2。
您可以随时连接切片。假设您阅读了一个片段:
aSlice = imread('cameraman.tif');
然后您稍后在您的代码中读取另一个切片并希望将其堆叠到您现有的切片上,您可以这样做:
aSlice = cat(3, aSlice, imread('anotherimage.jpg'));
它在第三维中连接您的新切片。只要您需要,您就可以一直这样做。
但是,请注意以下事项。与预分配变量并添加(填充)此类变量相比,连接非常慢。例如,如果您比较以下两个脚本,则第二个脚本要慢得多:
n1=256; n2=256; n3=200;
allImgs = uint8(zeros(n1, n2, n3));
aSlice = imread('cameraman.tif');
tic;
for k=1:n3
allImgs(:,:,1)=aSlice;
end
fprintf(['Total time is: ' num2str(toc) '\n']);
tic;
allImgs=aSlice;
for k=2:n3
allImgs=cat(3, allImgs, aSlice);
end
fprintf(['Total time is: ' num2str(toc) '\n']);
在我的电脑中提供以下内容:
Total time is: 0.0085632
Total time is: 0.89103
让我知道这是否有帮助。