我在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;
但是,我不确定如何继续创建一维图像强度数组。非常感谢您的建议。谢谢。
答案 0 :(得分:5)
你的代码大部分都在那里。但是,这一行存在一个问题:
ImStack(:,:,1) = b;
这会将每个图像放在图像堆栈的第一个平面中,它将覆盖相同位置的最后一个图像。您需要为每个图像使用不同的索引,如下所示:
ImStack(:,:,i-138) = b; % subtract 138 because i starts at 139 in your code
完成后,您可以通过沿第三维平均来轻松找到平均值:
ImMean = mean(ImStack,3);
另一个注意事项:如果你有太多的图像,创建一个可以同时保存所有图像的堆栈可能会导致内存不足。提出平均值的另一种方法是将每个图像添加到运行总和中,最后除以图像总数。