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;
但是,我不确定如何继续创建一维图像强度阵列.非常感谢您的建议.谢谢.
你的代码大部分都在那里.但是,这一行存在问题:
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)
另一个注意事项:如果你有太多的图像,创建一个可以同时保存所有图像的堆栈可能会导致内存不足.提出平均值的另一种方法是将每个图像添加到运行总和中,最后除以图像总数.