我有这些系列的2D CT图像,我已经能够使用“imread”将它们读入Matlab。然而问题是我需要将图像读入作为单个3D矩阵而不是几个2D矩阵的堆栈。我已经意识到可以将2D图层的数量存储为第三维,但我不知道如何做到这一点,因为我仍然是一个学习者。 我在2D堆栈中读取的代码如下:
a = dir('*.tif');
for i = 1: numel(a)
b = imread(a(i).name); %read in the image
b_threshold = graythresh(b); %apply threshold
b_binary = im2bw(b, b_threshold); %binarize image
[m, n] = size(b); %compute the size of the matrix
phi(i) = ((m*n) - sum((b_binary(:))))/(m*n); %compute the fraction of pore pixels in the image
phi(:,i) = phi(i); %store each of the above result
end
我只添加了一张图片,但其中有一些是必需的。然而,人们可以轻松复制图像以创建一堆2D图像。为了使代码起作用,重要的是以数字顺序重命名它们。pore_image 欢迎任何帮助/建议/想法。谢谢!
答案 0 :(得分:1)
您可以使用i
作为索引
stack_of_images(:,:,i) = b_binary
答案 1 :(得分:0)
嗯,第一个建议是尽量不要在matlab中使用变量i
和j
,因为它们是保留的(看看here和{{3} })。
在它取决于您想要存储2D图像的尺寸之后:
如果您想沿第一维存储图像,请使用以下代码:
a = dir('*.tif');
for ii = 1: numel(a)
b = imread(a(ii).name); %read in the image
b_threshold = graythresh(b); %apply threshold
b_binary = im2bw(b, b_threshold); %binarize image
[m, n] = size(b); %compute the size of the matrix
phi(ii) = ((m*n) - sum((b_binary(:))))/(m*n); %compute the fraction of pore pixels in the image
phi(:,ii) = phi(ii); %store each of the above result
matrix_3D_images(ii,:,:)=b_binary; %adding a new layer
end
如果你想沿其他尺寸存储图像,很容易做到:只需改变"指针的位置" ii
:
matrix_3D_images(:,ii,:)=b_binary;
或matrix_3D_images(:,:,ii)=b_binary;