2014-08-31 271 views
-1

我想对循环中的图像做一些矩阵运算,我想单独存储每个合成图像矩阵。但是我很困惑,如果它可能在Matlab中声明和使用一个变量作为像C(int array[r][c][n])这样的矩阵数组。请指教。矩阵矩阵在Matlab中的数组?

+1

当然,这是..你有没有考虑阅读手册,但(没有进攻,真的)? - >搜索“多维数组” – fuesika 2014-08-31 00:38:12

回答

0

您可以使用3D矩阵来存储多个灰度图像或4D矩阵来存储多个彩色图像。这里有几个例子,假设你在for循环中做了一些处理。


灰度图像

首先声明一个三维矩阵,其中前两个维度是你正在处理的任何图象的行和列。您需要确保所有的图像共享相同的行和列,因为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 

要访问我图像,你会简单地做:

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 

要访问我图像,你会简单地做:

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 

要访问我图像,你会简单地做:

im = results{i}; 

注意区别在访问单元阵列相比,一个正常的矩阵。您改用大括号{}。使用()设计用于索引单元阵列并执行切片(即访问一大堆单元并将它们复制到新单元阵列中)。如果您想要实际图像本身,请使用{}

+0

单元阵列是另一种选择。 – 2014-08-31 04:36:02

+1

@ ParagS.Chandakkar - 我添加了一些关于单元阵列的东西。谢谢 – rayryeng 2014-08-31 04:44:50