在MATLAB中创建图像堆栈

时间:2013-06-05 01:59:15

标签: matlab image-processing

我在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)'yield'1728 x 2592 x 3'。这适用于所有图像。我想知道如何创建灰度图像的3D矩阵,我想知道如何创建上面提到的一维图像阵列。我假设,也许是错误的,“双重均值”意味着

mean(mean(...)).

对于3D矩阵,我有

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

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

这是我在MathWorks帮助论坛上找到的模板

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

b(:,:,1)= a;

但是,我不确定如何继续创建一维图像强度数组。非常感谢您的建议。谢谢。

1 个答案:

答案 0 :(得分:5)

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

ImStack(:,:,1) = b;

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

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

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

ImMean = mean(ImStack,3);

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