2014-08-31 270 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