在MATLAB中创建图像堆栈

sci*_*aks 1 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);
Run Code Online (Sandbox Code Playgroud)

'size(a)'产量'1728 x 2592 x 3'.这适用于所有图像.我想知道如何创建灰度图像的3D矩阵,我想知道如何创建上面提到的一维图像阵列.我假设,也许是错误的,"双重均值"的意思

mean(mean(...)).
Run Code Online (Sandbox Code Playgroud)

对于3D矩阵,我有

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

% Add images to ImStack
ImStack(:,:,1) = b;
Run Code Online (Sandbox Code Playgroud)

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

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

b(:,:,1)= a;

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

nho*_*owe 5

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

ImStack(:,:,1) = b;
Run Code Online (Sandbox Code Playgroud)

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

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

完成后,您可以通过沿第三维平均来非常容易地找到平均值:

ImMean = mean(ImStack,3);
Run Code Online (Sandbox Code Playgroud)

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