Matlab中的矩阵数组?

时间:2014-08-31 00:04:51

标签: matlab

我正在尝试对循环中的图像执行一些矩阵运算,并且我想单独存储每个结果图像矩阵。但是我很困惑,如果在Matlab中可以声明并使用变量作为C(int array[r][c][n])中的矩阵数组。请指教。

1 个答案:

答案 0 :(得分:0)

您可以使用3D矩阵存储多个灰度图像,或使用4D矩阵存储多个彩色图像。以下是一些示例,假设您在for循环中进行了一些处理。


灰度图像

首先声明一个3D矩阵,其中前两个维度是您正在处理的任何图像的行和列。您需要确保所有图像共享相同的行和列,因为MATLAB不支持不均匀的多维矩阵。因此,假设我们有N张图片,我们将rowscols作为定义的单张图片的行和列。我还假设您的图片以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};

注意与普通矩阵相比,访问单元阵列的区别。您可以使用{}大括号。使用()设计用于索引单元阵列并执行切片(即访问整组单元并将它们复制到新的单元阵列中)。如果您想要实际图片本身,请使用{}