我正在尝试对循环中的图像执行一些矩阵运算,并且我想单独存储每个结果图像矩阵。但是我很困惑,如果在Matlab中可以声明并使用变量作为C(int array[r][c][n]
)中的矩阵数组。请指教。
答案 0 :(得分:0)
您可以使用3D矩阵存储多个灰度图像,或使用4D矩阵存储多个彩色图像。以下是一些示例,假设您在for
循环中进行了一些处理。
首先声明一个3D矩阵,其中前两个维度是您正在处理的任何图像的行和列。您需要确保所有图像共享相同的行和列,因为MATLAB不支持不均匀的多维矩阵。因此,假设我们有N
张图片,我们将rows
和cols
作为定义的单张图片的行和列。我还假设您的图片以uint8
格式存储,但它们也可以double
。因此:
results = uint8(zeros(rows,cols,N)); %// To store the images
%// Or do results = zeros(rows,cols,N); if double type
for idx = 1 : N
%// Read in your image
%//....
%// Process the image
%//....
%// Store the image for further analysis
results(:,:,idx) = ...; %// Place instruction here
end
要访问i th 图像,您只需执行以下操作:
im = results(:,:,i);
这是相同的原则,但我们有一个4D矩阵。我假设您有一个3通道彩色图像(即RGB)。您只需将上述代码扩展为4维。就这样:
results = uint8(zeros(rows,cols,3,N)); %// To store the images
%// Or do results = zeros(rows,cols,N); if double type
for idx = 1 : N
%// Read in your image
%//....
%// Process the image
%//....
%// Store the image for further analysis
results(:,:,:,idx) = ...; %// Place instruction here
end
要访问i th 图像,您只需执行以下操作:
im = results(:,:,:,i);
如果您有一堆正在处理的图像并且它们并非共享相同的大小,则可以使用cell
数组作为选项。您可以将这些视为可以在每个元素中存储所需数据类型的容器。因此,我们可以做这样的事情:
results = cell(1,N); %// To store the images
for idx = 1 : N
%// Read in your image
%//....
%// Process the image
%//....
%// Store the image for further analysis
results{idx} = ...; %// Place instruction here
end
要访问i th 图像,您只需执行以下操作:
im = results{i};
注意与普通矩阵相比,访问单元阵列的区别。您可以使用{}
大括号。使用()
设计用于索引单元阵列并执行切片(即访问整组单元并将它们复制到新的单元阵列中)。如果您想要实际图片本身,请使用{}
。