【问题标题】:Creating an image stack in MATLAB在 MATLAB 中创建图像堆栈
【发布时间】:2013-05-31 14:08:00
【问题描述】:

我在 MATLAB 中导入了一组图像,并将它们转换为灰度图像。我现在必须创建一个图像堆栈,“灰度图像的 3D 矩阵”。在此之后,我必须通过获取“图像堆栈每一层的双重平均值”来创建一维图像强度数组。到目前为止,这是我的代码(我只导入了几张图片):

for i=139:141

string2 = num2str(i);

% Concatenate several strings, produce file name
str = [string, string2, string3];

% Read image
a = imread(str);

% Get image dimensions
size(a)

% Convert to grayscale
b = rgb2gray(a);

'size(a)' 产生'1728 x 2592 x 3'。这适用于所有图像。我想知道如何创建灰度图像的 3D 矩阵,我想知道如何创建上面提到的 1D 图像数组。我假设,也许是错误的,“双重平均”意味着

mean(mean(...)).

对于3D矩阵,我有

% Pre-allocate 3D matrix
ImStack = zeros(1728, 2592, 3, class(b));

% Add images to ImStack
ImStack(:,:,1) = b;

这遵循我在 MathWorks 帮助论坛上找到的模板,

b= zeros(2000,2000,number_of_images,class(a));

b(:,:,1) = a;

但是,我不确定如何继续创建 1D 图像强度阵列。您的建议将不胜感激。谢谢你。

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    您的代码大部分都在那里。但是,这行有一个问题:

    ImStack(:,:,1) = b;
    

    这会将每个图像放置在图像堆栈的第一个平面中,并将覆盖同一位置的最后一个。您需要为每个图像使用不同的索引,如下所示:

    ImStack(:,:,i-138) = b;  % subtract 138 because i starts at 139 in your code
    

    完成后,您可以通过沿第三个维度进行平均来轻松找到平均值:

    ImMean = mean(ImStack,3);
    

    另一个注意事项:如果您有太多图像,创建一个同时保存所有图像的堆栈可能会导致您的内存不足。得出平均值的另一种方法是将每张图像添加到一个运行总和中,最后除以图像总数。

    【讨论】:

    • 太棒了!非常感谢,nhowe,这非常有效。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多