2013-06-05 87 views
1

我在MATLAB中導入了一組圖像,並將它們轉換爲灰度。我現在必須創建一個圖像堆棧,「灰度圖像的3D矩陣」。在此之後,我必須通過「圖像堆棧的每一層的雙平均值」來創建一維圖像強度數組。這裏是我的代碼迄今(我只導入一些圖片):在MATLAB中創建圖像堆棧

for i=139:141 

string2 = num2str(i); 

% Concatenate several strings, produce file name 
str = [string, string2, string3]; 

% Read image 
a = imread(str); 

% Get image dimensions 
size(a) 

% Convert to grayscale 
b = rgb2gray(a); 

'大小(一)' 產量 '1728 X 2592×3'。所有圖像都是如此。我想知道如何創建灰度圖像的3D矩陣,我想知道如何創建上面提到的一維圖像數組。我猜想,也許是不正確的,即「雙指」是指

mean(mean(...)). 

對於3D矩陣,我有

% Pre-allocate 3D matrix 
ImStack = zeros(1728, 2592, 3, class(b)); 

% Add images to ImStack 
ImStack(:,:,1) = b; 

在此之前的模板我在MathWorks的幫助論壇中發現,

b =零(2000,2000,number_of_images,類(a));

b(:,:,1)= a;

但是,我不確定如何繼續創建1D圖像強度數組。您的建議將不勝感激。謝謝。

回答

5

你的代碼是最有效的方式。然而,在此行的一個問題:

ImStack(:,:,1) = b; 

這會將每幀圖像的圖像堆棧的第一架飛機,它會覆蓋在相同的位置是最後一個。您需要使用不同的指標爲每個圖像,像這樣:

ImStack(:,:,i-138) = b; % subtract 138 because i starts at 139 in your code 

完成後,你可以沿着第三維均很容易找到平均值:

ImMean = mean(ImStack,3); 

另外一個注意:如果您有太多的圖像,創建一個一次保存所有圖像的堆棧可能會導致內存不足。提出平均值的另一種方法是以運行總和添加每個圖像,最後除以圖像總數。

+0

太棒了!非常感謝nhowe,這個作品非常完美。再次感謝你。 – scimaks