2010-03-09 17 views
7

這裏的多個圖像是期望的工作流程:載入在MATLAB

  • 欲100倍的圖像加載到MATLAB工作區
  • 運行上的圖像
  • 保存我的輸出一堆我的代碼(輸出由我的代碼返回是一個整數陣列)在一個新的陣列

到最後,我應該有一個數據結構存儲圖像1-100代碼的輸出。

我該怎麼做呢?

回答

4

假設你的圖像在一個連續的命名方式,你可以這樣做:

N = 100 
IMAGES = cell(1,N); 
FNAMEFMT = 'image_%d.png'; 

% Load images 
for i=1:N 
    IMAGES{i} = imread(sprintf(FNAMEFMT, i)); 
end 

% Run code 
RESULT = cell(1,N); 

for i=1:N 
    RESULT{i} = someImageProcessingFunction(IMAGES{i}); 
end 

單元陣列RESULT則包含每個圖像的輸出。

請注意,根據圖像的大小,預取圖像可能會導致內存不足。

8

如果您知道所在目錄的名稱,或者如果您轉到該目錄,請使用dir獲取映像名稱列表。

現在,它只是一個for循環加載圖像。將圖像存儲在單元陣列中。例如...

D = dir('*.jpg'); 
imcell = cell(1,numel(D)); 
for i = 1:numel(D) 
    imcell{i} = imread(D(i).name); 
end 

請注意這100個圖像會佔用太多的內存。例如,如果是uint8 RGB值,則單個1Kx1K圖像需要3兆字節才能存儲。這似乎不是一個巨大的數額。

但是,這些圖像中的100個將需要300 MB的RAM。真正的問題是如果您對這些映像的操作將它們變成雙打,那麼它們現在將佔用2.4 GIGA內存。這會很快耗盡你擁有的RAM數量,特別是如果你不使用64位版本的MATLAB。

4

正如很多人所說,這可能會相當大。完成後是否有理由在記憶中需要所有這些內容?當你完成它們時,你可以將單個結果寫成文件嗎?這樣在給定的時間內,你永遠不會有超過內存中的輸入和輸出圖像?

IMWRITE在你完成後很容易讓他們失去記憶。