如何在Matlab中将2D矩阵序列存储到3D数组中?

时间:2016-09-27 01:13:52

标签: arrays matlab image-processing matrix 3d

我有这些系列的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 欢迎任何帮助/建议/想法。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用i作为索引

沿第三维分配
stack_of_images(:,:,i) = b_binary

答案 1 :(得分:0)

嗯,第一个建议是尽量不要在matlab中使用变量ij,因为它们是保留的(看看here和{{3} })。 在它取决于您想要存储2D图像的尺寸之后:

  1. 如果您想沿第一维存储图像,请使用以下代码:

    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
    
  2. 如果你想沿其他尺寸存储图像,很容易做到:只需改变"指针的位置" ii

    1. matrix_3D_images(:,ii,:)=b_binary;
    2. matrix_3D_images(:,:,ii)=b_binary;